@nookplot/runtime 0.5.99 → 0.5.105

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/dist/__tests__/autonomous.guardrails.test.d.ts +2 -0
  2. package/dist/__tests__/autonomous.guardrails.test.d.ts.map +1 -0
  3. package/dist/__tests__/autonomous.guardrails.test.js +215 -0
  4. package/dist/__tests__/autonomous.guardrails.test.js.map +1 -0
  5. package/dist/__tests__/autonomous.hooks.test.d.ts +2 -0
  6. package/dist/__tests__/autonomous.hooks.test.d.ts.map +1 -0
  7. package/dist/__tests__/autonomous.hooks.test.js +107 -0
  8. package/dist/__tests__/autonomous.hooks.test.js.map +1 -0
  9. package/dist/__tests__/chatEngine.episodicHook.test.d.ts +2 -0
  10. package/dist/__tests__/chatEngine.episodicHook.test.d.ts.map +1 -0
  11. package/dist/__tests__/chatEngine.episodicHook.test.js +160 -0
  12. package/dist/__tests__/chatEngine.episodicHook.test.js.map +1 -0
  13. package/dist/__tests__/chatEngine.test.d.ts +2 -0
  14. package/dist/__tests__/chatEngine.test.d.ts.map +1 -0
  15. package/dist/__tests__/chatEngine.test.js +482 -0
  16. package/dist/__tests__/chatEngine.test.js.map +1 -0
  17. package/dist/__tests__/conversation/compactionMemory.test.d.ts +2 -0
  18. package/dist/__tests__/conversation/compactionMemory.test.d.ts.map +1 -0
  19. package/dist/__tests__/conversation/compactionMemory.test.js +447 -0
  20. package/dist/__tests__/conversation/compactionMemory.test.js.map +1 -0
  21. package/dist/__tests__/conversation/modelThresholdsParity.test.d.ts +2 -0
  22. package/dist/__tests__/conversation/modelThresholdsParity.test.d.ts.map +1 -0
  23. package/dist/__tests__/conversation/modelThresholdsParity.test.js +79 -0
  24. package/dist/__tests__/conversation/modelThresholdsParity.test.js.map +1 -0
  25. package/dist/__tests__/guardrails.test.d.ts +2 -0
  26. package/dist/__tests__/guardrails.test.d.ts.map +1 -0
  27. package/dist/__tests__/guardrails.test.js +236 -0
  28. package/dist/__tests__/guardrails.test.js.map +1 -0
  29. package/dist/__tests__/hooks.test.d.ts +9 -0
  30. package/dist/__tests__/hooks.test.d.ts.map +1 -0
  31. package/dist/__tests__/hooks.test.js +188 -0
  32. package/dist/__tests__/hooks.test.js.map +1 -0
  33. package/dist/__tests__/querySegmentation.test.d.ts +2 -0
  34. package/dist/__tests__/querySegmentation.test.d.ts.map +1 -0
  35. package/dist/__tests__/querySegmentation.test.js +187 -0
  36. package/dist/__tests__/querySegmentation.test.js.map +1 -0
  37. package/dist/__tests__/sandbox.test.d.ts +13 -0
  38. package/dist/__tests__/sandbox.test.d.ts.map +1 -0
  39. package/dist/__tests__/sandbox.test.js +413 -0
  40. package/dist/__tests__/sandbox.test.js.map +1 -0
  41. package/dist/__tests__/wakeUpStack.test.d.ts +2 -0
  42. package/dist/__tests__/wakeUpStack.test.d.ts.map +1 -0
  43. package/dist/__tests__/wakeUpStack.test.js +239 -0
  44. package/dist/__tests__/wakeUpStack.test.js.map +1 -0
  45. package/dist/actionCatalog.generated.d.ts.map +1 -1
  46. package/dist/actionCatalog.generated.js +0 -5
  47. package/dist/actionCatalog.generated.js.map +1 -1
  48. package/dist/autonomous.d.ts +3 -0
  49. package/dist/autonomous.d.ts.map +1 -1
  50. package/dist/autonomous.js +108 -7
  51. package/dist/autonomous.js.map +1 -1
  52. package/dist/chat/chatEngine.d.ts +15 -0
  53. package/dist/chat/chatEngine.d.ts.map +1 -1
  54. package/dist/chat/chatEngine.js +59 -34
  55. package/dist/chat/chatEngine.js.map +1 -1
  56. package/dist/connection.d.ts.map +1 -1
  57. package/dist/connection.js +1 -0
  58. package/dist/connection.js.map +1 -1
  59. package/dist/conversation/compactionMemory.d.ts +124 -0
  60. package/dist/conversation/compactionMemory.d.ts.map +1 -0
  61. package/dist/conversation/compactionMemory.js +379 -0
  62. package/dist/conversation/compactionMemory.js.map +1 -0
  63. package/dist/conversation/conversationLogStore.d.ts +111 -0
  64. package/dist/conversation/conversationLogStore.d.ts.map +1 -0
  65. package/dist/conversation/conversationLogStore.js +248 -0
  66. package/dist/conversation/conversationLogStore.js.map +1 -0
  67. package/dist/conversation/conversationMemory.d.ts +59 -0
  68. package/dist/conversation/conversationMemory.d.ts.map +1 -0
  69. package/dist/conversation/conversationMemory.js +32 -0
  70. package/dist/conversation/conversationMemory.js.map +1 -0
  71. package/dist/conversation/index.d.ts +16 -0
  72. package/dist/conversation/index.d.ts.map +1 -0
  73. package/dist/conversation/index.js +5 -0
  74. package/dist/conversation/index.js.map +1 -0
  75. package/dist/conversation/modelLimits.d.ts +43 -0
  76. package/dist/conversation/modelLimits.d.ts.map +1 -0
  77. package/dist/conversation/modelLimits.js +67 -0
  78. package/dist/conversation/modelLimits.js.map +1 -0
  79. package/dist/defaultGuardrails.d.ts +21 -0
  80. package/dist/defaultGuardrails.d.ts.map +1 -0
  81. package/dist/defaultGuardrails.js +90 -0
  82. package/dist/defaultGuardrails.js.map +1 -0
  83. package/dist/episodicMemoryHook.d.ts +39 -0
  84. package/dist/episodicMemoryHook.d.ts.map +1 -0
  85. package/dist/episodicMemoryHook.js +58 -0
  86. package/dist/episodicMemoryHook.js.map +1 -0
  87. package/dist/guardrails.d.ts +182 -0
  88. package/dist/guardrails.d.ts.map +1 -0
  89. package/dist/guardrails.js +277 -0
  90. package/dist/guardrails.js.map +1 -0
  91. package/dist/hooks.d.ts +162 -0
  92. package/dist/hooks.d.ts.map +1 -0
  93. package/dist/hooks.js +91 -0
  94. package/dist/hooks.js.map +1 -0
  95. package/dist/index.d.ts +38 -3
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +51 -3
  98. package/dist/index.js.map +1 -1
  99. package/dist/knowledgeContext.d.ts +15 -1
  100. package/dist/knowledgeContext.d.ts.map +1 -1
  101. package/dist/knowledgeContext.js +26 -3
  102. package/dist/knowledgeContext.js.map +1 -1
  103. package/dist/memory.d.ts +15 -0
  104. package/dist/memory.d.ts.map +1 -1
  105. package/dist/memory.js +14 -0
  106. package/dist/memory.js.map +1 -1
  107. package/dist/querySegmentation.d.ts +54 -0
  108. package/dist/querySegmentation.d.ts.map +1 -0
  109. package/dist/querySegmentation.js +80 -0
  110. package/dist/querySegmentation.js.map +1 -0
  111. package/dist/sandbox.d.ts +156 -0
  112. package/dist/sandbox.d.ts.map +1 -0
  113. package/dist/sandbox.js +425 -0
  114. package/dist/sandbox.js.map +1 -0
  115. package/dist/signalActionMap.d.ts +19 -0
  116. package/dist/signalActionMap.d.ts.map +1 -1
  117. package/dist/signalActionMap.js +33 -0
  118. package/dist/signalActionMap.js.map +1 -1
  119. package/dist/types.d.ts +25 -1
  120. package/dist/types.d.ts.map +1 -1
  121. package/dist/wakeUpStack.d.ts +94 -0
  122. package/dist/wakeUpStack.d.ts.map +1 -0
  123. package/dist/wakeUpStack.js +215 -0
  124. package/dist/wakeUpStack.js.map +1 -0
  125. package/package.json +1 -1
