specrails-core 5.3.0 → 5.5.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.
Files changed (156) hide show
  1. package/README.md +2 -0
  2. package/dist/agent-runtime/capabilities.d.ts +28 -0
  3. package/dist/agent-runtime/capabilities.js +81 -0
  4. package/dist/agent-runtime/capabilities.js.map +1 -0
  5. package/dist/agent-runtime/cli-executor.d.ts +9 -0
  6. package/dist/agent-runtime/cli-executor.js +109 -34
  7. package/dist/agent-runtime/cli-executor.js.map +1 -1
  8. package/dist/agent-runtime/cli-process.d.ts +1 -0
  9. package/dist/agent-runtime/cli-process.js +13 -2
  10. package/dist/agent-runtime/cli-process.js.map +1 -1
  11. package/dist/agent-runtime/cli.d.ts +1 -0
  12. package/dist/agent-runtime/cli.js +60 -11
  13. package/dist/agent-runtime/cli.js.map +1 -1
  14. package/dist/agent-runtime/codex-schema.d.ts +4 -0
  15. package/dist/agent-runtime/codex-schema.js +31 -0
  16. package/dist/agent-runtime/codex-schema.js.map +1 -0
  17. package/dist/agent-runtime/compact/architect.d.ts +349 -0
  18. package/dist/agent-runtime/compact/architect.js +371 -0
  19. package/dist/agent-runtime/compact/architect.js.map +1 -0
  20. package/dist/agent-runtime/compact/chat-client.d.ts +83 -0
  21. package/dist/agent-runtime/compact/chat-client.js +307 -0
  22. package/dist/agent-runtime/compact/chat-client.js.map +1 -0
  23. package/dist/agent-runtime/compact/developer.d.ts +160 -0
  24. package/dist/agent-runtime/compact/developer.js +823 -0
  25. package/dist/agent-runtime/compact/developer.js.map +1 -0
  26. package/dist/agent-runtime/compact/environment.d.ts +62 -0
  27. package/dist/agent-runtime/compact/environment.js +213 -0
  28. package/dist/agent-runtime/compact/environment.js.map +1 -0
  29. package/dist/agent-runtime/compact/exit-code-honesty.d.ts +8 -0
  30. package/dist/agent-runtime/compact/exit-code-honesty.js +28 -0
  31. package/dist/agent-runtime/compact/exit-code-honesty.js.map +1 -0
  32. package/dist/agent-runtime/compact/guarded-loop.d.ts +73 -0
  33. package/dist/agent-runtime/compact/guarded-loop.js +320 -0
  34. package/dist/agent-runtime/compact/guarded-loop.js.map +1 -0
  35. package/dist/agent-runtime/compact/prompt-inputs.d.ts +42 -0
  36. package/dist/agent-runtime/compact/prompt-inputs.js +59 -0
  37. package/dist/agent-runtime/compact/prompt-inputs.js.map +1 -0
  38. package/dist/agent-runtime/compact/reviewer.d.ts +24 -0
  39. package/dist/agent-runtime/compact/reviewer.js +178 -0
  40. package/dist/agent-runtime/compact/reviewer.js.map +1 -0
  41. package/dist/agent-runtime/compact/step.d.ts +70 -0
  42. package/dist/agent-runtime/compact/step.js +136 -0
  43. package/dist/agent-runtime/compact/step.js.map +1 -0
  44. package/dist/agent-runtime/compact/test-reachability.d.ts +30 -0
  45. package/dist/agent-runtime/compact/test-reachability.js +147 -0
  46. package/dist/agent-runtime/compact/test-reachability.js.map +1 -0
  47. package/dist/agent-runtime/config.d.ts +4 -0
  48. package/dist/agent-runtime/config.js +146 -15
  49. package/dist/agent-runtime/config.js.map +1 -1
  50. package/dist/agent-runtime/core-host.d.ts +12 -4
  51. package/dist/agent-runtime/core-host.js +61 -21
  52. package/dist/agent-runtime/core-host.js.map +1 -1
  53. package/dist/agent-runtime/efficiency-summary.d.ts +67 -0
  54. package/dist/agent-runtime/efficiency-summary.js +52 -0
  55. package/dist/agent-runtime/efficiency-summary.js.map +1 -0
  56. package/dist/agent-runtime/efficiency-types.d.ts +60 -0
  57. package/dist/agent-runtime/efficiency-types.js +8 -0
  58. package/dist/agent-runtime/efficiency-types.js.map +1 -0
  59. package/dist/agent-runtime/efficiency.d.ts +5 -0
  60. package/dist/agent-runtime/efficiency.js +35 -0
  61. package/dist/agent-runtime/efficiency.js.map +1 -0
  62. package/dist/agent-runtime/evaluation-corpus.d.ts +13 -0
  63. package/dist/agent-runtime/evaluation-corpus.js +8 -0
  64. package/dist/agent-runtime/evaluation-corpus.js.map +1 -0
  65. package/dist/agent-runtime/evaluation.d.ts +43 -0
  66. package/dist/agent-runtime/evaluation.js +171 -0
  67. package/dist/agent-runtime/evaluation.js.map +1 -0
  68. package/dist/agent-runtime/executor-types.d.ts +71 -4
  69. package/dist/agent-runtime/executor-types.js +7 -2
  70. package/dist/agent-runtime/executor-types.js.map +1 -1
  71. package/dist/agent-runtime/executors.d.ts +1 -0
  72. package/dist/agent-runtime/executors.js +4 -0
  73. package/dist/agent-runtime/executors.js.map +1 -1
  74. package/dist/agent-runtime/graph/artifacts.d.ts +8 -22
  75. package/dist/agent-runtime/graph/artifacts.js +99 -73
  76. package/dist/agent-runtime/graph/artifacts.js.map +1 -1
  77. package/dist/agent-runtime/graph/nodes.d.ts +7 -2
  78. package/dist/agent-runtime/graph/nodes.js +207 -53
  79. package/dist/agent-runtime/graph/nodes.js.map +1 -1
  80. package/dist/agent-runtime/graph/roles.d.ts +11 -3
  81. package/dist/agent-runtime/graph/roles.js +109 -37
  82. package/dist/agent-runtime/graph/roles.js.map +1 -1
  83. package/dist/agent-runtime/graph/state.d.ts +10 -1
  84. package/dist/agent-runtime/graph/state.js +2 -1
  85. package/dist/agent-runtime/graph/state.js.map +1 -1
  86. package/dist/agent-runtime/guardrails.d.ts +15 -0
  87. package/dist/agent-runtime/guardrails.js +76 -0
  88. package/dist/agent-runtime/guardrails.js.map +1 -0
  89. package/dist/agent-runtime/index.d.ts +7 -1
  90. package/dist/agent-runtime/index.js +7 -1
  91. package/dist/agent-runtime/index.js.map +1 -1
  92. package/dist/agent-runtime/kimi-acp.d.ts +4 -0
  93. package/dist/agent-runtime/kimi-acp.js +20 -9
  94. package/dist/agent-runtime/kimi-acp.js.map +1 -1
  95. package/dist/agent-runtime/openai-executor.d.ts +33 -1
  96. package/dist/agent-runtime/openai-executor.js +76 -113
  97. package/dist/agent-runtime/openai-executor.js.map +1 -1
  98. package/dist/agent-runtime/openspec-tool-server.d.ts +1 -0
  99. package/dist/agent-runtime/openspec-tool-server.js +37 -0
  100. package/dist/agent-runtime/openspec-tool-server.js.map +1 -0
  101. package/dist/agent-runtime/openspec.d.ts +198 -0
  102. package/dist/agent-runtime/openspec.js +329 -0
  103. package/dist/agent-runtime/openspec.js.map +1 -0
  104. package/dist/agent-runtime/prompts.d.ts +24 -1
  105. package/dist/agent-runtime/prompts.js +112 -43
  106. package/dist/agent-runtime/prompts.js.map +1 -1
  107. package/dist/agent-runtime/provider-diagnostic.d.ts +2 -0
  108. package/dist/agent-runtime/provider-diagnostic.js +25 -0
  109. package/dist/agent-runtime/provider-diagnostic.js.map +1 -0
  110. package/dist/agent-runtime/repository-context.d.ts +25 -0
  111. package/dist/agent-runtime/repository-context.js +127 -0
  112. package/dist/agent-runtime/repository-context.js.map +1 -0
  113. package/dist/agent-runtime/review-context.d.ts +14 -0
  114. package/dist/agent-runtime/review-context.js +41 -0
  115. package/dist/agent-runtime/review-context.js.map +1 -0
  116. package/dist/agent-runtime/role-routing.d.ts +10 -0
  117. package/dist/agent-runtime/role-routing.js +30 -0
  118. package/dist/agent-runtime/role-routing.js.map +1 -0
  119. package/dist/agent-runtime/role-state.d.ts +19 -0
  120. package/dist/agent-runtime/role-state.js +24 -0
  121. package/dist/agent-runtime/role-state.js.map +1 -0
  122. package/dist/agent-runtime/runtime-identity.d.ts +11 -0
  123. package/dist/agent-runtime/runtime-identity.js +33 -0
  124. package/dist/agent-runtime/runtime-identity.js.map +1 -0
  125. package/dist/agent-runtime/tool-event.d.ts +3 -0
  126. package/dist/agent-runtime/tool-event.js +24 -0
  127. package/dist/agent-runtime/tool-event.js.map +1 -0
  128. package/dist/agent-runtime/verification-plan.d.ts +55 -0
  129. package/dist/agent-runtime/verification-plan.js +206 -0
  130. package/dist/agent-runtime/verification-plan.js.map +1 -0
  131. package/dist/agent-runtime/workflow-types.d.ts +19 -1
  132. package/dist/agent-runtime/workflow.js +29 -2
  133. package/dist/agent-runtime/workflow.js.map +1 -1
  134. package/dist/agent-runtime/workspace-tools.d.ts +4 -0
  135. package/dist/agent-runtime/workspace-tools.js +182 -20
  136. package/dist/agent-runtime/workspace-tools.js.map +1 -1
  137. package/dist/installer/phases/scaffold.js +39 -109
  138. package/dist/installer/phases/scaffold.js.map +1 -1
  139. package/dist/installer/runtime/pipeline-state.d.ts +143 -1
  140. package/dist/installer/runtime/pipeline-state.js +510 -30
  141. package/dist/installer/runtime/pipeline-state.js.map +1 -1
  142. package/docs/agent-runtime-efficiency.md +65 -0
  143. package/docs/agent-runtime.md +86 -15
  144. package/integration-contract.json +2 -1
  145. package/package.json +5 -2
  146. package/schemas/agent-runtime.schema.json +34 -4
  147. package/schemas/fixtures/runtime-efficiency-summary.v1.json +790 -0
  148. package/templates/codex-skills/batch-implement/SKILL.md +33 -58
  149. package/templates/codex-skills/implement/SKILL.md +21 -124
  150. package/templates/codex-skills/retry/SKILL.md +8 -34
  151. package/templates/commands/specrails/batch-implement.md +21 -16
  152. package/templates/commands/specrails/implement.md +17 -276
  153. package/templates/commands/specrails/retry.md +6 -34
  154. package/templates/gemini-commands/batch-implement.toml +34 -28
  155. package/templates/gemini-commands/implement.toml +34 -55
  156. package/templates/gemini-commands/retry.toml +10 -16
