@pentoshi/clai 3.5.1 → 3.6.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 (123) hide show
  1. package/README.md +1 -1
  2. package/dist/agent/context-manager.js +8 -2
  3. package/dist/agent/context-manager.js.map +1 -1
  4. package/dist/agent/loop-guard.d.ts +2 -0
  5. package/dist/agent/loop-guard.js +39 -2
  6. package/dist/agent/loop-guard.js.map +1 -1
  7. package/dist/agent/plan-tool.d.ts +22 -0
  8. package/dist/agent/plan-tool.js +357 -44
  9. package/dist/agent/plan-tool.js.map +1 -1
  10. package/dist/agent/project-root.d.ts +33 -0
  11. package/dist/agent/project-root.js +158 -0
  12. package/dist/agent/project-root.js.map +1 -0
  13. package/dist/agent/runner.js +1119 -240
  14. package/dist/agent/runner.js.map +1 -1
  15. package/dist/agent/task-evidence.d.ts +103 -0
  16. package/dist/agent/task-evidence.js +413 -0
  17. package/dist/agent/task-evidence.js.map +1 -0
  18. package/dist/agent/tool-call-parser.d.ts +16 -0
  19. package/dist/agent/tool-call-parser.js +86 -28
  20. package/dist/agent/tool-call-parser.js.map +1 -1
  21. package/dist/agent/tool-history.d.ts +27 -0
  22. package/dist/agent/tool-history.js +150 -0
  23. package/dist/agent/tool-history.js.map +1 -0
  24. package/dist/agent/workspace-orient.d.ts +64 -0
  25. package/dist/agent/workspace-orient.js +418 -0
  26. package/dist/agent/workspace-orient.js.map +1 -0
  27. package/dist/app/controllers/session-controller.js +4 -0
  28. package/dist/app/controllers/session-controller.js.map +1 -1
  29. package/dist/commands/doctor.js +3 -0
  30. package/dist/commands/doctor.js.map +1 -1
  31. package/dist/commands/update.js +1 -1
  32. package/dist/llm/adapters/anthropic-tools.d.ts +99 -0
  33. package/dist/llm/adapters/anthropic-tools.js +225 -0
  34. package/dist/llm/adapters/anthropic-tools.js.map +1 -0
  35. package/dist/llm/adapters/gemini-tools.d.ts +54 -0
  36. package/dist/llm/adapters/gemini-tools.js +139 -0
  37. package/dist/llm/adapters/gemini-tools.js.map +1 -0
  38. package/dist/llm/adapters/ollama-tools.d.ts +22 -0
  39. package/dist/llm/adapters/ollama-tools.js +62 -0
  40. package/dist/llm/adapters/ollama-tools.js.map +1 -0
  41. package/dist/llm/adapters/openai-tools.d.ts +39 -0
  42. package/dist/llm/adapters/openai-tools.js +71 -0
  43. package/dist/llm/adapters/openai-tools.js.map +1 -0
  44. package/dist/llm/agentrouter.js +23 -4
  45. package/dist/llm/agentrouter.js.map +1 -1
  46. package/dist/llm/anthropic.js +93 -92
  47. package/dist/llm/anthropic.js.map +1 -1
  48. package/dist/llm/aws-mantle.js +93 -56
  49. package/dist/llm/aws-mantle.js.map +1 -1
  50. package/dist/llm/bynara.js +23 -4
  51. package/dist/llm/bynara.js.map +1 -1
  52. package/dist/llm/capabilities.d.ts +7 -0
  53. package/dist/llm/capabilities.js +74 -0
  54. package/dist/llm/capabilities.js.map +1 -1
  55. package/dist/llm/gemini.js +63 -48
  56. package/dist/llm/gemini.js.map +1 -1
  57. package/dist/llm/groq.js +23 -4
  58. package/dist/llm/groq.js.map +1 -1
  59. package/dist/llm/http.d.ts +22 -17
  60. package/dist/llm/http.js +99 -26
  61. package/dist/llm/http.js.map +1 -1
  62. package/dist/llm/kimchi.js +23 -4
  63. package/dist/llm/kimchi.js.map +1 -1
  64. package/dist/llm/nvidia.js +23 -4
  65. package/dist/llm/nvidia.js.map +1 -1
  66. package/dist/llm/ollama.js +49 -31
  67. package/dist/llm/ollama.js.map +1 -1
  68. package/dist/llm/openai.js +23 -4
  69. package/dist/llm/openai.js.map +1 -1
  70. package/dist/llm/openrouter.js +23 -4
  71. package/dist/llm/openrouter.js.map +1 -1
  72. package/dist/llm/qwen-cloud.js +23 -4
  73. package/dist/llm/qwen-cloud.js.map +1 -1
  74. package/dist/llm/router.js +48 -6
  75. package/dist/llm/router.js.map +1 -1
  76. package/dist/llm/tool-protocol.d.ts +73 -0
  77. package/dist/llm/tool-protocol.js +282 -0
  78. package/dist/llm/tool-protocol.js.map +1 -0
  79. package/dist/modes/ask.js +74 -20
  80. package/dist/modes/ask.js.map +1 -1
  81. package/dist/prompts/index.d.ts +13 -5
  82. package/dist/prompts/index.js +116 -18
  83. package/dist/prompts/index.js.map +1 -1
  84. package/dist/repl.js +7 -0
  85. package/dist/repl.js.map +1 -1
  86. package/dist/store/config.d.ts +7 -0
  87. package/dist/store/config.js +1 -0
  88. package/dist/store/config.js.map +1 -1
  89. package/dist/store/plan.d.ts +2 -0
  90. package/dist/store/plan.js.map +1 -1
  91. package/dist/tools/capabilities.d.ts +2 -0
  92. package/dist/tools/capabilities.js +101 -6
  93. package/dist/tools/capabilities.js.map +1 -1
  94. package/dist/tools/command-intent.d.ts +1 -0
  95. package/dist/tools/command-intent.js +31 -0
  96. package/dist/tools/command-intent.js.map +1 -1
  97. package/dist/tools/definitions.d.ts +20 -0
  98. package/dist/tools/definitions.js +509 -0
  99. package/dist/tools/definitions.js.map +1 -0
  100. package/dist/tools/fs.js +12 -3
  101. package/dist/tools/fs.js.map +1 -1
  102. package/dist/tools/net-ping-sweep.js +69 -16
  103. package/dist/tools/net-ping-sweep.js.map +1 -1
  104. package/dist/tools/nmap-runner.d.ts +8 -7
  105. package/dist/tools/nmap-runner.js +126 -65
  106. package/dist/tools/nmap-runner.js.map +1 -1
  107. package/dist/tools/registry.js +45 -7
  108. package/dist/tools/registry.js.map +1 -1
  109. package/dist/tools/validate.d.ts +11 -0
  110. package/dist/tools/validate.js +53 -0
  111. package/dist/tools/validate.js.map +1 -1
  112. package/dist/tools/web/search.js +48 -4
  113. package/dist/tools/web/search.js.map +1 -1
  114. package/dist/tui-v2/components/transcript/tool-card.js +1 -1
  115. package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
  116. package/dist/tui-v2/rendering/tool-presenter.d.ts +6 -1
  117. package/dist/tui-v2/rendering/tool-presenter.js +66 -2
  118. package/dist/tui-v2/rendering/tool-presenter.js.map +1 -1
  119. package/dist/types.d.ts +58 -0
  120. package/dist/ui/ansi-box.d.ts +2 -0
  121. package/dist/ui/ansi-box.js +8 -1
  122. package/dist/ui/ansi-box.js.map +1 -1
  123. package/package.json +1 -1
