opencode-swarm 6.67.0 → 6.67.1
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/dist/cli/index.js +6 -1
- package/dist/commands/doctor.d.ts +7 -0
- package/dist/index.js +24 -7
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -37050,7 +37050,7 @@ function checkAgentToolMapAlignment(registeredKeys) {
|
|
|
37050
37050
|
id: `agent-tool-map-mismatch-${agentName}-${toolName}`,
|
|
37051
37051
|
title: "AGENT_TOOL_MAP alignment gap",
|
|
37052
37052
|
description: `Tool "${toolName}" is assigned to agent "${agentName}" in AGENT_TOOL_MAP but is not registered in the plugin's tool: {} block. The agent will not be able to use this tool.`,
|
|
37053
|
-
severity: "
|
|
37053
|
+
severity: "error",
|
|
37054
37054
|
path: `AGENT_TOOL_MAP.${agentName}`,
|
|
37055
37055
|
currentValue: toolName,
|
|
37056
37056
|
autoFixable: false
|
|
@@ -37159,6 +37159,11 @@ function formatToolDoctorMarkdown(result) {
|
|
|
37159
37159
|
}
|
|
37160
37160
|
lines.push("");
|
|
37161
37161
|
}
|
|
37162
|
+
if (result.summary.error > 0) {
|
|
37163
|
+
lines.push("---", "");
|
|
37164
|
+
lines.push(`**BLOCKING**: ${result.summary.error} error-severity finding(s) must be resolved before release. ` + `AGENT_TOOL_MAP alignment errors mean an agent's system prompt instructs the model to call a tool that opencode has not registered \u2014 the agent's workflow will silently fail at runtime.`);
|
|
37165
|
+
lines.push("");
|
|
37166
|
+
}
|
|
37162
37167
|
}
|
|
37163
37168
|
return lines.join(`
|
|
37164
37169
|
`);
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
import { type ConfigDoctorResult } from '../services/config-doctor';
|
|
2
|
+
/**
|
|
3
|
+
* Format tool doctor result as markdown for command output.
|
|
4
|
+
*
|
|
5
|
+
* Exported for unit testing of the BLOCKING footer enforcement path.
|
|
6
|
+
*/
|
|
7
|
+
export declare function formatToolDoctorMarkdown(result: ConfigDoctorResult): string;
|
|
1
8
|
/**
|
|
2
9
|
* Handle /swarm config doctor command.
|
|
3
10
|
* Maps to: config doctor service (runConfigDoctor)
|
package/dist/index.js
CHANGED
|
@@ -35284,7 +35284,7 @@ function checkAgentToolMapAlignment(registeredKeys) {
|
|
|
35284
35284
|
id: `agent-tool-map-mismatch-${agentName}-${toolName}`,
|
|
35285
35285
|
title: "AGENT_TOOL_MAP alignment gap",
|
|
35286
35286
|
description: `Tool "${toolName}" is assigned to agent "${agentName}" in AGENT_TOOL_MAP but is not registered in the plugin's tool: {} block. The agent will not be able to use this tool.`,
|
|
35287
|
-
severity: "
|
|
35287
|
+
severity: "error",
|
|
35288
35288
|
path: `AGENT_TOOL_MAP.${agentName}`,
|
|
35289
35289
|
currentValue: toolName,
|
|
35290
35290
|
autoFixable: false
|
|
@@ -50015,6 +50015,11 @@ function formatToolDoctorMarkdown(result) {
|
|
|
50015
50015
|
}
|
|
50016
50016
|
lines.push("");
|
|
50017
50017
|
}
|
|
50018
|
+
if (result.summary.error > 0) {
|
|
50019
|
+
lines.push("---", "");
|
|
50020
|
+
lines.push(`**BLOCKING**: ${result.summary.error} error-severity finding(s) must be resolved before release. ` + `AGENT_TOOL_MAP alignment errors mean an agent's system prompt instructs the model to call a tool that opencode has not registered \u2014 the agent's workflow will silently fail at runtime.`);
|
|
50021
|
+
lines.push("");
|
|
50022
|
+
}
|
|
50018
50023
|
}
|
|
50019
50024
|
return lines.join(`
|
|
50020
50025
|
`);
|
|
@@ -54733,16 +54738,17 @@ ${customAppendPrompt}`;
|
|
|
54733
54738
|
}
|
|
54734
54739
|
prompt = prompt?.replace("{{YOUR_TOOLS}}", buildYourToolsList())?.replace("{{AVAILABLE_TOOLS}}", buildAvailableToolsList())?.replace("{{SLASH_COMMANDS}}", buildSlashCommandsList());
|
|
54735
54740
|
const councilBlock = buildCouncilWorkflow(council);
|
|
54741
|
+
const hasPlaceholder = prompt?.includes("{{COUNCIL_WORKFLOW}}") === true;
|
|
54736
54742
|
if (councilBlock === "") {
|
|
54737
|
-
prompt = prompt?.replace(`
|
|
54738
|
-
|
|
54739
|
-
{{COUNCIL_WORKFLOW}}
|
|
54740
|
-
|
|
54741
|
-
`, `
|
|
54743
|
+
prompt = prompt?.replace(/\n\n\{\{COUNCIL_WORKFLOW\}\}\n\n/g, `
|
|
54742
54744
|
|
|
54743
54745
|
`);
|
|
54746
|
+
} else if (hasPlaceholder) {
|
|
54747
|
+
prompt = prompt?.replace(/\{\{COUNCIL_WORKFLOW\}\}/g, councilBlock);
|
|
54744
54748
|
} else {
|
|
54745
|
-
prompt = prompt
|
|
54749
|
+
prompt = `${prompt ?? ""}
|
|
54750
|
+
|
|
54751
|
+
${councilBlock}`;
|
|
54746
54752
|
}
|
|
54747
54753
|
const advEnabled = adversarialTesting?.enabled ?? true;
|
|
54748
54754
|
const advScope = adversarialTesting?.scope ?? "all";
|
|
@@ -56494,6 +56500,13 @@ function getAgentConfigs(config3, directory, sessionId) {
|
|
|
56494
56500
|
} else {
|
|
56495
56501
|
allowedTools = AGENT_TOOL_MAP[baseAgentName];
|
|
56496
56502
|
}
|
|
56503
|
+
if (baseAgentName === "architect" && config3?.council?.enabled === true && override !== undefined) {
|
|
56504
|
+
const required3 = ["declare_council_criteria", "convene_council"];
|
|
56505
|
+
const missing = required3.filter((t) => !override.includes(t));
|
|
56506
|
+
if (missing.length > 0) {
|
|
56507
|
+
throw new Error(`[opencode-swarm] Conflicting config: council.enabled=true but tool_filter.overrides.architect omits ${missing.join(", ")}. ` + `Either set council.enabled=false, remove the architect override entirely to fall back on AGENT_TOOL_MAP, or add the missing council tools to the override. ` + `Refusing to silently override your explicit tool_filter.overrides.architect.`);
|
|
56508
|
+
}
|
|
56509
|
+
}
|
|
56497
56510
|
if (!allowedTools && !Object.hasOwn(toolFilterOverrides, baseAgentName)) {
|
|
56498
56511
|
if (!warnedMissingWhitelist.has(baseAgentName)) {
|
|
56499
56512
|
console.warn(`[getAgentConfigs] Unknown agent '${baseAgentName}', defaulting to minimal toolset.`);
|
|
@@ -80067,7 +80080,9 @@ var OpenCodeSwarm = async (ctx) => {
|
|
|
80067
80080
|
checkpoint,
|
|
80068
80081
|
completion_verify,
|
|
80069
80082
|
complexity_hotspots,
|
|
80083
|
+
convene_council,
|
|
80070
80084
|
curator_analyze,
|
|
80085
|
+
declare_council_criteria,
|
|
80071
80086
|
knowledge_add,
|
|
80072
80087
|
knowledge_recall,
|
|
80073
80088
|
knowledge_remove,
|
|
@@ -80082,6 +80097,7 @@ var OpenCodeSwarm = async (ctx) => {
|
|
|
80082
80097
|
imports,
|
|
80083
80098
|
knowledge_query,
|
|
80084
80099
|
lint,
|
|
80100
|
+
lint_spec,
|
|
80085
80101
|
diff,
|
|
80086
80102
|
pkg_audit,
|
|
80087
80103
|
placeholder_scan,
|
|
@@ -80089,6 +80105,7 @@ var OpenCodeSwarm = async (ctx) => {
|
|
|
80089
80105
|
pre_check_batch,
|
|
80090
80106
|
quality_budget,
|
|
80091
80107
|
repo_map,
|
|
80108
|
+
req_coverage,
|
|
80092
80109
|
retrieve_summary,
|
|
80093
80110
|
save_plan,
|
|
80094
80111
|
sast_scan,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-swarm",
|
|
3
|
-
"version": "6.67.
|
|
3
|
+
"version": "6.67.1",
|
|
4
4
|
"description": "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|