@@ -1,5 +1,11 @@
1
1
  import type { VerificationCommand } from '../installer/runtime/pipeline-state.js';
2
+ import type { CacheTokenUsage } from './efficiency-types.js';
3
+ import type { GuardrailSettings } from './guardrails.js';
4
+ export declare const DEFAULT_AGENT_TIMEOUT_MS: number;
5
+ export declare const DEFAULT_AGENT_IDLE_TIMEOUT_MS: number;
2
6
  export type AgentRole = 'architect' | 'developer' | 'reviewer';
7
+ /** Who an observer sees acting: a pipeline role, or the FIXER stance the developer step takes on a correction round. */
8
+ export type AgentEventRole = AgentRole | 'fixer';
3
9
  export type CliProvider = 'claude' | 'codex' | 'gemini' | 'kimi';
4
10
  export type RuntimeProviderConfig = {
5
11
  id: string;
@@ -10,23 +16,63 @@ export type RuntimeProviderConfig = {
10
16
  kind: 'openai-compatible';
11
17
  baseUrl: string;
12
18
  apiKeyEnv?: string;
19
+ /** `compact` (default) runs host-driven pipelines of small structured calls for small local models; `free` keeps one agentic loop per role. */
20
+ agentLoop?: 'compact' | 'free';
21
+ /** The endpoint honours the OpenAI `reasoning_effort` request field (low|medium|high). */
22
+ supportsReasoningEffort?: boolean;
23
+ /** Context window the compaction budget is measured against (chars/4 estimate). Default 32768. */
24
+ contextWindowTokens?: number;
25
+ /** Output budget (`max_tokens`) of one tool turn; a turn cut off by it is retried once at twice this. Always bounded by what still fits in the context window. Default 8192. */
26
+ maxOutputTokens?: number;
13
27
  };
14
28
  export interface RuntimeAgentConfig {
15
29
  provider: string;
16
30
  model?: string;
17
31
  maxTurns?: number;
32
+ effort?: string;
33
+ /** OpenAI-compatible engines only: whether the model may think privately (`chat_template_kwargs.enable_thinking`). Default `off` — hidden reasoning spends the output budget and minutes per turn in a host-driven loop. */
34
+ thinking?: 'on' | 'off';
35
+ escalation?: {
36
+ model: string;
37
+ effort?: string;
38
+ };
39
+ }
40
+ export interface EfficiencyPolicy {
41
+ schemaVersion: 1;
42
+ contextMode?: 'full' | 'incremental';
43
+ reviewMode?: 'full' | 'incremental';
44
+ planning?: 'full' | 'proportional';
45
+ acceptDeveloperChecks?: boolean;
46
+ verification?: {
47
+ maxConcurrency?: number;
48
+ };
49
+ }
50
+ export interface ExecutorCapabilities {
51
+ transport: string;
52
+ continuation: 'supported' | 'unsupported' | 'unknown';
53
+ /** Some native transports may start fresh when a session disappears; send complete instructions. */
54
+ resumeRequiresFullContext?: boolean;
55
+ effortSupport: 'supported' | 'unsupported' | 'unknown';
56
+ supportedEfforts: string[] | null;
57
+ observedModel: boolean;
58
+ observedEffort: boolean;
18
59
  }
19
60
  export type ReviewAspectName = 'type_correctness' | 'pattern_adherence' | 'test_coverage' | 'security' | 'architectural_alignment';
20
61
  export interface RuntimeConfig {
21
62
  schemaVersion: 1;
63
+ rolePrompts?: Partial<Record<AgentRole | 'fixer', string>>;
64
+ efficiency?: EfficiencyPolicy;
22
65
  enabled: boolean;
23
66
  providers: RuntimeProviderConfig[];
24
67
  agents: Record<AgentRole, RuntimeAgentConfig>;
68
+ /** Optional engine for correction rounds (after a failed verification or a rejected review); unset ⇒ the developer corrects. */
69
+ fixer?: RuntimeAgentConfig;
25
70
  limits?: {
26
71
  maxAttempts?: number;
27
72
  maxTokens?: number;
28
73
  maxCostUsd?: number;
29
74
  timeoutMs?: number;
75
+ idleTimeoutMs?: number;
30
76
  };
31
77
  verification: VerificationCommand[];
32
78
  approvalBeforeArchive?: boolean;
@@ -39,37 +85,54 @@ export interface RuntimeConfig {
39
85
  architect?: {
40
86
  onLowConfidence?: 'ask' | 'proceed';
41
87
  };
88
+ /** Compact-runtime guardrails switched OFF by the project (`{ id: false }`); unset = every guardrail on. */
89
+ guardrails?: GuardrailSettings;
42
90
  }
43
91
  /** Null means unavailable, including when a CLI never reports billing. */
44
- export interface AgentUsage {
92
+ export interface AgentUsage extends CacheTokenUsage {
45
93
  inputTokens: number | null;
46
94
  outputTokens: number | null;
47
95
  costUsd: number | null;
48
96
  }
49
97
  export interface AgentEvent {
50
- kind: 'text' | 'tool-start' | 'tool-end' | 'usage';
98
+ kind: 'text' | 'tool-start' | 'tool-end' | 'usage' | 'session';
99
+ /** Provider-issued identifier, persisted before further work can be interrupted. */
100
+ sessionId?: string;
51
101
  text?: string;
52
102
  tool?: string;
53
103
  /** Short human-readable tool target, such as a file path or command. Never a complete transcript. */
54
104
  detail?: string;
105
+ /** Untruncated tool paths for repository attribution; never file contents. */
106
+ targetPaths?: string[];
107
+ cwd?: string;
55
108
  usage?: AgentUsage;
56
109
  }
57
110
  export interface AgentRequest {
111
+ openspec?: import('./openspec.js').OpenSpecRoleContext;
58
112
  role: AgentRole;
59
113
  prompt: string;
60
114
  cwd: string;
61
115
  allowedRoots: string[];
62
116
  model?: string;
117
+ effort?: string;
118
+ /** Local engines: private thinking on/off for this invocation (see RuntimeAgentConfig.thinking). */
119
+ thinking?: 'on' | 'off';
63
120
  maxTurns?: number;
64
121
  timeoutMs?: number;
122
+ /** Maximum silence from the provider; independent of the total invocation limit. */
123
+ idleTimeoutMs?: number;
65
124
  maxTokens?: number;
66
125
  maxCostUsd?: number;
67
- /** Continue an earlier provider session when the executor supports it. Executors without sessions ignore it. */
126
+ /** Only send a partial follow-up when capabilities guarantee restored history before inference. */
68
127
  resumeSessionId?: string;
69
128
  /** JSON Schema for the final structured reply. Executors with native structured output enforce it; the prompt remains authoritative elsewhere. */
70
129
  outputSchema?: Record<string, unknown>;
71
130
  signal?: AbortSignal;
72
131
  onEvent?: (event: AgentEvent) => void;
132
+ /** Project guardrail switches for the compact runtime (see guardrails.ts). */
133
+ guardrails?: GuardrailSettings;
134
+ /** `fixer`: this developer invocation is a correction round on the fixer engine (fixer stance, no plan dump). */
135
+ stance?: 'fixer';
73
136
  }
74
137
  export interface AgentResult {
75
138
  text: string;
@@ -79,14 +142,18 @@ export interface AgentResult {
79
142
  }
80
143
  export type AgentLimits = Pick<AgentRequest, 'maxTokens' | 'maxCostUsd'>;
81
144
  export interface AgentExecutor {
145
+ capabilities?(model?: string): ExecutorCapabilities | Promise<ExecutorCapabilities>;
82
146
  /** Side-effect-free preflight. Custom executors own their limit capabilities. */
147
+ validateOpenSpec?(context: import('./openspec.js').OpenSpecRoleContext): Promise<void>;
83
148
  validateLimits?(limits: AgentLimits): void;
84
149
  execute(request: AgentRequest): Promise<AgentResult>;
85
150
  }
86
151
  export declare class AgentExecutionError extends Error {
87
152
  readonly code: string;
88
153
  readonly usage: AgentUsage;
89
- constructor(message: string, code: string, usage?: AgentUsage);
154
+ readonly sessionId?: string | undefined;
155
+ constructor(message: string, code: string, usage?: AgentUsage, sessionId?: string | undefined);
156
+ get interrupted(): boolean;
90
157
  }
91
158
  export declare function unknownUsage(): AgentUsage;
92
159
  export declare function validateAgentRequest(request: AgentRequest): void;
@@ -1,12 +1,17 @@
1
+ export const DEFAULT_AGENT_TIMEOUT_MS = 60 * 60_000;
2
+ export const DEFAULT_AGENT_IDLE_TIMEOUT_MS = 15 * 60_000;
1
3
  export class AgentExecutionError extends Error {
2
4
  code;
3
5
  usage;
4
- constructor(message, code, usage = unknownUsage()) {
6
+ sessionId;
7
+ constructor(message, code, usage = unknownUsage(), sessionId) {
5
8
  super(message);
6
9
  this.code = code;
7
10
  this.usage = usage;
11
+ this.sessionId = sessionId;
8
12
  this.name = 'AgentExecutionError';
9
13
  }
14
+ get interrupted() { return ['timeout', 'idle_timeout', 'aborted'].includes(this.code); }
10
15
  }
11
16
  export function unknownUsage() { return { inputTokens: null, outputTokens: null, costUsd: null }; }
12
17
  export function validateAgentRequest(request) {
@@ -14,7 +19,7 @@ export function validateAgentRequest(request) {
14
19
  throw new AgentExecutionError('Invalid role request', 'invalid_request');
15
20
  if (request.model !== undefined && (typeof request.model !== 'string' || !request.model.trim() || request.model.length > 256 || /^-/.test(request.model) || /[\0\r\n]/.test(request.model)))
16
21
  throw new AgentExecutionError('Invalid model identifier', 'invalid_model');
17
- for (const key of ['maxTurns', 'timeoutMs', 'maxTokens', 'maxCostUsd']) {
22
+ for (const key of ['maxTurns', 'timeoutMs', 'idleTimeoutMs', 'maxTokens', 'maxCostUsd']) {
18
23
  const value = request[key];
19
24
  if (value !== undefined && (!Number.isFinite(value) || value <= 0 || (key !== 'maxCostUsd' && !Number.isSafeInteger(value))))
20
25
  throw new AgentExecutionError(`Invalid ${key}`, 'invalid_limit');
@@ -1 +1 @@
1
- {"version":3,"file":"executor-types.js","sourceRoot":"","sources":["../../src/agent-runtime/executor-types.ts"],"names":[],"mappings":"AA8DA,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACC;IAA8B;IAA3E,YAAY,OAAe,EAAkB,IAAY,EAAkB,QAAoB,YAAY,EAAE;QAC3G,KAAK,CAAC,OAAO,CAAC,CAAA;QAD6B,SAAI,GAAJ,IAAI,CAAQ;QAAkB,UAAK,GAAL,KAAK,CAA6B;QAE3G,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;IACnC,CAAC;CACF;AACD,MAAM,UAAU,YAAY,KAAiB,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA,CAAC,CAAC;AAC9G,MAAM,UAAU,oBAAoB,CAAC,OAAqB;IACxD,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,mBAAmB,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,CAAA;IAC7O,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAAE,MAAM,IAAI,mBAAmB,CAAC,0BAA0B,EAAE,eAAe,CAAC,CAAA;IACvQ,KAAK,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,CAAU,EAAE,CAAC;QAChF,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,YAAY,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,mBAAmB,CAAC,WAAW,GAAG,EAAE,EAAE,eAAe,CAAC,CAAA;IAChM,CAAC;IACD,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,IAAI,CAAC,OAAO,OAAO,CAAC,eAAe,KAAK,QAAQ,IAAI,CAAC,qCAAqC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAAE,MAAM,IAAI,mBAAmB,CAAC,4BAA4B,EAAE,iBAAiB,CAAC,CAAA;IAClP,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,YAAY,IAAI,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAAE,MAAM,IAAI,mBAAmB,CAAC,uBAAuB,EAAE,iBAAiB,CAAC,CAAA;IAC/N,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;QAAE,MAAM,IAAI,mBAAmB,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAA;AAC1F,CAAC"}
1
+ {"version":3,"file":"executor-types.js","sourceRoot":"","sources":["../../src/agent-runtime/executor-types.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ export declare class ExecutorRegistry {
10
10
  register(id: string, executor: AgentExecutor): this;
11
11
  get(id: string): AgentExecutor;
12
12
  ids(): string[];
13
+ capabilities(id: string, model?: string): Promise<import("./executor-types.js").ExecutorCapabilities>;
13
14
  validateLimits(id: string, limits: AgentLimits): void;
14
15
  execute(id: string, request: AgentRequest): Promise<AgentResult>;
15
16
  }
@@ -2,6 +2,7 @@ import { AgentExecutionError, validateAgentRequest } from './executor-types.js';
2
2
  import { validateRuntimeConfig } from './config.js';
3
3
  import { CliExecutor } from './cli-executor.js';
4
4
  import { OpenAICompatibleExecutor } from './openai-executor.js';
5
+ import { assertEffortSupported, unknownCapabilities } from './capabilities.js';
5
6
  export { CliExecutor, buildCliInvocation, parseCliOutput } from './cli-executor.js';
6
7
  export { OpenAICompatibleExecutor } from './openai-executor.js';
7
8
  export { AgentExecutionError } from './executor-types.js';
@@ -20,9 +21,12 @@ export class ExecutorRegistry {
20
21
  return executor;
21
22
  }
22
23
  ids() { return [...this.executors.keys()]; }
24
+ async capabilities(id, model) { return await this.get(id).capabilities?.(model) ?? unknownCapabilities('registered:' + id); }
23
25
  validateLimits(id, limits) { this.get(id).validateLimits?.(limits); }
24
26
  async execute(id, request) {
25
27
  validateAgentRequest(request);
28
+ if (request.effort !== undefined)
29
+ assertEffortSupported(request, await this.capabilities(id, request.model));
26
30
  const result = await this.get(id).execute(request);
27
31
  if (!result || typeof result.text !== 'string' || !result.text.trim() || !result.usage || ['inputTokens', 'outputTokens', 'costUsd'].some(key => {
28
32
  const value = result.usage[key];
@@ -1 +1 @@
1
- {"version":3,"file":"executors.js","sourceRoot":"","sources":["../../src/agent-runtime/executors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executors.js","sourceRoot":"","sources":["../../src/agent-runtime/executors.ts"],"names":[],"mappings":"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"}
@@ -9,32 +9,18 @@ export declare function parseAgentObject(text: string): Record<string, unknown>;
9
9
  export declare function child(root: string, relative: string): string;
10
10
  export declare function write(file: string, content: string): void;
11
11
  export declare function journal(context: PipelineContext): PipelineState;
12
- export interface Architecture {
13
- proposal: string;
14
- design: string;
15
- tasks: string[];
16
- specs: Array<{
17
- name: string;
18
- content: string;
19
- }>;
12
+ export declare function parseArchitecture(raw: Record<string, unknown>): {
20
13
  confidence: DesignConfidence;
21
14
  question?: string;
22
15
  verification: unknown;
23
- }
24
- /** Validates the architect's structured reply; throws `Invalid …` so the role gets one repair turn. */
25
- export declare function parseArchitecture(raw: Record<string, unknown>): Architecture;
26
- /**
27
- * Writes the reviewed architecture artifacts. A low-confidence design that the
28
- * project chose to proceed with is recorded as `medium` (the contract for a
29
- * design resting on one named assumption) with its provenance kept alongside,
30
- * because Core's design gate admits only high or medium confidence.
31
- */
32
- export declare function writeArchitecture(context: PipelineContext, change: string, architecture: Architecture, options?: {
16
+ planningDepth: 'focused' | 'full';
17
+ planningReason?: string;
18
+ referencePatterns: string[];
19
+ riskFlags: string[];
20
+ };
21
+ export declare function writeDesignConfidence(context: PipelineContext, change: string, architecture: ReturnType<typeof parseArchitecture>, options?: {
33
22
  assumed?: boolean;
34
23
  }): void;
35
24
  /** Commands the architect proposed for repositories the configuration leaves uncovered. */
36
25
  export declare function proposedVerification(context: PipelineContext, configured: VerificationCommand[], verification: unknown): VerificationCommand[];
37
- export declare function openTasks(context: PipelineContext, change: string): string[];
38
- /** Archive is deterministic and replayable only with explicit write recovery.
39
- * The reviewed specification documents are complete replacements, not deltas. */
40
- export declare function archive(context: PipelineContext, change: string): void;
26
+ export declare function archive(context: PipelineContext, change: string, signal?: AbortSignal): Promise<void>;
@@ -1,5 +1,6 @@
1
+ import { artifactPath, hash, resolveOpenSpecCli, runOpenSpec } from '../openspec.js';
1
2
  import { randomUUID } from 'node:crypto';
2
- import { existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from 'node:fs';
3
+ import { cpSync, existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from 'node:fs';
3
4
  import path from 'node:path';
4
5
  import { checkArchive, pipelineStateDirectory, transitionPipeline, validateVerificationRequest, } from '../../installer/runtime/pipeline-state.js';
5
6
  export const SLUG = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
@@ -8,11 +9,6 @@ export function object(value) {
8
9
  throw new Error('Expected a structured JSON object from agent');
9
10
  return value;
10
11
  }
11
- function markdown(value, name) {
12
- if (typeof value !== 'string' || !value.trim() || value.length > 500_000)
13
- throw new Error('Invalid agent field: ' + name);
14
- return value.trim() + '\n';
15
- }
16
12
  /** Accepts the object wherever the model put it: bare, fenced, or surrounded by commentary. */
17
13
  export function parseAgentObject(text) {
18
14
  if (text.length > 2_000_000)
@@ -65,56 +61,36 @@ export function write(file, content) {
65
61
  export function journal(context) {
66
62
  return JSON.parse(readFileSync(path.join(pipelineStateDirectory(context), 'state.json'), 'utf8'));
67
63
  }
68
- /** Validates the architect's structured reply; throws `Invalid …` so the role gets one repair turn. */
69
64
  export function parseArchitecture(raw) {
70
- const proposal = markdown(raw.proposal, 'proposal');
71
- const design = markdown(raw.design, 'design');
72
65
  if (!['high', 'medium', 'low'].includes(String(raw.confidence)))
73
66
  throw new Error('Invalid design confidence');
74
- if (!Array.isArray(raw.tasks) || !raw.tasks.length || raw.tasks.length > 200)
75
- throw new Error('Architecture requires 1–200 tasks');
76
- const tasks = raw.tasks.map(task => {
77
- const title = object(task).title;
78
- if (typeof title !== 'string' || !title.trim() || /[\r\n]/.test(title) || title.length > 1000)
79
- throw new Error('Invalid task title');
80
- return title.trim();
81
- });
82
- if (!Array.isArray(raw.specs) || !raw.specs.length || raw.specs.length > 100)
83
- throw new Error('Architecture requires 1–100 specifications');
84
- const specs = raw.specs.map((item) => {
85
- const spec = object(item);
86
- if (typeof spec.name !== 'string' || !SLUG.test(spec.name) || spec.name.length > 100)
87
- throw new Error('Invalid specification name');
88
- return { name: spec.name, content: markdown(spec.content, 'spec.content') };
89
- });
90
- if (new Set(specs.map(s => s.name)).size !== specs.length)
91
- throw new Error('Duplicate specification names');
92
- if (raw.question !== undefined && raw.question !== null && (typeof raw.question !== 'string' || raw.question.length > 4000))
67
+ if (raw.question !== undefined && (typeof raw.question !== 'string' || raw.question.length > 4000))
93
68
  throw new Error('Invalid architect question');
94
- const question = typeof raw.question === 'string' && raw.question.trim() ? raw.question.trim() : undefined;
95
- return { proposal, design, tasks, specs, confidence: raw.confidence, ...(question ? { question } : {}), verification: raw.verification };
69
+ if (raw.planningDepth !== undefined && raw.planningDepth !== 'focused' && raw.planningDepth !== 'full')
70
+ throw new Error('Invalid planning depth');
71
+ if (raw.planningReason !== undefined && (typeof raw.planningReason !== 'string' || !raw.planningReason.trim() || raw.planningReason.length > 2000))
72
+ throw new Error('Invalid planning reason');
73
+ const references = (key) => {
74
+ const value = raw[key];
75
+ if (value === undefined)
76
+ return [];
77
+ if (!Array.isArray(value) || value.length > 20 || value.some(item => typeof item !== 'string' || !item.trim() || item.length > 1000))
78
+ throw new Error('Invalid architect ' + key);
79
+ return value;
80
+ };
81
+ const referencePatterns = references('referencePatterns'), riskFlags = references('riskFlags');
82
+ return { confidence: raw.confidence, ...(typeof raw.question === 'string' && raw.question.trim() ? { question: raw.question.trim() } : {}), verification: raw.verification,
83
+ planningDepth: raw.planningDepth === 'focused' && referencePatterns.length > 0 && riskFlags.length === 0 ? 'focused' : 'full',
84
+ ...(typeof raw.planningReason === 'string' ? { planningReason: raw.planningReason } : {}), referencePatterns, riskFlags, };
96
85
  }
97
- /**
98
- * Writes the reviewed architecture artifacts. A low-confidence design that the
99
- * project chose to proceed with is recorded as `medium` (the contract for a
100
- * design resting on one named assumption) with its provenance kept alongside,
101
- * because Core's design gate admits only high or medium confidence.
102
- */
103
- export function writeArchitecture(context, change, architecture, options = {}) {
104
- const tasks = architecture.tasks.map((title, i) => '- [ ] ' + (i + 1) + '. ' + title).join('\n') + '\n';
105
- const prefix = 'openspec/changes/' + change + '/';
86
+ export function writeDesignConfidence(context, change, architecture, options = {}) {
87
+ // A question may precede change creation. Do not fabricate a change directory in that case.
88
+ if (!existsSync(child(context.artifactRoot, 'openspec/changes/' + change + '/.openspec.yaml')))
89
+ return;
106
90
  const confidence = options.assumed && architecture.confidence === 'low'
107
- ? { confidence: 'medium', assumed: true, reportedConfidence: 'low', ...(architecture.question ? { question: architecture.question } : {}) }
108
- : { confidence: architecture.confidence, ...(architecture.question ? { question: architecture.question } : {}) };
109
- const files = [
110
- ['proposal.md', architecture.proposal], ['design.md', architecture.design], ['tasks.md', tasks],
111
- ['design-confidence.json', JSON.stringify(confidence, null, 2) + '\n'],
112
- ...architecture.specs.map(s => ['specs/' + s.name + '/spec.md', s.content]),
113
- ];
114
- // Validate every destination before the first write.
115
- const targets = files.map(([name, content]) => [child(context.artifactRoot, prefix + name), content]);
116
- for (const [target, content] of targets)
117
- write(target, content);
91
+ ? { confidence: 'medium', assumed: true, reportedConfidence: 'low', question: architecture.question }
92
+ : { confidence: architecture.confidence, question: architecture.question };
93
+ write(child(context.artifactRoot, 'openspec/changes/' + change + '/design-confidence.json'), JSON.stringify(confidence, null, 2) + '\n');
118
94
  }
119
95
  /** Commands the architect proposed for repositories the configuration leaves uncovered. */
120
96
  export function proposedVerification(context, configured, verification) {
@@ -133,35 +109,85 @@ export function proposedVerification(context, configured, verification) {
133
109
  validateVerificationRequest(context, { kind: 'scoped', commands: proposed });
134
110
  return proposed;
135
111
  }
136
- export function openTasks(context, change) {
137
- const file = child(context.artifactRoot, 'openspec/changes/' + change + '/tasks.md');
138
- if (!existsSync(file))
139
- return [];
140
- return readFileSync(file, 'utf8').split(/\r?\n/).filter(line => /^\s*-\s+\[ \]/.test(line)).map(line => line.replace(/^\s*-\s+\[ \]\s*/, '').trim()).slice(0, 50);
112
+ /** Publish an archive prepared by the real CLI. The durable write set makes a
113
+ * crash between main-spec updates recoverable without applying a delta twice. */
114
+ async function archiveWithOpenSpec(context, change, active, signal) {
115
+ const directory = pipelineStateDirectory(context);
116
+ const receipt = path.join(directory, 'openspec-archive.json');
117
+ const files = (root, prefix = '') => {
118
+ if (!existsSync(root))
119
+ return [];
120
+ return readdirSync(root, { withFileTypes: true }).flatMap(entry => {
121
+ const relative = prefix + entry.name;
122
+ if (entry.isSymbolicLink())
123
+ throw new Error('OpenSpec archive refuses symlink trees');
124
+ return entry.isDirectory() ? files(path.join(root, entry.name), relative + '/') : [relative];
125
+ });
126
+ };
127
+ const activeHash = hash(JSON.stringify(files(active).sort().map(file => [file, readFileSync(artifactPath(active, file), 'utf8')])));
128
+ let plan;
129
+ if (existsSync(receipt))
130
+ plan = JSON.parse(readFileSync(receipt, 'utf8'));
131
+ else {
132
+ const staging = mkdtempSync(path.join(directory, '.openspec-archive-'));
133
+ try {
134
+ const source = artifactPath(context.artifactRoot, 'openspec');
135
+ files(source); // Reject symlinks before copying or invoking the external CLI.
136
+ cpSync(source, path.join(staging, 'openspec'), { recursive: true });
137
+ await runOpenSpec(resolveOpenSpecCli(), staging, ['archive', change, '--yes'], signal);
138
+ const archives = readdirSync(path.join(staging, 'openspec/changes/archive')).filter(name => name.endsWith('-' + change));
139
+ if (archives.length !== 1)
140
+ throw new Error('OpenSpec archive destination is ambiguous');
141
+ const destination = 'openspec/changes/archive/' + archives[0];
142
+ if (existsSync(artifactPath(context.artifactRoot, destination)))
143
+ throw new Error('OpenSpec archive destination already exists');
144
+ const beforeRoot = path.join(source, 'specs'), afterRoot = path.join(staging, 'openspec/specs');
145
+ const names = new Set([...files(beforeRoot), ...files(afterRoot)]);
146
+ const contents = (root, name) => existsSync(path.join(root, name)) ? readFileSync(path.join(root, name), 'utf8') : null;
147
+ plan = { activeHash, destination, writes: [...names].map(name => ({ path: 'openspec/specs/' + name, before: contents(beforeRoot, name), after: contents(afterRoot, name) })).filter(item => item.before !== item.after) };
148
+ write(receipt, JSON.stringify(plan));
149
+ }
150
+ finally {
151
+ rmSync(staging, { recursive: true, force: true });
152
+ }
153
+ }
154
+ if (plan.activeHash !== activeHash)
155
+ throw new Error('Reviewed artifacts changed since the OpenSpec archive was prepared');
156
+ if (!new RegExp('^openspec/changes/archive/[0-9]{4}-[0-9]{2}-[0-9]{2}-' + change + '$').test(plan.destination))
157
+ throw new Error('Invalid OpenSpec archive receipt');
158
+ const targets = plan.writes.map(item => {
159
+ if (!item.path.startsWith('openspec/specs/'))
160
+ throw new Error('Invalid OpenSpec archive write');
161
+ const target = artifactPath(context.artifactRoot, item.path);
162
+ const current = existsSync(target) ? readFileSync(target, 'utf8') : null;
163
+ if (current !== item.before && current !== item.after)
164
+ throw new Error('Main specification changed during archive; refusing to overwrite: ' + item.path);
165
+ return { ...item, target };
166
+ });
167
+ // The external CLI ran asynchronously; recheck the candidate and artifacts before publishing.
168
+ signal?.throwIfAborted();
169
+ checkArchive(context);
170
+ // Validate every path and preimage before publishing the first output.
171
+ const destination = artifactPath(context.artifactRoot, plan.destination);
172
+ if (existsSync(destination))
173
+ throw new Error('Archive destination already exists');
174
+ for (const item of targets) {
175
+ if (item.after === null)
176
+ rmSync(item.target, { force: true });
177
+ else
178
+ write(item.target, item.after);
179
+ }
180
+ mkdirSync(path.dirname(destination), { recursive: true });
181
+ renameSync(active, destination);
141
182
  }
142
- /** Archive is deterministic and replayable only with explicit write recovery.
143
- * The reviewed specification documents are complete replacements, not deltas. */
144
- export function archive(context, change) {
183
+ export async function archive(context, change, signal) {
145
184
  const state = journal(context);
146
185
  if (state.phases.archive.status !== 'done') {
147
- const active = child(context.artifactRoot, 'openspec/changes/' + change);
186
+ const active = artifactPath(context.artifactRoot, 'openspec/changes/' + change);
148
187
  if (existsSync(active)) {
149
188
  checkArchive(context);
150
189
  transitionPipeline(context, 'archive', 'running');
151
- const specsDir = child(context.artifactRoot, 'openspec/changes/' + change + '/specs');
152
- const specs = readdirSync(specsDir, { withFileTypes: true }).filter(item => item.isDirectory());
153
- const writes = specs.map(spec => {
154
- if (!SLUG.test(spec.name))
155
- throw new Error('Invalid archived specification name');
156
- return [child(context.artifactRoot, 'openspec/specs/' + spec.name + '/spec.md'), readFileSync(child(context.artifactRoot, 'openspec/changes/' + change + '/specs/' + spec.name + '/spec.md'), 'utf8')];
157
- });
158
- const destination = child(context.artifactRoot, 'openspec/changes/archive/' + state.createdAt.slice(0, 10) + '-' + change);
159
- if (existsSync(destination))
160
- throw new Error('Archive destination already exists');
161
- for (const [file, content] of writes)
162
- write(file, content);
163
- mkdirSync(path.dirname(destination), { recursive: true });
164
- renameSync(active, destination);
190
+ await archiveWithOpenSpec(context, change, active, signal);
165
191
  }
166
192
  // If the process died after rename, Core rechecks the saved archive approval.
167
193
  transitionPipeline(context, 'archive', 'done');
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../../src/agent-runtime/graph/artifacts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../../src/agent-runtime/graph/artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC7I,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EACL,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,2BAA2B,GAEtF,MAAM,2CAA2C,CAAA;AAGlD,MAAM,CAAC,MAAM,IAAI,GAAG,4BAA4B,CAAA;AAEhD,MAAM,UAAU,MAAM,CAAC,KAAc;IACnC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IAChI,OAAO,KAAgC,CAAA;AACzC,CAAC;AACD,+FAA+F;AAC/F,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IACtF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAC3B,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,oCAAoC,EAAE,IAAI,CAAC,CAAC,CAAA;IACzF,MAAM,MAAM,GAAG,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC/D,IAAI,MAAM;QAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAA;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACnE,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,GAAG,KAAK;QAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAA;IAC/E,IAAI,OAAgB,CAAA;IACpB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC;YAAC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;QAAC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,GAAG,KAAK,CAAA;QAAC,CAAC;IAChF,CAAC;IACD,MAAM,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;AACtG,CAAC;AACD;gDACgD;AAChD,MAAM,UAAU,KAAK,CAAC,IAAY,EAAE,QAAgB;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACvC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACxI,IAAI,MAAM,GAAG,IAAI,CAAA;IACjB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAChC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,QAAQ,CAAC,CAAA;IAC9H,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AACD,MAAM,UAAU,KAAK,CAAC,IAAY,EAAE,OAAe;IACjD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAClD,MAAM,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,UAAU,EAAE,GAAG,MAAM,CAAA;IAC/C,IAAI,CAAC;QAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAAC,CAAC;YACjF,CAAC;QAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAAC,CAAC;AAC3C,CAAC;AACD,MAAM,UAAU,OAAO,CAAC,OAAwB;IAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAkB,CAAA;AACpH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAA4B;IAC5D,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;IAC7G,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;IACjJ,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,GAAG,CAAC,aAAa,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;IACjJ,IAAI,GAAG,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC9L,MAAM,UAAU,GAAG,CAAC,GAAW,EAAY,EAAE;QAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;QACtB,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,CAAA;QAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,GAAG,CAAC,CAAA;QACjL,OAAO,KAAiB,CAAA;IAC1B,CAAC,CAAA;IACD,MAAM,iBAAiB,GAAG,UAAU,CAAC,mBAAmB,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,CAAA;IAC9F,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,UAA8B,EAAE,GAAG,CAAC,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY;QAC5L,aAAa,EAAE,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;QAC7H,GAAG,CAAC,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,iBAAiB,EAAE,SAAS,GACxH,CAAA;AACH,CAAC;AACD,MAAM,UAAU,qBAAqB,CAAC,OAAwB,EAAE,MAAc,EAAE,YAAkD,EAAE,UAAiC,EAAE;IACrK,4FAA4F;IAC5F,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,mBAAmB,GAAG,MAAM,GAAG,iBAAiB,CAAC,CAAC;QAAE,OAAM;IACtG,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,IAAI,YAAY,CAAC,UAAU,KAAK,KAAK;QACrE,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE;QACrG,CAAC,CAAC,EAAE,UAAU,EAAE,YAAY,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAA;IAC5E,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,mBAAmB,GAAG,MAAM,GAAG,yBAAyB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;AAC1I,CAAC;AACD,2FAA2F;AAC3F,MAAM,UAAU,oBAAoB,CAAC,OAAwB,EAAE,UAAiC,EAAE,YAAqB;IACrH,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,IAAI;QAAE,OAAO,EAAE,CAAA;IAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IACxH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAA;IACxE,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACvC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;QAC/P,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAgB,EAAE,GAAG,CAAC,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC1L,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAAA;IAC3I,IAAI,QAAQ,CAAC,MAAM;QAAE,2BAA2B,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;IACjG,OAAO,QAAQ,CAAA;AACjB,CAAC;AACD;iFACiF;AACjF,KAAK,UAAU,mBAAmB,CAAC,OAAwB,EAAE,MAAc,EAAE,MAAc,EAAE,MAAoB;IAC/G,MAAM,SAAS,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAA;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAA;IAE7D,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,MAAM,GAAG,EAAE,EAAY,EAAE;QACpD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAA;QAChC,OAAO,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAChE,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,CAAA;YACpC,IAAI,KAAK,CAAC,cAAc,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;YACrF,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;QAC9F,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACnI,IAAI,IAAU,CAAA;IACd,IAAI,UAAU,CAAC,OAAO,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAS,CAAA;SAC5E,CAAC;QACJ,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC,CAAA;QACvE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;YAC7D,KAAK,CAAC,MAAM,CAAC,CAAA,CAAC,+DAA+D;YAC7E,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACnE,MAAM,WAAW,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,CAAA;YACtF,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAA;YACxH,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;YACvF,MAAM,WAAW,GAAG,2BAA2B,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAA;YAC9D,IAAI,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;YAC/H,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAA;YAC/F,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;YAClE,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,IAAY,EAAiB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YACtJ,IAAI,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,CAAA;YACzN,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;QACtC,CAAC;gBAAS,CAAC;YAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAAC,CAAC;IACjE,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;IACzH,IAAI,CAAC,IAAI,MAAM,CAAC,uDAAuD,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACnK,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACrC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QAC/F,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5D,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACxE,IAAI,OAAO,KAAK,IAAI,CAAC,MAAM,IAAI,OAAO,KAAK,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,oEAAoE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;QACxJ,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAA;IAC5B,CAAC,CAAC,CAAA;IACF,8FAA8F;IAC9F,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,YAAY,CAAC,OAAO,CAAC,CAAA;IACrB,uEAAuE;IACvE,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;IACxE,IAAI,UAAU,CAAC,WAAW,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;IAClF,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;;YACxD,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IACrC,CAAC;IACD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACzD,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AACjC,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAwB,EAAE,MAAc,EAAE,MAAoB;IAC1F,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9B,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,mBAAmB,GAAG,MAAM,CAAC,CAAA;QAC/E,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,YAAY,CAAC,OAAO,CAAC,CAAA;YACrB,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;YACjD,MAAM,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QAC5D,CAAC;QACD,8EAA8E;QAC9E,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAChD,CAAC;IACD,4EAA4E;IAC5E,yEAAyE;IACzE,IAAI,OAAO,CAAC,SAAS,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;QAChC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;QAC5F,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,KAAK,SAAS;YAAE,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAAA;IAC1F,CAAC;AACH,CAAC"}
@@ -1,5 +1,6 @@
1
+ import { type OpenSpecRoleContext } from '../openspec.js';
1
2
  import { type AcceptanceReport, type PipelineContext } from '../../installer/runtime/pipeline-state.js';
2
- import type { AgentResult, AgentRole, RuntimeConfig } from '../executor-types.js';
3
+ import type { AgentEventRole, AgentResult, AgentRole, RuntimeConfig } from '../executor-types.js';
3
4
  import { type FrozenCriterion } from '../prompts.js';
4
5
  import type { WorkflowNode, WorkflowState } from '../workflow-types.js';
5
6
  import { type ReviewPolicy } from './review-policy.js';
@@ -8,20 +9,24 @@ import type { CoreNodeId, CoreStateType, DeveloperRecord, VerificationRecord } f
8
9
  /** Autonomous investigation passes before a low-confidence design asks or proceeds. */
9
10
  export declare const MAX_DEEPEN_PASSES = 1;
10
11
  export interface CoreNodeDeps {
12
+ archiveApproved?: () => boolean;
11
13
  context: PipelineContext;
12
14
  config: RuntimeConfig;
15
+ openspec: Record<AgentRole, OpenSpecRoleContext>;
13
16
  change: string;
14
17
  /** Development visits allowed per invocation, including correction cycles. */
15
18
  attempts: number;
16
19
  policy: ReviewPolicy;
17
20
  invoke: RoleInvoker;
18
21
  /** Host-facing narration of what the runtime did with a role's reply. */
19
- note(role: AgentRole, text: string): void;
22
+ note(role: AgentEventRole, text: string): void;
20
23
  onVerificationOutput?: (text: string) => void;
21
24
  }
22
25
  type CoreNode = WorkflowNode<CoreStateType>;
23
26
  /** Attempts count from the latest explicit resume: a human continuing a blocked run grants a fresh budget. */
24
27
  export declare function developerVisitsSinceResume(checkpoint: WorkflowState): number;
28
+ /** Correction rounds (fixer visits) since the latest explicit resume; first passes and continuations of unchecked tasks live on the developer node and never count. */
29
+ export declare function fixerVisitsSinceResume(checkpoint: WorkflowState): number;
25
30
  /** The developer's structured summary, or an honest prose record when the provider returned text. */
26
31
  export declare function developerRecord(output: Record<string, unknown> | undefined, text: string, result: AgentResult, provider: string): DeveloperRecord;
27
32
  /**