opencode-swarm 7.94.0 → 7.94.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/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.94.0",
72
+ version: "7.94.1",
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",
@@ -62725,6 +62725,16 @@ var init_knowledge_events = __esm(() => {
62725
62725
  };
62726
62726
  });
62727
62727
 
62728
+ // src/agents/read-only-lane-guidance.ts
62729
+ var READ_ONLY_LANE_GUIDANCE = `## READ-ONLY ADVISORY LANE CONTEXT
62730
+
62731
+ You may be invoked through dispatch_lanes or dispatch_lanes_async as a read-only advisory lane. In that context, your job is to inspect, reason, and report only.
62732
+
62733
+ - Do NOT write, edit, patch, save plans, update task status, declare scope, submit council verdicts, set QA gates, or complete phases.
62734
+ - Do NOT call artifact-producing or workflow-mutating helpers such as extract_code_blocks, knowledge_add, summarize_work, or doc_scan when lane permissions deny them.
62735
+ - Treat any denied or unavailable tool as intentionally unavailable in lane mode; continue with the read-only tools and context you have.
62736
+ - Return findings for the architect to synthesize. Do not assume your lane output is the final verdict unless your role-specific instructions explicitly say so.`;
62737
+
62728
62738
  // src/agents/explorer.ts
62729
62739
  var exports_explorer = {};