@@ -0,0 +1,425 @@
1
+ /**
2
+ * Sandbox — abstract base for agent-local code execution.
3
+ *
4
+ * `LocalSandbox` runs commands directly on the host (no isolation, dev only).
5
+ * `DockerSandbox` spawns a long-lived container and shells out to `docker exec`
6
+ * for each call. Both share the same surface so callers can swap them via:
7
+ *
8
+ * const sandbox = process.env.NODE_ENV === "production"
9
+ * ? await DockerSandbox.create({ image: "python:3.12.7-slim" })
10
+ * : await LocalSandbox.create();
11
+ *
12
+ * Sandboxes are AGENT-LOCAL — they are never registered in `ACTION_CATALOG`
13
+ * and never reachable over the network. `asTools()` returns local tool specs
14
+ * an agent can hand to its LLM, but the dispatch happens entirely in-process.
15
+ *
16
+ * Adversarial defaults (DockerSandbox):
17
+ * - `--network none` unless `allowNetwork: true`.
18
+ * - `--cpus 1 --memory 512m` unless overridden.
19
+ * - Mounts only under the caller's cwd unless `allowAnyMount: true`.
20
+ * - Mounts are read-only unless `readonly: false` is set per-mount.
21
+ * - Default image is `python:3.12.7-slim` — pinned minor to resist tag
22
+ * re-publish; callers running untrusted code at scale should override to
23
+ * a digest (`python@sha256:…`) for true immutability.
24
+ * - `close()` is idempotent and actually removes the container.
25
+ *
26
+ * @module sandbox
27
+ */
28
+ import { spawn } from "node:child_process";
29
+ import { promises as fs, realpathSync } from "node:fs";
30
+ import path from "node:path";
31
+ // ── Argv-injection guards ────────────────────────────────────
32
+ //
33
+ // These validators exist because `SandboxOptions` flows into a `docker run`
34
+ // argv. Even though we use array-form spawn (no shell), Docker itself parses
35
+ // flags, and some fields (env values, image names) can be weaponized if
36
+ // callers ever pipe untrusted input through. All are defense-in-depth — the
37
+ // sandbox is agent-local and caller-constructed today.
38
+ /** POSIX env var name: `[A-Za-z_][A-Za-z0-9_]*`. Rejects anything that could
39
+ * confuse shells or POSIX env-parsers in the container. */
40
+ const ENV_KEY_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;
41
+ /** Docker image reference: letters/digits/`._/:@-`, must start with an
42
+ * alphanumeric so it never looks like a flag to `docker run`. */
43
+ const DOCKER_IMAGE_RE = /^[A-Za-z0-9][A-Za-z0-9._/:@-]*$/;
44
+ function assertEnvPair(key, value) {
45
+ if (!ENV_KEY_RE.test(key)) {
46
+ throw new Error(`DockerSandbox: invalid env key '${key}' (must match ${ENV_KEY_RE.source})`);
47
+ }
48
+ if (value.includes("\n") || value.includes("\0")) {
49
+ throw new Error(`DockerSandbox: env value for '${key}' contains newline or NUL`);
50
+ }
51
+ }
52
+ function assertImage(image) {
53
+ if (!DOCKER_IMAGE_RE.test(image)) {
54
+ throw new Error(`DockerSandbox: invalid image '${image}' (must match ${DOCKER_IMAGE_RE.source})`);
55
+ }
56
+ }
57
+ /**
58
+ * Default Docker image. Pinned to a specific patch version + `slim` variant:
59
+ * - `slim` reduces attack surface (no build toolchain, no compilers).
60
+ * - Pinning to `3.12.7` resists the "tag re-publish" supply-chain vector
61
+ * where a fresh push to `python:3.12` replaces the content behind the tag.
62
+ *
63
+ * Callers running untrusted code at scale SHOULD override with a digest pin:
64
+ * new DockerSandbox({ image: "python@sha256:<digest>" })
65
+ *
66
+ * Bump this default when Python ships a meaningful security release; the
67
+ * argv-injection regex for `image` still requires leading alphanumeric.
68
+ */
69
+ export const DEFAULT_SANDBOX_IMAGE = "python:3.12.7-slim";
70
+ // ── Base ─────────────────────────────────────────────────────
71
+ export class Sandbox {
72
+ /** Run a Python script via stdin. */
73
+ async python(script) {
74
+ return this.exec(["python3", "-"], { input: script });
75
+ }
76
+ /** Run a shell command. */
77
+ async sh(command) {
78
+ return this.exec(["sh", "-c", command]);
79
+ }
80
+ /** Returns local tool specs callers can pass to their LLM tool list. */
81
+ asTools() {
82
+ return [
83
+ {
84
+ name: "python",
85
+ description: "Run a Python 3 script in the sandbox. Returns stdout.",
86
+ parameters: {
87
+ type: "object",
88
+ properties: {
89
+ script: { type: "string", description: "Python source to execute." },
90
+ },
91
+ required: ["script"],
92
+ },
93
+ invoke: async (args) => this.python(String(args.script ?? "")),
94
+ },
95
+ {
96
+ name: "sh",
97
+ description: "Run a shell command in the sandbox. Returns stdout.",
98
+ parameters: {
99
+ type: "object",
100
+ properties: {
101
+ command: { type: "string", description: "Shell command line." },
102
+ },
103
+ required: ["command"],
104
+ },
105
+ invoke: async (args) => this.sh(String(args.command ?? "")),
106
+ },
107
+ ];
108
+ }
109
+ }
110
+ // ── LocalSandbox (no isolation; dev / tests only) ────────────
111
+ /**
112
+ * Silence the dev-only warning when set truthy. Escape hatch for test harnesses
113
+ * or intentionally-unsafe prototypes that don't want log noise. Production
114
+ * agents should never set this — use {@link DockerSandbox} instead.
115
+ */
116
+ const LOCAL_SANDBOX_SILENCE_ENV = "NOOKPLOT_LOCAL_SANDBOX_SILENCE";
117
+ function emitLocalSandboxWarning() {
118
+ const env = process.env;
119
+ if (env.NODE_ENV === "test")
120
+ return;
121
+ if (env[LOCAL_SANDBOX_SILENCE_ENV])
122
+ return;
123
+ // Keep the message terse — it prints on every `create()` and that's fine:
124
+ // a production agent creating many LocalSandboxes is itself a bug signal.
125
+ console.warn("[LocalSandbox] No process isolation — commands run directly on the host. " +
126
+ "Use DockerSandbox for untrusted code in production. " +
127
+ `Silence with ${LOCAL_SANDBOX_SILENCE_ENV}=1.`);
128
+ }
129
+ export class LocalSandbox extends Sandbox {
130
+ env;
131
+ cwd;
132
+ closed = false;
133
+ constructor(opts = {}) {
134
+ super();
135
+ this.env = { ...opts.env };
136
+ this.cwd = process.cwd();
137
+ }
138
+ static async create(opts = {}) {
139
+ emitLocalSandboxWarning();
140
+ return new LocalSandbox(opts);
141
+ }
142
+ async exec(cmd, opts = {}) {
143
+ if (this.closed)
144
+ throw new Error("LocalSandbox: closed");
145
+ if (cmd.length === 0)
146
+ throw new Error("LocalSandbox: empty command");
147
+ const [bin, ...args] = cmd;
148
+ return runProcess(bin, args, {
149
+ input: opts.input,
150
+ cwd: opts.cwd ?? this.cwd,
151
+ env: { ...process.env, ...this.env, ...(opts.env ?? {}) },
152
+ });
153
+ }
154
+ async put(localPath, sandboxPath) {
155
+ if (this.closed)
156
+ throw new Error("LocalSandbox: closed");
157
+ await fs.mkdir(path.dirname(sandboxPath), { recursive: true });
158
+ await fs.copyFile(localPath, sandboxPath);
159
+ }
160
+ async get(sandboxPath, localPath) {
161
+ if (this.closed)
162
+ throw new Error("LocalSandbox: closed");
163
+ await fs.mkdir(path.dirname(localPath), { recursive: true });
164
+ await fs.copyFile(sandboxPath, localPath);
165
+ return localPath;
166
+ }
167
+ endpoint(_port) {
168
+ throw new Error("LocalSandbox: endpoint() unsupported (no port mapping)");
169
+ }
170
+ async close() {
171
+ this.closed = true;
172
+ }
173
+ }
174
+ export class DockerSandbox extends Sandbox {
175
+ opts;
176
+ internal;
177
+ constructor(opts, internal) {
178
+ super();
179
+ this.opts = {
180
+ ...opts,
181
+ image: opts.image ?? DEFAULT_SANDBOX_IMAGE,
182
+ cpus: opts.cpus ?? 1,
183
+ memory: opts.memory ?? "512m",
184
+ };
185
+ this.internal = internal;
186
+ }
187
+ /** Spin up a long-lived container. Throws if Docker is unreachable. */
188
+ static async create(opts = {}) {
189
+ const dockerBin = opts.dockerBin ?? "docker";
190
+ const image = opts.image ?? DEFAULT_SANDBOX_IMAGE;
191
+ const cpus = opts.cpus ?? 1;
192
+ const memory = opts.memory ?? "512m";
193
+ DockerSandbox.validateMounts(opts.mounts ?? [], opts.allowAnyMount === true);
194
+ const args = DockerSandbox.buildRunArgs({
195
+ image,
196
+ cpus,
197
+ memory,
198
+ ports: opts.ports,
199
+ env: opts.env,
200
+ mounts: opts.mounts,
201
+ allowNetwork: opts.allowNetwork === true,
202
+ });
203
+ const containerIdRaw = await runProcess(dockerBin, args, {});
204
+ const containerId = containerIdRaw.trim();
205
+ if (!containerId) {
206
+ throw new Error("DockerSandbox: docker run returned empty container id");
207
+ }
208
+ const hostPortByContainer = await DockerSandbox.discoverPorts(dockerBin, containerId, Object.keys(opts.ports ?? {}).map((p) => Number(p)));
209
+ return new DockerSandbox(opts, {
210
+ containerId,
211
+ hostPortByContainer,
212
+ dockerBin,
213
+ closed: false,
214
+ });
215
+ }
216
+ /** Reattach to an existing container by id. */
217
+ static async connect(containerId, opts = {}) {
218
+ const dockerBin = opts.dockerBin ?? "docker";
219
+ const inspect = await runProcess(dockerBin, ["inspect", "--format", "{{.State.Running}}", containerId], {});
220
+ if (inspect.trim() !== "true") {
221
+ throw new Error(`DockerSandbox: container ${containerId} is not running`);
222
+ }
223
+ const hostPortByContainer = await DockerSandbox.discoverPorts(dockerBin, containerId, Object.keys(opts.ports ?? {}).map((p) => Number(p)));
224
+ return new DockerSandbox(opts, {
225
+ containerId,
226
+ hostPortByContainer,
227
+ dockerBin,
228
+ closed: false,
229
+ });
230
+ }
231
+ /** Visible for tests — does NOT execute docker. */
232
+ static buildRunArgs(opts) {
233
+ assertImage(opts.image);
234
+ const args = [
235
+ "run",
236
+ "-d",
237
+ "--rm",
238
+ "--cpus",
239
+ String(opts.cpus),
240
+ "--memory",
241
+ opts.memory,
242
+ ];
243
+ if (!opts.allowNetwork)
244
+ args.push("--network", "none");
245
+ for (const [containerPortStr, hostPort] of Object.entries(opts.ports ?? {})) {
246
+ const containerPort = Number(containerPortStr);
247
+ if (hostPort === null || hostPort === undefined) {
248
+ args.push("-p", `${containerPort}`);
249
+ }
250
+ else {
251
+ args.push("-p", `${hostPort}:${containerPort}`);
252
+ }
253
+ }
254
+ for (const [key, value] of Object.entries(opts.env ?? {})) {
255
+ assertEnvPair(key, value);
256
+ args.push("-e", `${key}=${value}`);
257
+ }
258
+ for (const mount of opts.mounts ?? []) {
259
+ // Default to read-only. Writes require explicit `readonly: false`.
260
+ // Undefined/true/missing → ro; only `false` opts into rw. This closes
261
+ // the "untrusted code writes back to the host" path by default.
262
+ const flag = mount.readonly === false ? "rw" : "ro";
263
+ args.push("-v", `${path.resolve(mount.host)}:${mount.container}:${flag}`);
264
+ }
265
+ // `assertImage` above rejects leading-dash image names, so positional
266
+ // placement of `image` cannot be mis-parsed as a docker-run flag.
267
+ args.push(opts.image, "sleep", "infinity");
268
+ return args;
269
+ }
270
+ static validateMounts(mounts, allowAny) {
271
+ if (allowAny)
272
+ return;
273
+ // Use realpath on BOTH sides so a symlink inside cwd pointing outside it
274
+ // cannot slip past the check. Matches the Python side's behavior.
275
+ let cwd;
276
+ try {
277
+ cwd = realpathSync(process.cwd());
278
+ }
279
+ catch {
280
+ cwd = path.resolve(process.cwd());
281
+ }
282
+ for (const mount of mounts) {
283
+ const abs = path.resolve(mount.host);
284
+ let resolved;
285
+ try {
286
+ resolved = realpathSync(abs);
287
+ }
288
+ catch {
289
+ // Path doesn't exist yet — fall back to the lexical resolution.
290
+ resolved = abs;
291
+ }
292
+ const rel = path.relative(cwd, resolved);
293
+ const escapes = rel === ".." || rel.startsWith(`..${path.sep}`) || path.isAbsolute(rel);
294
+ if (escapes) {
295
+ throw new Error(`DockerSandbox: mount '${mount.host}' resolves outside cwd; pass allowAnyMount: true to override`);
296
+ }
297
+ }
298
+ }
299
+ static async discoverPorts(dockerBin, containerId, requestedContainerPorts) {
300
+ const out = new Map();
301
+ for (const containerPort of requestedContainerPorts) {
302
+ try {
303
+ const raw = await runProcess(dockerBin, ["port", containerId, String(containerPort)], {});
304
+ // Format: "0.0.0.0:54321\n" — take the first line and the port after the colon.
305
+ const first = raw.split(/\r?\n/)[0]?.trim() ?? "";
306
+ const colon = first.lastIndexOf(":");
307
+ if (colon >= 0) {
308
+ const hostPort = Number(first.slice(colon + 1));
309
+ if (Number.isFinite(hostPort))
310
+ out.set(containerPort, hostPort);
311
+ }
312
+ }
313
+ catch {
314
+ // Port not exposed — skip; endpoint() will throw with a clear message.
315
+ }
316
+ }
317
+ return out;
318
+ }
319
+ async exec(cmd, opts = {}) {
320
+ if (this.internal.closed)
321
+ throw new Error("DockerSandbox: closed");
322
+ if (cmd.length === 0)
323
+ throw new Error("DockerSandbox: empty command");
324
+ const args = ["exec"];
325
+ if (opts.input !== undefined)
326
+ args.push("-i");
327
+ if (opts.cwd)
328
+ args.push("-w", opts.cwd);
329
+ for (const [k, v] of Object.entries(opts.env ?? {})) {
330
+ args.push("-e", `${k}=${v}`);
331
+ }
332
+ args.push(this.internal.containerId, ...cmd);
333
+ return runProcess(this.internal.dockerBin, args, { input: opts.input });
334
+ }
335
+ async put(localPath, sandboxPath) {
336
+ if (this.internal.closed)
337
+ throw new Error("DockerSandbox: closed");
338
+ await runProcess(this.internal.dockerBin, ["cp", localPath, `${this.internal.containerId}:${sandboxPath}`], {});
339
+ }
340
+ async get(sandboxPath, localPath) {
341
+ if (this.internal.closed)
342
+ throw new Error("DockerSandbox: closed");
343
+ await fs.mkdir(path.dirname(localPath), { recursive: true });
344
+ await runProcess(this.internal.dockerBin, ["cp", `${this.internal.containerId}:${sandboxPath}`, localPath], {});
345
+ return localPath;
346
+ }
347
+ endpoint(port) {
348
+ const hostPort = this.internal.hostPortByContainer.get(port);
349
+ if (hostPort === undefined) {
350
+ throw new Error(`DockerSandbox: port ${port} not mapped`);
351
+ }
352
+ return `localhost:${hostPort}`;
353
+ }
354
+ /** Idempotent. Force-removes the container and marks closed. */
355
+ async close() {
356
+ if (this.internal.closed)
357
+ return;
358
+ this.internal.closed = true;
359
+ try {
360
+ await runProcess(this.internal.dockerBin, ["rm", "-f", this.internal.containerId], {});
361
+ }
362
+ catch {
363
+ // Container may already be gone (e.g. --rm fired). Closed flag still
364
+ // flipped, so subsequent calls short-circuit. Leaving a leaked container
365
+ // would be a security bug — but `rm -f` is the strongest guarantee
366
+ // available from this side; failures here mean Docker itself is wedged.
367
+ }
368
+ }
369
+ /** Test inspection — container id assigned at create. */
370
+ get containerId() {
371
+ return this.internal.containerId;
372
+ }
373
+ }
374
+ /** Spawn a process, capture stdout. Throws on non-zero exit. */
375
+ function runProcess(bin, args, opts) {
376
+ return new Promise((resolve, reject) => {
377
+ const spawnOpts = {
378
+ stdio: ["pipe", "pipe", "pipe"],
379
+ };
380
+ if (opts.cwd)
381
+ spawnOpts.cwd = opts.cwd;
382
+ if (opts.env)
383
+ spawnOpts.env = opts.env;
384
+ const child = spawn(bin, args, spawnOpts);
385
+ const stdoutChunks = [];
386
+ const stderrChunks = [];
387
+ child.stdout?.on("data", (chunk) => stdoutChunks.push(chunk));
388
+ child.stderr?.on("data", (chunk) => stderrChunks.push(chunk));
389
+ child.on("error", reject);
390
+ child.on("close", (code) => {
391
+ const stdout = Buffer.concat(stdoutChunks).toString("utf8");
392
+ const stderr = Buffer.concat(stderrChunks).toString("utf8");
393
+ if (code === 0) {
394
+ resolve(stdout);
395
+ }
396
+ else {
397
+ const detail = stderr.trim() || stdout.trim() || "(no output)";
398
+ reject(new Error(`${bin} exited ${code}: ${detail}`));
399
+ }
400
+ });
401
+ if (opts.input !== undefined && child.stdin) {
402
+ child.stdin.end(opts.input);
403
+ }
404
+ else if (child.stdin) {
405
+ child.stdin.end();
406
+ }
407
+ });
408
+ }
409
+ /** Sentinel for downstream code that wants to detect a sandbox at the type
410
+ * level without importing the abstract class directly. */
411
+ export function isSandbox(value) {
412
+ return value instanceof Sandbox;
413
+ }
414
+ /** Returns true if `docker version` succeeds. Useful for callers that want
415
+ * to fall back to `LocalSandbox` when Docker is unavailable. */
416
+ export async function isDockerAvailable(dockerBin = "docker") {
417
+ try {
418
+ await runProcess(dockerBin, ["version", "--format", "{{.Server.Version}}"], {});
419
+ return true;
420
+ }
421
+ catch {
422
+ return false;
423
+ }
424
+ }
425
+ //# sourceMappingURL=sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,26 @@
10
10
  * New tools are auto-discoverable through their ACTION_CATALOG category via `browse_tools`.
