@rryando/arcs 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +448 -0
- package/dist/cli/arcs-orchestrate-caveman.d.ts +16 -0
- package/dist/cli/arcs-orchestrate-caveman.d.ts.map +1 -0
- package/dist/cli/arcs-orchestrate-caveman.js +109 -0
- package/dist/cli/arcs-orchestrate-caveman.js.map +1 -0
- package/dist/cli/arcs-orchestrate.d.ts +2 -0
- package/dist/cli/arcs-orchestrate.d.ts.map +1 -0
- package/dist/cli/arcs-orchestrate.js +431 -0
- package/dist/cli/arcs-orchestrate.js.map +1 -0
- package/dist/cli/arg-parser.d.ts +20 -0
- package/dist/cli/arg-parser.d.ts.map +1 -0
- package/dist/cli/arg-parser.js +216 -0
- package/dist/cli/arg-parser.js.map +1 -0
- package/dist/cli/brief-renderer.d.ts +32 -0
- package/dist/cli/brief-renderer.d.ts.map +1 -0
- package/dist/cli/brief-renderer.js +67 -0
- package/dist/cli/brief-renderer.js.map +1 -0
- package/dist/cli/bundle-installer.d.ts +77 -0
- package/dist/cli/bundle-installer.d.ts.map +1 -0
- package/dist/cli/bundle-installer.js +328 -0
- package/dist/cli/bundle-installer.js.map +1 -0
- package/dist/cli/command-registry.d.ts +52 -0
- package/dist/cli/command-registry.d.ts.map +1 -0
- package/dist/cli/command-registry.js +68 -0
- package/dist/cli/command-registry.js.map +1 -0
- package/dist/cli/commands/batch.d.ts +2 -0
- package/dist/cli/commands/batch.d.ts.map +1 -0
- package/dist/cli/commands/batch.js +307 -0
- package/dist/cli/commands/batch.js.map +1 -0
- package/dist/cli/commands/brief.d.ts +2 -0
- package/dist/cli/commands/brief.d.ts.map +1 -0
- package/dist/cli/commands/brief.js +146 -0
- package/dist/cli/commands/brief.js.map +1 -0
- package/dist/cli/commands/bundle.d.ts +2 -0
- package/dist/cli/commands/bundle.d.ts.map +1 -0
- package/dist/cli/commands/bundle.js +90 -0
- package/dist/cli/commands/bundle.js.map +1 -0
- package/dist/cli/commands/dependency.d.ts +2 -0
- package/dist/cli/commands/dependency.d.ts.map +1 -0
- package/dist/cli/commands/dependency.js +260 -0
- package/dist/cli/commands/dependency.js.map +1 -0
- package/dist/cli/commands/diagnostics.d.ts +2 -0
- package/dist/cli/commands/diagnostics.d.ts.map +1 -0
- package/dist/cli/commands/diagnostics.js +91 -0
- package/dist/cli/commands/diagnostics.js.map +1 -0
- package/dist/cli/commands/diagram.d.ts +2 -0
- package/dist/cli/commands/diagram.d.ts.map +1 -0
- package/dist/cli/commands/diagram.js +305 -0
- package/dist/cli/commands/diagram.js.map +1 -0
- package/dist/cli/commands/done.d.ts +2 -0
- package/dist/cli/commands/done.d.ts.map +1 -0
- package/dist/cli/commands/done.js +140 -0
- package/dist/cli/commands/done.js.map +1 -0
- package/dist/cli/commands/graph.d.ts +2 -0
- package/dist/cli/commands/graph.d.ts.map +1 -0
- package/dist/cli/commands/graph.js +105 -0
- package/dist/cli/commands/graph.js.map +1 -0
- package/dist/cli/commands/index.d.ts +21 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +22 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/knowledge-search.d.ts +2 -0
- package/dist/cli/commands/knowledge-search.d.ts.map +1 -0
- package/dist/cli/commands/knowledge-search.js +43 -0
- package/dist/cli/commands/knowledge-search.js.map +1 -0
- package/dist/cli/commands/knowledge.d.ts +2 -0
- package/dist/cli/commands/knowledge.d.ts.map +1 -0
- package/dist/cli/commands/knowledge.js +416 -0
- package/dist/cli/commands/knowledge.js.map +1 -0
- package/dist/cli/commands/loop.d.ts +2 -0
- package/dist/cli/commands/loop.d.ts.map +1 -0
- package/dist/cli/commands/loop.js +192 -0
- package/dist/cli/commands/loop.js.map +1 -0
- package/dist/cli/commands/maintenance.d.ts +2 -0
- package/dist/cli/commands/maintenance.d.ts.map +1 -0
- package/dist/cli/commands/maintenance.js +231 -0
- package/dist/cli/commands/maintenance.js.map +1 -0
- package/dist/cli/commands/next.d.ts +2 -0
- package/dist/cli/commands/next.d.ts.map +1 -0
- package/dist/cli/commands/next.js +116 -0
- package/dist/cli/commands/next.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +2 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +340 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/project-updates.d.ts +2 -0
- package/dist/cli/commands/project-updates.d.ts.map +1 -0
- package/dist/cli/commands/project-updates.js +243 -0
- package/dist/cli/commands/project-updates.js.map +1 -0
- package/dist/cli/commands/project.d.ts +2 -0
- package/dist/cli/commands/project.d.ts.map +1 -0
- package/dist/cli/commands/project.js +362 -0
- package/dist/cli/commands/project.js.map +1 -0
- package/dist/cli/commands/remember.d.ts +2 -0
- package/dist/cli/commands/remember.d.ts.map +1 -0
- package/dist/cli/commands/remember.js +70 -0
- package/dist/cli/commands/remember.js.map +1 -0
- package/dist/cli/commands/status.d.ts +2 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +104 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/task.d.ts +6 -0
- package/dist/cli/commands/task.d.ts.map +1 -0
- package/dist/cli/commands/task.js +361 -0
- package/dist/cli/commands/task.js.map +1 -0
- package/dist/cli/commands/utility.d.ts +9 -0
- package/dist/cli/commands/utility.d.ts.map +1 -0
- package/dist/cli/commands/utility.js +302 -0
- package/dist/cli/commands/utility.js.map +1 -0
- package/dist/cli/config.d.ts +42 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +134 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/dag-commands.d.ts +7 -0
- package/dist/cli/dag-commands.d.ts.map +1 -0
- package/dist/cli/dag-commands.js +152 -0
- package/dist/cli/dag-commands.js.map +1 -0
- package/dist/cli/diagram-renderer.d.ts +26 -0
- package/dist/cli/diagram-renderer.d.ts.map +1 -0
- package/dist/cli/diagram-renderer.js +118 -0
- package/dist/cli/diagram-renderer.js.map +1 -0
- package/dist/cli/help-generator.d.ts +21 -0
- package/dist/cli/help-generator.d.ts.map +1 -0
- package/dist/cli/help-generator.js +100 -0
- package/dist/cli/help-generator.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +95 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/instructions.d.ts +53 -0
- package/dist/cli/instructions.d.ts.map +1 -0
- package/dist/cli/instructions.js +219 -0
- package/dist/cli/instructions.js.map +1 -0
- package/dist/cli/lean-output.d.ts +15 -0
- package/dist/cli/lean-output.d.ts.map +1 -0
- package/dist/cli/lean-output.js +66 -0
- package/dist/cli/lean-output.js.map +1 -0
- package/dist/cli/md-renderer.d.ts +6 -0
- package/dist/cli/md-renderer.d.ts.map +1 -0
- package/dist/cli/md-renderer.js +396 -0
- package/dist/cli/md-renderer.js.map +1 -0
- package/dist/cli/output-envelope.d.ts +15 -0
- package/dist/cli/output-envelope.d.ts.map +1 -0
- package/dist/cli/output-envelope.js +61 -0
- package/dist/cli/output-envelope.js.map +1 -0
- package/dist/cli/setup.d.ts +11 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +415 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/status-dashboard.d.ts +5 -0
- package/dist/cli/status-dashboard.d.ts.map +1 -0
- package/dist/cli/status-dashboard.js +248 -0
- package/dist/cli/status-dashboard.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/retrieval/bm25.d.ts +23 -0
- package/dist/retrieval/bm25.d.ts.map +1 -0
- package/dist/retrieval/bm25.js +92 -0
- package/dist/retrieval/bm25.js.map +1 -0
- package/dist/retrieval/cross-project-search.d.ts +30 -0
- package/dist/retrieval/cross-project-search.d.ts.map +1 -0
- package/dist/retrieval/cross-project-search.js +109 -0
- package/dist/retrieval/cross-project-search.js.map +1 -0
- package/dist/retrieval/graph-builder.d.ts +6 -0
- package/dist/retrieval/graph-builder.d.ts.map +1 -0
- package/dist/retrieval/graph-builder.js +196 -0
- package/dist/retrieval/graph-builder.js.map +1 -0
- package/dist/retrieval/graph-cache.d.ts +15 -0
- package/dist/retrieval/graph-cache.d.ts.map +1 -0
- package/dist/retrieval/graph-cache.js +66 -0
- package/dist/retrieval/graph-cache.js.map +1 -0
- package/dist/retrieval/graph-invalidate.d.ts +18 -0
- package/dist/retrieval/graph-invalidate.d.ts.map +1 -0
- package/dist/retrieval/graph-invalidate.js +23 -0
- package/dist/retrieval/graph-invalidate.js.map +1 -0
- package/dist/retrieval/graph-retrieval.d.ts +24 -0
- package/dist/retrieval/graph-retrieval.d.ts.map +1 -0
- package/dist/retrieval/graph-retrieval.js +165 -0
- package/dist/retrieval/graph-retrieval.js.map +1 -0
- package/dist/retrieval/graph-traverse.d.ts +3 -0
- package/dist/retrieval/graph-traverse.d.ts.map +1 -0
- package/dist/retrieval/graph-traverse.js +53 -0
- package/dist/retrieval/graph-traverse.js.map +1 -0
- package/dist/retrieval/graph-types.d.ts +37 -0
- package/dist/retrieval/graph-types.d.ts.map +1 -0
- package/dist/retrieval/graph-types.js +12 -0
- package/dist/retrieval/graph-types.js.map +1 -0
- package/dist/retrieval/index-builder.d.ts +21 -0
- package/dist/retrieval/index-builder.d.ts.map +1 -0
- package/dist/retrieval/index-builder.js +94 -0
- package/dist/retrieval/index-builder.js.map +1 -0
- package/dist/retrieval/knowledge-selection.d.ts +7 -0
- package/dist/retrieval/knowledge-selection.d.ts.map +1 -0
- package/dist/retrieval/knowledge-selection.js +80 -0
- package/dist/retrieval/knowledge-selection.js.map +1 -0
- package/dist/retrieval/task-scoped.d.ts +23 -0
- package/dist/retrieval/task-scoped.d.ts.map +1 -0
- package/dist/retrieval/task-scoped.js +51 -0
- package/dist/retrieval/task-scoped.js.map +1 -0
- package/dist/utils/content-assembly.d.ts +44 -0
- package/dist/utils/content-assembly.d.ts.map +1 -0
- package/dist/utils/content-assembly.js +101 -0
- package/dist/utils/content-assembly.js.map +1 -0
- package/dist/utils/dag.d.ts +28 -0
- package/dist/utils/dag.d.ts.map +1 -0
- package/dist/utils/dag.js +68 -0
- package/dist/utils/dag.js.map +1 -0
- package/dist/utils/diagram-generator.d.ts +17 -0
- package/dist/utils/diagram-generator.d.ts.map +1 -0
- package/dist/utils/diagram-generator.js +38 -0
- package/dist/utils/diagram-generator.js.map +1 -0
- package/dist/utils/errors.d.ts +40 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +83 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/file-lock.d.ts +13 -0
- package/dist/utils/file-lock.d.ts.map +1 -0
- package/dist/utils/file-lock.js +80 -0
- package/dist/utils/file-lock.js.map +1 -0
- package/dist/utils/git.d.ts +14 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +56 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/graphify-knowledge.d.ts +6 -0
- package/dist/utils/graphify-knowledge.d.ts.map +1 -0
- package/dist/utils/graphify-knowledge.js +60 -0
- package/dist/utils/graphify-knowledge.js.map +1 -0
- package/dist/utils/graphify.d.ts +49 -0
- package/dist/utils/graphify.d.ts.map +1 -0
- package/dist/utils/graphify.js +306 -0
- package/dist/utils/graphify.js.map +1 -0
- package/dist/utils/json-schemas.d.ts +723 -0
- package/dist/utils/json-schemas.d.ts.map +1 -0
- package/dist/utils/json-schemas.js +147 -0
- package/dist/utils/json-schemas.js.map +1 -0
- package/dist/utils/json.d.ts +15 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +39 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/knowledge-store.d.ts +49 -0
- package/dist/utils/knowledge-store.d.ts.map +1 -0
- package/dist/utils/knowledge-store.js +191 -0
- package/dist/utils/knowledge-store.js.map +1 -0
- package/dist/utils/loop-state.d.ts +51 -0
- package/dist/utils/loop-state.d.ts.map +1 -0
- package/dist/utils/loop-state.js +123 -0
- package/dist/utils/loop-state.js.map +1 -0
- package/dist/utils/paths.d.ts +16 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +66 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/plan-store.d.ts +46 -0
- package/dist/utils/plan-store.d.ts.map +1 -0
- package/dist/utils/plan-store.js +184 -0
- package/dist/utils/plan-store.js.map +1 -0
- package/dist/utils/project-documents.d.ts +20 -0
- package/dist/utils/project-documents.d.ts.map +1 -0
- package/dist/utils/project-documents.js +10 -0
- package/dist/utils/project-documents.js.map +1 -0
- package/dist/utils/project-memory.d.ts +16 -0
- package/dist/utils/project-memory.d.ts.map +1 -0
- package/dist/utils/project-memory.js +16 -0
- package/dist/utils/project-memory.js.map +1 -0
- package/dist/utils/project-resolver.d.ts +28 -0
- package/dist/utils/project-resolver.d.ts.map +1 -0
- package/dist/utils/project-resolver.js +119 -0
- package/dist/utils/project-resolver.js.map +1 -0
- package/dist/utils/quick-scan.d.ts +13 -0
- package/dist/utils/quick-scan.d.ts.map +1 -0
- package/dist/utils/quick-scan.js +156 -0
- package/dist/utils/quick-scan.js.map +1 -0
- package/dist/utils/schemas.d.ts +13 -0
- package/dist/utils/schemas.d.ts.map +1 -0
- package/dist/utils/schemas.js +6 -0
- package/dist/utils/schemas.js.map +1 -0
- package/dist/utils/slug.d.ts +10 -0
- package/dist/utils/slug.d.ts.map +1 -0
- package/dist/utils/slug.js +18 -0
- package/dist/utils/slug.js.map +1 -0
- package/dist/utils/stdin.d.ts +6 -0
- package/dist/utils/stdin.d.ts.map +1 -0
- package/dist/utils/stdin.js +25 -0
- package/dist/utils/stdin.js.map +1 -0
- package/dist/utils/storage-utils.d.ts +48 -0
- package/dist/utils/storage-utils.d.ts.map +1 -0
- package/dist/utils/storage-utils.js +175 -0
- package/dist/utils/storage-utils.js.map +1 -0
- package/dist/utils/task-store.d.ts +49 -0
- package/dist/utils/task-store.d.ts.map +1 -0
- package/dist/utils/task-store.js +178 -0
- package/dist/utils/task-store.js.map +1 -0
- package/dist/utils/template.d.ts +15 -0
- package/dist/utils/template.d.ts.map +1 -0
- package/dist/utils/template.js +27 -0
- package/dist/utils/template.js.map +1 -0
- package/dist/utils/tool-response.d.ts +37 -0
- package/dist/utils/tool-response.d.ts.map +1 -0
- package/dist/utils/tool-response.js +44 -0
- package/dist/utils/tool-response.js.map +1 -0
- package/dist/utils/workflow-policy.d.ts +50 -0
- package/dist/utils/workflow-policy.d.ts.map +1 -0
- package/dist/utils/workflow-policy.js +111 -0
- package/dist/utils/workflow-policy.js.map +1 -0
- package/dist/utils/workspace-match.d.ts +35 -0
- package/dist/utils/workspace-match.d.ts.map +1 -0
- package/dist/utils/workspace-match.js +58 -0
- package/dist/utils/workspace-match.js.map +1 -0
- package/opencode/arcs/.opencode/plugins/arcs.js +348 -0
- package/opencode/arcs/bundle-runtime.json +68 -0
- package/opencode/arcs/manifest.json +279 -0
- package/opencode/arcs/prompts/arcs-docs.txt +124 -0
- package/opencode/arcs/prompts/arcs-orchestrate-caveman.txt +529 -0
- package/opencode/arcs/prompts/arcs-orchestrate.txt +437 -0
- package/opencode/arcs/prompts/code-reviewer.txt +55 -0
- package/opencode/arcs/prompts/devil-advocate.txt +121 -0
- package/opencode/arcs/prompts/docs-researcher.txt +54 -0
- package/opencode/arcs/prompts/oncall-ops.txt +54 -0
- package/opencode/arcs/prompts/qa-analyst.txt +54 -0
- package/opencode/arcs/prompts/software-engineer.txt +48 -0
- package/opencode/arcs/prompts/system-architect.txt +60 -0
- package/opencode/arcs/prompts/tech-architect.txt +54 -0
- package/opencode/arcs/skills/brainstorming/SKILL.md +144 -0
- package/opencode/arcs/skills/brainstorming/scripts/frame-template.html +214 -0
- package/opencode/arcs/skills/brainstorming/scripts/helper.js +88 -0
- package/opencode/arcs/skills/brainstorming/scripts/server.js +338 -0
- package/opencode/arcs/skills/brainstorming/scripts/start-server.sh +137 -0
- package/opencode/arcs/skills/brainstorming/scripts/stop-server.sh +31 -0
- package/opencode/arcs/skills/brainstorming/spec-document-reviewer-prompt.md +50 -0
- package/opencode/arcs/skills/brainstorming/visual-companion.md +277 -0
- package/opencode/arcs/skills/caveman-commit/SKILL.md +51 -0
- package/opencode/arcs/skills/code-agent/SKILL.md +58 -0
- package/opencode/arcs/skills/deep-pr-review/SKILL.md +191 -0
- package/opencode/arcs/skills/deep-pr-review/graphify-diff.md +102 -0
- package/opencode/arcs/skills/deep-pr-review/review-template.md +69 -0
- package/opencode/arcs/skills/executing-plans/SKILL.md +91 -0
- package/opencode/arcs/skills/init-project/SKILL.md +150 -0
- package/opencode/arcs/skills/quick-dev/SKILL.md +47 -0
- package/opencode/arcs/skills/requesting-code-review/SKILL.md +47 -0
- package/opencode/arcs/skills/requesting-code-review/code-reviewer.md +179 -0
- package/opencode/arcs/skills/subagent-driven-development/SKILL.md +162 -0
- package/opencode/arcs/skills/subagent-driven-development/code-quality-reviewer-prompt.md +53 -0
- package/opencode/arcs/skills/subagent-driven-development/implementer-prompt.md +148 -0
- package/opencode/arcs/skills/subagent-driven-development/spec-reviewer-prompt.md +85 -0
- package/opencode/arcs/skills/systematic-debugging/SKILL.md +174 -0
- package/opencode/arcs/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/opencode/arcs/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/opencode/arcs/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/opencode/arcs/skills/systematic-debugging/find-polluter.sh +63 -0
- package/opencode/arcs/skills/systematic-debugging/phases-reference.md +168 -0
- package/opencode/arcs/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/opencode/arcs/skills/test-driven-development/SKILL.md +72 -0
- package/opencode/arcs/skills/test-driven-development/tdd-rationalizations-and-examples.md +157 -0
- package/opencode/arcs/skills/test-driven-development/testing-anti-patterns.md +299 -0
- package/opencode/arcs/skills/to-diagram/SKILL.md +235 -0
- package/opencode/arcs/skills/to-diagram/scripts/manage-diagram.mjs +963 -0
- package/opencode/arcs/skills/writing-plans/SKILL.md +179 -0
- package/opencode/arcs/skills/writing-plans/plan-document-reviewer-prompt.md +52 -0
- package/package.json +60 -0
- package/scripts/arcs-cli.mjs +45 -0
- package/skills/explore-dag.md +57 -0
- package/skills/init-project.md +105 -0
- package/skills/orchestrate.md +94 -0
- package/skills/update-docs.md +72 -0
- package/templates/dependency.md.tmpl +9 -0
- package/templates/knowledge.md.tmpl +15 -0
- package/templates/project-meta.json.tmpl +13 -0
- package/templates/project.md.tmpl +11 -0
- package/templates/task.md.tmpl +9 -0
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ARCS plugin for OpenCode.ai
|
|
3
|
+
*
|
|
4
|
+
* Injects ARCS bootstrap context via system prompt transform.
|
|
5
|
+
* Drives loop continuation via CLI delegation (no direct file I/O on DAG).
|
|
6
|
+
* Skills are discovered via OpenCode's native skill tool from symlinked directory.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import path from "path";
|
|
10
|
+
import fs from "fs";
|
|
11
|
+
import os from "os";
|
|
12
|
+
import { execFile } from "child_process";
|
|
13
|
+
import { fileURLToPath } from "url";
|
|
14
|
+
|
|
15
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
16
|
+
|
|
17
|
+
// Simple frontmatter extraction (avoid dependency on skills-core for bootstrap)
|
|
18
|
+
const extractAndStripFrontmatter = (content) => {
|
|
19
|
+
const match = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
|
|
20
|
+
if (!match) return { frontmatter: {}, content };
|
|
21
|
+
|
|
22
|
+
const frontmatterStr = match[1];
|
|
23
|
+
const body = match[2];
|
|
24
|
+
const frontmatter = {};
|
|
25
|
+
|
|
26
|
+
for (const line of frontmatterStr.split("\n")) {
|
|
27
|
+
const colonIdx = line.indexOf(":");
|
|
28
|
+
if (colonIdx > 0) {
|
|
29
|
+
const key = line.slice(0, colonIdx).trim();
|
|
30
|
+
const value = line
|
|
31
|
+
.slice(colonIdx + 1)
|
|
32
|
+
.trim()
|
|
33
|
+
.replace(/^["']|["']$/g, "");
|
|
34
|
+
frontmatter[key] = value;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return { frontmatter, content: body };
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// Normalize a path: trim whitespace, expand ~, resolve to absolute
|
|
42
|
+
const normalizePath = (p, homeDir) => {
|
|
43
|
+
if (!p || typeof p !== "string") return null;
|
|
44
|
+
let normalized = p.trim();
|
|
45
|
+
if (!normalized) return null;
|
|
46
|
+
if (normalized.startsWith("~/")) {
|
|
47
|
+
normalized = path.join(homeDir, normalized.slice(2));
|
|
48
|
+
} else if (normalized === "~") {
|
|
49
|
+
normalized = homeDir;
|
|
50
|
+
}
|
|
51
|
+
return path.resolve(normalized);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
// CLI delegation — single writer pattern (no direct DAG file I/O)
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
|
|
58
|
+
const arcsExec = (args) =>
|
|
59
|
+
new Promise((resolve) => {
|
|
60
|
+
execFile("arcs", args, { timeout: 5000 }, (err, stdout) => {
|
|
61
|
+
if (err) return resolve(null);
|
|
62
|
+
try {
|
|
63
|
+
const result = JSON.parse(stdout);
|
|
64
|
+
return resolve(result?.ok ? result.data : null);
|
|
65
|
+
} catch {
|
|
66
|
+
return resolve(null);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
const loopStatus = () => arcsExec(["loop", "status", "--json"]);
|
|
72
|
+
const loopTick = (slug, session) =>
|
|
73
|
+
arcsExec(["loop", "tick", slug, `--session=${session}`, "--json"]);
|
|
74
|
+
const loopCancel = (slug, session) =>
|
|
75
|
+
arcsExec(["loop", "cancel", slug, `--session=${session}`, "--json"]);
|
|
76
|
+
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
// Continuation prompt builder
|
|
79
|
+
// ---------------------------------------------------------------------------
|
|
80
|
+
|
|
81
|
+
const buildContinuationPrompt = (state) => {
|
|
82
|
+
const maxLabel =
|
|
83
|
+
typeof state.maxIterations === "number" ? String(state.maxIterations) : "unbounded";
|
|
84
|
+
|
|
85
|
+
if (state.strategy === "reset") {
|
|
86
|
+
return `[SYSTEM DIRECTIVE - ARCS LOOP ITERATION ${state.iteration}/${maxLabel}]
|
|
87
|
+
|
|
88
|
+
Start fresh on the following task. Previous attempts did not complete successfully.
|
|
89
|
+
|
|
90
|
+
IMPORTANT:
|
|
91
|
+
- Do NOT rely on previous context or partial work
|
|
92
|
+
- Approach the task from scratch with a clean perspective
|
|
93
|
+
- When FULLY complete, output: <promise>${state.completionPromise}</promise>
|
|
94
|
+
- Do not stop until the task is truly done
|
|
95
|
+
|
|
96
|
+
Task:
|
|
97
|
+
${state.prompt}`;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return `[SYSTEM DIRECTIVE - ARCS LOOP ITERATION ${state.iteration}/${maxLabel}]
|
|
101
|
+
|
|
102
|
+
Your previous attempt did not output the completion promise. Continue working on the task.
|
|
103
|
+
|
|
104
|
+
IMPORTANT:
|
|
105
|
+
- Review your progress so far
|
|
106
|
+
- Continue from where you left off
|
|
107
|
+
- When FULLY complete, output: <promise>${state.completionPromise}</promise>
|
|
108
|
+
- Do not stop until the task is truly done
|
|
109
|
+
|
|
110
|
+
Original task:
|
|
111
|
+
${state.prompt}`;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
// ---------------------------------------------------------------------------
|
|
115
|
+
// Plugin entry
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
|
|
118
|
+
export const ArcsPlugin = async ({ client, directory }) => {
|
|
119
|
+
const inFlightSessions = new Set();
|
|
120
|
+
const homeDir = os.homedir();
|
|
121
|
+
const arcsSkillsDir = path.resolve(__dirname, "../skills/arcs");
|
|
122
|
+
const envConfigDir = normalizePath(process.env.OPENCODE_CONFIG_DIR, homeDir);
|
|
123
|
+
const configDir = envConfigDir || path.join(homeDir, ".config/opencode");
|
|
124
|
+
|
|
125
|
+
// Cache bootstrap content at plugin load (file doesn't change during session)
|
|
126
|
+
const cachedBootstrap = (() => {
|
|
127
|
+
const skillPath = path.join(arcsSkillsDir, "using-superpowers", "SKILL.md");
|
|
128
|
+
if (!fs.existsSync(skillPath)) return null;
|
|
129
|
+
|
|
130
|
+
const fullContent = fs.readFileSync(skillPath, "utf8");
|
|
131
|
+
const { content } = extractAndStripFrontmatter(fullContent);
|
|
132
|
+
|
|
133
|
+
const toolMapping = `**Tool Mapping for OpenCode:**
|
|
134
|
+
When skills reference tools you don't have, substitute OpenCode equivalents:
|
|
135
|
+
- \`TodoWrite\` → \`todowrite\`
|
|
136
|
+
- \`Task\` tool with subagents → Use OpenCode's subagent system (@mention)
|
|
137
|
+
- \`Skill\` tool → OpenCode's native \`skill\` tool
|
|
138
|
+
- \`Read\`, \`Write\`, \`Edit\`, \`Bash\` → Your native tools
|
|
139
|
+
|
|
140
|
+
**Skills location:**
|
|
141
|
+
ARCS skills are in \`${configDir}/skills/arcs/\`
|
|
142
|
+
Use OpenCode's native \`skill\` tool to list and load skills.`;
|
|
143
|
+
|
|
144
|
+
return `<EXTREMELY_IMPORTANT>
|
|
145
|
+
You have ARCS skills loaded.
|
|
146
|
+
|
|
147
|
+
**IMPORTANT: The using-superpowers skill content is included below. It is ALREADY LOADED - you are currently following it. Do NOT use the skill tool to load "using-superpowers" again - that would be redundant.**
|
|
148
|
+
|
|
149
|
+
${content}
|
|
150
|
+
|
|
151
|
+
${toolMapping}
|
|
152
|
+
</EXTREMELY_IMPORTANT>`;
|
|
153
|
+
})();
|
|
154
|
+
|
|
155
|
+
// Cache T0 brief at plugin load — gives every session the operating context
|
|
156
|
+
// without requiring agents to run `arcs brief` manually.
|
|
157
|
+
// NOTE: Stale after long sessions (hours). Agents can call `arcs brief --lean --json`
|
|
158
|
+
// for fresh data when needed. Stale T0 > no T0 for session start orientation.
|
|
159
|
+
const cachedBrief = await (async () => {
|
|
160
|
+
const data = await arcsExec(["brief", "--lean", "--json"]);
|
|
161
|
+
if (!data) return null;
|
|
162
|
+
return `<arcs_context>\n${JSON.stringify(data, null, 2)}\n</arcs_context>`;
|
|
163
|
+
})();
|
|
164
|
+
|
|
165
|
+
return {
|
|
166
|
+
// Use system prompt transform to inject bootstrap (fixes #226 agent reset bug)
|
|
167
|
+
"experimental.chat.system.transform": async (_input, output) => {
|
|
168
|
+
if (cachedBootstrap) {
|
|
169
|
+
(output.system ||= []).push(cachedBootstrap);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Inject T0 operating context so agents start with current focus + next action
|
|
173
|
+
if (cachedBrief) {
|
|
174
|
+
(output.system ||= []).push(cachedBrief);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Inject the workspace directory so ARCS and other agents always know
|
|
178
|
+
// which project directory OpenCode was opened in. This is the reliable
|
|
179
|
+
// source of truth — process.cwd() of MCP servers may differ.
|
|
180
|
+
if (directory) {
|
|
181
|
+
(output.system ||= []).push(`<env>\n Working directory: ${directory}\n</env>`);
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
|
|
185
|
+
event: async ({ event, client }) => {
|
|
186
|
+
const props = event.properties;
|
|
187
|
+
|
|
188
|
+
if (event.type === "session.idle") {
|
|
189
|
+
const sessionID = props?.sessionID;
|
|
190
|
+
if (!sessionID) return;
|
|
191
|
+
if (inFlightSessions.has(sessionID)) return;
|
|
192
|
+
|
|
193
|
+
inFlightSessions.add(sessionID);
|
|
194
|
+
try {
|
|
195
|
+
const status = await loopStatus();
|
|
196
|
+
if (!status?.state?.active) return;
|
|
197
|
+
|
|
198
|
+
const { state } = status;
|
|
199
|
+
const slug = status.slug;
|
|
200
|
+
|
|
201
|
+
// Only handle the loop's session
|
|
202
|
+
if (state.sessionId && state.sessionId !== sessionID) return;
|
|
203
|
+
|
|
204
|
+
// Detect completion in session messages
|
|
205
|
+
let completionDetected = false;
|
|
206
|
+
try {
|
|
207
|
+
const response = await client.session.messages({
|
|
208
|
+
path: { id: sessionID },
|
|
209
|
+
query: { directory },
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
const messages = Array.isArray(response)
|
|
213
|
+
? response
|
|
214
|
+
: response?.data && Array.isArray(response.data)
|
|
215
|
+
? response.data
|
|
216
|
+
: [];
|
|
217
|
+
|
|
218
|
+
const scopedMessages =
|
|
219
|
+
typeof state.messageCountAtStart === "number"
|
|
220
|
+
? messages.slice(state.messageCountAtStart)
|
|
221
|
+
: messages;
|
|
222
|
+
|
|
223
|
+
const assistantMsgs = scopedMessages.filter((m) => m.info?.role === "assistant");
|
|
224
|
+
const pattern = new RegExp(
|
|
225
|
+
`<promise>\\s*${state.completionPromise.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\s*</promise>`,
|
|
226
|
+
"is",
|
|
227
|
+
);
|
|
228
|
+
|
|
229
|
+
for (let i = assistantMsgs.length - 1; i >= 0; i--) {
|
|
230
|
+
const parts = assistantMsgs[i].parts || [];
|
|
231
|
+
for (const part of parts) {
|
|
232
|
+
if (part.type === "text" && part.text && pattern.test(part.text)) {
|
|
233
|
+
completionDetected = true;
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
if (completionDetected) break;
|
|
238
|
+
}
|
|
239
|
+
} catch {}
|
|
240
|
+
|
|
241
|
+
if (completionDetected) {
|
|
242
|
+
await loopCancel(slug, sessionID);
|
|
243
|
+
await client.tui
|
|
244
|
+
?.showToast?.({
|
|
245
|
+
body: {
|
|
246
|
+
title: "ARCS Loop Complete!",
|
|
247
|
+
message: `Task completed after ${state.iteration} iteration(s)`,
|
|
248
|
+
variant: "success",
|
|
249
|
+
duration: 5000,
|
|
250
|
+
},
|
|
251
|
+
})
|
|
252
|
+
.catch(() => {});
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Tick — CLI handles max-iteration check and state mutation atomically
|
|
257
|
+
const tickResult = await loopTick(slug, sessionID);
|
|
258
|
+
if (!tickResult) return; // CLI unreachable or session mismatch
|
|
259
|
+
|
|
260
|
+
if (tickResult.maxReached) {
|
|
261
|
+
await client.tui
|
|
262
|
+
?.showToast?.({
|
|
263
|
+
body: {
|
|
264
|
+
title: "ARCS Loop Stopped",
|
|
265
|
+
message: `Max iterations (${state.maxIterations}) reached without completion`,
|
|
266
|
+
variant: "warning",
|
|
267
|
+
duration: 5000,
|
|
268
|
+
},
|
|
269
|
+
})
|
|
270
|
+
.catch(() => {});
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
const updatedState = tickResult.state;
|
|
275
|
+
|
|
276
|
+
// Show toast
|
|
277
|
+
await client.tui
|
|
278
|
+
?.showToast?.({
|
|
279
|
+
body: {
|
|
280
|
+
title: "ARCS Loop",
|
|
281
|
+
message: `Iteration ${updatedState.iteration}/${typeof updatedState.maxIterations === "number" ? updatedState.maxIterations : "unbounded"}`,
|
|
282
|
+
variant: "info",
|
|
283
|
+
duration: 2000,
|
|
284
|
+
},
|
|
285
|
+
})
|
|
286
|
+
.catch(() => {});
|
|
287
|
+
|
|
288
|
+
// Inject continuation prompt
|
|
289
|
+
const continuationPrompt = buildContinuationPrompt(updatedState);
|
|
290
|
+
|
|
291
|
+
// Inherit agent/model from last message
|
|
292
|
+
let agent, model, tools;
|
|
293
|
+
try {
|
|
294
|
+
const msgs = await client.session.messages({ path: { id: sessionID } });
|
|
295
|
+
const messageList = Array.isArray(msgs) ? msgs : msgs?.data || [];
|
|
296
|
+
for (let i = messageList.length - 1; i >= 0; i--) {
|
|
297
|
+
const info = messageList[i]?.info;
|
|
298
|
+
if (info?.agent || info?.model || (info?.modelID && info?.providerID)) {
|
|
299
|
+
agent = info.agent;
|
|
300
|
+
model =
|
|
301
|
+
info.model ??
|
|
302
|
+
(info.providerID && info.modelID
|
|
303
|
+
? { providerID: info.providerID, modelID: info.modelID }
|
|
304
|
+
: undefined);
|
|
305
|
+
tools = info.tools;
|
|
306
|
+
break;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
} catch {}
|
|
310
|
+
|
|
311
|
+
await client.session.promptAsync({
|
|
312
|
+
path: { id: sessionID },
|
|
313
|
+
body: {
|
|
314
|
+
...(agent !== undefined ? { agent } : {}),
|
|
315
|
+
...(model ? { model: { providerID: model.providerID, modelID: model.modelID } } : {}),
|
|
316
|
+
...(model?.variant ? { variant: model.variant } : {}),
|
|
317
|
+
...(tools ? { tools } : {}),
|
|
318
|
+
parts: [{ type: "text", text: continuationPrompt }],
|
|
319
|
+
},
|
|
320
|
+
query: { directory },
|
|
321
|
+
});
|
|
322
|
+
} finally {
|
|
323
|
+
inFlightSessions.delete(sessionID);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// Handle session deletion — clear loop if it's the loop session
|
|
328
|
+
if (event.type === "session.deleted") {
|
|
329
|
+
const sessionID = props?.sessionID;
|
|
330
|
+
if (!sessionID) return;
|
|
331
|
+
const status = await loopStatus();
|
|
332
|
+
if (status?.state?.active && status.state.sessionId === sessionID) {
|
|
333
|
+
await loopCancel(status.slug, sessionID);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// Handle session error — clear loop
|
|
338
|
+
if (event.type === "session.error") {
|
|
339
|
+
const sessionID = props?.sessionID;
|
|
340
|
+
if (!sessionID) return;
|
|
341
|
+
const status = await loopStatus();
|
|
342
|
+
if (status?.state?.active && status.state.sessionId === sessionID) {
|
|
343
|
+
await loopCancel(status.slug, sessionID);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
};
|
|
348
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skills": {
|
|
3
|
+
"brainstorming": [
|
|
4
|
+
"SKILL.md",
|
|
5
|
+
"spec-document-reviewer-prompt.md",
|
|
6
|
+
"visual-companion.md",
|
|
7
|
+
"scripts/frame-template.html",
|
|
8
|
+
"scripts/helper.js",
|
|
9
|
+
"scripts/server.js",
|
|
10
|
+
"scripts/start-server.sh",
|
|
11
|
+
"scripts/stop-server.sh"
|
|
12
|
+
],
|
|
13
|
+
"code-agent": [
|
|
14
|
+
"SKILL.md"
|
|
15
|
+
],
|
|
16
|
+
"deep-pr-review": [
|
|
17
|
+
"SKILL.md",
|
|
18
|
+
"review-template.md",
|
|
19
|
+
"graphify-diff.md"
|
|
20
|
+
],
|
|
21
|
+
"executing-plans": [
|
|
22
|
+
"SKILL.md"
|
|
23
|
+
],
|
|
24
|
+
"quick-dev": [
|
|
25
|
+
"SKILL.md"
|
|
26
|
+
],
|
|
27
|
+
"requesting-code-review": [
|
|
28
|
+
"SKILL.md",
|
|
29
|
+
"code-reviewer.md"
|
|
30
|
+
],
|
|
31
|
+
"subagent-driven-development": [
|
|
32
|
+
"SKILL.md",
|
|
33
|
+
"code-quality-reviewer-prompt.md",
|
|
34
|
+
"implementer-prompt.md",
|
|
35
|
+
"spec-reviewer-prompt.md"
|
|
36
|
+
],
|
|
37
|
+
"systematic-debugging": [
|
|
38
|
+
"SKILL.md",
|
|
39
|
+
"condition-based-waiting.md",
|
|
40
|
+
"condition-based-waiting-example.ts",
|
|
41
|
+
"defense-in-depth.md",
|
|
42
|
+
"find-polluter.sh",
|
|
43
|
+
"phases-reference.md",
|
|
44
|
+
"root-cause-tracing.md"
|
|
45
|
+
],
|
|
46
|
+
"test-driven-development": [
|
|
47
|
+
"SKILL.md",
|
|
48
|
+
"tdd-rationalizations-and-examples.md",
|
|
49
|
+
"testing-anti-patterns.md"
|
|
50
|
+
],
|
|
51
|
+
"to-diagram": [
|
|
52
|
+
"SKILL.md",
|
|
53
|
+
"scripts/manage-diagram.mjs"
|
|
54
|
+
],
|
|
55
|
+
"writing-plans": [
|
|
56
|
+
"SKILL.md",
|
|
57
|
+
"plan-document-reviewer-prompt.md"
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"agents": [],
|
|
61
|
+
"plugin": [],
|
|
62
|
+
"excludePatterns": [
|
|
63
|
+
"**/references/**",
|
|
64
|
+
"**/examples/**",
|
|
65
|
+
"**/CREATION-LOG.md",
|
|
66
|
+
"**/test-pressure-*.md"
|
|
67
|
+
]
|
|
68
|
+
}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
{
|
|
2
|
+
"bundleId": "arcs-opencode-bundle",
|
|
3
|
+
"installMode": "opencode-arcs",
|
|
4
|
+
"bundleVersionSource": "package.json",
|
|
5
|
+
"sourceRoot": "opencode/arcs",
|
|
6
|
+
"skills": {
|
|
7
|
+
"source": "skills",
|
|
8
|
+
"destination": "skills/arcs"
|
|
9
|
+
},
|
|
10
|
+
"agents": [
|
|
11
|
+
{ "source": "prompts/software-engineer.txt", "destination": "prompts/software-engineer.txt" },
|
|
12
|
+
{ "source": "prompts/tech-architect.txt", "destination": "prompts/tech-architect.txt" },
|
|
13
|
+
{ "source": "prompts/qa-analyst.txt", "destination": "prompts/qa-analyst.txt" },
|
|
14
|
+
{ "source": "prompts/oncall-ops.txt", "destination": "prompts/oncall-ops.txt" },
|
|
15
|
+
{ "source": "prompts/arcs-docs.txt", "destination": "prompts/arcs-docs.txt" },
|
|
16
|
+
{ "source": "prompts/system-architect.txt", "destination": "prompts/system-architect.txt" },
|
|
17
|
+
{ "source": "prompts/code-reviewer.txt", "destination": "prompts/code-reviewer.txt" },
|
|
18
|
+
{ "source": "prompts/docs-researcher.txt", "destination": "prompts/docs-researcher.txt" },
|
|
19
|
+
{ "source": "prompts/devil-advocate.txt", "destination": "prompts/devil-advocate.txt" }
|
|
20
|
+
],
|
|
21
|
+
"ownedPaths": [
|
|
22
|
+
"skills/arcs",
|
|
23
|
+
"plugins/arcs.js"
|
|
24
|
+
],
|
|
25
|
+
"plugin": {
|
|
26
|
+
"required": true,
|
|
27
|
+
"source": ".opencode/plugins/arcs.js",
|
|
28
|
+
"destination": "plugins/arcs.js"
|
|
29
|
+
},
|
|
30
|
+
"config": {
|
|
31
|
+
"requiredMerges": [
|
|
32
|
+
{
|
|
33
|
+
"path": [
|
|
34
|
+
"permission"
|
|
35
|
+
],
|
|
36
|
+
"value": {
|
|
37
|
+
"external_directory": {
|
|
38
|
+
"/tmp": "allow",
|
|
39
|
+
"~/.arcs": "allow",
|
|
40
|
+
"~/.config/opencode": "allow"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"path": [
|
|
46
|
+
"model"
|
|
47
|
+
],
|
|
48
|
+
"value": "github-copilot/claude-sonnet-4.6"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"path": [
|
|
52
|
+
"agent",
|
|
53
|
+
"build",
|
|
54
|
+
"model"
|
|
55
|
+
],
|
|
56
|
+
"value": "github-copilot/claude-sonnet-4.6"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"path": [
|
|
60
|
+
"agent",
|
|
61
|
+
"plan",
|
|
62
|
+
"model"
|
|
63
|
+
],
|
|
64
|
+
"value": "github-copilot/claude-opus-4.6"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"path": [
|
|
68
|
+
"agent",
|
|
69
|
+
"general",
|
|
70
|
+
"model"
|
|
71
|
+
],
|
|
72
|
+
"value": "github-copilot/claude-opus-4.6"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"path": [
|
|
76
|
+
"agent",
|
|
77
|
+
"explore",
|
|
78
|
+
"model"
|
|
79
|
+
],
|
|
80
|
+
"value": "github-copilot/claude-haiku-4.5"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"path": [
|
|
84
|
+
"agent",
|
|
85
|
+
"code-reviewer"
|
|
86
|
+
],
|
|
87
|
+
"value": {
|
|
88
|
+
"description": "Reviews code changes for production readiness and catches correctness, maintainability, and testing issues.",
|
|
89
|
+
"mode": "subagent",
|
|
90
|
+
"model": "github-copilot/claude-haiku-4.5",
|
|
91
|
+
"prompt": "{file:./prompts/code-reviewer.txt}",
|
|
92
|
+
"permission": {
|
|
93
|
+
"edit": "deny",
|
|
94
|
+
"bash": "allow",
|
|
95
|
+
"webfetch": "deny"
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"path": [
|
|
101
|
+
"agent",
|
|
102
|
+
"docs-researcher"
|
|
103
|
+
],
|
|
104
|
+
"value": {
|
|
105
|
+
"description": "Handles documentation writing, research synthesis, OCR-adjacent extraction, and document-heavy analysis tasks.",
|
|
106
|
+
"mode": "subagent",
|
|
107
|
+
"model": "github-copilot/claude-opus-4.6",
|
|
108
|
+
"permission": {
|
|
109
|
+
"edit": "ask",
|
|
110
|
+
"bash": "ask",
|
|
111
|
+
"webfetch": "allow",
|
|
112
|
+
"external_directory": {
|
|
113
|
+
"/tmp": "allow",
|
|
114
|
+
"~/.arcs": "allow"
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
"prompt": "{file:./prompts/docs-researcher.txt}"
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"path": [
|
|
122
|
+
"agent",
|
|
123
|
+
"tech-architect"
|
|
124
|
+
],
|
|
125
|
+
"value": {
|
|
126
|
+
"description": "Architecture and analysis specialist. Deep structural reasoning, refactor guidance, trade-off evaluation, and root cause analysis without making hasty edits.",
|
|
127
|
+
"mode": "subagent",
|
|
128
|
+
"model": "github-copilot/claude-haiku-4.5",
|
|
129
|
+
"permission": {
|
|
130
|
+
"edit": "ask",
|
|
131
|
+
"bash": "ask",
|
|
132
|
+
"webfetch": "deny",
|
|
133
|
+
"external_directory": {
|
|
134
|
+
"~/.arcs": "allow"
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
"prompt": "{file:./prompts/tech-architect.txt}"
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"path": [
|
|
142
|
+
"agent",
|
|
143
|
+
"software-engineer"
|
|
144
|
+
],
|
|
145
|
+
"value": {
|
|
146
|
+
"description": "Implementation specialist. Writes code, runs tests, ships features. Loads quick-dev, code-agent, test-driven-development, executing-plans, finishing-a-development-branch, and aesthetic skills as needed.",
|
|
147
|
+
"mode": "subagent",
|
|
148
|
+
"model": "github-copilot/claude-opus-4.6",
|
|
149
|
+
"permission": {
|
|
150
|
+
"edit": "allow",
|
|
151
|
+
"bash": "allow",
|
|
152
|
+
"webfetch": "deny",
|
|
153
|
+
"mcp": "allow",
|
|
154
|
+
"external_directory": {
|
|
155
|
+
"/tmp": "allow",
|
|
156
|
+
"~/.arcs": "allow"
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
"prompt": "{file:./prompts/software-engineer.txt}"
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"path": [
|
|
164
|
+
"agent",
|
|
165
|
+
"arcs-docs"
|
|
166
|
+
],
|
|
167
|
+
"value": {
|
|
168
|
+
"description": "ARCS documentation specialist. Manages plans, knowledge entries, diagrams, and DAG health. Knows ARCS structure intimately.",
|
|
169
|
+
"mode": "subagent",
|
|
170
|
+
"model": "github-copilot/claude-opus-4.6",
|
|
171
|
+
"permission": {
|
|
172
|
+
"edit": "allow",
|
|
173
|
+
"bash": "allow",
|
|
174
|
+
"webfetch": "deny",
|
|
175
|
+
"mcp": "allow",
|
|
176
|
+
"external_directory": {
|
|
177
|
+
"/tmp": "allow",
|
|
178
|
+
"~/.arcs": "allow",
|
|
179
|
+
"~/.config/opencode": "allow"
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
"prompt": "{file:./prompts/arcs-docs.txt}"
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"path": [
|
|
187
|
+
"agent",
|
|
188
|
+
"qa-analyst"
|
|
189
|
+
],
|
|
190
|
+
"value": {
|
|
191
|
+
"description": "Quality enforcement specialist. Proactive code audits, review dispatch, convention compliance.",
|
|
192
|
+
"mode": "subagent",
|
|
193
|
+
"model": "github-copilot/claude-haiku-4.5",
|
|
194
|
+
"permission": {
|
|
195
|
+
"edit": "deny",
|
|
196
|
+
"bash": "allow",
|
|
197
|
+
"webfetch": "deny",
|
|
198
|
+
"mcp": "allow",
|
|
199
|
+
"external_directory": {
|
|
200
|
+
"~/.arcs": "allow"
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
"prompt": "{file:./prompts/qa-analyst.txt}"
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"path": [
|
|
208
|
+
"agent",
|
|
209
|
+
"devil-advocate"
|
|
210
|
+
],
|
|
211
|
+
"value": {
|
|
212
|
+
"description": "Adversarial phase-gate agent. Checks work at phase boundaries using KISS/YAGNI/DRY principles. Runs tests, reads diffs, delivers pass/block verdicts. Cannot edit code.",
|
|
213
|
+
"mode": "subagent",
|
|
214
|
+
"model": "github-copilot/claude-sonnet-4.6",
|
|
215
|
+
"permission": {
|
|
216
|
+
"edit": "deny",
|
|
217
|
+
"bash": "allow",
|
|
218
|
+
"webfetch": "deny",
|
|
219
|
+
"mcp": "allow",
|
|
220
|
+
"external_directory": {
|
|
221
|
+
"/tmp": "allow",
|
|
222
|
+
"~/.arcs": "allow"
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
"prompt": "{file:./prompts/devil-advocate.txt}"
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"path": [
|
|
230
|
+
"agent",
|
|
231
|
+
"oncall-ops"
|
|
232
|
+
],
|
|
233
|
+
"value": {
|
|
234
|
+
"description": "Debugging and diagnosis specialist. Finds root causes through systematic investigation, log triage, bisect, and performance profiling.",
|
|
235
|
+
"mode": "subagent",
|
|
236
|
+
"model": "github-copilot/claude-opus-4.6",
|
|
237
|
+
"permission": {
|
|
238
|
+
"edit": "ask",
|
|
239
|
+
"bash": "allow",
|
|
240
|
+
"webfetch": "deny",
|
|
241
|
+
"mcp": "allow",
|
|
242
|
+
"external_directory": {
|
|
243
|
+
"/tmp": "allow",
|
|
244
|
+
"~/.arcs": "allow"
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
"prompt": "{file:./prompts/oncall-ops.txt}"
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
"path": [
|
|
252
|
+
"agent",
|
|
253
|
+
"system-architect"
|
|
254
|
+
],
|
|
255
|
+
"value": {
|
|
256
|
+
"description": "Architecture and design specialist. Module boundaries, dependency graphs, migration strategies, and cross-project design decisions.",
|
|
257
|
+
"mode": "subagent",
|
|
258
|
+
"model": "github-copilot/claude-opus-4.6",
|
|
259
|
+
"permission": {
|
|
260
|
+
"edit": "deny",
|
|
261
|
+
"bash": "allow",
|
|
262
|
+
"webfetch": "allow",
|
|
263
|
+
"mcp": "allow",
|
|
264
|
+
"external_directory": {
|
|
265
|
+
"~/.arcs": "allow"
|
|
266
|
+
}
|
|
267
|
+
},
|
|
268
|
+
"prompt": "{file:./prompts/system-architect.txt}"
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"path": [
|
|
273
|
+
"small_model"
|
|
274
|
+
],
|
|
275
|
+
"value": "github-copilot/claude-haiku-4.5"
|
|
276
|
+
}
|
|
277
|
+
]
|
|
278
|
+
}
|
|
279
|
+
}
|