@@ -2,6 +2,97 @@ import chalk from "chalk";
2
2
  import { createPlan, loadPlan, savePlan, markTask, } from "../store/plan.js";
3
3
  import { renderPlanChecklist } from "../ui/plan-pane.js";
4
4
  import { isLumpedSingleTask } from "./tool-call-parser.js";
5
+ /** Titles match for plan merge (exact or mutual long substring). */
6
+ export function titlesMatchForPlan(a, b) {
7
+ const t1 = a.trim().toLowerCase();
8
+ const t2 = b.trim().toLowerCase();
9
+ return (t1 === t2 ||
10
+ (t1.length > 8 && t2.length > 8 && (t1.includes(t2) || t2.includes(t1))));
11
+ }
12
+ /** Final coding-plan task: start server / probe localhost / leave running. */
13
+ export function looksLikeRunServerTask(title) {
14
+ const t = title.trim().toLowerCase();
15
+ if (/\b(dev\s*server|npm\s+run\s+dev|pnpm\s+(run\s+)?dev|yarn\s+dev|bun\s+run\s+dev|shell\.start|localhost|leave\s+(it\s+)?running|verify\s+in\s+browser|open\s+in\s+browser|probe\s+(localhost|http)|http:\/\/localhost)\b/.test(t)) {
16
+ return true;
17
+ }
18
+ if (/\b(start|run)\b.+\b(server|dev|vite|next|preview)\b/.test(t))
19
+ return true;
20
+ if (/\b(server|dev|vite|next|preview)\b.+\b(start|run|verify|tail|probe)\b/.test(t)) {
21
+ return true;
22
+ }
23
+ // "run and verify" / "start app" style finals
24
+ if (/\b(run|start)\b.+\b(app|verify)\b/.test(t) && /\b(server|dev|browser|localhost|url|port|job)\b/.test(t)) {
25
+ return true;
26
+ }
27
+ return false;
28
+ }
29
+ export function looksLikeLocalAppScaffold(kind, goal, detail, tasks) {
30
+ if (kind === "pentest")
31
+ return false;
32
+ const blob = `${kind} ${goal} ${detail} ${tasks.join(" ")}`.toLowerCase();
33
+ // Pure libraries / CLIs with no server surface
34
+ if (/\b(library|cli\b|command[- ]line|npm package|rust crate|go module)\b/.test(blob) &&
35
+ !/\b(react|vite|next|vue|svelte|web\s*app|frontend|dev\s*server|localhost|todo\s*app|dashboard|spa)\b/.test(blob)) {
36
+ return false;
37
+ }
38
+ if (kind === "coding") {
39
+ // coding + no library-only signal → require run/verify when app-like
40
+ return /\b(app|react|vite|next|vue|svelte|nuxt|angular|frontend|web|ui|todo|blog|dashboard|spa|server|localhost|scaffold)\b/.test(blob);
41
+ }
42
+ return /\b(react|vite|next\.?js?|vue|svelte|nuxt|angular|web\s*app|frontend|spa|todo\s*app|blog\s*app|dashboard)\b/.test(blob);
43
+ }
44
+ export function codingPlanNeedsRunVerifyTask(kind, goal, detail, tasks) {
45
+ if (!looksLikeLocalAppScaffold(kind, goal, detail, tasks))
46
+ return false;
47
+ return !tasks.some(looksLikeRunServerTask);
48
+ }
49
+ function looksLikeInstallTask(title) {
50
+ const t = title.toLowerCase();
51
+ return (/\b(install|dependencies|deps|packages)\b/.test(t) &&
52
+ !/\b(dev\s*server|localhost|probe|run\s+dev)\b/.test(t));
53
+ }
54
+ function looksLikeScaffoldishTask(title) {
55
+ return /\b(scaffold|create|init|vite|next|bootstrap|cargo\s+new)\b/i.test(title);
56
+ }
57
+ /**
58
+ * Ensure coding app plans have an explicit install step after scaffold.
59
+ * Avoids "implement blocked from npm install" + install attributed to wrong task.
60
+ */
61
+ export function ensureCodingPlanInstallTask(kind, goal, detail, tasks) {
62
+ if (!looksLikeLocalAppScaffold(kind, goal, detail, tasks))
63
+ return tasks;
64
+ if (tasks.some(looksLikeInstallTask))
65
+ return tasks;
66
+ if (!tasks.some(looksLikeScaffoldishTask))
67
+ return tasks;
68
+ const out = [...tasks];
69
+ const scaffoldIdx = out.findIndex(looksLikeScaffoldishTask);
70
+ const insertAt = scaffoldIdx >= 0 ? scaffoldIdx + 1 : 0;
71
+ out.splice(insertAt, 0, "Install project dependencies (npm/yarn/pnpm/bun install in project root)");
72
+ return out;
73
+ }
74
+ /** Goal is only "run/start the existing app" — do not open a new plan. */
75
+ export function looksLikeRunOnlyGoal(goal, detail) {
76
+ const blob = `${goal} ${detail}`.toLowerCase();
77
+ if (!/\b(run|start|launch|serve|dev\s*server|npm\s+run\s+dev)\b/.test(blob)) {
78
+ return false;
79
+ }
80
+ // Exclude fresh scaffold goals
81
+ if (/\b(scaffold|create|build|implement|add feature|from scratch|new app)\b/.test(blob)) {
82
+ return false;
83
+ }
84
+ return /\b(existing|already|the app|dev server|server|verify|test it|open it)\b/.test(blob)
85
+ || /^(run|start)\b/.test(blob.trim());
86
+ }
87
+ function nextTaskId(existingIds) {
88
+ let max = 0;
89
+ for (const id of existingIds) {
90
+ const m = /^t(\d+)$/i.exec(id);
91
+ if (m)
92
+ max = Math.max(max, Number(m[1]));
93
+ }
94
+ return `t${max + 1}`;
95
+ }
5
96
  /** Coerce model-sloppy plan.create fields into clean titles. */
