agentsys 5.0.2 → 5.1.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/.claude-plugin/marketplace.json +21 -14
- package/.claude-plugin/plugin.json +1 -1
- package/AGENTS.md +2 -1
- package/CHANGELOG.md +24 -1
- package/README.md +7 -6
- package/adapters/codex/skills/agnix/SKILL.md +0 -1
- package/adapters/codex/skills/audit-project/SKILL.md +0 -1
- package/adapters/codex/skills/audit-project-agents/SKILL.md +0 -1
- package/adapters/codex/skills/audit-project-github/SKILL.md +0 -1
- package/adapters/codex/skills/consult/SKILL.md +133 -59
- package/adapters/codex/skills/debate/SKILL.md +214 -0
- package/adapters/codex/skills/delivery-approval/SKILL.md +0 -1
- package/adapters/codex/skills/deslop/SKILL.md +0 -1
- package/adapters/codex/skills/drift-detect/SKILL.md +0 -1
- package/adapters/codex/skills/enhance/SKILL.md +0 -1
- package/adapters/codex/skills/learn/SKILL.md +0 -1
- package/adapters/codex/skills/next-task/SKILL.md +0 -1
- package/adapters/codex/skills/perf/SKILL.md +0 -1
- package/adapters/codex/skills/repo-map/SKILL.md +0 -1
- package/adapters/codex/skills/ship/SKILL.md +0 -1
- package/adapters/codex/skills/ship-ci-review-loop/SKILL.md +0 -1
- package/adapters/codex/skills/ship-deployment/SKILL.md +0 -1
- package/adapters/codex/skills/ship-error-handling/SKILL.md +0 -1
- package/adapters/codex/skills/sync-docs/SKILL.md +0 -1
- package/adapters/opencode/agents/agent-enhancer.md +0 -1
- package/adapters/opencode/agents/agnix-agent.md +0 -1
- package/adapters/opencode/agents/ci-fixer.md +0 -1
- package/adapters/opencode/agents/ci-monitor.md +0 -1
- package/adapters/opencode/agents/claudemd-enhancer.md +0 -1
- package/adapters/opencode/agents/consult-agent.md +123 -31
- package/adapters/opencode/agents/cross-file-enhancer.md +0 -1
- package/adapters/opencode/agents/debate-orchestrator.md +169 -0
- package/adapters/opencode/agents/delivery-validator.md +0 -1
- package/adapters/opencode/agents/deslop-agent.md +0 -1
- package/adapters/opencode/agents/docs-enhancer.md +0 -1
- package/adapters/opencode/agents/exploration-agent.md +0 -1
- package/adapters/opencode/agents/hooks-enhancer.md +0 -1
- package/adapters/opencode/agents/implementation-agent.md +0 -1
- package/adapters/opencode/agents/learn-agent.md +0 -1
- package/adapters/opencode/agents/map-validator.md +0 -1
- package/adapters/opencode/agents/perf-analyzer.md +0 -1
- package/adapters/opencode/agents/perf-code-paths.md +0 -1
- package/adapters/opencode/agents/perf-investigation-logger.md +0 -1
- package/adapters/opencode/agents/perf-orchestrator.md +0 -1
- package/adapters/opencode/agents/perf-theory-gatherer.md +0 -1
- package/adapters/opencode/agents/perf-theory-tester.md +0 -1
- package/adapters/opencode/agents/plan-synthesizer.md +0 -1
- package/adapters/opencode/agents/planning-agent.md +0 -1
- package/adapters/opencode/agents/plugin-enhancer.md +0 -1
- package/adapters/opencode/agents/prompt-enhancer.md +0 -1
- package/adapters/opencode/agents/simple-fixer.md +0 -1
- package/adapters/opencode/agents/skills-enhancer.md +0 -1
- package/adapters/opencode/agents/sync-docs-agent.md +0 -1
- package/adapters/opencode/agents/task-discoverer.md +0 -1
- package/adapters/opencode/agents/test-coverage-checker.md +0 -1
- package/adapters/opencode/agents/worktree-manager.md +0 -1
- package/adapters/opencode/commands/agnix.md +0 -1
- package/adapters/opencode/commands/audit-project-agents.md +0 -1
- package/adapters/opencode/commands/audit-project-github.md +0 -1
- package/adapters/opencode/commands/audit-project.md +0 -1
- package/adapters/opencode/commands/consult.md +134 -59
- package/adapters/opencode/commands/debate.md +224 -0
- package/adapters/opencode/commands/delivery-approval.md +0 -1
- package/adapters/opencode/commands/deslop.md +0 -1
- package/adapters/opencode/commands/drift-detect.md +0 -1
- package/adapters/opencode/commands/enhance.md +0 -1
- package/adapters/opencode/commands/learn.md +0 -1
- package/adapters/opencode/commands/next-task.md +0 -1
- package/adapters/opencode/commands/perf.md +0 -1
- package/adapters/opencode/commands/repo-map.md +0 -1
- package/adapters/opencode/commands/ship-ci-review-loop.md +0 -1
- package/adapters/opencode/commands/ship-deployment.md +0 -1
- package/adapters/opencode/commands/ship-error-handling.md +0 -1
- package/adapters/opencode/commands/ship.md +0 -1
- package/adapters/opencode/commands/sync-docs.md +0 -1
- package/adapters/opencode/skills/agnix/SKILL.md +1 -2
- package/adapters/opencode/skills/consult/SKILL.md +41 -27
- package/adapters/opencode/skills/debate/SKILL.md +245 -0
- package/adapters/opencode/skills/deslop/SKILL.md +1 -2
- package/adapters/opencode/skills/discover-tasks/SKILL.md +1 -2
- package/adapters/opencode/skills/drift-analysis/SKILL.md +1 -2
- package/adapters/opencode/skills/enhance-agent-prompts/SKILL.md +1 -2
- package/adapters/opencode/skills/enhance-claude-memory/SKILL.md +1 -2
- package/adapters/opencode/skills/enhance-cross-file/SKILL.md +1 -2
- package/adapters/opencode/skills/enhance-docs/SKILL.md +1 -2
- package/adapters/opencode/skills/enhance-hooks/SKILL.md +1 -2
- package/adapters/opencode/skills/enhance-orchestrator/SKILL.md +1 -2
- package/adapters/opencode/skills/enhance-plugins/SKILL.md +1 -2
- package/adapters/opencode/skills/enhance-prompts/SKILL.md +1 -2
- package/adapters/opencode/skills/enhance-skills/SKILL.md +1 -2
- package/adapters/opencode/skills/learn/SKILL.md +1 -2
- package/adapters/opencode/skills/orchestrate-review/SKILL.md +0 -1
- package/adapters/opencode/skills/perf-analyzer/SKILL.md +1 -2
- package/adapters/opencode/skills/perf-baseline-manager/SKILL.md +1 -2
- package/adapters/opencode/skills/perf-benchmarker/SKILL.md +1 -2
- package/adapters/opencode/skills/perf-code-paths/SKILL.md +1 -2
- package/adapters/opencode/skills/perf-investigation-logger/SKILL.md +1 -2
- package/adapters/opencode/skills/perf-profiler/SKILL.md +1 -2
- package/adapters/opencode/skills/perf-theory-gatherer/SKILL.md +1 -2
- package/adapters/opencode/skills/perf-theory-tester/SKILL.md +1 -2
- package/adapters/opencode/skills/repo-mapping/SKILL.md +1 -2
- package/adapters/opencode/skills/sync-docs/SKILL.md +1 -2
- package/adapters/opencode/skills/validate-delivery/SKILL.md +1 -2
- package/lib/adapter-transforms.js +24 -4
- package/package.json +1 -1
- package/plugins/agnix/.claude-plugin/plugin.json +1 -1
- package/plugins/agnix/skills/agnix/SKILL.md +1 -1
- package/plugins/audit-project/.claude-plugin/plugin.json +1 -1
- package/plugins/audit-project/lib/adapter-transforms.js +24 -4
- package/plugins/consult/.claude-plugin/plugin.json +1 -1
- package/plugins/consult/agents/consult-agent.md +123 -30
- package/plugins/consult/commands/consult.md +136 -60
- package/plugins/consult/skills/consult/SKILL.md +39 -24
- package/plugins/debate/.claude-plugin/plugin.json +21 -0
- package/plugins/debate/agents/debate-orchestrator.md +175 -0
- package/plugins/debate/commands/debate.md +221 -0
- package/plugins/debate/lib/adapter-transforms.js +298 -0
- package/plugins/debate/lib/collectors/codebase.js +392 -0
- package/plugins/debate/lib/collectors/docs-patterns.js +713 -0
- package/plugins/debate/lib/collectors/documentation.js +219 -0
- package/plugins/debate/lib/collectors/github.js +330 -0
- package/plugins/debate/lib/collectors/index.js +126 -0
- package/plugins/debate/lib/config/index.js +14 -0
- package/plugins/debate/lib/cross-platform/index.js +539 -0
- package/plugins/debate/lib/discovery/index.js +352 -0
- package/plugins/debate/lib/drift-detect/collectors.js +37 -0
- package/plugins/debate/lib/enhance/agent-analyzer.js +421 -0
- package/plugins/debate/lib/enhance/agent-patterns.js +571 -0
- package/plugins/debate/lib/enhance/auto-suppression.js +622 -0
- package/plugins/debate/lib/enhance/benchmark.js +417 -0
- package/plugins/debate/lib/enhance/cross-file-analyzer.js +930 -0
- package/plugins/debate/lib/enhance/cross-file-patterns.js +370 -0
- package/plugins/debate/lib/enhance/docs-analyzer.js +325 -0
- package/plugins/debate/lib/enhance/docs-patterns.js +671 -0
- package/plugins/debate/lib/enhance/fixer.js +721 -0
- package/plugins/debate/lib/enhance/hook-analyzer.js +135 -0
- package/plugins/debate/lib/enhance/hook-patterns.js +40 -0
- package/plugins/debate/lib/enhance/index.js +127 -0
- package/plugins/debate/lib/enhance/plugin-analyzer.js +402 -0
- package/plugins/debate/lib/enhance/plugin-patterns.js +326 -0
- package/plugins/debate/lib/enhance/projectmemory-analyzer.js +551 -0
- package/plugins/debate/lib/enhance/projectmemory-patterns.js +617 -0
- package/plugins/debate/lib/enhance/prompt-analyzer.js +457 -0
- package/plugins/debate/lib/enhance/prompt-patterns.js +1484 -0
- package/plugins/debate/lib/enhance/reporter.js +1348 -0
- package/plugins/debate/lib/enhance/security-patterns.js +284 -0
- package/plugins/debate/lib/enhance/skill-analyzer.js +182 -0
- package/plugins/debate/lib/enhance/skill-patterns.js +147 -0
- package/plugins/debate/lib/enhance/suppression.js +352 -0
- package/plugins/debate/lib/enhance/tool-patterns.js +373 -0
- package/plugins/debate/lib/index.js +270 -0
- package/plugins/debate/lib/patterns/cli-enhancers.js +611 -0
- package/plugins/debate/lib/patterns/pipeline.js +948 -0
- package/plugins/debate/lib/patterns/review-patterns.js +558 -0
- package/plugins/debate/lib/patterns/slop-analyzers.js +2305 -0
- package/plugins/debate/lib/patterns/slop-patterns.js +1187 -0
- package/plugins/debate/lib/perf/analyzer/index.js +22 -0
- package/plugins/debate/lib/perf/argument-parser.js +105 -0
- package/plugins/debate/lib/perf/baseline-comparator.js +50 -0
- package/plugins/debate/lib/perf/baseline-store.js +127 -0
- package/plugins/debate/lib/perf/benchmark-runner.js +404 -0
- package/plugins/debate/lib/perf/breaking-point-finder.js +52 -0
- package/plugins/debate/lib/perf/breaking-point-runner.js +60 -0
- package/plugins/debate/lib/perf/checkpoint.js +123 -0
- package/plugins/debate/lib/perf/code-paths.js +86 -0
- package/plugins/debate/lib/perf/consolidation.js +37 -0
- package/plugins/debate/lib/perf/constraint-runner.js +71 -0
- package/plugins/debate/lib/perf/experiment-runner.js +32 -0
- package/plugins/debate/lib/perf/index.js +41 -0
- package/plugins/debate/lib/perf/investigation-state.js +874 -0
- package/plugins/debate/lib/perf/optimization-runner.js +79 -0
- package/plugins/debate/lib/perf/profilers/go.js +22 -0
- package/plugins/debate/lib/perf/profilers/index.js +46 -0
- package/plugins/debate/lib/perf/profilers/java.js +23 -0
- package/plugins/debate/lib/perf/profilers/node.js +27 -0
- package/plugins/debate/lib/perf/profilers/python.js +23 -0
- package/plugins/debate/lib/perf/profilers/rust.js +23 -0
- package/plugins/debate/lib/perf/profiling-runner.js +75 -0
- package/plugins/debate/lib/perf/schemas.js +140 -0
- package/plugins/debate/lib/platform/detect-platform.js +413 -0
- package/plugins/debate/lib/platform/detection-configs.js +93 -0
- package/plugins/debate/lib/platform/state-dir.js +132 -0
- package/plugins/debate/lib/platform/verify-tools.js +182 -0
- package/plugins/debate/lib/repo-map/cache.js +152 -0
- package/plugins/debate/lib/repo-map/concurrency.js +29 -0
- package/plugins/debate/lib/repo-map/index.js +222 -0
- package/plugins/debate/lib/repo-map/installer.js +212 -0
- package/plugins/debate/lib/repo-map/queries/go.js +27 -0
- package/plugins/debate/lib/repo-map/queries/index.js +100 -0
- package/plugins/debate/lib/repo-map/queries/java.js +38 -0
- package/plugins/debate/lib/repo-map/queries/javascript.js +55 -0
- package/plugins/debate/lib/repo-map/queries/python.js +24 -0
- package/plugins/debate/lib/repo-map/queries/rust.js +73 -0
- package/plugins/debate/lib/repo-map/queries/typescript.js +38 -0
- package/plugins/debate/lib/repo-map/runner.js +1364 -0
- package/plugins/debate/lib/repo-map/updater.js +562 -0
- package/plugins/debate/lib/repo-map/usage-analyzer.js +407 -0
- package/plugins/debate/lib/schemas/plugin-manifest.schema.json +57 -0
- package/plugins/debate/lib/schemas/validator.js +247 -0
- package/plugins/debate/lib/sources/custom-handler.js +199 -0
- package/plugins/debate/lib/sources/policy-questions.js +246 -0
- package/plugins/debate/lib/sources/source-cache.js +165 -0
- package/plugins/debate/lib/state/workflow-state.js +576 -0
- package/plugins/debate/lib/types/agent-frontmatter.d.ts +134 -0
- package/plugins/debate/lib/types/command-frontmatter.d.ts +107 -0
- package/plugins/debate/lib/types/hook-frontmatter.d.ts +115 -0
- package/plugins/debate/lib/types/index.d.ts +84 -0
- package/plugins/debate/lib/types/plugin-manifest.d.ts +102 -0
- package/plugins/debate/lib/types/skill-frontmatter.d.ts +89 -0
- package/plugins/debate/lib/utils/atomic-write.js +94 -0
- package/plugins/debate/lib/utils/cache-manager.js +159 -0
- package/plugins/debate/lib/utils/command-parser.js +0 -0
- package/plugins/debate/lib/utils/context-optimizer.js +300 -0
- package/plugins/debate/lib/utils/deprecation.js +37 -0
- package/plugins/debate/lib/utils/shell-escape.js +88 -0
- package/plugins/debate/lib/utils/state-helpers.js +61 -0
- package/plugins/debate/skills/debate/SKILL.md +264 -0
- package/plugins/deslop/.claude-plugin/plugin.json +1 -1
- package/plugins/deslop/lib/adapter-transforms.js +24 -4
- package/plugins/deslop/skills/deslop/SKILL.md +1 -1
- package/plugins/drift-detect/.claude-plugin/plugin.json +1 -1
- package/plugins/drift-detect/lib/adapter-transforms.js +24 -4
- package/plugins/drift-detect/skills/drift-analysis/SKILL.md +1 -1
- package/plugins/enhance/.claude-plugin/plugin.json +1 -1
- package/plugins/enhance/lib/adapter-transforms.js +24 -4
- package/plugins/enhance/skills/enhance-agent-prompts/SKILL.md +1 -1
- package/plugins/enhance/skills/enhance-claude-memory/SKILL.md +1 -1
- package/plugins/enhance/skills/enhance-cross-file/SKILL.md +1 -1
- package/plugins/enhance/skills/enhance-docs/SKILL.md +1 -1
- package/plugins/enhance/skills/enhance-hooks/SKILL.md +1 -1
- package/plugins/enhance/skills/enhance-orchestrator/SKILL.md +1 -1
- package/plugins/enhance/skills/enhance-plugins/SKILL.md +1 -1
- package/plugins/enhance/skills/enhance-prompts/SKILL.md +1 -1
- package/plugins/enhance/skills/enhance-skills/SKILL.md +1 -1
- package/plugins/learn/.claude-plugin/plugin.json +1 -1
- package/plugins/learn/agents/learn-agent.md +1 -1
- package/plugins/learn/lib/adapter-transforms.js +24 -4
- package/plugins/learn/skills/learn/SKILL.md +1 -1
- package/plugins/next-task/.claude-plugin/plugin.json +1 -1
- package/plugins/next-task/agents/exploration-agent.md +1 -1
- package/plugins/next-task/lib/adapter-transforms.js +24 -4
- package/plugins/next-task/skills/discover-tasks/SKILL.md +1 -1
- package/plugins/next-task/skills/validate-delivery/SKILL.md +1 -1
- package/plugins/perf/.claude-plugin/plugin.json +1 -1
- package/plugins/perf/lib/adapter-transforms.js +24 -4
- package/plugins/perf/skills/perf-analyzer/SKILL.md +1 -1
- package/plugins/perf/skills/perf-baseline-manager/SKILL.md +1 -1
- package/plugins/perf/skills/perf-benchmarker/SKILL.md +1 -1
- package/plugins/perf/skills/perf-code-paths/SKILL.md +1 -1
- package/plugins/perf/skills/perf-investigation-logger/SKILL.md +1 -1
- package/plugins/perf/skills/perf-profiler/SKILL.md +1 -1
- package/plugins/perf/skills/perf-theory-gatherer/SKILL.md +1 -1
- package/plugins/perf/skills/perf-theory-tester/SKILL.md +1 -1
- package/plugins/repo-map/.claude-plugin/plugin.json +1 -1
- package/plugins/repo-map/lib/adapter-transforms.js +24 -4
- package/plugins/ship/.claude-plugin/plugin.json +1 -1
- package/plugins/ship/lib/adapter-transforms.js +24 -4
- package/plugins/sync-docs/.claude-plugin/plugin.json +1 -1
- package/plugins/sync-docs/lib/adapter-transforms.js +24 -4
- package/plugins/sync-docs/skills/sync-docs/SKILL.md +1 -1
- package/scripts/gen-adapters.js +6 -7
- package/scripts/generate-docs.js +4 -2
- package/scripts/plugins.txt +1 -0
- package/site/content.json +6 -6
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
<!-- AUTO-GENERATED by scripts/gen-adapters.js - DO NOT EDIT -->
|
|
2
1
|
---
|
|
3
2
|
name: validate-delivery
|
|
4
3
|
description: "Use when user asks to \"validate delivery\", \"check readiness\", or \"verify completion\". Runs tests, build, and requirement checks with pass/fail instructions."
|
|
5
|
-
version: 5.0
|
|
4
|
+
version: 5.1.0
|
|
6
5
|
---
|
|
7
6
|
|
|
8
7
|
# validate-delivery
|
|
@@ -18,10 +18,30 @@ function transformBodyForOpenCode(content, repoRoot) {
|
|
|
18
18
|
content = content.replace(/\$\{CLAUDE_PLUGIN_ROOT\}/g, '${PLUGIN_ROOT}');
|
|
19
19
|
content = content.replace(/\$CLAUDE_PLUGIN_ROOT/g, '$PLUGIN_ROOT');
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
content = content.replace(/\.claude
|
|
21
|
+
// Replace .claude/ paths with .opencode/ but preserve platform documentation lists
|
|
22
|
+
// that enumerate all three platforms (Claude Code: .claude/, OpenCode: .opencode/, Codex: .codex/)
|
|
23
|
+
// Also preserve {AI_STATE_DIR} references which are platform-agnostic
|
|
24
|
+
content = content.replace(/\.claude\//g, (match, offset) => {
|
|
25
|
+
const context = content.substring(Math.max(0, offset - 60), offset + match.length + 10);
|
|
26
|
+
// Skip if inside a platform enumeration (e.g., "Claude Code: `.claude/`")
|
|
27
|
+
if (/Claude Code:/.test(context)) return match;
|
|
28
|
+
return '.opencode/';
|
|
29
|
+
});
|
|
30
|
+
content = content.replace(/\.claude'/g, (match, offset) => {
|
|
31
|
+
const context = content.substring(Math.max(0, offset - 60), offset + match.length + 10);
|
|
32
|
+
if (/Claude Code:/.test(context)) return match;
|
|
33
|
+
return ".opencode'";
|
|
34
|
+
});
|
|
35
|
+
content = content.replace(/\.claude"/g, (match, offset) => {
|
|
36
|
+
const context = content.substring(Math.max(0, offset - 60), offset + match.length + 10);
|
|
37
|
+
if (/Claude Code:/.test(context)) return match;
|
|
38
|
+
return '.opencode"';
|
|
39
|
+
});
|
|
40
|
+
content = content.replace(/\.claude`/g, (match, offset) => {
|
|
41
|
+
const context = content.substring(Math.max(0, offset - 60), offset + match.length + 10);
|
|
42
|
+
if (/Claude Code:/.test(context)) return match;
|
|
43
|
+
return '.opencode`';
|
|
44
|
+
});
|
|
25
45
|
|
|
26
46
|
const plugins = discovery.discoverPlugins(repoRoot);
|
|
27
47
|
if (plugins.length > 0) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agnix
|
|
3
3
|
description: "Use when user asks to 'lint agent configs', 'validate skills', 'check CLAUDE.md', 'validate hooks', 'lint MCP'. Validates agent configuration files against 155 rules across 10+ AI tools."
|
|
4
|
-
version: 5.0
|
|
4
|
+
version: 5.1.0
|
|
5
5
|
argument-hint: "[path] [--fix] [--strict] [--target=claude-code|cursor|codex]"
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -18,10 +18,30 @@ function transformBodyForOpenCode(content, repoRoot) {
|
|
|
18
18
|
content = content.replace(/\$\{CLAUDE_PLUGIN_ROOT\}/g, '${PLUGIN_ROOT}');
|
|
19
19
|
content = content.replace(/\$CLAUDE_PLUGIN_ROOT/g, '$PLUGIN_ROOT');
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
content = content.replace(/\.claude
|
|
21
|
+
// Replace .claude/ paths with .opencode/ but preserve platform documentation lists
|
|
22
|
+
// that enumerate all three platforms (Claude Code: .claude/, OpenCode: .opencode/, Codex: .codex/)
|
|
23
|
+
// Also preserve {AI_STATE_DIR} references which are platform-agnostic
|
|
24
|
+
content = content.replace(/\.claude\//g, (match, offset) => {
|
|
25
|
+
const context = content.substring(Math.max(0, offset - 60), offset + match.length + 10);
|
|
26
|
+
// Skip if inside a platform enumeration (e.g., "Claude Code: `.claude/`")
|
|
27
|
+
if (/Claude Code:/.test(context)) return match;
|
|
28
|
+
return '.opencode/';
|
|
29
|
+
});
|
|
30
|
+
content = content.replace(/\.claude'/g, (match, offset) => {
|
|
31
|
+
const context = content.substring(Math.max(0, offset - 60), offset + match.length + 10);
|
|
32
|
+
if (/Claude Code:/.test(context)) return match;
|
|
33
|
+
return ".opencode'";
|
|
34
|
+
});
|
|
35
|
+
content = content.replace(/\.claude"/g, (match, offset) => {
|
|
36
|
+
const context = content.substring(Math.max(0, offset - 60), offset + match.length + 10);
|
|
37
|
+
if (/Claude Code:/.test(context)) return match;
|
|
38
|
+
return '.opencode"';
|
|
39
|
+
});
|
|
40
|
+
content = content.replace(/\.claude`/g, (match, offset) => {
|
|
41
|
+
const context = content.substring(Math.max(0, offset - 60), offset + match.length + 10);
|
|
42
|
+
if (/Claude Code:/.test(context)) return match;
|
|
43
|
+
return '.opencode`';
|
|
44
|
+
});
|
|
25
45
|
|
|
26
46
|
const plugins = discovery.discoverPlugins(repoRoot);
|
|
27
47
|
if (plugins.length > 0) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: consult-agent
|
|
3
|
-
description: "Execute cross-tool AI consultations via Task spawning. Use when agents or workflows need a second opinion from Gemini, Codex, Claude, OpenCode, or Copilot."
|
|
3
|
+
description: "Execute cross-tool AI consultations via Task spawning. Use when agents or workflows need a second opinion from Gemini, Codex, Claude, OpenCode, or Copilot. Supports multi-instance parallel consultations (count > 1)."
|
|
4
4
|
tools:
|
|
5
5
|
- Skill
|
|
6
6
|
- Bash(claude:*)
|
|
@@ -22,11 +22,13 @@ model: sonnet
|
|
|
22
22
|
|
|
23
23
|
You are the programmatic interface for cross-tool AI consultations. The consult plugin follows the standard Command -> Agent -> Skill pattern:
|
|
24
24
|
|
|
25
|
-
- **Command** (`/consult`): User-facing entry point. Handles
|
|
26
|
-
- **Agent** (this file): Programmatic entry point
|
|
27
|
-
- **Skill** (`consult`): Implementation source of truth. Provides provider configurations, model mappings, command templates, context packaging, and output parsing logic.
|
|
25
|
+
- **Command** (`/consult`): User-facing entry point. Handles natural language parsing and interactive parameter selection. For single instance (count=1), invokes the consult skill directly. For multi-instance (count>1), spawns this agent.
|
|
26
|
+
- **Agent** (this file): Programmatic entry point. Requires all parameters pre-resolved by the caller. Handles both single-instance (invoke skill) and multi-instance (parallel execution). Used by the command for multi-instance and by other agents/workflows via Task().
|
|
27
|
+
- **Skill** (`consult`): Implementation source of truth. Provides provider configurations, model mappings, command templates, context packaging, and output parsing logic.
|
|
28
28
|
|
|
29
|
-
Use this agent
|
|
29
|
+
Use this agent for:
|
|
30
|
+
1. Multi-instance consultations (count > 1) dispatched by the /consult command
|
|
31
|
+
2. Programmatic consultations from other agents or automated workflows
|
|
30
32
|
|
|
31
33
|
## Why Sonnet Model
|
|
32
34
|
|
|
@@ -48,13 +50,28 @@ Extract from prompt. ALL parameters MUST be pre-resolved by the caller (the /con
|
|
|
48
50
|
- **context**: Context mode (diff, file, none) - default: none
|
|
49
51
|
- **continueSession**: Session ID or true/false
|
|
50
52
|
- **sessionFile**: Path to session state file
|
|
53
|
+
- **count**: Number of parallel instances (1-5, default: 1)
|
|
51
54
|
|
|
52
55
|
If any required parameter is missing, return an error as plain JSON:
|
|
53
56
|
```json
|
|
54
57
|
{"error": "Missing required parameter: [param]. The caller must resolve all parameters before spawning this agent."}
|
|
55
58
|
```
|
|
56
59
|
|
|
57
|
-
### 2.
|
|
60
|
+
### 2. Route: Single vs Multi-Instance
|
|
61
|
+
|
|
62
|
+
If both `continueSession` is set and `count > 1`, return:
|
|
63
|
+
```json
|
|
64
|
+
{"error": "Cannot use --continue with count > 1. Session resume applies to a single tool session."}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Validate count: if provided, must be 1-5. If out of range, return `{"error": "Instance count must be 1-5. Got: [count]"}`.
|
|
68
|
+
|
|
69
|
+
If `count` is 1 (or not provided), follow the **Single Instance** path (Step 3).
|
|
70
|
+
If `count` is 2-5, follow the **Multi-Instance** path (Step 4).
|
|
71
|
+
|
|
72
|
+
### 3. Single Instance (count=1)
|
|
73
|
+
|
|
74
|
+
#### 3a. Invoke Consult Skill (MUST)
|
|
58
75
|
|
|
59
76
|
You MUST invoke the `consult` skill using the Skill tool. Pass all parsed arguments. The skill is the authoritative source for provider configurations, model mappings, command building, context packaging, session loading, and output parsing. Do not bypass the skill.
|
|
60
77
|
|
|
@@ -65,11 +82,11 @@ Args: [question] --tool=[tool] --effort=[effort] [--model=[model]] [--context=[c
|
|
|
65
82
|
Example: "Review this function" --tool=claude --effort=high --model=opus
|
|
66
83
|
```
|
|
67
84
|
|
|
68
|
-
|
|
85
|
+
#### 3b. Execute Command
|
|
69
86
|
|
|
70
87
|
Run the CLI command returned by the skill via Bash with a 120-second timeout.
|
|
71
88
|
|
|
72
|
-
|
|
89
|
+
#### 3c. Parse and Return Result
|
|
73
90
|
|
|
74
91
|
Parse the response using the method specified by the skill for the target tool, then format and display the result as human-friendly text:
|
|
75
92
|
|
|
@@ -80,12 +97,107 @@ The results of the consultation are:
|
|
|
80
97
|
{response}
|
|
81
98
|
```
|
|
82
99
|
|
|
83
|
-
Set `continuable: true` for Claude, Gemini, Codex, and OpenCode (tools with
|
|
100
|
+
Set `continuable: true` for Claude, Gemini, Codex, and OpenCode (tools with session resume support). Only Copilot is non-continuable. Each tool uses a different resume mechanism: Claude/Gemini use `--resume`, Codex uses `codex exec resume`, OpenCode uses `--session`/`--continue`.
|
|
84
101
|
|
|
85
|
-
|
|
102
|
+
#### 3d. Save Session State
|
|
86
103
|
|
|
87
104
|
Write session state to the sessionFile path provided by the command for continuity.
|
|
88
105
|
|
|
106
|
+
### 4. Multi-Instance (count > 1)
|
|
107
|
+
|
|
108
|
+
When count > 1, execute N parallel consultations with the same tool and parameters.
|
|
109
|
+
|
|
110
|
+
#### 4a. Invoke Consult Skill Once
|
|
111
|
+
|
|
112
|
+
Invoke the `consult` skill once to get the resolved command template and provider configuration. This gives you the exact CLI command to run for this tool/model/effort combination. Do NOT execute the command from the skill response yet.
|
|
113
|
+
|
|
114
|
+
#### 4b. Write Indexed Temp Files
|
|
115
|
+
|
|
116
|
+
Write the question to N indexed temp files using the Write tool:
|
|
117
|
+
- `{AI_STATE_DIR}/consult/question-1.tmp`
|
|
118
|
+
- `{AI_STATE_DIR}/consult/question-2.tmp`
|
|
119
|
+
- ... through `question-{count}.tmp`
|
|
120
|
+
|
|
121
|
+
Platform state directory:
|
|
122
|
+
- Claude Code: `.claude/`
|
|
123
|
+
- OpenCode: `.opencode/`
|
|
124
|
+
- Codex CLI: `.codex/`
|
|
125
|
+
|
|
126
|
+
All temp files contain the same question text (with context prepended if applicable).
|
|
127
|
+
|
|
128
|
+
#### 4c. Execute N Commands in Parallel
|
|
129
|
+
|
|
130
|
+
Run N Bash commands **in parallel** (multiple Bash tool calls in a single message). Each command uses the template from Step 4a but points to its own indexed temp file. Set 120-second timeout on each.
|
|
131
|
+
|
|
132
|
+
Example for 3 parallel Codex calls:
|
|
133
|
+
```
|
|
134
|
+
Bash: codex exec "$(cat "{AI_STATE_DIR}/consult/question-1.tmp")" --json -m "gpt-5.3-codex" -c model_reasoning_effort="high"
|
|
135
|
+
Bash: codex exec "$(cat "{AI_STATE_DIR}/consult/question-2.tmp")" --json -m "gpt-5.3-codex" -c model_reasoning_effort="high"
|
|
136
|
+
Bash: codex exec "$(cat "{AI_STATE_DIR}/consult/question-3.tmp")" --json -m "gpt-5.3-codex" -c model_reasoning_effort="high"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
#### 4d. Parse and Format Results
|
|
140
|
+
|
|
141
|
+
Parse each response using the skill's output parsing rules for the target tool. Format as numbered responses:
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
# Multi-Consultation Results
|
|
145
|
+
|
|
146
|
+
Tool: {tool}, Model: {model}, Effort: {effort}, Instances: {count}
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Response 1 (Duration: {duration_ms}ms)
|
|
151
|
+
|
|
152
|
+
{response_1}
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Response 2 (Duration: {duration_ms}ms)
|
|
157
|
+
|
|
158
|
+
{response_2}
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
[... for each instance ...]
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Synthesis
|
|
167
|
+
|
|
168
|
+
Key agreement points:
|
|
169
|
+
- [Common themes across responses]
|
|
170
|
+
|
|
171
|
+
Key differences:
|
|
172
|
+
- [Where responses diverge]
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
If some instances failed but others succeeded, show the successful responses and note failures:
|
|
176
|
+
`[WARN] Instance {N} failed: {error}. Showing {M} of {count} responses.`
|
|
177
|
+
|
|
178
|
+
#### 4e. Clean Up and Save State
|
|
179
|
+
|
|
180
|
+
1. Delete all indexed temp files (`question-1.tmp` through `question-{count}.tmp`)
|
|
181
|
+
2. Save multi-session state to `{AI_STATE_DIR}/consult/last-multi-session.json`:
|
|
182
|
+
|
|
183
|
+
```json
|
|
184
|
+
{
|
|
185
|
+
"tool": "codex",
|
|
186
|
+
"model": "gpt-5.3-codex",
|
|
187
|
+
"effort": "high",
|
|
188
|
+
"count": 3,
|
|
189
|
+
"timestamp": "{ISO 8601 timestamp of execution}",
|
|
190
|
+
"question": "original question text",
|
|
191
|
+
"sessions": [
|
|
192
|
+
{"session_id": "abc-123", "continuable": true},
|
|
193
|
+
{"session_id": "def-456", "continuable": true},
|
|
194
|
+
{"session_id": "ghi-789", "continuable": true}
|
|
195
|
+
]
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
3. Also save the first session to `{AI_STATE_DIR}/consult/last-session.json` (standard format) so `--continue` works.
|
|
200
|
+
|
|
89
201
|
## Error Handling
|
|
90
202
|
|
|
91
203
|
| Error | Action |
|
|
@@ -98,26 +210,7 @@ Write session state to the sessionFile path provided by the command for continui
|
|
|
98
210
|
|
|
99
211
|
## Output Sanitization
|
|
100
212
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
| Pattern | Description | Replacement |
|
|
104
|
-
|---------|-------------|-------------|
|
|
105
|
-
| `sk-[a-zA-Z0-9_-]{20,}` | Anthropic API keys | `[REDACTED_API_KEY]` |
|
|
106
|
-
| `sk-proj-[a-zA-Z0-9_-]{20,}` | OpenAI project keys | `[REDACTED_API_KEY]` |
|
|
107
|
-
| `sk-ant-[a-zA-Z0-9_-]{20,}` | Anthropic API keys (ant prefix) | `[REDACTED_API_KEY]` |
|
|
108
|
-
| `AIza[a-zA-Z0-9_-]{30,}` | Google API keys | `[REDACTED_API_KEY]` |
|
|
109
|
-
| `ghp_[a-zA-Z0-9]{36,}` | GitHub personal access tokens | `[REDACTED_TOKEN]` |
|
|
110
|
-
| `gho_[a-zA-Z0-9]{36,}` | GitHub OAuth tokens | `[REDACTED_TOKEN]` |
|
|
111
|
-
| `github_pat_[a-zA-Z0-9_]{20,}` | GitHub fine-grained PATs | `[REDACTED_TOKEN]` |
|
|
112
|
-
| `ANTHROPIC_API_KEY=[^\s]+` | Key assignment in env output | `ANTHROPIC_API_KEY=[REDACTED]` |
|
|
113
|
-
| `OPENAI_API_KEY=[^\s]+` | Key assignment in env output | `OPENAI_API_KEY=[REDACTED]` |
|
|
114
|
-
| `GOOGLE_API_KEY=[^\s]+` | Key assignment in env output | `GOOGLE_API_KEY=[REDACTED]` |
|
|
115
|
-
| `GEMINI_API_KEY=[^\s]+` | Key assignment in env output | `GEMINI_API_KEY=[REDACTED]` |
|
|
116
|
-
| `AKIA[A-Z0-9]{16}` | AWS access keys | `[REDACTED_AWS_KEY]` |
|
|
117
|
-
| `ASIA[A-Z0-9]{16}` | AWS session tokens | `[REDACTED_AWS_KEY]` |
|
|
118
|
-
| `Bearer [a-zA-Z0-9_-]{20,}` | Authorization headers | `Bearer [REDACTED]` |
|
|
119
|
-
|
|
120
|
-
Apply redaction to the full response text before inserting into the result JSON. If any redaction occurs, append a note: `[WARN] Sensitive tokens were redacted from the response.`
|
|
213
|
+
Apply the redaction patterns from the consult skill (`plugins/consult/skills/consult/SKILL.md`, Output Sanitization section). The skill is the canonical source for all redaction patterns.
|
|
121
214
|
|
|
122
215
|
## Critical Constraints
|
|
123
216
|
|