11
11
  * No switch statements to update when adding new tools.
12
12
  */
13
+ export type SelectionMode = "lenient" | "moderate" | "aggressive" | "strict";
13
14
  export declare const CORE_ACTIONS: string[];
15
+ /**
16
+ * Signal type → MAD selection mode for WakeUpStack L2 retrieval.
17
+ *
18
+ * Derived from the retrieval focus each signal type needs:
19
+ * - `aggressive` — focused 1:1 context (DMs, mentions, replies to own post).
20
+ * Want 2–3 tight matches, not scattershot.
21
+ * - `moderate` — standard working set (general channel activity, projects).
22
+ * - `lenient` — exploratory, cross-domain (new projects, multi-step tasks).
23
+ * Cast wide for synthesis.
24
+ *
25
+ * **Scope rule:** only signal types whose handlers actually reach
26
+ * `wakeUpStack.getContext()` live here. Adding an entry for a signal type whose
27
+ * handler doesn't call WakeUpStack is dead code — keep this table in sync with
28
+ * the handler wiring in `autonomous.ts`.
29
+ *
30
+ * Unmapped signal types fall back to `"moderate"` in `WakeUpStack.getContext()`.
31
+ */
32
+ export declare const SIGNAL_SELECTION_MODE: Record<string, SelectionMode>;
14
33
  export declare const SIGNAL_CONTEXT_ACTIONS: Record<string, string[]>;
