specrails-core 6.0.1 → 6.2.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 (169) hide show
  1. package/README.md +3 -3
  2. package/dist/agent-runtime/capabilities.js +3 -1
  3. package/dist/agent-runtime/change-scope.js +2 -0
  4. package/dist/agent-runtime/cli-executor.d.ts +3 -0
  5. package/dist/agent-runtime/cli-executor.js +52 -14
  6. package/dist/agent-runtime/cli-process.js +6 -2
  7. package/dist/agent-runtime/cli.d.ts +15 -0
  8. package/dist/agent-runtime/cli.js +43 -9
  9. package/dist/agent-runtime/compact/chat-client.js +2 -1
  10. package/dist/agent-runtime/config.d.ts +4 -1
  11. package/dist/agent-runtime/config.js +41 -3
  12. package/dist/agent-runtime/core-host.d.ts +9 -3
  13. package/dist/agent-runtime/core-host.js +21 -18
  14. package/dist/agent-runtime/efficiency-summary.d.ts +4 -1
  15. package/dist/agent-runtime/efficiency-summary.js +30 -27
  16. package/dist/agent-runtime/efficiency-types.d.ts +4 -4
  17. package/dist/agent-runtime/efficiency.d.ts +1 -1
  18. package/dist/agent-runtime/efficiency.js +7 -6
  19. package/dist/agent-runtime/engine/__fixtures__/implementation-component.json +90 -0
  20. package/dist/agent-runtime/engine/__fixtures__/implementation-fixture.d.ts +11 -0
  21. package/dist/agent-runtime/engine/__fixtures__/implementation-fixture.js +60 -0
  22. package/dist/agent-runtime/engine/__fixtures__/implementation.json +43 -0
  23. package/dist/agent-runtime/engine/budget.d.ts +9 -0
  24. package/dist/agent-runtime/engine/budget.js +33 -0
  25. package/dist/agent-runtime/engine/canonical-json.d.ts +9 -0
  26. package/dist/agent-runtime/engine/canonical-json.js +162 -0
  27. package/dist/agent-runtime/engine/checkpoint/database.d.ts +67 -0
  28. package/dist/agent-runtime/engine/checkpoint/database.js +304 -0
  29. package/dist/agent-runtime/engine/checkpoint/lease.d.ts +17 -0
  30. package/dist/agent-runtime/engine/checkpoint/lease.js +82 -0
  31. package/dist/agent-runtime/engine/checkpoint/ledger.d.ts +133 -0
  32. package/dist/agent-runtime/engine/checkpoint/ledger.js +510 -0
  33. package/dist/agent-runtime/engine/checkpoint/saver.d.ts +25 -0
  34. package/dist/agent-runtime/engine/checkpoint/saver.js +146 -0
  35. package/dist/agent-runtime/engine/cli.d.ts +10 -0
  36. package/dist/agent-runtime/engine/cli.js +172 -0
  37. package/dist/agent-runtime/engine/compiler.d.ts +23 -0
  38. package/dist/agent-runtime/engine/compiler.js +262 -0
  39. package/dist/agent-runtime/engine/composition.d.ts +16 -0
  40. package/dist/agent-runtime/engine/composition.js +28 -0
  41. package/dist/agent-runtime/engine/concurrency.d.ts +14 -0
  42. package/dist/agent-runtime/engine/concurrency.js +55 -0
  43. package/dist/agent-runtime/engine/contracts.d.ts +273 -0
  44. package/dist/agent-runtime/engine/contracts.js +11 -0
  45. package/dist/agent-runtime/engine/definition-schema.d.ts +250 -0
  46. package/dist/agent-runtime/engine/definition-schema.js +315 -0
  47. package/dist/agent-runtime/engine/definition-types.d.ts +84 -0
  48. package/dist/agent-runtime/engine/definition-types.js +3 -0
  49. package/dist/agent-runtime/engine/definition-validator.d.ts +7 -0
  50. package/dist/agent-runtime/engine/definition-validator.js +191 -0
  51. package/dist/agent-runtime/engine/efficiency-summary.d.ts +62 -0
  52. package/dist/agent-runtime/engine/efficiency-summary.js +31 -0
  53. package/dist/agent-runtime/engine/events.d.ts +19 -0
  54. package/dist/agent-runtime/engine/events.js +88 -0
  55. package/dist/agent-runtime/engine/execution.d.ts +29 -0
  56. package/dist/agent-runtime/engine/execution.js +121 -0
  57. package/dist/agent-runtime/engine/expressions.d.ts +11 -0
  58. package/dist/agent-runtime/engine/expressions.js +185 -0
  59. package/dist/agent-runtime/engine/fork.d.ts +28 -0
  60. package/dist/agent-runtime/engine/fork.js +253 -0
  61. package/dist/agent-runtime/engine/graph-description.d.ts +48 -0
  62. package/dist/agent-runtime/engine/graph-description.js +16 -0
  63. package/dist/agent-runtime/engine/implementation-compiler.d.ts +214 -0
  64. package/dist/agent-runtime/engine/implementation-compiler.js +91 -0
  65. package/dist/agent-runtime/engine/index.d.ts +14 -0
  66. package/dist/agent-runtime/engine/index.js +14 -0
  67. package/dist/agent-runtime/engine/invocation-context.d.ts +11 -0
  68. package/dist/agent-runtime/engine/invocation-context.js +130 -0
  69. package/dist/agent-runtime/engine/otel.d.ts +15 -0
  70. package/dist/agent-runtime/engine/otel.js +132 -0
  71. package/dist/agent-runtime/engine/output.d.ts +4 -0
  72. package/dist/agent-runtime/engine/output.js +73 -0
  73. package/dist/agent-runtime/engine/piece-dependencies.d.ts +54 -0
  74. package/dist/agent-runtime/engine/piece-dependencies.js +240 -0
  75. package/dist/agent-runtime/engine/piece-registry.d.ts +19 -0
  76. package/dist/agent-runtime/engine/piece-registry.js +62 -0
  77. package/dist/agent-runtime/engine/pieces/artifact-contract.d.ts +4 -0
  78. package/dist/agent-runtime/engine/pieces/artifact-contract.js +70 -0
  79. package/dist/agent-runtime/engine/pieces/assign.d.ts +4 -0
  80. package/dist/agent-runtime/engine/pieces/assign.js +35 -0
  81. package/dist/agent-runtime/engine/pieces/control.d.ts +5 -0
  82. package/dist/agent-runtime/engine/pieces/control.js +53 -0
  83. package/dist/agent-runtime/engine/pieces/decider.d.ts +5 -0
  84. package/dist/agent-runtime/engine/pieces/decider.js +70 -0
  85. package/dist/agent-runtime/engine/pieces/implementation-binding.d.ts +13 -0
  86. package/dist/agent-runtime/engine/pieces/implementation-binding.js +40 -0
  87. package/dist/agent-runtime/engine/pieces/implementation-journal.d.ts +25 -0
  88. package/dist/agent-runtime/engine/pieces/implementation-journal.js +192 -0
  89. package/dist/agent-runtime/engine/pieces/implementation-step.d.ts +5 -0
  90. package/dist/agent-runtime/engine/pieces/implementation-step.js +47 -0
  91. package/dist/agent-runtime/engine/pieces/implementation.d.ts +27 -0
  92. package/dist/agent-runtime/engine/pieces/implementation.js +177 -0
  93. package/dist/agent-runtime/engine/pieces/index.d.ts +7 -0
  94. package/dist/agent-runtime/engine/pieces/index.js +24 -0
  95. package/dist/agent-runtime/engine/pieces/openspec.d.ts +3 -0
  96. package/dist/agent-runtime/engine/pieces/openspec.js +75 -0
  97. package/dist/agent-runtime/engine/pieces/ports.d.ts +53 -0
  98. package/dist/agent-runtime/engine/pieces/ports.js +1 -0
  99. package/dist/agent-runtime/engine/pieces/project-memory.d.ts +3 -0
  100. package/dist/agent-runtime/engine/pieces/project-memory.js +13 -0
  101. package/dist/agent-runtime/engine/pieces/prompt.d.ts +5 -0
  102. package/dist/agent-runtime/engine/pieces/prompt.js +130 -0
  103. package/dist/agent-runtime/engine/pieces/role-turn.d.ts +7 -0
  104. package/dist/agent-runtime/engine/pieces/role-turn.js +73 -0
  105. package/dist/agent-runtime/engine/pieces/shared.d.ts +67 -0
  106. package/dist/agent-runtime/engine/pieces/shared.js +40 -0
  107. package/dist/agent-runtime/engine/pieces/shell.d.ts +6 -0
  108. package/dist/agent-runtime/engine/pieces/shell.js +47 -0
  109. package/dist/agent-runtime/engine/pieces/verify.d.ts +7 -0
  110. package/dist/agent-runtime/engine/pieces/verify.js +102 -0
  111. package/dist/agent-runtime/engine/preflight.d.ts +27 -0
  112. package/dist/agent-runtime/engine/preflight.js +54 -0
  113. package/dist/agent-runtime/engine/regex.d.ts +3 -0
  114. package/dist/agent-runtime/engine/regex.js +19 -0
  115. package/dist/agent-runtime/engine/run-status.d.ts +563 -0
  116. package/dist/agent-runtime/engine/run-status.js +61 -0
  117. package/dist/agent-runtime/engine/runs.d.ts +605 -0
  118. package/dist/agent-runtime/engine/runs.js +247 -0
  119. package/dist/agent-runtime/engine/state.d.ts +64 -0
  120. package/dist/agent-runtime/engine/state.js +98 -0
  121. package/dist/agent-runtime/engine/steering/inbox.d.ts +54 -0
  122. package/dist/agent-runtime/engine/steering/inbox.js +113 -0
  123. package/dist/agent-runtime/engine/storage/fork-allocation.d.ts +21 -0
  124. package/dist/agent-runtime/engine/storage/fork-allocation.js +143 -0
  125. package/dist/agent-runtime/engine/storage/private-path.d.ts +11 -0
  126. package/dist/agent-runtime/engine/storage/private-path.js +74 -0
  127. package/dist/agent-runtime/engine/store/sqlite-store.d.ts +26 -0
  128. package/dist/agent-runtime/engine/store/sqlite-store.js +227 -0
  129. package/dist/agent-runtime/evaluation-corpus.d.ts +125 -0
  130. package/dist/agent-runtime/evaluation-corpus.js +4 -0
  131. package/dist/agent-runtime/evaluation.d.ts +9 -3
  132. package/dist/agent-runtime/evaluation.js +50 -8
  133. package/dist/agent-runtime/executor-types.d.ts +53 -3
  134. package/dist/agent-runtime/executor-types.js +35 -2
  135. package/dist/agent-runtime/executors.js +2 -2
  136. package/dist/agent-runtime/graph/artifacts.d.ts +7 -0
  137. package/dist/agent-runtime/graph/artifacts.js +82 -9
  138. package/dist/agent-runtime/graph/nodes.d.ts +2 -0
  139. package/dist/agent-runtime/graph/nodes.js +2 -2
  140. package/dist/agent-runtime/graph/roles.d.ts +8 -0
  141. package/dist/agent-runtime/graph/roles.js +25 -17
  142. package/dist/agent-runtime/kimi-acp.js +6 -6
  143. package/dist/agent-runtime/openai-executor.js +17 -12
  144. package/dist/agent-runtime/openspec.d.ts +17 -2
  145. package/dist/agent-runtime/openspec.js +54 -20
  146. package/dist/agent-runtime/prompts.d.ts +4 -3
  147. package/dist/agent-runtime/prompts.js +27 -6
  148. package/dist/agent-runtime/recovery.d.ts +1 -1
  149. package/dist/agent-runtime/repository-context.js +1 -1
  150. package/dist/agent-runtime/role-routing.js +4 -2
  151. package/dist/agent-runtime/role-state.d.ts +5 -0
  152. package/dist/agent-runtime/verification-plan.d.ts +2 -0
  153. package/dist/agent-runtime/verification-plan.js +10 -0
  154. package/dist/agent-runtime/workflow-types.d.ts +2 -0
  155. package/dist/agent-runtime/workflow.d.ts +3 -1
  156. package/dist/agent-runtime/workflow.js +7 -3
  157. package/dist/agent-runtime/workspace-tools.d.ts +2 -2
  158. package/dist/agent-runtime/workspace-tools.js +6 -6
  159. package/dist/installer/cli.js +5 -0
  160. package/dist/installer/phases/scaffold.d.ts +2 -2
  161. package/dist/installer/phases/scaffold.js +3 -7
  162. package/dist/pipeline/pipeline-state.d.ts +38 -4
  163. package/dist/pipeline/pipeline-state.js +96 -21
  164. package/integration-contract.json +111 -19
  165. package/package.json +13 -6
  166. package/schemas/agent-runtime.schema.json +93 -1
  167. package/schemas/workflow-definition.schema.json +314 -0
  168. package/templates/kimi/specrails/run-skill.mjs +15 -1
  169. package/templates/commands/specrails/batch-implement.md +0 -32
