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.
- package/README.md +3 -0
- package/bin/specrails-core.mjs +5 -0
- package/dist/agent-runtime/capabilities.d.ts +27 -0
- package/dist/agent-runtime/capabilities.js +73 -0
- package/dist/agent-runtime/capabilities.js.map +1 -0
- package/dist/agent-runtime/cli-executor.d.ts +43 -0
- package/dist/agent-runtime/cli-executor.js +405 -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 +39 -0
- package/dist/agent-runtime/cli.js +216 -0
- package/dist/agent-runtime/cli.js.map +1 -0
- package/dist/agent-runtime/codex-schema.d.ts +4 -0
- package/dist/agent-runtime/codex-schema.js +31 -0
- package/dist/agent-runtime/codex-schema.js.map +1 -0
- package/dist/agent-runtime/config.d.ts +11 -0
- package/dist/agent-runtime/config.js +263 -0
- package/dist/agent-runtime/config.js.map +1 -0
- package/dist/agent-runtime/core-host.d.ts +41 -0
- package/dist/agent-runtime/core-host.js +132 -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/efficiency-summary.d.ts +67 -0
- package/dist/agent-runtime/efficiency-summary.js +52 -0
- package/dist/agent-runtime/efficiency-summary.js.map +1 -0
- package/dist/agent-runtime/efficiency-types.d.ts +60 -0
- package/dist/agent-runtime/efficiency-types.js +8 -0
- package/dist/agent-runtime/efficiency-types.js.map +1 -0
- package/dist/agent-runtime/efficiency.d.ts +5 -0
- package/dist/agent-runtime/efficiency.js +35 -0
- package/dist/agent-runtime/efficiency.js.map +1 -0
- package/dist/agent-runtime/evaluation-corpus.d.ts +13 -0
- package/dist/agent-runtime/evaluation-corpus.js +8 -0
- package/dist/agent-runtime/evaluation-corpus.js.map +1 -0
- package/dist/agent-runtime/evaluation.d.ts +43 -0
- package/dist/agent-runtime/evaluation.js +171 -0
- package/dist/agent-runtime/evaluation.js.map +1 -0
- package/dist/agent-runtime/executor-types.d.ts +125 -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 +23 -0
- package/dist/agent-runtime/executors.js +48 -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 +26 -0
- package/dist/agent-runtime/graph/artifacts.js +205 -0
- package/dist/agent-runtime/graph/artifacts.js.map +1 -0
- package/dist/agent-runtime/graph/nodes.d.ts +39 -0
- package/dist/agent-runtime/graph/nodes.js +321 -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 +47 -0
- package/dist/agent-runtime/graph/roles.js +190 -0
- package/dist/agent-runtime/graph/roles.js.map +1 -0
- package/dist/agent-runtime/graph/state.d.ts +83 -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 +20 -0
- package/dist/agent-runtime/index.js +21 -0
- package/dist/agent-runtime/index.js.map +1 -0
- package/dist/agent-runtime/kimi-acp.d.ts +11 -0
- package/dist/agent-runtime/kimi-acp.js +190 -0
- package/dist/agent-runtime/kimi-acp.js.map +1 -0
- package/dist/agent-runtime/openai-executor.d.ts +26 -0
- package/dist/agent-runtime/openai-executor.js +192 -0
- package/dist/agent-runtime/openai-executor.js.map +1 -0
- package/dist/agent-runtime/openspec-tool-server.d.ts +1 -0
- package/dist/agent-runtime/openspec-tool-server.js +37 -0
- package/dist/agent-runtime/openspec-tool-server.js.map +1 -0
- package/dist/agent-runtime/openspec.d.ts +123 -0
- package/dist/agent-runtime/openspec.js +263 -0
- package/dist/agent-runtime/openspec.js.map +1 -0
- package/dist/agent-runtime/prompts.d.ts +44 -0
- package/dist/agent-runtime/prompts.js +310 -0
- package/dist/agent-runtime/prompts.js.map +1 -0
- package/dist/agent-runtime/provider-diagnostic.d.ts +2 -0
- package/dist/agent-runtime/provider-diagnostic.js +25 -0
- package/dist/agent-runtime/provider-diagnostic.js.map +1 -0
- package/dist/agent-runtime/repository-context.d.ts +25 -0
- package/dist/agent-runtime/repository-context.js +100 -0
- package/dist/agent-runtime/repository-context.js.map +1 -0
- package/dist/agent-runtime/review-context.d.ts +14 -0
- package/dist/agent-runtime/review-context.js +41 -0
- package/dist/agent-runtime/review-context.js.map +1 -0
- package/dist/agent-runtime/role-routing.d.ts +10 -0
- package/dist/agent-runtime/role-routing.js +29 -0
- package/dist/agent-runtime/role-routing.js.map +1 -0
- package/dist/agent-runtime/role-state.d.ts +19 -0
- package/dist/agent-runtime/role-state.js +24 -0
- package/dist/agent-runtime/role-state.js.map +1 -0
- package/dist/agent-runtime/runtime-identity.d.ts +11 -0
- package/dist/agent-runtime/runtime-identity.js +33 -0
- package/dist/agent-runtime/runtime-identity.js.map +1 -0
- package/dist/agent-runtime/tool-event.d.ts +3 -0
- package/dist/agent-runtime/tool-event.js +24 -0
- package/dist/agent-runtime/tool-event.js.map +1 -0
- package/dist/agent-runtime/verification-plan.d.ts +55 -0
- package/dist/agent-runtime/verification-plan.js +206 -0
- package/dist/agent-runtime/verification-plan.js.map +1 -0
- package/dist/agent-runtime/workflow-types.d.ts +226 -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 +636 -0
- package/dist/agent-runtime/workflow.js.map +1 -0
- package/dist/agent-runtime/workspace-tools.d.ts +29 -0
- package/dist/agent-runtime/workspace-tools.js +282 -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/phases/scaffold.js +39 -109
- package/dist/installer/phases/scaffold.js.map +1 -1
- package/dist/installer/runtime/kimi.d.ts +84 -0
- package/dist/installer/runtime/pipeline-state.d.ts +351 -0
- package/dist/installer/runtime/pipeline-state.js +514 -41
- 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-efficiency.md +65 -0
- package/docs/agent-runtime.md +339 -0
- package/integration-contract.json +80 -7
- package/package.json +20 -2
- package/schemas/agent-runtime.schema.json +77 -0
- package/schemas/fixtures/runtime-efficiency-summary.v1.json +790 -0
- package/templates/codex-skills/batch-implement/SKILL.md +33 -58
- package/templates/codex-skills/implement/SKILL.md +21 -124
- package/templates/codex-skills/retry/SKILL.md +8 -34
- package/templates/commands/specrails/batch-implement.md +21 -16
- package/templates/commands/specrails/implement.md +17 -276
- package/templates/commands/specrails/retry.md +6 -34
- package/templates/gemini-commands/batch-implement.toml +34 -28
- package/templates/gemini-commands/implement.toml +34 -55
- package/templates/gemini-commands/retry.toml +10 -16
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { BaseCheckpointSaver, copyCheckpoint, WRITES_IDX_MAP, } from '@langchain/langgraph-checkpoint';
|
|
2
|
+
const SAFE_KEY = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,255}$/;
|
|
3
|
+
function key(...parts) { return JSON.stringify(parts); }
|
|
4
|
+
function assertKey(field, value, allowEmpty = false) {
|
|
5
|
+
if (typeof value !== 'string' || (!allowEmpty && !value) || (value && !SAFE_KEY.test(value)))
|
|
6
|
+
throw new Error(`Invalid checkpoint ${field}`);
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* LangGraph checkpointer whose whole history lives inside the run's durable
|
|
11
|
+
* envelope. Every checkpoint or pending write is persisted through the same
|
|
12
|
+
* atomic file write as the host ledger, so traversal state and receipts can
|
|
13
|
+
* never disagree after a crash. Values are serialized by LangGraph's own
|
|
14
|
+
* serializer and stored as base64 so the envelope stays plain JSON.
|
|
15
|
+
*/
|
|
16
|
+
export class FileCheckpointSaver extends BaseCheckpointSaver {
|
|
17
|
+
io;
|
|
18
|
+
checkpoints = new Map();
|
|
19
|
+
writes = new Map();
|
|
20
|
+
constructor(io) {
|
|
21
|
+
super();
|
|
22
|
+
this.io = io;
|
|
23
|
+
const stored = io.load();
|
|
24
|
+
if (stored) {
|
|
25
|
+
if (stored.format !== 1 || !Array.isArray(stored.checkpoints) || !Array.isArray(stored.writes))
|
|
26
|
+
throw new Error('Invalid graph checkpoint store');
|
|
27
|
+
for (const entry of stored.checkpoints)
|
|
28
|
+
this.checkpoints.set(key(entry.threadId, entry.ns, entry.id), entry);
|
|
29
|
+
for (const entry of stored.writes)
|
|
30
|
+
this.writes.set(key(entry.threadId, entry.ns, entry.checkpointId, entry.taskId, String(entry.idx)), entry);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** A JSON snapshot of the complete store. */
|
|
34
|
+
serialize() {
|
|
35
|
+
return { format: 1, checkpoints: [...this.checkpoints.values()], writes: [...this.writes.values()] };
|
|
36
|
+
}
|
|
37
|
+
async dump(value) {
|
|
38
|
+
const [type, bytes] = await this.serde.dumpsTyped(value);
|
|
39
|
+
return { type, data: Buffer.from(bytes).toString('base64') };
|
|
40
|
+
}
|
|
41
|
+
async load(blob) {
|
|
42
|
+
return await this.serde.loadsTyped(blob.type, Buffer.from(blob.data, 'base64'));
|
|
43
|
+
}
|
|
44
|
+
persist() { return this.io.save(this.serialize()); }
|
|
45
|
+
async tuple(entry) {
|
|
46
|
+
const pendingWrites = await Promise.all([...this.writes.values()]
|
|
47
|
+
.filter(write => write.threadId === entry.threadId && write.ns === entry.ns && write.checkpointId === entry.id)
|
|
48
|
+
.map(async (write) => [write.taskId, write.channel, await this.load(write.value)]));
|
|
49
|
+
const result = {
|
|
50
|
+
config: { configurable: { thread_id: entry.threadId, checkpoint_ns: entry.ns, checkpoint_id: entry.id } },
|
|
51
|
+
checkpoint: await this.load(entry.checkpoint),
|
|
52
|
+
metadata: await this.load(entry.metadata),
|
|
53
|
+
pendingWrites,
|
|
54
|
+
};
|
|
55
|
+
if (entry.parentId !== undefined)
|
|
56
|
+
result.parentConfig = { configurable: { thread_id: entry.threadId, checkpoint_ns: entry.ns, checkpoint_id: entry.parentId } };
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
entries(threadId, ns) {
|
|
60
|
+
return [...this.checkpoints.values()]
|
|
61
|
+
.filter(entry => (threadId === undefined || entry.threadId === threadId) && (ns === undefined || entry.ns === ns))
|
|
62
|
+
.sort((a, b) => b.id.localeCompare(a.id));
|
|
63
|
+
}
|
|
64
|
+
async getTuple(config) {
|
|
65
|
+
const threadId = assertKey('thread_id', config.configurable?.thread_id);
|
|
66
|
+
const ns = assertKey('checkpoint_ns', config.configurable?.checkpoint_ns ?? '', true);
|
|
67
|
+
const checkpointId = config.configurable?.checkpoint_id;
|
|
68
|
+
if (checkpointId !== undefined) {
|
|
69
|
+
const entry = this.checkpoints.get(key(threadId, ns, assertKey('checkpoint_id', checkpointId)));
|
|
70
|
+
return entry ? this.tuple(entry) : undefined;
|
|
71
|
+
}
|
|
72
|
+
const latest = this.entries(threadId, ns)[0];
|
|
73
|
+
return latest ? this.tuple(latest) : undefined;
|
|
74
|
+
}
|
|
75
|
+
async *list(config, options) {
|
|
76
|
+
const threadId = config.configurable?.thread_id;
|
|
77
|
+
const ns = config.configurable?.checkpoint_ns;
|
|
78
|
+
const only = config.configurable?.checkpoint_id;
|
|
79
|
+
const before = options?.before?.configurable?.checkpoint_id;
|
|
80
|
+
let remaining = options?.limit;
|
|
81
|
+
for (const entry of this.entries(threadId, ns)) {
|
|
82
|
+
if (only !== undefined && entry.id !== only)
|
|
83
|
+
continue;
|
|
84
|
+
if (before !== undefined && entry.id >= before)
|
|
85
|
+
continue;
|
|
86
|
+
const tuple = await this.tuple(entry);
|
|
87
|
+
if (options?.filter && !Object.entries(options.filter).every(([name, value]) => tuple.metadata?.[name] === value))
|
|
88
|
+
continue;
|
|
89
|
+
if (remaining !== undefined) {
|
|
90
|
+
if (remaining <= 0)
|
|
91
|
+
break;
|
|
92
|
+
remaining -= 1;
|
|
93
|
+
}
|
|
94
|
+
yield tuple;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
async put(config, checkpoint, metadata, _newVersions) {
|
|
98
|
+
const threadId = assertKey('thread_id', config.configurable?.thread_id);
|
|
99
|
+
const ns = assertKey('checkpoint_ns', config.configurable?.checkpoint_ns ?? '', true);
|
|
100
|
+
const id = assertKey('checkpoint_id', checkpoint.id);
|
|
101
|
+
const parentId = config.configurable?.checkpoint_id;
|
|
102
|
+
const entry = {
|
|
103
|
+
threadId, ns, id, ...(parentId !== undefined ? { parentId } : {}),
|
|
104
|
+
checkpoint: await this.dump(copyCheckpoint(checkpoint)), metadata: await this.dump(metadata),
|
|
105
|
+
};
|
|
106
|
+
this.checkpoints.set(key(threadId, ns, id), entry);
|
|
107
|
+
await this.persist();
|
|
108
|
+
return { configurable: { thread_id: threadId, checkpoint_ns: ns, checkpoint_id: id } };
|
|
109
|
+
}
|
|
110
|
+
async putWrites(config, writes, taskId) {
|
|
111
|
+
const threadId = assertKey('thread_id', config.configurable?.thread_id);
|
|
112
|
+
const ns = assertKey('checkpoint_ns', config.configurable?.checkpoint_ns ?? '', true);
|
|
113
|
+
const checkpointId = assertKey('checkpoint_id', config.configurable?.checkpoint_id);
|
|
114
|
+
assertKey('task_id', taskId);
|
|
115
|
+
let changed = false;
|
|
116
|
+
for (const [index, [channel, value]] of writes.entries()) {
|
|
117
|
+
const idx = WRITES_IDX_MAP[channel] ?? index;
|
|
118
|
+
const writeKey = key(threadId, ns, checkpointId, taskId, String(idx));
|
|
119
|
+
if (idx >= 0 && this.writes.has(writeKey))
|
|
120
|
+
continue;
|
|
121
|
+
this.writes.set(writeKey, { threadId, ns, checkpointId, taskId, idx, channel, value: await this.dump(value) });
|
|
122
|
+
changed = true;
|
|
123
|
+
}
|
|
124
|
+
if (changed)
|
|
125
|
+
await this.persist();
|
|
126
|
+
}
|
|
127
|
+
async deleteThread(threadId) {
|
|
128
|
+
for (const [name, entry] of this.checkpoints)
|
|
129
|
+
if (entry.threadId === threadId)
|
|
130
|
+
this.checkpoints.delete(name);
|
|
131
|
+
for (const [name, entry] of this.writes)
|
|
132
|
+
if (entry.threadId === threadId)
|
|
133
|
+
this.writes.delete(name);
|
|
134
|
+
await this.persist();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=graph-checkpointer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-checkpointer.js","sourceRoot":"","sources":["../../src/agent-runtime/graph-checkpointer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Hosts define graph state with LangGraph's Annotation without a direct LangGraph dependency. */
|
|
2
|
+
export { Annotation } from '@langchain/langgraph';
|
|
3
|
+
export * from './executor-types.js';
|
|
4
|
+
export * from './efficiency.js';
|
|
5
|
+
export * from './config.js';
|
|
6
|
+
export * from './capabilities.js';
|
|
7
|
+
export * from './runtime-identity.js';
|
|
8
|
+
export * from './executors.js';
|
|
9
|
+
export * from './workflow.js';
|
|
10
|
+
export * from './core-host.js';
|
|
11
|
+
export * from './graph/state.js';
|
|
12
|
+
export { coreNodes, developerRecord, buildAcceptanceReport, MAX_DEEPEN_PASSES, type CoreNodeDeps } from './graph/nodes.js';
|
|
13
|
+
export { DEFAULT_REVIEW_POLICY, REVIEW_ASPECTS, evaluateReview, resolveReviewPolicy, type ReviewAspect, type ReviewPolicy } from './graph/review-policy.js';
|
|
14
|
+
export { createRoleInvoker, type Accept, type InvokeOptions, type InvokeOutcome, type RoleInvoker, type RoleInvokerDeps } from './graph/roles.js';
|
|
15
|
+
export { parseAgentObject } from './graph/artifacts.js';
|
|
16
|
+
export { FileCheckpointSaver, type GraphStoreIO, type SerializedGraphStore } from './graph-checkpointer.js';
|
|
17
|
+
export { ARCHITECT_OUTPUT_SCHEMA, DEVELOPER_OUTPUT_SCHEMA, REVIEW_OUTPUT_SCHEMA, ROLE_INSTRUCTIONS_VERSION, rolePromptDefaults, correctionInstructions, deepenInstructions, repairInstructions, roleInstructions, type FrozenCriterion, type RoleFeedback, type RoleInstructionOptions, } from './prompts.js';
|
|
18
|
+
export { OPENSPEC_VERSION, ROLE_SKILLS, type OpenSpecRoleContext } from './openspec.js';
|
|
19
|
+
export * from './efficiency-summary.js';
|
|
20
|
+
export { readVerificationEvidence, type VerificationEvidenceQuery } from '../installer/runtime/pipeline-state.js';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Hosts define graph state with LangGraph's Annotation without a direct LangGraph dependency. */
|
|
2
|
+
export { Annotation } from '@langchain/langgraph';
|
|
3
|
+
export * from './executor-types.js';
|
|
4
|
+
export * from './efficiency.js';
|
|
5
|
+
export * from './config.js';
|
|
6
|
+
export * from './capabilities.js';
|
|
7
|
+
export * from './runtime-identity.js';
|
|
8
|
+
export * from './executors.js';
|
|
9
|
+
export * from './workflow.js';
|
|
10
|
+
export * from './core-host.js';
|
|
11
|
+
export * from './graph/state.js';
|
|
12
|
+
export { coreNodes, developerRecord, buildAcceptanceReport, MAX_DEEPEN_PASSES } from './graph/nodes.js';
|
|
13
|
+
export { DEFAULT_REVIEW_POLICY, REVIEW_ASPECTS, evaluateReview, resolveReviewPolicy } from './graph/review-policy.js';
|
|
14
|
+
export { createRoleInvoker } from './graph/roles.js';
|
|
15
|
+
export { parseAgentObject } from './graph/artifacts.js';
|
|
16
|
+
export { FileCheckpointSaver } from './graph-checkpointer.js';
|
|
17
|
+
export { ARCHITECT_OUTPUT_SCHEMA, DEVELOPER_OUTPUT_SCHEMA, REVIEW_OUTPUT_SCHEMA, ROLE_INSTRUCTIONS_VERSION, rolePromptDefaults, correctionInstructions, deepenInstructions, repairInstructions, roleInstructions, } from './prompts.js';
|
|
18
|
+
export { OPENSPEC_VERSION, ROLE_SKILLS } from './openspec.js';
|
|
19
|
+
export * from './efficiency-summary.js';
|
|
20
|
+
export { readVerificationEvidence } from '../installer/runtime/pipeline-state.js';
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent-runtime/index.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,qBAAqB,EAAE,iBAAiB,EAAqB,MAAM,kBAAkB,CAAA;AAC1H,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,cAAc,EAAE,mBAAmB,EAAwC,MAAM,0BAA0B,CAAA;AAC3J,OAAO,EAAE,iBAAiB,EAA+F,MAAM,kBAAkB,CAAA;AACjJ,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAgD,MAAM,yBAAyB,CAAA;AAC3G,OAAO,EACL,uBAAuB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,yBAAyB,EACjG,kBAAkB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,gBAAgB,GACrG,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAA4B,MAAM,eAAe,CAAA;AAEvF,cAAc,yBAAyB,CAAA;AACvC,OAAO,EAAE,wBAAwB,EAAkC,MAAM,wCAAwC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type AgentRequest, type AgentResult } from './executor-types.js';
|
|
2
|
+
import { type CliProcessRunner } from './cli-process.js';
|
|
3
|
+
/** Native ACP v1 keeps Kimi 0.27 read-only roles usable without a platform skill or a model call during capability negotiation. */
|
|
4
|
+
export declare function executeKimiReadonlyAcp(request: AgentRequest, options?: {
|
|
5
|
+
runProcess?: CliProcessRunner;
|
|
6
|
+
env?: NodeJS.ProcessEnv;
|
|
7
|
+
openspecBridge?: {
|
|
8
|
+
command: string;
|
|
9
|
+
args: string[];
|
|
10
|
+
};
|
|
11
|
+
}): Promise<AgentResult>;
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { toolEvent } from './tool-event.js';
|
|
2
|
+
import { normalizeKimiCliModel } from '../installer/runtime/kimi.js';
|
|
3
|
+
import { AgentExecutionError, unknownUsage, validateAgentRequest } from './executor-types.js';
|
|
4
|
+
import { runCliProcess } from './cli-process.js';
|
|
5
|
+
import { parseStructuredText } from './openai-executor.js';
|
|
6
|
+
import { WorkspaceTools } from './workspace-tools.js';
|
|
7
|
+
function record(value) { return value && typeof value === 'object' && !Array.isArray(value) ? value : {}; }
|
|
8
|
+
/** Native ACP v1 keeps Kimi 0.27 read-only roles usable without a platform skill or a model call during capability negotiation. */
|
|
9
|
+
export async function executeKimiReadonlyAcp(request, options = {}) {
|
|
10
|
+
validateAgentRequest(request);
|
|
11
|
+
if (request.role === 'developer' && !options.openspecBridge)
|
|
12
|
+
throw new AgentExecutionError('Read-only ACP transport cannot execute developer roles', 'invalid_request');
|
|
13
|
+
if (request.maxCostUsd !== undefined)
|
|
14
|
+
throw new AgentExecutionError('Kimi cannot enforce a strict USD cap', 'cost_limit_unsupported');
|
|
15
|
+
if (request.maxTokens !== undefined)
|
|
16
|
+
throw new AgentExecutionError('Kimi 0.27 ACP does not report authoritative token usage. Remove the token cap or choose another provider for this role.', 'usage_unavailable');
|
|
17
|
+
const readOnly = request.role !== 'developer';
|
|
18
|
+
const mode = readOnly ? 'plan' : 'auto';
|
|
19
|
+
const tools = new WorkspaceTools(request.cwd, request.allowedRoots, request.role);
|
|
20
|
+
let transport, nextId = 0, sessionId, text = '', completed = false, turns = 0, permissionDenied = false;
|
|
21
|
+
const calls = new Map();
|
|
22
|
+
const send = (method, params, success) => {
|
|
23
|
+
const id = ++nextId;
|
|
24
|
+
calls.set(id, { method, success });
|
|
25
|
+
transport.send(JSON.stringify({ jsonrpc: '2.0', id, method, params }));
|
|
26
|
+
};
|
|
27
|
+
const prompt = () => {
|
|
28
|
+
send('session/prompt', { sessionId, prompt: [{ type: 'text', text: request.prompt }] }, result => {
|
|
29
|
+
if (result.stopReason !== 'end_turn' || !text.trim())
|
|
30
|
+
throw new AgentExecutionError('Kimi ACP did not return a complete final result', 'incomplete_response');
|
|
31
|
+
if (permissionDenied)
|
|
32
|
+
throw new AgentExecutionError('Kimi requested a forbidden operation during a read-only role', 'tool_policy_violation');
|
|
33
|
+
completed = true;
|
|
34
|
+
transport.complete();
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
const selectMode = () => {
|
|
38
|
+
send('session/set_mode', { sessionId, modeId: mode }, () => {
|
|
39
|
+
if (request.model)
|
|
40
|
+
send('session/set_config_option', { sessionId, configId: 'model', value: normalizeKimiCliModel(request.model) }, prompt);
|
|
41
|
+
else
|
|
42
|
+
prompt();
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
const onMessage = (line) => {
|
|
46
|
+
let message;
|
|
47
|
+
try {
|
|
48
|
+
message = record(JSON.parse(line));
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
throw new AgentExecutionError('Kimi emitted malformed ACP framing', 'invalid_response');
|
|
52
|
+
}
|
|
53
|
+
if (message.jsonrpc !== '2.0')
|
|
54
|
+
throw new AgentExecutionError('Kimi emitted an invalid JSON-RPC envelope', 'invalid_response');
|
|
55
|
+
if (typeof message.method === 'string') {
|
|
56
|
+
const params = record(message.params);
|
|
57
|
+
if (message.method === 'session/update' && message.id === undefined) {
|
|
58
|
+
if (!sessionId || params.sessionId !== sessionId)
|
|
59
|
+
return;
|
|
60
|
+
const update = record(params.update);
|
|
61
|
+
if (update.sessionUpdate === 'agent_message_chunk') {
|
|
62
|
+
const content = record(update.content);
|
|
63
|
+
if (content.type === 'text' && typeof content.text === 'string') {
|
|
64
|
+
text += content.text;
|
|
65
|
+
request.onEvent?.({ kind: 'text', text: content.text });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (update.sessionUpdate === 'tool_call') {
|
|
69
|
+
// Progress text remains in onEvent; structured results contain only
|
|
70
|
+
// the assistant turn after the last tool invocation.
|
|
71
|
+
text = '';
|
|
72
|
+
turns++;
|
|
73
|
+
if (turns > (request.maxTurns ?? 100))
|
|
74
|
+
throw new AgentExecutionError('Kimi ACP exceeded its tool limit', 'max_turns');
|
|
75
|
+
request.onEvent?.(toolEvent(typeof update.title === 'string' ? update.title : 'kimi-tool', { ...record(update.rawInput), paths: Array.isArray(update.locations) ? update.locations.map(location => record(location).path) : [] }));
|
|
76
|
+
}
|
|
77
|
+
if (update.sessionUpdate === 'current_mode_update' && update.currentModeId !== mode)
|
|
78
|
+
throw new AgentExecutionError('Kimi left its read-only mode', 'tool_policy_violation');
|
|
79
|
+
if (update.sessionUpdate === 'config_option_update' && Array.isArray(update.configOptions)) {
|
|
80
|
+
const mode = update.configOptions.map(record).find(option => option.id === 'mode');
|
|
81
|
+
if (mode && mode.currentValue !== (readOnly ? 'plan' : 'auto'))
|
|
82
|
+
throw new AgentExecutionError('Kimi left its read-only mode', 'tool_policy_violation');
|
|
83
|
+
}
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (message.id === undefined)
|
|
87
|
+
return;
|
|
88
|
+
const respond = (result) => transport.send(JSON.stringify({ jsonrpc: '2.0', id: message.id, result }));
|
|
89
|
+
const deny = () => {
|
|
90
|
+
permissionDenied = true;
|
|
91
|
+
transport.send(JSON.stringify({ jsonrpc: '2.0', id: message.id, error: { code: -32603, message: 'Operation unavailable in a read-only Specrails role' } }));
|
|
92
|
+
};
|
|
93
|
+
if (!sessionId || params.sessionId !== sessionId) {
|
|
94
|
+
deny();
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (message.method === 'fs/read_text_file') {
|
|
98
|
+
let content;
|
|
99
|
+
try {
|
|
100
|
+
if (typeof params.path !== 'string')
|
|
101
|
+
throw new Error('Missing path');
|
|
102
|
+
content = tools.execute('read_file', { path: params.path });
|
|
103
|
+
if (params.line !== undefined || params.limit !== undefined) {
|
|
104
|
+
const start = params.line ?? 1, limit = params.limit ?? Number.MAX_SAFE_INTEGER;
|
|
105
|
+
if (!Number.isSafeInteger(start) || start < 1 || !Number.isSafeInteger(limit) || limit < 1)
|
|
106
|
+
throw new Error('Invalid line range');
|
|
107
|
+
content = content.split('\n').slice(start - 1, start - 1 + limit).join('\n');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
deny();
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
respond({ content });
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (message.method === 'session/request_permission') {
|
|
118
|
+
// Only an explicit read/search of a validated workspace path may be approved.
|
|
119
|
+
const tool = record(params.toolCall), input = record(tool.rawInput);
|
|
120
|
+
const file = input.path ?? input.file_path;
|
|
121
|
+
const choices = Array.isArray(params.options) ? params.options.map(record) : [];
|
|
122
|
+
const allow = choices.find(option => option.kind === 'allow_once');
|
|
123
|
+
if (options.openspecBridge && ['mcp__specrails_openspec__workflow', 'mcp__specrails_openspec__read_verification_evidence'].includes(typeof tool.title === 'string' ? tool.title : '') && typeof allow?.optionId === 'string') {
|
|
124
|
+
respond({ outcome: { outcome: 'selected', optionId: allow.optionId } });
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (!readOnly && typeof allow?.optionId === 'string') {
|
|
128
|
+
respond({ outcome: { outcome: 'selected', optionId: allow.optionId } });
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (['read', 'search'].includes(String(tool.kind)) && typeof file === 'string' && typeof allow?.optionId === 'string') {
|
|
132
|
+
try {
|
|
133
|
+
tools.execute(tool.kind === 'read' ? 'read_file' : 'list_files', { path: file });
|
|
134
|
+
respond({ outcome: { outcome: 'selected', optionId: allow.optionId } });
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
catch { /* reject an unscoped or unsupported read */ }
|
|
138
|
+
}
|
|
139
|
+
// No pre-existing provider permission can authorize a write/shell/mode switch for this role.
|
|
140
|
+
permissionDenied = true;
|
|
141
|
+
respond({ outcome: { outcome: 'cancelled' } });
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
deny();
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
if (typeof message.id !== 'number')
|
|
148
|
+
throw new AgentExecutionError('Kimi returned an unexpected ACP response', 'invalid_response');
|
|
149
|
+
const call = calls.get(message.id);
|
|
150
|
+
if (!call)
|
|
151
|
+
throw new AgentExecutionError('Kimi returned an unknown ACP response id', 'invalid_response');
|
|
152
|
+
calls.delete(message.id);
|
|
153
|
+
if (message.error)
|
|
154
|
+
throw new AgentExecutionError(`Kimi ACP ${call.method} failed. Check CLI capabilities, authentication and the configured model.`, 'provider_execution_error');
|
|
155
|
+
if (!message.result || typeof message.result !== 'object')
|
|
156
|
+
throw new AgentExecutionError('Kimi ACP response is missing its result', 'invalid_response');
|
|
157
|
+
call.success(record(message.result));
|
|
158
|
+
};
|
|
159
|
+
const result = await (options.runProcess ?? runCliProcess)({ command: 'kimi', args: ['acp'] }, {
|
|
160
|
+
cwd: tools.cwd, signal: request.signal, timeoutMs: request.timeoutMs ?? 15 * 60_000, env: options.env, onLine: onMessage,
|
|
161
|
+
duplex: control => {
|
|
162
|
+
transport = control;
|
|
163
|
+
send('initialize', { protocolVersion: 1, clientInfo: { name: 'specrails-core', version: '1' }, clientCapabilities: { fs: { readTextFile: readOnly, writeTextFile: readOnly }, terminal: readOnly } }, initialized => {
|
|
164
|
+
if (initialized.protocolVersion !== 1)
|
|
165
|
+
throw new AgentExecutionError('Kimi ACP protocol version is unsupported', 'provider_capability_unsupported');
|
|
166
|
+
const capabilities = record(record(initialized.agentCapabilities).sessionCapabilities);
|
|
167
|
+
if (tools.roots.length > 1 && capabilities.additionalDirectories === undefined)
|
|
168
|
+
throw new AgentExecutionError('This Kimi ACP version cannot expose multiple repositories. Upgrade Kimi or use another provider for this read-only role.', 'provider_capability_unsupported');
|
|
169
|
+
send('session/new', { cwd: tools.cwd, mcpServers: options.openspecBridge ? [{ name: 'specrails_openspec', ...options.openspecBridge, env: [] }] : [], ...(tools.roots.length > 1 ? { additionalDirectories: tools.roots.filter(root => root !== tools.cwd) } : {}) }, session => {
|
|
170
|
+
if (typeof session.sessionId !== 'string' || !session.sessionId)
|
|
171
|
+
throw new AgentExecutionError('Kimi ACP returned no session id', 'invalid_response');
|
|
172
|
+
sessionId = session.sessionId;
|
|
173
|
+
const modes = record(session.modes);
|
|
174
|
+
const modeOption = Array.isArray(session.configOptions) ? session.configOptions.map(record).find(option => option.id === 'mode') : undefined;
|
|
175
|
+
const available = Array.isArray(modes.availableModes) ? modes.availableModes.map(record) : [];
|
|
176
|
+
const modeValues = Array.isArray(modeOption?.options) ? modeOption.options.map(record) : [];
|
|
177
|
+
if (!available.some(item => item.id === mode) && !modeValues.some(item => item.value === mode))
|
|
178
|
+
throw new AgentExecutionError('Kimi ACP does not expose enforced plan mode; upgrade Kimi Code before using a read-only role', 'provider_capability_unsupported');
|
|
179
|
+
selectMode();
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
},
|
|
183
|
+
});
|
|
184
|
+
if (result.exitCode !== 0 || !completed)
|
|
185
|
+
throw new AgentExecutionError('Kimi ACP exited before completing the role', 'incomplete_response');
|
|
186
|
+
const usage = unknownUsage();
|
|
187
|
+
request.onEvent?.({ kind: 'usage', usage });
|
|
188
|
+
return { text, usage, sessionId, structured: parseStructuredText(text) };
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=kimi-acp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kimi-acp.js","sourceRoot":"","sources":["../../src/agent-runtime/kimi-acp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type AgentExecutor, type AgentLimits, type AgentRequest, type AgentResult, type RuntimeProviderConfig } from './executor-types.js';
|
|
2
|
+
type ApiProvider = Extract<RuntimeProviderConfig, {
|
|
3
|
+
kind: 'openai-compatible';
|
|
4
|
+
}>;
|
|
5
|
+
export interface OpenAICompatibleOptions {
|
|
6
|
+
fetch?: typeof globalThis.fetch;
|
|
7
|
+
env?: NodeJS.ProcessEnv;
|
|
8
|
+
}
|
|
9
|
+
export declare function parseStructuredText(text: string): Record<string, unknown> | undefined;
|
|
10
|
+
/** No SDK, gateway, tracing backend, paid probe, or mandatory key. */
|
|
11
|
+
export declare class OpenAICompatibleExecutor implements AgentExecutor {
|
|
12
|
+
private readonly provider;
|
|
13
|
+
private readonly options;
|
|
14
|
+
constructor(provider: ApiProvider, options?: OpenAICompatibleOptions);
|
|
15
|
+
capabilities(): {
|
|
16
|
+
continuation: "unsupported";
|
|
17
|
+
effortSupport: "unsupported";
|
|
18
|
+
supportedEfforts: never[];
|
|
19
|
+
transport: string;
|
|
20
|
+
observedModel: boolean;
|
|
21
|
+
observedEffort: boolean;
|
|
22
|
+
};
|
|
23
|
+
validateLimits(limits: AgentLimits): void;
|
|
24
|
+
execute(request: AgentRequest): Promise<AgentResult>;
|
|
25
|
+
}
|
|
26
|
+
export {};
|