@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.
- package/README.md +1 -1
- package/dist/agent/context-manager.js +8 -2
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/loop-guard.d.ts +2 -0
- package/dist/agent/loop-guard.js +39 -2
- package/dist/agent/loop-guard.js.map +1 -1
- package/dist/agent/plan-tool.d.ts +22 -0
- package/dist/agent/plan-tool.js +357 -44
- package/dist/agent/plan-tool.js.map +1 -1
- package/dist/agent/project-root.d.ts +33 -0
- package/dist/agent/project-root.js +158 -0
- package/dist/agent/project-root.js.map +1 -0
- package/dist/agent/runner.js +1119 -240
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/task-evidence.d.ts +103 -0
- package/dist/agent/task-evidence.js +413 -0
- package/dist/agent/task-evidence.js.map +1 -0
- package/dist/agent/tool-call-parser.d.ts +16 -0
- package/dist/agent/tool-call-parser.js +86 -28
- package/dist/agent/tool-call-parser.js.map +1 -1
- package/dist/agent/tool-history.d.ts +27 -0
- package/dist/agent/tool-history.js +150 -0
- package/dist/agent/tool-history.js.map +1 -0
- package/dist/agent/workspace-orient.d.ts +64 -0
- package/dist/agent/workspace-orient.js +418 -0
- package/dist/agent/workspace-orient.js.map +1 -0
- package/dist/app/controllers/session-controller.js +4 -0
- package/dist/app/controllers/session-controller.js.map +1 -1
- package/dist/commands/doctor.js +3 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/update.js +1 -1
- package/dist/llm/adapters/anthropic-tools.d.ts +99 -0
- package/dist/llm/adapters/anthropic-tools.js +225 -0
- package/dist/llm/adapters/anthropic-tools.js.map +1 -0
- package/dist/llm/adapters/gemini-tools.d.ts +54 -0
- package/dist/llm/adapters/gemini-tools.js +139 -0
- package/dist/llm/adapters/gemini-tools.js.map +1 -0
- package/dist/llm/adapters/ollama-tools.d.ts +22 -0
- package/dist/llm/adapters/ollama-tools.js +62 -0
- package/dist/llm/adapters/ollama-tools.js.map +1 -0
- package/dist/llm/adapters/openai-tools.d.ts +39 -0
- package/dist/llm/adapters/openai-tools.js +71 -0
- package/dist/llm/adapters/openai-tools.js.map +1 -0
- package/dist/llm/agentrouter.js +23 -4
- package/dist/llm/agentrouter.js.map +1 -1
- package/dist/llm/anthropic.js +93 -92
- package/dist/llm/anthropic.js.map +1 -1
- package/dist/llm/aws-mantle.js +93 -56
- package/dist/llm/aws-mantle.js.map +1 -1
- package/dist/llm/bynara.js +23 -4
- package/dist/llm/bynara.js.map +1 -1
- package/dist/llm/capabilities.d.ts +7 -0
- package/dist/llm/capabilities.js +74 -0
- package/dist/llm/capabilities.js.map +1 -1
- package/dist/llm/gemini.js +63 -48
- package/dist/llm/gemini.js.map +1 -1
- package/dist/llm/groq.js +23 -4
- package/dist/llm/groq.js.map +1 -1
- package/dist/llm/http.d.ts +22 -17
- package/dist/llm/http.js +99 -26
- package/dist/llm/http.js.map +1 -1
- package/dist/llm/kimchi.js +23 -4
- package/dist/llm/kimchi.js.map +1 -1
- package/dist/llm/nvidia.js +23 -4
- package/dist/llm/nvidia.js.map +1 -1
- package/dist/llm/ollama.js +49 -31
- package/dist/llm/ollama.js.map +1 -1
- package/dist/llm/openai.js +23 -4
- package/dist/llm/openai.js.map +1 -1
- package/dist/llm/openrouter.js +23 -4
- package/dist/llm/openrouter.js.map +1 -1
- package/dist/llm/qwen-cloud.js +23 -4
- package/dist/llm/qwen-cloud.js.map +1 -1
- package/dist/llm/router.js +48 -6
- package/dist/llm/router.js.map +1 -1
- package/dist/llm/tool-protocol.d.ts +73 -0
- package/dist/llm/tool-protocol.js +282 -0
- package/dist/llm/tool-protocol.js.map +1 -0
- package/dist/modes/ask.js +74 -20
- package/dist/modes/ask.js.map +1 -1
- package/dist/prompts/index.d.ts +13 -5
- package/dist/prompts/index.js +116 -18
- package/dist/prompts/index.js.map +1 -1
- package/dist/repl.js +7 -0
- package/dist/repl.js.map +1 -1
- package/dist/store/config.d.ts +7 -0
- package/dist/store/config.js +1 -0
- package/dist/store/config.js.map +1 -1
- package/dist/store/plan.d.ts +2 -0
- package/dist/store/plan.js.map +1 -1
- package/dist/tools/capabilities.d.ts +2 -0
- package/dist/tools/capabilities.js +101 -6
- package/dist/tools/capabilities.js.map +1 -1
- package/dist/tools/command-intent.d.ts +1 -0
- package/dist/tools/command-intent.js +31 -0
- package/dist/tools/command-intent.js.map +1 -1
- package/dist/tools/definitions.d.ts +20 -0
- package/dist/tools/definitions.js +509 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/fs.js +12 -3
- package/dist/tools/fs.js.map +1 -1
- package/dist/tools/net-ping-sweep.js +69 -16
- package/dist/tools/net-ping-sweep.js.map +1 -1
- package/dist/tools/nmap-runner.d.ts +8 -7
- package/dist/tools/nmap-runner.js +126 -65
- package/dist/tools/nmap-runner.js.map +1 -1
- package/dist/tools/registry.js +45 -7
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/validate.d.ts +11 -0
- package/dist/tools/validate.js +53 -0
- package/dist/tools/validate.js.map +1 -1
- package/dist/tools/web/search.js +48 -4
- package/dist/tools/web/search.js.map +1 -1
- package/dist/tui-v2/components/transcript/tool-card.js +1 -1
- package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
- package/dist/tui-v2/rendering/tool-presenter.d.ts +6 -1
- package/dist/tui-v2/rendering/tool-presenter.js +66 -2
- package/dist/tui-v2/rendering/tool-presenter.js.map +1 -1
- package/dist/types.d.ts +58 -0
- package/dist/ui/ansi-box.d.ts +2 -0
- package/dist/ui/ansi-box.js +8 -1
- package/dist/ui/ansi-box.js.map +1 -1
- package/package.json +1 -1
package/dist/agent/plan-tool.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
-
"
|
|
107
|
-
"
|
|
108
|
-
"
|
|
109
|
-
"
|
|
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
|
|
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
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
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
|
-
|
|
196
|
-
|
|
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 =
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
"
|
|
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:
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
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
|
|
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
|
|
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 "${
|
|
269
|
-
modelNote: `task.update failed: unknown taskId
|
|
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
|
|
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;
|