specrails-core 5.2.3 → 5.4.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 (165) hide show
  1. package/README.md +3 -0
  2. package/bin/specrails-core.mjs +5 -0
  3. package/dist/agent-runtime/capabilities.d.ts +27 -0
  4. package/dist/agent-runtime/capabilities.js +73 -0
  5. package/dist/agent-runtime/capabilities.js.map +1 -0
  6. package/dist/agent-runtime/cli-executor.d.ts +43 -0
  7. package/dist/agent-runtime/cli-executor.js +405 -0
  8. package/dist/agent-runtime/cli-executor.js.map +1 -0
  9. package/dist/agent-runtime/cli-process.d.ts +32 -0
  10. package/dist/agent-runtime/cli-process.js +159 -0
  11. package/dist/agent-runtime/cli-process.js.map +1 -0
  12. package/dist/agent-runtime/cli.d.ts +39 -0
  13. package/dist/agent-runtime/cli.js +216 -0
  14. package/dist/agent-runtime/cli.js.map +1 -0
  15. package/dist/agent-runtime/codex-schema.d.ts +4 -0
  16. package/dist/agent-runtime/codex-schema.js +31 -0
  17. package/dist/agent-runtime/codex-schema.js.map +1 -0
  18. package/dist/agent-runtime/config.d.ts +11 -0
  19. package/dist/agent-runtime/config.js +263 -0
  20. package/dist/agent-runtime/config.js.map +1 -0
  21. package/dist/agent-runtime/core-host.d.ts +41 -0
  22. package/dist/agent-runtime/core-host.js +132 -0
  23. package/dist/agent-runtime/core-host.js.map +1 -0
  24. package/dist/agent-runtime/durable-store.d.ts +22 -0
  25. package/dist/agent-runtime/durable-store.js +205 -0
  26. package/dist/agent-runtime/durable-store.js.map +1 -0
  27. package/dist/agent-runtime/efficiency-summary.d.ts +67 -0
  28. package/dist/agent-runtime/efficiency-summary.js +52 -0
  29. package/dist/agent-runtime/efficiency-summary.js.map +1 -0
  30. package/dist/agent-runtime/efficiency-types.d.ts +60 -0
  31. package/dist/agent-runtime/efficiency-types.js +8 -0
  32. package/dist/agent-runtime/efficiency-types.js.map +1 -0
  33. package/dist/agent-runtime/efficiency.d.ts +5 -0
  34. package/dist/agent-runtime/efficiency.js +35 -0
  35. package/dist/agent-runtime/efficiency.js.map +1 -0
  36. package/dist/agent-runtime/evaluation-corpus.d.ts +13 -0
  37. package/dist/agent-runtime/evaluation-corpus.js +8 -0
  38. package/dist/agent-runtime/evaluation-corpus.js.map +1 -0
  39. package/dist/agent-runtime/evaluation.d.ts +43 -0
  40. package/dist/agent-runtime/evaluation.js +171 -0
  41. package/dist/agent-runtime/evaluation.js.map +1 -0
  42. package/dist/agent-runtime/executor-types.d.ts +125 -0
  43. package/dist/agent-runtime/executor-types.js +29 -0
  44. package/dist/agent-runtime/executor-types.js.map +1 -0
  45. package/dist/agent-runtime/executors.d.ts +23 -0
  46. package/dist/agent-runtime/executors.js +48 -0
  47. package/dist/agent-runtime/executors.js.map +1 -0
  48. package/dist/agent-runtime/gemini-policy.d.ts +8 -0
  49. package/dist/agent-runtime/gemini-policy.js +36 -0
  50. package/dist/agent-runtime/gemini-policy.js.map +1 -0
  51. package/dist/agent-runtime/graph/artifacts.d.ts +26 -0
  52. package/dist/agent-runtime/graph/artifacts.js +205 -0
  53. package/dist/agent-runtime/graph/artifacts.js.map +1 -0
  54. package/dist/agent-runtime/graph/nodes.d.ts +39 -0
  55. package/dist/agent-runtime/graph/nodes.js +321 -0
  56. package/dist/agent-runtime/graph/nodes.js.map +1 -0
  57. package/dist/agent-runtime/graph/review-policy.d.ts +18 -0
  58. package/dist/agent-runtime/graph/review-policy.js +32 -0
  59. package/dist/agent-runtime/graph/review-policy.js.map +1 -0
  60. package/dist/agent-runtime/graph/roles.d.ts +47 -0
  61. package/dist/agent-runtime/graph/roles.js +190 -0
  62. package/dist/agent-runtime/graph/roles.js.map +1 -0
  63. package/dist/agent-runtime/graph/state.d.ts +83 -0
  64. package/dist/agent-runtime/graph/state.js +23 -0
  65. package/dist/agent-runtime/graph/state.js.map +1 -0
  66. package/dist/agent-runtime/graph-checkpointer.d.ts +61 -0
  67. package/dist/agent-runtime/graph-checkpointer.js +137 -0
  68. package/dist/agent-runtime/graph-checkpointer.js.map +1 -0
  69. package/dist/agent-runtime/index.d.ts +20 -0
  70. package/dist/agent-runtime/index.js +21 -0
  71. package/dist/agent-runtime/index.js.map +1 -0
  72. package/dist/agent-runtime/kimi-acp.d.ts +11 -0
  73. package/dist/agent-runtime/kimi-acp.js +190 -0
  74. package/dist/agent-runtime/kimi-acp.js.map +1 -0
  75. package/dist/agent-runtime/openai-executor.d.ts +26 -0
  76. package/dist/agent-runtime/openai-executor.js +192 -0
  77. package/dist/agent-runtime/openai-executor.js.map +1 -0
  78. package/dist/agent-runtime/openspec-tool-server.d.ts +1 -0
  79. package/dist/agent-runtime/openspec-tool-server.js +37 -0
  80. package/dist/agent-runtime/openspec-tool-server.js.map +1 -0
  81. package/dist/agent-runtime/openspec.d.ts +123 -0
  82. package/dist/agent-runtime/openspec.js +263 -0
  83. package/dist/agent-runtime/openspec.js.map +1 -0
  84. package/dist/agent-runtime/prompts.d.ts +44 -0
  85. package/dist/agent-runtime/prompts.js +310 -0
  86. package/dist/agent-runtime/prompts.js.map +1 -0
  87. package/dist/agent-runtime/provider-diagnostic.d.ts +2 -0
  88. package/dist/agent-runtime/provider-diagnostic.js +25 -0
  89. package/dist/agent-runtime/provider-diagnostic.js.map +1 -0
  90. package/dist/agent-runtime/repository-context.d.ts +25 -0
  91. package/dist/agent-runtime/repository-context.js +100 -0
  92. package/dist/agent-runtime/repository-context.js.map +1 -0
  93. package/dist/agent-runtime/review-context.d.ts +14 -0
  94. package/dist/agent-runtime/review-context.js +41 -0
  95. package/dist/agent-runtime/review-context.js.map +1 -0
  96. package/dist/agent-runtime/role-routing.d.ts +10 -0
  97. package/dist/agent-runtime/role-routing.js +29 -0
  98. package/dist/agent-runtime/role-routing.js.map +1 -0
  99. package/dist/agent-runtime/role-state.d.ts +19 -0
  100. package/dist/agent-runtime/role-state.js +24 -0
  101. package/dist/agent-runtime/role-state.js.map +1 -0
  102. package/dist/agent-runtime/runtime-identity.d.ts +11 -0
  103. package/dist/agent-runtime/runtime-identity.js +33 -0
  104. package/dist/agent-runtime/runtime-identity.js.map +1 -0
  105. package/dist/agent-runtime/tool-event.d.ts +3 -0
  106. package/dist/agent-runtime/tool-event.js +24 -0
  107. package/dist/agent-runtime/tool-event.js.map +1 -0
  108. package/dist/agent-runtime/verification-plan.d.ts +55 -0
  109. package/dist/agent-runtime/verification-plan.js +206 -0
  110. package/dist/agent-runtime/verification-plan.js.map +1 -0
  111. package/dist/agent-runtime/workflow-types.d.ts +226 -0
  112. package/dist/agent-runtime/workflow-types.js +2 -0
  113. package/dist/agent-runtime/workflow-types.js.map +1 -0
  114. package/dist/agent-runtime/workflow.d.ts +17 -0
  115. package/dist/agent-runtime/workflow.js +636 -0
  116. package/dist/agent-runtime/workflow.js.map +1 -0
  117. package/dist/agent-runtime/workspace-tools.d.ts +29 -0
  118. package/dist/agent-runtime/workspace-tools.js +282 -0
  119. package/dist/agent-runtime/workspace-tools.js.map +1 -0
  120. package/dist/installer/cli.d.ts +35 -0
  121. package/dist/installer/cli.js +3 -0
  122. package/dist/installer/cli.js.map +1 -1
  123. package/dist/installer/commands/doctor.d.ts +27 -0
  124. package/dist/installer/commands/framework.d.ts +85 -0
  125. package/dist/installer/commands/init.d.ts +147 -0
  126. package/dist/installer/commands/update.d.ts +56 -0
  127. package/dist/installer/commands/v5-migration.d.ts +32 -0
  128. package/dist/installer/phases/framework-lifecycle.d.ts +53 -0
  129. package/dist/installer/phases/install-config.d.ts +64 -0
  130. package/dist/installer/phases/manifest.d.ts +45 -0
  131. package/dist/installer/phases/prereqs.d.ts +51 -0
  132. package/dist/installer/phases/provider-detect.d.ts +89 -0
  133. package/dist/installer/phases/scaffold.d.ts +211 -0
  134. package/dist/installer/phases/scaffold.js +39 -109
  135. package/dist/installer/phases/scaffold.js.map +1 -1
  136. package/dist/installer/runtime/kimi.d.ts +84 -0
  137. package/dist/installer/runtime/pipeline-state.d.ts +351 -0
  138. package/dist/installer/runtime/pipeline-state.js +514 -41
  139. package/dist/installer/runtime/pipeline-state.js.map +1 -1
  140. package/dist/installer/util/errors.d.ts +46 -0
  141. package/dist/installer/util/exec.d.ts +41 -0
  142. package/dist/installer/util/fs.d.ts +153 -0
  143. package/dist/installer/util/git.d.ts +44 -0
  144. package/dist/installer/util/install-transaction.d.ts +29 -0
  145. package/dist/installer/util/logger.d.ts +31 -0
  146. package/dist/installer/util/paths.d.ts +34 -0
  147. package/dist/installer/util/prompts.d.ts +23 -0
  148. package/dist/installer/util/registry.d.ts +174 -0
  149. package/dist/installer/util/template.d.ts +23 -0
  150. package/docs/README.md +1 -0
  151. package/docs/agent-runtime-efficiency.md +65 -0
  152. package/docs/agent-runtime.md +339 -0
  153. package/integration-contract.json +80 -7
  154. package/package.json +20 -2
  155. package/schemas/agent-runtime.schema.json +77 -0
  156. package/schemas/fixtures/runtime-efficiency-summary.v1.json +790 -0
  157. package/templates/codex-skills/batch-implement/SKILL.md +33 -58
  158. package/templates/codex-skills/implement/SKILL.md +21 -124
  159. package/templates/codex-skills/retry/SKILL.md +8 -34
  160. package/templates/commands/specrails/batch-implement.md +21 -16
  161. package/templates/commands/specrails/implement.md +17 -276
  162. package/templates/commands/specrails/retry.md +6 -34
  163. package/templates/gemini-commands/batch-implement.toml +34 -28
  164. package/templates/gemini-commands/implement.toml +34 -55
  165. package/templates/gemini-commands/retry.toml +10 -16