6
97
  function normalizePlanGoal(args) {
7
98
  const raw = args.goal ?? args.objective ?? args.title ?? args.name;
@@ -59,21 +150,82 @@ function normalizeTaskTitle(t) {
59
150
  }
60
151
  return "";
61
152
  }
153
+ export function slugifyTaskId(text) {
154
+ return text
155
+ .trim()
156
+ .toLowerCase()
157
+ .replace(/[^a-z0-9]+/g, "_")
158
+ .replace(/^_+|_+$/g, "")
159
+ .slice(0, 64);
160
+ }
62
161
  /**
63
162
  * Accept tasks as string[], object[], or a single newline/comma-separated string.
64
163
  * Models frequently emit `[{id,title}]` instead of plain strings.
65
164
  */
66
165
  function normalizePlanTasks(args) {
166
+ return normalizePlanTaskEntries(args).map((t) => t.title);
167
+ }
168
+ /** Full entries including model-supplied id/name aliases (X3). */
169
+ export function normalizePlanTaskEntries(args) {
67
170
  const raw = args.tasks ?? args.steps ?? args.checklist ?? args.items ?? args.todos;
68
171
  if (typeof raw === "string") {
69
172
  return raw
70
173
  .split(/\n|;|(?:,\s*(?=[A-Z0-9\-]))/)
71
174
  .map((s) => s.replace(/^\s*[-*\d.)]+\s*/, "").trim())
72
- .filter(Boolean);
175
+ .filter(Boolean)
176
+ .map((title) => ({ title, aliases: [] }));
73
177
  }
