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.
- package/README.md +3 -3
- package/dist/agent-runtime/capabilities.js +3 -1
- package/dist/agent-runtime/change-scope.js +2 -0
- package/dist/agent-runtime/cli-executor.d.ts +3 -0
- package/dist/agent-runtime/cli-executor.js +52 -14
- package/dist/agent-runtime/cli-process.js +6 -2
- package/dist/agent-runtime/cli.d.ts +15 -0
- package/dist/agent-runtime/cli.js +43 -9
- package/dist/agent-runtime/compact/chat-client.js +2 -1
- package/dist/agent-runtime/config.d.ts +4 -1
- package/dist/agent-runtime/config.js +41 -3
- package/dist/agent-runtime/core-host.d.ts +9 -3
- package/dist/agent-runtime/core-host.js +21 -18
- package/dist/agent-runtime/efficiency-summary.d.ts +4 -1
- package/dist/agent-runtime/efficiency-summary.js +30 -27
- package/dist/agent-runtime/efficiency-types.d.ts +4 -4
- package/dist/agent-runtime/efficiency.d.ts +1 -1
- package/dist/agent-runtime/efficiency.js +7 -6
- package/dist/agent-runtime/engine/__fixtures__/implementation-component.json +90 -0
- package/dist/agent-runtime/engine/__fixtures__/implementation-fixture.d.ts +11 -0
- package/dist/agent-runtime/engine/__fixtures__/implementation-fixture.js +60 -0
- package/dist/agent-runtime/engine/__fixtures__/implementation.json +43 -0
- package/dist/agent-runtime/engine/budget.d.ts +9 -0
- package/dist/agent-runtime/engine/budget.js +33 -0
- package/dist/agent-runtime/engine/canonical-json.d.ts +9 -0
- package/dist/agent-runtime/engine/canonical-json.js +162 -0
- package/dist/agent-runtime/engine/checkpoint/database.d.ts +67 -0
- package/dist/agent-runtime/engine/checkpoint/database.js +304 -0
- package/dist/agent-runtime/engine/checkpoint/lease.d.ts +17 -0
- package/dist/agent-runtime/engine/checkpoint/lease.js +82 -0
- package/dist/agent-runtime/engine/checkpoint/ledger.d.ts +133 -0
- package/dist/agent-runtime/engine/checkpoint/ledger.js +510 -0
- package/dist/agent-runtime/engine/checkpoint/saver.d.ts +25 -0
- package/dist/agent-runtime/engine/checkpoint/saver.js +146 -0
- package/dist/agent-runtime/engine/cli.d.ts +10 -0
- package/dist/agent-runtime/engine/cli.js +172 -0
- package/dist/agent-runtime/engine/compiler.d.ts +23 -0
- package/dist/agent-runtime/engine/compiler.js +262 -0
- package/dist/agent-runtime/engine/composition.d.ts +16 -0
- package/dist/agent-runtime/engine/composition.js +28 -0
- package/dist/agent-runtime/engine/concurrency.d.ts +14 -0
- package/dist/agent-runtime/engine/concurrency.js +55 -0
- package/dist/agent-runtime/engine/contracts.d.ts +273 -0
- package/dist/agent-runtime/engine/contracts.js +11 -0
- package/dist/agent-runtime/engine/definition-schema.d.ts +250 -0
- package/dist/agent-runtime/engine/definition-schema.js +315 -0
- package/dist/agent-runtime/engine/definition-types.d.ts +84 -0
- package/dist/agent-runtime/engine/definition-types.js +3 -0
- package/dist/agent-runtime/engine/definition-validator.d.ts +7 -0
- package/dist/agent-runtime/engine/definition-validator.js +191 -0
- package/dist/agent-runtime/engine/efficiency-summary.d.ts +62 -0
- package/dist/agent-runtime/engine/efficiency-summary.js +31 -0
- package/dist/agent-runtime/engine/events.d.ts +19 -0
- package/dist/agent-runtime/engine/events.js +88 -0
- package/dist/agent-runtime/engine/execution.d.ts +29 -0
- package/dist/agent-runtime/engine/execution.js +121 -0
- package/dist/agent-runtime/engine/expressions.d.ts +11 -0
- package/dist/agent-runtime/engine/expressions.js +185 -0
- package/dist/agent-runtime/engine/fork.d.ts +28 -0
- package/dist/agent-runtime/engine/fork.js +253 -0
- package/dist/agent-runtime/engine/graph-description.d.ts +48 -0
- package/dist/agent-runtime/engine/graph-description.js +16 -0
- package/dist/agent-runtime/engine/implementation-compiler.d.ts +214 -0
- package/dist/agent-runtime/engine/implementation-compiler.js +91 -0
- package/dist/agent-runtime/engine/index.d.ts +14 -0
- package/dist/agent-runtime/engine/index.js +14 -0
- package/dist/agent-runtime/engine/invocation-context.d.ts +11 -0
- package/dist/agent-runtime/engine/invocation-context.js +130 -0
- package/dist/agent-runtime/engine/otel.d.ts +15 -0
- package/dist/agent-runtime/engine/otel.js +132 -0
- package/dist/agent-runtime/engine/output.d.ts +4 -0
- package/dist/agent-runtime/engine/output.js +73 -0
- package/dist/agent-runtime/engine/piece-dependencies.d.ts +54 -0
- package/dist/agent-runtime/engine/piece-dependencies.js +240 -0
- package/dist/agent-runtime/engine/piece-registry.d.ts +19 -0
- package/dist/agent-runtime/engine/piece-registry.js +62 -0
- package/dist/agent-runtime/engine/pieces/artifact-contract.d.ts +4 -0
- package/dist/agent-runtime/engine/pieces/artifact-contract.js +70 -0
- package/dist/agent-runtime/engine/pieces/assign.d.ts +4 -0
- package/dist/agent-runtime/engine/pieces/assign.js +35 -0
- package/dist/agent-runtime/engine/pieces/control.d.ts +5 -0
- package/dist/agent-runtime/engine/pieces/control.js +53 -0
- package/dist/agent-runtime/engine/pieces/decider.d.ts +5 -0
- package/dist/agent-runtime/engine/pieces/decider.js +70 -0
- package/dist/agent-runtime/engine/pieces/implementation-binding.d.ts +13 -0
- package/dist/agent-runtime/engine/pieces/implementation-binding.js +40 -0
- package/dist/agent-runtime/engine/pieces/implementation-journal.d.ts +25 -0
- package/dist/agent-runtime/engine/pieces/implementation-journal.js +192 -0
- package/dist/agent-runtime/engine/pieces/implementation-step.d.ts +5 -0
- package/dist/agent-runtime/engine/pieces/implementation-step.js +47 -0
- package/dist/agent-runtime/engine/pieces/implementation.d.ts +27 -0
- package/dist/agent-runtime/engine/pieces/implementation.js +177 -0
- package/dist/agent-runtime/engine/pieces/index.d.ts +7 -0
- package/dist/agent-runtime/engine/pieces/index.js +24 -0
- package/dist/agent-runtime/engine/pieces/openspec.d.ts +3 -0
- package/dist/agent-runtime/engine/pieces/openspec.js +75 -0
- package/dist/agent-runtime/engine/pieces/ports.d.ts +53 -0
- package/dist/agent-runtime/engine/pieces/ports.js +1 -0
- package/dist/agent-runtime/engine/pieces/project-memory.d.ts +3 -0
- package/dist/agent-runtime/engine/pieces/project-memory.js +13 -0
- package/dist/agent-runtime/engine/pieces/prompt.d.ts +5 -0
- package/dist/agent-runtime/engine/pieces/prompt.js +130 -0
- package/dist/agent-runtime/engine/pieces/role-turn.d.ts +7 -0
- package/dist/agent-runtime/engine/pieces/role-turn.js +73 -0
- package/dist/agent-runtime/engine/pieces/shared.d.ts +67 -0
- package/dist/agent-runtime/engine/pieces/shared.js +40 -0
- package/dist/agent-runtime/engine/pieces/shell.d.ts +6 -0
- package/dist/agent-runtime/engine/pieces/shell.js +47 -0
- package/dist/agent-runtime/engine/pieces/verify.d.ts +7 -0
- package/dist/agent-runtime/engine/pieces/verify.js +102 -0
- package/dist/agent-runtime/engine/preflight.d.ts +27 -0
- package/dist/agent-runtime/engine/preflight.js +54 -0
- package/dist/agent-runtime/engine/regex.d.ts +3 -0
- package/dist/agent-runtime/engine/regex.js +19 -0
- package/dist/agent-runtime/engine/run-status.d.ts +563 -0
- package/dist/agent-runtime/engine/run-status.js +61 -0
- package/dist/agent-runtime/engine/runs.d.ts +605 -0
- package/dist/agent-runtime/engine/runs.js +247 -0
- package/dist/agent-runtime/engine/state.d.ts +64 -0
- package/dist/agent-runtime/engine/state.js +98 -0
- package/dist/agent-runtime/engine/steering/inbox.d.ts +54 -0
- package/dist/agent-runtime/engine/steering/inbox.js +113 -0
- package/dist/agent-runtime/engine/storage/fork-allocation.d.ts +21 -0
- package/dist/agent-runtime/engine/storage/fork-allocation.js +143 -0
- package/dist/agent-runtime/engine/storage/private-path.d.ts +11 -0
- package/dist/agent-runtime/engine/storage/private-path.js +74 -0
- package/dist/agent-runtime/engine/store/sqlite-store.d.ts +26 -0
- package/dist/agent-runtime/engine/store/sqlite-store.js +227 -0
- package/dist/agent-runtime/evaluation-corpus.d.ts +125 -0
- package/dist/agent-runtime/evaluation-corpus.js +4 -0
- package/dist/agent-runtime/evaluation.d.ts +9 -3
- package/dist/agent-runtime/evaluation.js +50 -8
- package/dist/agent-runtime/executor-types.d.ts +53 -3
- package/dist/agent-runtime/executor-types.js +35 -2
- package/dist/agent-runtime/executors.js +2 -2
- package/dist/agent-runtime/graph/artifacts.d.ts +7 -0
- package/dist/agent-runtime/graph/artifacts.js +82 -9
- package/dist/agent-runtime/graph/nodes.d.ts +2 -0
- package/dist/agent-runtime/graph/nodes.js +2 -2
- package/dist/agent-runtime/graph/roles.d.ts +8 -0
- package/dist/agent-runtime/graph/roles.js +25 -17
- package/dist/agent-runtime/kimi-acp.js +6 -6
- package/dist/agent-runtime/openai-executor.js +17 -12
- package/dist/agent-runtime/openspec.d.ts +17 -2
- package/dist/agent-runtime/openspec.js +54 -20
- package/dist/agent-runtime/prompts.d.ts +4 -3
- package/dist/agent-runtime/prompts.js +27 -6
- package/dist/agent-runtime/recovery.d.ts +1 -1
- package/dist/agent-runtime/repository-context.js +1 -1
- package/dist/agent-runtime/role-routing.js +4 -2
- package/dist/agent-runtime/role-state.d.ts +5 -0
- package/dist/agent-runtime/verification-plan.d.ts +2 -0
- package/dist/agent-runtime/verification-plan.js +10 -0
- package/dist/agent-runtime/workflow-types.d.ts +2 -0
- package/dist/agent-runtime/workflow.d.ts +3 -1
- package/dist/agent-runtime/workflow.js +7 -3
- package/dist/agent-runtime/workspace-tools.d.ts +2 -2
- package/dist/agent-runtime/workspace-tools.js +6 -6
- package/dist/installer/cli.js +5 -0
- package/dist/installer/phases/scaffold.d.ts +2 -2
- package/dist/installer/phases/scaffold.js +3 -7
- package/dist/pipeline/pipeline-state.d.ts +38 -4
- package/dist/pipeline/pipeline-state.js +96 -21
- package/integration-contract.json +111 -19
- package/package.json +13 -6
- package/schemas/agent-runtime.schema.json +93 -1
- package/schemas/workflow-definition.schema.json +314 -0
- package/templates/kimi/specrails/run-skill.mjs +15 -1
- 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('&', '&').replaceAll('<', '<').replaceAll('>', '>').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 {};
|