-
Notifications
You must be signed in to change notification settings - Fork 0
fix: replace backslash with forward slash in /generate-image command #46
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
4a33cf2
ea41103
a45218c
84e9d5c
63c9d76
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,55 @@ | ||
| { | ||
| "$schema": "https://github.com/Delqhi/upgraded-opencode-stack/blob/main/schemas/team-config.schema.json", | ||
| "team_id": "team-coding-agents", | ||
| "name": "Team Coding Agents (6 dedicated repos)", | ||
| "description": "6 dedicated A2A Coder Agents with individual GitHub repos — split from monolithic OpenSIN-Code for isolated deployments, independent versioning, and crash-storm protection. Established after BUG-OCI-001 (OCI VM disk-full incident, 2026-04-16).", | ||
| "manager": "A2A-SIN-Zeus", | ||
| "primary_model": "google/antigravity-claude-sonnet-4-6", | ||
| "fallback_models": [ | ||
| "openai/gpt-5.4", | ||
| "google/antigravity-gemini-3.1-pro", | ||
| "qwen/coder-model" | ||
| ], | ||
| "established": "2026-04-17", | ||
| "bug_references": [ | ||
| "BUG-OCI-001" | ||
| ], | ||
| "members": { | ||
| "A2A-SIN-Code-Backend": { | ||
| "github": "https://github.com/OpenSIN-AI/A2A-SIN-Code-Backend", | ||
| "port": 7863, | ||
| "purpose": "Backend specialists — Server, OracleCloud, APIs", | ||
| "specialization": "backend-api-server" | ||
| }, | ||
| "A2A-SIN-Code-Command": { | ||
| "github": "https://github.com/OpenSIN-AI/A2A-SIN-Code-Command", | ||
| "port": 7861, | ||
| "purpose": "Command/CLI agents — shell, automation, scripting", | ||
| "specialization": "cli-automation" | ||
| }, | ||
| "A2A-SIN-Code-Frontend": { | ||
| "github": "https://github.com/OpenSIN-AI/A2A-SIN-Code-Frontend", | ||
| "port": 7865, | ||
| "purpose": "Frontend specialists — UI/UX, React, CSS", | ||
| "specialization": "frontend-ui-ux" | ||
| }, | ||
| "A2A-SIN-Code-Fullstack": { | ||
| "github": "https://github.com/OpenSIN-AI/A2A-SIN-Code-Fullstack", | ||
| "port": 7864, | ||
| "purpose": "Fullstack specialists — end-to-end implementations", | ||
| "specialization": "fullstack-end-to-end" | ||
| }, | ||
| "A2A-SIN-Code-Plugin": { | ||
| "github": "https://github.com/OpenSIN-AI/A2A-SIN-Code-Plugin", | ||
| "port": 7860, | ||
| "purpose": "Plugin developers — MCPs, integrations, auth", | ||
| "specialization": "plugins-mcps-integrations" | ||
| }, | ||
| "A2A-SIN-Code-Tool": { | ||
| "github": "https://github.com/OpenSIN-AI/A2A-SIN-Code-Tool", | ||
| "port": 7862, | ||
| "purpose": "Tool builders — CLI utilities, external integrations", | ||
| "specialization": "cli-utilities-external-tools" | ||
| } | ||
| } | ||
| } | ||
|
Comment on lines
+1
to
+55
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Clarify the relationship between PR title and file content. The PR title indicates a fix for "replace backslash with forward slash in /generate-image command," but this file ( Please verify:
🤖 Prompt for AI Agents |
||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -497,6 +497,18 @@ | |||||||||||||||||
| ], | ||||||||||||||||||
| "enabled": true | ||||||||||||||||||
| }, | ||||||||||||||||||
| "sin-box-storage": { | ||||||||||||||||||
| "type": "local", | ||||||||||||||||||
| "command": [ | ||||||||||||||||||
| "python3", | ||||||||||||||||||
| "/Users/jeremy/dev/A2A-SIN-Box-Storage/scripts/mcp-box-storage.py" | ||||||||||||||||||
| ], | ||||||||||||||||||
| "environment": { | ||||||||||||||||||
| "BOX_STORAGE_URL": "http://room-09-box-storage:3000", | ||||||||||||||||||
| "BOX_STORAGE_API_KEY": "${BOX_STORAGE_API_KEY}" | ||||||||||||||||||
| }, | ||||||||||||||||||
|
Comment on lines
+506
to
+509
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chain🌐 Web query:
💡 Result: The supported syntax for environment variable references inside mcp..environment values in OpenCode CLI's opencode.json is {env:VAR}. OpenCode's configuration files support variable substitution throughout, including in MCP configurations. The official documentation explicitly states: "Use {env:VARIABLE_NAME} to substitute environment variables." Examples show this syntax used in MCP URLs, headers, and command args (e.g., --api-key "{env:CONTEXT7_API_KEY}"), and since environment values are strings processed the same way, it applies there. No sources mention ${VAR} as supported syntax. Hardcoded string values are shown in basic examples (e.g., "MY_ENV_VAR": "my_env_var_value"), but the general variable substitution mechanism uses {env:VAR}. This is confirmed across official config docs, MCP server docs, and GitHub issues/discussions where {env:VAR} is used successfully in MCP contexts. Citations:
Fix env variable interpolation syntax for MCP API key. At Line 508, Fix "environment": {
"BOX_STORAGE_URL": "http://room-09-box-storage:3000",
- "BOX_STORAGE_API_KEY": "${BOX_STORAGE_API_KEY}"
+ "BOX_STORAGE_API_KEY": "{env:BOX_STORAGE_API_KEY}"
},📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||
| "enabled": true | ||||||||||||||||||
| }, | ||||||||||||||||||
| "webauto-nodriver": { | ||||||||||||||||||
| "type": "local", | ||||||||||||||||||
| "command": [ | ||||||||||||||||||
|
|
||||||||||||||||||
| Original file line number | Diff line number | Diff line change | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,71 @@ | ||||||||||||||
| # Governance Contract Templates | ||||||||||||||
|
|
||||||||||||||
| > **Canonical templates for sovereign repo governance across the OpenSIN fleet.** | ||||||||||||||
| > Version: 2026.04.17 | Issue: upgraded-opencode-stack#26 | ||||||||||||||
|
|
||||||||||||||
| ## Overview | ||||||||||||||
|
|
||||||||||||||
| This directory contains **concrete template instances** that any A2A repo can copy to bootstrap its governance stack. The corresponding JSON Schemas live in the parent `templates/` directory. | ||||||||||||||
|
|
||||||||||||||
| ## Files | ||||||||||||||
|
|
||||||||||||||
| | File | Purpose | Copy To | | ||||||||||||||
| |------|---------|---------| | ||||||||||||||
| | `repo-governance.template.json` | Branch protection, merge rules, fail-closed semantics | `governance/repo-governance.json` | | ||||||||||||||
| | `pr-watcher.template.json` | PR review automation, credential scanning, escalation | `governance/pr-watcher.json` | | ||||||||||||||
| | `platform-registry.template.json` | Platform intake registry with fail-closed rules | `platforms/registry.json` | | ||||||||||||||
|
|
||||||||||||||
| ## Usage | ||||||||||||||
|
|
||||||||||||||
| ### For New Repos (via Factory) | ||||||||||||||
|
|
||||||||||||||
| The factory (`create-sin-a2a-agent.mjs`) reads `Template-SIN-Agent/required-files.manifest.json` and copies these templates automatically during repo generation, substituting `{{REPO_SLUG}}` with the actual agent slug. | ||||||||||||||
|
|
||||||||||||||
| ### For Existing Repos (via Backfill) | ||||||||||||||
|
|
||||||||||||||
| ```bash | ||||||||||||||
| # Copy and customize for your repo | ||||||||||||||
| cp templates/governance/repo-governance.template.json governance/repo-governance.json | ||||||||||||||
| cp templates/governance/pr-watcher.template.json governance/pr-watcher.json | ||||||||||||||
| cp templates/governance/platform-registry.template.json platforms/registry.json | ||||||||||||||
|
|
||||||||||||||
| # Replace placeholder with actual repo slug | ||||||||||||||
| sed -i '' 's/{{REPO_SLUG}}/your-agent-slug/g' governance/*.json platforms/*.json | ||||||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
# Verify docs do not contain BSD-only in-place sed syntax without GNU alternative.
# Expected result after fix: either no matches, or both macOS and Linux variants documented.
rg -nP "sed\s+-i\s+''" --type mdRepository: Delqhi/upgraded-opencode-stack Length of output: 188 🏁 Script executed: # Search for other sed usages in documentation
rg "sed\s+" templates/governance/README.md -A 1 -B 1
# Check if there are any other platform-specific notes or patterns in the repo
rg -l "macOS|Linux|GNU|BSD" --type md | head -10
# Look for existing sed patterns in shell scripts or docs
rg "sed\s+-i" --type sh -c 5Repository: Delqhi/upgraded-opencode-stack Length of output: 1102 🏁 Script executed: # Get more context around the sed line in the README
cat -n templates/governance/README.md | sed -n '25,40p'
# Check for any platform-specific guidance in the repo
rg "platform|macOS|Linux|cross-platform" templates/governance/README.md
# Look for .sed alternatives or other sed patterns
rg "\-i\." --type md --type sh | head -10Repository: Delqhi/upgraded-opencode-stack Length of output: 1471 🏁 Script executed: # Check if there are shell scripts in the repo with sed usage patterns
fd -e sh -e bash | head -20 | xargs rg "sed\s+-i" --no-heading -A 0 -B 0
# Check the exact context of the sed command in the README
cat -n templates/governance/README.md | sed -n '32,34p'
# Look for any existing cross-platform handling patterns
rg "platform" templates/governance/README.md --context 2Repository: Delqhi/upgraded-opencode-stack Length of output: 2700 🏁 Script executed: # Check if there's any CI/GitHub Actions that might indicate platform support
fd -e yml -e yaml | xargs grep -l "macos\|ubuntu\|linux" | head -5
# Look for any .sedrc or sed configuration
find . -name ".sed*" -o -name "*sed*rc"
# Check if there's any mention of cross-platform or sed alternatives
rg "cross.platform|gsed|perl.*substitute" --type md --type shRepository: Delqhi/upgraded-opencode-stack Length of output: 544 🏁 Script executed: # Check the CI workflow to see what platform(s) it runs on
cat scripts/ci-workflow-template.yml | head -50
# Look for any OS detection or platform-specific commands in setup
rg "runs-on|runner|uname|darwin" scripts/ci-workflow-template.ymlRepository: Delqhi/upgraded-opencode-stack Length of output: 514 Provide both macOS/BSD and Linux/GNU sed syntax variants in the documentation. The Suggested docs update# Replace placeholder with actual repo slug
-sed -i '' 's/{{REPO_SLUG}}/your-agent-slug/g' governance/*.json platforms/*.json
+# macOS / BSD sed
+sed -i '' 's/{{REPO_SLUG}}/your-agent-slug/g' governance/*.json platforms/*.json
+# Linux / GNU sed
+sed -i 's/{{REPO_SLUG}}/your-agent-slug/g' governance/*.json platforms/*.json📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||
| ``` | ||||||||||||||
|
|
||||||||||||||
| ### Validation | ||||||||||||||
|
|
||||||||||||||
| Validate your governance files against the schemas: | ||||||||||||||
|
|
||||||||||||||
| ```bash | ||||||||||||||
| # Using ajv-cli or similar JSON Schema validator | ||||||||||||||
| ajv validate -s templates/repo-governance.schema.json -d governance/repo-governance.json | ||||||||||||||
| ajv validate -s templates/pr-watcher.schema.json -d governance/pr-watcher.json | ||||||||||||||
| ajv validate -s templates/platform-registry.schema.json -d platforms/registry.json | ||||||||||||||
| ``` | ||||||||||||||
|
|
||||||||||||||
| ## Schema Reference | ||||||||||||||
|
|
||||||||||||||
| | Schema | Location | | ||||||||||||||
| |--------|----------| | ||||||||||||||
| | `repo-governance.schema.json` | `templates/repo-governance.schema.json` | | ||||||||||||||
| | `pr-watcher.schema.json` | `templates/pr-watcher.schema.json` | | ||||||||||||||
| | `platform-registry.schema.json` | `templates/platform-registry.schema.json` | | ||||||||||||||
| | `work-item.schema.json` | `templates/work-item.schema.json` | | ||||||||||||||
|
|
||||||||||||||
| ## Template Variables | ||||||||||||||
|
|
||||||||||||||
| All templates use `{{REPO_SLUG}}` as the primary substitution variable. The factory replaces this with the agent's actual slug during generation. | ||||||||||||||
|
|
||||||||||||||
| ## Relationship to Template-SIN-Agent | ||||||||||||||
|
|
||||||||||||||
| These templates are the **source of truth** for governance file content. `Template-SIN-Agent` contains its own copies (in `governance/`, `platforms/`) but those are generated FROM these templates. When updating governance contracts, update HERE first, then propagate to Template-SIN-Agent. | ||||||||||||||
|
|
||||||||||||||
| ## Fail-Closed Rules | ||||||||||||||
|
|
||||||||||||||
| All governance contracts follow fail-closed semantics: | ||||||||||||||
| - Unknown check results → **block** (not pass) | ||||||||||||||
| - Missing required files → **block merge** | ||||||||||||||
| - Credential leaks → **block merge immediately** | ||||||||||||||
| - Unregistered platforms → **blocked** (no implicit access) | ||||||||||||||
| - CI runner timeout → **block** (not skip) | ||||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| { | ||
| "$comment": "Concrete template instance — copy this file to platforms/registry.json in any A2A repo and replace {{REPO_SLUG}}.", | ||
| "$schema": "https://opencode.local/templates/platform-registry.schema.json", | ||
| "version": "2026.04.17", | ||
| "platforms": [ | ||
| { | ||
| "id": "github-issues", | ||
| "name": "GitHub Issues", | ||
| "category": "issue-tracker", | ||
| "enabled": true, | ||
| "status": "active", | ||
| "intakeMode": "webhook", | ||
| "webhookPath": "/webhooks/github", | ||
| "signatureRequired": true, | ||
| "authRef": "env:GITHUB_WEBHOOK_SECRET", | ||
| "baseUrl": "https://api.github.com", | ||
| "eventTypes": ["issues.opened", "issues.edited", "issues.labeled"], | ||
| "normalizer": "n8n-workflows/inbound-intake.json", | ||
| "dedupeKeyTemplate": "github:{{REPO_SLUG}}:issue:{{externalId}}", | ||
| "defaultRepo": "OpenSIN-AI/{{REPO_SLUG}}", | ||
| "defaultLabels": ["inbound", "github"], | ||
| "watcherRequired": true, | ||
| "watcherConfigRef": "governance/pr-watcher.json", | ||
| "riskLevel": "low", | ||
| "automationPolicy": "issue_plus_pr", | ||
| "allowedActions": ["create_issue", "update_issue", "create_branch", "create_pr"], | ||
| "forbiddenActions": ["force_push", "delete_branch_main"], | ||
| "evidenceRequired": false, | ||
| "retentionDays": 365, | ||
| "notes": "Default platform for all A2A repos. GitHub Issues are the canonical intake surface." | ||
| } | ||
| ] | ||
| } |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,33 @@ | ||||||
| { | ||||||
| "$comment": "Concrete template instance — copy this file to governance/pr-watcher.json in any A2A repo and replace {{REPO_SLUG}}.", | ||||||
| "$schema": "https://opencode.local/templates/pr-watcher.schema.json", | ||||||
| "enabled": true, | ||||||
| "repo": "OpenSIN-AI/{{REPO_SLUG}}", | ||||||
| "prSource": "all", | ||||||
| "ignoreAuthors": [], | ||||||
| "ignoreBots": false, | ||||||
| "noisePrefixes": ["chore(deps):", "ci:"], | ||||||
| "noiseSubstrings": ["bump version", "auto-generated"], | ||||||
| "watcherScript": "scripts/watch-pr-feedback.sh", | ||||||
| "followupCommand": "gh pr review --approve", | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Avoid defaulting to unconditional PR approval in shared governance templates.
🔧 Safer default- "followupCommand": "gh pr review --approve",
+ "followupCommand": "gh pr review --comment --body \"Auto-review completed; manual approval required.\"",📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||
| "stateDir": ".pr-watcher-state", | ||||||
| "summaryFile": ".pr-watcher-state/summary.json", | ||||||
| "logFile": ".pr-watcher-state/watcher.log", | ||||||
| "reviewPolicy": { | ||||||
| "autoReviewEnabled": true, | ||||||
| "autoReviewModel": "opencode run --format json", | ||||||
| "credentialScanEnabled": true, | ||||||
| "credentialPatterns": [ | ||||||
| "GOOGLE_API_KEY", "OPENAI_API_KEY", "A2A_FLEET_TOKEN", | ||||||
| "sk-", "ghp_", "gho_", "Bearer ", "password", "secret" | ||||||
| ], | ||||||
| "requiredFilesCheckEnabled": true, | ||||||
| "requiredFilesManifest": "required-files.manifest.json" | ||||||
| }, | ||||||
| "escalation": { | ||||||
| "staleAfterHours": 48, | ||||||
| "abandonedAfterDays": 7, | ||||||
| "telegramBot": "sin-telegrambot", | ||||||
| "telegramChannel": "fleet-alerts" | ||||||
| } | ||||||
| } | ||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,31 @@ | ||
| { | ||
| "$comment": "Concrete template instance — copy this file to governance/repo-governance.json in any A2A repo and replace {{REPO_SLUG}}.", | ||
| "$schema": "https://opencode.local/templates/repo-governance.schema.json", | ||
| "repo": "{{REPO_SLUG}}", | ||
| "issueFirstRequired": true, | ||
| "prWatcherRequired": true, | ||
| "strictDispatchMatrixRequired": false, | ||
| "platformRegistryRef": "platforms/registry.json", | ||
| "prWatcherConfigRef": "governance/pr-watcher.json", | ||
| "coderDispatchMatrixRef": null, | ||
| "workItemSchemaRef": "https://opencode.local/templates/work-item.schema.json", | ||
| "defaultLabels": ["inbound", "a2a"], | ||
| "automationFlow": [ | ||
| "1. External platform sends work via webhook/poller", | ||
| "2. n8n normalizes payload to work_item schema", | ||
| "3. GitHub issue created/updated in target repo", | ||
| "4. Agent picks up issue, creates branch + PR", | ||
| "5. PR Watcher validates: required files, credential scan, build check", | ||
| "6. On approval: squash merge, auto-delete branch", | ||
| "7. Post-merge verification: build, agent card, fleet validator" | ||
| ], | ||
| "failClosedRules": [ | ||
| "Unregistered platforms are blocked — no implicit access", | ||
| "Missing webhook auth blocks intake", | ||
| "Missing critical required files blocks merge", | ||
| "Credential leak in PR diff blocks merge immediately", | ||
| "Unknown check result blocks merge (fail-closed default)", | ||
| "CI runner timeout blocks merge" | ||
| ], | ||
| "trackingIssue": null | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🌐 Web query:
Are "google/antigravity-claude-sonnet-4-6" and "google/antigravity-gemini-3.1-pro" valid Google AI model identifiers as of April 2026?💡 Result:
No, "google/antigravity-claude-sonnet-4-6" and "google/antigravity-gemini-3.1-pro" are not valid Google AI model identifiers as of April 2026. They appear to be provider-prefixed model IDs used in third-party tools like OpenClaw that integrate with Google's Antigravity IDE/platform, which hosts models such as claude-sonnet-4-6 and gemini-3.1-pro (or variants like gemini-3.1-pro-high/low). Official Google AI model identifiers, per Vertex AI and Gemini documentation, use formats like "gemini-3.1-pro" or "claude-sonnet-4-5" without the "google/antigravity-" prefix, as Antigravity acts as a unified gateway for models from Google, Anthropic, etc.
Citations:
Confirm these model identifiers match your deployment environment.
These model IDs use non-standard formatting:
google/antigravity-claude-sonnet-4-6andgoogle/antigravity-gemini-3.1-proappear to be OpenClaw/Antigravity platform-specific identifiers rather than standard Google AI endpointsopenai/gpt-5.4has an unusually high version numberIf these are intentional for your deployment, confirm they're correct. If deploying with standard APIs, they should be updated to use official model identifiers (e.g.,
gemini-2.0-flash,gpt-4-turbo).🤖 Prompt for AI Agents