specrails-core 5.2.3 → 5.3.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 -0
- package/bin/specrails-core.mjs +5 -0
- package/dist/agent-runtime/cli-executor.d.ts +34 -0
- package/dist/agent-runtime/cli-executor.js +335 -0
- package/dist/agent-runtime/cli-executor.js.map +1 -0
- package/dist/agent-runtime/cli-process.d.ts +32 -0
- package/dist/agent-runtime/cli-process.js +159 -0
- package/dist/agent-runtime/cli-process.js.map +1 -0
- package/dist/agent-runtime/cli.d.ts +38 -0
- package/dist/agent-runtime/cli.js +168 -0
- package/dist/agent-runtime/cli.js.map +1 -0
- package/dist/agent-runtime/config.d.ts +7 -0
- package/dist/agent-runtime/config.js +162 -0
- package/dist/agent-runtime/config.js.map +1 -0
- package/dist/agent-runtime/core-host.d.ts +33 -0
- package/dist/agent-runtime/core-host.js +97 -0
- package/dist/agent-runtime/core-host.js.map +1 -0
- package/dist/agent-runtime/durable-store.d.ts +22 -0
- package/dist/agent-runtime/durable-store.js +205 -0
- package/dist/agent-runtime/durable-store.js.map +1 -0
- package/dist/agent-runtime/executor-types.d.ts +92 -0
- package/dist/agent-runtime/executor-types.js +29 -0
- package/dist/agent-runtime/executor-types.js.map +1 -0
- package/dist/agent-runtime/executors.d.ts +22 -0
- package/dist/agent-runtime/executors.js +44 -0
- package/dist/agent-runtime/executors.js.map +1 -0
- package/dist/agent-runtime/gemini-policy.d.ts +8 -0
- package/dist/agent-runtime/gemini-policy.js +36 -0
- package/dist/agent-runtime/gemini-policy.js.map +1 -0
- package/dist/agent-runtime/graph/artifacts.d.ts +40 -0
- package/dist/agent-runtime/graph/artifacts.js +179 -0
- package/dist/agent-runtime/graph/artifacts.js.map +1 -0
- package/dist/agent-runtime/graph/nodes.d.ts +36 -0
- package/dist/agent-runtime/graph/nodes.js +274 -0
- package/dist/agent-runtime/graph/nodes.js.map +1 -0
- package/dist/agent-runtime/graph/review-policy.d.ts +18 -0
- package/dist/agent-runtime/graph/review-policy.js +32 -0
- package/dist/agent-runtime/graph/review-policy.js.map +1 -0
- package/dist/agent-runtime/graph/roles.d.ts +44 -0
- package/dist/agent-runtime/graph/roles.js +126 -0
- package/dist/agent-runtime/graph/roles.js.map +1 -0
- package/dist/agent-runtime/graph/state.d.ts +75 -0
- package/dist/agent-runtime/graph/state.js +23 -0
- package/dist/agent-runtime/graph/state.js.map +1 -0
- package/dist/agent-runtime/graph-checkpointer.d.ts +61 -0
- package/dist/agent-runtime/graph-checkpointer.js +137 -0
- package/dist/agent-runtime/graph-checkpointer.js.map +1 -0
- package/dist/agent-runtime/index.d.ts +14 -0
- package/dist/agent-runtime/index.js +15 -0
- package/dist/agent-runtime/index.js.map +1 -0
- package/dist/agent-runtime/kimi-acp.d.ts +7 -0
- package/dist/agent-runtime/kimi-acp.js +179 -0
- package/dist/agent-runtime/kimi-acp.js.map +1 -0
- package/dist/agent-runtime/openai-executor.d.ts +18 -0
- package/dist/agent-runtime/openai-executor.js +174 -0
- package/dist/agent-runtime/openai-executor.js.map +1 -0
- package/dist/agent-runtime/prompts.d.ts +40 -0
- package/dist/agent-runtime/prompts.js +291 -0
- package/dist/agent-runtime/prompts.js.map +1 -0
- package/dist/agent-runtime/workflow-types.d.ts +210 -0
- package/dist/agent-runtime/workflow-types.js +2 -0
- package/dist/agent-runtime/workflow-types.js.map +1 -0
- package/dist/agent-runtime/workflow.d.ts +17 -0
- package/dist/agent-runtime/workflow.js +609 -0
- package/dist/agent-runtime/workflow.js.map +1 -0
- package/dist/agent-runtime/workspace-tools.d.ts +25 -0
- package/dist/agent-runtime/workspace-tools.js +120 -0
- package/dist/agent-runtime/workspace-tools.js.map +1 -0
- package/dist/installer/cli.d.ts +35 -0
- package/dist/installer/cli.js +3 -0
- package/dist/installer/cli.js.map +1 -1
- package/dist/installer/commands/doctor.d.ts +27 -0
- package/dist/installer/commands/framework.d.ts +85 -0
- package/dist/installer/commands/init.d.ts +147 -0
- package/dist/installer/commands/update.d.ts +56 -0
- package/dist/installer/commands/v5-migration.d.ts +32 -0
- package/dist/installer/phases/framework-lifecycle.d.ts +53 -0
- package/dist/installer/phases/install-config.d.ts +64 -0
- package/dist/installer/phases/manifest.d.ts +45 -0
- package/dist/installer/phases/prereqs.d.ts +51 -0
- package/dist/installer/phases/provider-detect.d.ts +89 -0
- package/dist/installer/phases/scaffold.d.ts +211 -0
- package/dist/installer/runtime/kimi.d.ts +84 -0
- package/dist/installer/runtime/pipeline-state.d.ts +210 -0
- package/dist/installer/runtime/pipeline-state.js +46 -22
- package/dist/installer/runtime/pipeline-state.js.map +1 -1
- package/dist/installer/util/errors.d.ts +46 -0
- package/dist/installer/util/exec.d.ts +41 -0
- package/dist/installer/util/fs.d.ts +153 -0
- package/dist/installer/util/git.d.ts +44 -0
- package/dist/installer/util/install-transaction.d.ts +29 -0
- package/dist/installer/util/logger.d.ts +31 -0
- package/dist/installer/util/paths.d.ts +34 -0
- package/dist/installer/util/prompts.d.ts +23 -0
- package/dist/installer/util/registry.d.ts +174 -0
- package/dist/installer/util/template.d.ts +23 -0
- package/docs/README.md +1 -0
- package/docs/agent-runtime.md +268 -0
- package/integration-contract.json +79 -7
- package/package.json +16 -1
- package/schemas/agent-runtime.schema.json +55 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-process.js","sourceRoot":"","sources":["../../src/agent-runtime/cli-process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { WorkflowState } from './workflow-types.js';
|
|
2
|
+
/** The host-facing summary: phase status, pending interrupts and usage without accumulated outputs. */
|
|
3
|
+
export declare function compactState(state: WorkflowState | null): {
|
|
4
|
+
runId: string;
|
|
5
|
+
traceId: string;
|
|
6
|
+
status: import("./workflow-types.js").WorkflowStatus;
|
|
7
|
+
nextStep: string | null;
|
|
8
|
+
updatedAt: string;
|
|
9
|
+
error: string | undefined;
|
|
10
|
+
pendingApproval: {
|
|
11
|
+
stepId: string;
|
|
12
|
+
requestedAt: string;
|
|
13
|
+
grantedAt?: string;
|
|
14
|
+
reason?: string;
|
|
15
|
+
} | undefined;
|
|
16
|
+
pendingQuestion: {
|
|
17
|
+
stepId: string;
|
|
18
|
+
requestedAt: string;
|
|
19
|
+
question: string;
|
|
20
|
+
answeredAt?: string;
|
|
21
|
+
answer?: string;
|
|
22
|
+
} | undefined;
|
|
23
|
+
usage: {
|
|
24
|
+
costUsd: number | null;
|
|
25
|
+
inputTokens: number | null;
|
|
26
|
+
outputTokens: number | null;
|
|
27
|
+
knownCostUsd: number;
|
|
28
|
+
knownTokens: number;
|
|
29
|
+
durationMs: number;
|
|
30
|
+
};
|
|
31
|
+
steps: {
|
|
32
|
+
[k: string]: {
|
|
33
|
+
status: "pending" | "running" | "interrupted" | import("./workflow-types.js").StepStatus;
|
|
34
|
+
visits: number;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
} | null;
|
|
38
|
+
export declare function runRuntimeCommand(flags: Record<string, string | boolean>, positionals: string[], emit?: (value: unknown) => void): Promise<number>;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
4
|
+
import { parseArgs } from '../installer/cli.js';
|
|
5
|
+
import { inspectPipeline, pipelineStateDirectory, validatePipelineContext } from '../installer/runtime/pipeline-state.js';
|
|
6
|
+
import { validateRuntimeConfig } from './config.js';
|
|
7
|
+
import { CORE_PACKAGE_VERSION, RUNTIME_API_VERSION, runCoreWorkflow } from './core-host.js';
|
|
8
|
+
import { readWorkflowState } from './workflow.js';
|
|
9
|
+
function read(file) { return JSON.parse(readFileSync(file, 'utf8')); }
|
|
10
|
+
async function readStdin() {
|
|
11
|
+
const chunks = [];
|
|
12
|
+
let size = 0;
|
|
13
|
+
for await (const chunk of process.stdin) {
|
|
14
|
+
const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));
|
|
15
|
+
size += bytes.length;
|
|
16
|
+
if (size > 2 * 1024 * 1024)
|
|
17
|
+
throw new Error('Runtime configuration stdin exceeds 2 MiB');
|
|
18
|
+
chunks.push(bytes);
|
|
19
|
+
}
|
|
20
|
+
return JSON.parse(Buffer.concat(chunks).toString('utf8'));
|
|
21
|
+
}
|
|
22
|
+
/** The host-facing summary: phase status, pending interrupts and usage without accumulated outputs. */
|
|
23
|
+
export function compactState(state) {
|
|
24
|
+
if (!state)
|
|
25
|
+
return null;
|
|
26
|
+
return {
|
|
27
|
+
runId: state.runId, traceId: state.traceId, status: state.status, nextStep: state.nextStep, updatedAt: state.updatedAt,
|
|
28
|
+
error: state.error, pendingApproval: state.pendingApproval, pendingQuestion: state.pendingQuestion, usage: state.usage,
|
|
29
|
+
steps: Object.fromEntries(Object.entries(state.steps).map(([id, step]) => [id, { status: step.status, visits: step.visits }])),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function compactPipeline(pipeline) {
|
|
33
|
+
if (!pipeline)
|
|
34
|
+
return null;
|
|
35
|
+
const receipt = pipeline.verification.receipt;
|
|
36
|
+
return {
|
|
37
|
+
schemaVersion: pipeline.schemaVersion, runId: pipeline.runId, change: pipeline.change,
|
|
38
|
+
stateDir: pipeline.stateDir, resumePhase: pipeline.resumePhase, phases: pipeline.phases,
|
|
39
|
+
completion: pipeline.completion, acceptance: { valid: pipeline.acceptance.valid, status: pipeline.acceptance.status, reasons: pipeline.acceptance.reasons },
|
|
40
|
+
verification: {
|
|
41
|
+
...pipeline.verification,
|
|
42
|
+
receipt: receipt ? { ...receipt, commands: receipt.commands.map(command => ({ ...command, output: undefined })) } : undefined,
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function stringFlag(flags, key) {
|
|
47
|
+
const value = flags[key];
|
|
48
|
+
if (typeof value !== 'string' || !value)
|
|
49
|
+
throw new Error('Missing --' + key);
|
|
50
|
+
return value;
|
|
51
|
+
}
|
|
52
|
+
function optionalString(flags, key) {
|
|
53
|
+
const value = flags[key];
|
|
54
|
+
if (value === undefined)
|
|
55
|
+
return undefined;
|
|
56
|
+
if (typeof value !== 'string' || !value.trim())
|
|
57
|
+
throw new Error('--' + key + ' needs a nonempty value');
|
|
58
|
+
return value;
|
|
59
|
+
}
|
|
60
|
+
function list(flags, key) {
|
|
61
|
+
const value = flags[key];
|
|
62
|
+
if (value === undefined)
|
|
63
|
+
return undefined;
|
|
64
|
+
if (typeof value !== 'string' || !value.trim())
|
|
65
|
+
throw new Error('--' + key + ' needs comma-separated step IDs');
|
|
66
|
+
return value.split(',').map(item => item.trim());
|
|
67
|
+
}
|
|
68
|
+
function invocationUsage(state, priorCount) {
|
|
69
|
+
const attempts = state.history.slice(priorCount);
|
|
70
|
+
const sum = (key) => attempts.some(a => a.usage?.[key] == null)
|
|
71
|
+
? null : attempts.reduce((total, a) => total + (a.usage?.[key] ?? 0), 0);
|
|
72
|
+
return { costUsd: sum('costUsd'), inputTokens: sum('inputTokens'), outputTokens: sum('outputTokens') };
|
|
73
|
+
}
|
|
74
|
+
export async function runRuntimeCommand(flags, positionals, emit = value => process.stdout.write(JSON.stringify(value) + '\n')) {
|
|
75
|
+
const command = positionals[0] ?? 'help';
|
|
76
|
+
if (command === 'help') {
|
|
77
|
+
emit({ usage: [
|
|
78
|
+
'specrails-core runtime api',
|
|
79
|
+
'specrails-core runtime validate --config <json>',
|
|
80
|
+
'specrails-core runtime validate --stdin',
|
|
81
|
+
'specrails-core runtime run --context <json> --config <json> --change <kebab-case>',
|
|
82
|
+
'specrails-core runtime status --context <json> [--compact]',
|
|
83
|
+
'specrails-core runtime resume --context <json> [--approve archive] [--answer <text>] [--recover developer] [--invalidate verify]',
|
|
84
|
+
] });
|
|
85
|
+
return 0;
|
|
86
|
+
}
|
|
87
|
+
if (command === 'api') {
|
|
88
|
+
emit({ type: 'runtime-api', apiVersion: RUNTIME_API_VERSION, coreVersion: CORE_PACKAGE_VERSION });
|
|
89
|
+
return 0;
|
|
90
|
+
}
|
|
91
|
+
if (command === 'validate') {
|
|
92
|
+
if (flags.stdin !== undefined && flags.stdin !== true)
|
|
93
|
+
throw new Error('--stdin is a boolean flag');
|
|
94
|
+
if (flags.stdin && flags.config !== undefined)
|
|
95
|
+
throw new Error('Use --stdin or --config, not both');
|
|
96
|
+
validateRuntimeConfig(flags.stdin ? await readStdin() : read(stringFlag(flags, 'config')));
|
|
97
|
+
emit({ type: 'runtime-config-valid', schemaVersion: 1 });
|
|
98
|
+
return 0;
|
|
99
|
+
}
|
|
100
|
+
if (!['run', 'status', 'resume'].includes(command))
|
|
101
|
+
throw new Error('Unknown runtime operation: ' + command);
|
|
102
|
+
const context = validatePipelineContext(read(stringFlag(flags, 'context')));
|
|
103
|
+
const directory = path.join(pipelineStateDirectory(context), 'agent-workflow');
|
|
104
|
+
const previous = await readWorkflowState(directory, context.runId);
|
|
105
|
+
if (command === 'status') {
|
|
106
|
+
const pipeline = previous ? inspectPipeline(context) : null;
|
|
107
|
+
emit({ type: 'runtime-status', state: flags.compact ? compactState(previous) : previous, pipeline: flags.compact ? compactPipeline(pipeline) : pipeline });
|
|
108
|
+
return 0;
|
|
109
|
+
}
|
|
110
|
+
const requestFile = path.join(pipelineStateDirectory(context), 'agent-runtime-request.json');
|
|
111
|
+
let request;
|
|
112
|
+
if (command === 'resume') {
|
|
113
|
+
if (!previous)
|
|
114
|
+
throw new Error('No programmatic run exists for this context');
|
|
115
|
+
request = read(requestFile);
|
|
116
|
+
if (flags.config || flags.change)
|
|
117
|
+
throw new Error('Resume uses the frozen configuration and change; start a new run to change them');
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
if (flags.answer !== undefined || flags.approve !== undefined)
|
|
121
|
+
throw new Error('Answers and approvals apply to runtime resume');
|
|
122
|
+
request = { change: stringFlag(flags, 'change'), config: validateRuntimeConfig(read(stringFlag(flags, 'config'))) };
|
|
123
|
+
const serialized = JSON.stringify(request, null, 2) + '\n';
|
|
124
|
+
mkdirSync(path.dirname(requestFile), { recursive: true, mode: 0o700 });
|
|
125
|
+
try {
|
|
126
|
+
writeFileSync(requestFile, serialized, { flag: 'wx', mode: 0o600 });
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
if (error.code !== 'EEXIST')
|
|
130
|
+
throw error;
|
|
131
|
+
if (readFileSync(requestFile, 'utf8') !== serialized)
|
|
132
|
+
throw new Error('Run configuration changed; use a new run ID');
|
|
133
|
+
if (previous)
|
|
134
|
+
throw new Error('Run already exists; use runtime resume explicitly');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const controller = new AbortController();
|
|
138
|
+
const abort = () => controller.abort();
|
|
139
|
+
process.on('SIGINT', abort);
|
|
140
|
+
process.on('SIGTERM', abort);
|
|
141
|
+
try {
|
|
142
|
+
const state = await runCoreWorkflow({
|
|
143
|
+
context, change: request.change, config: request.config, resume: command === 'resume', signal: controller.signal,
|
|
144
|
+
approve: list(flags, 'approve'), answer: optionalString(flags, 'answer'), recoverInterrupted: list(flags, 'recover'), invalidate: list(flags, 'invalidate'),
|
|
145
|
+
onEvent: event => emit({ type: 'workflow-event', event }),
|
|
146
|
+
onSpan: span => emit({ type: 'span', span }),
|
|
147
|
+
onAgentEvent: (role, event) => emit({ type: 'agent-event', role, event }),
|
|
148
|
+
onVerificationOutput: text => emit({ type: 'verification-output', text }),
|
|
149
|
+
});
|
|
150
|
+
emit({ type: 'runtime-result', runId: state.runId, traceId: state.traceId, status: state.status, nextStep: state.nextStep, error: state.error, pendingApproval: state.pendingApproval, pendingQuestion: state.pendingQuestion, usage: state.usage, invocationUsage: invocationUsage(state, previous?.history.length ?? 0) });
|
|
151
|
+
return state.status === 'succeeded' ? 0 : state.status === 'paused' ? 2 : 1;
|
|
152
|
+
}
|
|
153
|
+
finally {
|
|
154
|
+
process.off('SIGINT', abort);
|
|
155
|
+
process.off('SIGTERM', abort);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (process.argv[1] && existsSync(process.argv[1]) && import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href) {
|
|
159
|
+
const { subcommand, flags, positionals } = parseArgs(process.argv.slice(2));
|
|
160
|
+
try {
|
|
161
|
+
process.exitCode = await runRuntimeCommand(flags, [subcommand ?? 'help', ...positionals]);
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
process.stdout.write(JSON.stringify({ type: 'runtime-result', status: 'failed', error: error instanceof Error ? error.message : String(error) }) + '\n');
|
|
165
|
+
process.exitCode = 1;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/agent-runtime/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { RuntimeConfig } from './executor-types.js';
|
|
2
|
+
export declare function validateRuntimeConfig(input: unknown, options?: {
|
|
3
|
+
registeredProviderIds?: string[];
|
|
4
|
+
}): RuntimeConfig;
|
|
5
|
+
export declare function loadRuntimeConfig(file: string, options?: {
|
|
6
|
+
registeredProviderIds?: string[];
|
|
7
|
+
}): RuntimeConfig;
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { DEFAULT_REVIEW_POLICY, REVIEW_ASPECTS } from './graph/review-policy.js';
|
|
3
|
+
const ROLES = ['architect', 'developer', 'reviewer'];
|
|
4
|
+
const ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;
|
|
5
|
+
function fail(field, why) { throw new Error(`Invalid runtime config ${field}: ${why}`); }
|
|
6
|
+
function object(value, field) {
|
|
7
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
8
|
+
fail(field, 'expected an object');
|
|
9
|
+
return value;
|
|
10
|
+
}
|
|
11
|
+
function keys(value, allowed, field) {
|
|
12
|
+
for (const key of Object.keys(value))
|
|
13
|
+
if (!allowed.includes(key))
|
|
14
|
+
fail(`${field}.${key}`, 'unknown field');
|
|
15
|
+
}
|
|
16
|
+
function string(value, field) {
|
|
17
|
+
if (typeof value !== 'string' || !value.trim() || value.includes('\0'))
|
|
18
|
+
fail(field, 'expected a nonempty string');
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
function identifier(value, field) {
|
|
22
|
+
const result = string(value, field);
|
|
23
|
+
if (!ID.test(result))
|
|
24
|
+
fail(field, 'expected a safe provider identifier');
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
function positive(value, field, integer = true) {
|
|
28
|
+
if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0 || (integer && !Number.isSafeInteger(value)))
|
|
29
|
+
fail(field, 'expected a positive finite number' + (integer ? ' (integer)' : ''));
|
|
30
|
+
return value;
|
|
31
|
+
}
|
|
32
|
+
/** Review thresholds may only tighten Core's own gate; the pipeline journal enforces the floor regardless of configuration. */
|
|
33
|
+
function score(value, field, floor) {
|
|
34
|
+
if (typeof value !== 'number' || !Number.isFinite(value) || value < 0 || value > 100)
|
|
35
|
+
fail(field, 'expected a number from 0 to 100');
|
|
36
|
+
if (value < floor)
|
|
37
|
+
fail(field, `must be at least ${floor}, Core's own review gate`);
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
export function validateRuntimeConfig(input, options = {}) {
|
|
41
|
+
const config = object(input, '$');
|
|
42
|
+
keys(config, ['schemaVersion', 'enabled', 'providers', 'agents', 'limits', 'verification', 'approvalBeforeArchive', 'review', 'architect'], '$');
|
|
43
|
+
if (config.schemaVersion !== 1)
|
|
44
|
+
fail('schemaVersion', 'expected 1');
|
|
45
|
+
if (typeof config.enabled !== 'boolean')
|
|
46
|
+
fail('enabled', 'expected boolean');
|
|
47
|
+
if (!Array.isArray(config.providers))
|
|
48
|
+
fail('providers', 'expected an array');
|
|
49
|
+
const providers = config.providers.map((item, i) => {
|
|
50
|
+
const field = `providers[${i}]`, provider = object(item, field);
|
|
51
|
+
const id = identifier(provider.id, `${field}.id`);
|
|
52
|
+
if (provider.kind === 'cli') {
|
|
53
|
+
keys(provider, ['id', 'kind', 'cli'], field);
|
|
54
|
+
if (!['claude', 'codex', 'gemini', 'kimi'].includes(String(provider.cli)))
|
|
55
|
+
fail(`${field}.cli`, 'unsupported CLI');
|
|
56
|
+
return { id, kind: 'cli', cli: provider.cli };
|
|
57
|
+
}
|
|
58
|
+
if (provider.kind !== 'openai-compatible')
|
|
59
|
+
fail(`${field}.kind`, 'unsupported executor kind');
|
|
60
|
+
keys(provider, ['id', 'kind', 'baseUrl', 'apiKeyEnv'], field);
|
|
61
|
+
const baseUrl = string(provider.baseUrl, `${field}.baseUrl`);
|
|
62
|
+
let url;
|
|
63
|
+
try {
|
|
64
|
+
url = new URL(baseUrl);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
fail(`${field}.baseUrl`, 'expected an absolute HTTP(S) URL');
|
|
68
|
+
}
|
|
69
|
+
if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password || url.search || url.hash)
|
|
70
|
+
fail(`${field}.baseUrl`, 'use HTTP(S) without credentials, query or fragment');
|
|
71
|
+
if (provider.apiKeyEnv !== undefined && (typeof provider.apiKeyEnv !== 'string' || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(provider.apiKeyEnv)))
|
|
72
|
+
fail(`${field}.apiKeyEnv`, 'expected an environment variable name, never a credential value');
|
|
73
|
+
return { id, kind: 'openai-compatible', baseUrl, ...(provider.apiKeyEnv === undefined ? {} : { apiKeyEnv: provider.apiKeyEnv }) };
|
|
74
|
+
});
|
|
75
|
+
if (new Set(providers.map(p => p.id)).size !== providers.length)
|
|
76
|
+
fail('providers', 'duplicate provider id');
|
|
77
|
+
const known = new Set([...providers.map(p => p.id), ...options.registeredProviderIds ?? []]);
|
|
78
|
+
const rawAgents = object(config.agents, 'agents');
|
|
79
|
+
keys(rawAgents, ROLES, 'agents');
|
|
80
|
+
const agents = Object.fromEntries(ROLES.map(role => {
|
|
81
|
+
const field = `agents.${role}`, agent = object(rawAgents[role], field);
|
|
82
|
+
keys(agent, ['provider', 'model', 'maxTurns'], field);
|
|
83
|
+
const provider = identifier(agent.provider, `${field}.provider`);
|
|
84
|
+
if (!known.has(provider))
|
|
85
|
+
fail(`${field}.provider`, `provider '${provider}' is not configured or registered`);
|
|
86
|
+
if (agent.model !== undefined) {
|
|
87
|
+
const model = string(agent.model, `${field}.model`);
|
|
88
|
+
if (model.length > 256 || /[\r\n]/.test(model) || model.startsWith('-'))
|
|
89
|
+
fail(`${field}.model`, 'invalid model identifier');
|
|
90
|
+
}
|
|
91
|
+
if (providers.find(p => p.id === provider)?.kind === 'openai-compatible' && agent.model === undefined)
|
|
92
|
+
fail(`${field}.model`, 'required for an OpenAI-compatible provider');
|
|
93
|
+
if (agent.maxTurns !== undefined)
|
|
94
|
+
positive(agent.maxTurns, `${field}.maxTurns`);
|
|
95
|
+
return [role, { provider, ...(agent.model === undefined ? {} : { model: agent.model }), ...(agent.maxTurns === undefined ? {} : { maxTurns: agent.maxTurns }) }];
|
|
96
|
+
}));
|
|
97
|
+
if (config.limits !== undefined) {
|
|
98
|
+
const limits = object(config.limits, 'limits');
|
|
99
|
+
keys(limits, ['maxAttempts', 'maxTokens', 'maxCostUsd', 'timeoutMs'], 'limits');
|
|
100
|
+
for (const [key, value] of Object.entries(limits))
|
|
101
|
+
positive(value, `limits.${key}`, key !== 'maxCostUsd');
|
|
102
|
+
}
|
|
103
|
+
if (!Array.isArray(config.verification))
|
|
104
|
+
fail('verification', 'expected an array of verification commands');
|
|
105
|
+
const verification = config.verification.map((item, i) => {
|
|
106
|
+
const field = `verification[${i}]`, command = object(item, field);
|
|
107
|
+
keys(command, ['repositoryId', 'command', 'args', 'cwd', 'env', 'timeoutMs'], field);
|
|
108
|
+
identifier(command.repositoryId, `${field}.repositoryId`);
|
|
109
|
+
string(command.command, `${field}.command`);
|
|
110
|
+
if (!Array.isArray(command.args) || !command.args.every(arg => typeof arg === 'string' && !arg.includes('\0')))
|
|
111
|
+
fail(`${field}.args`, 'expected a string array');
|
|
112
|
+
if (command.cwd !== undefined)
|
|
113
|
+
string(command.cwd, `${field}.cwd`);
|
|
114
|
+
if (command.timeoutMs !== undefined)
|
|
115
|
+
positive(command.timeoutMs, `${field}.timeoutMs`);
|
|
116
|
+
if (command.env !== undefined) {
|
|
117
|
+
const env = object(command.env, `${field}.env`);
|
|
118
|
+
for (const [key, value] of Object.entries(env)) {
|
|
119
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key) || typeof value !== 'string' || value.includes('\0'))
|
|
120
|
+
fail(`${field}.env`, 'expected environment names and string values');
|
|
121
|
+
if (/(?:token|secret|password|api_?key|credential)/i.test(key))
|
|
122
|
+
fail(`${field}.env.${key}`, 'credentials must be inherited from the process environment, never saved');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return structuredClone(command);
|
|
126
|
+
});
|
|
127
|
+
if (config.approvalBeforeArchive !== undefined && typeof config.approvalBeforeArchive !== 'boolean')
|
|
128
|
+
fail('approvalBeforeArchive', 'expected boolean');
|
|
129
|
+
let review;
|
|
130
|
+
if (config.review !== undefined) {
|
|
131
|
+
const raw = object(config.review, 'review');
|
|
132
|
+
keys(raw, ['minScore', 'aspects'], 'review');
|
|
133
|
+
review = {};
|
|
134
|
+
if (raw.minScore !== undefined)
|
|
135
|
+
review.minScore = score(raw.minScore, 'review.minScore', DEFAULT_REVIEW_POLICY.minScore);
|
|
136
|
+
if (raw.aspects !== undefined) {
|
|
137
|
+
const aspects = object(raw.aspects, 'review.aspects');
|
|
138
|
+
keys(aspects, [...REVIEW_ASPECTS], 'review.aspects');
|
|
139
|
+
review.aspects = Object.fromEntries(Object.entries(aspects).map(([name, value]) => [name, score(value, `review.aspects.${name}`, DEFAULT_REVIEW_POLICY.aspects[name])]));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
let architect;
|
|
143
|
+
if (config.architect !== undefined) {
|
|
144
|
+
const raw = object(config.architect, 'architect');
|
|
145
|
+
keys(raw, ['onLowConfidence'], 'architect');
|
|
146
|
+
architect = {};
|
|
147
|
+
if (raw.onLowConfidence !== undefined) {
|
|
148
|
+
if (raw.onLowConfidence !== 'ask' && raw.onLowConfidence !== 'proceed')
|
|
149
|
+
fail('architect.onLowConfidence', 'expected "ask" or "proceed"');
|
|
150
|
+
architect.onLowConfidence = raw.onLowConfidence;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return { schemaVersion: 1, enabled: config.enabled, providers, agents, verification,
|
|
154
|
+
...(config.limits === undefined ? {} : { limits: { ...config.limits } }),
|
|
155
|
+
...(config.approvalBeforeArchive === undefined ? {} : { approvalBeforeArchive: config.approvalBeforeArchive }),
|
|
156
|
+
...(review === undefined ? {} : { review }),
|
|
157
|
+
...(architect === undefined ? {} : { architect }), };
|
|
158
|
+
}
|
|
159
|
+
export function loadRuntimeConfig(file, options) {
|
|
160
|
+
return validateRuntimeConfig(JSON.parse(readFileSync(file, 'utf8')), options);
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/agent-runtime/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type PipelineContext } from '../installer/runtime/pipeline-state.js';
|
|
2
|
+
import { type ExecutorRegistry } from './executors.js';
|
|
3
|
+
import type { AgentEvent, AgentRole, RuntimeConfig } from './executor-types.js';
|
|
4
|
+
import { parseAgentObject } from './graph/artifacts.js';
|
|
5
|
+
import type { WorkflowEvent, WorkflowSpan, WorkflowState } from './workflow-types.js';
|
|
6
|
+
export declare const RUNTIME_API_VERSION = 1;
|
|
7
|
+
export declare const CORE_WORKFLOW_VERSION = "3";
|
|
8
|
+
export declare const CORE_PACKAGE_VERSION: string;
|
|
9
|
+
export { parseAgentObject };
|
|
10
|
+
export interface CoreWorkflowOptions {
|
|
11
|
+
context: PipelineContext | unknown;
|
|
12
|
+
change: string;
|
|
13
|
+
config: RuntimeConfig | unknown;
|
|
14
|
+
registry?: ExecutorRegistry;
|
|
15
|
+
signal?: AbortSignal;
|
|
16
|
+
resume?: boolean;
|
|
17
|
+
approve?: string[];
|
|
18
|
+
/** Answer to the architect's pending question; resumes the paused run. */
|
|
19
|
+
answer?: string;
|
|
20
|
+
recoverInterrupted?: string[];
|
|
21
|
+
invalidate?: string[];
|
|
22
|
+
onEvent?: (event: WorkflowEvent) => void | Promise<void>;
|
|
23
|
+
onSpan?: (span: WorkflowSpan) => void | Promise<void>;
|
|
24
|
+
onAgentEvent?: (role: AgentRole, event: AgentEvent) => void;
|
|
25
|
+
onVerificationOutput?: (text: string) => void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Runs the Core implementation graph: architect → developer → verify → reviewer → archive,
|
|
29
|
+
* with bounded corrections routed back to the developer, an autonomous investigation pass
|
|
30
|
+
* before a low-confidence design asks the requester, real verification receipts, acceptance
|
|
31
|
+
* evidence bound to the exact candidate, and an optional approval before archive.
|
|
32
|
+
*/
|
|
33
|
+
export declare function runCoreWorkflow(options: CoreWorkflowOptions): Promise<WorkflowState>;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { initializePipeline, inspectPipeline, pipelineStateDirectory, validatePipelineContext, validateVerificationRequest, } from '../installer/runtime/pipeline-state.js';
|
|
4
|
+
import { validateRuntimeConfig } from './config.js';
|
|
5
|
+
import { createExecutorRegistry } from './executors.js';
|
|
6
|
+
import { archive, child, journal, parseAgentObject, SLUG } from './graph/artifacts.js';
|
|
7
|
+
import { coreNodes } from './graph/nodes.js';
|
|
8
|
+
import { resolveReviewPolicy } from './graph/review-policy.js';
|
|
9
|
+
import { createRoleInvoker } from './graph/roles.js';
|
|
10
|
+
import { CORE_NODE_ORDER, CoreState } from './graph/state.js';
|
|
11
|
+
import { ROLE_INSTRUCTIONS_VERSION } from './prompts.js';
|
|
12
|
+
import { readWorkflowState, runWorkflow } from './workflow.js';
|
|
13
|
+
export const RUNTIME_API_VERSION = 1;
|
|
14
|
+
export const CORE_WORKFLOW_VERSION = '3';
|
|
15
|
+
export const CORE_PACKAGE_VERSION = JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf8')).version;
|
|
16
|
+
export { parseAgentObject };
|
|
17
|
+
/**
|
|
18
|
+
* Runs the Core implementation graph: architect → developer → verify → reviewer → archive,
|
|
19
|
+
* with bounded corrections routed back to the developer, an autonomous investigation pass
|
|
20
|
+
* before a low-confidence design asks the requester, real verification receipts, acceptance
|
|
21
|
+
* evidence bound to the exact candidate, and an optional approval before archive.
|
|
22
|
+
*/
|
|
23
|
+
export async function runCoreWorkflow(options) {
|
|
24
|
+
const context = validatePipelineContext(options.context);
|
|
25
|
+
const config = validateRuntimeConfig(options.config, { registeredProviderIds: options.registry?.ids() });
|
|
26
|
+
if (!config.enabled)
|
|
27
|
+
throw new Error('Programmatic agent runtime is disabled');
|
|
28
|
+
if (context.ownership.git !== 'host')
|
|
29
|
+
throw new Error('Programmatic runtime requires host-owned delivery; Core shipping is not implemented by this workflow');
|
|
30
|
+
if (!SLUG.test(options.change) || options.change.length > 100)
|
|
31
|
+
throw new Error('Invalid workflow change name');
|
|
32
|
+
if (!context.specs.length)
|
|
33
|
+
throw new Error('Programmatic implementation requires a frozen spec or goal');
|
|
34
|
+
// Configured commands are validated against the frozen scope up front; coverage
|
|
35
|
+
// is completed by the architect (or left explicitly unverified) at run time.
|
|
36
|
+
if (config.verification.length)
|
|
37
|
+
validateVerificationRequest(context, { kind: 'scoped', commands: config.verification });
|
|
38
|
+
const registry = options.registry ?? createExecutorRegistry(config);
|
|
39
|
+
for (const selected of Object.values(config.agents))
|
|
40
|
+
registry.validateLimits(selected.provider, config.limits ?? {});
|
|
41
|
+
const state = initializePipeline(context, options.change);
|
|
42
|
+
const directory = path.join(pipelineStateDirectory(context), 'agent-workflow');
|
|
43
|
+
const previous = await readWorkflowState(directory, context.runId);
|
|
44
|
+
if (!previous && existsSync(path.join(context.artifactRoot, 'openspec/changes', options.change))) {
|
|
45
|
+
throw new Error('Change already exists without a programmatic checkpoint; use a new change name');
|
|
46
|
+
}
|
|
47
|
+
if (state.phases.archive.status === 'done') {
|
|
48
|
+
const checked = inspectPipeline(context);
|
|
49
|
+
if (!checked.verification.valid || (checked.resumePhase && !['ship', 'ci'].includes(checked.resumePhase))) {
|
|
50
|
+
throw new Error('Archived run evidence changed; start a new run for the changed candidate or environment');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const attempts = config.limits?.maxAttempts ?? 3;
|
|
54
|
+
const note = (role, text) => { try {
|
|
55
|
+
options.onAgentEvent?.(role, { kind: 'text', text });
|
|
56
|
+
}
|
|
57
|
+
catch { /* Observer cannot replay agent effects. */ } };
|
|
58
|
+
const invoke = createRoleInvoker({ context, config, registry, onAgentEvent: options.onAgentEvent });
|
|
59
|
+
const nodes = coreNodes({ context, config, change: options.change, attempts, policy: resolveReviewPolicy(config), invoke, note, onVerificationOutput: options.onVerificationOutput });
|
|
60
|
+
return runWorkflow({
|
|
61
|
+
directory, runId: context.runId,
|
|
62
|
+
input: JSON.parse(JSON.stringify({ context, config, change: options.change, coreVersion: CORE_PACKAGE_VERSION, instructionsVersion: ROLE_INSTRUCTIONS_VERSION })),
|
|
63
|
+
resume: options.resume, signal: options.signal, approve: options.approve, answer: options.answer, recoverInterrupted: options.recoverInterrupted, invalidate: options.invalidate,
|
|
64
|
+
budget: { maxCostUsd: config.limits?.maxCostUsd, maxTokens: config.limits?.maxTokens, maxDurationMs: config.limits?.timeoutMs },
|
|
65
|
+
onEvent: options.onEvent, onSpan: options.onSpan,
|
|
66
|
+
validateCompleted: async (stepId, _record, checkpoint) => {
|
|
67
|
+
// The engine invokes this only after acquiring its run lease and accepting
|
|
68
|
+
// an explicit interrupted-write recovery. A crash after the archive rename
|
|
69
|
+
// leaves Core's active artifact path temporarily absent. Reconcile that
|
|
70
|
+
// one deterministic operation before checking earlier phase fingerprints;
|
|
71
|
+
// transitionPipeline still verifies the saved exact-candidate approval.
|
|
72
|
+
if (stepId === 'architect' && checkpoint.nextStep === 'archive'
|
|
73
|
+
&& checkpoint.steps.archive?.status === 'interrupted'
|
|
74
|
+
&& options.recoverInterrupted?.includes('archive')
|
|
75
|
+
&& journal(context).phases.archive.status === 'running'
|
|
76
|
+
&& !existsSync(child(context.artifactRoot, 'openspec/changes/' + options.change))) {
|
|
77
|
+
archive(context, options.change);
|
|
78
|
+
}
|
|
79
|
+
const inspection = inspectPipeline(context);
|
|
80
|
+
if (stepId === 'architect')
|
|
81
|
+
return inspection.phases.architect.status === 'done' && inspection.resumePhase !== 'architect';
|
|
82
|
+
if (stepId === 'verify')
|
|
83
|
+
return inspection.verification.valid;
|
|
84
|
+
if (stepId === 'reviewer')
|
|
85
|
+
return inspection.phases.reviewer.status === 'done' && inspection.verification.valid && !['architect', 'developer', 'reviewer'].includes(inspection.resumePhase ?? '');
|
|
86
|
+
if (stepId === 'archive')
|
|
87
|
+
return inspection.phases.archive.status === 'done';
|
|
88
|
+
return true;
|
|
89
|
+
},
|
|
90
|
+
workflow: {
|
|
91
|
+
id: 'specrails-implementation', version: CORE_WORKFLOW_VERSION, schema: CoreState, entry: 'architect',
|
|
92
|
+
maxTransitions: attempts * 3 + 3,
|
|
93
|
+
nodes: Object.fromEntries(CORE_NODE_ORDER.map(id => [id, nodes[id]])),
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=core-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-host.js","sourceRoot":"","sources":["../../src/agent-runtime/core-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { SerializedGraphStore } from './graph-checkpointer.js';
|
|
2
|
+
import type { WorkflowState } from './workflow-types.js';
|
|
3
|
+
export declare class WorkflowStoreError extends Error {
|
|
4
|
+
readonly code: 'INVALID_ID' | 'LOCKED' | 'CORRUPT_STATE';
|
|
5
|
+
constructor(code: 'INVALID_ID' | 'LOCKED' | 'CORRUPT_STATE', message: string);
|
|
6
|
+
}
|
|
7
|
+
/** The durable run: the host ledger plus the LangGraph checkpoint history, written together. */
|
|
8
|
+
export interface WorkflowEnvelope {
|
|
9
|
+
state: WorkflowState;
|
|
10
|
+
graph?: SerializedGraphStore;
|
|
11
|
+
}
|
|
12
|
+
export declare const ENVELOPE_FORMAT = 2;
|
|
13
|
+
/** Reject non-JSON data instead of silently changing the fingerprint on serialization. */
|
|
14
|
+
export declare function fingerprint(value: unknown): string;
|
|
15
|
+
export declare function readWorkflowEnvelope(directory: string, runId: string): Promise<WorkflowEnvelope | null>;
|
|
16
|
+
/** Read-only view of the host ledger. */
|
|
17
|
+
export declare function readWorkflowState(directory: string, runId: string): Promise<WorkflowState | null>;
|
|
18
|
+
/** Publish a complete checkpoint, receipt, usage, event ledger and graph history in one atomic rename. */
|
|
19
|
+
export declare function writeWorkflowEnvelope(directory: string, envelope: WorkflowEnvelope): Promise<void>;
|
|
20
|
+
export declare function writeWorkflowState(directory: string, state: WorkflowState, graph?: SerializedGraphStore): Promise<void>;
|
|
21
|
+
/** Atomic directory leases avoid platform-specific flock and native dependencies. */
|
|
22
|
+
export declare function acquireWorkflowLease(directory: string, runId: string): Promise<() => Promise<void>>;
|