15
34
  /**
16
35
  * Derive the full list of available actions for a given signal type and loaded categories.
@@ -1 +1 @@
1
- {"version":3,"file":"signalActionMap.d.ts","sourceRoot":"","sources":["../src/signalActionMap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,eAAO,MAAM,YAAY,EAAE,MAAM,EA0BhC,CAAC;AAOF,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAwK3D,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC5B,MAAM,EAAE,CAqBV"}
1
+ {"version":3,"file":"signalActionMap.d.ts","sourceRoot":"","sources":["../src/signalActionMap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,CAAC;AAM7E,eAAO,MAAM,YAAY,EAAE,MAAM,EA0BhC,CAAC;AAOF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAqB/D,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAwK3D,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC5B,MAAM,EAAE,CAqBV"}
@@ -45,6 +45,39 @@ export const CORE_ACTIONS = [
45
45
  // Per-signal-type additions. Only the actions *specific* to that signal.
46
46
  // "reply" and "ignore" are in CORE_ACTIONS — excluded here (always available).
47
47
  // Cross-referenced across all 4 portals for consistency.
48
+ /**
49
+ * Signal type → MAD selection mode for WakeUpStack L2 retrieval.
50
+ *
51
+ * Derived from the retrieval focus each signal type needs:
52
+ * - `aggressive` — focused 1:1 context (DMs, mentions, replies to own post).
53
+ * Want 2–3 tight matches, not scattershot.
54
+ * - `moderate` — standard working set (general channel activity, projects).
55
+ * - `lenient` — exploratory, cross-domain (new projects, multi-step tasks).
56
+ * Cast wide for synthesis.
57
+ *
58
+ * **Scope rule:** only signal types whose handlers actually reach
59
+ * `wakeUpStack.getContext()` live here. Adding an entry for a signal type whose
60
+ * handler doesn't call WakeUpStack is dead code — keep this table in sync with
61
+ * the handler wiring in `autonomous.ts`.
62
+ *
63
+ * Unmapped signal types fall back to `"moderate"` in `WakeUpStack.getContext()`.
64
+ */
65
+ export const SIGNAL_SELECTION_MODE = {
66
+ // 1:1 DM — handled by handleDmSignal, wired into WakeUpStack by Change 1.
67
+ dm_received: "aggressive",
68
+ // Direct mention in a channel — handleChannelSignal path.
69
+ channel_mention: "aggressive",
70
+ // Reply to the agent's own post — handleChannelSignal path (channelId present).
71
+ reply_to_own_post: "aggressive",
72
+ // General channel participation — standard working set.
73
+ channel_message: "moderate",
74
+ // Project thread discussion — standard context breadth.
75
+ project_discussion: "moderate",
76
+ // New community post — standard breadth.
77
+ new_post_in_community: "moderate",
78
+ // Discovering a new project — cast wide for cross-domain synthesis.
79
+ new_project: "lenient",
80
+ };
48
81
  export const SIGNAL_CONTEXT_ACTIONS = {
49
82
  // ── Directive ──
50
83
  // Core mining actions so agents can act on "go mine" directives without browse_tools.
@@ -1 +1 @@
1
- {"version":3,"file":"signalActionMap.js","sourceRoot":"","sources":["../src/signalActionMap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signalActionMap.js","sourceRoot":"","sources":["../src/signalActionMap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AASpD,2BAA2B;AAC3B,mEAAmE;AACnE,0EAA0E;AAE1E,MAAM,CAAC,MAAM,YAAY,GAAa;IACpC,OAAO;IACP,QAAQ,EAAE,cAAc;IACxB,gBAAgB;IAChB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,sBAAsB;IAC1D,SAAS;IACT,QAAQ,EAAE,MAAM,EAAE,oBAAoB;IACtC,YAAY;IACZ,aAAa,EAAE,UAAU,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa;IACzE,2EAA2E;IAC3E,oBAAoB,EAAE,eAAe,EAAE,uBAAuB;IAC9D,WAAW;IACX,YAAY,EAAE,eAAe,EAAE,gBAAgB;IAC/C,UAAU;IACV,iBAAiB,EAAE,cAAc;IACjC,gCAAgC;IAChC,gBAAgB,EAAE,cAAc,EAAE,eAAe;IACjD,oBAAoB,EAAE,mBAAmB;IACzC,YAAY;IACZ,sBAAsB,EAAE,mBAAmB;IAC3C,SAAS;IACT,cAAc,EAAE,eAAe;IAC/B,UAAU;IACV,kBAAkB,EAAE,cAAc;IAClC,4BAA4B;IAC5B,2BAA2B,EAAE,iBAAiB,EAAE,mBAAmB;CACpE,CAAC;AAEF,+BAA+B;AAC/B,yEAAyE;AACzE,+EAA+E;AAC/E,yDAAyD;AAEzD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAkC;IAClE,0EAA0E;IAC1E,WAAW,EAAE,YAAY;IAEzB,0DAA0D;IAC1D,eAAe,EAAE,YAAY;IAE7B,gFAAgF;IAChF,iBAAiB,EAAE,YAAY;IAE/B,wDAAwD;IACxD,eAAe,EAAE,UAAU;IAE3B,wDAAwD;IACxD,kBAAkB,EAAE,UAAU;IAE9B,yCAAyC;IACzC,qBAAqB,EAAE,UAAU;IAEjC,oEAAoE;IACpE,WAAW,EAAE,SAAS;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAA6B;IAC9D,kBAAkB;IAClB,sFAAsF;IACtF,iGAAiG;IACjG,SAAS,EAAE;QACT,4BAA4B,EAAE,sBAAsB,EAAE,oBAAoB;QAC1E,sBAAsB,EAAE,wBAAwB,EAAE,wBAAwB;QAC1E,6BAA6B,EAAE,qBAAqB,EAAE,sBAAsB;QAC5E,qBAAqB,EAAE,iCAAiC;QACxD,qBAAqB,EAAE,mBAAmB,EAAE,oBAAoB;QAChE,0BAA0B,EAAE,cAAc,EAAE,iBAAiB;KAC9D;IAED,sBAAsB;IACtB,cAAc,EAAE,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;IACtD,YAAY,EAAE,EAAE;IAChB,cAAc,EAAE,CAAC,aAAa,EAAE,YAAY,CAAC;IAE7C,cAAc;IACd,uBAAuB,EAAE,CAAC,eAAe,CAAC;IAC1C,eAAe,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;IAC5D,wBAAwB,EAAE,EAAE;IAC5B,wBAAwB,EAAE,EAAE;IAE5B,iBAAiB;IACjB,sBAAsB,EAAE,CAAC,eAAe,CAAC;IACzC,aAAa,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,CAAC;IACzF,cAAc,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC;IACzC,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,EAAE;IAChB,iBAAiB,EAAE,EAAE;IACrB,oBAAoB,EAAE,EAAE;IACxB,eAAe,EAAE,CAAC,aAAa,CAAC;IAChC,qBAAqB,EAAE,EAAE;IACzB,WAAW,EAAE,EAAE;IACf,cAAc,EAAE,EAAE;IAClB,WAAW,EAAE,CAAC,gBAAgB,CAAC;IAC/B,mBAAmB,EAAE,CAAC,gBAAgB,CAAC;IACvC,eAAe,EAAE,CAAC,mBAAmB,EAAE,qBAAqB,EAAE,qBAAqB,CAAC;IACpF,cAAc,EAAE,CAAC,mBAAmB,EAAE,qBAAqB,EAAE,qBAAqB,CAAC;IACnF,cAAc,EAAE,CAAC,mBAAmB,CAAC;IACrC,qBAAqB,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;IAElE,oBAAoB;IACpB,OAAO,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,CAAC;IACjE,YAAY,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,CAAC;IACjF,iBAAiB,EAAE,CAAC,cAAc,EAAE,kBAAkB,EAAE,wBAAwB,CAAC;IACjF,cAAc,EAAE,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,kBAAkB,CAAC;IACvG,iBAAiB,EAAE,CAAC,eAAe,CAAC;IACpC,kBAAkB,EAAE,CAAC,wBAAwB,EAAE,gBAAgB,CAAC;IAChE,mBAAmB,EAAE,EAAE;IACvB,kBAAkB,EAAE,CAAC,cAAc,EAAE,wBAAwB,CAAC;IAC9D,eAAe,EAAE,EAAE;IAEnB,kCAAkC;IAClC,wBAAwB,EAAE,CAAC,OAAO,CAAC;IACnC,uBAAuB,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1C,qBAAqB,EAAE,CAAC,OAAO,CAAC;IAChC,oBAAoB,EAAE,EAAE;IACxB,sBAAsB,EAAE,EAAE;IAC1B,wBAAwB,EAAE,EAAE;IAC5B,kBAAkB,EAAE,CAAC,cAAc,EAAE,SAAS,CAAC;IAE/C,oDAAoD;IACpD,4BAA4B,EAAE,CAAC,wBAAwB,EAAE,2BAA2B,CAAC;IACrF,2BAA2B,EAAE,CAAC,cAAc,CAAC;IAC7C,2BAA2B,EAAE,EAAE;IAC/B,qBAAqB,EAAE,CAAC,0BAA0B,CAAC;IACnD,0BAA0B,EAAE,CAAC,cAAc,CAAC;IAC5C,8BAA8B,EAAE,EAAE;IAElC,sCAAsC;IACtC,cAAc,EAAE,CAAC,qBAAqB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,gBAAgB,CAAC;IAC1G,oBAAoB,EAAE,EAAE;IACxB,eAAe,EAAE,CAAC,eAAe,CAAC;IAClC,gBAAgB,EAAE,EAAE;IACpB,uBAAuB,EAAE,CAAC,cAAc,CAAC;IAEzC,eAAe;IACf,iBAAiB,EAAE;QACjB,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,uBAAuB;QACtG,qCAAqC;QACrC,qBAAqB,EAAE,oBAAoB;QAC3C,mBAAmB,EAAE,oBAAoB,EAAE,uBAAuB;QAClE,yBAAyB,EAAE,0BAA0B,EAAE,0BAA0B;QACjF,iBAAiB;KAClB;IAED,eAAe;IACf,kBAAkB,EAAE;QAClB,sBAAsB,EAAE,wBAAwB,EAAE,oBAAoB;QACtE,uBAAuB,EAAE,yBAAyB;QAClD,0BAA0B;QAC1B,4BAA4B,EAAE,wBAAwB,EAAE,6BAA6B;QACrF,qBAAqB,EAAE,iBAAiB;QACxC,eAAe;QACf,qBAAqB,EAAE,mBAAmB,EAAE,uBAAuB;QACnE,yBAAyB,EAAE,6BAA6B;QACxD,sBAAsB,EAAE,sBAAsB;QAC9C,0BAA0B,EAAE,iCAAiC;QAC7D,4BAA4B;QAC5B,sBAAsB,EAAE,yBAAyB,EAAE,0BAA0B;QAC7E,uBAAuB,EAAE,cAAc,EAAE,sBAAsB;QAC/D,uBAAuB,EAAE,qBAAqB,EAAE,sBAAsB;QACtE,qBAAqB,EAAE,cAAc,EAAE,yBAAyB;QAChE,qBAAqB,EAAE,0BAA0B,EAAE,yBAAyB;QAC5E,wBAAwB,EAAE,kBAAkB,EAAE,qBAAqB;QACnE,yBAAyB,EAAE,sBAAsB,EAAE,iBAAiB;QACpE,iBAAiB;QACjB,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB;QACzD,qBAAqB;QACrB,0BAA0B,EAAE,6BAA6B;QACzD,qBAAqB,EAAE,0BAA0B;QACjD,qBAAqB,EAAE,iBAAiB;QACxC,0BAA0B,EAAE,oBAAoB,EAAE,oBAAoB;QACtE,sCAAsC;QACtC,uBAAuB;QACvB,yBAAyB,EAAE,eAAe;KAC3C;IAED,6BAA6B;IAC7B,mBAAmB,EAAE;QACnB,qBAAqB,EAAE,qBAAqB,EAAE,sBAAsB;QACpE,0BAA0B,EAAE,0BAA0B;QACtD,qBAAqB,EAAE,0BAA0B;KAClD;IAED,6BAA6B;IAC7B,yBAAyB,EAAE;QACzB,qBAAqB,EAAE,0BAA0B;QACjD,qBAAqB,EAAE,iBAAiB;KACzC;IAED,gBAAgB;IAChB,cAAc,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;IACrD,iBAAiB,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IACzD,eAAe,EAAE,CAAC,iBAAiB,CAAC;IAEpC,uBAAuB;IACvB,mBAAmB,EAAE,CAAC,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,eAAe,CAAC;IAE3F,iBAAiB;IACjB,iBAAiB,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IACzD,iBAAiB,EAAE,CAAC,kBAAkB,CAAC;IACvC,kBAAkB,EAAE,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;IAC3D,oBAAoB,EAAE,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;IAE7D,0BAA0B;IAC1B,wBAAwB,EAAE,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;IAChF,qBAAqB,EAAE,CAAC,2BAA2B,EAAE,yBAAyB,CAAC;IAC/E,yBAAyB,EAAE,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;IAE7E,kBAAkB;IAClB,oBAAoB,EAAE,CAAC,cAAc,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,2BAA2B,CAAC;IAChJ,YAAY,EAAE,CAAC,kBAAkB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,cAAc,CAAC;IACpG,YAAY,EAAE,CAAC,kBAAkB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,wBAAwB,CAAC;IAEhI,kCAAkC;IAClC,iBAAiB,EAAE,CAAC,8BAA8B,EAAE,2BAA2B,EAAE,sBAAsB,CAAC;IACxG,gBAAgB,EAAE,CAAC,yBAAyB,EAAE,gBAAgB,EAAE,SAAS,CAAC;IAC1E,kBAAkB,EAAE,CAAC,2BAA2B,EAAE,mBAAmB,CAAC;IAEtE,iBAAiB;IACjB,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;IAEpD,mBAAmB;IACnB,aAAa,EAAE,CAAC,aAAa,CAAC;IAC9B,qBAAqB,EAAE,EAAE;CAC1B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,0BAA0B,CACxC,UAAkB,EAClB,gBAA6B;IAE7B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,YAAY,CAAC,CAAC;IAE9C,sCAAsC;IACtC,MAAM,cAAc,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAC1D,IAAI,cAAc,EAAE,CAAC;QACnB,KAAK,MAAM,CAAC,IAAI,cAAc;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,8DAA8D;IAChE,CAAC;IAED,yCAAyC;IACzC,IAAI,gBAAgB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YAC1D,IAAI,IAAI,CAAC,QAAQ,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC"}
package/dist/types.d.ts CHANGED
@@ -17,6 +17,8 @@ export interface RuntimeConfig {
17
17
  * Without this, only IPFS uploads occur.
18
18
  */
19
19
  privateKey?: string;
20
+ /** Client version string for version gating (e.g., "0.5.99"). Auto-set from package.json. */
21
+ clientVersion?: string;
20
22
  /** How often to send heartbeats in ms (default: 30000) */
21
23
  heartbeatIntervalMs?: number;
22
24
  /** WebSocket reconnect settings */
@@ -28,6 +30,12 @@ export interface RuntimeConfig {
28
30
  /** Max delay in ms (default: 30000) */
29
31
  maxDelayMs?: number;
30
32
  };
33
+ /**
34
+ * Auto-install built-in lifecycle hooks (currently: `chat_turn_complete` →
35
+ * episodic memory write). Default: `true`. Set `false` to opt out and
36
+ * register custom listeners on `runtime.hooks` directly.
37
+ */
38
+ autoInstallHooks?: boolean;
31
39
  }
32
40
  /** Connection state of the runtime client. */
33
41
  export type ConnectionState = "disconnected" | "connecting" | "connected" | "reconnecting";
@@ -388,10 +396,26 @@ export interface InferenceOptions {
388
396
  /** Optional provider-specific parameters (e.g. Venice venice_parameters). */
389
397
  providerParams?: Record<string, unknown>;
390
398
  }
399
+ /**
400
+ * Structured tool invocation produced by an assistant message.
401
+ * Optional — most existing callers serialize tool calls inline as text.
402
+ * `CompactionMemory` uses these to detect Unit-B turn boundaries (an
403
+ * assistant turn isn't closed until every tool call has a matching
404
+ * `role: "tool"` reply).
405
+ */
406
+ export interface ToolCall {
407
+ id: string;
408
+ name: string;
409
+ arguments: Record<string, unknown>;
410
+ }
391
411
  /** A message in an inference conversation. */
392
412
  export interface InferenceMessage {
393
- role: "user" | "assistant" | "system";
413
+ role: "user" | "assistant" | "system" | "tool";
394
414
  content: string;
415
+ /** Tool calls emitted by an assistant message. */
416
+ toolCalls?: ToolCall[];
417
+ /** When `role === "tool"`, the call id this message answers. */
418
+ toolCallId?: string;
395
419
  }
396
420
  /** Inference response. */
397
421
  export interface InferenceResult {