74
178
  if (!Array.isArray(raw))
75
179
  return [];
76
- return raw.map(normalizeTaskTitle).filter(Boolean);
180
+ return raw
181
+ .map((t) => {
182
+ const title = normalizeTaskTitle(t);
183
+ if (!title)
184
+ return null;
185
+ const aliases = [];
186
+ if (t && typeof t === "object") {
187
+ const o = t;
188
+ for (const k of ["id", "taskId", "key", "slug"]) {
189
+ if (typeof o[k] === "string" && o[k].toString().trim()) {
190
+ aliases.push(String(o[k]).trim());
191
+ }
192
+ }
193
+ // `name` is often the title; only alias if it differs.
194
+ if (typeof o.name === "string" &&
195
+ o.name.trim() &&
196
+ o.name.trim().toLowerCase() !== title.toLowerCase()) {
197
+ aliases.push(o.name.trim());
198
+ }
199
+ }
200
+ const slug = slugifyTaskId(title);
201
+ if (slug && !aliases.includes(slug))
202
+ aliases.push(slug);
203
+ return { title, aliases: [...new Set(aliases)] };
204
+ })
205
+ .filter((x) => Boolean(x));
206
+ }
207
+ /** Resolve model taskId (t1 or slug) to the canonical plan task id. */
208
+ export function resolvePlanTaskId(plan, taskId) {
209
+ const raw = taskId.trim();
210
+ if (!raw)
211
+ return undefined;
212
+ if (plan.tasks.some((t) => t.id === raw))
213
+ return raw;
214
+ const lower = raw.toLowerCase();
215
+ const slug = slugifyTaskId(raw);
216
+ for (const t of plan.tasks) {
217
+ if (t.aliases?.some((a) => a === raw || a.toLowerCase() === lower)) {
218
+ return t.id;
219
+ }
220
+ if (slugifyTaskId(t.title) === slug)
221
+ return t.id;
222
+ if (slug.length > 4 &&
223
+ (slugifyTaskId(t.title).includes(slug) ||
224
+ slug.includes(slugifyTaskId(t.title)))) {
225
+ return t.id;
226
+ }
227
+ }
228
+ return undefined;
77
229
  }
78
230
  /** Render the portable inline form; the Ink TUI owns its responsive sidebar. */
79
231
  export function renderPlanForTerminal(plan) {
@@ -87,8 +239,12 @@ export function planContextMessage(plan, approved) {
87
239
  lines.push(plan.detail.trim());
88
240
  lines.push("Tasks:");
89
241
  plan.tasks.forEach((t, i) => {
90
- lines.push(` ${i + 1}. [${t.id}] (${t.state}) ${t.title}`);
242
+ const aliasHint = t.aliases?.length && t.aliases[0] !== t.id
243
+ ? ` [aliases: ${t.aliases.slice(0, 3).join(", ")}]`
244
+ : "";
245
+ lines.push(` ${i + 1}. [${t.id}] (${t.state}) ${t.title}${aliasHint}`);
91
246
  });
247
+ lines.push("task.update taskId MUST be t1, t2, … from this list (or a listed alias) — never invent free-form slugs alone.");
92
248
  if (approved) {
93
249
  const inProgress = plan.tasks.find((t) => t.state === "in_progress");
94
250
  const firstPending = plan.tasks.find((t) => t.state === "pending");
@@ -103,10 +259,13 @@ export function planContextMessage(plan, approved) {
103
259
  "Do NOT re-do tasks already marked done, and do NOT skip ahead to later tasks.");
104
260
  }
105
261
  lines.push("STRICT ORDER: call task.update {taskId, state:'in_progress'} → do the real work → " +
106
- "call task.update {taskId, state:'done'} ONLY after the tool calls actually succeed. " +
107
- "If a tool fails, mark the task 'failed' with a note, fix the problem, then retry. " +
108
- "Do NOT mark a task done when its commands error out. " +
109
- "Never claim something ran without a successful tool call.");
262
+ "WAIT for and READ the tool result only if you are satisfied it succeeded, " +
263
+ "call task.update {taskId, state:'done'} then open the NEXT task. " +
264
+ "Never mark done before a successful tool result. Never start the next task's work " +
265
+ "(or mark a later task in_progress) until the current one is done and verified. " +
266
+ "If a tool fails, mark the task 'failed' with a note, fix, retry. " +
267
+ "Never re-run tasks already marked done. " +
268
+ "For run/verify: shell.start, leave server running, final message includes URL, port, and job id.");
110
269
  }
