@oharness/engine 0.9.2 → 0.10.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/dist/agent/agent.d.ts +207 -1
- package/dist/agent/agent.js +691 -55
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/background.d.ts +135 -0
- package/dist/agent/background.js +307 -0
- package/dist/agent/background.js.map +1 -0
- package/dist/agent/compaction.d.ts +7 -0
- package/dist/agent/compaction.js +11 -3
- package/dist/agent/compaction.js.map +1 -1
- package/dist/agent/goal.d.ts +36 -0
- package/dist/agent/goal.js +71 -0
- package/dist/agent/goal.js.map +1 -0
- package/dist/agent/permissions.d.ts +6 -0
- package/dist/agent/permissions.js +2 -1
- package/dist/agent/permissions.js.map +1 -1
- package/dist/agent/session.d.ts +36 -0
- package/dist/agent/session.js +72 -0
- package/dist/agent/session.js.map +1 -1
- package/dist/agent/store.d.ts +25 -0
- package/dist/agent/store.js +21 -0
- package/dist/agent/store.js.map +1 -1
- package/dist/agent/subagent.d.ts +12 -0
- package/dist/agent/subagent.js +11 -1
- package/dist/agent/subagent.js.map +1 -1
- package/dist/agent/workspace.d.ts +9 -0
- package/dist/agent/workspace.js +59 -5
- package/dist/agent/workspace.js.map +1 -1
- package/dist/auth/manager.d.ts +9 -0
- package/dist/auth/manager.js +67 -6
- package/dist/auth/manager.js.map +1 -1
- package/dist/auth/providers/account.js +5 -4
- package/dist/auth/providers/account.js.map +1 -1
- package/dist/browser/tools.js +3 -0
- package/dist/browser/tools.js.map +1 -1
- package/dist/computer/arbiter.d.ts +69 -0
- package/dist/computer/arbiter.js +128 -0
- package/dist/computer/arbiter.js.map +1 -0
- package/dist/computer/cua-driver.d.ts +115 -0
- package/dist/computer/cua-driver.js +453 -0
- package/dist/computer/cua-driver.js.map +1 -0
- package/dist/computer/helper-client.d.ts +78 -0
- package/dist/computer/helper-client.js +163 -0
- package/dist/computer/helper-client.js.map +1 -0
- package/dist/computer/index.d.ts +15 -0
- package/dist/computer/index.js +9 -0
- package/dist/computer/index.js.map +1 -0
- package/dist/computer/mode.d.ts +19 -0
- package/dist/computer/mode.js +42 -0
- package/dist/computer/mode.js.map +1 -0
- package/dist/computer/plugin.d.ts +24 -0
- package/dist/computer/plugin.js +17 -0
- package/dist/computer/plugin.js.map +1 -0
- package/dist/computer/policy.d.ts +29 -0
- package/dist/computer/policy.js +127 -0
- package/dist/computer/policy.js.map +1 -0
- package/dist/computer/session.d.ts +199 -0
- package/dist/computer/session.js +392 -0
- package/dist/computer/session.js.map +1 -0
- package/dist/computer/target.d.ts +187 -0
- package/dist/computer/target.js +31 -0
- package/dist/computer/target.js.map +1 -0
- package/dist/computer/tools.d.ts +8 -0
- package/dist/computer/tools.js +537 -0
- package/dist/computer/tools.js.map +1 -0
- package/dist/core/tokens.js +4 -0
- package/dist/core/tokens.js.map +1 -1
- package/dist/core/types.d.ts +16 -1
- package/dist/core/types.js.map +1 -1
- package/dist/harness.d.ts +76 -1
- package/dist/harness.js +178 -22
- package/dist/harness.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/transport.js +3 -0
- package/dist/mcp/transport.js.map +1 -1
- package/dist/providers/catalog.js +6 -0
- package/dist/providers/catalog.js.map +1 -1
- package/dist/providers/discovery.js +10 -2
- package/dist/providers/discovery.js.map +1 -1
- package/dist/providers/models-dev.js +1 -0
- package/dist/providers/models-dev.js.map +1 -1
- package/dist/providers/models-dev.json +114 -102
- package/dist/providers/piai.d.ts +16 -1
- package/dist/providers/piai.js +84 -7
- package/dist/providers/piai.js.map +1 -1
- package/dist/providers/types.d.ts +6 -0
- package/dist/providers/types.js.map +1 -1
- package/dist/runtime-plugins/cloud-connector.js +5 -0
- package/dist/runtime-plugins/cloud-connector.js.map +1 -1
- package/dist/schedule/scheduler.d.ts +38 -0
- package/dist/schedule/scheduler.js +101 -1
- package/dist/schedule/scheduler.js.map +1 -1
- package/dist/tools/builtin/bash.d.ts +6 -0
- package/dist/tools/builtin/bash.js +2 -1
- package/dist/tools/builtin/bash.js.map +1 -1
- package/dist/tools/builtin/recall.js +4 -0
- package/dist/tools/builtin/recall.js.map +1 -1
- package/dist/tools/builtin/routine.d.ts +9 -0
- package/dist/tools/builtin/routine.js +23 -2
- package/dist/tools/builtin/routine.js.map +1 -1
- package/dist/tools/builtin/task-control.d.ts +21 -0
- package/dist/tools/builtin/task-control.js +120 -0
- package/dist/tools/builtin/task-control.js.map +1 -0
- package/dist/tools/builtin/task.js +50 -9
- package/dist/tools/builtin/task.js.map +1 -1
- package/dist/tools/builtin/todo.d.ts +1 -1
- package/dist/tools/builtin/worktree.d.ts +10 -0
- package/dist/tools/builtin/worktree.js +52 -0
- package/dist/tools/builtin/worktree.js.map +1 -0
- package/dist/tools/define.d.ts +4 -1
- package/dist/tools/define.js +2 -0
- package/dist/tools/define.js.map +1 -1
- package/dist/tools/types.d.ts +112 -0
- package/dist/tools/types.js.map +1 -1
- package/dist/worktree/index.d.ts +109 -0
- package/dist/worktree/index.js +463 -0
- package/dist/worktree/index.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { errorMessage } from "../core/errors.js";
|
|
3
|
+
export const DEFAULT_MAX_BACKGROUND_TASKS = 4;
|
|
4
|
+
/** Per task, in a notification. The full text stays readable with task_output. */
|
|
5
|
+
export const NOTIFICATION_RESULT_CHARS = 4000;
|
|
6
|
+
/** Across one notification, however many tasks it carries. */
|
|
7
|
+
export const NOTIFICATION_TOTAL_CHARS = 12_000;
|
|
8
|
+
export class BackgroundTasks {
|
|
9
|
+
entries = new Map();
|
|
10
|
+
settledListeners = new Set();
|
|
11
|
+
changeListeners = new Set();
|
|
12
|
+
/** Runs waiting for a slot: a first run, or a message to an ended task. */
|
|
13
|
+
waiting = [];
|
|
14
|
+
maxConcurrent;
|
|
15
|
+
now;
|
|
16
|
+
signal;
|
|
17
|
+
onAbort = () => this.stopAll();
|
|
18
|
+
constructor(opts = {}) {
|
|
19
|
+
this.maxConcurrent = Math.max(1, opts.maxConcurrent ?? DEFAULT_MAX_BACKGROUND_TASKS);
|
|
20
|
+
this.now = opts.now ?? Date.now;
|
|
21
|
+
if (opts.signal) {
|
|
22
|
+
this.signal = opts.signal;
|
|
23
|
+
opts.signal.addEventListener("abort", this.onAbort, { once: true });
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Let go of the host's shutdown signal. Its listener holds this table, and
|
|
28
|
+
* through it the conversation, for as long as the host lives.
|
|
29
|
+
*/
|
|
30
|
+
detach() {
|
|
31
|
+
this.signal?.removeEventListener("abort", this.onAbort);
|
|
32
|
+
}
|
|
33
|
+
start(spec) {
|
|
34
|
+
const view = {
|
|
35
|
+
id: `t_${randomUUID().replaceAll("-", "").slice(0, 8)}`,
|
|
36
|
+
agentType: spec.agentType,
|
|
37
|
+
description: spec.description,
|
|
38
|
+
status: "queued",
|
|
39
|
+
queuedAt: this.now(),
|
|
40
|
+
turns: 0,
|
|
41
|
+
usage: { inputTokens: 0, outputTokens: 0 },
|
|
42
|
+
};
|
|
43
|
+
const entry = { view, spec, controller: new AbortController(), delivered: false, priorTurns: 0, disposed: false };
|
|
44
|
+
this.entries.set(view.id, entry);
|
|
45
|
+
this.waiting.push({ entry });
|
|
46
|
+
this.changed(entry);
|
|
47
|
+
this.pump();
|
|
48
|
+
return { ...view };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Put back a task from before a restart, as it was left. Only an ended task
|
|
52
|
+
* comes back: whatever was running then is not running now.
|
|
53
|
+
*/
|
|
54
|
+
restore(view, spec, delivered) {
|
|
55
|
+
if (this.entries.has(view.id))
|
|
56
|
+
return;
|
|
57
|
+
const entry = { view: { ...view }, spec, controller: new AbortController(), delivered, priorTurns: view.turns, disposed: false };
|
|
58
|
+
this.entries.set(view.id, entry);
|
|
59
|
+
this.changed(entry);
|
|
60
|
+
}
|
|
61
|
+
/** Every task with whether its latest result has been read in: what a save keeps. */
|
|
62
|
+
saved() {
|
|
63
|
+
return [...this.entries.values()].map((entry) => ({ view: { ...entry.view }, delivered: entry.delivered }));
|
|
64
|
+
}
|
|
65
|
+
get(id) {
|
|
66
|
+
const entry = this.entries.get(id);
|
|
67
|
+
return entry ? { ...entry.view } : undefined;
|
|
68
|
+
}
|
|
69
|
+
list() {
|
|
70
|
+
return [...this.entries.values()].map((entry) => ({ ...entry.view }));
|
|
71
|
+
}
|
|
72
|
+
/** Tasks that have not ended yet, queued ones included. */
|
|
73
|
+
active() {
|
|
74
|
+
return this.list().filter((task) => !ended(task.status));
|
|
75
|
+
}
|
|
76
|
+
transcript(id) {
|
|
77
|
+
const entry = this.entries.get(id);
|
|
78
|
+
return entry ? entry.spec.transcript?.() ?? [] : undefined;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Say something to a task. Running, it reads the message at its next gap.
|
|
82
|
+
* Ended, it runs again from where it stopped, and its new result is
|
|
83
|
+
* announced like the first. A stopped task stays stopped.
|
|
84
|
+
*/
|
|
85
|
+
send(id, message) {
|
|
86
|
+
const entry = this.entries.get(id);
|
|
87
|
+
if (!entry)
|
|
88
|
+
return "unknown";
|
|
89
|
+
const status = entry.view.status;
|
|
90
|
+
if (status === "cancelled")
|
|
91
|
+
return "stopped";
|
|
92
|
+
if (status === "running")
|
|
93
|
+
return entry.spec.interject?.(message) ? "interjected" : "busy";
|
|
94
|
+
if (status === "queued")
|
|
95
|
+
return "busy";
|
|
96
|
+
if (!entry.spec.resume)
|
|
97
|
+
return "stopped";
|
|
98
|
+
entry.view.status = "queued";
|
|
99
|
+
entry.view.queuedAt = this.now();
|
|
100
|
+
delete entry.view.dismissed;
|
|
101
|
+
delete entry.view.endedAt;
|
|
102
|
+
delete entry.view.result;
|
|
103
|
+
delete entry.view.error;
|
|
104
|
+
entry.delivered = false;
|
|
105
|
+
entry.controller = new AbortController();
|
|
106
|
+
this.waiting.push({ entry, message });
|
|
107
|
+
this.changed(entry);
|
|
108
|
+
this.pump();
|
|
109
|
+
return "resumed";
|
|
110
|
+
}
|
|
111
|
+
/** Put an ended task away; false for one still running or unknown. */
|
|
112
|
+
dismiss(id) {
|
|
113
|
+
const entry = this.entries.get(id);
|
|
114
|
+
if (!entry || !ended(entry.view.status))
|
|
115
|
+
return false;
|
|
116
|
+
entry.view.dismissed = true;
|
|
117
|
+
this.changed(entry);
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* End a task for good. Its result is never announced: whoever stopped it
|
|
122
|
+
* already knows. Works on an ended task too, to let go of what it holds.
|
|
123
|
+
* Returns false for an unknown id or one already stopped.
|
|
124
|
+
*/
|
|
125
|
+
stop(id) {
|
|
126
|
+
const entry = this.entries.get(id);
|
|
127
|
+
if (!entry || entry.view.status === "cancelled")
|
|
128
|
+
return false;
|
|
129
|
+
entry.delivered = true;
|
|
130
|
+
const status = entry.view.status;
|
|
131
|
+
if (status === "running") {
|
|
132
|
+
// Settles as cancelled when the run unwinds; disposed then.
|
|
133
|
+
entry.controller.abort();
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
const at = this.waiting.findIndex((item) => item.entry === entry);
|
|
137
|
+
if (at >= 0)
|
|
138
|
+
this.waiting.splice(at, 1);
|
|
139
|
+
this.settle(entry, "cancelled");
|
|
140
|
+
this.dispose(entry);
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
stopAll() {
|
|
144
|
+
for (const entry of this.entries.values())
|
|
145
|
+
this.stop(entry.view.id);
|
|
146
|
+
}
|
|
147
|
+
/** Whether some ended task has a result nobody has been told about. */
|
|
148
|
+
hasUndelivered() {
|
|
149
|
+
for (const entry of this.entries.values())
|
|
150
|
+
if (!entry.delivered && ended(entry.view.status))
|
|
151
|
+
return true;
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Ended tasks whose results have not been read in yet, oldest first, marked
|
|
156
|
+
* delivered as they are handed over so no path reads one twice.
|
|
157
|
+
*/
|
|
158
|
+
takeUndelivered() {
|
|
159
|
+
const out = [];
|
|
160
|
+
for (const entry of this.entries.values()) {
|
|
161
|
+
if (entry.delivered || !ended(entry.view.status))
|
|
162
|
+
continue;
|
|
163
|
+
entry.delivered = true;
|
|
164
|
+
out.push({ ...entry.view });
|
|
165
|
+
// Said so, or a save from before this read would bring the result back
|
|
166
|
+
// undelivered after a restart, and it would be announced twice.
|
|
167
|
+
this.changed(entry);
|
|
168
|
+
}
|
|
169
|
+
return out.sort((a, b) => (a.endedAt ?? 0) - (b.endedAt ?? 0));
|
|
170
|
+
}
|
|
171
|
+
/** Called whenever a task ends, however it ended. */
|
|
172
|
+
onSettled(listener) {
|
|
173
|
+
this.settledListeners.add(listener);
|
|
174
|
+
return () => this.settledListeners.delete(listener);
|
|
175
|
+
}
|
|
176
|
+
/** Called on anything a viewer would redraw for: a start, a turn, a tool, an end. */
|
|
177
|
+
onChange(listener) {
|
|
178
|
+
this.changeListeners.add(listener);
|
|
179
|
+
return () => this.changeListeners.delete(listener);
|
|
180
|
+
}
|
|
181
|
+
pump() {
|
|
182
|
+
let running = [...this.entries.values()].filter((entry) => entry.view.status === "running").length;
|
|
183
|
+
while (running < this.maxConcurrent && this.waiting.length) {
|
|
184
|
+
const next = this.waiting.shift();
|
|
185
|
+
running++;
|
|
186
|
+
void this.launch(next.entry, next.message);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
async launch(entry, message) {
|
|
190
|
+
entry.view.status = "running";
|
|
191
|
+
entry.view.startedAt = this.now();
|
|
192
|
+
entry.priorTurns = entry.view.turns;
|
|
193
|
+
this.changed(entry);
|
|
194
|
+
const report = {
|
|
195
|
+
activity: (text) => { entry.view.activity = text; this.changed(entry); },
|
|
196
|
+
turn: () => { entry.view.turns++; this.changed(entry); },
|
|
197
|
+
};
|
|
198
|
+
const signal = entry.controller.signal;
|
|
199
|
+
try {
|
|
200
|
+
const outcome = message !== undefined && entry.spec.resume
|
|
201
|
+
? await entry.spec.resume(message, signal, report)
|
|
202
|
+
: await entry.spec.run(signal, report);
|
|
203
|
+
entry.view.result = outcome.text;
|
|
204
|
+
entry.view.turns = entry.priorTurns + outcome.turns;
|
|
205
|
+
entry.view.usage = {
|
|
206
|
+
inputTokens: entry.view.usage.inputTokens + outcome.usage.inputTokens,
|
|
207
|
+
outputTokens: entry.view.usage.outputTokens + outcome.usage.outputTokens,
|
|
208
|
+
};
|
|
209
|
+
if (outcome.worktree)
|
|
210
|
+
entry.view.worktree = outcome.worktree;
|
|
211
|
+
else
|
|
212
|
+
delete entry.view.worktree;
|
|
213
|
+
this.settle(entry, signal.aborted ? "cancelled" : "completed");
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
entry.view.error = errorMessage(err);
|
|
217
|
+
this.settle(entry, signal.aborted ? "cancelled" : "failed");
|
|
218
|
+
}
|
|
219
|
+
// Read back through the type: TypeScript still thinks it is "running".
|
|
220
|
+
if (entry.view.status === "cancelled")
|
|
221
|
+
this.dispose(entry);
|
|
222
|
+
this.pump();
|
|
223
|
+
}
|
|
224
|
+
settle(entry, status) {
|
|
225
|
+
entry.view.status = status;
|
|
226
|
+
entry.view.endedAt = this.now();
|
|
227
|
+
delete entry.view.activity;
|
|
228
|
+
const view = { ...entry.view };
|
|
229
|
+
for (const listener of this.settledListeners) {
|
|
230
|
+
try {
|
|
231
|
+
listener(view);
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
// A listener that throws must not leave the task half-settled.
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
this.changed(entry);
|
|
238
|
+
}
|
|
239
|
+
dispose(entry) {
|
|
240
|
+
if (entry.disposed)
|
|
241
|
+
return;
|
|
242
|
+
entry.disposed = true;
|
|
243
|
+
void entry.spec.dispose?.().catch(() => { });
|
|
244
|
+
}
|
|
245
|
+
changed(entry) {
|
|
246
|
+
const view = { ...entry.view };
|
|
247
|
+
for (const listener of this.changeListeners) {
|
|
248
|
+
try {
|
|
249
|
+
listener(view);
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
// A viewer that throws must not stop the task.
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
function ended(status) {
|
|
258
|
+
return status === "completed" || status === "failed" || status === "cancelled";
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* The message a batch of finished tasks is read into the conversation as.
|
|
262
|
+
*
|
|
263
|
+
* It says up front that nobody typed it, and it ends with what is still
|
|
264
|
+
* running, so the model can tell "wait for the rest" from "time to sum up"
|
|
265
|
+
* without having to go and look.
|
|
266
|
+
*/
|
|
267
|
+
export function formatNotification(tasks, stillRunning) {
|
|
268
|
+
const lines = ["[Background task update — an automatic message, not from the user.]"];
|
|
269
|
+
let budget = NOTIFICATION_TOTAL_CHARS;
|
|
270
|
+
for (const task of tasks) {
|
|
271
|
+
const share = Math.min(NOTIFICATION_RESULT_CHARS, Math.max(500, Math.floor(budget / Math.max(1, tasks.length))));
|
|
272
|
+
const body = task.status === "failed" ? task.error ?? "(no error message)" : task.result || "(the subagent returned no text)";
|
|
273
|
+
const clipped = body.length > share
|
|
274
|
+
? `${body.slice(0, share)}\n… cut at ${share} of ${body.length} characters; task_output("${task.id}") has the rest.`
|
|
275
|
+
: body;
|
|
276
|
+
budget -= clipped.length;
|
|
277
|
+
const attrs = [
|
|
278
|
+
`id="${task.id}"`,
|
|
279
|
+
`status="${task.status}"`,
|
|
280
|
+
`agent="${escapeAttr(task.agentType)}"`,
|
|
281
|
+
`description="${escapeAttr(task.description)}"`,
|
|
282
|
+
...(task.startedAt && task.endedAt ? [`duration="${duration(task.endedAt - task.startedAt)}"`] : []),
|
|
283
|
+
`turns="${task.turns}"`,
|
|
284
|
+
];
|
|
285
|
+
lines.push(`<task-notification ${attrs.join(" ")}>`);
|
|
286
|
+
lines.push(`<${task.status === "failed" ? "error" : "result"}>\n${clipped}\n</${task.status === "failed" ? "error" : "result"}>`);
|
|
287
|
+
if (task.worktree)
|
|
288
|
+
lines.push(`<worktree>${task.worktree}</worktree>`);
|
|
289
|
+
lines.push("</task-notification>");
|
|
290
|
+
}
|
|
291
|
+
lines.push(stillRunning.length
|
|
292
|
+
? `Still running: ${stillRunning.map((task) => `${task.id} (${task.description})`).join(", ")}. Their results will arrive the same way; do not poll for them.`
|
|
293
|
+
: "All background tasks have finished.");
|
|
294
|
+
lines.push("A finished task can be sent another message with task_message, and continues with what it already knows.");
|
|
295
|
+
return lines.join("\n");
|
|
296
|
+
}
|
|
297
|
+
function escapeAttr(text) {
|
|
298
|
+
return text.replaceAll("&", "&").replaceAll('"', """).replaceAll("<", "<");
|
|
299
|
+
}
|
|
300
|
+
function duration(ms) {
|
|
301
|
+
const seconds = Math.max(0, Math.round(ms / 1000));
|
|
302
|
+
if (seconds < 60)
|
|
303
|
+
return `${seconds}s`;
|
|
304
|
+
const minutes = Math.floor(seconds / 60);
|
|
305
|
+
return minutes < 60 ? `${minutes}m${seconds % 60}s` : `${Math.floor(minutes / 60)}h${minutes % 60}m`;
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=background.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background.js","sourceRoot":"","sources":["../../src/agent/background.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,13 @@ export interface CompactionResult {
|
|
|
22
22
|
dropped: Message[];
|
|
23
23
|
}
|
|
24
24
|
export declare function shouldCompact(messages: Message[], model: ModelSpec, systemTokens: number, opts?: CompactionOptions): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* The prompt size at which automatic compaction fires: a share of the window
|
|
27
|
+
* once the reply has been given room. The room is capped at half the window,
|
|
28
|
+
* because some catalogues report a model's output limit as the whole window —
|
|
29
|
+
* taken at its word, a million-token model would compact at a twelfth of it.
|
|
30
|
+
*/
|
|
31
|
+
export declare function compactionPoint(model: ModelSpec, threshold?: number): number;
|
|
25
32
|
/**
|
|
26
33
|
* Find an index the history can be split at without orphaning a tool result.
|
|
27
34
|
*
|
package/dist/agent/compaction.js
CHANGED
|
@@ -11,9 +11,17 @@ export function shouldCompact(messages, model, systemTokens, opts = {}) {
|
|
|
11
11
|
if (messages.length < minMessages)
|
|
12
12
|
return false;
|
|
13
13
|
const used = estimateMessagesTokens(messages) + systemTokens;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
return used > compactionPoint(model, threshold);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The prompt size at which automatic compaction fires: a share of the window
|
|
18
|
+
* once the reply has been given room. The room is capped at half the window,
|
|
19
|
+
* because some catalogues report a model's output limit as the whole window —
|
|
20
|
+
* taken at its word, a million-token model would compact at a twelfth of it.
|
|
21
|
+
*/
|
|
22
|
+
export function compactionPoint(model, threshold = DEFAULTS.threshold) {
|
|
23
|
+
const reply = Math.min(model.maxOutputTokens, Math.floor(model.contextWindow / 2));
|
|
24
|
+
return Math.round((model.contextWindow - reply) * threshold);
|
|
17
25
|
}
|
|
18
26
|
/**
|
|
19
27
|
* Find an index the history can be split at without orphaning a tool result.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compaction.js","sourceRoot":"","sources":["../../src/agent/compaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAyBhD,MAAM,QAAQ,GAAG;IACf,SAAS,EAAE,GAAG;IACd,gBAAgB,EAAE,IAAI;IACtB,WAAW,EAAE,CAAC;CACf,CAAC;AAEF,MAAM,UAAU,aAAa,CAC3B,QAAmB,EACnB,KAAgB,EAChB,YAAoB,EACpB,OAA0B,EAAE;IAE5B,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;IAC5D,IAAI,QAAQ,CAAC,MAAM,GAAG,WAAW;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,IAAI,GAAG,sBAAsB,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC;IAC7D,
|
|
1
|
+
{"version":3,"file":"compaction.js","sourceRoot":"","sources":["../../src/agent/compaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A goal: an objective the agent keeps working toward across turns.
|
|
3
|
+
*
|
|
4
|
+
* An ordinary run ends the moment the model stops calling tools, which is the
|
|
5
|
+
* right place to stop when a person is watching each answer. A goal moves that
|
|
6
|
+
* stopping point: while one is active, a reply that simply ends is answered
|
|
7
|
+
* with "keep going", and only the model saying the goal is achieved — or that
|
|
8
|
+
* it is blocked on something only the user can supply — ends the run.
|
|
9
|
+
*/
|
|
10
|
+
export interface SessionGoal {
|
|
11
|
+
objective: string;
|
|
12
|
+
status: "active" | "achieved" | "blocked";
|
|
13
|
+
/** The model's closing word on it, once it has one. */
|
|
14
|
+
summary?: string;
|
|
15
|
+
setAt: number;
|
|
16
|
+
/** Times the loop has had to say "keep going" for this goal. */
|
|
17
|
+
nudges: number;
|
|
18
|
+
}
|
|
19
|
+
/** Session state key the goal lives under, so tools on a shared registry reach this session's. */
|
|
20
|
+
export declare const GOAL_KEY = "goal:current";
|
|
21
|
+
export declare const GOAL_TOOL = "goal_update";
|
|
22
|
+
/**
|
|
23
|
+
* How many times one goal may be pushed back into work.
|
|
24
|
+
*
|
|
25
|
+
* A model that keeps ending its turn without saying the goal is done is either
|
|
26
|
+
* stuck or ignoring the tool, and either way another hundred nudges spends
|
|
27
|
+
* money without moving. Past this the run stops and says so.
|
|
28
|
+
*/
|
|
29
|
+
export declare const MAX_GOAL_NUDGES = 25;
|
|
30
|
+
/** Turn ceiling for a run working on a goal; an ordinary run keeps its own. */
|
|
31
|
+
export declare const GOAL_MAX_TURNS = 300;
|
|
32
|
+
export declare function getGoal(state: Map<string, unknown>): SessionGoal | undefined;
|
|
33
|
+
export declare function activeGoal(state: Map<string, unknown>): SessionGoal | undefined;
|
|
34
|
+
export declare function goalPromptSection(goal: SessionGoal): string;
|
|
35
|
+
export declare function goalNudge(goal: SessionGoal): string;
|
|
36
|
+
export declare const goalTool: import("../tools/types.ts").Tool;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { defineTool } from "../tools/define.js";
|
|
3
|
+
import { toolText } from "../tools/types.js";
|
|
4
|
+
/** Session state key the goal lives under, so tools on a shared registry reach this session's. */
|
|
5
|
+
export const GOAL_KEY = "goal:current";
|
|
6
|
+
export const GOAL_TOOL = "goal_update";
|
|
7
|
+
/**
|
|
8
|
+
* How many times one goal may be pushed back into work.
|
|
9
|
+
*
|
|
10
|
+
* A model that keeps ending its turn without saying the goal is done is either
|
|
11
|
+
* stuck or ignoring the tool, and either way another hundred nudges spends
|
|
12
|
+
* money without moving. Past this the run stops and says so.
|
|
13
|
+
*/
|
|
14
|
+
export const MAX_GOAL_NUDGES = 25;
|
|
15
|
+
/** Turn ceiling for a run working on a goal; an ordinary run keeps its own. */
|
|
16
|
+
export const GOAL_MAX_TURNS = 300;
|
|
17
|
+
export function getGoal(state) {
|
|
18
|
+
const goal = state.get(GOAL_KEY);
|
|
19
|
+
return goal && typeof goal === "object" ? goal : undefined;
|
|
20
|
+
}
|
|
21
|
+
export function activeGoal(state) {
|
|
22
|
+
const goal = getGoal(state);
|
|
23
|
+
return goal?.status === "active" ? goal : undefined;
|
|
24
|
+
}
|
|
25
|
+
export function goalPromptSection(goal) {
|
|
26
|
+
return [
|
|
27
|
+
"## Goal mode is active",
|
|
28
|
+
`The user has set a goal for this session:\n<goal>\n${goal.objective}\n</goal>`,
|
|
29
|
+
"Work toward it autonomously across as many turns as it takes; do not stop to ask whether to continue.",
|
|
30
|
+
`When the goal is fully achieved and verified, call \`${GOAL_TOOL}\` with status "achieved" and a short summary.`,
|
|
31
|
+
`If you cannot make further progress without something only the user can provide, call \`${GOAL_TOOL}\` with status "blocked" and say exactly what is needed.`,
|
|
32
|
+
"Ending a reply without calling it means the goal is still in progress, and you will be asked to continue.",
|
|
33
|
+
].join("\n");
|
|
34
|
+
}
|
|
35
|
+
export function goalNudge(goal) {
|
|
36
|
+
return [
|
|
37
|
+
`<goal-reminder>`,
|
|
38
|
+
`The goal is still active: ${goal.objective}`,
|
|
39
|
+
`Continue working on it. If it is fully achieved, verify that and call \`${GOAL_TOOL}\` with status "achieved". ` +
|
|
40
|
+
`If you are blocked on the user, call \`${GOAL_TOOL}\` with status "blocked".`,
|
|
41
|
+
`</goal-reminder>`,
|
|
42
|
+
].join("\n");
|
|
43
|
+
}
|
|
44
|
+
export const goalTool = defineTool({
|
|
45
|
+
name: GOAL_TOOL,
|
|
46
|
+
description: [
|
|
47
|
+
"Report the outcome of the session's goal.",
|
|
48
|
+
'Use status "achieved" once the goal is complete and verified, or "blocked" when only the user can unblock it.',
|
|
49
|
+
"Only available while goal mode is active.",
|
|
50
|
+
].join(" "),
|
|
51
|
+
parameters: z.object({
|
|
52
|
+
status: z.enum(["achieved", "blocked"]),
|
|
53
|
+
summary: z.string().min(1).describe("What was done, or what is needed from the user"),
|
|
54
|
+
}),
|
|
55
|
+
renderTitle: (input) => `Goal(${input.status})`,
|
|
56
|
+
// Read-only in the sense ask_user is: it changes nothing outside this
|
|
57
|
+
// session, and a goal set in plan mode has to be able to end there too.
|
|
58
|
+
readOnly: true,
|
|
59
|
+
async execute(input, ctx) {
|
|
60
|
+
const goal = activeGoal(ctx.host.state);
|
|
61
|
+
if (!goal) {
|
|
62
|
+
return { content: [{ type: "text", text: "No goal is active." }], isError: true };
|
|
63
|
+
}
|
|
64
|
+
goal.status = input.status;
|
|
65
|
+
goal.summary = input.summary;
|
|
66
|
+
return toolText(input.status === "achieved"
|
|
67
|
+
? "Goal marked achieved. Give the user a brief final summary and stop."
|
|
68
|
+
: "Goal marked blocked. Tell the user what you need, then stop.", { goal: { ...goal } });
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=goal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goal.js","sourceRoot":"","sources":["../../src/agent/goal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAqB7C,kGAAkG;AAClG,MAAM,CAAC,MAAM,QAAQ,GAAG,cAAc,CAAC;AAEvC,MAAM,CAAC,MAAM,SAAS,GAAG,aAAa,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAElC,+EAA+E;AAC/E,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAElC,MAAM,UAAU,OAAO,CAAC,KAA2B;IACjD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjC,OAAO,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAoB,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAA2B;IACpD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,IAAI,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAiB;IACjD,OAAO;QACL,wBAAwB;QACxB,sDAAsD,IAAI,CAAC,SAAS,WAAW;QAC/E,uGAAuG;QACvG,wDAAwD,SAAS,gDAAgD;QACjH,2FAA2F,SAAS,0DAA0D;QAC9J,2GAA2G;KAC5G,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAiB;IACzC,OAAO;QACL,iBAAiB;QACjB,6BAA6B,IAAI,CAAC,SAAS,EAAE;QAC7C,2EAA2E,SAAS,6BAA6B;YAC/G,0CAA0C,SAAS,2BAA2B;QAChF,kBAAkB;KACnB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;IACjC,IAAI,EAAE,SAAS;IACf,WAAW,EAAE;QACX,2CAA2C;QAC3C,+GAA+G;QAC/G,2CAA2C;KAC5C,CAAC,IAAI,CAAC,GAAG,CAAC;IACX,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACvC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC;KACtF,CAAC;IACF,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,KAAK,CAAC,MAAM,GAAG;IAC/C,sEAAsE;IACtE,wEAAwE;IACxE,QAAQ,EAAE,IAAI;IACd,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACpF,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC7B,OAAO,QAAQ,CACb,KAAK,CAAC,MAAM,KAAK,UAAU;YACzB,CAAC,CAAC,qEAAqE;YACvE,CAAC,CAAC,8DAA8D,EAClE,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,CACtB,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -26,6 +26,12 @@ export interface PermissionRequest {
|
|
|
26
26
|
sessionId?: string;
|
|
27
27
|
toolCallId?: string;
|
|
28
28
|
suggestions?: string[];
|
|
29
|
+
/**
|
|
30
|
+
* A subagent asking, named — "general: fix the flaky test". Its card is
|
|
31
|
+
* placed in the conversation that started it, so this is what tells the
|
|
32
|
+
* person the call is not that conversation's own.
|
|
33
|
+
*/
|
|
34
|
+
from?: string;
|
|
29
35
|
}
|
|
30
36
|
export interface PermissionDecision {
|
|
31
37
|
behavior: PermissionBehavior;
|
|
@@ -180,9 +180,10 @@ export class PermissionEngine {
|
|
|
180
180
|
if (denied) {
|
|
181
181
|
return { behavior: "deny", rule: denied, message: `denied by rule ${denied}` };
|
|
182
182
|
}
|
|
183
|
-
if (this.mode === "plan" && !tool.readOnly) {
|
|
183
|
+
if (this.mode === "plan" && !tool.readOnly && !tool.observes) {
|
|
184
184
|
return {
|
|
185
185
|
behavior: "deny",
|
|
186
|
+
rule: "plan",
|
|
186
187
|
message: "Plan mode is active: no tool that modifies state may run. Present the plan instead.",
|
|
187
188
|
};
|
|
188
189
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/agent/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAkB1D,sDAAsD;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAqB;IAChD,SAAS;IACT,aAAa;IACb,MAAM;IACN,MAAM;IACN,mBAAmB;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAmC;IACzD,OAAO,EAAE,QAAQ;IACjB,WAAW,EAAE,cAAc;IAC3B,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,iBAAiB,EAAE,oBAAoB;CACxC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAmC;IAC/D,OAAO,EAAE,wCAAwC;IACjD,WAAW,EAAE,8DAA8D;IAC3E,IAAI,EAAE,gCAAgC;IACtC,IAAI,EAAE,qEAAqE;IAC3E,iBAAiB,EAAE,oDAAoD;CACxE,CAAC;
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/agent/permissions.ts"],"names":[],"mappings":"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"}
|