opencode-swarm 7.69.0 → 7.70.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/dist/cli/index.js CHANGED
@@ -52,7 +52,7 @@ var package_default;
52
52
  var init_package = __esm(() => {
53
53
  package_default = {
54
54
  name: "opencode-swarm",
55
- version: "7.69.0",
55
+ version: "7.70.0",
56
56
  description: "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
57
57
  main: "dist/index.js",
58
58
  types: "dist/index.d.ts",
@@ -17629,7 +17629,7 @@ var init_tool_metadata = __esm(() => {
17629
17629
  },
17630
17630
  apply_patch: {
17631
17631
  description: "Apply a unified diff patch to workspace files with exact context matching, atomic writes, and path validation",
17632
- agents: ["coder"]
17632
+ agents: ["coder", "test_engineer"]
17633
17633
  },
17634
17634
  external_skill_discover: {
17635
17635
  description: "Discover external skill candidates from configured sources. Returns a disabled message when external_skills.curation_enabled is false.",
@@ -17968,7 +17968,7 @@ function resolveExternalSkillsConfig(input) {
17968
17968
  };
17969
17969
  return merged;
17970
17970
  }
17971
- var SEPARATORS, CANONICAL_ROLES_LONGEST_FIRST, CANONICAL_ROLES_SET, AgentOverrideConfigSchema, SwarmConfigSchema, HooksConfigSchema, ScoringWeightsSchema, DecisionDecaySchema, TokenRatiosSchema, ScoringConfigSchema, ContextBudgetConfigSchema, EvidenceConfigSchema, GateFeatureSchema, PlaceholderScanConfigSchema, QualityBudgetConfigSchema, GateConfigSchema, PipelineConfigSchema, PhaseCompleteConfigSchema, SummaryConfigSchema, ReviewPassesConfigSchema, AdversarialDetectionConfigSchema, AdversarialTestingConfigSchemaBase, AdversarialTestingConfigSchema, IntegrationAnalysisConfigSchema, DocsConfigSchema, DesignDocsConfigSchema, UIReviewConfigSchema, CompactionAdvisoryConfigSchema, LintConfigSchema, SecretscanConfigSchema, GuardrailsProfileSchema, DEFAULT_AGENT_PROFILES, DEFAULT_ARCHITECT_PROFILE, GuardrailsConfigSchema, WatchdogConfigSchema, SelfReviewConfigSchema, ToolFilterConfigSchema, PlanCursorConfigSchema, ContextMapConfigSchema, CheckpointConfigSchema, AutomationModeSchema, AutomationCapabilitiesSchema, AutomationConfigSchemaBase, AutomationConfigSchema, KnowledgeConfigSchema, MemoryConfigSchema, CuratorConfigSchema, ArchitecturalSupervisionConfigSchema, KnowledgeApplicationConfigSchema, SkillPropagationConfigSchema, SkillImproverConfigSchema, SpecWriterConfigSchema, SlopDetectorConfigSchema, IncrementalVerifyConfigSchema, CompactionConfigSchema, PrmConfigSchema, AgentAuthorityRuleSchema, AuthorityConfigSchema, GeneralCouncilMemberConfigSchema, GeneralCouncilConfigSchema, CouncilConfigSchema, PrMonitorConfigSchema, ParallelizationConfigSchema, WorktreeIsolationConfigSchema, LeanTurboConfigSchema, StandardTurboConfigSchema, LeanTurboStrategyConfigSchema, TurboConfigSchema, ExternalSkillCandidateSourceTypeSchema, ExternalSkillCandidateEvaluationVerdictSchema, DiscoverySourceSchema, ExternalSkillCandidateSchema, ExternalSkillsConfigSchema, DEFAULT_EXTERNAL_SKILLS_CONFIG, PluginConfigSchema;
17971
+ var SEPARATORS, CANONICAL_ROLES_LONGEST_FIRST, CANONICAL_ROLES_SET, AgentReasoningConfigSchema, AgentThinkingConfigSchema, AgentOverrideConfigSchema, SwarmConfigSchema, HooksConfigSchema, ScoringWeightsSchema, DecisionDecaySchema, TokenRatiosSchema, ScoringConfigSchema, ContextBudgetConfigSchema, EvidenceConfigSchema, GateFeatureSchema, PlaceholderScanConfigSchema, QualityBudgetConfigSchema, GateConfigSchema, PipelineConfigSchema, PhaseCompleteConfigSchema, SummaryConfigSchema, ReviewPassesConfigSchema, AdversarialDetectionConfigSchema, AdversarialTestingConfigSchemaBase, AdversarialTestingConfigSchema, IntegrationAnalysisConfigSchema, DocsConfigSchema, DesignDocsConfigSchema, UIReviewConfigSchema, CompactionAdvisoryConfigSchema, LintConfigSchema, SecretscanConfigSchema, GuardrailsProfileSchema, DEFAULT_AGENT_PROFILES, DEFAULT_ARCHITECT_PROFILE, GuardrailsConfigSchema, WatchdogConfigSchema, SelfReviewConfigSchema, ToolFilterConfigSchema, PlanCursorConfigSchema, ContextMapConfigSchema, CheckpointConfigSchema, AutomationModeSchema, AutomationCapabilitiesSchema, AutomationConfigSchemaBase, AutomationConfigSchema, KnowledgeConfigSchema, MemoryConfigSchema, CuratorConfigSchema, ArchitecturalSupervisionConfigSchema, KnowledgeApplicationConfigSchema, SkillPropagationConfigSchema, SkillImproverConfigSchema, SpecWriterConfigSchema, SlopDetectorConfigSchema, IncrementalVerifyConfigSchema, CompactionConfigSchema, PrmConfigSchema, AgentAuthorityRuleSchema, AuthorityConfigSchema, GeneralCouncilMemberConfigSchema, GeneralCouncilConfigSchema, CouncilConfigSchema, PrMonitorConfigSchema, ParallelizationConfigSchema, WorktreeIsolationConfigSchema, LeanTurboConfigSchema, StandardTurboConfigSchema, LeanTurboStrategyConfigSchema, TurboConfigSchema, ExternalSkillCandidateSourceTypeSchema, ExternalSkillCandidateEvaluationVerdictSchema, DiscoverySourceSchema, ExternalSkillCandidateSchema, ExternalSkillsConfigSchema, DEFAULT_EXTERNAL_SKILLS_CONFIG, PluginConfigSchema;
17972
17972
  var init_schema = __esm(() => {
17973
17973
  init_zod();
17974
17974
  init_constants();
@@ -17977,12 +17977,21 @@ var init_schema = __esm(() => {
17977
17977
  ...ALL_AGENT_NAMES
17978
17978
  ].sort((a, b) => b.length - a.length);
17979
17979
  CANONICAL_ROLES_SET = new Set(ALL_AGENT_NAMES);
17980
+ AgentReasoningConfigSchema = exports_external.object({
17981
+ effort: exports_external.enum(["low", "medium", "high", "max"]).optional()
17982
+ });
17983
+ AgentThinkingConfigSchema = exports_external.object({
17984
+ type: exports_external.enum(["enabled", "disabled"]).optional(),
17985
+ budget_tokens: exports_external.number().int().positive().optional()
17986
+ });
17980
17987
  AgentOverrideConfigSchema = exports_external.object({
17981
17988
  model: exports_external.string().optional(),
17982
17989
  variant: exports_external.string().min(1).optional(),
17983
17990
  temperature: exports_external.number().min(0).max(2).optional(),
17984
17991
  disabled: exports_external.boolean().optional(),
17985
- fallback_models: exports_external.array(exports_external.string()).max(3).optional()
17992
+ fallback_models: exports_external.array(exports_external.string()).max(3).optional(),
17993
+ reasoning: AgentReasoningConfigSchema.optional(),
17994
+ thinking: AgentThinkingConfigSchema.optional()
17986
17995
  });
17987
17996
  SwarmConfigSchema = exports_external.object({
17988
17997
  name: exports_external.string().optional(),
@@ -66,12 +66,44 @@ export declare function resolveGeneratedAgentRole(agentName: string, generatedAg
66
66
  * extractor matches.
67
67
  */
68
68
  export declare function stripKnownSwarmPrefix(agentName: string): string;
69
+ export declare const AgentReasoningConfigSchema: z.ZodObject<{
70
+ effort: z.ZodOptional<z.ZodEnum<{
71
+ low: "low";
72
+ medium: "medium";
73
+ high: "high";
74
+ max: "max";
75
+ }>>;
76
+ }, z.core.$strip>;
77
+ export type AgentReasoningConfig = z.infer<typeof AgentReasoningConfigSchema>;
78
+ export declare const AgentThinkingConfigSchema: z.ZodObject<{
79
+ type: z.ZodOptional<z.ZodEnum<{
80
+ enabled: "enabled";
81
+ disabled: "disabled";
82
+ }>>;
83
+ budget_tokens: z.ZodOptional<z.ZodNumber>;
84
+ }, z.core.$strip>;
85
+ export type AgentThinkingConfig = z.infer<typeof AgentThinkingConfigSchema>;
69
86
  export declare const AgentOverrideConfigSchema: z.ZodObject<{
70
87
  model: z.ZodOptional<z.ZodString>;
71
88
  variant: z.ZodOptional<z.ZodString>;
72
89
  temperature: z.ZodOptional<z.ZodNumber>;
73
90
  disabled: z.ZodOptional<z.ZodBoolean>;
74
91
  fallback_models: z.ZodOptional<z.ZodArray<z.ZodString>>;
92
+ reasoning: z.ZodOptional<z.ZodObject<{
93
+ effort: z.ZodOptional<z.ZodEnum<{
94
+ low: "low";
95
+ medium: "medium";
96
+ high: "high";
97
+ max: "max";
98
+ }>>;
99
+ }, z.core.$strip>>;
100
+ thinking: z.ZodOptional<z.ZodObject<{
101
+ type: z.ZodOptional<z.ZodEnum<{
102
+ enabled: "enabled";
103
+ disabled: "disabled";
104
+ }>>;
105
+ budget_tokens: z.ZodOptional<z.ZodNumber>;
106
+ }, z.core.$strip>>;
75
107
  }, z.core.$strip>;
76
108
  export type AgentOverrideConfig = z.infer<typeof AgentOverrideConfigSchema>;
77
109
  export declare const SwarmConfigSchema: z.ZodObject<{
@@ -82,6 +114,21 @@ export declare const SwarmConfigSchema: z.ZodObject<{
82
114
  temperature: z.ZodOptional<z.ZodNumber>;
83
115
  disabled: z.ZodOptional<z.ZodBoolean>;
84
116
  fallback_models: z.ZodOptional<z.ZodArray<z.ZodString>>;
117
+ reasoning: z.ZodOptional<z.ZodObject<{
118
+ effort: z.ZodOptional<z.ZodEnum<{
119
+ low: "low";
120
+ medium: "medium";
121
+ high: "high";
122
+ max: "max";
123
+ }>>;
124
+ }, z.core.$strip>>;
125
+ thinking: z.ZodOptional<z.ZodObject<{
126
+ type: z.ZodOptional<z.ZodEnum<{
127
+ enabled: "enabled";
128
+ disabled: "disabled";
129
+ }>>;
130
+ budget_tokens: z.ZodOptional<z.ZodNumber>;
131
+ }, z.core.$strip>>;
85
132
  }, z.core.$strip>>>;
86
133
  }, z.core.$strip>;
87
134
  export type SwarmConfig = z.infer<typeof SwarmConfigSchema>;
@@ -1146,6 +1193,21 @@ export declare const PluginConfigSchema: z.ZodObject<{
1146
1193
  temperature: z.ZodOptional<z.ZodNumber>;
1147
1194
  disabled: z.ZodOptional<z.ZodBoolean>;
1148
1195
  fallback_models: z.ZodOptional<z.ZodArray<z.ZodString>>;
1196
+ reasoning: z.ZodOptional<z.ZodObject<{
1197
+ effort: z.ZodOptional<z.ZodEnum<{
1198
+ low: "low";
1199
+ medium: "medium";
1200
+ high: "high";
1201
+ max: "max";
1202
+ }>>;
1203
+ }, z.core.$strip>>;
1204
+ thinking: z.ZodOptional<z.ZodObject<{
1205
+ type: z.ZodOptional<z.ZodEnum<{
1206
+ enabled: "enabled";
1207
+ disabled: "disabled";
1208
+ }>>;
1209
+ budget_tokens: z.ZodOptional<z.ZodNumber>;
1210
+ }, z.core.$strip>>;
1149
1211
  }, z.core.$strip>>>;
1150
1212
  default_agent: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<string | undefined, string | undefined>>;
1151
1213
  auto_select_architect: z.ZodPipe<z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>, z.ZodTransform<string | boolean | undefined, string | boolean | undefined>>;
@@ -1157,6 +1219,21 @@ export declare const PluginConfigSchema: z.ZodObject<{
1157
1219
  temperature: z.ZodOptional<z.ZodNumber>;
1158
1220
  disabled: z.ZodOptional<z.ZodBoolean>;
1159
1221
  fallback_models: z.ZodOptional<z.ZodArray<z.ZodString>>;
1222
+ reasoning: z.ZodOptional<z.ZodObject<{
1223
+ effort: z.ZodOptional<z.ZodEnum<{
1224
+ low: "low";
1225
+ medium: "medium";
1226
+ high: "high";
1227
+ max: "max";
1228
+ }>>;
1229
+ }, z.core.$strip>>;
1230
+ thinking: z.ZodOptional<z.ZodObject<{
1231
+ type: z.ZodOptional<z.ZodEnum<{
1232
+ enabled: "enabled";
1233
+ disabled: "disabled";
1234
+ }>>;
1235
+ budget_tokens: z.ZodOptional<z.ZodNumber>;
1236
+ }, z.core.$strip>>;
1160
1237
  }, z.core.$strip>>>;
1161
1238
  }, z.core.$strip>>>;
1162
1239
  max_iterations: z.ZodDefault<z.ZodNumber>;
package/dist/index.js CHANGED
@@ -69,7 +69,7 @@ var package_default;
69
69
  var init_package = __esm(() => {
70
70
  package_default = {
71
71
  name: "opencode-swarm",
72
- version: "7.69.0",
72
+ version: "7.70.0",
73
73
  description: "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
74
74
  main: "dist/index.js",
75
75
  types: "dist/index.d.ts",
@@ -706,7 +706,7 @@ var init_tool_metadata = __esm(() => {
706
706
  },
707
707
  apply_patch: {
708
708
  description: "Apply a unified diff patch to workspace files with exact context matching, atomic writes, and path validation",
709
- agents: ["coder"]
709
+ agents: ["coder", "test_engineer"]
710
710
  },
711
711
  external_skill_discover: {
712
712
  description: "Discover external skill candidates from configured sources. Returns a disabled message when external_skills.curation_enabled is false.",
@@ -15336,7 +15336,7 @@ function resolveExternalSkillsConfig(input) {
15336
15336
  };
15337
15337
  return merged;
15338
15338
  }
15339
- var _internals, SEPARATORS, CANONICAL_ROLES_LONGEST_FIRST, CANONICAL_ROLES_SET, AgentOverrideConfigSchema, SwarmConfigSchema, HooksConfigSchema, ScoringWeightsSchema, DecisionDecaySchema, TokenRatiosSchema, ScoringConfigSchema, ContextBudgetConfigSchema, EvidenceConfigSchema, GateFeatureSchema, PlaceholderScanConfigSchema, QualityBudgetConfigSchema, GateConfigSchema, PipelineConfigSchema, PhaseCompleteConfigSchema, SummaryConfigSchema, ReviewPassesConfigSchema, AdversarialDetectionConfigSchema, AdversarialTestingConfigSchemaBase, AdversarialTestingConfigSchema, IntegrationAnalysisConfigSchema, DocsConfigSchema, DesignDocsConfigSchema, UIReviewConfigSchema, CompactionAdvisoryConfigSchema, LintConfigSchema, SecretscanConfigSchema, GuardrailsProfileSchema, DEFAULT_AGENT_PROFILES, DEFAULT_ARCHITECT_PROFILE, GuardrailsConfigSchema, WatchdogConfigSchema, SelfReviewConfigSchema, ToolFilterConfigSchema, PlanCursorConfigSchema, ContextMapConfigSchema, CheckpointConfigSchema, AutomationModeSchema, AutomationCapabilitiesSchema, AutomationConfigSchemaBase, AutomationConfigSchema, KnowledgeConfigSchema, MemoryConfigSchema, CuratorConfigSchema, ArchitecturalSupervisionConfigSchema, KnowledgeApplicationConfigSchema, SkillPropagationConfigSchema, SkillImproverConfigSchema, SpecWriterConfigSchema, SlopDetectorConfigSchema, IncrementalVerifyConfigSchema, CompactionConfigSchema, PrmConfigSchema, AgentAuthorityRuleSchema, AuthorityConfigSchema, GeneralCouncilMemberConfigSchema, GeneralCouncilConfigSchema, CouncilConfigSchema, PrMonitorConfigSchema, ParallelizationConfigSchema, WorktreeIsolationConfigSchema, LeanTurboConfigSchema, StandardTurboConfigSchema, LeanTurboStrategyConfigSchema, TurboConfigSchema, ExternalSkillCandidateSourceTypeSchema, ExternalSkillCandidateEvaluationVerdictSchema, DiscoverySourceSchema, ExternalSkillCandidateSchema, ExternalSkillsConfigSchema, DEFAULT_EXTERNAL_SKILLS_CONFIG, PluginConfigSchema;
15339
+ var _internals, SEPARATORS, CANONICAL_ROLES_LONGEST_FIRST, CANONICAL_ROLES_SET, AgentReasoningConfigSchema, AgentThinkingConfigSchema, AgentOverrideConfigSchema, SwarmConfigSchema, HooksConfigSchema, ScoringWeightsSchema, DecisionDecaySchema, TokenRatiosSchema, ScoringConfigSchema, ContextBudgetConfigSchema, EvidenceConfigSchema, GateFeatureSchema, PlaceholderScanConfigSchema, QualityBudgetConfigSchema, GateConfigSchema, PipelineConfigSchema, PhaseCompleteConfigSchema, SummaryConfigSchema, ReviewPassesConfigSchema, AdversarialDetectionConfigSchema, AdversarialTestingConfigSchemaBase, AdversarialTestingConfigSchema, IntegrationAnalysisConfigSchema, DocsConfigSchema, DesignDocsConfigSchema, UIReviewConfigSchema, CompactionAdvisoryConfigSchema, LintConfigSchema, SecretscanConfigSchema, GuardrailsProfileSchema, DEFAULT_AGENT_PROFILES, DEFAULT_ARCHITECT_PROFILE, GuardrailsConfigSchema, WatchdogConfigSchema, SelfReviewConfigSchema, ToolFilterConfigSchema, PlanCursorConfigSchema, ContextMapConfigSchema, CheckpointConfigSchema, AutomationModeSchema, AutomationCapabilitiesSchema, AutomationConfigSchemaBase, AutomationConfigSchema, KnowledgeConfigSchema, MemoryConfigSchema, CuratorConfigSchema, ArchitecturalSupervisionConfigSchema, KnowledgeApplicationConfigSchema, SkillPropagationConfigSchema, SkillImproverConfigSchema, SpecWriterConfigSchema, SlopDetectorConfigSchema, IncrementalVerifyConfigSchema, CompactionConfigSchema, PrmConfigSchema, AgentAuthorityRuleSchema, AuthorityConfigSchema, GeneralCouncilMemberConfigSchema, GeneralCouncilConfigSchema, CouncilConfigSchema, PrMonitorConfigSchema, ParallelizationConfigSchema, WorktreeIsolationConfigSchema, LeanTurboConfigSchema, StandardTurboConfigSchema, LeanTurboStrategyConfigSchema, TurboConfigSchema, ExternalSkillCandidateSourceTypeSchema, ExternalSkillCandidateEvaluationVerdictSchema, DiscoverySourceSchema, ExternalSkillCandidateSchema, ExternalSkillsConfigSchema, DEFAULT_EXTERNAL_SKILLS_CONFIG, PluginConfigSchema;
15340
15340
  var init_schema = __esm(() => {
15341
15341
  init_zod();
15342
15342
  init_constants();
@@ -15350,12 +15350,21 @@ var init_schema = __esm(() => {
15350
15350
  ...ALL_AGENT_NAMES
15351
15351
  ].sort((a, b) => b.length - a.length);
15352
15352
  CANONICAL_ROLES_SET = new Set(ALL_AGENT_NAMES);
15353
+ AgentReasoningConfigSchema = exports_external.object({
15354
+ effort: exports_external.enum(["low", "medium", "high", "max"]).optional()
15355
+ });
15356
+ AgentThinkingConfigSchema = exports_external.object({
15357
+ type: exports_external.enum(["enabled", "disabled"]).optional(),
15358
+ budget_tokens: exports_external.number().int().positive().optional()
15359
+ });
15353
15360
  AgentOverrideConfigSchema = exports_external.object({
15354
15361
  model: exports_external.string().optional(),
15355
15362
  variant: exports_external.string().min(1).optional(),
15356
15363
  temperature: exports_external.number().min(0).max(2).optional(),
15357
15364
  disabled: exports_external.boolean().optional(),
15358
- fallback_models: exports_external.array(exports_external.string()).max(3).optional()
15365
+ fallback_models: exports_external.array(exports_external.string()).max(3).optional(),
15366
+ reasoning: AgentReasoningConfigSchema.optional(),
15367
+ thinking: AgentThinkingConfigSchema.optional()
15359
15368
  });
15360
15369
  SwarmConfigSchema = exports_external.object({
15361
15370
  name: exports_external.string().optional(),
@@ -90292,19 +90301,21 @@ YOUR TOOLS: {{YOUR_TOOLS}}
90292
90301
  CODER'S TOOLS: write, edit, patch, apply_patch, create_file, insert, replace — any tool that modifies file contents.
90293
90302
  If a tool modifies a file, it is a CODER tool. Delegate.
90294
90303
  <!-- BEHAVIORAL_GUIDANCE_START -->
90295
- 1a. SCOPE DISCIPLINE — call declare_scope BEFORE every coder delegation.
90304
+ 1a. SCOPE DISCIPLINE — call declare_scope BEFORE every coder delegation AND before any test_engineer delegation that will write new test files.
90296
90305
  - Before you delegate a coding task, call declare_scope with { taskId, files } where \`files\` is the exact list of paths the coder is allowed to write. Bundle any generated/lockfile paths that the change will produce (e.g. package-lock.json, Cargo.lock, dist/*).
90297
- - If coder returns "WRITE BLOCKED" for a path outside the declared list: call declare_scope again with the missing path added. Do NOT instruct the coder to use bash, sed, echo, cat, tee, dd, or any interpreter eval (python -c, node -e, bun -e, ruby -e) to bypass the block. Those routes bypass the authority check and violate scope discipline.
90306
+ - Before you delegate to test_engineer with an instruction to CREATE or MODIFY test files, call declare_scope with { taskId, files } listing the exact test file path(s) (e.g. src/auth/login.test.ts, tests/unit/foo.spec.ts) the test_engineer is expected to write.
90307
+ - If coder or test_engineer returns "WRITE BLOCKED" for a path outside the declared list: call declare_scope again with the missing path added. Do NOT instruct the coder to use bash, sed, echo, cat, tee, dd, or any interpreter eval (python -c, node -e, bun -e, ruby -e) to bypass the block. Those routes bypass the authority check and violate scope discipline.
90298
90308
  - Never wrap a file write in eval, bash -c, sh -c, a subshell, or a heredoc-to-file redirect. Those are bash workarounds and are banned even when scope appears to permit them — the write-authority guard is tool-scoped; bash is unguarded and must not be used as a write path.
90299
90309
  - Do NOT use mv, Move-Item, move, ren, Rename-Item, or cp-then-rm chains to relocate, rename, or delete files under \`.swarm/\` as a workaround for blocked destructive commands. Those are file-move shell bypasses and are banned. Use the tool's dedicated tools (\`.swarm/\` file management or evidence manager tools) instead.
90300
90310
  - If you cannot enumerate files up front (e.g. a broad refactor), declare the containing directories — declare_scope accepts directory entries and grants containment.
90301
- - Rationale: declare_scope persists the allowed set to disk (.swarm/scopes/scope-\${taskId}.json) so it survives cross-process delegation. Without a call, the coder process reads an empty scope and every Edit/Write is denied.
90311
+ - Rationale: declare_scope persists the allowed set to disk (.swarm/scopes/scope-\${taskId}.json) so it survives cross-process delegation. Without a call, the coder or test_engineer process reads an empty scope and every Edit/Write is denied.
90302
90312
  <!-- BEHAVIORAL_GUIDANCE_END -->
90303
90313
  2. ONE agent per message. Send, STOP, wait for response.
90304
90314
  Exception: Stage B reviewer/test_engineer gate agents for the SAME completed coder task may be dispatched together before waiting when both gates are required.
90305
90315
  This exception NEVER applies to coder delegations. Preserve ONE task per coder call.
90306
90316
  3. ONE task per {{AGENT_PREFIX}}coder call. Never batch.
90307
90317
  3a. PRE-DELEGATION SCOPE CALL (required): BEFORE every {{AGENT_PREFIX}}coder delegation, you MUST call \`declare_scope\` with { taskId, files } listing the exact file(s) this task will modify (including generated/lockfile paths). No \`declare_scope\` call → no coder delegation. See Rule 1a.
90318
+ 3b. PRE-DELEGATION SCOPE CALL (test_engineer): BEFORE any {{AGENT_PREFIX}}test_engineer delegation that will CREATE or MODIFY test files, you MUST call \`declare_scope\` with { taskId, files } listing the exact test file path(s) to write. Omitting this call leaves the write scope undeclared and will block the write. See Rule 1a.
90308
90319
  <!-- BEHAVIORAL_GUIDANCE_START -->
90309
90320
  BATCHING DETECTION — you are batching if your coder delegation contains ANY of:
90310
90321
  - The word "and" connecting two actions ("update X AND add Y")
@@ -93531,6 +93542,15 @@ function applyOverrides(agent, swarmAgents, swarmPrefix, quiet) {
93531
93542
  } else if (variantOverride !== undefined) {
93532
93543
  agent.config.variant = variantOverride;
93533
93544
  }
93545
+ const baseAgentName = stripSwarmPrefix(agent.name, swarmPrefix);
93546
+ const reasoningOverride = swarmAgents?.[baseAgentName]?.reasoning;
93547
+ if (reasoningOverride !== undefined) {
93548
+ agent.config.reasoning = reasoningOverride;
93549
+ }
93550
+ const thinkingOverride = swarmAgents?.[baseAgentName]?.thinking;
93551
+ if (thinkingOverride !== undefined) {
93552
+ agent.config.thinking = thinkingOverride;
93553
+ }
93534
93554
  return agent;
93535
93555
  }
93536
93556
  function createSwarmAgents(swarmId, swarmConfig, isDefault, pluginConfig, projectContext = emptyProjectContext()) {
@@ -361,7 +361,7 @@ export declare const TOOL_METADATA: {
361
361
  };
362
362
  apply_patch: {
363
363
  description: string;
364
- agents: "coder"[];
364
+ agents: ("test_engineer" | "coder")[];
365
365
  };
366
366
  external_skill_discover: {
367
367
  description: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-swarm",
3
- "version": "7.69.0",
3
+ "version": "7.70.0",
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",