@botiverse/oar 0.10.3 → 0.12.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 +14 -4
- package/dist/agents/crew.d.ts +9 -0
- package/dist/agents/crew.d.ts.map +1 -0
- package/dist/agents/crew.js +263 -0
- package/dist/agents/crew.js.map +1 -0
- package/dist/agents/helpers.d.ts +17 -0
- package/dist/agents/helpers.d.ts.map +1 -0
- package/dist/agents/helpers.js +65 -0
- package/dist/agents/helpers.js.map +1 -0
- package/dist/agents/index.d.ts +9 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +8 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/subagent.d.ts +25 -0
- package/dist/agents/subagent.d.ts.map +1 -0
- package/dist/agents/subagent.js +186 -0
- package/dist/agents/subagent.js.map +1 -0
- package/dist/agents/types.d.ts +149 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/contracts/records.d.ts +3 -6
- package/dist/contracts/records.d.ts.map +1 -1
- package/dist/contracts/runtime.d.ts +5 -0
- package/dist/contracts/runtime.d.ts.map +1 -1
- package/dist/contracts/runtime.js.map +1 -1
- package/dist/contracts/session.d.ts +1 -0
- package/dist/contracts/session.d.ts.map +1 -1
- package/dist/contracts/tasks.d.ts +57 -0
- package/dist/contracts/tasks.d.ts.map +1 -0
- package/dist/contracts/tasks.js +2 -0
- package/dist/contracts/tasks.js.map +1 -0
- package/dist/contracts/update.d.ts +77 -0
- package/dist/contracts/update.d.ts.map +1 -0
- package/dist/contracts/update.js +2 -0
- package/dist/contracts/update.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/observe/agent-status.d.ts.map +1 -1
- package/dist/observe/agent-status.js +5 -0
- package/dist/observe/agent-status.js.map +1 -1
- package/dist/observe/index.d.ts +2 -0
- package/dist/observe/index.d.ts.map +1 -1
- package/dist/observe/index.js +1 -0
- package/dist/observe/index.js.map +1 -1
- package/dist/observe/session-view-events.d.ts.map +1 -1
- package/dist/observe/session-view-events.js +6 -0
- package/dist/observe/session-view-events.js.map +1 -1
- package/dist/observe/tasks.d.ts +45 -0
- package/dist/observe/tasks.d.ts.map +1 -0
- package/dist/observe/tasks.js +68 -0
- package/dist/observe/tasks.js.map +1 -0
- package/dist/runtimes/antigravity/index.d.ts +1 -0
- package/dist/runtimes/antigravity/index.d.ts.map +1 -1
- package/dist/runtimes/antigravity/index.js +2 -0
- package/dist/runtimes/antigravity/index.js.map +1 -1
- package/dist/runtimes/antigravity/update.d.ts +11 -0
- package/dist/runtimes/antigravity/update.d.ts.map +1 -0
- package/dist/runtimes/antigravity/update.js +28 -0
- package/dist/runtimes/antigravity/update.js.map +1 -0
- package/dist/runtimes/claude/index.d.ts +3 -0
- package/dist/runtimes/claude/index.d.ts.map +1 -1
- package/dist/runtimes/claude/index.js +3 -0
- package/dist/runtimes/claude/index.js.map +1 -1
- package/dist/runtimes/claude/projection.d.ts.map +1 -1
- package/dist/runtimes/claude/projection.js +2 -1
- package/dist/runtimes/claude/projection.js.map +1 -1
- package/dist/runtimes/claude/tasks.d.ts +5 -0
- package/dist/runtimes/claude/tasks.d.ts.map +1 -0
- package/dist/runtimes/claude/tasks.js +96 -0
- package/dist/runtimes/claude/tasks.js.map +1 -0
- package/dist/runtimes/claude/update.d.ts +32 -0
- package/dist/runtimes/claude/update.d.ts.map +1 -0
- package/dist/runtimes/claude/update.js +88 -0
- package/dist/runtimes/claude/update.js.map +1 -0
- package/dist/runtimes/codex/index.d.ts +3 -0
- package/dist/runtimes/codex/index.d.ts.map +1 -1
- package/dist/runtimes/codex/index.js +3 -0
- package/dist/runtimes/codex/index.js.map +1 -1
- package/dist/runtimes/codex/projection.d.ts.map +1 -1
- package/dist/runtimes/codex/projection.js +8 -2
- package/dist/runtimes/codex/projection.js.map +1 -1
- package/dist/runtimes/codex/tasks.d.ts +12 -0
- package/dist/runtimes/codex/tasks.d.ts.map +1 -0
- package/dist/runtimes/codex/tasks.js +36 -0
- package/dist/runtimes/codex/tasks.js.map +1 -0
- package/dist/runtimes/codex/update.d.ts +14 -0
- package/dist/runtimes/codex/update.d.ts.map +1 -0
- package/dist/runtimes/codex/update.js +47 -0
- package/dist/runtimes/codex/update.js.map +1 -0
- package/dist/runtimes/cursor/index.d.ts +3 -0
- package/dist/runtimes/cursor/index.d.ts.map +1 -1
- package/dist/runtimes/cursor/index.js +3 -0
- package/dist/runtimes/cursor/index.js.map +1 -1
- package/dist/runtimes/cursor/update.d.ts +19 -0
- package/dist/runtimes/cursor/update.d.ts.map +1 -0
- package/dist/runtimes/cursor/update.js +88 -0
- package/dist/runtimes/cursor/update.js.map +1 -0
- package/dist/runtimes/grok/index.d.ts +3 -0
- package/dist/runtimes/grok/index.d.ts.map +1 -1
- package/dist/runtimes/grok/index.js +3 -0
- package/dist/runtimes/grok/index.js.map +1 -1
- package/dist/runtimes/grok/update.d.ts +12 -0
- package/dist/runtimes/grok/update.d.ts.map +1 -0
- package/dist/runtimes/grok/update.js +37 -0
- package/dist/runtimes/grok/update.js.map +1 -0
- package/dist/runtimes/kimi/index.d.ts +2 -0
- package/dist/runtimes/kimi/index.d.ts.map +1 -1
- package/dist/runtimes/kimi/index.js +3 -0
- package/dist/runtimes/kimi/index.js.map +1 -1
- package/dist/runtimes/kimi/update.d.ts +18 -0
- package/dist/runtimes/kimi/update.d.ts.map +1 -0
- package/dist/runtimes/kimi/update.js +56 -0
- package/dist/runtimes/kimi/update.js.map +1 -0
- package/dist/shared/executable/index.d.ts +1 -0
- package/dist/shared/executable/index.d.ts.map +1 -1
- package/dist/shared/executable/index.js +1 -0
- package/dist/shared/executable/index.js.map +1 -1
- package/dist/shared/executable/isolated.d.ts +19 -0
- package/dist/shared/executable/isolated.d.ts.map +1 -0
- package/dist/shared/executable/isolated.js +73 -0
- package/dist/shared/executable/isolated.js.map +1 -0
- package/dist/shared/update.d.ts +56 -0
- package/dist/shared/update.d.ts.map +1 -0
- package/dist/shared/update.js +139 -0
- package/dist/shared/update.js.map +1 -0
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -26,8 +26,9 @@ if (installation?.kind === "available") {
|
|
|
26
26
|
|
|
27
27
|
`session.events()` delivers flat, attributed `Event`s (native user message
|
|
28
28
|
echoes, text, reasoning, tool call start / progress / end, turn start and end,
|
|
29
|
-
usage, model, effort, compaction start / end, retry,
|
|
30
|
-
|
|
29
|
+
usage, model, effort, compaction start / end, retry, background tasks and
|
|
30
|
+
subagents started, updated and ended, runtime→app requests and oar's answers,
|
|
31
|
+
control rejections, the process exit), each carrying the `seq`
|
|
31
32
|
and `agentPath` of the record it was read from. Kinds a runtime never says
|
|
32
33
|
(claude has no compaction start, ACP runtimes no compaction, only pi says
|
|
33
34
|
retry) simply never appear; the runtime pages say which. It is a projection over the record stream: `session.rawEvents()`
|
|
@@ -42,12 +43,13 @@ identity, including steer → queue fallback. See the
|
|
|
42
43
|
|
|
43
44
|
## Public exports
|
|
44
45
|
|
|
45
|
-
The package has
|
|
46
|
+
The package has six public entry points:
|
|
46
47
|
|
|
47
48
|
- `@botiverse/oar`: the full surface (runtime registry, adapters, and everything below). Node-only (adapters import `node:child_process` and runtime SDKs).
|
|
48
49
|
- `@botiverse/oar/brands`: browser-safe runtime names and SVG icons.
|
|
49
|
-
- `@botiverse/oar/observe`: browser-safe subset, the pure derivation utilities over `RawEvent`s and `Event`s (`eventsOf`, `coalesceText`, `observeAgent`, `reduceStatus`, `observeStalls`, `classifyTool`, …) with zero Node and zero adapter imports. A browser or Electron-renderer bundle can import this subpath directly without dragging Node-only modules in. The root export re-exports the same utilities for Node consumers.
|
|
50
|
+
- `@botiverse/oar/observe`: browser-safe subset, the pure derivation utilities over `RawEvent`s and `Event`s (`eventsOf`, `coalesceText`, `observeAgent`, `reduceStatus`, `tasksOf`, `observeStalls`, `classifyTool`, …) with zero Node and zero adapter imports. A browser or Electron-renderer bundle can import this subpath directly without dragging Node-only modules in. The root export re-exports the same utilities for Node consumers.
|
|
50
51
|
- `@botiverse/oar/kernel`: the runtime-author SPI. `createSessionKernel` is the record stream every built-in adapter is built on (dense `seq`, cursor replay, control recording, the reachability rule) and `sealSession` derives the `Session` API face over an adapter. Pair with `defineRuntime` to ship a custom runtime (a scripted runtime for a host's tests, an in-process agent) without re-implementing the stream contract. `inputImagesRefusal` and `withInputImages` are the image rules every built-in runtime keeps, so a custom runtime refuses the inputs they refuse.
|
|
52
|
+
- `@botiverse/oar/agents`: subagents. `createSubagents()` starts child sessions on any runtime, returns a report for every turn they end, takes follow-ups, enforces depth and concurrency limits, reports each child as a task, and can deliver reports into a parent session so it wakes. See [subagents](https://github.com/botiverse/oar/blob/main/docs/spec/subagents.md). Node-only.
|
|
51
53
|
- `@botiverse/oar/testing`: `scriptedRuntime({ turn })`, a ready-made runtime on the kernel SPI whose model is a script. It yields a real `Session` (same records, folds and control semantics) with no binary, login or provider, for hosts' tests and demos. Node-only.
|
|
52
54
|
|
|
53
55
|
Any other deep import (`@botiverse/oar/dist/...`, source paths) is internal and may break without notice.
|
|
@@ -62,6 +64,14 @@ has it. `runtime.accountUsage(installation)` reads account quota on claude,
|
|
|
62
64
|
codex, grok and kimi; its failure semantics are documented in the
|
|
63
65
|
[account usage reference](https://github.com/botiverse/oar/blob/main/docs/spec/account-usage.md).
|
|
64
66
|
|
|
67
|
+
`runtime.checkUpdate(installation)` reports the version the runtime's own
|
|
68
|
+
updater would install and where that answer came from;
|
|
69
|
+
`runtime.upgrade(installation)` runs that updater without a terminal and
|
|
70
|
+
judges the result by the version the same executable reports afterwards,
|
|
71
|
+
never by its exit code. oar never upgrades on its own. Claude, Codex, Cursor,
|
|
72
|
+
Grok and Kimi have both; Antigravity has only the check; Pi moves with oar.
|
|
73
|
+
See [runtime updates](https://github.com/botiverse/oar/blob/main/docs/spec/update.md).
|
|
74
|
+
|
|
65
75
|
Images go with an input through `InputOptions.images` (absolute paths to png,
|
|
66
76
|
jpeg, gif or webp files) on prompt, steer and queue, as the runtime's own image
|
|
67
77
|
content. `session.capabilities.images` says whether the runtime takes them; an
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Subagents, SubagentsOptions } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Subagents: child sessions a host starts on any runtime, follows by
|
|
4
|
+
* reports (one per turn their root agent ends) and task events, and can feed
|
|
5
|
+
* back into a parent session. The mechanism is here; limits, permissions and
|
|
6
|
+
* whether reports wake a parent are the host's choices.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createSubagents(options?: SubagentsOptions): Subagents;
|
|
9
|
+
//# sourceMappingURL=crew.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crew.d.ts","sourceRoot":"","sources":["../../src/agents/crew.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAOV,SAAS,EACT,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAEpB;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,SAAS,CAiQzE"}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { applyTaskEvent, initialTasks } from "../observe/tasks.js";
|
|
3
|
+
import { runtimes as builtInRuntimes } from "../index.js";
|
|
4
|
+
import { attachLog, DEFAULT_WAIT_MS, formatReport, hostDepth, installationOf, logName, readerOrTimeout, sessionOf, SUBAGENT_DEPTH_ENV } from "./helpers.js";
|
|
5
|
+
import { createSubagent } from "./subagent.js";
|
|
6
|
+
/**
|
|
7
|
+
* Subagents: child sessions a host starts on any runtime, follows by
|
|
8
|
+
* reports (one per turn their root agent ends) and task events, and can feed
|
|
9
|
+
* back into a parent session. The mechanism is here; limits, permissions and
|
|
10
|
+
* whether reports wake a parent are the host's choices.
|
|
11
|
+
*/
|
|
12
|
+
export function createSubagents(options = {}) {
|
|
13
|
+
const registry = options.runtimes ?? builtInRuntimes;
|
|
14
|
+
const maxRunning = options.maxRunning ?? 4;
|
|
15
|
+
const maxDepth = options.maxDepth ?? 1;
|
|
16
|
+
const agents = new Map();
|
|
17
|
+
const reserved = new Map();
|
|
18
|
+
const readers = new Set();
|
|
19
|
+
const taskObservers = new Set();
|
|
20
|
+
const inFlight = new Set();
|
|
21
|
+
let reportObserver = null;
|
|
22
|
+
let unread = [];
|
|
23
|
+
let tasks = initialTasks;
|
|
24
|
+
let parentSessionId = "";
|
|
25
|
+
let starting = 0;
|
|
26
|
+
let closed = false;
|
|
27
|
+
const running = () => starting + [...agents.values()].filter((agent) => agent.info().state === "running").length;
|
|
28
|
+
const wake = () => {
|
|
29
|
+
for (const reader of readers) {
|
|
30
|
+
reader();
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const emitTask = (body) => {
|
|
34
|
+
const at = Date.now();
|
|
35
|
+
tasks = applyTaskEvent(tasks, body, { sessionId: parentSessionId, agentPath: [], receivedAt: at });
|
|
36
|
+
for (const observer of taskObservers) {
|
|
37
|
+
try {
|
|
38
|
+
observer({ ...body, at });
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// An observer's failure is its own; the next one still hears.
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const received = (report) => {
|
|
46
|
+
if (reportObserver !== null && !reserved.has(report.id)) {
|
|
47
|
+
reportObserver(report);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
unread.push(report);
|
|
51
|
+
wake();
|
|
52
|
+
};
|
|
53
|
+
const freeId = (spawn) => {
|
|
54
|
+
const base = spawn.name ?? spawn.runtime;
|
|
55
|
+
if (spawn.name !== undefined && !agents.has(base)) {
|
|
56
|
+
return base;
|
|
57
|
+
}
|
|
58
|
+
let n = 1;
|
|
59
|
+
while (agents.has(`${base}-${String(n)}`)) {
|
|
60
|
+
n += 1;
|
|
61
|
+
}
|
|
62
|
+
return `${base}-${String(n)}`;
|
|
63
|
+
};
|
|
64
|
+
const register = (spawn, runtime, session, log) => {
|
|
65
|
+
const id = freeId(spawn);
|
|
66
|
+
const agent = createSubagent({ id, runtime: runtime.id, ...(spawn.name === undefined ? {} : { name: spawn.name }), ...(log === undefined ? {} : { log }) }, session, {
|
|
67
|
+
report: received,
|
|
68
|
+
task: emitTask,
|
|
69
|
+
mayRun: () => running() < maxRunning,
|
|
70
|
+
closed: wake,
|
|
71
|
+
});
|
|
72
|
+
agents.set(id, agent);
|
|
73
|
+
const description = spawn.name ?? spawn.task.split("\n")[0]?.slice(0, 120) ?? "";
|
|
74
|
+
emitTask({ kind: "task_started", taskId: id, taskType: "agent", nativeType: "oar-subagent", description, childSessionId: session.id, background: true });
|
|
75
|
+
return agent;
|
|
76
|
+
};
|
|
77
|
+
const open = async (spawn, runtime, installation, registered) => {
|
|
78
|
+
const cwd = spawn.cwd ?? options.cwd ?? process.cwd();
|
|
79
|
+
const session = await sessionOf(runtime, installation, {
|
|
80
|
+
cwd,
|
|
81
|
+
...(spawn.model === undefined ? {} : { model: spawn.model }),
|
|
82
|
+
...(spawn.effort === undefined ? {} : { effort: spawn.effort }),
|
|
83
|
+
...(spawn.resume === undefined ? {} : { resume: spawn.resume }),
|
|
84
|
+
env: { ...options.env, ...spawn.env, [SUBAGENT_DEPTH_ENV]: String(hostDepth() + 1) },
|
|
85
|
+
});
|
|
86
|
+
if (typeof session === "string") {
|
|
87
|
+
return { kind: "refused", code: "open_failed", reason: session };
|
|
88
|
+
}
|
|
89
|
+
const log = options.logDir === undefined ? undefined : path.join(options.logDir, logName(spawn.name ?? spawn.runtime, session.id));
|
|
90
|
+
const logFailure = log === undefined ? null : attachLog(session, log, { runtime: runtime.id, cwd, sessionId: session.id, startedAt: Date.now(), recorder: "oar-subagents",
|
|
91
|
+
...(spawn.model === undefined ? {} : { model: spawn.model }), ...(spawn.effort === undefined ? {} : { effort: spawn.effort }) });
|
|
92
|
+
if (closed || logFailure !== null) {
|
|
93
|
+
await session.dispose();
|
|
94
|
+
return logFailure === null
|
|
95
|
+
? { kind: "refused", code: "closed", reason: "the subagents were closed while this one opened" }
|
|
96
|
+
: { kind: "refused", code: "open_failed", reason: `cannot write the log: ${logFailure}` };
|
|
97
|
+
}
|
|
98
|
+
const agent = register(spawn, runtime, session, log);
|
|
99
|
+
registered();
|
|
100
|
+
const outcome = await session.prompt(spawn.task);
|
|
101
|
+
if (outcome.kind === "rejected") {
|
|
102
|
+
await agent.close();
|
|
103
|
+
agents.delete(agent.id);
|
|
104
|
+
return { kind: "refused", code: "rejected", reason: outcome.reason };
|
|
105
|
+
}
|
|
106
|
+
return { kind: "spawned", agent };
|
|
107
|
+
};
|
|
108
|
+
const refusal = (spawn) => {
|
|
109
|
+
if (closed) {
|
|
110
|
+
return { kind: "refused", code: "closed", reason: "the subagents are closed" };
|
|
111
|
+
}
|
|
112
|
+
if (registry.get(spawn.runtime) === undefined) {
|
|
113
|
+
return { kind: "refused", code: "unknown_runtime", reason: `unknown runtime: ${spawn.runtime}` };
|
|
114
|
+
}
|
|
115
|
+
if (hostDepth() + 1 > maxDepth) {
|
|
116
|
+
return { kind: "refused", code: "depth_limit", reason: `subagents nest at most ${String(maxDepth)} deep; do this task yourself` };
|
|
117
|
+
}
|
|
118
|
+
return running() >= maxRunning
|
|
119
|
+
? { kind: "refused", code: "running_limit", reason: `${String(maxRunning)} subagents are already running; wait for one to finish rather than retrying` }
|
|
120
|
+
: null;
|
|
121
|
+
};
|
|
122
|
+
const spawnOne = async (spawn, runtime) => {
|
|
123
|
+
// Counted from the refusal check until the child is registered, where its own state takes over.
|
|
124
|
+
starting += 1;
|
|
125
|
+
let counted = true;
|
|
126
|
+
const release = () => {
|
|
127
|
+
if (counted) {
|
|
128
|
+
counted = false;
|
|
129
|
+
starting -= 1;
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
try {
|
|
133
|
+
const installation = await installationOf(runtime);
|
|
134
|
+
if (typeof installation === "string") {
|
|
135
|
+
return { kind: "refused", code: "not_installed", reason: installation };
|
|
136
|
+
}
|
|
137
|
+
const result = await open(spawn, runtime, installation, release);
|
|
138
|
+
return result;
|
|
139
|
+
}
|
|
140
|
+
finally {
|
|
141
|
+
release();
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
const take = (ids) => {
|
|
145
|
+
const wanted = (report) => (ids === undefined ? !reserved.has(report.id) : ids.includes(report.id));
|
|
146
|
+
const taken = unread.filter((report) => wanted(report));
|
|
147
|
+
unread = unread.filter((report) => !wanted(report));
|
|
148
|
+
return taken;
|
|
149
|
+
};
|
|
150
|
+
const reserve = (id, delta) => {
|
|
151
|
+
const count = (reserved.get(id) ?? 0) + delta;
|
|
152
|
+
if (count <= 0) {
|
|
153
|
+
reserved.delete(id);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
reserved.set(id, count);
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
const next = async (id, signal) => {
|
|
160
|
+
reserve(id, 1);
|
|
161
|
+
try {
|
|
162
|
+
const over = () => closed || signal?.aborted === true || agents.get(id)?.info().state === "closed";
|
|
163
|
+
let [report] = take([id]);
|
|
164
|
+
while (report === undefined && !over()) {
|
|
165
|
+
await readerOrTimeout(readers, 60_000, signal);
|
|
166
|
+
[report] = take([id]);
|
|
167
|
+
}
|
|
168
|
+
return report ?? null;
|
|
169
|
+
}
|
|
170
|
+
finally {
|
|
171
|
+
reserve(id, -1);
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
return {
|
|
175
|
+
spawn: async (spawn) => {
|
|
176
|
+
const refused = refusal(spawn);
|
|
177
|
+
const runtime = registry.get(spawn.runtime);
|
|
178
|
+
if (refused !== null || runtime === undefined) {
|
|
179
|
+
return refused ?? { kind: "refused", code: "unknown_runtime", reason: `unknown runtime: ${spawn.runtime}` };
|
|
180
|
+
}
|
|
181
|
+
const pending = spawnOne(spawn, runtime);
|
|
182
|
+
inFlight.add(pending);
|
|
183
|
+
try {
|
|
184
|
+
const result = await pending;
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
finally {
|
|
188
|
+
inFlight.delete(pending);
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
get: (id) => agents.get(id),
|
|
192
|
+
list: () => [...agents.values()].map((agent) => agent.info()),
|
|
193
|
+
wait: async (wait = {}) => {
|
|
194
|
+
const deadline = Date.now() + (wait.timeoutMs ?? DEFAULT_WAIT_MS);
|
|
195
|
+
const over = () => closed || wait.signal?.aborted === true || Date.now() >= deadline;
|
|
196
|
+
let taken = take(wait.ids);
|
|
197
|
+
while (taken.length === 0 && !over()) {
|
|
198
|
+
await readerOrTimeout(readers, deadline - Date.now(), wait.signal);
|
|
199
|
+
taken = take(wait.ids);
|
|
200
|
+
}
|
|
201
|
+
return taken;
|
|
202
|
+
},
|
|
203
|
+
next: async (id, nextOptions = {}) => {
|
|
204
|
+
const report = await next(id, nextOptions.signal);
|
|
205
|
+
return report;
|
|
206
|
+
},
|
|
207
|
+
unread: () => [...unread],
|
|
208
|
+
onTask: (observer) => {
|
|
209
|
+
taskObservers.add(observer);
|
|
210
|
+
return () => {
|
|
211
|
+
taskObservers.delete(observer);
|
|
212
|
+
};
|
|
213
|
+
},
|
|
214
|
+
tasks: () => [...tasks.values()],
|
|
215
|
+
deliverTo: (parent, deliver = {}) => {
|
|
216
|
+
const format = deliver.format ?? formatReport;
|
|
217
|
+
parentSessionId = parent.id;
|
|
218
|
+
const keep = (report) => {
|
|
219
|
+
unread.push(report);
|
|
220
|
+
wake();
|
|
221
|
+
};
|
|
222
|
+
const send = async (report) => {
|
|
223
|
+
try {
|
|
224
|
+
const input = format(report);
|
|
225
|
+
// An idle parent gets a turn of its own (it wakes); a busy one gets the input mid-turn or after it.
|
|
226
|
+
const prompted = parent.status().value.kind === "idle" ? await parent.prompt(input) : null;
|
|
227
|
+
if (prompted?.kind === "accepted") {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
const landed = await parent.steerOrQueue(input);
|
|
231
|
+
if (landed.landed === "rejected") {
|
|
232
|
+
keep(report);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
keep(report);
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
const observer = (report) => {
|
|
240
|
+
void send(report);
|
|
241
|
+
};
|
|
242
|
+
reportObserver = observer;
|
|
243
|
+
for (const report of take()) {
|
|
244
|
+
observer(report);
|
|
245
|
+
}
|
|
246
|
+
return () => {
|
|
247
|
+
if (reportObserver === observer) {
|
|
248
|
+
reportObserver = null;
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
},
|
|
252
|
+
close: async () => {
|
|
253
|
+
closed = true;
|
|
254
|
+
wake();
|
|
255
|
+
await Promise.allSettled(inFlight);
|
|
256
|
+
await Promise.all([...agents.values()].map(async (agent) => {
|
|
257
|
+
await agent.close();
|
|
258
|
+
}));
|
|
259
|
+
wake();
|
|
260
|
+
},
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=crew.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crew.js","sourceRoot":"","sources":["../../src/agents/crew.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { AvailableInstallation } from "../contracts/installation.js";
|
|
2
|
+
import type { Runtime } from "../contracts/runtime.js";
|
|
3
|
+
import type { Session, SessionOptions } from "../contracts/session.js";
|
|
4
|
+
import { openVoyage } from "../voyage.js";
|
|
5
|
+
import type { SubagentReport } from "./types.js";
|
|
6
|
+
export declare const SUBAGENT_DEPTH_ENV = "OAR_SUBAGENT_DEPTH";
|
|
7
|
+
export declare const DEFAULT_WAIT_MS = 30000;
|
|
8
|
+
export declare function hostDepth(): number;
|
|
9
|
+
export declare function formatReport(report: SubagentReport): string;
|
|
10
|
+
export declare function sessionOf(runtime: Runtime, installation: AvailableInstallation, options: SessionOptions): Promise<Session | string>;
|
|
11
|
+
export declare function installationOf(runtime: Runtime): Promise<AvailableInstallation | string>;
|
|
12
|
+
/** Resolves on the first reader call, after `ms`, or when `signal` aborts. */
|
|
13
|
+
export declare function readerOrTimeout(readers: Set<() => void>, ms: number, signal?: AbortSignal): Promise<void>;
|
|
14
|
+
/** A log file name from an id a model may have chosen (`frontend/api`, `../x`). */
|
|
15
|
+
export declare function logName(id: string, sessionId: string): string;
|
|
16
|
+
export declare function attachLog(session: Session, file: string, header: Parameters<typeof openVoyage>[1]): string | null;
|
|
17
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/agents/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,eAAe,QAAS,CAAC;AAEtC,wBAAgB,SAAS,IAAI,MAAM,CAGlC;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAI3D;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,CAOzI;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,qBAAqB,GAAG,MAAM,CAAC,CAM9F;AAED,8EAA8E;AAC9E,wBAAsB,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAY/G;AAED,mFAAmF;AACnF,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAcjH"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { mkdirSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { openVoyage } from "../voyage.js";
|
|
4
|
+
export const SUBAGENT_DEPTH_ENV = "OAR_SUBAGENT_DEPTH";
|
|
5
|
+
export const DEFAULT_WAIT_MS = 30_000;
|
|
6
|
+
export function hostDepth() {
|
|
7
|
+
const depth = Number(process.env[SUBAGENT_DEPTH_ENV] ?? "0");
|
|
8
|
+
return Number.isInteger(depth) && depth >= 0 ? depth : 0;
|
|
9
|
+
}
|
|
10
|
+
export function formatReport(report) {
|
|
11
|
+
const outcome = report.outcome.kind === "failed" ? `failed: ${report.outcome.reason}` : report.outcome.kind;
|
|
12
|
+
const who = report.name === undefined || report.name === report.id ? report.id : `${report.id} (${report.name})`;
|
|
13
|
+
return `[subagent ${who} on ${report.runtime}, turn ${String(report.turn)}: ${outcome}; session ${report.sessionId}]\n${report.text}`;
|
|
14
|
+
}
|
|
15
|
+
export async function sessionOf(runtime, installation, options) {
|
|
16
|
+
try {
|
|
17
|
+
const session = await runtime.session(installation, options);
|
|
18
|
+
return session;
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
return error instanceof Error ? error.message : String(error);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export async function installationOf(runtime) {
|
|
25
|
+
if (runtime.installation === undefined) {
|
|
26
|
+
return `${runtime.id} exposes no installation probe`;
|
|
27
|
+
}
|
|
28
|
+
const installation = await runtime.installation();
|
|
29
|
+
return installation.kind === "available" ? installation : `${runtime.id} is ${installation.kind === "not_found" ? "not installed" : `unsupported: ${installation.reason}`}`;
|
|
30
|
+
}
|
|
31
|
+
/** Resolves on the first reader call, after `ms`, or when `signal` aborts. */
|
|
32
|
+
export async function readerOrTimeout(readers, ms, signal) {
|
|
33
|
+
const { promise, resolve } = Promise.withResolvers();
|
|
34
|
+
const done = () => {
|
|
35
|
+
clearTimeout(timer);
|
|
36
|
+
readers.delete(done);
|
|
37
|
+
signal?.removeEventListener("abort", done);
|
|
38
|
+
resolve();
|
|
39
|
+
};
|
|
40
|
+
const timer = setTimeout(done, ms);
|
|
41
|
+
readers.add(done);
|
|
42
|
+
signal?.addEventListener("abort", done);
|
|
43
|
+
await promise;
|
|
44
|
+
}
|
|
45
|
+
/** A log file name from an id a model may have chosen (`frontend/api`, `../x`). */
|
|
46
|
+
export function logName(id, sessionId) {
|
|
47
|
+
return `${`${id}-${sessionId}`.replaceAll(/[^\w.-]/gu, "_")}.jsonl`;
|
|
48
|
+
}
|
|
49
|
+
export function attachLog(session, file, header) {
|
|
50
|
+
try {
|
|
51
|
+
mkdirSync(path.dirname(file), { recursive: true });
|
|
52
|
+
const recorder = openVoyage(file, header);
|
|
53
|
+
session.rawEvents((record) => {
|
|
54
|
+
recorder.record(record);
|
|
55
|
+
if (record.kind === "response" && record.body.kind === "exited") {
|
|
56
|
+
recorder.end("exited");
|
|
57
|
+
}
|
|
58
|
+
}, { sessionId: session.id, afterSeq: -1 });
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
return error instanceof Error ? error.message : String(error);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/agents/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subagents: child sessions on any runtime that a host starts, follows and
|
|
3
|
+
* feeds back into a parent. Node-only, like the root entry. See
|
|
4
|
+
* docs/spec/subagents.md.
|
|
5
|
+
*/
|
|
6
|
+
export { createSubagents } from "./crew.js";
|
|
7
|
+
export { formatReport, SUBAGENT_DEPTH_ENV } from "./helpers.js";
|
|
8
|
+
export type { DeliverOptions, SendMode, SendResult, SpawnOptions, SpawnRefusalCode, SpawnResult, Subagent, SubagentInfo, SubagentReport, Subagents, SubagentsOptions, SubagentState, SubagentTaskEvent, WaitOptions, } from "./types.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAChE,YAAY,EACV,cAAc,EACd,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,WAAW,GACZ,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subagents: child sessions on any runtime that a host starts, follows and
|
|
3
|
+
* feeds back into a parent. Node-only, like the root entry. See
|
|
4
|
+
* docs/spec/subagents.md.
|
|
5
|
+
*/
|
|
6
|
+
export { createSubagents } from "./crew.js";
|
|
7
|
+
export { formatReport, SUBAGENT_DEPTH_ENV } from "./helpers.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Session, TaskEventBody } from "../contracts/session.js";
|
|
2
|
+
import type { Subagent, SubagentReport } from "./types.js";
|
|
3
|
+
/** What a subagent tells the crew that owns it. */
|
|
4
|
+
export interface SubagentHooks {
|
|
5
|
+
readonly report: (report: SubagentReport) => void;
|
|
6
|
+
readonly task: (event: TaskEventBody) => void;
|
|
7
|
+
/** Whether one more turn may start now (the crew's running limit). */
|
|
8
|
+
readonly mayRun: () => boolean;
|
|
9
|
+
readonly closed: () => void;
|
|
10
|
+
}
|
|
11
|
+
export interface SubagentIdentity {
|
|
12
|
+
readonly id: string;
|
|
13
|
+
readonly name?: string;
|
|
14
|
+
readonly runtime: string;
|
|
15
|
+
readonly log?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* One child session as a subagent: every turn its root agent ends becomes a
|
|
19
|
+
* report carrying the root text said in that turn, whether the turn began
|
|
20
|
+
* from the task, a follow-up, a queued input or the runtime itself. A turn
|
|
21
|
+
* the runtime never ends (its process exited, or `close` disposed it) still
|
|
22
|
+
* gets a report, so nobody waits on it forever.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createSubagent(identity: SubagentIdentity, session: Session, hooks: SubagentHooks): Subagent;
|
|
25
|
+
//# sourceMappingURL=subagent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../../src/agents/subagent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,OAAO,EAAE,aAAa,EAA2B,MAAM,yBAAyB,CAAC;AACtH,OAAO,KAAK,EAAwB,QAAQ,EAAgB,cAAc,EAAiB,MAAM,YAAY,CAAC;AAE9G,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAwBD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,GAAG,QAAQ,CAoK3G"}
|