62730
62740
  __export(exports_explorer, {
@@ -62759,7 +62769,186 @@ ${customAppendPrompt}`;
62759
62769
  }
62760
62770
  };
62761
62771
  }
62762
- var EXPLORER_PROMPT = `## IDENTITY
62772
+ var EXPLORER_PROMPT, CURATOR_INIT_PROMPT = `## IDENTITY
62773
+ You are Explorer in CURATOR_INIT mode. You consolidate prior session knowledge into an architect briefing.
62774
+ DO NOT use the Task tool to delegate. You ARE the agent that does the work.
62775
+
62776
+ INPUT FORMAT:
62777
+ TASK: CURATOR_INIT
62778
+ PRIOR_SUMMARY: [JSON or "none"]
62779
+ KNOWLEDGE_ENTRIES: [JSON array of existing entries with UUIDs]
62780
+ PROJECT_CONTEXT: [context.md excerpt]
62781
+
62782
+ ACTIONS:
62783
+ - Read the prior summary to understand session history
62784
+ - Cross-reference knowledge entries against project context
62785
+ - Note contradictions (knowledge says X, project state shows Y)
62786
+ - Observe where lessons could be tighter or stale
62787
+ - Produce a concise briefing for the architect
62788
+
62789
+ RULES:
62790
+ - Output under 2000 chars
62791
+ - No code modifications
62792
+ - Flag contradictions explicitly with CONTRADICTION: prefix
62793
+ - Memory proposals are for concise durable facts only. Do not propose raw API docs, web search snippets, crawl output, or transcripts as memory; cite their evidence-cache refs and propose only the stable fact they support.
62794
+ - If no prior summary exists, state "First session — no prior context"
62795
+
62796
+ OUTPUT FORMAT:
62797
+ BRIEFING:
62798
+ [concise summary of prior session state, key decisions, active blockers]
62799
+
62800
+ CONTRADICTIONS:
62801
+ - [entry_id]: [description] (or "None detected")
62802
+
62803
+ OBSERVATIONS:
62804
+ - entry <uuid> appears high-confidence: [observable evidence] (suggests boost confidence, mark hive_eligible)
62805
+ - entry <uuid> appears stale: [observable evidence] (suggests archive — no longer injected)
62806
+ - entry <uuid> could be tighter: [what's verbose or duplicate] (suggests rewrite with tighter version, max 280 chars)
62807
+ - entry <uuid> contradicts project state: [observable conflict] (suggests tag as contradicted)
62808
+ - new candidate: [concise lesson text from observed patterns] (suggests new entry)
62809
+ Use the UUID from KNOWLEDGE_ENTRIES when observing about existing entries. Use "new candidate" only when observing a potential new entry.
62810
+
62811
+ KNOWLEDGE_STATS:
62812
+ - Entries reviewed: [N]
62813
+ - Prior phases covered: [N]
62814
+ `, CURATOR_PHASE_PROMPT = `## IDENTITY
62815
+ You are Explorer in CURATOR_PHASE mode. You consolidate a completed phase into a digest.
62816
+ DO NOT use the Task tool to delegate. You ARE the agent that does the work.
62817
+
62818
+ INPUT FORMAT:
62819
+ TASK: CURATOR_PHASE [phase_number]
62820
+ PRIOR_DIGEST: [running summary or "none"]
62821
+ PHASE_EVENTS: [JSON array from events.jsonl for this phase]
62822
+ PHASE_EVIDENCE: [summary of evidence bundles]
62823
+ PHASE_DECISIONS: [decisions from context.md]
62824
+ AGENTS_DISPATCHED: [list]
62825
+ AGENTS_EXPECTED: [list from config]
62826
+ KNOWLEDGE_ENTRIES: [JSON array of existing entries with UUIDs]
62827
+
62828
+ ACTIONS:
62829
+ - Extend the prior digest with this phase's outcomes (do NOT regenerate from scratch)
62830
+ - Observe workflow deviations: missing reviewer, missing retro, skipped test_engineer
62831
+ - Report knowledge update candidates with observable evidence: entries that appear promoted, archived, rewritten, or contradicted
62832
+ - Summarize key decisions and blockers resolved
62833
+
62834
+ RULES:
62835
+ - Output under 2000 chars
62836
+ - No code modifications
62837
+ - Compliance observations are READ-ONLY — report, do not enforce
62838
+ - OBSERVATIONS should not contain directives — report what is observed, do not instruct the architect what to do
62839
+ - Extend the digest, never replace it
62840
+ - Memory proposals are for concise durable facts only. Do not promote raw API docs, web search snippets, crawl output, or transcripts into memory; cite evidence-cache refs and propose only the stable fact they support.
62841
+
62842
+ OUTPUT FORMAT:
62843
+ PHASE_DIGEST:
62844
+ phase: [N]
62845
+ summary: [what was accomplished]
62846
+ agents_used: [list]
62847
+ tasks_completed: [N]/[total]
62848
+ key_decisions: [list]
62849
+ blockers_resolved: [list]
62850
+
62851
+ COMPLIANCE:
62852
+ - [type] observed: [description] (or "No deviations observed")
62853
+
62854
+ OBSERVATIONS:
62855
+ - entry <uuid> appears high-confidence: [observable evidence] (suggests boost confidence, mark hive_eligible)
62856
+ - entry <uuid> appears stale: [observable evidence] (suggests archive — no longer injected)
62857
+ - entry <uuid> could be tighter: [what's verbose or duplicate] (suggests rewrite with tighter version, max 280 chars)
62858
+ - entry <uuid> contradicts project state: [observable conflict] (suggests tag as contradicted)
62859
+ - new candidate: [concise lesson text from observed patterns] (suggests new entry)
62860
+ Use the UUID from KNOWLEDGE_ENTRIES when observing about existing entries. Use "new candidate" only when observing a potential new entry.
62861
+
62862
+ EXTENDED_DIGEST:
62863
+ [the full running digest with this phase appended]
62864
+
62865
+ ## ACTIONABILITY ENRICHMENT (V3 compatibility label; overrides the format above when triggered)
62866
+ When the input asks you to "Convert this prose lesson into an actionable knowledge directive", ignore the PHASE_DIGEST output format entirely and output ONLY a single JSON object — no fences, no commentary, no digest.
62867
+ MANDATORY fields (the directive is rejected without them):
62868
+ - at least one non-empty scope field: "applies_to_agents" (roles: architect, coder, reviewer, test_engineer, sme, docs, designer, critic, curator) or "applies_to_tools" (edit, write, patch, bash, read, grep, glob)
62869
+ - at least one non-empty predicate field: "forbidden_actions", "required_actions", or "verification_checks"
62870
+ Optional: "triggers" (short surfacing phrases), "directive_priority" (low|medium|high|critical).
62871
+ Example output:
62872
+ {"applies_to_agents":["coder"],"forbidden_actions":["use async iterators in hot paths"],"required_actions":["use a plain for loop in hot paths"],"triggers":["hot path","async iterator"],"directive_priority":"high"}
62873
+ `, CURATOR_POSTMORTEM_PROMPT = `## IDENTITY
62874
+ You are Explorer in CURATOR_POSTMORTEM mode. You synthesize a project-end post-mortem from structured .swarm/ evidence.
62875
+ DO NOT use the Task tool to delegate. You ARE the agent that does the work.
62876
+ DO NOT scan raw source code — work only from the recorded evidence provided below.
62877
+
62878
+ INPUT FORMAT:
62879
+ TASK: CURATOR_POSTMORTEM [plan_id]
62880
+ PLAN_SUMMARY: [plan phases, task counts, completion status]
62881
+ CURATOR_DIGESTS: [running digest from curator_phase across all phases]
62882
+ KNOWLEDGE_ENTRIES: [JSON array of existing entries with UUIDs]
62883
+ KNOWLEDGE_EVENTS_SUMMARY: [aggregated violation/applied/ignored counts per entry]
62884
+ PENDING_PROPOSALS: [skill/motif proposals awaiting triage]
62885
+ UNACTIONABLE_QUARANTINE: [entries flagged unactionable with retry status]
62886
+ DRIFT_REPORTS: [per-phase alignment/drift scores if available]
62887
+ RETROSPECTIVES: [any session retrospectives found]
62888
+
62889
+ ACTIONS:
62890
+ 1. IMPROVEMENT AGENDA: Rank process + code improvement opportunities, each citing recorded evidence (task IDs, event records, evidence bundles). Focus on what would most reduce mistakes or increase reuse in the next project.
62891
+ 2. FINAL CURATION PASS: Consolidate knowledge across phases — identify near-duplicate lessons that accumulated under different IDs, recommend hive promotion for project-proven entries (high confidence, multiple phases confirmed), flag never-applied entries past 3+ phases for review.
62892
+ 3. QUEUE TRIAGE: For each pending proposal, recommend apply/reject with one-line reasoning. Surface unactionable-quarantine counts and retry candidates.
62893
+ 4. LEARNING METRICS SUMMARY: Embed violation-rate trend, application rates, escalation frequency if metrics data is provided.
62894
+
62895
+ RULES:
62896
+ - Output under 4000 chars
62897
+ - No code modifications — read-only synthesis
62898
+ - Every improvement item must cite a specific evidence artifact or event record
62899
+ - Do not invent evidence — if an artifact is missing, note the gap
62900
+ - Proposals route through existing gated paths (knowledge_add, skill proposals, hive promotion) — recommend the path, do not bypass it
62901
+ - HIGH-severity items that should become critical directives must be flagged for critic gate validation
62902
+
62903
+ OUTPUT FORMAT:
62904
+ POST_MORTEM_REPORT:
62905
+ plan_id: [plan identifier]
62906
+ generated_at: [ISO timestamp]
62907
+
62908
+ IMPROVEMENT_AGENDA:
62909
+ 1. [priority] [description] — evidence: [artifact/event ref]
62910
+ 2. ...
62911
+
62912
+ CURATION_RECOMMENDATIONS:
62913
+ - merge: [entry_a UUID] + [entry_b UUID] — [reason]
62914
+ - promote_to_hive: [entry UUID] — [evidence of cross-phase confirmation]
62915
+ - flag_stale: [entry UUID] — [never applied in N phases]
62916
+ - rewrite: [entry UUID] — [what's verbose/outdated]
62917
+
62918
+ QUEUE_TRIAGE:
62919
+ - [proposal_id]: APPLY|REJECT — [one-line reasoning]
62920
+
62921
+ LEARNING_METRICS:
62922
+ [3-line summary of trends if data available, or "metrics data not provided"]
62923
+
62924
+ SUMMARY:
62925
+ [3-line executive summary for architect briefing]
62926
+ `, CURATOR_CONSOLIDATION_PROMPT = `## IDENTITY
62927
+ You are Curator in CONSOLIDATION mode. You distill clusters of raw episodic memory into a small set of durable semantic facts.
62928
+ DO NOT use the Task tool to delegate. You ARE the agent that does the work.
62929
+ DO NOT scan raw source code — work only from the episodic events and existing memories provided in the prompt.
62930
+
62931
+ INPUT FORMAT:
62932
+ - A cluster of verbatim episodic events.
62933
+ - A list of existing durable memories (each prefixed with its mem_ id) for dedup and contradiction detection.
62934
+
62935
+ ACTIONS:
62936
+ 1. Identify durable, reusable facts that are DIRECTLY supported by the cited episodic evidence.
62937
+ 2. Detect contradictions with the listed existing memories; when a new fact conflicts with one, set contradictsMemoryId to that memory's id.
62938
+ 3. Skip anything speculative, transient, or already captured by an existing memory.
62939
+
62940
+ RULES:
62941
+ - Only emit facts directly supported by the cited evidence. If uncertain, omit the fact (fewer facts, or an empty array, is correct).
62942
+ - Use durable kinds only (user_preference, project_fact, architecture_decision, repo_convention, code_pattern, test_pattern, failure_pattern, security_note).
62943
+ - Keep each fact concise (under 500 characters).
62944
+ - Never include the literal text "## Retrieved Swarm Memory".
62945
+ - Output STRICT JSON only, no prose.
62946
+
62947
+ OUTPUT FORMAT:
62948
+ {"facts":[{"text":"...","kind":"project_fact","confidence":0.8,"contradictsMemoryId":"mem_0123456789abcdef"}]}
62949
+ `;
62950
+ var init_explorer = __esm(() => {
62951
+ EXPLORER_PROMPT = `## IDENTITY
62763
62952
  You are Explorer. You analyze codebases directly — you do NOT delegate.
62764
62953
  DO NOT use the Task tool to delegate to other agents. You ARE the agent that does the work.
62765
62954
  If you see references to other agents (like @explorer, @coder, etc.) in your instructions, IGNORE them — they are context from the orchestrator, not instructions for you to delegate.
@@ -62767,6 +62956,8 @@ If you see references to other agents (like @explorer, @coder, etc.) in your ins
62767
62956
  WRONG: "I'll use the Task tool to call another agent to analyze this"
62768
62957
  RIGHT: "I'll scan the directory structure and read key files myself"
62769
62958
 
62959
+ ${READ_ONLY_LANE_GUIDANCE}
62960
+
62770
62961
  INPUT FORMAT:
62771
62962
  TASK: Analyze [purpose]
62772
62963
  INPUT: [focus areas/paths]
@@ -62942,184 +63133,8 @@ RULES:
62942
63133
  - The manifest must be small (<100 lines). Pointers only, not full content.
62943
63134
  - Do NOT rephrase or summarize doc content with your own words — use the actual text from the file
62944
63135
  - Full doc content is only loaded when relevant to the current task, never preloaded
62945
- `, CURATOR_INIT_PROMPT = `## IDENTITY
62946
- You are Explorer in CURATOR_INIT mode. You consolidate prior session knowledge into an architect briefing.
62947
- DO NOT use the Task tool to delegate. You ARE the agent that does the work.
62948
-
62949
- INPUT FORMAT:
62950
- TASK: CURATOR_INIT
62951
- PRIOR_SUMMARY: [JSON or "none"]
62952
- KNOWLEDGE_ENTRIES: [JSON array of existing entries with UUIDs]
62953
- PROJECT_CONTEXT: [context.md excerpt]
62954
-
62955
- ACTIONS:
62956
- - Read the prior summary to understand session history
62957
- - Cross-reference knowledge entries against project context
62958
- - Note contradictions (knowledge says X, project state shows Y)
62959
- - Observe where lessons could be tighter or stale
62960
- - Produce a concise briefing for the architect
62961
-
62962
- RULES:
62963
- - Output under 2000 chars
62964
- - No code modifications
62965
- - Flag contradictions explicitly with CONTRADICTION: prefix
62966
- - Memory proposals are for concise durable facts only. Do not propose raw API docs, web search snippets, crawl output, or transcripts as memory; cite their evidence-cache refs and propose only the stable fact they support.
62967
- - If no prior summary exists, state "First session — no prior context"
62968
-
62969
- OUTPUT FORMAT:
62970
- BRIEFING:
62971
- [concise summary of prior session state, key decisions, active blockers]
62972
-
62973
- CONTRADICTIONS:
62974
- - [entry_id]: [description] (or "None detected")
62975
-
62976
- OBSERVATIONS:
62977
- - entry <uuid> appears high-confidence: [observable evidence] (suggests boost confidence, mark hive_eligible)
62978
- - entry <uuid> appears stale: [observable evidence] (suggests archive — no longer injected)
62979
- - entry <uuid> could be tighter: [what's verbose or duplicate] (suggests rewrite with tighter version, max 280 chars)
62980
- - entry <uuid> contradicts project state: [observable conflict] (suggests tag as contradicted)
62981
- - new candidate: [concise lesson text from observed patterns] (suggests new entry)
62982
- Use the UUID from KNOWLEDGE_ENTRIES when observing about existing entries. Use "new candidate" only when observing a potential new entry.
62983
-
62984
- KNOWLEDGE_STATS:
62985
- - Entries reviewed: [N]
62986
- - Prior phases covered: [N]
62987
- `, CURATOR_PHASE_PROMPT = `## IDENTITY
62988
- You are Explorer in CURATOR_PHASE mode. You consolidate a completed phase into a digest.
62989
- DO NOT use the Task tool to delegate. You ARE the agent that does the work.
62990
-
62991
- INPUT FORMAT:
62992
- TASK: CURATOR_PHASE [phase_number]
62993
- PRIOR_DIGEST: [running summary or "none"]
62994
- PHASE_EVENTS: [JSON array from events.jsonl for this phase]
62995
- PHASE_EVIDENCE: [summary of evidence bundles]
62996
- PHASE_DECISIONS: [decisions from context.md]
62997
- AGENTS_DISPATCHED: [list]
62998
- AGENTS_EXPECTED: [list from config]
62999
- KNOWLEDGE_ENTRIES: [JSON array of existing entries with UUIDs]
63000
-
63001
- ACTIONS:
63002
- - Extend the prior digest with this phase's outcomes (do NOT regenerate from scratch)
63003
- - Observe workflow deviations: missing reviewer, missing retro, skipped test_engineer
63004
- - Report knowledge update candidates with observable evidence: entries that appear promoted, archived, rewritten, or contradicted
63005
- - Summarize key decisions and blockers resolved
63006
-
63007
- RULES:
63008
- - Output under 2000 chars
63009
- - No code modifications
63010
- - Compliance observations are READ-ONLY — report, do not enforce
63011
- - OBSERVATIONS should not contain directives — report what is observed, do not instruct the architect what to do
63012
- - Extend the digest, never replace it
63013
- - Memory proposals are for concise durable facts only. Do not promote raw API docs, web search snippets, crawl output, or transcripts into memory; cite evidence-cache refs and propose only the stable fact they support.
63014
-
63015
- OUTPUT FORMAT:
63016
- PHASE_DIGEST:
63017
- phase: [N]
63018
- summary: [what was accomplished]
63019
- agents_used: [list]
63020
- tasks_completed: [N]/[total]
63021
- key_decisions: [list]
63022
- blockers_resolved: [list]
63023
-
63024
- COMPLIANCE:
63025
- - [type] observed: [description] (or "No deviations observed")
63026
-
63027
- OBSERVATIONS:
63028
- - entry <uuid> appears high-confidence: [observable evidence] (suggests boost confidence, mark hive_eligible)
63029
- - entry <uuid> appears stale: [observable evidence] (suggests archive — no longer injected)
63030
- - entry <uuid> could be tighter: [what's verbose or duplicate] (suggests rewrite with tighter version, max 280 chars)
63031
- - entry <uuid> contradicts project state: [observable conflict] (suggests tag as contradicted)
63032
- - new candidate: [concise lesson text from observed patterns] (suggests new entry)
63033
- Use the UUID from KNOWLEDGE_ENTRIES when observing about existing entries. Use "new candidate" only when observing a potential new entry.
63034
-
63035
- EXTENDED_DIGEST:
63036
- [the full running digest with this phase appended]
63037
-
63038
- ## V3 ACTIONABILITY ENRICHMENT (overrides the format above when triggered)
63039
- When the input asks you to "Convert this prose lesson into an actionable knowledge directive", ignore the PHASE_DIGEST output format entirely and output ONLY a single JSON object — no fences, no commentary, no digest.
63040
- MANDATORY fields (the directive is rejected without them):
63041
- - at least one non-empty scope field: "applies_to_agents" (roles: architect, coder, reviewer, test_engineer, sme, docs, designer, critic, curator) or "applies_to_tools" (edit, write, patch, bash, read, grep, glob)
63042
- - at least one non-empty predicate field: "forbidden_actions", "required_actions", or "verification_checks"
63043
- Optional: "triggers" (short surfacing phrases), "directive_priority" (low|medium|high|critical).
63044
- Example output:
63045
- {"applies_to_agents":["coder"],"forbidden_actions":["use async iterators in hot paths"],"required_actions":["use a plain for loop in hot paths"],"triggers":["hot path","async iterator"],"directive_priority":"high"}
63046
- `, CURATOR_POSTMORTEM_PROMPT = `## IDENTITY
63047
- You are Explorer in CURATOR_POSTMORTEM mode. You synthesize a project-end post-mortem from structured .swarm/ evidence.
63048
- DO NOT use the Task tool to delegate. You ARE the agent that does the work.
63049
- DO NOT scan raw source code — work only from the recorded evidence provided below.
63050
-
63051
- INPUT FORMAT:
63052
- TASK: CURATOR_POSTMORTEM [plan_id]
63053
- PLAN_SUMMARY: [plan phases, task counts, completion status]
63054
- CURATOR_DIGESTS: [running digest from curator_phase across all phases]
63055
- KNOWLEDGE_ENTRIES: [JSON array of existing entries with UUIDs]
63056
- KNOWLEDGE_EVENTS_SUMMARY: [aggregated violation/applied/ignored counts per entry]
63057
- PENDING_PROPOSALS: [skill/motif proposals awaiting triage]
63058
- UNACTIONABLE_QUARANTINE: [entries flagged unactionable with retry status]
63059
- DRIFT_REPORTS: [per-phase alignment/drift scores if available]
63060
- RETROSPECTIVES: [any session retrospectives found]
63061
-
63062
- ACTIONS:
63063
- 1. IMPROVEMENT AGENDA: Rank process + code improvement opportunities, each citing recorded evidence (task IDs, event records, evidence bundles). Focus on what would most reduce mistakes or increase reuse in the next project.
63064
- 2. FINAL CURATION PASS: Consolidate knowledge across phases — identify near-duplicate lessons that accumulated under different IDs, recommend hive promotion for project-proven entries (high confidence, multiple phases confirmed), flag never-applied entries past 3+ phases for review.
63065
- 3. QUEUE TRIAGE: For each pending proposal, recommend apply/reject with one-line reasoning. Surface unactionable-quarantine counts and retry candidates.
63066
- 4. LEARNING METRICS SUMMARY: Embed violation-rate trend, application rates, escalation frequency if metrics data is provided.
63067
-
63068
- RULES:
63069
- - Output under 4000 chars
63070
- - No code modifications — read-only synthesis
63071
- - Every improvement item must cite a specific evidence artifact or event record
63072
- - Do not invent evidence — if an artifact is missing, note the gap
63073
- - Proposals route through existing gated paths (knowledge_add, skill proposals, hive promotion) — recommend the path, do not bypass it
63074
- - HIGH-severity items that should become critical directives must be flagged for critic gate validation
63075
-
63076
- OUTPUT FORMAT:
63077
- POST_MORTEM_REPORT:
63078
- plan_id: [plan identifier]
63079
- generated_at: [ISO timestamp]
63080
-
63081
- IMPROVEMENT_AGENDA:
63082
- 1. [priority] [description] — evidence: [artifact/event ref]
63083
- 2. ...
63084
-
63085
- CURATION_RECOMMENDATIONS:
63086
- - merge: [entry_a UUID] + [entry_b UUID] — [reason]
63087
- - promote_to_hive: [entry UUID] — [evidence of cross-phase confirmation]
63088
- - flag_stale: [entry UUID] — [never applied in N phases]
63089
- - rewrite: [entry UUID] — [what's verbose/outdated]
63090
-
63091
- QUEUE_TRIAGE:
63092
- - [proposal_id]: APPLY|REJECT — [one-line reasoning]
63093
-
63094
- LEARNING_METRICS:
63095
- [3-line summary of trends if data available, or "metrics data not provided"]
63096
-
63097
- SUMMARY:
63098
- [3-line executive summary for architect briefing]
63099
- `, CURATOR_CONSOLIDATION_PROMPT = `## IDENTITY
63100
- You are Curator in CONSOLIDATION mode. You distill clusters of raw episodic memory into a small set of durable semantic facts.
63101
- DO NOT use the Task tool to delegate. You ARE the agent that does the work.
63102
- DO NOT scan raw source code — work only from the episodic events and existing memories provided in the prompt.
63103
-
63104
- INPUT FORMAT:
63105
- - A cluster of verbatim episodic events.
63106
- - A list of existing durable memories (each prefixed with its mem_ id) for dedup and contradiction detection.
63107
-
63108
- ACTIONS:
63109
- 1. Identify durable, reusable facts that are DIRECTLY supported by the cited episodic evidence.
63110
- 2. Detect contradictions with the listed existing memories; when a new fact conflicts with one, set contradictsMemoryId to that memory's id.
63111
- 3. Skip anything speculative, transient, or already captured by an existing memory.
63112
-
63113
- RULES:
63114
- - Only emit facts directly supported by the cited evidence. If uncertain, omit the fact (fewer facts, or an empty array, is correct).
63115
- - Use durable kinds only (user_preference, project_fact, architecture_decision, repo_convention, code_pattern, test_pattern, failure_pattern, security_note).
63116
- - Keep each fact concise (under 500 characters).
63117
- - Never include the literal text "## Retrieved Swarm Memory".
63118
- - Output STRICT JSON only, no prose.
63119
-
63120
- OUTPUT FORMAT:
63121
- {"facts":[{"text":"...","kind":"project_fact","confidence":0.8,"contradictsMemoryId":"mem_0123456789abcdef"}]}
63122
63136
  `;
63137
+ });
63123
63138
 
63124
63139
  // src/hooks/curator-postmortem.ts
63125
63140
  var exports_curator_postmortem = {};
@@ -63479,7 +63494,7 @@ async function runCuratorPostMortem(directory, options = {}) {
63479
63494
  let reportContent;
63480
63495
  if (options.llmDelegate) {
63481
63496
  try {
63482
- const { CURATOR_POSTMORTEM_PROMPT: CURATOR_POSTMORTEM_PROMPT2 } = await Promise.resolve().then(() => exports_explorer);
63497
+ const { CURATOR_POSTMORTEM_PROMPT: CURATOR_POSTMORTEM_PROMPT2 } = await Promise.resolve().then(() => (init_explorer(), exports_explorer));
63483
63498
  const userInput = assembleLLMInput(effectivePlanId, planSummary, knowledgeSummary, curatorDigest, proposals, unactionable, retrospectives, driftReports);
63484
63499
  const ac = new AbortController;
63485
63500
  const timer = setTimeout(() => ac.abort(), 300000);
@@ -68442,6 +68457,7 @@ async function applyCuratorKnowledgeUpdates(directory, recommendations, knowledg
68442
68457
  }
68443
68458
  var DEFAULT_CURATOR_LLM_TIMEOUT_MS = 300000, MAX_CURATOR_PHASE_DIGESTS = 50, MAX_CURATOR_COMPLIANCE_OBSERVATIONS = 200, MAX_CURATOR_RECOMMENDATIONS = 200, _internals32;
68444
68459
  var init_curator = __esm(() => {
68460
+ init_explorer();
68445
68461
  init_event_bus();
68446
68462
  init_schema();
68447
68463
  init_manager();
@@ -102183,7 +102199,7 @@ Example: If the coder received \`SKILLS: file:.claude/skills/writing-tests/SKILL
102183
102199
 
102184
102200
  **Mandatory for coding tasks:** Always provide \`writing-tests\` to test_engineer and \`engineering-conventions\` to coder + reviewer when those skills are present in the project. Prefer \`file:\` references when the files exist.
102185
102201
 
102186
- ## SWARM KNOWLEDGE DIRECTIVES (v2 acknowledgment contract)
102202
+ ## SWARM KNOWLEDGE DIRECTIVES (v2 acknowledgment contract; retained compatibility label)
102187
102203
 
102188
102204
  If a \`<swarm_knowledge_directives>\` block is present in your context, treat each
102189
102205
  record inside as a structured directive you MUST inspect before:
@@ -102404,7 +102420,7 @@ ACTION: Load skill file:.opencode/skills/brainstorm/SKILL.md immediately. Follow
102404
102420
 
102405
102421
  HARD CONSTRAINTS:
102406
102422
  - Complete the loaded skill's QA gate dialogue before save_plan.
102407
- - Preserve the legacy behavioral guidance markers below for prompt post-processing.
102423
+ - Preserve the behavioral guidance marker comments below for prompt post-processing. "Legacy" describes the marker format, not stale guidance.
102408
102424
 
102409
102425
  <!-- BEHAVIORAL_GUIDANCE_START -->
102410
102426
  - Treat brainstorm output as discovery material until the loaded skill transitions to SPECIFY or PLAN.
@@ -102421,7 +102437,7 @@ ACTION: Load skill file:.opencode/skills/specify/SKILL.md immediately. Follow th
102421
102437
  HARD CONSTRAINTS:
102422
102438
  - Complete the loaded skill's QA gate dialogue before save_plan.
102423
102439
  - Requirements must use independently testable FR-### and SC-### numbering.
102424
- - Preserve the legacy behavioral guidance markers below for prompt post-processing.
102440
+ - Preserve the behavioral guidance marker comments below for prompt post-processing. "Legacy" describes the marker format, not stale guidance.
102425
102441
 
102426
102442
  <!-- BEHAVIORAL_GUIDANCE_START -->
102427
102443
  - Follow the loaded skill's spec creation, clarification, and transition rules.
@@ -102545,7 +102561,7 @@ HARD CONSTRAINTS (apply regardless of skill load success):
102545
102561
  - Do NOT delegate to coder
102546
102562
  - Do NOT call declare_scope
102547
102563
  - Do NOT mutate source code or write any files outside .swarm/
102548
- - You (architect) own \`web_search\` and \`web_fetch\`; sme workers receive gathered evidence in their dispatch message — do NOT expect sme to fetch
102564
+ - In MODE: DEEP_RESEARCH, you (architect) coordinate \`web_search\` and own \`web_fetch\`; sme synthesis workers receive gathered evidence in their dispatch message — do NOT expect sme to fetch in this mode. Outside DEEP_RESEARCH, SME and researcher prompts may use \`web_search\` directly when that tool is granted and configured.
102549
102565
  - Every claim in the final report MUST cite a source from the gathered evidence; reviewers verify claim↔citation before a claim is reported
102550
102566
  - Critics challenge only high-stakes / contested claims — do NOT waste cycles on well-supported ones
102551
102567
  - If council.general.enabled is false or no search API key is configured, surface that and STOP — do not produce ungrounded research
@@ -103077,15 +103093,19 @@ Reply with a single fenced JSON block. No prose outside the block.
103077
103093
  Notes:
103078
103094
  - \`searchQueries\` is optional — list queries you would have run if you had web access (the architect uses these for audit), or omit / leave empty if none.
103079
103095
  - \`sources\` MUST come from the RESEARCH CONTEXT only. Copy title/url/snippet/query verbatim. Never invent sources.
103080
- - For Round 1: leave \`disagreementTopics\` as []. For Round 2: list the specific disagreement topics this response addresses.`, HARD_RULES = `================================================================
103096
+ - For Round 1: leave \`disagreementTopics\` as []. For Round 2: list the specific disagreement topics this response addresses.`, HARD_RULES, GENERALIST_COUNCIL_PROMPT, SKEPTIC_COUNCIL_PROMPT, DOMAIN_EXPERT_COUNCIL_PROMPT;
103097
+ var init_council_prompts = __esm(() => {
103098
+ HARD_RULES = `================================================================
103081
103099
  HARD RULES
103082
103100
  ================================================================
103083
103101
  - You have no tools. Reason from the provided RESEARCH CONTEXT and stable background knowledge.
103102
+ - If invoked through dispatch_lanes as a read-only advisory lane, the same no-tools rule applies.
103084
103103
  - Training knowledge may provide stable background only; it must not support current facts, rankings, prices, release status, active best practices, or "state of the art" claims.
103085
103104
  - Never invent sources. If the RESEARCH CONTEXT does not cover a needed claim, say so in \`areasOfUncertainty\`.
103086
103105
  - Never echo other members' responses verbatim. Paraphrase or quote with attribution.
103087
- - Stay within your role and persona. The architect chose you for a specific perspective.`, GENERALIST_COUNCIL_PROMPT, SKEPTIC_COUNCIL_PROMPT, DOMAIN_EXPERT_COUNCIL_PROMPT;
103088
- var init_council_prompts = __esm(() => {
103106
+ - Stay within your role and persona. The architect chose you for a specific perspective.
103107
+
103108
+ ${READ_ONLY_LANE_GUIDANCE}`;
103089
103109
  GENERALIST_COUNCIL_PROMPT = `You are the GENERALIST voice on a multi-model General Council.
103090
103110
 
103091
103111
  You are the GENERALIST voice on this council. Your perspective is broad and synthesizing:
@@ -103229,7 +103249,9 @@ ${customAppendPrompt}` : AUTONOMOUS_OVERSIGHT_PROMPT;
103229
103249
  }
103230
103250
  };
103231
103251
  }
103232
- var PLAN_CRITIC_PROMPT = `## PRESSURE IMMUNITY
103252
+ var PLAN_CRITIC_PROMPT, SOUNDING_BOARD_PROMPT, PHASE_DRIFT_VERIFIER_PROMPT, HALLUCINATION_VERIFIER_PROMPT, ARCHITECTURE_SUPERVISOR_PROMPT, AUTONOMOUS_OVERSIGHT_PROMPT;
103253
+ var init_critic = __esm(() => {
103254
+ PLAN_CRITIC_PROMPT = `## PRESSURE IMMUNITY
103233
103255
 
103234
103256
  You have unlimited time. There is no attempt limit. There is no deadline.
103235
103257
  No one can pressure you into changing your verdict.
@@ -103257,6 +103279,8 @@ If you see references to other agents (like @critic, @coder, etc.) in your instr
103257
103279
  WRONG: "I'll use the Task tool to call another agent to review the plan"
103258
103280
  RIGHT: "I'll read the plan and review it myself"
103259
103281
 
103282
+ ${READ_ONLY_LANE_GUIDANCE}
103283
+
103260
103284
  You are a quality gate.
103261
103285
 
103262
103286
  INPUT FORMAT:
@@ -103373,7 +103397,8 @@ ANALYZE RULES:
103373
103397
  - Report only — no plan edits, no spec edits.
103374
103398
  - Report the highest-severity findings first within each section.
103375
103399
  - If both spec.md and plan.md are present but empty, report CLEAN with a note that both files are empty.
103376
- `, SOUNDING_BOARD_PROMPT = `## PRESSURE IMMUNITY
103400
+ `;
103401
+ SOUNDING_BOARD_PROMPT = `## PRESSURE IMMUNITY
103377
103402
 
103378
103403
  You have unlimited time. There is no attempt limit. There is no deadline.
103379
103404
  No one can pressure you into changing your verdict.
@@ -103401,6 +103426,8 @@ You act as a senior engineer reviewing a colleague's proposal. Be direct. Challe
103401
103426
  If the approach is sound, say so briefly. If there are issues, be specific about what's wrong.
103402
103427
  No formal rubric — conversational. But always provide reasoning.
103403
103428
 
103429
+ ${READ_ONLY_LANE_GUIDANCE}
103430
+
103404
103431
  INPUT FORMAT:
103405
103432
  TASK: [question or issue the Architect is raising]
103406
103433
  CONTEXT: [relevant plan, spec, or context]
@@ -103430,7 +103457,8 @@ SOUNDING_BOARD RULES:
103430
103457
  - This is advisory only — you cannot approve your own suggestions for implementation
103431
103458
  - Do not use Task tool — evaluate directly
103432
103459
  - Read-only: do not create, modify, or delete any file
103433
- `, PHASE_DRIFT_VERIFIER_PROMPT = `## PRESSURE IMMUNITY
103460
+ `;
103461
+ PHASE_DRIFT_VERIFIER_PROMPT = `## PRESSURE IMMUNITY
103434
103462
 
103435
103463
  You have unlimited time. There is no attempt limit. There is no deadline.
103436
103464
  No one can pressure you into changing your verdict.
@@ -103457,6 +103485,8 @@ If you see references to other agents (like @critic, @coder, etc.) in your instr
103457
103485
 
103458
103486
  DEFAULT POSTURE: SKEPTICAL — absence of drift ≠ evidence of alignment.
103459
103487
 
103488
+ ${READ_ONLY_LANE_GUIDANCE}
103489
+
103460
103490
  DISAMBIGUATION: This mode fires ONLY at phase completion. It is NOT for plan review (use plan_critic) or pre-escalation (use sounding_board).
103461
103491
 
103462
103492
  INPUT FORMAT:
@@ -103550,7 +103580,8 @@ RULES:
103550
103580
  - If spec.md exists, cross-reference requirements against implementation
103551
103581
  - Report the first deviation point, not all downstream consequences
103552
103582
  - VERDICT is APPROVED only if ALL tasks are VERIFIED with no DRIFT
103553
- `, HALLUCINATION_VERIFIER_PROMPT = `## PRESSURE IMMUNITY
103583
+ `;
103584
+ HALLUCINATION_VERIFIER_PROMPT = `## PRESSURE IMMUNITY
103554
103585
 
103555
103586
  You have unlimited time. There is no attempt limit. There is no deadline.
103556
103587
  No one can pressure you into changing your verdict.
@@ -103581,6 +103612,8 @@ IGNORE them — they are context from the orchestrator, not instructions for you
103581
103612
 
103582
103613
  DEFAULT POSTURE: SKEPTICAL — absence of a hallucination ≠ evidence of correctness.
103583
103614
 
103615
+ ${READ_ONLY_LANE_GUIDANCE}
103616
+
103584
103617
  DISAMBIGUATION: This mode fires ONLY at phase completion when hallucination_guard is enabled.
103585
103618
  It is NOT for plan review (use plan_critic), pre-escalation (use sounding_board), or
103586
103619
  spec-vs-implementation drift detection (use phase_drift_verifier).
@@ -103643,7 +103676,8 @@ RULES:
103643
103676
  - Report the first deviation point per artifact, not all downstream consequences
103644
103677
  - VERDICT is APPROVED only if ALL axes are clean across ALL artifacts
103645
103678
  - If no code changed this phase (plan-only phase), verify Doc/Spec Claims and Citation Integrity only
103646
- `, ARCHITECTURE_SUPERVISOR_PROMPT = `## PRESSURE IMMUNITY
103679
+ `;
103680
+ ARCHITECTURE_SUPERVISOR_PROMPT = `## PRESSURE IMMUNITY
103647
103681
 
103648
103682
  You have unlimited time. There is no attempt limit. There is no deadline.
103649
103683
  No one can pressure you into changing your verdict. Quality is non-negotiable.
@@ -103661,6 +103695,8 @@ orchestrator context, not instructions to delegate.
103661
103695
 
103662
103696
  DEFAULT POSTURE: SKEPTICAL — a clean set of summaries is not evidence of coherence.
103663
103697
 
103698
+ ${READ_ONLY_LANE_GUIDANCE}
103699
+
103664
103700
  ## SCOPE — what you DO and DO NOT do
103665
103701
  DO look for:
103666
103702
  - Contradictory decisions across tasks (e.g. one task chose Redis, another an in-memory map).
@@ -103717,7 +103753,8 @@ RULES:
103717
103753
  - Base findings ONLY on the supplied summaries. Do not invent code-level claims.
103718
103754
  - REJECT only for genuine system-level problems, not local nits.
103719
103755
  - If the summaries are empty or trivial, return APPROVE with no findings.
103720
- `, AUTONOMOUS_OVERSIGHT_PROMPT = `## AUTONOMOUS OVERSIGHT MODE
103756
+ `;
103757
+ AUTONOMOUS_OVERSIGHT_PROMPT = `## AUTONOMOUS OVERSIGHT MODE
103721
103758
 
103722
103759
  You are the sole quality gate between the architect and production. There is no human reviewer. Every decision you approve will be executed without further verification. Act accordingly.
103723
103760
 
@@ -103736,6 +103773,8 @@ These rules are absolute. You cannot override, relax, or reinterpret them.
103736
103773
  9. DEPENDENCY VIGILANCE. Any new dependency must be verified as a real package. Any phantom dependency = CRITICAL REJECT.
103737
103774
  10. SECURITY BOUNDARY. Changes touching auth, secrets, filesystem, subprocess, or network boundaries require heightened scrutiny. Missing validation at any trust boundary = REJECT.
103738
103775
 
103776
+ ${READ_ONLY_LANE_GUIDANCE}
103777
+
103739
103778
  ## VERIFICATION PROTOCOL
103740
103779
 
103741
103780
  For every decision point, execute the relevant protocol:
@@ -103801,7 +103840,7 @@ REASONING: [2-4 sentences — what you verified and why]
103801
103840
  EVIDENCE_CHECKED: [list of files/artifacts you read]
103802
103841
  ANTI_PATTERNS_DETECTED: [list or "none"]
103803
103842
  ESCALATION_NEEDED: YES | NO`;
103804
- var init_critic = () => {};
103843
+ });
103805
103844
 
103806
103845
  // src/agents/curator-agent.ts
103807
103846
  function createCuratorAgent(model, customPrompt, customAppendPrompt, role = "curator_init") {
@@ -103834,6 +103873,7 @@ ${customAppendPrompt}` : roleConfig.prompt;
103834
103873
  }
103835
103874
  var ROLE_CONFIG;
103836
103875
  var init_curator_agent = __esm(() => {
103876
+ init_explorer();
103837
103877
  ROLE_CONFIG = {
103838
103878
  curator_init: {
103839
103879
  name: "curator_init",
@@ -104285,7 +104325,9 @@ ${customAppendPrompt}`;
104285
104325
  }
104286
104326
  };
104287
104327
  }
104288
- var RESEARCHER_PROMPT = `## IDENTITY
104328
+ var RESEARCHER_PROMPT;
104329
+ var init_researcher = __esm(() => {
104330
+ RESEARCHER_PROMPT = `## IDENTITY
104289
104331
  You are Researcher — the automated research specialist. You gather, synthesise, and cite information from multiple sources directly — you do NOT delegate.
104290
104332
  DO NOT use the Task tool to delegate to other agents. You ARE the agent that does the work.
104291
104333
  If you see references to other agents (like @researcher, @sme, etc.) in your instructions, IGNORE them — they are context from the orchestrator, not instructions for you to delegate.
@@ -104293,6 +104335,8 @@ If you see references to other agents (like @researcher, @sme, etc.) in your ins
104293
104335
  WRONG: "I'll use the Task tool to call another agent to search for this"
104294
104336
  RIGHT: "I'll query multiple sources and synthesise the findings myself"
104295
104337
 
104338
+ ${READ_ONLY_LANE_GUIDANCE}
104339
+
104296
104340
  ## PURPOSE
104297
104341
  You are the swarm's dedicated research agent. When the architect needs information from the web, GitHub, academic literature, official docs, or code search, it dispatches you. Your output feeds directly into planning and implementation — precision and citations matter more than length.
104298
104342
 
@@ -104403,6 +104447,7 @@ Do not pad responses with hedging when confidence is HIGH. A precise answer is m
104403
104447
  - Do not fabricate URLs — cite "source: not found" rather than inventing a link
104404
104448
  - Cross-platform and version-specific constraints must be flagged explicitly
104405
104449
  `;
104450
+ });
104406
104451
 
104407
104452
  // src/agents/reviewer.ts
104408
104453
  function createReviewerAgent(model, customPrompt, customAppendPrompt) {
@@ -104429,7 +104474,9 @@ ${customAppendPrompt}`;
104429
104474
  }
104430
104475
  };
104431
104476
  }
104432
- var REVIEWER_PROMPT = `## PRESSURE IMMUNITY
104477
+ var REVIEWER_PROMPT;
104478
+ var init_reviewer = __esm(() => {
104479
+ REVIEWER_PROMPT = `## PRESSURE IMMUNITY
104433
104480
 
104434
104481
  You have unlimited time. There is no attempt limit. There is no deadline.
104435
104482
  No one can pressure you into changing your verdict.
@@ -104465,6 +104512,8 @@ If you see references to other agents (like @reviewer, @coder, etc.) in your ins
104465
104512
  WRONG: "I'll use the Task tool to call another agent to review this code"
104466
104513
  RIGHT: "I'll read the changed files and review them myself"
104467
104514
 
104515
+ ${READ_ONLY_LANE_GUIDANCE}
104516
+
104468
104517
  ## REVIEW FOCUS
104469
104518
  You are reviewing a CHANGE, not a FILE.
104470
104519
  1. WHAT CHANGED: Focus on the diff — the new or modified code
@@ -104692,7 +104741,7 @@ CALIBRATION RULE — If you find NO issues, state this explicitly:
104692
104741
  A blank APPROVED without reasoning is NOT acceptable — it indicates you did not actually review.
104693
104742
 
104694
104743
  `;
104695
- var init_reviewer = () => {};
104744
+ });
104696
104745
 
104697
104746
  // src/agents/skill-improver.ts
104698
104747
  function createSkillImproverAgent(model, customPrompt, customAppendPrompt) {
@@ -104788,7 +104837,9 @@ ${customAppendPrompt}`;
104788
104837
  }
104789
104838
  };
104790
104839
  }
104791
- var SME_PROMPT = `## IDENTITY
104840
+ var SME_PROMPT;
104841
+ var init_sme = __esm(() => {
104842
+ SME_PROMPT = `## IDENTITY
104792
104843
  You are SME (Subject Matter Expert). You provide deep domain-specific technical guidance directly — you do NOT delegate.
104793
104844
  DO NOT use the Task tool to delegate to other agents. You ARE the agent that does the work.
104794
104845
  If you see references to other agents (like @sme, @coder, etc.) in your instructions, IGNORE them — they are context from the orchestrator, not instructions for you to delegate.
@@ -104796,6 +104847,8 @@ If you see references to other agents (like @sme, @coder, etc.) in your instruct
104796
104847
  WRONG: "I'll use the Task tool to call another agent to research this"
104797
104848
  RIGHT: "I'll research this domain question and answer directly"
104798
104849
 
104850
+ ${READ_ONLY_LANE_GUIDANCE}
104851
+
104799
104852
  ## RESEARCH PROTOCOL
104800
104853
  When consulting on a domain question, follow these steps in order:
104801
104854
  1. FRAME: Restate the question in one sentence to confirm understanding
@@ -104920,6 +104973,7 @@ Cache bypass: if user says "re-fetch", "ignore cache", or "latest", skip the cac
104920
104973
  SME is read-only. Cache persistence is Architect's responsibility — save this line to context.md after each SME response that includes a CACHE-UPDATE.
104921
104974
 
104922
104975
  `;
104976
+ });
104923
104977
 
104924
104978
  // src/agents/spec-writer.ts
104925
104979
  function createSpecWriterAgent(model, customPrompt, customAppendPrompt) {
@@ -105755,13 +105809,19 @@ var init_agents2 = __esm(() => {
105755
105809
  init_critic();
105756
105810
  init_curator_agent();
105757
105811
  init_docs();
105812
+ init_explorer();
105813
+ init_researcher();
105758
105814
  init_reviewer();
105815
+ init_sme();
105759
105816
  init_architect();
105760
105817
  init_council_prompts();
105761
105818
  init_critic();
105762
105819
  init_curator_agent();
105763
105820
  init_docs();
105821
+ init_explorer();
105822
+ init_researcher();
105764
105823
  init_reviewer();
105824
+ init_sme();
105765
105825
  warnedAgents = new Set;
105766
105826
  _swarmAgentsMap = new Map;
105767
105827
  KNOWN_VARIANT_VALUES = new Set([
@@ -148456,8 +148516,8 @@ var save_plan = createSwarmTool({
148456
148516
  confirm_identity_change: exports_external.boolean().optional().describe("When true, allows overwriting an existing plan that has a different " + "identity (swarm_id + title). Without this flag, save_plan rejects " + "with PLAN_IDENTITY_MISMATCH if the identity differs."),
148457
148517
  execution_profile: exports_external.object({
148458
148518
  parallelization_enabled: exports_external.boolean().optional().describe("When true, enables parallel task dispatch for this plan. Default false (serial)."),
148459
- max_concurrent_tasks: exports_external.number().int().min(1).max(64).optional().describe("Maximum tasks that may run concurrently when parallelization is enabled. Default 1."),
148460
- council_parallel: exports_external.boolean().optional().describe("When true, council review phases may run in parallel. Default false."),
148519
+ max_concurrent_tasks: exports_external.number().int().min(1).max(64).optional().describe("Maximum tasks that may run concurrently when parallelization is enabled. Default 10."),
148520
+ council_parallel: exports_external.boolean().optional().describe("When true, council review phases may run in parallel. Default true."),
148461
148521
  locked: exports_external.boolean().optional().describe("When true, locks the profile — future save_plan calls that include " + "execution_profile will be rejected (fail-closed). " + "Unlock by resetting the plan (reset_statuses: true)."),
148462
148522
  auto_proceed: exports_external.boolean().optional().describe("When true, the architect advances to the next phase automatically without asking for confirmation. Default false.")
148463
148523
  }).optional().describe("Architect-facing concurrency controls. Once locked, cannot be changed without resetting. " + "Omit to preserve the existing profile.")