@@ -0,0 +1,192 @@
1
+ import { readVerificationEvidence } from '../installer/runtime/pipeline-state.js';
2
+ import { toolEvent } from './tool-event.js';
3
+ import { assertEffortSupported, unknownCapabilities } from './capabilities.js';
4
+ import { OpenSpecTools, OPENSPEC_TOOL_DEFINITION, openSpecPrompt } from './openspec.js';
5
+ import { AgentExecutionError, unknownUsage, validateAgentRequest } from './executor-types.js';
6
+ import { sumCacheUsage } from './efficiency-types.js';
7
+ import { WorkspaceTools } from './workspace-tools.js';
8
+ function record(value) {
9
+ return value !== null && typeof value === 'object' && !Array.isArray(value) ? value : undefined;
10
+ }
11
+ function number(value) { return typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : null; }
12
+ function add(left, right) { return left === null || right === null ? null : left + right; }
13
+ export function parseStructuredText(text) {
14
+ try {
15
+ return record(JSON.parse(text.trim().replace(/^```(?:json)?\s*\n/, '').replace(/\n```$/, '')));
16
+ }
17
+ catch {
18
+ return undefined;
19
+ }
20
+ }
21
+ /** No SDK, gateway, tracing backend, paid probe, or mandatory key. */
22
+ export class OpenAICompatibleExecutor {
23
+ provider;
24
+ options;
25
+ constructor(provider, options = {}) {
26
+ this.provider = provider;
27
+ this.options = options;
28
+ }
29
+ capabilities() { return { ...unknownCapabilities('openai-compatible'), continuation: 'unsupported', effortSupport: 'unsupported', supportedEfforts: [] }; }
30
+ validateLimits(limits) {
31
+ if (limits.maxCostUsd !== undefined)
32
+ throw new AgentExecutionError('A strict USD cap requires an executor with a native spending limit; OpenAI-compatible endpoints do not provide one. Use a token cap or an executor with native cost enforcement.', 'cost_limit_unsupported');
33
+ }
34
+ async execute(request) {
35
+ validateAgentRequest(request);
36
+ assertEffortSupported(request, this.capabilities());
37
+ this.validateLimits(request);
38
+ if (!request.model?.trim())
39
+ throw new AgentExecutionError('OpenAI-compatible execution requires a model', 'invalid_model');
40
+ const controller = new AbortController();
41
+ const toolset = new WorkspaceTools(request.cwd, request.allowedRoots, request.role);
42
+ const openspec = request.openspec ? new OpenSpecTools(request.openspec, controller.signal) : undefined;
43
+ const definitions = [...toolset.definitions(), ...(openspec ? [OPENSPEC_TOOL_DEFINITION] : []), ...(request.openspec?.evidenceScope && request.role !== 'architect' ? [{ type: 'function', function: { name: 'read_verification_evidence', description: 'Read host verification evidence and source files with opaque IDs and bounded cursors. List to discover IDs.', parameters: { type: 'object', additionalProperties: false, properties: { id: { type: 'string' }, section: { type: 'string', enum: ['summary', 'stdout', 'stderr', 'source'] }, sourceId: { type: 'string' }, cursor: { type: 'string' }, limit: { type: 'integer', minimum: 1, maximum: 100 } } } } }] : [])];
44
+ const maxTurns = request.maxTurns ?? 100;
45
+ if (!Number.isSafeInteger(maxTurns) || maxTurns < 1)
46
+ throw new AgentExecutionError('maxTurns must be a positive integer', 'invalid_limit');
47
+ const timeoutMs = request.timeoutMs ?? 15 * 60_000;
48
+ if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 1)
49
+ throw new AgentExecutionError('timeoutMs must be a positive integer', 'invalid_limit');
50
+ const env = this.options.env ?? process.env;
51
+ const key = this.provider.apiKeyEnv ? env[this.provider.apiKeyEnv] : undefined;
52
+ if (this.provider.apiKeyEnv && !key)
53
+ throw new AgentExecutionError(`Credential environment variable ${this.provider.apiKeyEnv} is not set`, 'missing_credential');
54
+ const endpoint = new URL(this.provider.baseUrl.replace(/\/+$/, '') + '/chat/completions');
55
+ if (!['http:', 'https:'].includes(endpoint.protocol) || endpoint.username || endpoint.password || endpoint.hash || endpoint.search)
56
+ throw new AgentExecutionError('Invalid OpenAI-compatible endpoint', 'invalid_endpoint');
57
+ const headers = { 'Content-Type': 'application/json' };
58
+ if (key)
59
+ headers.Authorization = `Bearer ${key}`;
60
+ const abort = () => controller.abort(request.signal?.reason);
61
+ request.signal?.addEventListener('abort', abort, { once: true });
62
+ if (request.signal?.aborted)
63
+ abort();
64
+ const timer = setTimeout(() => controller.abort(new Error('Agent timeout')), timeoutMs);
65
+ let usage = { inputTokens: 0, outputTokens: 0, costUsd: 0 };
66
+ let responses = 0;
67
+ const messages = [
68
+ { role: 'system', content: `You execute one ${request.role} task. Use only the provided workspace tools. Allowed roots: ${JSON.stringify(toolset.roots)}. Working directory: ${toolset.cwd}. Return the complete requested final result. Do not coordinate another workflow. Execute only the assigned role and its supplied OpenSpec workflow.` },
69
+ { role: 'user', content: (request.openspec ? openSpecPrompt(request.openspec) : '') + request.prompt },
70
+ ];
71
+ try {
72
+ for (let turn = 0; turn < maxTurns; turn++) {
73
+ controller.signal.throwIfAborted();
74
+ const observed = (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0);
75
+ if (request.maxTokens !== undefined && responses && (usage.inputTokens === null || usage.outputTokens === null))
76
+ throw new AgentExecutionError('Provider omitted usage required by the token budget', 'usage_unavailable', usage);
77
+ if (request.maxTokens !== undefined && observed >= request.maxTokens)
78
+ throw new AgentExecutionError('Agent token budget exhausted', 'token_budget', usage);
79
+ const response = await (this.options.fetch ?? globalThis.fetch)(endpoint, {
80
+ method: 'POST', headers, signal: controller.signal, redirect: 'error',
81
+ body: JSON.stringify({ model: request.model, messages, tools: definitions, tool_choice: 'auto', stream: false,
82
+ ...(request.maxTokens === undefined ? {} : { max_tokens: Math.max(1, Math.floor(request.maxTokens - observed)) }),
83
+ }),
84
+ });
85
+ if (!response.ok) {
86
+ await response.body?.cancel();
87
+ throw new AgentExecutionError(`OpenAI-compatible provider returned HTTP ${response.status}`, 'provider_http_error', responses ? usage : unknownUsage());
88
+ }
89
+ const body = await readBoundedResponse(response);
90
+ const data = record(body), reported = record(data?.usage);
91
+ const cached = number(record(reported?.prompt_tokens_details)?.cached_tokens);
92
+ const inputTokens = number(reported?.prompt_tokens);
93
+ const cache = record(reported?.prompt_tokens_details)?.cached_tokens === undefined ? {} : {
94
+ cacheReadInputTokens: cached !== null && inputTokens !== null && cached <= inputTokens ? cached : null,
95
+ uncachedInputTokens: cached !== null && inputTokens !== null && cached <= inputTokens ? inputTokens - cached : null,
96
+ cacheWriteInputTokens: null,
97
+ };
98
+ const current = {
99
+ inputTokens: number(reported?.prompt_tokens), outputTokens: number(reported?.completion_tokens),
100
+ costUsd: number(reported?.cost_usd ?? data?.cost_usd), ...cache,
101
+ };
102
+ usage = { inputTokens: add(usage.inputTokens, current.inputTokens), outputTokens: add(usage.outputTokens, current.outputTokens), costUsd: add(usage.costUsd, current.costUsd), ...(responses === 0 ? cache : sumCacheUsage([usage, current])) };
103
+ responses++;
104
+ request.onEvent?.({ kind: 'usage', usage: { ...usage } });
105
+ if (request.maxTokens !== undefined && (usage.inputTokens === null || usage.outputTokens === null))
106
+ throw new AgentExecutionError('Provider omitted usage required by the token budget', 'usage_unavailable', usage);
107
+ if (request.maxTokens !== undefined && (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0) > request.maxTokens)
108
+ throw new AgentExecutionError('Agent token budget exceeded', 'token_budget', usage);
109
+ if (request.maxCostUsd !== undefined && usage.costUsd !== null && usage.costUsd > request.maxCostUsd)
110
+ throw new AgentExecutionError('Agent cost budget exceeded', 'cost_budget', usage);
111
+ if (!data || data.error)
112
+ throw new AgentExecutionError('Provider returned an error or invalid response', 'provider_response_error', usage);
113
+ const choice = Array.isArray(data.choices) ? record(data.choices[0]) : undefined;
114
+ const message = record(choice?.message);
115
+ if (!message || message.role !== 'assistant')
116
+ throw new AgentExecutionError('Provider response has no assistant message', 'invalid_response', usage);
117
+ if (choice?.finish_reason === 'length' || choice?.finish_reason === 'content_filter')
118
+ throw new AgentExecutionError('Provider did not complete the requested result', 'incomplete_response', usage);
119
+ const calls = message.tool_calls;
120
+ if (calls !== undefined && !Array.isArray(calls))
121
+ throw new AgentExecutionError('Invalid tool calls in provider response', 'invalid_tool_call', usage);
122
+ if (Array.isArray(calls) && calls.length > 0) {
123
+ if (calls.length > 32)
124
+ throw new AgentExecutionError('Provider requested too many tools in one turn', 'invalid_tool_call', usage);
125
+ messages.push({ role: 'assistant', content: typeof message.content === 'string' ? message.content : null, tool_calls: calls });
126
+ const ids = new Set();
127
+ for (const raw of calls) {
128
+ controller.signal.throwIfAborted();
129
+ const call = record(raw), fn = record(call?.function);
130
+ if (call?.type !== 'function' || typeof call.id !== 'string' || !call.id || ids.has(call.id) || typeof fn?.name !== 'string' || typeof fn.arguments !== 'string')
131
+ throw new AgentExecutionError('Malformed provider tool call', 'invalid_tool_call', usage);
132
+ ids.add(call.id);
133
+ request.onEvent?.(toolEvent(fn.name, fn.arguments));
134
+ let result;
135
+ try {
136
+ result = fn.name === 'read_verification_evidence' && request.openspec?.evidenceScope && request.role !== 'architect' ? JSON.stringify(readVerificationEvidence(request.openspec.evidenceScope, JSON.parse(fn.arguments))) : fn.name === 'openspec_workflow' && openspec ? JSON.stringify(await openspec.execute(JSON.parse(fn.arguments))) : toolset.execute(fn.name, JSON.parse(fn.arguments));
137
+ }
138
+ catch (error) {
139
+ result = JSON.stringify({ error: error instanceof Error ? error.message : 'Tool execution failed' });
140
+ }
141
+ messages.push({ role: 'tool', tool_call_id: call.id, content: result });
142
+ request.onEvent?.({ kind: 'tool-end', tool: fn.name });
143
+ }
144
+ continue;
145
+ }
146
+ if (typeof message.content !== 'string' || !message.content.trim())
147
+ throw new AgentExecutionError('Provider returned an empty final result', 'invalid_response', usage);
148
+ request.onEvent?.({ kind: 'text', text: message.content });
149
+ return { text: message.content, usage, structured: parseStructuredText(message.content) };
150
+ }
151
+ throw new AgentExecutionError(`Agent exhausted ${maxTurns} turns without a final result`, 'max_turns', usage);
152
+ }
153
+ catch (error) {
154
+ if (error instanceof AgentExecutionError)
155
+ throw error;
156
+ if (controller.signal.aborted)
157
+ throw new AgentExecutionError(request.signal?.aborted ? 'Agent cancelled' : 'Agent timed out', request.signal?.aborted ? 'aborted' : 'timeout', responses ? usage : unknownUsage());
158
+ // Do not persist provider response bodies, URLs or credentials echoed by errors.
159
+ const code = error.cause?.code;
160
+ const diagnostic = typeof code === 'string' && /^(?:E[A-Z_]+|UND_ERR_[A-Z_]+)$/.test(code) ? ` (${code})` : '';
161
+ throw new AgentExecutionError('OpenAI-compatible request failed' + diagnostic, 'provider_request_error', responses ? usage : unknownUsage());
162
+ }
163
+ finally {
164
+ clearTimeout(timer);
165
+ request.signal?.removeEventListener('abort', abort);
166
+ }
167
+ }
168
+ }
169
+ async function readBoundedResponse(response) {
170
+ if (!response.body)
171
+ throw new Error('Missing response body');
172
+ const reader = response.body.getReader(), chunks = [];
173
+ let length = 0;
174
+ try {
175
+ for (;;) {
176
+ const part = await reader.read();
177
+ if (part.done)
178
+ break;
179
+ length += part.value.byteLength;
180
+ if (length > 2 * 1024 * 1024) {
181
+ await reader.cancel();
182
+ throw new Error('Provider response exceeds 2 MiB');
183
+ }
184
+ chunks.push(part.value);
185
+ }
186
+ }
187
+ finally {
188
+ reader.releaseLock();
189
+ }
190
+ return JSON.parse(Buffer.concat(chunks).toString('utf8'));
191
+ }
192
+ //# sourceMappingURL=openai-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-executor.js","sourceRoot":"","sources":["../../src/agent-runtime/openai-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,37 @@
1
+ import { readVerificationEvidence } from '../installer/runtime/pipeline-state.js';
2
+ import { readFileSync } from 'node:fs';
3
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
4
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
5
+ import { z } from 'zod';
6
+ import { OpenSpecTools } from './openspec.js';
7
+ const configPath = process.argv[2];
8
+ if (!configPath)
9
+ throw new Error('Missing role OpenSpec context');
10
+ const context = JSON.parse(readFileSync(configPath, 'utf8'));
11
+ const server = new McpServer({ name: 'specrails-openspec', version: '1' });
12
+ server.registerTool('workflow', {
13
+ description: 'Execute the official OpenSpec skill and CLI operations for the current change. Load the role skill first; for developer/reviewer this also executes and returns real status and instructions apply. Read the returned context files and finish the skill. Use instructions before authoring artifacts. Change identity and write scope are fixed by the host.',
14
+ inputSchema: { action: z.enum(['load_skill', 'new', 'status', 'instructions', 'validate', 'write_artifact']), artifact: z.string().optional(), path: z.string().optional(), content: z.string().optional() },
15
+ }, async (args, extra) => {
16
+ const tools = new OpenSpecTools(context, extra.signal);
17
+ try {
18
+ return { content: [{ type: 'text', text: JSON.stringify(await tools.execute(args)) }] };
19
+ }
20
+ catch (error) {
21
+ return { isError: true, content: [{ type: 'text', text: error instanceof Error ? error.message : String(error) }] };
22
+ }
23
+ });
24
+ if (context.evidenceScope && context.role !== 'architect')
25
+ server.registerTool('read_verification_evidence', {
26
+ description: 'Read persisted host verification results and harness sources. List first to discover opaque IDs; use returned cursors to page output. Read-only, bounded and scoped to this run.',
27
+ inputSchema: { id: z.string().optional(), section: z.enum(['summary', 'stdout', 'stderr', 'source']).optional(), sourceId: z.string().optional(), cursor: z.string().optional(), limit: z.number().int().min(1).max(100).optional() },
28
+ }, async (args) => {
29
+ try {
30
+ return { content: [{ type: 'text', text: JSON.stringify(readVerificationEvidence(context.evidenceScope, args)) }] };
31
+ }
32
+ catch (error) {
33
+ return { isError: true, content: [{ type: 'text', text: error instanceof Error ? error.message : String(error) }] };
34
+ }
35
+ });
36
+ await server.connect(new StdioServerTransport());
37
+ //# sourceMappingURL=openspec-tool-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openspec-tool-server.js","sourceRoot":"","sources":["../../src/agent-runtime/openspec-tool-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ import type { AgentRole, CliProvider } from './executor-types.js';
2
+ export declare const OPENSPEC_VERSION = "1.4.1";
3
+ export declare const ROLE_SKILLS: {
4
+ readonly architect: "openspec-ff-change";
5
+ readonly developer: "openspec-apply-change";
6
+ readonly reviewer: "openspec-verify-change";
7
+ };
8
+ export interface OpenSpecRoleContext {
9
+ evidenceScope?: {
10
+ backlogRoot: string;
11
+ runId: string;
12
+ };
13
+ root: string;
14
+ change: string;
15
+ stateDirectory: string;
16
+ cli: string;
17
+ skillPath: string;
18
+ skillHash: string;
19
+ role: AgentRole;
20
+ }
21
+ export interface OpenSpecStatus {
22
+ changeRoot: string;
23
+ schemaName: string;
24
+ isComplete: boolean;
25
+ applyRequires: string[];
26
+ actionContext?: {
27
+ allowedEditRoots?: string[];
28
+ mode?: string;
29
+ };
30
+ artifacts: {
31
+ id: string;
32
+ status: string;
33
+ }[];
34
+ artifactPaths: Record<string, {
35
+ existingOutputPaths: string[];
36
+ resolvedOutputPath: string;
37
+ }>;
38
+ }
39
+ export interface OpenSpecApply {
40
+ state: 'blocked' | 'ready' | 'all_done';
41
+ contextFiles: Record<string, string | string[]>;
42
+ tasks: {
43
+ id: string;
44
+ description: string;
45
+ done: boolean;
46
+ }[];
47
+ progress: {
48
+ total: number;
49
+ complete: number;
50
+ remaining: number;
51
+ };
52
+ }
53
+ export declare function hash(text: string): string;
54
+ export declare function resolveOpenSpecCli(): string;
55
+ export declare function runOpenSpec(cli: string, root: string, args: string[], signal?: AbortSignal): Promise<string>;
56
+ /** Reject symlink traversal even when the final destination does not exist. */
57
+ export declare function artifactPath(root: string, relative: string): string;
58
+ /** CLI-generated skills, never reimplemented templates. No user/global config writes. */
59
+ export declare function prepareOpenSpec(root: string, change: string, directory: string): {
60
+ cli: string;
61
+ skillRoot: string;
62
+ identity: Record<string, string>;
63
+ };
64
+ export declare function roleOpenSpecContext(prepared: ReturnType<typeof prepareOpenSpec>, root: string, change: string, directory: string, role: AgentRole, provider: CliProvider): OpenSpecRoleContext;
65
+ /** OpenSpec uses cwd paths; Windows may report a different case or short-name
66
+ * spelling than realpathSync. Compare existing filesystem identities, not text. */
67
+ export declare function sameOpenSpecDirectory(candidate: unknown, expected: string): boolean;
68
+ export declare class OpenSpecTools {
69
+ readonly context: OpenSpecRoleContext;
70
+ private readonly signal?;
71
+ constructor(context: OpenSpecRoleContext, signal?: AbortSignal | undefined);
72
+ private call;
73
+ status(): Promise<OpenSpecStatus>;
74
+ apply(): Promise<OpenSpecApply>;
75
+ validate(): Promise<unknown>;
76
+ execute(input: {
77
+ action: string;
78
+ artifact?: string;
79
+ path?: string;
80
+ content?: string;
81
+ }): Promise<unknown>;
82
+ private participationEvents;
83
+ participationCursor(): number;
84
+ assertParticipation(after?: number): void;
85
+ assertReady(): Promise<OpenSpecApply>;
86
+ }
87
+ export declare const OPENSPEC_BRIDGE_ENTRY: string;
88
+ export declare const OPENSPEC_TOOL_DEFINITION: {
89
+ type: string;
90
+ function: {
91
+ name: string;
92
+ description: string;
93
+ parameters: {
94
+ type: string;
95
+ additionalProperties: boolean;
96
+ required: string[];
97
+ properties: {
98
+ action: {
99
+ type: string;
100
+ enum: string[];
101
+ };
102
+ artifact: {
103
+ type: string;
104
+ };
105
+ path: {
106
+ type: string;
107
+ };
108
+ content: {
109
+ type: string;
110
+ };
111
+ };
112
+ };
113
+ };
114
+ };
115
+ export declare function openSpecPrompt(context: OpenSpecRoleContext): string;
116
+ export declare function writeOpenSpecBridge(context: OpenSpecRoleContext, directory: string): {
117
+ command: string;
118
+ args: string[];
119
+ };
120
+ /** A repairable protocol omission, distinct from invalid artifacts or failed verification. */
121
+ export declare class OpenSpecParticipationError extends Error {
122
+ }
123
+ export declare function openSpecRepairPrompt(context: OpenSpecRoleContext): string;