@prestyj/cli 4.3.205 → 4.3.209
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/dist/cli.js +48 -33
- package/dist/cli.js.map +1 -1
- package/dist/core/compaction/compactor.d.ts.map +1 -1
- package/dist/core/compaction/compactor.js +6 -0
- package/dist/core/compaction/compactor.js.map +1 -1
- package/dist/core/compaction/compactor.test.js +16 -0
- package/dist/core/compaction/compactor.test.js.map +1 -1
- package/dist/core/goal-controller.d.ts +57 -0
- package/dist/core/goal-controller.d.ts.map +1 -0
- package/dist/core/goal-controller.js +285 -0
- package/dist/core/goal-controller.js.map +1 -0
- package/dist/core/goal-controller.test.d.ts +2 -0
- package/dist/core/goal-controller.test.d.ts.map +1 -0
- package/dist/core/goal-controller.test.js +419 -0
- package/dist/core/goal-controller.test.js.map +1 -0
- package/dist/core/goal-lifecycle-smoke.test.d.ts +2 -0
- package/dist/core/goal-lifecycle-smoke.test.d.ts.map +1 -0
- package/dist/core/goal-lifecycle-smoke.test.js +207 -0
- package/dist/core/goal-lifecycle-smoke.test.js.map +1 -0
- package/dist/core/goal-store.d.ts +164 -0
- package/dist/core/goal-store.d.ts.map +1 -0
- package/dist/core/goal-store.js +721 -0
- package/dist/core/goal-store.js.map +1 -0
- package/dist/core/goal-store.test.d.ts +2 -0
- package/dist/core/goal-store.test.d.ts.map +1 -0
- package/dist/core/goal-store.test.js +341 -0
- package/dist/core/goal-store.test.js.map +1 -0
- package/dist/core/goal-verifier.d.ts +17 -0
- package/dist/core/goal-verifier.d.ts.map +1 -0
- package/dist/core/goal-verifier.js +84 -0
- package/dist/core/goal-verifier.js.map +1 -0
- package/dist/core/goal-verifier.test.d.ts +2 -0
- package/dist/core/goal-verifier.test.d.ts.map +1 -0
- package/dist/core/goal-verifier.test.js +88 -0
- package/dist/core/goal-verifier.test.js.map +1 -0
- package/dist/core/goal-worker-dev-server-lifecycle.test.d.ts +2 -0
- package/dist/core/goal-worker-dev-server-lifecycle.test.d.ts.map +1 -0
- package/dist/core/goal-worker-dev-server-lifecycle.test.js +68 -0
- package/dist/core/goal-worker-dev-server-lifecycle.test.js.map +1 -0
- package/dist/core/goal-worker.d.ts +51 -0
- package/dist/core/goal-worker.d.ts.map +1 -0
- package/dist/core/goal-worker.js +339 -0
- package/dist/core/goal-worker.js.map +1 -0
- package/dist/core/goal-worker.test.d.ts +2 -0
- package/dist/core/goal-worker.test.d.ts.map +1 -0
- package/dist/core/goal-worker.test.js +224 -0
- package/dist/core/goal-worker.test.js.map +1 -0
- package/dist/core/model-registry.test.js +51 -1
- package/dist/core/model-registry.test.js.map +1 -1
- package/dist/core/process-manager-dev-server-repro.test.d.ts +2 -0
- package/dist/core/process-manager-dev-server-repro.test.d.ts.map +1 -0
- package/dist/core/process-manager-dev-server-repro.test.js +136 -0
- package/dist/core/process-manager-dev-server-repro.test.js.map +1 -0
- package/dist/core/process-manager.d.ts +9 -0
- package/dist/core/process-manager.d.ts.map +1 -1
- package/dist/core/process-manager.js +22 -8
- package/dist/core/process-manager.js.map +1 -1
- package/dist/core/prompt-commands.d.ts.map +1 -1
- package/dist/core/prompt-commands.js +52 -0
- package/dist/core/prompt-commands.js.map +1 -1
- package/dist/core/prompt-commands.test.js +24 -0
- package/dist/core/prompt-commands.test.js.map +1 -1
- package/dist/core/repomap.js +8 -1
- package/dist/core/repomap.js.map +1 -1
- package/dist/core/repomap.test.js +32 -0
- package/dist/core/repomap.test.js.map +1 -1
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +20 -11
- package/dist/interactive.js.map +1 -1
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +18 -40
- package/dist/system-prompt.js.map +1 -1
- package/dist/system-prompt.test.js +124 -1
- package/dist/system-prompt.test.js.map +1 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +2 -51
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit-diff.d.ts.map +1 -1
- package/dist/tools/edit-diff.js +71 -32
- package/dist/tools/edit-diff.js.map +1 -1
- package/dist/tools/edit-diff.test.js +14 -0
- package/dist/tools/edit-diff.test.js.map +1 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +38 -18
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/edit.test.js +56 -6
- package/dist/tools/edit.test.js.map +1 -1
- package/dist/tools/goals.d.ts +110 -0
- package/dist/tools/goals.d.ts.map +1 -0
- package/dist/tools/goals.js +500 -0
- package/dist/tools/goals.js.map +1 -0
- package/dist/tools/goals.test.d.ts +2 -0
- package/dist/tools/goals.test.d.ts.map +1 -0
- package/dist/tools/goals.test.js +431 -0
- package/dist/tools/goals.test.js.map +1 -0
- package/dist/tools/grep.d.ts.map +1 -1
- package/dist/tools/grep.js +22 -5
- package/dist/tools/grep.js.map +1 -1
- package/dist/tools/grep.test.d.ts +2 -0
- package/dist/tools/grep.test.d.ts.map +1 -0
- package/dist/tools/grep.test.js +20 -0
- package/dist/tools/grep.test.js.map +1 -0
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/safe-env.d.ts +2 -0
- package/dist/tools/safe-env.d.ts.map +1 -0
- package/dist/tools/safe-env.js +52 -0
- package/dist/tools/safe-env.js.map +1 -0
- package/dist/tools/source-path.js +1 -1
- package/dist/tools/web-fetch.d.ts +5 -0
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +12 -1
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/web-fetch.test.js +9 -0
- package/dist/tools/web-fetch.test.js.map +1 -1
- package/dist/ui/App.d.ts +73 -4
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +1087 -184
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/app-state-persistence.test.d.ts +2 -0
- package/dist/ui/app-state-persistence.test.d.ts.map +1 -0
- package/dist/ui/app-state-persistence.test.js +186 -0
- package/dist/ui/app-state-persistence.test.js.map +1 -0
- package/dist/ui/components/BackgroundTasksBar.d.ts +16 -1
- package/dist/ui/components/BackgroundTasksBar.d.ts.map +1 -1
- package/dist/ui/components/BackgroundTasksBar.js +15 -2
- package/dist/ui/components/BackgroundTasksBar.js.map +1 -1
- package/dist/ui/components/Banner.d.ts +2 -1
- package/dist/ui/components/Banner.d.ts.map +1 -1
- package/dist/ui/components/Banner.js +3 -3
- package/dist/ui/components/Banner.js.map +1 -1
- package/dist/ui/components/GoalOverlay.d.ts +74 -0
- package/dist/ui/components/GoalOverlay.d.ts.map +1 -0
- package/dist/ui/components/GoalOverlay.js +675 -0
- package/dist/ui/components/GoalOverlay.js.map +1 -0
- package/dist/ui/components/GoalStatusBar.d.ts +24 -0
- package/dist/ui/components/GoalStatusBar.d.ts.map +1 -0
- package/dist/ui/components/GoalStatusBar.js +113 -0
- package/dist/ui/components/GoalStatusBar.js.map +1 -0
- package/dist/ui/components/InputArea.d.ts +2 -1
- package/dist/ui/components/InputArea.d.ts.map +1 -1
- package/dist/ui/components/InputArea.js +44 -2
- package/dist/ui/components/InputArea.js.map +1 -1
- package/dist/ui/components/InputArea.test.d.ts +2 -0
- package/dist/ui/components/InputArea.test.d.ts.map +1 -0
- package/dist/ui/components/InputArea.test.js +79 -0
- package/dist/ui/components/InputArea.test.js.map +1 -0
- package/dist/ui/components/ToolExecution.d.ts.map +1 -1
- package/dist/ui/components/ToolExecution.js +27 -2
- package/dist/ui/components/ToolExecution.js.map +1 -1
- package/dist/ui/footer-status-layout.test.d.ts +2 -0
- package/dist/ui/footer-status-layout.test.d.ts.map +1 -0
- package/dist/ui/footer-status-layout.test.js +56 -0
- package/dist/ui/footer-status-layout.test.js.map +1 -0
- package/dist/ui/goal-events.d.ts +107 -0
- package/dist/ui/goal-events.d.ts.map +1 -0
- package/dist/ui/goal-events.js +323 -0
- package/dist/ui/goal-events.js.map +1 -0
- package/dist/ui/goal-events.test.d.ts +2 -0
- package/dist/ui/goal-events.test.d.ts.map +1 -0
- package/dist/ui/goal-events.test.js +312 -0
- package/dist/ui/goal-events.test.js.map +1 -0
- package/dist/ui/goal-overlay.test.d.ts +2 -0
- package/dist/ui/goal-overlay.test.d.ts.map +1 -0
- package/dist/ui/goal-overlay.test.js +306 -0
- package/dist/ui/goal-overlay.test.js.map +1 -0
- package/dist/ui/goal-status-bar.test.d.ts +2 -0
- package/dist/ui/goal-status-bar.test.d.ts.map +1 -0
- package/dist/ui/goal-status-bar.test.js +143 -0
- package/dist/ui/goal-status-bar.test.js.map +1 -0
- package/dist/ui/hooks/useAgentLoop.d.ts +3 -1
- package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
- package/dist/ui/hooks/useAgentLoop.js +10 -2
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/live-item-flush.test.js +48 -0
- package/dist/ui/live-item-flush.test.js.map +1 -1
- package/dist/ui/render.d.ts +18 -4
- package/dist/ui/render.d.ts.map +1 -1
- package/dist/ui/render.js +13 -3
- package/dist/ui/render.js.map +1 -1
- package/dist/ui/scroll-stabilization.test.d.ts +2 -0
- package/dist/ui/scroll-stabilization.test.d.ts.map +1 -0
- package/dist/ui/scroll-stabilization.test.js +70 -0
- package/dist/ui/scroll-stabilization.test.js.map +1 -0
- package/dist/ui/slash-command-images.test.d.ts +2 -0
- package/dist/ui/slash-command-images.test.d.ts.map +1 -0
- package/dist/ui/slash-command-images.test.js +57 -0
- package/dist/ui/slash-command-images.test.js.map +1 -0
- package/package.json +6 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goals.test.d.ts","sourceRoot":"","sources":["../../src/tools/goals.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { createGoalsTool } from "./goals.js";
|
|
6
|
+
import { decideGoalNextAction } from "../core/goal-controller.js";
|
|
7
|
+
import { getGoalRun, upsertGoalRun } from "../core/goal-store.js";
|
|
8
|
+
let tmpBase;
|
|
9
|
+
let tmpProject;
|
|
10
|
+
async function executeGoals(args) {
|
|
11
|
+
return createGoalsTool(tmpProject).execute(args, {
|
|
12
|
+
signal: new AbortController().signal,
|
|
13
|
+
toolCallId: "test-call",
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
beforeEach(async () => {
|
|
17
|
+
tmpBase = await fs.mkdtemp(path.join(os.tmpdir(), "goals-tool-test-base-"));
|
|
18
|
+
tmpProject = await fs.mkdtemp(path.join(os.tmpdir(), "goals-tool-test-project-"));
|
|
19
|
+
process.env.GG_GOALS_BASE = tmpBase;
|
|
20
|
+
});
|
|
21
|
+
afterEach(async () => {
|
|
22
|
+
delete process.env.GG_GOALS_BASE;
|
|
23
|
+
await fs.rm(tmpBase, { recursive: true, force: true });
|
|
24
|
+
await fs.rm(tmpProject, { recursive: true, force: true });
|
|
25
|
+
});
|
|
26
|
+
describe("goals tool state guards", () => {
|
|
27
|
+
it("updates an explicit run_id task and evidence when no active goal exists in the caller cwd", async () => {
|
|
28
|
+
const runProject = await fs.mkdtemp(path.join(os.tmpdir(), "goals-tool-explicit-run-project-"));
|
|
29
|
+
try {
|
|
30
|
+
await upsertGoalRun(runProject, {
|
|
31
|
+
id: "099c9f7f-bce7-475c-93b8-d9b3f88a0569",
|
|
32
|
+
title: "Explicit run",
|
|
33
|
+
goal: "Update from worker cwd",
|
|
34
|
+
status: "passed",
|
|
35
|
+
});
|
|
36
|
+
const tool = createGoalsTool(tmpProject);
|
|
37
|
+
const taskResult = await tool.execute({
|
|
38
|
+
action: "task",
|
|
39
|
+
run_id: "099c9f7f-bce7-475c-93b8-d9b3f88a0569",
|
|
40
|
+
task_id: "worker-task",
|
|
41
|
+
task_title: "Worker callback",
|
|
42
|
+
task_prompt: "Persist callback",
|
|
43
|
+
task_status: "done",
|
|
44
|
+
summary: "callback complete",
|
|
45
|
+
}, { signal: new AbortController().signal, toolCallId: "test-call" });
|
|
46
|
+
const evidenceResult = await tool.execute({
|
|
47
|
+
action: "evidence",
|
|
48
|
+
run_id: "099c9f7f",
|
|
49
|
+
evidence_kind: "summary",
|
|
50
|
+
evidence_label: "Worker evidence",
|
|
51
|
+
evidence_content: "same discovered run",
|
|
52
|
+
}, { signal: new AbortController().signal, toolCallId: "test-call" });
|
|
53
|
+
const run = await getGoalRun(runProject, "099c9f7f");
|
|
54
|
+
expect(taskResult).toBe('Goal task added: "Worker callback".');
|
|
55
|
+
expect(evidenceResult).toBe('Evidence added to "Explicit run".');
|
|
56
|
+
expect(run?.tasks).toEqual(expect.arrayContaining([
|
|
57
|
+
expect.objectContaining({
|
|
58
|
+
id: "worker-task",
|
|
59
|
+
status: "done",
|
|
60
|
+
lastSummary: "callback complete",
|
|
61
|
+
}),
|
|
62
|
+
]));
|
|
63
|
+
expect(run?.evidence).toEqual(expect.arrayContaining([
|
|
64
|
+
expect.objectContaining({ label: "Worker evidence", content: "same discovered run" }),
|
|
65
|
+
]));
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
await fs.rm(runProject, { recursive: true, force: true });
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
it("preserves task title and prompt when updating task status by id", async () => {
|
|
72
|
+
const run = await upsertGoalRun(tmpProject, {
|
|
73
|
+
title: "Research run",
|
|
74
|
+
goal: "Design the Goal worker metadata fix",
|
|
75
|
+
status: "ready",
|
|
76
|
+
tasks: [
|
|
77
|
+
{
|
|
78
|
+
id: "research-task",
|
|
79
|
+
title: "Research and design metadata preservation",
|
|
80
|
+
prompt: "Inspect goal task updates and propose a durable fix.",
|
|
81
|
+
status: "pending",
|
|
82
|
+
attempts: 0,
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
});
|
|
86
|
+
const result = await executeGoals({
|
|
87
|
+
action: "task",
|
|
88
|
+
run_id: run.id,
|
|
89
|
+
task_id: "research-task",
|
|
90
|
+
task_status: "done",
|
|
91
|
+
summary: "Design completed",
|
|
92
|
+
});
|
|
93
|
+
const updated = await getGoalRun(tmpProject, run.id);
|
|
94
|
+
expect(result).toBe('Goal task updated: "Research and design metadata preservation".');
|
|
95
|
+
expect(updated?.tasks[0]).toEqual(expect.objectContaining({
|
|
96
|
+
id: "research-task",
|
|
97
|
+
title: "Research and design metadata preservation",
|
|
98
|
+
prompt: "Inspect goal task updates and propose a durable fix.",
|
|
99
|
+
status: "done",
|
|
100
|
+
lastSummary: "Design completed",
|
|
101
|
+
}));
|
|
102
|
+
});
|
|
103
|
+
it("status resolves full UUID, short ID, and completed latest fallback", async () => {
|
|
104
|
+
await executeGoals({
|
|
105
|
+
action: "create",
|
|
106
|
+
run_id: "099c9f7f-bce7-475c-93b8-d9b3f88a0569",
|
|
107
|
+
title: "Status target",
|
|
108
|
+
goal: "Status lookup",
|
|
109
|
+
prerequisites: [],
|
|
110
|
+
});
|
|
111
|
+
await executeGoals({
|
|
112
|
+
action: "verify",
|
|
113
|
+
run_id: "099c9f7f",
|
|
114
|
+
verification_status: "fail",
|
|
115
|
+
summary: "failed",
|
|
116
|
+
});
|
|
117
|
+
await expect(executeGoals({ action: "status", run_id: "099c9f7f-bce7-475c-93b8-d9b3f88a0569" })).resolves.toContain("Status target");
|
|
118
|
+
await expect(executeGoals({ action: "status", run_id: "099c9f7f" })).resolves.toContain("[ready] Status target");
|
|
119
|
+
await expect(executeGoals({
|
|
120
|
+
action: "evidence",
|
|
121
|
+
evidence_label: "Latest failed",
|
|
122
|
+
evidence_content: "fallback",
|
|
123
|
+
})).resolves.toBe('Evidence added to "Status target".');
|
|
124
|
+
});
|
|
125
|
+
it("persists evidence plans on create and preserves them on metadata updates", async () => {
|
|
126
|
+
await executeGoals({
|
|
127
|
+
action: "create",
|
|
128
|
+
run_id: "goal-evidence-plan",
|
|
129
|
+
title: "Proof plan",
|
|
130
|
+
goal: "Verify real browser behavior",
|
|
131
|
+
success_criteria: ["Browser flow passes"],
|
|
132
|
+
prerequisites: [],
|
|
133
|
+
evidence_plan: [
|
|
134
|
+
{
|
|
135
|
+
id: "browser-proof",
|
|
136
|
+
label: "Browser smoke proof",
|
|
137
|
+
mechanism: "browser",
|
|
138
|
+
description: "Run Playwright locally and capture screenshot/log evidence.",
|
|
139
|
+
status: "planned",
|
|
140
|
+
},
|
|
141
|
+
],
|
|
142
|
+
});
|
|
143
|
+
await executeGoals({
|
|
144
|
+
action: "create",
|
|
145
|
+
run_id: "goal-evidence-plan",
|
|
146
|
+
title: "Proof plan updated",
|
|
147
|
+
goal: "Verify real browser behavior",
|
|
148
|
+
success_criteria: ["Browser flow passes"],
|
|
149
|
+
prerequisites: [],
|
|
150
|
+
verifier_command: "pnpm test:e2e",
|
|
151
|
+
});
|
|
152
|
+
const run = await getGoalRun(tmpProject, "goal-evidence-plan");
|
|
153
|
+
expect(run?.evidencePlan).toEqual(expect.arrayContaining([
|
|
154
|
+
expect.objectContaining({
|
|
155
|
+
id: "browser-proof",
|
|
156
|
+
mechanism: "browser",
|
|
157
|
+
status: "planned",
|
|
158
|
+
}),
|
|
159
|
+
]));
|
|
160
|
+
expect(run?.verifier?.command).toBe("pnpm test:e2e");
|
|
161
|
+
});
|
|
162
|
+
it("does not complete without passing verifier evidence", async () => {
|
|
163
|
+
await executeGoals({
|
|
164
|
+
action: "create",
|
|
165
|
+
run_id: "goal-a",
|
|
166
|
+
title: "Guard completion",
|
|
167
|
+
goal: "Only complete after proof",
|
|
168
|
+
success_criteria: ["Verifier passes"],
|
|
169
|
+
prerequisites: [],
|
|
170
|
+
verifier_command: "pnpm test",
|
|
171
|
+
});
|
|
172
|
+
const result = await executeGoals({ action: "complete", run_id: "goal-a" });
|
|
173
|
+
const run = await getGoalRun(tmpProject, "goal-a");
|
|
174
|
+
expect(result).toBe("Error: cannot complete goal: Goal has no verifier evidence.");
|
|
175
|
+
expect(run?.status).toBe("ready");
|
|
176
|
+
});
|
|
177
|
+
it("records verifier pass as ready when tasks remain incomplete", async () => {
|
|
178
|
+
await executeGoals({
|
|
179
|
+
action: "create",
|
|
180
|
+
run_id: "goal-a",
|
|
181
|
+
title: "Guard verifier",
|
|
182
|
+
goal: "Verifier pass alone is not enough",
|
|
183
|
+
success_criteria: ["Task and verifier pass"],
|
|
184
|
+
prerequisites: [],
|
|
185
|
+
verifier_command: "pnpm test",
|
|
186
|
+
});
|
|
187
|
+
await executeGoals({
|
|
188
|
+
action: "task",
|
|
189
|
+
run_id: "goal-a",
|
|
190
|
+
task_id: "task-a",
|
|
191
|
+
task_title: "Pending work",
|
|
192
|
+
task_prompt: "Do the work",
|
|
193
|
+
});
|
|
194
|
+
await executeGoals({
|
|
195
|
+
action: "verify",
|
|
196
|
+
run_id: "goal-a",
|
|
197
|
+
verification_status: "pass",
|
|
198
|
+
summary: "Verifier passed",
|
|
199
|
+
exit_code: 0,
|
|
200
|
+
});
|
|
201
|
+
const run = await getGoalRun(tmpProject, "goal-a");
|
|
202
|
+
expect(run?.status).toBe("ready");
|
|
203
|
+
expect(run?.verifier?.lastResult?.status).toBe("pass");
|
|
204
|
+
});
|
|
205
|
+
it("records verifier failure as persisted command evidence and keeps the run recoverable", async () => {
|
|
206
|
+
await executeGoals({
|
|
207
|
+
action: "create",
|
|
208
|
+
run_id: "goal-a",
|
|
209
|
+
title: "Verifier fails",
|
|
210
|
+
goal: "Persist failure evidence",
|
|
211
|
+
success_criteria: ["Verifier passes"],
|
|
212
|
+
prerequisites: [],
|
|
213
|
+
verifier_command: "pnpm test",
|
|
214
|
+
});
|
|
215
|
+
await executeGoals({
|
|
216
|
+
action: "task",
|
|
217
|
+
run_id: "goal-a",
|
|
218
|
+
task_id: "task-a",
|
|
219
|
+
task_title: "Done work",
|
|
220
|
+
task_prompt: "Do the work",
|
|
221
|
+
task_status: "done",
|
|
222
|
+
});
|
|
223
|
+
const result = await executeGoals({
|
|
224
|
+
action: "verify",
|
|
225
|
+
run_id: "goal-a",
|
|
226
|
+
verification_status: "fail",
|
|
227
|
+
summary: "expected failure output",
|
|
228
|
+
exit_code: 1,
|
|
229
|
+
output_path: "artifacts/verifier.log",
|
|
230
|
+
});
|
|
231
|
+
const run = await getGoalRun(tmpProject, "goal-a");
|
|
232
|
+
expect(result).toBe('Verifier recorded for "Verifier fails": fail.');
|
|
233
|
+
expect(run?.status).toBe("ready");
|
|
234
|
+
expect(run?.verifier?.lastResult).toMatchObject({
|
|
235
|
+
status: "fail",
|
|
236
|
+
summary: "expected failure output",
|
|
237
|
+
exitCode: 1,
|
|
238
|
+
outputPath: "artifacts/verifier.log",
|
|
239
|
+
});
|
|
240
|
+
expect(run?.evidence).toEqual(expect.arrayContaining([
|
|
241
|
+
expect.objectContaining({
|
|
242
|
+
kind: "command",
|
|
243
|
+
label: "Verifier result",
|
|
244
|
+
content: "expected failure output",
|
|
245
|
+
path: "artifacts/verifier.log",
|
|
246
|
+
}),
|
|
247
|
+
]));
|
|
248
|
+
});
|
|
249
|
+
it("allows corrective next task to be added after verifier failure evidence", async () => {
|
|
250
|
+
await executeGoals({
|
|
251
|
+
action: "create",
|
|
252
|
+
run_id: "goal-a",
|
|
253
|
+
title: "Correct verifier failure",
|
|
254
|
+
goal: "Create corrective task",
|
|
255
|
+
success_criteria: ["Verifier passes"],
|
|
256
|
+
prerequisites: [],
|
|
257
|
+
verifier_command: "pnpm test",
|
|
258
|
+
});
|
|
259
|
+
await executeGoals({
|
|
260
|
+
action: "verify",
|
|
261
|
+
run_id: "goal-a",
|
|
262
|
+
verification_status: "fail",
|
|
263
|
+
summary: "failing assertion",
|
|
264
|
+
exit_code: 1,
|
|
265
|
+
});
|
|
266
|
+
const result = await executeGoals({
|
|
267
|
+
action: "task",
|
|
268
|
+
run_id: "goal-a",
|
|
269
|
+
task_id: "repair-a",
|
|
270
|
+
task_title: "Repair verifier failure",
|
|
271
|
+
task_prompt: "Use Verifier result evidence to fix failing assertion",
|
|
272
|
+
task_status: "pending",
|
|
273
|
+
});
|
|
274
|
+
const run = await getGoalRun(tmpProject, "goal-a");
|
|
275
|
+
expect(result).toBe('Goal task added: "Repair verifier failure".');
|
|
276
|
+
expect(run?.status).toBe("ready");
|
|
277
|
+
expect(run?.tasks).toEqual(expect.arrayContaining([
|
|
278
|
+
expect.objectContaining({
|
|
279
|
+
id: "repair-a",
|
|
280
|
+
status: "pending",
|
|
281
|
+
prompt: "Use Verifier result evidence to fix failing assertion",
|
|
282
|
+
}),
|
|
283
|
+
]));
|
|
284
|
+
expect(run ? decideGoalNextAction(run) : null).toMatchObject({
|
|
285
|
+
kind: "start_worker",
|
|
286
|
+
task: expect.objectContaining({ id: "repair-a" }),
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
it("records pause evidence after repeated non-progress", async () => {
|
|
290
|
+
await executeGoals({
|
|
291
|
+
action: "create",
|
|
292
|
+
run_id: "goal-a",
|
|
293
|
+
title: "Pause loop",
|
|
294
|
+
goal: "Stop repeated non-progress",
|
|
295
|
+
success_criteria: ["No infinite loop"],
|
|
296
|
+
prerequisites: [],
|
|
297
|
+
});
|
|
298
|
+
await executeGoals({
|
|
299
|
+
action: "task",
|
|
300
|
+
run_id: "goal-a",
|
|
301
|
+
task_id: "task-a",
|
|
302
|
+
task_title: "Flaky work",
|
|
303
|
+
task_prompt: "Try again",
|
|
304
|
+
task_status: "failed",
|
|
305
|
+
attempts: 6,
|
|
306
|
+
summary: "same failure repeated",
|
|
307
|
+
});
|
|
308
|
+
await executeGoals({
|
|
309
|
+
action: "evidence",
|
|
310
|
+
run_id: "goal-a",
|
|
311
|
+
evidence_kind: "summary",
|
|
312
|
+
evidence_label: "Paused after repeated non-progress",
|
|
313
|
+
evidence_content: "Attempt limit reached for Flaky work.",
|
|
314
|
+
});
|
|
315
|
+
const result = await executeGoals({ action: "pause", run_id: "goal-a" });
|
|
316
|
+
const run = await getGoalRun(tmpProject, "goal-a");
|
|
317
|
+
expect(result).toBe('Goal "Pause loop" is now paused.');
|
|
318
|
+
expect(run?.status).toBe("paused");
|
|
319
|
+
expect(run?.evidence).toEqual(expect.arrayContaining([
|
|
320
|
+
expect.objectContaining({
|
|
321
|
+
kind: "summary",
|
|
322
|
+
label: "Paused after repeated non-progress",
|
|
323
|
+
content: "Attempt limit reached for Flaky work.",
|
|
324
|
+
}),
|
|
325
|
+
]));
|
|
326
|
+
});
|
|
327
|
+
it("resume-immediate records continuation intent and next action", async () => {
|
|
328
|
+
await executeGoals({
|
|
329
|
+
action: "create",
|
|
330
|
+
run_id: "goal-resume",
|
|
331
|
+
title: "Resume now",
|
|
332
|
+
goal: "Continue",
|
|
333
|
+
prerequisites: [],
|
|
334
|
+
});
|
|
335
|
+
await executeGoals({
|
|
336
|
+
action: "task",
|
|
337
|
+
run_id: "goal-resume",
|
|
338
|
+
task_id: "task-a",
|
|
339
|
+
task_title: "Work",
|
|
340
|
+
task_prompt: "Do it",
|
|
341
|
+
});
|
|
342
|
+
const result = await executeGoals({ action: "resume", run_id: "goal-resume" });
|
|
343
|
+
const run = await getGoalRun(tmpProject, "goal-resume");
|
|
344
|
+
expect(result).toBe('Goal "Resume now" resume requested; next action: start_worker.');
|
|
345
|
+
expect(run?.status).toBe("ready");
|
|
346
|
+
expect(run?.continueRequestedAt).toBeTruthy();
|
|
347
|
+
expect(run?.evidence).toEqual(expect.arrayContaining([
|
|
348
|
+
expect.objectContaining({ label: "Goal resume requested" }),
|
|
349
|
+
expect.objectContaining({ label: "Goal decision: resume" }),
|
|
350
|
+
]));
|
|
351
|
+
});
|
|
352
|
+
it("resume-queued-behind-active-worker persists continuation intent", async () => {
|
|
353
|
+
await executeGoals({
|
|
354
|
+
action: "create",
|
|
355
|
+
run_id: "goal-queued",
|
|
356
|
+
title: "Queued resume",
|
|
357
|
+
goal: "Continue later",
|
|
358
|
+
prerequisites: [],
|
|
359
|
+
});
|
|
360
|
+
await executeGoals({
|
|
361
|
+
action: "task",
|
|
362
|
+
run_id: "goal-queued",
|
|
363
|
+
task_id: "task-a",
|
|
364
|
+
task_title: "Work",
|
|
365
|
+
task_prompt: "Do it",
|
|
366
|
+
task_status: "running",
|
|
367
|
+
worker_id: "worker-a",
|
|
368
|
+
});
|
|
369
|
+
const result = await executeGoals({ action: "resume", run_id: "goal-queued" });
|
|
370
|
+
const run = await getGoalRun(tmpProject, "goal-queued");
|
|
371
|
+
expect(result).toBe('Goal "Queued resume" resume queued: Goal task "Work" is already running.');
|
|
372
|
+
expect(run?.continueRequestedAt).toBeTruthy();
|
|
373
|
+
expect(run?.evidence).toEqual(expect.arrayContaining([
|
|
374
|
+
expect.objectContaining({ label: "Goal resume requested" }),
|
|
375
|
+
expect.objectContaining({ label: "Goal decision: resume" }),
|
|
376
|
+
]));
|
|
377
|
+
});
|
|
378
|
+
it("resume-blocked-prerequisite keeps exact missing instructions", async () => {
|
|
379
|
+
await executeGoals({
|
|
380
|
+
action: "create",
|
|
381
|
+
run_id: "goal-blocked",
|
|
382
|
+
title: "Blocked resume",
|
|
383
|
+
goal: "Needs input",
|
|
384
|
+
prerequisites: [
|
|
385
|
+
{ id: "key", label: "API key", status: "missing", instructions: "Set API_KEY locally." },
|
|
386
|
+
],
|
|
387
|
+
});
|
|
388
|
+
const result = await executeGoals({ action: "resume", run_id: "goal-blocked" });
|
|
389
|
+
const run = await getGoalRun(tmpProject, "goal-blocked");
|
|
390
|
+
expect(result).toBe('Goal "Blocked resume" resume blocked: API key: Set API_KEY locally.');
|
|
391
|
+
expect(run?.status).toBe("blocked");
|
|
392
|
+
expect(run?.blockers).toContain("API key: Set API_KEY locally.");
|
|
393
|
+
expect(run?.evidence).toEqual(expect.arrayContaining([
|
|
394
|
+
expect.objectContaining({
|
|
395
|
+
label: "Goal resume blocked",
|
|
396
|
+
content: "API key: Set API_KEY locally.",
|
|
397
|
+
}),
|
|
398
|
+
]));
|
|
399
|
+
});
|
|
400
|
+
it("allows completion after all tasks are done and verifier passes", async () => {
|
|
401
|
+
await executeGoals({
|
|
402
|
+
action: "create",
|
|
403
|
+
run_id: "goal-a",
|
|
404
|
+
title: "Complete safely",
|
|
405
|
+
goal: "Complete after proof",
|
|
406
|
+
success_criteria: ["Task and verifier pass"],
|
|
407
|
+
prerequisites: [],
|
|
408
|
+
verifier_command: "pnpm test",
|
|
409
|
+
});
|
|
410
|
+
await executeGoals({
|
|
411
|
+
action: "task",
|
|
412
|
+
run_id: "goal-a",
|
|
413
|
+
task_id: "task-a",
|
|
414
|
+
task_title: "Done work",
|
|
415
|
+
task_prompt: "Do the work",
|
|
416
|
+
task_status: "done",
|
|
417
|
+
});
|
|
418
|
+
await executeGoals({
|
|
419
|
+
action: "verify",
|
|
420
|
+
run_id: "goal-a",
|
|
421
|
+
verification_status: "pass",
|
|
422
|
+
summary: "Verifier passed",
|
|
423
|
+
exit_code: 0,
|
|
424
|
+
});
|
|
425
|
+
const result = await executeGoals({ action: "complete", run_id: "goal-a" });
|
|
426
|
+
const run = await getGoalRun(tmpProject, "goal-a");
|
|
427
|
+
expect(result).toBe('Goal "Complete safely" is now passed.');
|
|
428
|
+
expect(run?.status).toBe("passed");
|
|
429
|
+
});
|
|
430
|
+
});
|
|
431
|
+
//# sourceMappingURL=goals.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goals.test.js","sourceRoot":"","sources":["../../src/tools/goals.test.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/grep.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grep.d.ts","sourceRoot":"","sources":["../../src/tools/grep.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEvE,QAAA,MAAM,UAAU;;;;;;iBAWd,CAAC;
|
|
1
|
+
{"version":3,"file":"grep.d.ts","sourceRoot":"","sources":["../../src/tools/grep.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEvE,QAAA,MAAM,UAAU;;;;;;iBAWd,CAAC;AAQH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,cAAgC,GACpC,SAAS,CAAC,OAAO,UAAU,CAAC,CAqE9B"}
|
package/dist/tools/grep.js
CHANGED
|
@@ -20,6 +20,7 @@ const DEFAULT_MAX_RESULTS = 50;
|
|
|
20
20
|
const MAX_LINE_LENGTH = 500;
|
|
21
21
|
/** Skip files larger than 10 MB — single-line files (minified JS, data blobs) can OOM readline */
|
|
22
22
|
const MAX_FILE_SIZE = 10 * 1024 * 1024;
|
|
23
|
+
const MAX_CANDIDATE_FILES = 10_000;
|
|
23
24
|
export function createGrepTool(cwd, ops = localOperations) {
|
|
24
25
|
return {
|
|
25
26
|
name: "grep",
|
|
@@ -53,11 +54,21 @@ export function createGrepTool(cwd, ops = localOperations) {
|
|
|
53
54
|
ignore: ["**/node_modules/**", "**/.git/**"],
|
|
54
55
|
suppressErrors: true,
|
|
55
56
|
followSymbolicLinks: false,
|
|
57
|
+
objectMode: true,
|
|
58
|
+
stats: false,
|
|
56
59
|
});
|
|
57
60
|
const results = [];
|
|
58
|
-
|
|
61
|
+
let scannedCandidates = 0;
|
|
62
|
+
let candidateLimitHit = false;
|
|
63
|
+
for (const item of entries) {
|
|
59
64
|
if (results.length >= maxResults)
|
|
60
65
|
break;
|
|
66
|
+
if (scannedCandidates >= MAX_CANDIDATE_FILES) {
|
|
67
|
+
candidateLimitHit = true;
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
scannedCandidates += 1;
|
|
71
|
+
const entry = typeof item === "string" ? item : item.path;
|
|
61
72
|
const ext = path.extname(entry).toLowerCase();
|
|
62
73
|
if (BINARY_EXTENSIONS.has(ext))
|
|
63
74
|
continue;
|
|
@@ -65,7 +76,7 @@ export function createGrepTool(cwd, ops = localOperations) {
|
|
|
65
76
|
const fileResults = await searchFile(filePath, regex, cwd, maxResults - results.length, ops);
|
|
66
77
|
results.push(...fileResults);
|
|
67
78
|
}
|
|
68
|
-
return formatResults(results, maxResults);
|
|
79
|
+
return formatResults(results, maxResults, candidateLimitHit);
|
|
69
80
|
},
|
|
70
81
|
};
|
|
71
82
|
}
|
|
@@ -120,9 +131,12 @@ async function searchFile(filePath, regex, cwd, maxResults, ops) {
|
|
|
120
131
|
}
|
|
121
132
|
return results;
|
|
122
133
|
}
|
|
123
|
-
function formatResults(results, maxResults) {
|
|
124
|
-
if (results.length === 0)
|
|
125
|
-
return
|
|
134
|
+
function formatResults(results, maxResults, candidateLimitHit = false) {
|
|
135
|
+
if (results.length === 0) {
|
|
136
|
+
return candidateLimitHit
|
|
137
|
+
? `No matches found. [Stopped after scanning ${MAX_CANDIDATE_FILES} candidate files]`
|
|
138
|
+
: "No matches found.";
|
|
139
|
+
}
|
|
126
140
|
let output = results.join("\n");
|
|
127
141
|
if (results.length >= maxResults) {
|
|
128
142
|
output += `\n\n[Truncated at ${maxResults} matches]`;
|
|
@@ -130,6 +144,9 @@ function formatResults(results, maxResults) {
|
|
|
130
144
|
else {
|
|
131
145
|
output += `\n\n${results.length} match(es) found`;
|
|
132
146
|
}
|
|
147
|
+
if (candidateLimitHit) {
|
|
148
|
+
output += `\n[Stopped after scanning ${MAX_CANDIDATE_FILES} candidate files]`;
|
|
149
|
+
}
|
|
133
150
|
return output;
|
|
134
151
|
}
|
|
135
152
|
//# sourceMappingURL=grep.js.map
|
package/dist/tools/grep.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grep.js","sourceRoot":"","sources":["../../src/tools/grep.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAuB,MAAM,iBAAiB,CAAC;AAEvE,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAChE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IACrF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IACrF,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,yCAAyC,CAAC;IACtD,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CAC7E,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,eAAe,GAAG,GAAG,CAAC;AAC5B,kGAAkG;AAClG,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"grep.js","sourceRoot":"","sources":["../../src/tools/grep.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grep.test.d.ts","sourceRoot":"","sources":["../../src/tools/grep.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { createGrepTool } from "./grep.js";
|
|
6
|
+
function context() {
|
|
7
|
+
return { signal: new AbortController().signal, toolCallId: "test" };
|
|
8
|
+
}
|
|
9
|
+
describe("createGrepTool", () => {
|
|
10
|
+
it("stops after max_results before scanning later files", async () => {
|
|
11
|
+
const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "gg-grep-limit-"));
|
|
12
|
+
await fs.writeFile(path.join(tmpDir, "a.txt"), "needle\n");
|
|
13
|
+
await fs.writeFile(path.join(tmpDir, "z.txt"), "needle\n");
|
|
14
|
+
const result = await createGrepTool(tmpDir).execute({ pattern: "needle", include: "*.txt", max_results: 1 }, context());
|
|
15
|
+
expect(result).toContain("a.txt:1:needle");
|
|
16
|
+
expect(result).not.toContain("z.txt:1:needle");
|
|
17
|
+
expect(result).toContain("[Truncated at 1 matches]");
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=grep.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grep.test.js","sourceRoot":"","sources":["../../src/tools/grep.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,SAAS,OAAO;IACd,OAAO,EAAE,MAAM,EAAE,IAAI,eAAe,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AACtE,CAAC;AAED,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC1E,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;QAC3D,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;QAE3D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CACjD,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,EACvD,OAAO,EAAE,CACV,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -50,6 +50,7 @@ export { createSourcePathTool } from "./source-path.js";
|
|
|
50
50
|
export { createTaskOutputTool } from "./task-output.js";
|
|
51
51
|
export { createTaskStopTool } from "./task-stop.js";
|
|
52
52
|
export { createTasksTool } from "./tasks.js";
|
|
53
|
+
export { createGoalsTool } from "./goals.js";
|
|
53
54
|
export { createSkillTool } from "./skill.js";
|
|
54
55
|
export { createEnterPlanTool } from "./enter-plan.js";
|
|
55
56
|
export { createExitPlanTool } from "./exit-plan.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAmB5D,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oGAAoG;IACpG,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,sEAAsE;IACtE,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IACnC,8CAA8C;IAC9C,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,6EAA6E;IAC7E,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,+DAA+D;IAC/D,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,kEAAkE;IAClE,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;CAChC;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,iBAAiB,CAqDrF;AAED,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/tools/index.js
CHANGED
|
@@ -13,6 +13,7 @@ import { createSourcePathTool } from "./source-path.js";
|
|
|
13
13
|
import { createTaskOutputTool } from "./task-output.js";
|
|
14
14
|
import { createTaskStopTool } from "./task-stop.js";
|
|
15
15
|
import { createTasksTool } from "./tasks.js";
|
|
16
|
+
import { createGoalsTool } from "./goals.js";
|
|
16
17
|
import { createSkillTool } from "./skill.js";
|
|
17
18
|
import { createEnterPlanTool } from "./enter-plan.js";
|
|
18
19
|
import { createExitPlanTool } from "./exit-plan.js";
|
|
@@ -35,6 +36,7 @@ export function createTools(cwd, opts) {
|
|
|
35
36
|
createTaskOutputTool(processManager),
|
|
36
37
|
createTaskStopTool(processManager),
|
|
37
38
|
createTasksTool(cwd),
|
|
39
|
+
createGoalsTool(cwd),
|
|
38
40
|
];
|
|
39
41
|
// Add web search tool for providers without reliable native web search
|
|
40
42
|
if (opts?.provider && opts.provider !== "anthropic") {
|
|
@@ -67,6 +69,7 @@ export { createSourcePathTool } from "./source-path.js";
|
|
|
67
69
|
export { createTaskOutputTool } from "./task-output.js";
|
|
68
70
|
export { createTaskStopTool } from "./task-stop.js";
|
|
69
71
|
export { createTasksTool } from "./tasks.js";
|
|
72
|
+
export { createGoalsTool } from "./goals.js";
|
|
70
73
|
export { createSkillTool } from "./skill.js";
|
|
71
74
|
export { createEnterPlanTool } from "./enter-plan.js";
|
|
72
75
|
export { createExitPlanTool } from "./exit-plan.js";
|