111
270
  else {
112
271
  lines.push("This plan is NOT yet approved, so you MUST NOT execute any of its tasks yet. " +
@@ -130,7 +289,8 @@ export async function handlePlanTool(call, session, ctx) {
130
289
  const goal = normalizePlanGoal(call.args);
131
290
  const detail = normalizePlanDetail(call.args);
132
291
  const kind = normalizePlanKind(call.args);
133
- const taskTitles = normalizePlanTasks(call.args);
292
+ const taskEntries = normalizePlanTaskEntries(call.args);
293
+ const taskTitles = taskEntries.map((t) => t.title);
134
294
  if (!goal || taskTitles.length === 0) {
135
295
  return {
136
296
  handled: true,
@@ -157,60 +317,159 @@ export async function handlePlanTool(call, session, ctx) {
157
317
  };
158
318
  }
159
319
  const existingPlan = await loadPlan(session.sessionId).catch(() => undefined);
320
+ // X12: do not open a second full plan just to run an existing app.
321
+ if (existingPlan &&
322
+ (existingPlan.status === "completed" ||
323
+ existingPlan.tasks.every((t) => t.state === "done" || t.state === "skipped" || t.state === "failed")) &&
324
+ looksLikeRunOnlyGoal(goal, detail)) {
325
+ return {
326
+ handled: true,
327
+ ok: false,
328
+ display: chalk.yellow(" ⚠ plan.create skipped — use tools to run the existing app\n"),
329
+ modelNote: "plan.create rejected: the previous plan is already finished and this goal is only run/verify. " +
330
+ "Do NOT create a new plan or re-list old scaffold tasks. " +
331
+ "Just shell.start the dev server, shell.tail until ready, probe localhost " +
332
+ "(curl or http.fetch with iOwnThis:true), LEAVE the server running, and tell the user " +
333
+ "the URL (http://localhost:<port>), port, and job id.",
334
+ };
335
+ }
336
+ // X12: coding/local-app plans must include a final run/verify server task.
337
+ if (codingPlanNeedsRunVerifyTask(kind, goal, detail, taskTitles)) {
338
+ return {
339
+ handled: true,
340
+ ok: false,
341
+ display: chalk.red(" ✗ plan.create: coding app plan needs a final run/verify server task\n"),
342
+ modelNote: "plan.create rejected: for local web/app scaffolds (React/Vite/Next/etc.), tasks MUST end with a " +
343
+ "final run/verify step — e.g. 'Start dev server (shell.start), tail until ready, probe localhost, " +
344
+ "leave server running, report URL/port/job id'. Prefer shell.start (background); do not shell.stop " +
345
+ "unless the user asks. Build alone is not enough. Add that final task and call plan.create again. " +
346
+ "Pure libraries/CLIs with no server do not need this.",
347
+ };
348
+ }
349
+ // Inject install step on fresh plans when model forgot it (avoids install
350
+ // blocked under implement + wrong auto-start attribution). Skip rewrite on
351
+ // merge/revise so completed task order stays stable.
352
+ const normalizedTitles = existingPlan
353
+ ? taskTitles
354
+ : ensureCodingPlanInstallTask(kind, goal, detail, taskTitles);
160
355
  const plan = createPlan({
161
356
  sessionId: session.sessionId,
162
357
  goal,
163
358
  detail,
164
- taskTitles,
359
+ taskTitles: normalizedTitles,
165
360
  kind,
166
361
  });
362
+ // Attach model-supplied slug aliases so task.update can resolve them (X3).
363
+ for (let i = 0; i < plan.tasks.length; i++) {
364
+ const aliases = taskEntries[i]?.aliases ?? [];
365
+ if (aliases.length)
366
+ plan.tasks[i].aliases = aliases;
367
+ }
368
+ let additiveOnly = false;
167
369
  if (existingPlan) {
370
+ const usedOldIds = new Set();
168
371
  const mappedNewTasks = plan.tasks.map((task) => {
169
- const match = existingPlan.tasks.find((t) => {
170
- const t1 = t.title.trim().toLowerCase();
171
- const t2 = task.title.trim().toLowerCase();
172
- return (t1 === t2 ||
173
- (t1.length > 8 && t2.length > 8 && (t1.includes(t2) || t2.includes(t1))));
174
- });
372
+ const match = existingPlan.tasks.find((t) => !usedOldIds.has(t.id) && titlesMatchForPlan(t.title, task.title));
175
373
  if (match) {
374
+ usedOldIds.add(match.id);
176
375
  return {
177
376
  ...task,
377
+ id: match.id,
178
378
  state: match.state,
179
379
  note: match.note,
180
380
  };
181
381
  }
182
382
  return task;
183
383
  });
184
- const oldTasksToKeep = existingPlan.tasks.filter((oldTask) => {
185
- return !mappedNewTasks.some((newTask) => {
186
- const t1 = oldTask.title.trim().toLowerCase();
187
- const t2 = newTask.title.trim().toLowerCase();
188
- return (t1 === t2 ||
189
- (t1.length > 8 && t2.length > 8 && (t1.includes(t2) || t2.includes(t1))));
190
- });
191
- });
384
+ // Free ids for brand-new tasks (avoid clobbering preserved ids).
385
+ const taken = new Set(mappedNewTasks.map((t) => t.id));
386
+ for (const task of mappedNewTasks) {
387
+ if (usedOldIds.has(task.id))
388
+ continue;
389
+ if (existingPlan.tasks.some((t) => t.id === task.id) ||
390
+ mappedNewTasks.filter((t) => t.id === task.id).length > 1) {
391
+ let id = nextTaskId([...taken]);
392
+ while (taken.has(id))
393
+ id = nextTaskId([...taken, id]);
394
+ task.id = id;
395
+ taken.add(id);
396
+ }
397
+ else {
398
+ taken.add(task.id);
399
+ }
400
+ }
401
+ const oldTasksToKeep = existingPlan.tasks.filter((oldTask) => !mappedNewTasks.some((newTask) => titlesMatchForPlan(oldTask.title, newTask.title)));
192
402
  plan.tasks = [...oldTasksToKeep, ...mappedNewTasks];
403
+ // X7: keep approval when only additive pending work remains.
404
+ const priorFinished = existingPlan.tasks.filter((t) => t.state === "done" || t.state === "skipped" || t.state === "failed");
405
+ const finishedStillFinished = priorFinished.length > 0 &&
406
+ priorFinished.every((old) => plan.tasks.some((n) => titlesMatchForPlan(old.title, n.title) &&
407
+ (n.state === "done" ||
408
+ n.state === "skipped" ||
409
+ n.state === "failed")));
410
+ const hasNewPending = plan.tasks.some((t) => t.state === "pending");
411
+ const noDoneReopened = !plan.tasks.some((n) => {
412
+ const old = existingPlan.tasks.find((t) => titlesMatchForPlan(t.title, n.title));
413
+ return (old &&
414
+ (old.state === "done" || old.state === "skipped") &&
415
+ n.state === "pending");
416
+ });
417
+ additiveOnly =
418
+ finishedStillFinished &&
419
+ hasNewPending &&
420
+ noDoneReopened &&
421
+ (session.planApproved.value ||
422
+ existingPlan.status === "approved" ||
423
+ existingPlan.status === "in_progress" ||
424
+ existingPlan.status === "completed");
425
+ if (additiveOnly) {
426
+ plan.status = "in_progress";
427
+ plan.createdAt = existingPlan.createdAt;
428
+ }
193
429
  }
194
430
  await savePlan(plan).catch(() => undefined);
195
- // A freshly (re)created plan resets approval — the user must /implement.
196
- session.planApproved.value = false;
431
+ if (additiveOnly) {
432
+ session.planApproved.value = true;
433
+ }
434
+ else {
435
+ session.planApproved.value = false;
436
+ }
197
437
  const checklist = renderPlanForTerminal(plan);
198
- const display = chalk.cyan(" ● planning\n") +
199
- checklist +
200
- "\n" +
201
- chalk.dim(" ✦ plan created — press Ctrl+P to view it, /implement to approve and run it,\n" +
202
- " or /discard to cancel it. Any other message refines this plan.\n");
438
+ const display = additiveOnly
439
+ ? chalk.cyan(" ● plan updated (additive)\n") +
440
+ checklist +
441
+ "\n" +
442
+ chalk.dim(" done tasks preserved continue from the first pending task only.\n" +
443
+ " Do NOT re-run completed scaffold/build work.\n")
444
+ : chalk.cyan(" ● planning\n") +
445
+ checklist +
446
+ "\n" +
447
+ chalk.dim(" ✦ plan created — press Ctrl+P to view it, /implement to approve and run it,\n" +
448
+ " or /discard to cancel it. Any other message refines this plan.\n");
449
+ const firstPending = plan.tasks.find((t) => t.state === "pending");
203
450
  return {
204
451
  handled: true,
205
452
  ok: true,
206
453
  plan,
207
454
  display,
208
- modelNote: `Plan saved with ${plan.tasks.length} task(s). STOP here and wait — produce NO other tool calls now. ` +
209
- "Do NOT start executing tasks until the user approves with /implement. " +
210
- "If the user's next message gives feedback instead of /implement, that is a REVISION: call plan.create " +
211
- "again with the updated plan and STOP again. The user may cancel the whole plan with /discard. " +
212
- "Only after /implement do you begin, working task by task, calling task.update to mark each " +
213
- "in_progress before and done after you finish it.",
455
+ modelNote: additiveOnly
456
+ ? `Plan updated with additive task(s); ${plan.tasks.filter((t) => t.state === "done" || t.state === "skipped").length} prior task(s) stay done. ` +
457
+ "Do NOT re-execute completed tasks (no re-scaffold). " +
458
+ (firstPending
459
+ ? `Continue from [${firstPending.id}] "${firstPending.title}" only. `
460
+ : "") +
461
+ "If the only new work is run/verify on an existing app, prefer shell.start + probe + report URL — " +
462
+ "do not reboot the world. When the run/verify task finishes, final message MUST include " +
463
+ "http://localhost:<port>, port, job id, and that the server is still running."
464
+ : `Plan saved with ${plan.tasks.length} task(s). STOP here and wait — produce NO other tool calls now. ` +
465
+ "Do NOT start executing tasks until the user approves with /implement. " +
466
+ "If the user's next message gives feedback instead of /implement, that is a REVISION: call plan.create " +
467
+ "again with the updated plan and STOP again. The user may cancel the whole plan with /discard. " +
468
+ "Only after /implement do you begin, working task by task, calling task.update to mark each " +
469
+ "in_progress before and done after you finish it. " +
470
+ "Do NOT call plan.create again only to add a run-dev-server step — put that in this plan's final task, " +
471
+ "or after completion use shell.start + probe directly. " +
472
+ "When run/verify completes: report URL, port, job id, and that the server is still running.",
214
473
  };
215
474
  }
216
475
  // task.update
@@ -223,7 +482,11 @@ export async function handlePlanTool(call, session, ctx) {
223
482
  modelNote: "task.update failed: there is no active plan. Call plan.create first.",
224
483
  };
225
484
  }
226
- const taskId = typeof call.args.taskId === "string" ? call.args.taskId : "";
485
+ const taskIdRaw = typeof call.args.taskId === "string"
486
+ ? call.args.taskId
487
+ : typeof call.args.id === "string"
488
+ ? call.args.id
489
+ : "";
227
490
  const stateRaw = typeof call.args.state === "string" ? call.args.state : "";
228
491
  const note = typeof call.args.note === "string" ? call.args.note : undefined;
229
492
  const validStates = [
@@ -241,6 +504,8 @@ export async function handlePlanTool(call, session, ctx) {
241
504
  modelNote: `task.update failed: state must be one of ${validStates.join(", ")}.`,
242
505
  };
243
506
  }
507
+ // X3: accept t1..tn or model slug aliases / title slugs.
508
+ const taskId = resolvePlanTaskId(plan, taskIdRaw) ?? taskIdRaw;
244
509
  // Only one task may be in_progress at a time. This forces genuine
245
510
  // task-by-task execution: the model must close (done/failed/skipped) the
246
511
  // current task before opening the next one, instead of leaving a task
@@ -255,18 +520,45 @@ export async function handlePlanTool(call, session, ctx) {
255
520
  display: chalk.red(` \u2717 task.update: task [${otherInProgress.id}] "${otherInProgress.title}" is still in_progress\n`),
256
521
  modelNote: `task.update failed: task [${otherInProgress.id}] "${otherInProgress.title}" is still in_progress. ` +
257
522
  "Finish it first \u2014 call task.update with state 'done' (or 'failed'/'skipped' with a note) " +
258
- `for [${otherInProgress.id}] before starting [${taskId}].`,
523
+ `for [${otherInProgress.id}] before starting [${taskId}]. ` +
524
+ "Use ONLY ids like t1, t2 from the plan context (not title slugs).",
259
525
  };
260
526
  }
261
527
  }
