@keel_flow/cli 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +170 -0
  3. package/dist/build.d.ts +57 -0
  4. package/dist/build.d.ts.map +1 -0
  5. package/dist/build.js +350 -0
  6. package/dist/build.js.map +1 -0
  7. package/dist/claude-auth.d.ts +16 -0
  8. package/dist/claude-auth.d.ts.map +1 -0
  9. package/dist/claude-auth.js +75 -0
  10. package/dist/claude-auth.js.map +1 -0
  11. package/dist/doctor.d.ts +18 -0
  12. package/dist/doctor.d.ts.map +1 -0
  13. package/dist/doctor.js +547 -0
  14. package/dist/doctor.js.map +1 -0
  15. package/dist/git.d.ts +4 -0
  16. package/dist/git.d.ts.map +1 -0
  17. package/dist/git.js +138 -0
  18. package/dist/git.js.map +1 -0
  19. package/dist/goals.d.ts +34 -0
  20. package/dist/goals.d.ts.map +1 -0
  21. package/dist/goals.js +218 -0
  22. package/dist/goals.js.map +1 -0
  23. package/dist/index.d.ts +3 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +1015 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/kb-reindex.d.ts +31 -0
  28. package/dist/kb-reindex.d.ts.map +1 -0
  29. package/dist/kb-reindex.js +71 -0
  30. package/dist/kb-reindex.js.map +1 -0
  31. package/dist/keys.d.ts +26 -0
  32. package/dist/keys.d.ts.map +1 -0
  33. package/dist/keys.js +209 -0
  34. package/dist/keys.js.map +1 -0
  35. package/dist/learn.d.ts +37 -0
  36. package/dist/learn.d.ts.map +1 -0
  37. package/dist/learn.js +274 -0
  38. package/dist/learn.js.map +1 -0
  39. package/dist/lifecycle.d.ts +27 -0
  40. package/dist/lifecycle.d.ts.map +1 -0
  41. package/dist/lifecycle.js +193 -0
  42. package/dist/lifecycle.js.map +1 -0
  43. package/dist/load-ts.d.ts +2 -0
  44. package/dist/load-ts.d.ts.map +1 -0
  45. package/dist/load-ts.js +20 -0
  46. package/dist/load-ts.js.map +1 -0
  47. package/dist/map-repo.d.ts +15 -0
  48. package/dist/map-repo.d.ts.map +1 -0
  49. package/dist/map-repo.js +36 -0
  50. package/dist/map-repo.js.map +1 -0
  51. package/dist/memory.d.ts +23 -0
  52. package/dist/memory.d.ts.map +1 -0
  53. package/dist/memory.js +84 -0
  54. package/dist/memory.js.map +1 -0
  55. package/dist/orchestrate.d.ts +61 -0
  56. package/dist/orchestrate.d.ts.map +1 -0
  57. package/dist/orchestrate.js +556 -0
  58. package/dist/orchestrate.js.map +1 -0
  59. package/dist/reflect.d.ts +12 -0
  60. package/dist/reflect.d.ts.map +1 -0
  61. package/dist/reflect.js +67 -0
  62. package/dist/reflect.js.map +1 -0
  63. package/dist/report.d.ts +3 -0
  64. package/dist/report.d.ts.map +1 -0
  65. package/dist/report.js +56 -0
  66. package/dist/report.js.map +1 -0
  67. package/dist/rules.d.ts +16 -0
  68. package/dist/rules.d.ts.map +1 -0
  69. package/dist/rules.js +65 -0
  70. package/dist/rules.js.map +1 -0
  71. package/dist/telemetry-helper.d.ts +12 -0
  72. package/dist/telemetry-helper.d.ts.map +1 -0
  73. package/dist/telemetry-helper.js +40 -0
  74. package/dist/telemetry-helper.js.map +1 -0
  75. package/dist/up.d.ts +97 -0
  76. package/dist/up.d.ts.map +1 -0
  77. package/dist/up.js +656 -0
  78. package/dist/up.js.map +1 -0
  79. package/package.json +58 -0