@@ -0,0 +1,253 @@
1
+ import { existsSync, readdirSync, readFileSync, writeFileSync, mkdirSync, renameSync, rmSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { randomUUID } from 'node:crypto';
4
+ import { pipelineStateDirectory, validatePipelineContext } from '../../pipeline/pipeline-state.js';
5
+ import { createExecutorRegistry } from '../executors.js';
6
+ import { artifactPath } from '../openspec.js';
7
+ import { coreRuntimeIdentity } from '../core-host.js';
8
+ import { sameRuntimeIdentity } from '../runtime-identity.js';
9
+ import { canonicalJson, contentDigest } from './canonical-json.js';
10
+ import { RunDatabase } from './checkpoint/database.js';
11
+ import { RunLedger } from './checkpoint/ledger.js';
12
+ import { RunLease } from './checkpoint/lease.js';
13
+ import { EngineError } from './contracts.js';
14
+ import { composeDefinitionRuntime } from './composition.js';
15
+ import { EngineEventStream } from './events.js';
16
+ import { configuredRoles } from './preflight.js';
17
+ import { forkImplementationJournal, projectImplementationFork } from './pieces/implementation-journal.js';
18
+ import { ensurePrivateDirectory } from './storage/private-path.js';
19
+ import { ForkAllocation } from './storage/fork-allocation.js';
20
+ function patchState(input) {
21
+ if (input === undefined)
22
+ return {};
23
+ canonicalJson(input);
24
+ if (!input || typeof input !== 'object' || Array.isArray(input) || Object.keys(input).some(key => !['$vars', '$outputs'].includes(key)) || Buffer.byteLength(canonicalJson(input)) > 2 * 1024 * 1024)
25
+ throw new EngineError('invalid_arguments', 'Fork can patch only bounded $vars and $outputs');
26
+ for (const value of Object.values(input))
27
+ if (!value || typeof value !== 'object' || Array.isArray(value) || Object.keys(value).some(key => ['__proto__', 'constructor', 'prototype'].includes(key)))
28
+ throw new EngineError('invalid_arguments', 'Fork state channels require safe JSON object keys');
29
+ return structuredClone(input);
30
+ }
31
+ function rebind(source, parent, change) {
32
+ const standalone = source.context.runId === source.parentRunId;
33
+ const digest = contentDigest({ parentRunId: parent.runId, scopeId: source.scopeId, nodePath: source.nodePath }).slice(0, 24);
34
+ const context = validatePipelineContext({ ...source.context, runId: standalone ? parent.runId : parent.runId.slice(0, 80) + '-impl-' + digest });
35
+ return { ...source, context, parentRunId: parent.runId, change: standalone ? change : change.slice(0, 38).replace(/-+$/, '') + '-' + digest, directory: pipelineStateDirectory(context) };
36
+ }
37
+ function copyActiveChange(context, source, target, allocation) {
38
+ const from = artifactPath(context.artifactRoot, 'openspec/changes/' + source);
39
+ if (!existsSync(from))
40
+ return; // A cut before planning has no authored artifacts yet.
41
+ const to = artifactPath(context.artifactRoot, 'openspec/changes/' + target);
42
+ if (existsSync(to))
43
+ throw new EngineError('run_exists', 'Fork refuses to replace an existing change');
44
+ allocation.reserve(to);
45
+ let bytes = 0, files = 0;
46
+ const copy = (relative) => {
47
+ const directory = relative ? artifactPath(from, relative) : from;
48
+ mkdirSync(relative ? artifactPath(to, relative) : to, { recursive: true, mode: 0o700 });
49
+ for (const entry of readdirSync(directory, { withFileTypes: true })) {
50
+ const child = relative ? relative + '/' + entry.name : entry.name;
51
+ if (entry.isSymbolicLink())
52
+ throw new EngineError('artifact_scope_mismatch', 'Fork rejects symlinked change artifacts');
53
+ if (entry.isDirectory())
54
+ copy(child);
55
+ else if (entry.isFile()) {
56
+ const content = readFileSync(artifactPath(from, child));
57
+ bytes += content.length;
58
+ files++;
59
+ if (bytes > 2 * 1024 * 1024 || files > 200)
60
+ throw new EngineError('output_limit', 'Fork artifacts exceed their copy limit');
61
+ writeFileSync(artifactPath(to, child), content, { flag: 'wx', mode: 0o600 });
62
+ }
63
+ else
64
+ throw new EngineError('artifact_scope_mismatch', 'Fork requires ordinary change artifacts');
65
+ }
66
+ };
67
+ copy('');
68
+ }
69
+ /** A fork publishes an independently leased historical cut; the source is opened read-only. */
70
+ export async function forkRun(directory, options) {
71
+ const state = patchState(options.state);
72
+ if (options.requestId !== undefined && !/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(options.requestId))
73
+ throw new EngineError('invalid_arguments', 'Fork requires a safe request ID');
74
+ if (!options.fromNodePath || (options.visit !== undefined && (!Number.isSafeInteger(options.visit) || options.visit < 1)))
75
+ throw new EngineError('invalid_arguments', 'Fork requires a node path and an optional positive visit');
76
+ const source = await RunDatabase.open(path.join(directory, 'run.sqlite'), { readOnly: true });
77
+ let destination, runtime;
78
+ let ledger, targetRoot, published = false;
79
+ let allocation, ownsAllocation = false;
80
+ try {
81
+ const sourceRun = source.sqlite.prepare('SELECT * FROM runs').get();
82
+ if (!sourceRun)
83
+ throw new EngineError('run_not_found', 'Source run does not exist');
84
+ if (!sameRuntimeIdentity(JSON.parse(String(sourceRun.runtime_identity_json)), coreRuntimeIdentity()))
85
+ throw new EngineError('resume_incompatible', 'Fork requires the original retained Core runtime');
86
+ const request = JSON.parse(String(sourceRun.request_json)), definition = JSON.parse(String(sourceRun.definition_json));
87
+ const context = validatePipelineContext({ ...request.context, runId: options.runId });
88
+ if (context.runId === request.context.runId)
89
+ throw new EngineError('invalid_arguments', 'Fork requires a different run ID');
90
+ targetRoot = pipelineStateDirectory(context);
91
+ const requestDigest = contentDigest({ sourceRunId: request.context.runId, runId: options.runId, fromNodePath: options.fromNodePath, scopeId: options.scopeId ?? null, visit: options.visit ?? null, state });
92
+ allocation = await ForkAllocation.open(targetRoot, context.artifactRoot, options.requestId, requestDigest);
93
+ if (existsSync(path.join(targetRoot, 'agent-workflow/run.sqlite'))) {
94
+ if (!options.requestId)
95
+ throw new EngineError('run_exists', 'Fork refuses to replace an existing run directory');
96
+ const publishedChild = await RunDatabase.open(path.join(targetRoot, 'agent-workflow/run.sqlite'), { readOnly: true });
97
+ try {
98
+ const row = publishedChild.get('piece_state', { run_id: context.runId, scope_id: 'root', node_path: '', key: 'control:fork-receipt' });
99
+ const receipt = row ? JSON.parse(String(row.value_json)) : null;
100
+ if (!receipt || receipt.requestId !== options.requestId || receipt.requestDigest !== requestDigest || receipt.result?.runId !== context.runId || receipt.result?.forkOf !== request.context.runId)
101
+ throw new EngineError('run_exists', 'Fork request does not match the published child');
102
+ return receipt.result;
103
+ }
104
+ finally {
105
+ publishedChild.close();
106
+ }
107
+ }
108
+ allocation.recover();
109
+ ownsAllocation = true;
110
+ if (existsSync(targetRoot))
111
+ throw new EngineError('run_exists', 'Fork refuses to replace an existing run directory');
112
+ const matches = source.sqlite.prepare('SELECT * FROM visits WHERE run_id=? AND node_path=? ORDER BY global_transition').all(sourceRun.run_id, options.fromNodePath)
113
+ .filter(row => (options.scopeId === undefined || row.scope_id === options.scopeId) && (options.visit === undefined || Number(row.local_visit) === options.visit));
114
+ if (matches.length !== 1)
115
+ throw new EngineError('fork_ambiguous', 'Fork must identify exactly one visit; include scopeId and visit when needed');
116
+ const from = matches[0], cut = Number(from.before_revision);
117
+ const checkpointRows = source.sqlite.prepare('SELECT thread_id,checkpoint_ns,checkpoint_id FROM checkpoints WHERE thread_id=? AND checkpoint_id=?').all(sourceRun.checkpoint_thread_id, from.checkpoint_id);
118
+ if (checkpointRows.length !== 1)
119
+ throw new EngineError('fork_checkpoint_missing', 'The target visit does not identify exactly one public checkpoint');
120
+ const targetConfig = { configurable: { thread_id: checkpointRows[0].thread_id, checkpoint_ns: checkpointRows[0].checkpoint_ns, checkpoint_id: checkpointRows[0].checkpoint_id } };
121
+ allocation.reserve(targetRoot);
122
+ await ensurePrivateDirectory(targetRoot);
123
+ const staging = path.join(targetRoot, '.fork-' + randomUUID()), finalDirectory = path.join(targetRoot, 'agent-workflow');
124
+ destination = await RunDatabase.open(path.join(staging, 'run.sqlite'), { create: true });
125
+ source.forkAt(destination, { revision: cut, runId: context.runId });
126
+ const change = request.change ? request.change.slice(0, 42).replace(/-+$/, '') + '-fork-' + contentDigest(context.runId).slice(0, 12) : undefined;
127
+ const forkRequest = { ...request, context, ...(change ? { change } : {}) };
128
+ const sourceBindings = destination.sqlite.prepare("SELECT * FROM piece_state WHERE key='binding:implementation'").all();
129
+ const genericChange = !!change && sourceBindings.length === 0 && definition.journal === 'ledger-only';
130
+ if (genericChange)
131
+ copyActiveChange(context, request.change, change, allocation);
132
+ const restored = [];
133
+ for (const row of sourceBindings) {
134
+ // A completed implementation is inherited evidence. Rebinding its journal would
135
+ // create a new candidate and repeat verified work even when the workspace is unchanged.
136
+ const completed = destination.sqlite.prepare('SELECT 1 FROM attempts WHERE visit_id=? AND terminal_digest IS NOT NULL').get(row.visit_id);
137
+ const binding = JSON.parse(String(row.value_json));
138
+ if (completed && !binding.shared)
139
+ continue;
140
+ const childScope = binding.shared ? binding.scopeId : binding.scopeId + '/' + String(row.visit_id);
141
+ const results = destination.sqlite.prepare('SELECT a.output_json FROM attempts a JOIN visits v ON a.visit_id=v.visit_id WHERE a.scope_id=? AND a.output_json IS NOT NULL ORDER BY v.global_transition DESC,a.attempt DESC').all(childScope);
142
+ const snapshot = results.map(result => JSON.parse(String(result.output_json)).childUpdate?.journal).find(value => value !== undefined);
143
+ const lastOperation = results.map(result => JSON.parse(String(result.output_json))).find(result => result.childUpdate?.operationState !== undefined);
144
+ if (binding.shared && lastOperation?.completion?.ok)
145
+ continue;
146
+ const target = rebind(binding, context, change);
147
+ const changeDirectory = path.join(target.context.artifactRoot, 'openspec', 'changes', target.change);
148
+ if ((target.directory !== targetRoot && existsSync(target.directory)) || existsSync(changeDirectory))
149
+ throw new EngineError('run_exists', 'Fork refuses to replace an existing implementation journal or change');
150
+ if (snapshot) {
151
+ if (target.directory !== targetRoot)
152
+ allocation.reserve(target.directory);
153
+ await ensurePrivateDirectory(target.directory);
154
+ forkImplementationJournal(snapshot, binding, target, () => allocation.reserve(changeDirectory));
155
+ }
156
+ restored.push({ source: binding, target, row });
157
+ }
158
+ const lease = new RunLease(destination, context.runId), token = lease.acquire(randomUUID());
159
+ ledger = new RunLedger(destination, token, { maxTransitions: definition.maxTransitions, failFast: definition.policies?.failFast });
160
+ destination.transaction('fork-rebound', () => {
161
+ lease.assert(token);
162
+ destination.put('runs', { ...ledger.run(), request_json: canonicalJson(forkRequest), status: 'running', completion_json: null,
163
+ ...(Object.keys(state).length || restored.length || genericChange ? { verified_json: null } : {}) });
164
+ for (const binding of restored)
165
+ destination.put('piece_state', { ...binding.row, value_json: canonicalJson(binding.target) });
166
+ destination.put('piece_state', { run_id: context.runId, scope_id: 'root', node_path: '', key: 'lineage:fork', value_json: canonicalJson({
167
+ sourceRunId: request.context.runId, sourceContext: request.context, sourceBindings: sourceBindings.map(row => JSON.parse(String(row.value_json)))
168
+ }), updated_at: new Date().toISOString() });
169
+ // Fork explicitly requests a new execution of the uncommitted cut. Reads and
170
+ // coordinators are safe to restart even when their original retry allowance
171
+ // was one. Repository-writing child tasks still require explicit recovery.
172
+ for (const attempt of destination.sqlite.prepare("SELECT a.* FROM attempts a JOIN visits v ON a.visit_id=v.visit_id WHERE a.status IN ('running','interrupted') AND (v.effect='read' OR v.kind IN ('component','map','implementation'))").all())
173
+ destination.put('attempts', { ...attempt, recovery_authorized: 1 });
174
+ });
175
+ const admitted = { request: forkRequest, definition, roles: configuredRoles(request.config), budget: ledgerBudgetFromRow(ledger), registry: options.registry ?? createExecutorRegistry(request.config) };
176
+ runtime = await composeDefinitionRuntime(destination, ledger, admitted, new EngineEventStream(cursor => ledger.events(cursor), () => { }), new AbortController().signal);
177
+ const heads = new Map();
178
+ for await (const tuple of runtime.saver.list({ configurable: { thread_id: sourceRun.checkpoint_thread_id } })) {
179
+ const namespace = String(tuple.config.configurable?.checkpoint_ns ?? '');
180
+ if (!heads.has(namespace))
181
+ heads.set(namespace, tuple);
182
+ }
183
+ for (const binding of restored) {
184
+ if (!existsSync(path.join(binding.target.directory, 'state.json')) || binding.source.shared)
185
+ continue;
186
+ const scope = binding.source.scopeId + '/' + String(binding.row.visit_id);
187
+ const matching = [...heads.values()].filter(tuple => tuple.checkpoint.channel_values.$scope?.id === scope && '$next' in tuple.checkpoint.channel_values);
188
+ if (matching.length !== 1)
189
+ throw new EngineError('fork_checkpoint_missing', 'Implementation journal has no unique child checkpoint at the selected cut');
190
+ const tuple = matching[0], projection = projectImplementationFork(binding.target);
191
+ const last = destination.sqlite.prepare('SELECT a.node_path FROM attempts a JOIN visits v ON a.visit_id=v.visit_id WHERE a.scope_id=? AND a.terminal_digest IS NOT NULL ORDER BY v.global_transition DESC,a.attempt DESC LIMIT 1').get(scope);
192
+ const writer = last && String(last.node_path).startsWith(binding.source.nodePath + '/') ? String(last.node_path).slice(binding.source.nodePath.length + 1) : undefined;
193
+ if (!writer)
194
+ throw new EngineError('fork_checkpoint_missing', 'Implementation checkpoint has no unambiguous public previous node');
195
+ await runtime.graph.updateState(tuple.config, projection.update, writer);
196
+ }
197
+ if (Object.keys(state).length || genericChange) {
198
+ const tuple = await runtime.saver.getTuple(targetConfig);
199
+ if (!tuple)
200
+ throw new EngineError('fork_checkpoint_missing', 'Target checkpoint is not present in the historical cut');
201
+ const values = tuple.checkpoint.channel_values;
202
+ if (genericChange)
203
+ state.$vars = { ...(values.$outer?.$vars ?? values.$vars), ...state.$vars, changeId: change };
204
+ const outer = values.$outer;
205
+ const update = outer ? { $outer: { ...outer,
206
+ ...(state.$vars ? { $vars: { ...outer.$vars, ...state.$vars } } : {}),
207
+ ...(state.$outputs ? { $outputs: { ...outer.$outputs, ...state.$outputs } } : {}), $verified: null } }
208
+ : { ...state, $verified: null };
209
+ await runtime.graph.updateState(targetConfig, update);
210
+ }
211
+ destination.checkIntegrity();
212
+ const result = { type: 'runtime-forked', runId: context.runId, forkOf: request.context.runId, fromNodePath: options.fromNodePath,
213
+ scopeId: String(from.scope_id), visit: Number(from.local_visit), directory: finalDirectory, context, revision: 0 };
214
+ destination.transaction('fork-control-receipt', () => {
215
+ lease.assert(token);
216
+ result.revision = destination.transactionRevision;
217
+ destination.put('piece_state', { run_id: context.runId, scope_id: 'root', node_path: '', key: 'control:fork-receipt',
218
+ value_json: canonicalJson({ requestId: options.requestId ?? null, requestDigest, result }), updated_at: new Date().toISOString() });
219
+ });
220
+ runtime.close();
221
+ runtime = undefined;
222
+ lease.release(token);
223
+ ledger = undefined;
224
+ destination.sqlite.exec('PRAGMA wal_checkpoint(TRUNCATE)');
225
+ destination.close();
226
+ destination = undefined;
227
+ await ensurePrivateDirectory(finalDirectory);
228
+ if (existsSync(path.join(finalDirectory, 'run.sqlite')))
229
+ throw new EngineError('run_exists', 'Fork database was concurrently created');
230
+ renameSync(path.join(staging, 'run.sqlite'), path.join(finalDirectory, 'run.sqlite'));
231
+ published = true;
232
+ rmSync(staging, { recursive: true, force: true });
233
+ return result;
234
+ }
235
+ finally {
236
+ runtime?.close();
237
+ if (ledger)
238
+ ledger.lease.release(ledger.token);
239
+ destination?.close();
240
+ source.close();
241
+ try {
242
+ if (!published && ownsAllocation)
243
+ allocation?.cleanup();
244
+ }
245
+ finally {
246
+ allocation?.close();
247
+ }
248
+ }
249
+ }
250
+ function ledgerBudgetFromRow(ledger) {
251
+ const row = ledger.db.get('budget', { run_id: ledger.runId });
252
+ return { ...(row.max_cost_usd === null ? {} : { maxCostUsd: Number(row.max_cost_usd) }), ...(row.max_tokens === null ? {} : { maxTokens: Number(row.max_tokens) }), ...(row.max_duration_ms === null ? {} : { maxDurationMs: Number(row.max_duration_ms) }) };
253
+ }
@@ -0,0 +1,48 @@
1
+ import type { WorkflowDefinition } from './definition-types.js';
2
+ /** Public topology contains no prompts, command arguments, credentials or state. */
3
+ export declare function describeDefinition(runId: string, definition: WorkflowDefinition): {
4
+ type: "runtime-graph";
5
+ engineVersion: number;
6
+ runId: string;
7
+ definitionHash: string;
8
+ workflowId: string;
9
+ nodes: {
10
+ path: string;
11
+ kind: "join" | "map" | "verify" | "shell" | "end" | "approval" | "question" | "prompt" | "gate" | "implementation" | "role-turn" | "decider" | "condition" | "assign" | "openspec-validate" | "openspec-archive" | "component" | "implementation-step" | "artifact-contract";
12
+ label: string;
13
+ }[];
14
+ edges: {
15
+ from: string;
16
+ label: string;
17
+ to: string | null;
18
+ }[];
19
+ mermaid: string;
20
+ graph: {
21
+ components?: {
22
+ [k: string]: {
23
+ entry: string;
24
+ nodes: {
25
+ component?: string | undefined;
26
+ id: string;
27
+ kind: "join" | "map" | "verify" | "shell" | "end" | "approval" | "question" | "prompt" | "gate" | "implementation" | "role-turn" | "decider" | "condition" | "assign" | "openspec-validate" | "openspec-archive" | "component" | "implementation-step" | "artifact-contract";
28
+ label: string;
29
+ ends: {
30
+ [x: string]: string | null;
31
+ };
32
+ }[];
33
+ };
34
+ } | undefined;
35
+ entry: string;
36
+ nodes: {
37
+ component?: string | undefined;
38
+ id: string;
39
+ kind: "join" | "map" | "verify" | "shell" | "end" | "approval" | "question" | "prompt" | "gate" | "implementation" | "role-turn" | "decider" | "condition" | "assign" | "openspec-validate" | "openspec-archive" | "component" | "implementation-step" | "artifact-contract";
40
+ label: string;
41
+ ends: {
42
+ [x: string]: string | null;
43
+ };
44
+ }[];
45
+ id: string;
46
+ version: string;
47
+ };
48
+ };
@@ -0,0 +1,16 @@
1
+ /** Public topology contains no prompts, command arguments, credentials or state. */
2
+ export function describeDefinition(runId, definition) {
3
+ const describe = (body) => ({ entry: body.entry,
4
+ nodes: Object.entries(body.nodes).map(([id, node]) => ({ id, kind: node.kind, label: node.label ?? id, ends: { ...node.ends },
5
+ ...(node.kind === 'component' ? { component: String(node.params.ref) } : node.kind === 'map' ? { component: String(node.params.body) } : {}) })) });
6
+ const body = describe(definition);
7
+ const edges = body.nodes.flatMap(node => Object.entries(node.ends).map(([label, to]) => ({ from: node.id, label, to })));
8
+ const ids = new Map(body.nodes.map((node, index) => [node.id, 'n' + index]));
9
+ const quote = (value) => value.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;').replaceAll('"', '#34;').replace(/[\r\n]/g, ' ');
10
+ const mermaid = ['flowchart TD', ...body.nodes.map(node => ` ${ids.get(node.id)}["${quote(node.label)}"]`),
11
+ ...edges.filter(edge => edge.to !== null).map(edge => ` ${ids.get(edge.from)} -->|"${quote(edge.label)}"| ${ids.get(edge.to)}`)].join('\n');
12
+ return { type: 'runtime-graph', engineVersion: 2, runId, definitionHash: definition.version, workflowId: definition.id,
13
+ nodes: body.nodes.map(node => ({ path: node.id, kind: node.kind, label: node.label })), edges, mermaid,
14
+ graph: { id: definition.id, version: definition.version, ...body,
15
+ ...(definition.components ? { components: Object.fromEntries(Object.entries(definition.components).map(([id, component]) => [id, describe(component)])) } : {}) } };
16
+ }
@@ -0,0 +1,214 @@
1
+ import { EphemeralValue } from '@langchain/langgraph/channels';
2
+ import { type CoreNodeId } from '../graph/state.js';
3
+ import type { NodeResult } from '../workflow-types.js';
4
+ import { type AttemptFrame, type CoreDefinitionState, type ExecutionScope, type NodeExecutionPort, type PieceExecutionContext, type TerminalCommit } from './contracts.js';
5
+ import type { ImplementationAdapter } from './pieces/implementation.js';
6
+ declare function implementationSchema(): import("@langchain/langgraph").AnnotationRoot<{
7
+ $scope: import("@langchain/langgraph").BaseChannel<ExecutionScope, ExecutionScope | import("@langchain/langgraph").OverwriteValue<ExecutionScope>, unknown>;
8
+ $outer: import("@langchain/langgraph").BaseChannel<CoreDefinitionState, CoreDefinitionState | import("@langchain/langgraph").OverwriteValue<CoreDefinitionState>, unknown>;
9
+ $next: import("@langchain/langgraph").BaseChannel<CoreNodeId | null, CoreNodeId | import("@langchain/langgraph").OverwriteValue<CoreNodeId | null> | null, unknown>;
10
+ $nodeResult: import("@langchain/langgraph").BaseChannel<NodeResult<import("@langchain/langgraph").StateType<{
11
+ plan: import("@langchain/langgraph").BaseChannel<import("../../pipeline/pipeline-state.js").VerificationCommand[], import("../../pipeline/pipeline-state.js").VerificationCommand[] | import("@langchain/langgraph").OverwriteValue<import("../../pipeline/pipeline-state.js").VerificationCommand[]>, unknown>;
12
+ unverifiedRepositories: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
13
+ architecture: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchitectureRecord | null, import("../graph/state.js").ArchitectureRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchitectureRecord | null> | null, unknown>;
14
+ development: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").DeveloperRecord | null, import("../graph/state.js").DeveloperRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").DeveloperRecord | null> | null, unknown>;
15
+ verifyResult: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").VerificationRecord | null, import("../graph/state.js").VerificationRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").VerificationRecord | null> | null, unknown>;
16
+ review: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ReviewRecord | null, import("../graph/state.js").ReviewRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ReviewRecord | null> | null, unknown>;
17
+ answers: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
18
+ deepenPasses: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
19
+ archived: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchiveRecord | null, import("../graph/state.js").ArchiveRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchiveRecord | null> | null, unknown>;
20
+ verifyHistory: import("@langchain/langgraph").BaseChannel<import("../graph/convergence.js").VerifyOutcome[], import("../graph/convergence.js").VerifyOutcome[] | import("@langchain/langgraph").OverwriteValue<import("../graph/convergence.js").VerifyOutcome[]>, unknown>;
21
+ }>> | null, NodeResult<import("@langchain/langgraph").StateType<{
22
+ plan: import("@langchain/langgraph").BaseChannel<import("../../pipeline/pipeline-state.js").VerificationCommand[], import("../../pipeline/pipeline-state.js").VerificationCommand[] | import("@langchain/langgraph").OverwriteValue<import("../../pipeline/pipeline-state.js").VerificationCommand[]>, unknown>;
23
+ unverifiedRepositories: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
24
+ architecture: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchitectureRecord | null, import("../graph/state.js").ArchitectureRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchitectureRecord | null> | null, unknown>;
25
+ development: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").DeveloperRecord | null, import("../graph/state.js").DeveloperRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").DeveloperRecord | null> | null, unknown>;
26
+ verifyResult: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").VerificationRecord | null, import("../graph/state.js").VerificationRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").VerificationRecord | null> | null, unknown>;
27
+ review: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ReviewRecord | null, import("../graph/state.js").ReviewRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ReviewRecord | null> | null, unknown>;
28
+ answers: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
29
+ deepenPasses: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
30
+ archived: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchiveRecord | null, import("../graph/state.js").ArchiveRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchiveRecord | null> | null, unknown>;
31
+ verifyHistory: import("@langchain/langgraph").BaseChannel<import("../graph/convergence.js").VerifyOutcome[], import("../graph/convergence.js").VerifyOutcome[] | import("@langchain/langgraph").OverwriteValue<import("../graph/convergence.js").VerifyOutcome[]>, unknown>;
32
+ }>> | import("@langchain/langgraph").OverwriteValue<NodeResult<import("@langchain/langgraph").StateType<{
33
+ plan: import("@langchain/langgraph").BaseChannel<import("../../pipeline/pipeline-state.js").VerificationCommand[], import("../../pipeline/pipeline-state.js").VerificationCommand[] | import("@langchain/langgraph").OverwriteValue<import("../../pipeline/pipeline-state.js").VerificationCommand[]>, unknown>;
34
+ unverifiedRepositories: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
35
+ architecture: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchitectureRecord | null, import("../graph/state.js").ArchitectureRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchitectureRecord | null> | null, unknown>;
36
+ development: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").DeveloperRecord | null, import("../graph/state.js").DeveloperRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").DeveloperRecord | null> | null, unknown>;
37
+ verifyResult: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").VerificationRecord | null, import("../graph/state.js").VerificationRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").VerificationRecord | null> | null, unknown>;
38
+ review: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ReviewRecord | null, import("../graph/state.js").ReviewRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ReviewRecord | null> | null, unknown>;
39
+ answers: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
40
+ deepenPasses: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
41
+ archived: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchiveRecord | null, import("../graph/state.js").ArchiveRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchiveRecord | null> | null, unknown>;
42
+ verifyHistory: import("@langchain/langgraph").BaseChannel<import("../graph/convergence.js").VerifyOutcome[], import("../graph/convergence.js").VerifyOutcome[] | import("@langchain/langgraph").OverwriteValue<import("../graph/convergence.js").VerifyOutcome[]>, unknown>;
43
+ }>> | null> | null, unknown>;
44
+ $commit: EphemeralValue<TerminalCommit>;
45
+ plan: import("@langchain/langgraph").BaseChannel<import("../../pipeline/pipeline-state.js").VerificationCommand[], import("../../pipeline/pipeline-state.js").VerificationCommand[] | import("@langchain/langgraph").OverwriteValue<import("../../pipeline/pipeline-state.js").VerificationCommand[]>, unknown>;
46
+ unverifiedRepositories: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
47
+ architecture: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchitectureRecord | null, import("../graph/state.js").ArchitectureRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchitectureRecord | null> | null, unknown>;
48
+ development: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").DeveloperRecord | null, import("../graph/state.js").DeveloperRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").DeveloperRecord | null> | null, unknown>;
49
+ verifyResult: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").VerificationRecord | null, import("../graph/state.js").VerificationRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").VerificationRecord | null> | null, unknown>;
50
+ review: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ReviewRecord | null, import("../graph/state.js").ReviewRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ReviewRecord | null> | null, unknown>;
51
+ answers: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
52
+ deepenPasses: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
53
+ archived: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchiveRecord | null, import("../graph/state.js").ArchiveRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchiveRecord | null> | null, unknown>;
54
+ verifyHistory: import("@langchain/langgraph").BaseChannel<import("../graph/convergence.js").VerifyOutcome[], import("../graph/convergence.js").VerifyOutcome[] | import("@langchain/langgraph").OverwriteValue<import("../graph/convergence.js").VerifyOutcome[]>, unknown>;
55
+ }>;
56
+ type ImplementationSchema = ReturnType<typeof implementationSchema>;
57
+ export type ImplementationGraphState = ImplementationSchema['State'];
58
+ export declare function implementationInput(parent: CoreDefinitionState, frame: AttemptFrame): Pick<ImplementationGraphState, '$outer' | '$scope'>;
59
+ export declare function implementationContext(state: CoreDefinitionState, frame: AttemptFrame, signal: AbortSignal, execution: NodeExecutionPort): PieceExecutionContext;
60
+ /** Six actual Core nodes use the parent's saver; every state update shares its terminal commit. */
61
+ export declare function compileImplementationGraph(adapter: ImplementationAdapter, execution: NodeExecutionPort): import("@langchain/langgraph").CompiledStateGraph<{
62
+ $scope: ExecutionScope;
63
+ $outer: CoreDefinitionState;
64
+ $next: CoreNodeId | null;
65
+ $nodeResult: NodeResult<import("@langchain/langgraph").StateType<{
66
+ plan: import("@langchain/langgraph").BaseChannel<import("../../pipeline/pipeline-state.js").VerificationCommand[], import("../../pipeline/pipeline-state.js").VerificationCommand[] | import("@langchain/langgraph").OverwriteValue<import("../../pipeline/pipeline-state.js").VerificationCommand[]>, unknown>;
67
+ unverifiedRepositories: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
68
+ architecture: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchitectureRecord | null, import("../graph/state.js").ArchitectureRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchitectureRecord | null> | null, unknown>;
69
+ development: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").DeveloperRecord | null, import("../graph/state.js").DeveloperRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").DeveloperRecord | null> | null, unknown>;
70
+ verifyResult: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").VerificationRecord | null, import("../graph/state.js").VerificationRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").VerificationRecord | null> | null, unknown>;
71
+ review: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ReviewRecord | null, import("../graph/state.js").ReviewRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ReviewRecord | null> | null, unknown>;
72
+ answers: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
73
+ deepenPasses: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
74
+ archived: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchiveRecord | null, import("../graph/state.js").ArchiveRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchiveRecord | null> | null, unknown>;
75
+ verifyHistory: import("@langchain/langgraph").BaseChannel<import("../graph/convergence.js").VerifyOutcome[], import("../graph/convergence.js").VerifyOutcome[] | import("@langchain/langgraph").OverwriteValue<import("../graph/convergence.js").VerifyOutcome[]>, unknown>;
76
+ }>> | null;
77
+ $commit: TerminalCommit;
78
+ plan: import("../../pipeline/pipeline-state.js").VerificationCommand[];
79
+ unverifiedRepositories: string[];
80
+ architecture: import("../graph/state.js").ArchitectureRecord | null;
81
+ development: import("../graph/state.js").DeveloperRecord | null;
82
+ verifyResult: import("../graph/state.js").VerificationRecord | null;
83
+ review: import("../graph/state.js").ReviewRecord | null;
84
+ answers: string[];
85
+ deepenPasses: number;
86
+ archived: import("../graph/state.js").ArchiveRecord | null;
87
+ verifyHistory: import("../graph/convergence.js").VerifyOutcome[];
88
+ }, {
89
+ $scope?: ExecutionScope | undefined;
90
+ $outer?: CoreDefinitionState | undefined;
91
+ $next?: CoreNodeId | null | undefined;
92
+ $nodeResult?: NodeResult<import("@langchain/langgraph").StateType<{
93
+ plan: import("@langchain/langgraph").BaseChannel<import("../../pipeline/pipeline-state.js").VerificationCommand[], import("../../pipeline/pipeline-state.js").VerificationCommand[] | import("@langchain/langgraph").OverwriteValue<import("../../pipeline/pipeline-state.js").VerificationCommand[]>, unknown>;
94
+ unverifiedRepositories: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
95
+ architecture: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchitectureRecord | null, import("../graph/state.js").ArchitectureRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchitectureRecord | null> | null, unknown>;
96
+ development: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").DeveloperRecord | null, import("../graph/state.js").DeveloperRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").DeveloperRecord | null> | null, unknown>;
97
+ verifyResult: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").VerificationRecord | null, import("../graph/state.js").VerificationRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").VerificationRecord | null> | null, unknown>;
98
+ review: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ReviewRecord | null, import("../graph/state.js").ReviewRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ReviewRecord | null> | null, unknown>;
99
+ answers: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
100
+ deepenPasses: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
101
+ archived: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchiveRecord | null, import("../graph/state.js").ArchiveRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchiveRecord | null> | null, unknown>;
102
+ verifyHistory: import("@langchain/langgraph").BaseChannel<import("../graph/convergence.js").VerifyOutcome[], import("../graph/convergence.js").VerifyOutcome[] | import("@langchain/langgraph").OverwriteValue<import("../graph/convergence.js").VerifyOutcome[]>, unknown>;
103
+ }>> | null | undefined;
104
+ $commit?: TerminalCommit | undefined;
105
+ plan?: import("../../pipeline/pipeline-state.js").VerificationCommand[] | undefined;
106
+ unverifiedRepositories?: string[] | undefined;
107
+ architecture?: import("../graph/state.js").ArchitectureRecord | null | undefined;
108
+ development?: import("../graph/state.js").DeveloperRecord | null | undefined;
109
+ verifyResult?: import("../graph/state.js").VerificationRecord | null | undefined;
110
+ review?: import("../graph/state.js").ReviewRecord | null | undefined;
111
+ answers?: string[] | undefined;
112
+ deepenPasses?: number | undefined;
113
+ archived?: import("../graph/state.js").ArchiveRecord | null | undefined;
114
+ verifyHistory?: import("../graph/convergence.js").VerifyOutcome[] | undefined;
115
+ }, string, {
116
+ $scope: import("@langchain/langgraph").BaseChannel<ExecutionScope, ExecutionScope | import("@langchain/langgraph").OverwriteValue<ExecutionScope>, unknown>;
117
+ $outer: import("@langchain/langgraph").BaseChannel<CoreDefinitionState, CoreDefinitionState | import("@langchain/langgraph").OverwriteValue<CoreDefinitionState>, unknown>;
118
+ $next: import("@langchain/langgraph").BaseChannel<CoreNodeId | null, CoreNodeId | import("@langchain/langgraph").OverwriteValue<CoreNodeId | null> | null, unknown>;
119
+ $nodeResult: import("@langchain/langgraph").BaseChannel<NodeResult<import("@langchain/langgraph").StateType<{
120
+ plan: import("@langchain/langgraph").BaseChannel<import("../../pipeline/pipeline-state.js").VerificationCommand[], import("../../pipeline/pipeline-state.js").VerificationCommand[] | import("@langchain/langgraph").OverwriteValue<import("../../pipeline/pipeline-state.js").VerificationCommand[]>, unknown>;
121
+ unverifiedRepositories: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
122
+ architecture: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchitectureRecord | null, import("../graph/state.js").ArchitectureRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchitectureRecord | null> | null, unknown>;
123
+ development: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").DeveloperRecord | null, import("../graph/state.js").DeveloperRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").DeveloperRecord | null> | null, unknown>;
124
+ verifyResult: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").VerificationRecord | null, import("../graph/state.js").VerificationRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").VerificationRecord | null> | null, unknown>;
125
+ review: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ReviewRecord | null, import("../graph/state.js").ReviewRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ReviewRecord | null> | null, unknown>;
126
+ answers: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
127
+ deepenPasses: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
128
+ archived: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchiveRecord | null, import("../graph/state.js").ArchiveRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchiveRecord | null> | null, unknown>;
129
+ verifyHistory: import("@langchain/langgraph").BaseChannel<import("../graph/convergence.js").VerifyOutcome[], import("../graph/convergence.js").VerifyOutcome[] | import("@langchain/langgraph").OverwriteValue<import("../graph/convergence.js").VerifyOutcome[]>, unknown>;
130
+ }>> | null, NodeResult<import("@langchain/langgraph").StateType<{
131
+ plan: import("@langchain/langgraph").BaseChannel<import("../../pipeline/pipeline-state.js").VerificationCommand[], import("../../pipeline/pipeline-state.js").VerificationCommand[] | import("@langchain/langgraph").OverwriteValue<import("../../pipeline/pipeline-state.js").VerificationCommand[]>, unknown>;
132
+ unverifiedRepositories: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
133
+ architecture: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchitectureRecord | null, import("../graph/state.js").ArchitectureRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchitectureRecord | null> | null, unknown>;
134
+ development: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").DeveloperRecord | null, import("../graph/state.js").DeveloperRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").DeveloperRecord | null> | null, unknown>;
135
+ verifyResult: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").VerificationRecord | null, import("../graph/state.js").VerificationRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").VerificationRecord | null> | null, unknown>;
136
+ review: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ReviewRecord | null, import("../graph/state.js").ReviewRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ReviewRecord | null> | null, unknown>;
137
+ answers: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
138
+ deepenPasses: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
139
+ archived: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchiveRecord | null, import("../graph/state.js").ArchiveRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchiveRecord | null> | null, unknown>;
140
+ verifyHistory: import("@langchain/langgraph").BaseChannel<import("../graph/convergence.js").VerifyOutcome[], import("../graph/convergence.js").VerifyOutcome[] | import("@langchain/langgraph").OverwriteValue<import("../graph/convergence.js").VerifyOutcome[]>, unknown>;
141
+ }>> | import("@langchain/langgraph").OverwriteValue<NodeResult<import("@langchain/langgraph").StateType<{
142
+ plan: import("@langchain/langgraph").BaseChannel<import("../../pipeline/pipeline-state.js").VerificationCommand[], import("../../pipeline/pipeline-state.js").VerificationCommand[] | import("@langchain/langgraph").OverwriteValue<import("../../pipeline/pipeline-state.js").VerificationCommand[]>, unknown>;
143
+ unverifiedRepositories: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
144
+ architecture: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchitectureRecord | null, import("../graph/state.js").ArchitectureRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchitectureRecord | null> | null, unknown>;
145
+ development: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").DeveloperRecord | null, import("../graph/state.js").DeveloperRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").DeveloperRecord | null> | null, unknown>;
146
+ verifyResult: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").VerificationRecord | null, import("../graph/state.js").VerificationRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").VerificationRecord | null> | null, unknown>;
147
+ review: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ReviewRecord | null, import("../graph/state.js").ReviewRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ReviewRecord | null> | null, unknown>;
148
+ answers: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
149
+ deepenPasses: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
150
+ archived: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchiveRecord | null, import("../graph/state.js").ArchiveRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchiveRecord | null> | null, unknown>;
151
+ verifyHistory: import("@langchain/langgraph").BaseChannel<import("../graph/convergence.js").VerifyOutcome[], import("../graph/convergence.js").VerifyOutcome[] | import("@langchain/langgraph").OverwriteValue<import("../graph/convergence.js").VerifyOutcome[]>, unknown>;
152
+ }>> | null> | null, unknown>;
153
+ $commit: EphemeralValue<TerminalCommit>;
154
+ plan: import("@langchain/langgraph").BaseChannel<import("../../pipeline/pipeline-state.js").VerificationCommand[], import("../../pipeline/pipeline-state.js").VerificationCommand[] | import("@langchain/langgraph").OverwriteValue<import("../../pipeline/pipeline-state.js").VerificationCommand[]>, unknown>;
155
+ unverifiedRepositories: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
156
+ architecture: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchitectureRecord | null, import("../graph/state.js").ArchitectureRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchitectureRecord | null> | null, unknown>;
157
+ development: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").DeveloperRecord | null, import("../graph/state.js").DeveloperRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").DeveloperRecord | null> | null, unknown>;
158
+ verifyResult: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").VerificationRecord | null, import("../graph/state.js").VerificationRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").VerificationRecord | null> | null, unknown>;
159
+ review: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ReviewRecord | null, import("../graph/state.js").ReviewRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ReviewRecord | null> | null, unknown>;
160
+ answers: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
161
+ deepenPasses: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
162
+ archived: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchiveRecord | null, import("../graph/state.js").ArchiveRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchiveRecord | null> | null, unknown>;
163
+ verifyHistory: import("@langchain/langgraph").BaseChannel<import("../graph/convergence.js").VerifyOutcome[], import("../graph/convergence.js").VerifyOutcome[] | import("@langchain/langgraph").OverwriteValue<import("../graph/convergence.js").VerifyOutcome[]>, unknown>;
164
+ }, {
165
+ $scope: import("@langchain/langgraph").BaseChannel<ExecutionScope, ExecutionScope | import("@langchain/langgraph").OverwriteValue<ExecutionScope>, unknown>;
166
+ $outer: import("@langchain/langgraph").BaseChannel<CoreDefinitionState, CoreDefinitionState | import("@langchain/langgraph").OverwriteValue<CoreDefinitionState>, unknown>;
167
+ $next: import("@langchain/langgraph").BaseChannel<CoreNodeId | null, CoreNodeId | import("@langchain/langgraph").OverwriteValue<CoreNodeId | null> | null, unknown>;
168
+ $nodeResult: import("@langchain/langgraph").BaseChannel<NodeResult<import("@langchain/langgraph").StateType<{
169
+ plan: import("@langchain/langgraph").BaseChannel<import("../../pipeline/pipeline-state.js").VerificationCommand[], import("../../pipeline/pipeline-state.js").VerificationCommand[] | import("@langchain/langgraph").OverwriteValue<import("../../pipeline/pipeline-state.js").VerificationCommand[]>, unknown>;
170
+ unverifiedRepositories: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
171
+ architecture: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchitectureRecord | null, import("../graph/state.js").ArchitectureRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchitectureRecord | null> | null, unknown>;
172
+ development: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").DeveloperRecord | null, import("../graph/state.js").DeveloperRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").DeveloperRecord | null> | null, unknown>;
173
+ verifyResult: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").VerificationRecord | null, import("../graph/state.js").VerificationRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").VerificationRecord | null> | null, unknown>;
174
+ review: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ReviewRecord | null, import("../graph/state.js").ReviewRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ReviewRecord | null> | null, unknown>;
175
+ answers: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
176
+ deepenPasses: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
177
+ archived: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchiveRecord | null, import("../graph/state.js").ArchiveRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchiveRecord | null> | null, unknown>;
178
+ verifyHistory: import("@langchain/langgraph").BaseChannel<import("../graph/convergence.js").VerifyOutcome[], import("../graph/convergence.js").VerifyOutcome[] | import("@langchain/langgraph").OverwriteValue<import("../graph/convergence.js").VerifyOutcome[]>, unknown>;
179
+ }>> | null, NodeResult<import("@langchain/langgraph").StateType<{
180
+ plan: import("@langchain/langgraph").BaseChannel<import("../../pipeline/pipeline-state.js").VerificationCommand[], import("../../pipeline/pipeline-state.js").VerificationCommand[] | import("@langchain/langgraph").OverwriteValue<import("../../pipeline/pipeline-state.js").VerificationCommand[]>, unknown>;
181
+ unverifiedRepositories: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
182
+ architecture: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchitectureRecord | null, import("../graph/state.js").ArchitectureRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchitectureRecord | null> | null, unknown>;
183
+ development: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").DeveloperRecord | null, import("../graph/state.js").DeveloperRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").DeveloperRecord | null> | null, unknown>;
184
+ verifyResult: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").VerificationRecord | null, import("../graph/state.js").VerificationRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").VerificationRecord | null> | null, unknown>;
185
+ review: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ReviewRecord | null, import("../graph/state.js").ReviewRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ReviewRecord | null> | null, unknown>;
186
+ answers: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
187
+ deepenPasses: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
188
+ archived: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchiveRecord | null, import("../graph/state.js").ArchiveRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchiveRecord | null> | null, unknown>;
189
+ verifyHistory: import("@langchain/langgraph").BaseChannel<import("../graph/convergence.js").VerifyOutcome[], import("../graph/convergence.js").VerifyOutcome[] | import("@langchain/langgraph").OverwriteValue<import("../graph/convergence.js").VerifyOutcome[]>, unknown>;
190
+ }>> | import("@langchain/langgraph").OverwriteValue<NodeResult<import("@langchain/langgraph").StateType<{
191
+ plan: import("@langchain/langgraph").BaseChannel<import("../../pipeline/pipeline-state.js").VerificationCommand[], import("../../pipeline/pipeline-state.js").VerificationCommand[] | import("@langchain/langgraph").OverwriteValue<import("../../pipeline/pipeline-state.js").VerificationCommand[]>, unknown>;
192
+ unverifiedRepositories: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
193
+ architecture: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchitectureRecord | null, import("../graph/state.js").ArchitectureRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchitectureRecord | null> | null, unknown>;
194
+ development: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").DeveloperRecord | null, import("../graph/state.js").DeveloperRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").DeveloperRecord | null> | null, unknown>;
195
+ verifyResult: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").VerificationRecord | null, import("../graph/state.js").VerificationRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").VerificationRecord | null> | null, unknown>;
196
+ review: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ReviewRecord | null, import("../graph/state.js").ReviewRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ReviewRecord | null> | null, unknown>;
197
+ answers: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
198
+ deepenPasses: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
199
+ archived: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchiveRecord | null, import("../graph/state.js").ArchiveRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchiveRecord | null> | null, unknown>;
200
+ verifyHistory: import("@langchain/langgraph").BaseChannel<import("../graph/convergence.js").VerifyOutcome[], import("../graph/convergence.js").VerifyOutcome[] | import("@langchain/langgraph").OverwriteValue<import("../graph/convergence.js").VerifyOutcome[]>, unknown>;
201
+ }>> | null> | null, unknown>;
202
+ $commit: EphemeralValue<TerminalCommit>;
203
+ plan: import("@langchain/langgraph").BaseChannel<import("../../pipeline/pipeline-state.js").VerificationCommand[], import("../../pipeline/pipeline-state.js").VerificationCommand[] | import("@langchain/langgraph").OverwriteValue<import("../../pipeline/pipeline-state.js").VerificationCommand[]>, unknown>;
204
+ unverifiedRepositories: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
205
+ architecture: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchitectureRecord | null, import("../graph/state.js").ArchitectureRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchitectureRecord | null> | null, unknown>;
206
+ development: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").DeveloperRecord | null, import("../graph/state.js").DeveloperRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").DeveloperRecord | null> | null, unknown>;
207
+ verifyResult: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").VerificationRecord | null, import("../graph/state.js").VerificationRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").VerificationRecord | null> | null, unknown>;
208
+ review: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ReviewRecord | null, import("../graph/state.js").ReviewRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ReviewRecord | null> | null, unknown>;
209
+ answers: import("@langchain/langgraph").BaseChannel<string[], string[] | import("@langchain/langgraph").OverwriteValue<string[]>, unknown>;
210
+ deepenPasses: import("@langchain/langgraph").BaseChannel<number, number | import("@langchain/langgraph").OverwriteValue<number>, unknown>;
211
+ archived: import("@langchain/langgraph").BaseChannel<import("../graph/state.js").ArchiveRecord | null, import("../graph/state.js").ArchiveRecord | import("@langchain/langgraph").OverwriteValue<import("../graph/state.js").ArchiveRecord | null> | null, unknown>;
212
+ verifyHistory: import("@langchain/langgraph").BaseChannel<import("../graph/convergence.js").VerifyOutcome[], import("../graph/convergence.js").VerifyOutcome[] | import("@langchain/langgraph").OverwriteValue<import("../graph/convergence.js").VerifyOutcome[]>, unknown>;
213
+ }, import("@langchain/langgraph").StateDefinition, unknown, unknown, unknown, []>;
214
+ export {};