528
+ // X8: cannot mark later task done while an earlier task is still open.
529
+ if (stateRaw === "done") {
530
+ const targetIdx = plan.tasks.findIndex((t) => t.id === taskId);
531
+ if (targetIdx > 0) {
532
+ const blocking = plan.tasks
533
+ .slice(0, targetIdx)
534
+ .filter((t) => t.state === "pending" ||
535
+ t.state === "in_progress" ||
536
+ t.state === "failed");
537
+ if (blocking.length > 0) {
538
+ const b = blocking[0];
539
+ return {
540
+ handled: true,
541
+ ok: false,
542
+ display: chalk.red(` ✗ task.update: cannot mark [${taskId}] done while [${b.id}] is ${b.state}\n`),
543
+ modelNote: `task.update failed: cannot mark [${taskId}] done while earlier task ` +
544
+ `[${b.id}] "${b.title}" is still ${b.state}. ` +
545
+ `Finish or skip [${b.id}] first (state done/skipped), then mark [${taskId}] done.`,
546
+ };
547
+ }
548
+ }
549
+ }
262
550
  const ok = markTask(plan, taskId, stateRaw, note);
263
551
  if (!ok) {
264
- const ids = plan.tasks.map((t) => t.id).join(", ");
552
+ const idMap = plan.tasks
553
+ .map((t) => `${t.id}="${t.title}"` +
554
+ (t.aliases?.length ? ` (also: ${t.aliases.join(", ")})` : ""))
555
+ .join("; ");
265
556
  return {
266
557
  handled: true,
267
558
  ok: false,
268
- display: chalk.red(` ✗ task.update: unknown taskId "${taskId}" (have: ${ids})\n`),
269
- modelNote: `task.update failed: unknown taskId. Valid ids: ${ids}.`,
559
+ display: chalk.red(` ✗ task.update: unknown taskId "${taskIdRaw}" (have: ${plan.tasks.map((t) => t.id).join(", ")})\n`),
560
+ modelNote: `task.update failed: unknown taskId "${taskIdRaw}". ` +
561
+ `Valid ids (use these, not title text): ${idMap}.`,
270
562
  };
271
563
  }