@@ -0,0 +1,556 @@
1
+ import { existsSync, readFileSync, writeFileSync, statSync, readdirSync, mkdirSync } from "fs";
2
+ import { resolve, join, isAbsolute, relative, dirname } from "path";
3
+ import { pathToFileURL, fileURLToPath } from "url";
4
+ import { spawnSync, execSync } from "child_process";
5
+ import { createInterface } from "readline";
6
+ import { z } from "zod";
7
+ import pc from "picocolors";
8
+ import { createArchitecture, defineTool, evaluateCommand, verify, } from "@keel_flow/core";
9
+ import { createProvider, createSpecChecker, dispatchSubAgent, runAgent, } from "@keel_flow/runtime";
10
+ import { resolvePolicy, isAllowedCommand as policyIsAllowedCommand, isProtectedWritePath as policyIsProtectedWritePath, } from "@keel_flow/agent-policy";
11
+ import { createCliEmitter } from "./telemetry-helper.js";
12
+ import { importTsConfig } from "./load-ts.js";
13
+ import { buildDiffFromGit } from "./git.js";
14
+ import { loadCommandRules, patternLabel } from "./rules.js";
15
+ export function isProtectedWritePath(targetPath, cwd) {
16
+ return policyIsProtectedWritePath(targetPath, cwd, resolvePolicy("guarded"));
17
+ }
18
+ export function isAllowedCommand(commandLine, _options) {
19
+ return policyIsAllowedCommand(commandLine, resolvePolicy("guarded"));
20
+ }
21
+ export function isPathSafe(targetPath, cwd) {
22
+ if (isAbsolute(targetPath)) {
23
+ const rel = relative(cwd, targetPath);
24
+ if (rel.startsWith("..") || isAbsolute(rel))
25
+ return false;
26
+ return true;
27
+ }
28
+ if (targetPath.split(/[/\\]/).includes(".."))
29
+ return false;
30
+ const abs = resolve(cwd, targetPath);
31
+ const rel = relative(cwd, abs);
32
+ if (rel.startsWith("..") || isAbsolute(rel))
33
+ return false;
34
+ return true;
35
+ }
36
+ function resolveSafePath(targetPath, cwd) {
37
+ if (!isPathSafe(targetPath, cwd)) {
38
+ throw new Error(`Path escapes working directory: ${targetPath}`);
39
+ }
40
+ return isAbsolute(targetPath) ? targetPath : resolve(cwd, targetPath);
41
+ }
42
+ export async function resolveProviderConfig(args) {
43
+ const fetchImpl = args.fetchImpl ?? fetch;
44
+ const workspaceUrl = process.env["KEEL_WORKSPACE_URL"];
45
+ const workspaceId = process.env["KEEL_WORKSPACE_ID"];
46
+ let apiKey;
47
+ let baseURL;
48
+ if (workspaceUrl && workspaceId) {
49
+ try {
50
+ const url = `${workspaceUrl.replace(/\/$/, "")}/api/workspace/${workspaceId}/secrets`;
51
+ const res = await fetchImpl(url, { headers: { Accept: "application/json" } });
52
+ if (res.ok) {
53
+ const body = (await res.json());
54
+ const secrets = (body["secrets"] ?? body);
55
+ if (args.providerKind === "anthropic") {
56
+ apiKey = secrets["ANTHROPIC_API_KEY"];
57
+ }
58
+ else {
59
+ apiKey = secrets["OPENAI_API_KEY"] ?? secrets["DEEPSEEK_API_KEY"];
60
+ baseURL = secrets["OPENAI_BASE_URL"] ?? secrets["PROVIDER_BASE_URL"];
61
+ }
62
+ }
63
+ }
64
+ catch {
65
+ // fall through to env
66
+ }
67
+ }
68
+ if (!apiKey && args.providerKind !== "claude-bridge") {
69
+ if (args.providerKind === "anthropic") {
70
+ apiKey = process.env["ANTHROPIC_API_KEY"];
71
+ }
72
+ else {
73
+ apiKey = process.env["OPENAI_API_KEY"];
74
+ baseURL = baseURL ?? process.env["OPENAI_BASE_URL"];
75
+ }
76
+ }
77
+ if (!apiKey && args.providerKind !== "claude-bridge") {
78
+ const setupHint = "Run `keel setup` or set the relevant API key env var.";
79
+ if (args.providerKind === "anthropic") {
80
+ throw new Error(`No Anthropic key found. ${setupHint} (ANTHROPIC_API_KEY)`);
81
+ }
82
+ throw new Error(`No OpenAI-compatible key found. ${setupHint} (OPENAI_API_KEY)`);
83
+ }
84
+ const provider = createProvider({
85
+ kind: args.providerKind,
86
+ apiKey: apiKey ?? "",
87
+ ...(baseURL ? { baseURL } : {}),
88
+ ...(args.model ? { defaultModel: args.model } : {}),
89
+ });
90
+ return { kind: args.providerKind, provider, model: args.model };
91
+ }
92
+ function findSkillPath(cwd) {
93
+ const candidates = [
94
+ join(cwd, "packages/pi-keel/SKILL.md"),
95
+ join(cwd, "node_modules/@keel_flow/pi-keel/SKILL.md"),
96
+ ];
97
+ for (const c of candidates) {
98
+ if (existsSync(c))
99
+ return c;
100
+ }
101
+ const here = dirname(fileURLToPath(import.meta.url));
102
+ const local = join(here, "..", "..", "pi-keel", "SKILL.md");
103
+ if (existsSync(local))
104
+ return local;
105
+ throw new Error("Could not locate pi-keel SKILL.md (looked under packages/pi-keel and node_modules/@keel_flow/pi-keel).");
106
+ }
107
+ function loadOrchestratorSkill(cwd) {
108
+ return readFileSync(findSkillPath(cwd), "utf-8");
109
+ }
110
+ export function renderCommandRulesPrompt(ruleSet) {
111
+ if (ruleSet.rules.length === 0)
112
+ return "";
113
+ const lines = ruleSet.rules.map((r) => {
114
+ const verb = r.decision === "forbidden" ? "FORBIDDEN" : "DISCOURAGED";
115
+ return `- ${verb}: \`${patternLabel(r.pattern)}\` — ${r.justification}`;
116
+ });
117
+ return (`\nProject command rules (declared in rules/commands.ts — honor them; forbidden commands are blocked by run_bash):\n` +
118
+ `${lines.join("\n")}\n\n`);
119
+ }
120
+ export function buildOrchestrateTools(args) {
121
+ const { cwd, commandRules, dryRun, architecture, principlesRegistry, provider, model, parentSessionId, parentEmitter, policy, sessionBaseRef, } = args;
122
+ const readFileTool = defineTool({
123
+ id: "read_file",
124
+ description: "Read the contents of a file under the working directory.",
125
+ inputSchema: z.object({ path: z.string() }),
126
+ handler: async ({ path }) => {
127
+ const abs = resolveSafePath(path, cwd);
128
+ if (!existsSync(abs))
129
+ return { error: `File not found: ${path}` };
130
+ const stat = statSync(abs);
131
+ if (!stat.isFile())
132
+ return { error: `Not a file: ${path}` };
133
+ const content = readFileSync(abs, "utf-8");
134
+ return { path, content };
135
+ },
136
+ });
137
+ const writeFileTool = defineTool({
138
+ id: "write_file",
139
+ description: "Write or overwrite a file under the working directory. Refuses to write package.json, lockfiles, root tsconfig/vitest/eslint config files, and anything under .git/ — these are code-execution vectors for the allowlisted build commands.",
140
+ inputSchema: z.object({ path: z.string(), content: z.string() }),
141
+ handler: async ({ path, content }) => {
142
+ const abs = resolveSafePath(path, cwd);
143
+ if (policyIsProtectedWritePath(path, cwd, policy)) {
144
+ throw new Error(`Refusing to write protected path: ${path}`);
145
+ }
146
+ if (dryRun) {
147
+ return {
148
+ dryRun: true,
149
+ message: `would write ${Buffer.byteLength(content, "utf-8")} bytes to ${path}`,
150
+ };
151
+ }
152
+ mkdirSync(dirname(abs), { recursive: true });
153
+ writeFileSync(abs, content, "utf-8");
154
+ return { path, bytes: Buffer.byteLength(content, "utf-8") };
155
+ },
156
+ });
157
+ const listDirTool = defineTool({
158
+ id: "list_dir",
159
+ description: "List directory entries under the working directory.",
160
+ inputSchema: z.object({ path: z.string().default(".") }),
161
+ handler: async ({ path }) => {
162
+ const abs = resolveSafePath(path, cwd);
163
+ if (!existsSync(abs))
164
+ return { error: `Not found: ${path}` };
165
+ const stat = statSync(abs);
166
+ if (!stat.isDirectory())
167
+ return { error: `Not a directory: ${path}` };
168
+ const entries = readdirSync(abs).map((name) => {
169
+ const childStat = statSync(join(abs, name));
170
+ return { name, kind: childStat.isDirectory() ? "dir" : "file" };
171
+ });
172
+ return { path, entries };
173
+ },
174
+ });
175
+ const runBashTool = defineTool({
176
+ id: "run_bash",
177
+ description: "Run a shell command. Allowlisted to safe subcommands only: git {status,diff,log,rev-parse,show,branch,fetch}, pnpm {test,lint,typecheck,build}, tsc, vitest run, and eslint. No shell metacharacters. Code/loader-injection flags (-c/--config/--reporter/--parser/--rulesdir/--require/--loader/--import/-e/--eval/--exec/--upload-pack and the git -C/core.fsmonitor/protocol.ext/alias.* config vectors) are rejected on every command. node and pnpm exec/dlx/run are inherently arbitrary-code-execution and are always rejected here.",
178
+ inputSchema: z.object({
179
+ command: z.string(),
180
+ timeoutMs: z.number().int().positive().max(300_000).optional(),
181
+ }),
182
+ handler: async ({ command, timeoutMs }) => {
183
+ const verdict = evaluateCommand(commandRules, command);
184
+ if (verdict && verdict.decision === "forbidden") {
185
+ return {
186
+ error: `Command forbidden by project rule (${patternLabel(verdict.pattern)}): ${verdict.justification}`,
187
+ };
188
+ }
189
+ if (!policyIsAllowedCommand(command, policy)) {
190
+ return { error: `Command rejected by allowlist: ${command}` };
191
+ }
192
+ const parts = command.trim().split(/\s+/);
193
+ const cmd = parts[0];
194
+ const rest = parts.slice(1);
195
+ const out = spawnSync(cmd, rest, {
196
+ cwd,
197
+ encoding: "utf-8",
198
+ timeout: timeoutMs ?? 60_000,
199
+ });
200
+ return {
201
+ exitCode: out.status,
202
+ stdout: (out.stdout ?? "").slice(0, 4096),
203
+ stderr: (out.stderr ?? "").slice(0, 4096),
204
+ };
205
+ },
206
+ });
207
+ const runVerifyTool = defineTool({
208
+ id: "run_verify",
209
+ description: "Run the Keel verify gate (arch + principles + tests + lint).",
210
+ inputSchema: z.object({
211
+ spec: z.string().optional(),
212
+ }),
213
+ handler: async ({ spec }) => {
214
+ const specChecker = spec
215
+ ? createSpecChecker({ provider, ...(model ? { model } : {}) })
216
+ : undefined;
217
+ let toolDiff = { files: [] };
218
+ try {
219
+ const ref = sessionBaseRef ?? "HEAD";
220
+ toolDiff = buildDiffFromGit(ref, cwd);
221
+ }
222
+ catch {
223
+ // not a git repo or empty history — fall through with empty diff
224
+ }
225
+ const archPath = join(cwd, "architecture/data.ts");
226
+ const toolArchSource = existsSync(archPath) ? readFileSync(archPath, "utf-8") : "";
227
+ const result = await verify({
228
+ diff: toolDiff,
229
+ architecture,
230
+ architectureSource: toolArchSource,
231
+ principles: principlesRegistry,
232
+ ...(specChecker ? { specChecker } : {}),
233
+ ...(spec ? { specSummary: spec } : {}),
234
+ options: { cwd },
235
+ });
236
+ return {
237
+ exitCode: result.exitCode,
238
+ checks: Object.fromEntries(Object.entries(result.checks).map(([k, v]) => [
239
+ k,
240
+ { passed: v.passed, violations: v.violations.length },
241
+ ])),
242
+ };
243
+ },
244
+ });
245
+ const readArchitectureTool = defineTool({
246
+ id: "read_architecture",
247
+ description: "Return a compact summary of the architecture map (layers, nodes, contexts).",
248
+ inputSchema: z.object({}),
249
+ handler: async () => ({
250
+ layers: architecture.layers.map((l) => ({ id: l.id, label: l.label })),
251
+ nodes: architecture.nodes.map((n) => ({
252
+ id: n.id,
253
+ label: n.label,
254
+ layer: n.layer,
255
+ description: n.description,
256
+ })),
257
+ contexts: architecture.contexts.map((c) => ({
258
+ id: c.id,
259
+ label: c.label,
260
+ nodeIds: c.nodeIds,
261
+ })),
262
+ }),
263
+ });
264
+ const readPrinciplesTool = defineTool({
265
+ id: "read_principles",
266
+ description: "List active principles, optionally filtered by severity.",
267
+ inputSchema: z.object({
268
+ severity: z.enum(["critical", "warning", "info"]).optional(),
269
+ }),
270
+ handler: async ({ severity }) => {
271
+ let principles = principlesRegistry.all();
272
+ if (severity)
273
+ principles = principles.filter((p) => p.severity === severity);
274
+ return {
275
+ principles: principles.map((p) => ({
276
+ id: p.id,
277
+ description: p.description,
278
+ severity: p.severity,
279
+ rationale: p.rationale,
280
+ })),
281
+ };
282
+ },
283
+ });
284
+ const dispatchSubAgentTool = defineTool({
285
+ id: "dispatch_subagent",
286
+ description: "Dispatch a sub-agent scoped to a single bounded context. The sub-agent gets a system prompt instructing it to stay within that context.",
287
+ inputSchema: z.object({
288
+ context: z.string(),
289
+ task: z.string(),
290
+ scope: z.string().optional(),
291
+ }),
292
+ handler: async ({ context, task, scope }) => {
293
+ args.onDecompose();
294
+ const contextEntry = architecture.contexts.find((c) => c.id === context);
295
+ const nodeList = contextEntry?.nodeIds.join(", ") ?? "(unknown context)";
296
+ const childTools = [
297
+ readFileTool,
298
+ writeFileTool,
299
+ listDirTool,
300
+ runBashTool,
301
+ readArchitectureTool,
302
+ readPrinciplesTool,
303
+ ];
304
+ const subSystemPrompt = `You are a Keel sub-agent scoped to the bounded context "${context}".\n` +
305
+ `Nodes you may edit: ${nodeList}.\n` +
306
+ `Scope hint: ${scope ?? "(none)"}\n` +
307
+ `Stay within this context. If you discover cross-context work, surface it back to the orchestrator instead of editing nodes outside your scope.\n` +
308
+ `When you change a node's keyFiles, update architecture/data.ts in the same change.`;
309
+ const result = await dispatchSubAgent({
310
+ parentSessionId,
311
+ context,
312
+ task,
313
+ systemPrompt: subSystemPrompt,
314
+ tools: childTools,
315
+ provider,
316
+ ...(model ? { model } : {}),
317
+ ...(parentEmitter ? { parentTelemetry: parentEmitter } : {}),
318
+ });
319
+ return {
320
+ childSessionId: result.childSessionId,
321
+ finalMessage: result.finalMessage,
322
+ iterations: result.iterations,
323
+ toolCalls: result.toolCalls,
324
+ stopReason: result.stopReason,
325
+ };
326
+ },
327
+ });
328
+ return [
329
+ readFileTool,
330
+ writeFileTool,
331
+ listDirTool,
332
+ runBashTool,
333
+ runVerifyTool,
334
+ readArchitectureTool,
335
+ readPrinciplesTool,
336
+ dispatchSubAgentTool,
337
+ ];
338
+ }
339
+ async function promptStdinLine(question) {
340
+ return new Promise((resolveLine) => {
341
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
342
+ rl.question(question, (answer) => {
343
+ rl.close();
344
+ resolveLine(answer);
345
+ });
346
+ });
347
+ }
348
+ export async function runOrchestrate(opts) {
349
+ const cwd = resolve(opts.cwd ?? process.cwd());
350
+ const maxIterations = opts.maxIterations ?? 12;
351
+ const dryRun = opts.dryRun ?? false;
352
+ const noQuestions = opts.noQuestions ?? false;
353
+ const providerKindRaw = (opts.provider ?? process.env["KEEL_PROVIDER_KIND"] ?? "anthropic");
354
+ if (providerKindRaw !== "anthropic" && providerKindRaw !== "openai-compatible" && providerKindRaw !== "claude-bridge") {
355
+ throw new Error(`Unknown --provider kind: ${providerKindRaw} (expected anthropic | openai-compatible | claude-bridge)`);
356
+ }
357
+ const providerKind = providerKindRaw;
358
+ const { emitter, sessionId } = createCliEmitter({ command: "orchestrate", cwd });
359
+ emitter?.emit({
360
+ sessionId,
361
+ parentEventId: null,
362
+ workspaceId: null,
363
+ triggeredBy: { kind: "user" },
364
+ kind: "session.start",
365
+ payload: { command: "orchestrate", task: opts.task, provider: providerKind },
366
+ });
367
+ const resolved = await resolveProviderConfig({
368
+ providerKind,
369
+ ...(opts.model ? { model: opts.model } : {}),
370
+ });
371
+ const archUrl = pathToFileURL(join(cwd, "architecture/data.ts")).href;
372
+ const archMod = (await importTsConfig(archUrl));
373
+ const architecture = createArchitecture((archMod.default ?? archMod));
374
+ const principlesUrl = pathToFileURL(join(cwd, "principles/index.ts")).href;
375
+ const principlesMod = (await importTsConfig(principlesUrl));
376
+ const principlesRegistry = (principlesMod["keelPrinciples"] ?? principlesMod["default"]);
377
+ const commandRules = await loadCommandRules(cwd);
378
+ const skillContent = loadOrchestratorSkill(cwd);
379
+ const systemPrompt = skillContent +
380
+ "\n\n---\n\n" +
381
+ `You are running in the standalone \`keel orchestrate\` CLI rather than Pi. The same orchestration behavior applies. The user's task: "${opts.task}".\n` +
382
+ renderCommandRulesPrompt(commandRules) +
383
+ (noQuestions
384
+ ? "The user has passed --no-questions; do not ask clarifying questions, proceed directly."
385
+ : "Begin by asking 1-3 short clarifying questions if the task is non-trivial. End your message with a single trailing question mark when asking. When you have enough context, stop asking and begin executing.");
386
+ const policy = resolvePolicy(opts.agentTrustLevel ?? "guarded", opts.agentPolicyOverrides);
387
+ let sessionBaseRef = null;
388
+ try {
389
+ sessionBaseRef = execSync("git rev-parse HEAD", { cwd, stdio: "pipe" }).toString().trim();
390
+ }
391
+ catch {
392
+ // not a git repo or no commits yet — post-run diff will fall through to empty
393
+ }
394
+ let decomposeCount = 0;
395
+ const tools = buildOrchestrateTools({
396
+ cwd,
397
+ commandRules,
398
+ dryRun,
399
+ architecture: architecture.map,
400
+ principlesRegistry,
401
+ provider: resolved.provider,
402
+ model: opts.model,
403
+ parentSessionId: sessionId,
404
+ parentEmitter: emitter,
405
+ policy,
406
+ sessionBaseRef,
407
+ onDecompose: () => {
408
+ decomposeCount += 1;
409
+ emitter?.emit({
410
+ sessionId,
411
+ parentEventId: null,
412
+ workspaceId: null,
413
+ triggeredBy: { kind: "user" },
414
+ kind: "orchestrator.decompose",
415
+ payload: { count: decomposeCount },
416
+ });
417
+ },
418
+ });
419
+ let runPrompt = opts.task;
420
+ if (!noQuestions) {
421
+ let firstPass = await runAgent({
422
+ agent: {
423
+ id: "orchestrate",
424
+ description: "Keel orchestrator",
425
+ tools: tools.map((t) => t.config.id),
426
+ prompt: systemPrompt,
427
+ ...(opts.model ? { model: opts.model } : {}),
428
+ },
429
+ tools,
430
+ prompt: runPrompt,
431
+ provider: resolved.provider,
432
+ ...(opts.model ? { model: opts.model } : {}),
433
+ maxIterations: 2,
434
+ ...(emitter ? { telemetry: emitter } : {}),
435
+ });
436
+ let safety = 0;
437
+ while (firstPass.finalText.trim().endsWith("?") && safety < 3) {
438
+ emitter?.emit({
439
+ sessionId,
440
+ parentEventId: null,
441
+ workspaceId: null,
442
+ triggeredBy: { kind: "user" },
443
+ kind: "clarifying.question",
444
+ payload: { question: firstPass.finalText.slice(0, 500) },
445
+ });
446
+ const answer = opts.stdinAnswer
447
+ ? await opts.stdinAnswer()
448
+ : await promptStdinLine(pc.cyan(`\n${firstPass.finalText}\n> `));
449
+ runPrompt = `${runPrompt}\n\nClarification: ${answer}`;
450
+ firstPass = await runAgent({
451
+ agent: {
452
+ id: "orchestrate",
453
+ description: "Keel orchestrator",
454
+ tools: tools.map((t) => t.config.id),
455
+ prompt: systemPrompt,
456
+ ...(opts.model ? { model: opts.model } : {}),
457
+ },
458
+ tools,
459
+ prompt: runPrompt,
460
+ provider: resolved.provider,
461
+ ...(opts.model ? { model: opts.model } : {}),
462
+ maxIterations: 2,
463
+ ...(emitter ? { telemetry: emitter } : {}),
464
+ });
465
+ safety += 1;
466
+ }
467
+ }
468
+ const finalRun = await runAgent({
469
+ agent: {
470
+ id: "orchestrate",
471
+ description: "Keel orchestrator",
472
+ tools: tools.map((t) => t.config.id),
473
+ prompt: systemPrompt,
474
+ ...(opts.model ? { model: opts.model } : {}),
475
+ },
476
+ tools,
477
+ prompt: runPrompt,
478
+ provider: resolved.provider,
479
+ ...(opts.model ? { model: opts.model } : {}),
480
+ maxIterations,
481
+ ...(emitter ? { telemetry: emitter } : {}),
482
+ });
483
+ let verifyExitCode = null;
484
+ try {
485
+ let postRunDiff = { files: [] };
486
+ try {
487
+ const ref = sessionBaseRef ?? "HEAD";
488
+ postRunDiff = buildDiffFromGit(ref, cwd);
489
+ }
490
+ catch {
491
+ // diff unavailable (e.g. empty repo or no commits); fall through with empty diff
492
+ }
493
+ const verifyResult = await verify({
494
+ diff: postRunDiff,
495
+ architecture: architecture.map,
496
+ architectureSource: (() => {
497
+ const archPath = join(cwd, "architecture/data.ts");
498
+ return existsSync(archPath) ? readFileSync(archPath, "utf-8") : "";
499
+ })(),
500
+ principles: principlesRegistry,
501
+ options: { cwd },
502
+ });
503
+ verifyExitCode = verifyResult.exitCode;
504
+ emitter?.emit({
505
+ sessionId,
506
+ parentEventId: null,
507
+ workspaceId: null,
508
+ triggeredBy: { kind: "user" },
509
+ kind: "verify.run",
510
+ payload: {
511
+ exitCode: verifyResult.exitCode,
512
+ checks: Object.fromEntries(Object.entries(verifyResult.checks).map(([k, v]) => [k, v.passed])),
513
+ },
514
+ });
515
+ }
516
+ catch (err) {
517
+ verifyExitCode = 2;
518
+ emitter?.emit({
519
+ sessionId,
520
+ parentEventId: null,
521
+ workspaceId: null,
522
+ triggeredBy: { kind: "user" },
523
+ kind: "verify.run",
524
+ payload: { error: err instanceof Error ? err.message : String(err) },
525
+ });
526
+ }
527
+ const exitCode = verifyExitCode ?? 2;
528
+ emitter?.emit({
529
+ sessionId,
530
+ parentEventId: null,
531
+ workspaceId: null,
532
+ triggeredBy: { kind: "user" },
533
+ kind: "session.end",
534
+ payload: {
535
+ exitCode,
536
+ iterations: finalRun.iterations,
537
+ verifyExitCode,
538
+ },
539
+ });
540
+ if (emitter)
541
+ await emitter.close();
542
+ const result = {
543
+ sessionId,
544
+ finalMessage: finalRun.finalText,
545
+ toolCalls: finalRun.toolCalls.length,
546
+ iterations: finalRun.iterations,
547
+ verifyExitCode,
548
+ };
549
+ if (opts.json) {
550
+ const jsonPath = resolve(opts.json);
551
+ mkdirSync(dirname(jsonPath), { recursive: true });
552
+ writeFileSync(jsonPath, JSON.stringify(result, null, 2), "utf-8");
553
+ }
554
+ return result;
555
+ }
556
+ //# sourceMappingURL=orchestrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrate.js","sourceRoot":"","sources":["../src/orchestrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface ReflectRunOptions {
2
+ cwd: string;
3
+ session?: string;
4
+ auto?: boolean;
5
+ provider?: string;
6
+ model?: string;
7
+ }
8
+ export declare function runReflect(opts: ReflectRunOptions): Promise<void>;
9
+ export declare function runReflectList(opts: {
10
+ cwd: string;
11
+ }): Promise<void>;
12
+ //# sourceMappingURL=reflect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflect.d.ts","sourceRoot":"","sources":["../src/reflect.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDvE;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAazE"}