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.
Files changed (101) hide show
  1. package/README.md +3 -0
  2. package/bin/specrails-core.mjs +5 -0
  3. package/dist/agent-runtime/cli-executor.d.ts +34 -0
  4. package/dist/agent-runtime/cli-executor.js +335 -0
  5. package/dist/agent-runtime/cli-executor.js.map +1 -0
  6. package/dist/agent-runtime/cli-process.d.ts +32 -0
  7. package/dist/agent-runtime/cli-process.js +159 -0
  8. package/dist/agent-runtime/cli-process.js.map +1 -0
  9. package/dist/agent-runtime/cli.d.ts +38 -0
  10. package/dist/agent-runtime/cli.js +168 -0
  11. package/dist/agent-runtime/cli.js.map +1 -0
  12. package/dist/agent-runtime/config.d.ts +7 -0
  13. package/dist/agent-runtime/config.js +162 -0
  14. package/dist/agent-runtime/config.js.map +1 -0
  15. package/dist/agent-runtime/core-host.d.ts +33 -0
  16. package/dist/agent-runtime/core-host.js +97 -0
  17. package/dist/agent-runtime/core-host.js.map +1 -0
  18. package/dist/agent-runtime/durable-store.d.ts +22 -0
  19. package/dist/agent-runtime/durable-store.js +205 -0
  20. package/dist/agent-runtime/durable-store.js.map +1 -0
  21. package/dist/agent-runtime/executor-types.d.ts +92 -0
  22. package/dist/agent-runtime/executor-types.js +29 -0
  23. package/dist/agent-runtime/executor-types.js.map +1 -0
  24. package/dist/agent-runtime/executors.d.ts +22 -0
  25. package/dist/agent-runtime/executors.js +44 -0
  26. package/dist/agent-runtime/executors.js.map +1 -0
  27. package/dist/agent-runtime/gemini-policy.d.ts +8 -0
  28. package/dist/agent-runtime/gemini-policy.js +36 -0
  29. package/dist/agent-runtime/gemini-policy.js.map +1 -0
  30. package/dist/agent-runtime/graph/artifacts.d.ts +40 -0
  31. package/dist/agent-runtime/graph/artifacts.js +179 -0
  32. package/dist/agent-runtime/graph/artifacts.js.map +1 -0
  33. package/dist/agent-runtime/graph/nodes.d.ts +36 -0
  34. package/dist/agent-runtime/graph/nodes.js +274 -0
  35. package/dist/agent-runtime/graph/nodes.js.map +1 -0
  36. package/dist/agent-runtime/graph/review-policy.d.ts +18 -0
  37. package/dist/agent-runtime/graph/review-policy.js +32 -0
  38. package/dist/agent-runtime/graph/review-policy.js.map +1 -0
  39. package/dist/agent-runtime/graph/roles.d.ts +44 -0
  40. package/dist/agent-runtime/graph/roles.js +126 -0
  41. package/dist/agent-runtime/graph/roles.js.map +1 -0
  42. package/dist/agent-runtime/graph/state.d.ts +75 -0
  43. package/dist/agent-runtime/graph/state.js +23 -0
  44. package/dist/agent-runtime/graph/state.js.map +1 -0
  45. package/dist/agent-runtime/graph-checkpointer.d.ts +61 -0
  46. package/dist/agent-runtime/graph-checkpointer.js +137 -0
  47. package/dist/agent-runtime/graph-checkpointer.js.map +1 -0
  48. package/dist/agent-runtime/index.d.ts +14 -0
  49. package/dist/agent-runtime/index.js +15 -0
  50. package/dist/agent-runtime/index.js.map +1 -0
  51. package/dist/agent-runtime/kimi-acp.d.ts +7 -0
  52. package/dist/agent-runtime/kimi-acp.js +179 -0
  53. package/dist/agent-runtime/kimi-acp.js.map +1 -0
  54. package/dist/agent-runtime/openai-executor.d.ts +18 -0
  55. package/dist/agent-runtime/openai-executor.js +174 -0
  56. package/dist/agent-runtime/openai-executor.js.map +1 -0
  57. package/dist/agent-runtime/prompts.d.ts +40 -0
  58. package/dist/agent-runtime/prompts.js +291 -0
  59. package/dist/agent-runtime/prompts.js.map +1 -0
  60. package/dist/agent-runtime/workflow-types.d.ts +210 -0
  61. package/dist/agent-runtime/workflow-types.js +2 -0
  62. package/dist/agent-runtime/workflow-types.js.map +1 -0
  63. package/dist/agent-runtime/workflow.d.ts +17 -0
  64. package/dist/agent-runtime/workflow.js +609 -0
  65. package/dist/agent-runtime/workflow.js.map +1 -0
  66. package/dist/agent-runtime/workspace-tools.d.ts +25 -0
  67. package/dist/agent-runtime/workspace-tools.js +120 -0
  68. package/dist/agent-runtime/workspace-tools.js.map +1 -0
  69. package/dist/installer/cli.d.ts +35 -0
  70. package/dist/installer/cli.js +3 -0
  71. package/dist/installer/cli.js.map +1 -1
  72. package/dist/installer/commands/doctor.d.ts +27 -0
  73. package/dist/installer/commands/framework.d.ts +85 -0
  74. package/dist/installer/commands/init.d.ts +147 -0
  75. package/dist/installer/commands/update.d.ts +56 -0
  76. package/dist/installer/commands/v5-migration.d.ts +32 -0
  77. package/dist/installer/phases/framework-lifecycle.d.ts +53 -0
  78. package/dist/installer/phases/install-config.d.ts +64 -0
  79. package/dist/installer/phases/manifest.d.ts +45 -0
  80. package/dist/installer/phases/prereqs.d.ts +51 -0
  81. package/dist/installer/phases/provider-detect.d.ts +89 -0
  82. package/dist/installer/phases/scaffold.d.ts +211 -0
  83. package/dist/installer/runtime/kimi.d.ts +84 -0
  84. package/dist/installer/runtime/pipeline-state.d.ts +210 -0
  85. package/dist/installer/runtime/pipeline-state.js +46 -22
  86. package/dist/installer/runtime/pipeline-state.js.map +1 -1
  87. package/dist/installer/util/errors.d.ts +46 -0
  88. package/dist/installer/util/exec.d.ts +41 -0
  89. package/dist/installer/util/fs.d.ts +153 -0
  90. package/dist/installer/util/git.d.ts +44 -0
  91. package/dist/installer/util/install-transaction.d.ts +29 -0
  92. package/dist/installer/util/logger.d.ts +31 -0
  93. package/dist/installer/util/paths.d.ts +34 -0
  94. package/dist/installer/util/prompts.d.ts +23 -0
  95. package/dist/installer/util/registry.d.ts +174 -0
  96. package/dist/installer/util/template.d.ts +23 -0
  97. package/docs/README.md +1 -0
  98. package/docs/agent-runtime.md +268 -0
  99. package/integration-contract.json +79 -7
  100. package/package.json +16 -1
  101. 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>>;