272
564
  if (plan.status === "draft" || plan.status === "approved") {
@@ -277,14 +569,35 @@ export async function handlePlanTool(call, session, ctx) {
277
569
  plan.status = "completed";
278
570
  await savePlan(plan).catch(() => undefined);
279
571
  const checklist = renderPlanForTerminal(plan);
572
+ const nextPending = plan.tasks.find((t) => t.state === "pending");
573
+ let modelNote;
574
+ if (allDone) {
575
+ modelNote =
576
+ "Task updated. ALL tasks are now finished. Verify the result and give your final summary. " +
577
+ "If a dev server was started: report URL, port, job id, and that it is still running.";
578
+ }
579
+ else if (stateRaw === "done" && nextPending) {
580
+ modelNote =
581
+ `Task [${taskId}] marked done after verified work. ` +
582
+ `NEXT: open only the next task with task.update {taskId:"${nextPending.id}", state:"in_progress"}, ` +
583
+ `then do work for "${nextPending.title}" only. Wait for tool results before marking that one done. ` +
584
+ "Do not batch later tasks. Do not start a later task's tools early.";
585
+ }
586
+ else if (stateRaw === "in_progress") {
587
+ modelNote =
588
+ `Task [${taskId}] is now in_progress. Do ONLY this task's work, wait for tool results, ` +
589
+ `and mark done only when you are satisfied the results prove success. ` +
590
+ `Then task.update {taskId:"${taskId}", state:"done"}. Do not open or work on later tasks yet.`;
591
+ }
592
+ else {
593
+ modelNote = "Task updated. Continue with the next pending task.";
594
+ }
280
595
  return {
281
596
  handled: true,
282
597
  ok: true,
283
598
  plan,
284
599
  display: checklist + "\n",
285
- modelNote: allDone
286
- ? "Task updated. ALL tasks are now finished. Verify the result and give your final summary."
287
- : "Task updated. Continue with the next pending task.",
600
+ modelNote,
288
601
  };
289
602
  }
290
603
  //# sourceMappingURL=plan-tool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plan-tool.js","sourceRoot":"","sources":["../../src/agent/plan-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan-tool.js","sourceRoot":"","sources":["../../src/agent/plan-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { SessionPlan } from "../store/plan.js";
2
+ export declare function setActiveProjectRoot(root: string | undefined): void;
3
+ /**
4
+ * Pin root only when the path exists (or force=true after a successful scaffold).
5
+ * Prevents inventing Desktop/todo-app before the folder is real.
6
+ */
7
+ export declare function setActiveProjectRootIfValid(root: string | undefined, opts?: {
8
+ force?: boolean;
9
+ }): boolean;
10
+ export declare function getActiveProjectRoot(): string | undefined;
11
+ export declare function clearActiveProjectRoot(): void;
12
+ /**
13
+ * Pull the best project directory from plan text / user prompt.
14
+ * Prefers existing paths; never returns bare Desktop alone when a deeper path exists.
15
+ */
16
+ export declare function extractProjectRootFromText(...parts: string[]): string | undefined;
17
+ export declare function extractProjectRootFromPlan(plan: SessionPlan | undefined): string | undefined;
18
+ /**
19
+ * After a successful one-shot scaffolder, derive the project directory.
20
+ * Stack-agnostic: npm create, cargo new, rails new, poetry new, etc.
21
+ */
22
+ export declare function extractProjectRootFromScaffold(command: string, shellCwd?: string): string | undefined;
23
+ /**
24
+ * Resolve a tool path: absolute stays absolute; relative uses active project
25
+ * root when set, else process cwd.
26
+ */
27
+ export declare function resolveToolPath(path: string): string;
28
+ /**
29
+ * If the model wrote into the agent package while a project root is set
30
+ * elsewhere, remap onto the project (keeps relative subpath).
31
+ * Generic: any relative path or common source roots (src, lib, app, …).
32
+ */
33
+ export declare function remapAgentCwdWrite(resolved: string, original: string): string;