@theokit/agents 9.3.0 → 10.0.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/session.js CHANGED
@@ -1,3 +1,6 @@
1
+ import {
2
+ ensureSecureDir
3
+ } from "./chunk-QXGSF6WX.js";
1
4
  import {
2
5
  __name
3
6
  } from "./chunk-Z4QWC7IK.js";
@@ -5,24 +8,62 @@ import {
5
8
  // src/session/session-lifecycle.ts
6
9
  import { readFileSync as readFileSync3, readdirSync, rmSync, statSync } from "fs";
7
10
  import { join as join3 } from "path";
8
- import { TheokitAgentError } from "@theokit/sdk/errors";
11
+ import { TheokitAgentError as TheokitAgentError2 } from "@theokit/sdk/errors";
9
12
  import { classifySessionArtifact, forkTranscript, loadJsonl, sessionHasWriter, transcriptPath, transcriptRoot as transcriptRoot3 } from "@theokit/sdk/persistence";
10
13
 
14
+ // src/session/gc/registry-remover.ts
15
+ import { TheokitAgentError } from "@theokit/sdk/errors";
16
+ var SessionRegistryRemoverError = class extends TheokitAgentError {
17
+ static {
18
+ __name(this, "SessionRegistryRemoverError");
19
+ }
20
+ name = "SessionRegistryRemoverError";
21
+ sessionId;
22
+ constructor(sessionId, timeoutMs) {
23
+ super(`[@theokit/agents] the registry remover for session "${sessionId}" timed out: it did not settle within ${String(timeoutMs)}ms. The transcript was left on disk \u2014 an orphan file is collected by the next sweep, while a registry entry pointing at a deleted transcript is repaired by nothing, because GC works from transcripts.`);
24
+ this.sessionId = sessionId;
25
+ }
26
+ };
27
+ var DEFAULT_REGISTRY_TIMEOUT_MS = 3e4;
28
+ function isThenable(value) {
29
+ return typeof value?.then === "function";
30
+ }
31
+ __name(isThenable, "isThenable");
32
+ async function awaitRegistryRemoval(outcome, sessionId, timeoutMs = DEFAULT_REGISTRY_TIMEOUT_MS) {
33
+ if (!isThenable(outcome) || !Number.isFinite(timeoutMs)) return outcome;
34
+ let timer;
35
+ try {
36
+ return await Promise.race([
37
+ outcome,
38
+ new Promise((_resolve, reject) => {
39
+ timer = setTimeout(() => {
40
+ reject(new SessionRegistryRemoverError(sessionId, timeoutMs));
41
+ }, timeoutMs);
42
+ })
43
+ ]);
44
+ } finally {
45
+ if (timer !== void 0) clearTimeout(timer);
46
+ }
47
+ }
48
+ __name(awaitRegistryRemoval, "awaitRegistryRemoval");
49
+
11
50
  // src/session/project-index.ts
12
- import { mkdirSync, readFileSync, writeFileSync } from "fs";
13
- import { dirname, join } from "path";
51
+ import { readFileSync, writeFileSync } from "fs";
52
+ import { join } from "path";
14
53
  import { encodeProjectDir, transcriptRoot } from "@theokit/sdk/persistence";
15
54
  var CWD_SIDECAR = "cwd";
55
+ function projectsRoot(root = transcriptRoot()) {
56
+ return join(root, "projects");
57
+ }
58
+ __name(projectsRoot, "projectsRoot");
16
59
  function projectDirFor(cwd, root = transcriptRoot()) {
17
- return join(root, "projects", encodeProjectDir(cwd));
60
+ return join(projectsRoot(root), encodeProjectDir(cwd));
18
61
  }
19
62
  __name(projectDirFor, "projectDirFor");
20
63
  function recordProjectDir(cwd, root = transcriptRoot()) {
21
64
  const sidecar = join(projectDirFor(cwd, root), CWD_SIDECAR);
22
65
  try {
23
- mkdirSync(dirname(sidecar), {
24
- recursive: true
25
- });
66
+ ensureSecureDir(sidecar);
26
67
  writeFileSync(sidecar, `${cwd}
27
68
  `, "utf8");
28
69
  } catch {
@@ -31,7 +72,7 @@ function recordProjectDir(cwd, root = transcriptRoot()) {
31
72
  __name(recordProjectDir, "recordProjectDir");
32
73
  function resolveProjectDir(encodedName, root = transcriptRoot()) {
33
74
  try {
34
- const raw = readFileSync(join(root, "projects", encodedName, CWD_SIDECAR), "utf8");
75
+ const raw = readFileSync(join(projectsRoot(root), encodedName, CWD_SIDECAR), "utf8");
35
76
  const cwd = raw.trim();
36
77
  return cwd.length > 0 ? cwd : void 0;
37
78
  } catch {
@@ -46,9 +87,7 @@ __name(projectDirMatches, "projectDirMatches");
46
87
 
47
88
  // src/session/session-pointer.ts
48
89
  import { readFileSync as readFileSync2 } from "fs";
49
- import { mkdirSync as mkdirSync2 } from "fs";
50
90
  import { join as join2 } from "path";
51
- import { dirname as dirname2 } from "path";
52
91
  import { atomicWriteText, transcriptRoot as transcriptRoot2 } from "@theokit/sdk/persistence";
53
92
  var POINTER = "last-session";
54
93
  function sessionPointerPath(cwd, root = transcriptRoot2()) {
@@ -73,9 +112,7 @@ __name(loadOrCreateSessionId, "loadOrCreateSessionId");
73
112
  async function persistSessionId(cwd, sessionId, root = transcriptRoot2()) {
74
113
  const target = sessionPointerPath(cwd, root);
75
114
  try {
76
- mkdirSync2(dirname2(target), {
77
- recursive: true
78
- });
115
+ ensureSecureDir(target);
79
116
  await atomicWriteText(target, `${sessionId}
80
117
  `);
81
118
  return {
@@ -90,15 +127,16 @@ async function persistSessionId(cwd, sessionId, root = transcriptRoot2()) {
90
127
  __name(persistSessionId, "persistSessionId");
91
128
 
92
129
  // src/session/session-lifecycle.ts
93
- var SessionInUseError = class extends TheokitAgentError {
130
+ var SessionInUseError = class extends TheokitAgentError2 {
94
131
  static {
95
132
  __name(this, "SessionInUseError");
96
133
  }
97
134
  sessionId;
98
135
  reason;
136
+ registryRemoved;
99
137
  name = "SessionInUseError";
100
- constructor(sessionId, reason) {
101
- super(`session "${sessionId}" is protected (${reason}). Deleting it would discard state something is still using. Stop the run, or pass { force: true } to delete anyway.`), this.sessionId = sessionId, this.reason = reason;
138
+ constructor(sessionId, reason, registryRemoved = false) {
139
+ super(`session "${sessionId}" is protected (${reason}). Deleting it would discard state something is still using. Stop the run, or pass { force: true } to delete anyway.` + (registryRemoved ? ` The registry entry was already removed before this was noticed \u2014 do not retry that half, only the transcript.` : "")), this.sessionId = sessionId, this.reason = reason, this.registryRemoved = registryRemoved;
102
140
  }
103
141
  };
104
142
  function listSessions(cwd, root = transcriptRoot3()) {
@@ -156,12 +194,32 @@ function readPointer(cwd, root) {
156
194
  }
157
195
  }
158
196
  __name(readPointer, "readPointer");
159
- function deleteSession(sessionId, options) {
197
+ async function deleteSession(sessionId, options) {
160
198
  const root = options.root ?? transcriptRoot3();
161
199
  if (options.force !== true) {
162
200
  const reason = protectedTranscripts(options.cwd, root).get(sessionId);
163
201
  if (reason !== void 0) throw new SessionInUseError(sessionId, reason);
164
202
  }
203
+ let registryRemoved = false;
204
+ let registryError;
205
+ if (options.removeFromRegistry !== void 0) {
206
+ try {
207
+ const outcome = await awaitRegistryRemoval(options.removeFromRegistry(sessionId), sessionId, options.registryTimeoutMs);
208
+ registryRemoved = outcome !== false;
209
+ } catch (error) {
210
+ return {
211
+ registryRemoved: false,
212
+ transcriptRemoved: false,
213
+ registryError: error
214
+ };
215
+ }
216
+ }
217
+ if (options.force !== true) {
218
+ const nowProtected = protectedTranscripts(options.cwd, root).get(sessionId);
219
+ if (nowProtected !== void 0) {
220
+ throw new SessionInUseError(sessionId, nowProtected, registryRemoved);
221
+ }
222
+ }
165
223
  let transcriptRemoved = false;
166
224
  try {
167
225
  rmSync(transcriptPath(root, options.cwd, sessionId));
@@ -169,58 +227,82 @@ function deleteSession(sessionId, options) {
169
227
  } catch {
170
228
  }
171
229
  return {
172
- registryRemoved: options.removeFromRegistry?.(sessionId) ?? false,
173
- transcriptRemoved
230
+ registryRemoved,
231
+ transcriptRemoved,
232
+ registryError
174
233
  };
175
234
  }
176
235
  __name(deleteSession, "deleteSession");
177
236
  function forkBeforeUserTurn(srcId, newId, nth, options) {
178
237
  if (!Number.isInteger(nth) || nth < 1) {
179
- throw new TheokitAgentError(`forkBeforeUserTurn: \`nth\` counts user turns from 1, received ${String(nth)}.`);
238
+ throw new TheokitAgentError2(`forkBeforeUserTurn: \`nth\` counts user turns from 1, received ${String(nth)}.`);
180
239
  }
181
240
  if (srcId === newId) {
182
- throw new TheokitAgentError(`forkBeforeUserTurn: srcId and newId must differ \u2014 forking "${srcId}" onto itself would truncate the source transcript in place.`);
241
+ throw new TheokitAgentError2(`forkBeforeUserTurn: srcId and newId must differ \u2014 forking "${srcId}" onto itself would truncate the source transcript in place.`);
183
242
  }
184
243
  const root = options.root ?? transcriptRoot3();
185
244
  const src = transcriptPath(root, options.cwd, srcId);
186
245
  const dst = transcriptPath(root, options.cwd, newId);
187
- const recordIndex = recordIndexOfUserTurn(src, nth);
188
- if (recordIndex === void 0) {
189
- throw new TheokitAgentError(`forkBeforeUserTurn: session "${srcId}" has fewer than ${String(nth)} user turns.`);
246
+ const turns = reachableUserTurns(src);
247
+ if (nth > turns.length) {
248
+ throw new TheokitAgentError2(`forkBeforeUserTurn: session "${srcId}" has ${String(turns.length)} reachable user turn(s), so turn ${String(nth)} does not exist. "Reachable" excludes tool results, goal continuations, and anything before the last compaction boundary \u2014 those are records the user did not type or can no longer see.`);
190
249
  }
250
+ const selected = turns[nth - 1];
191
251
  forkTranscript(src, dst, {
192
- beforeRecordIndex: recordIndex,
252
+ beforeRecordIndex: selected.index,
193
253
  liveSessionPaths: [
194
254
  ...protectedTranscripts(options.cwd, root).keys()
195
255
  ].map((id) => transcriptPath(root, options.cwd, id))
196
256
  });
197
257
  return {
198
258
  transcript: dst,
199
- recordIndex
259
+ recordIndex: selected.index,
260
+ selectedText: selected.text
200
261
  };
201
262
  }
202
263
  __name(forkBeforeUserTurn, "forkBeforeUserTurn");
203
- function recordIndexOfUserTurn(src, nth) {
264
+ var GOAL_CONTINUATION_MARKER = "[[theokit:goal-continuation]]";
265
+ function textOfRecord(record) {
266
+ return (record.message?.content ?? []).filter((block) => block.type === "text").map((block) => block.text ?? "").join("");
267
+ }
268
+ __name(textOfRecord, "textOfRecord");
269
+ function isGenuineUserTurn(record) {
270
+ if (record.type !== "user") return false;
271
+ const text = textOfRecord(record);
272
+ if (text.length === 0) return false;
273
+ return !text.startsWith(GOAL_CONTINUATION_MARKER);
274
+ }
275
+ __name(isGenuineUserTurn, "isGenuineUserTurn");
276
+ function reachableUserTurns(src) {
204
277
  const records = loadJsonl(src);
205
- let seen = 0;
206
- for (const [index, record] of records.entries()) {
207
- if (record.type !== "user") continue;
208
- seen += 1;
209
- if (seen === nth) return index;
278
+ let floor = -1;
279
+ for (let i = records.length - 1; i >= 0; i -= 1) {
280
+ if (records[i]?.type === "system" && records[i]?.subtype === "compact_boundary") {
281
+ floor = i;
282
+ break;
283
+ }
210
284
  }
211
- return void 0;
285
+ const turns = [];
286
+ for (let i = floor + 1; i < records.length; i += 1) {
287
+ const record = records[i];
288
+ if (isGenuineUserTurn(record)) turns.push({
289
+ index: i,
290
+ text: textOfRecord(record)
291
+ });
292
+ }
293
+ return turns;
212
294
  }
213
- __name(recordIndexOfUserTurn, "recordIndexOfUserTurn");
295
+ __name(reachableUserTurns, "reachableUserTurns");
214
296
 
215
297
  // src/session/gc/transcript-gc.ts
216
298
  import { rmSync as rmSync2 } from "fs";
217
- import { TheokitAgentError as TheokitAgentError2 } from "@theokit/sdk/errors";
299
+ import { TheokitAgentError as TheokitAgentError3 } from "@theokit/sdk/errors";
218
300
  import { transcriptPath as transcriptPath2, transcriptRoot as transcriptRoot4 } from "@theokit/sdk/persistence";
219
301
  var FLOOR = {
220
302
  keepLast: 1,
221
303
  maxAgeDays: 1
222
304
  };
223
- var GCProtectionUnavailableError = class extends TheokitAgentError2 {
305
+ var GCProtectionUnavailableError = class extends TheokitAgentError3 {
224
306
  static {
225
307
  __name(this, "GCProtectionUnavailableError");
226
308
  }
@@ -234,7 +316,7 @@ var GCProtectionUnavailableError = class extends TheokitAgentError2 {
234
316
  }), this.reason = reason;
235
317
  }
236
318
  };
237
- var GCFloorError = class extends TheokitAgentError2 {
319
+ var GCFloorError = class extends TheokitAgentError3 {
238
320
  static {
239
321
  __name(this, "GCFloorError");
240
322
  }
@@ -317,7 +399,7 @@ function planTranscriptGC(options) {
317
399
  };
318
400
  }
319
401
  __name(planTranscriptGC, "planTranscriptGC");
320
- function runTranscriptGC(plan, options) {
402
+ async function runTranscriptGC(plan, options) {
321
403
  const removed = [];
322
404
  const errors = [];
323
405
  const protectedNow = options.apply ? resolveProtection(protectedTranscripts(plan.cwd, plan.root), options.protectedIds) : /* @__PURE__ */ new Map();
@@ -327,6 +409,17 @@ function runTranscriptGC(plan, options) {
327
409
  removed.push(candidate.id);
328
410
  continue;
329
411
  }
412
+ if (options.removeFromRegistry !== void 0) {
413
+ try {
414
+ await awaitRegistryRemoval(options.removeFromRegistry(candidate.id), candidate.id, options.registryTimeoutMs);
415
+ } catch (error) {
416
+ errors.push({
417
+ id: candidate.id,
418
+ message: `registry removal failed, transcript kept: ${error.message}`
419
+ });
420
+ continue;
421
+ }
422
+ }
330
423
  try {
331
424
  rmSync2(transcriptPath2(plan.root, plan.cwd, candidate.id));
332
425
  removed.push(candidate.id);
@@ -348,10 +441,204 @@ function runTranscriptGC(plan, options) {
348
441
  };
349
442
  }
350
443
  __name(runTranscriptGC, "runTranscriptGC");
444
+
445
+ // src/session/transcript-root-hint.ts
446
+ import { readdirSync as readdirSync2 } from "fs";
447
+ function transcriptRootHint(found, previousRoot, env = process.env) {
448
+ if (found > 0) return void 0;
449
+ const current = env.THEOKIT_HOME?.trim();
450
+ if (current === void 0 || current.length === 0) return void 0;
451
+ if (current === previousRoot) return void 0;
452
+ let projects;
453
+ try {
454
+ projects = readdirSync2(projectsRoot(previousRoot));
455
+ } catch {
456
+ return void 0;
457
+ }
458
+ if (projects.length === 0) return void 0;
459
+ return `No sessions under ${current} (THEOKIT_HOME). ${String(projects.length)} project(s) with sessions remain under the previous root ${previousRoot} \u2014 unset THEOKIT_HOME to see them again, or move the contents across.`;
460
+ }
461
+ __name(transcriptRootHint, "transcriptRootHint");
462
+
463
+ // src/session/liveness-oracle.ts
464
+ import { TheokitAgentError as TheokitAgentError4 } from "@theokit/sdk/errors";
465
+ var DEFAULT_TRANSCRIPT_SAMPLES = 3;
466
+ function encodeProjectDir2(cwd) {
467
+ return cwd.replace(/[^a-zA-Z0-9]/g, "-");
468
+ }
469
+ __name(encodeProjectDir2, "encodeProjectDir");
470
+ var LivenessBudgetError = class extends TheokitAgentError4 {
471
+ static {
472
+ __name(this, "LivenessBudgetError");
473
+ }
474
+ constructor(budget) {
475
+ super(`refusing to classify projects with budget ${String(budget)}: it must be a non-negative integer. The bound is spent with \`remaining -= 1\`, and on a non-finite value that subtraction never reaches zero \u2014 so every \`remaining <= 0\` guard becomes a no-op and the sweep is unbounded, which is the ~64M-syscall run this module exists to prevent. Pass a real ceiling (at the measured 2.54 ops/project, a tree of N projects wants >= 3N); \`0\` is valid and means "spend nothing", yielding \`undetermined\` for every project.`);
476
+ }
477
+ };
478
+ function assertUsableBudget(budget) {
479
+ if (!Number.isInteger(budget) || budget < 0) throw new LivenessBudgetError(budget);
480
+ }
481
+ __name(assertUsableBudget, "assertUsableBudget");
482
+ function verdictFromRecordedCwds(cwds, probe, budgetLeft) {
483
+ let unprobeable;
484
+ for (const cwd of cwds) {
485
+ if (!budgetLeft()) {
486
+ unprobeable ??= "search budget exhausted";
487
+ break;
488
+ }
489
+ const at = probe(cwd);
490
+ if ("error" in at) {
491
+ unprobeable ??= `could not stat ${cwd}: ${at.error}`;
492
+ continue;
493
+ }
494
+ if (at.found) return {
495
+ liveness: "alive",
496
+ reason: `recorded cwd ${cwd} exists`
497
+ };
498
+ }
499
+ return unprobeable !== void 0 ? {
500
+ liveness: "undetermined",
501
+ reason: unprobeable
502
+ } : {
503
+ liveness: "dead",
504
+ reason: `every recorded cwd is gone (${cwds.join(", ")})`
505
+ };
506
+ }
507
+ __name(verdictFromRecordedCwds, "verdictFromRecordedCwds");
508
+ function classifyProjects(encoded, opts) {
509
+ assertUsableBudget(opts.budget);
510
+ const out = /* @__PURE__ */ new Map();
511
+ let remaining = opts.budget;
512
+ const probe = /* @__PURE__ */ __name((path) => {
513
+ remaining -= 1;
514
+ try {
515
+ const answer = opts.fs.exists(path);
516
+ return answer === void 0 ? {
517
+ error: `could not determine whether ${path} exists`
518
+ } : {
519
+ found: answer
520
+ };
521
+ } catch (error) {
522
+ return {
523
+ error: error instanceof Error ? error.message : String(error)
524
+ };
525
+ }
526
+ }, "probe");
527
+ const recordedCwd = /* @__PURE__ */ __name((name) => {
528
+ const dir = `${opts.projectsRoot}/${name}`;
529
+ let entries;
530
+ remaining -= 1;
531
+ try {
532
+ entries = opts.fs.listEntries(dir);
533
+ } catch (error) {
534
+ return {
535
+ kind: "unreadable",
536
+ error: error instanceof Error ? error.message : String(error)
537
+ };
538
+ }
539
+ const samples = opts.transcriptSamples ?? DEFAULT_TRANSCRIPT_SAMPLES;
540
+ const cwds = [];
541
+ for (const file of entries.filter((f) => f.endsWith(".jsonl")).slice(0, samples)) {
542
+ if (remaining <= 0) break;
543
+ remaining -= 1;
544
+ let record;
545
+ try {
546
+ record = JSON.parse(opts.fs.firstLine(`${dir}/${file}`));
547
+ } catch {
548
+ continue;
549
+ }
550
+ const cwd = record?.cwd;
551
+ if (typeof cwd !== "string" || cwd.length === 0) continue;
552
+ if (encodeProjectDir2(cwd) === name && !cwds.includes(cwd)) cwds.push(cwd);
553
+ }
554
+ return cwds.length > 0 ? {
555
+ kind: "found",
556
+ cwds
557
+ } : {
558
+ kind: "absent"
559
+ };
560
+ }, "recordedCwd");
561
+ let candidates;
562
+ let enumerationError;
563
+ const enumerate = /* @__PURE__ */ __name(() => {
564
+ if (candidates === void 0 && enumerationError === void 0) {
565
+ try {
566
+ candidates = opts.candidatePaths();
567
+ } catch (error) {
568
+ enumerationError = `could not enumerate candidate projects: ${String(error)}`;
569
+ candidates = [];
570
+ }
571
+ }
572
+ return candidates ?? [];
573
+ }, "enumerate");
574
+ const searchPool = /* @__PURE__ */ __name((name, pool) => {
575
+ const seen = /* @__PURE__ */ new Set();
576
+ for (const candidate of pool) {
577
+ if (remaining <= 0) return {
578
+ liveness: "undetermined",
579
+ reason: "search budget exhausted"
580
+ };
581
+ if (seen.has(candidate)) continue;
582
+ seen.add(candidate);
583
+ if (encodeProjectDir2(candidate) !== name) continue;
584
+ const hit = probe(candidate);
585
+ if ("error" in hit) {
586
+ return {
587
+ liveness: "undetermined",
588
+ reason: `could not stat ${candidate}: ${hit.error}`
589
+ };
590
+ }
591
+ if (hit.found) {
592
+ return {
593
+ liveness: "alive",
594
+ reason: `found by search at ${candidate}`
595
+ };
596
+ }
597
+ }
598
+ return remaining <= 0 ? {
599
+ liveness: "undetermined",
600
+ reason: "search budget exhausted"
601
+ } : {
602
+ liveness: "undetermined",
603
+ reason: "no candidate path matched, and the candidate pool is not exhaustive"
604
+ };
605
+ }, "searchPool");
606
+ for (const name of encoded) {
607
+ if (remaining <= 0) {
608
+ out.set(name, {
609
+ liveness: "undetermined",
610
+ reason: "search budget exhausted"
611
+ });
612
+ continue;
613
+ }
614
+ const recorded = recordedCwd(name);
615
+ if (recorded.kind === "unreadable") {
616
+ out.set(name, {
617
+ liveness: "undetermined",
618
+ reason: `could not read ${opts.projectsRoot}/${name}: ${recorded.error}`
619
+ });
620
+ continue;
621
+ }
622
+ if (recorded.kind === "found") {
623
+ out.set(name, verdictFromRecordedCwds(recorded.cwds, probe, () => remaining > 0));
624
+ continue;
625
+ }
626
+ const pool = enumerate();
627
+ out.set(name, enumerationError === void 0 ? searchPool(name, pool) : {
628
+ liveness: "undetermined",
629
+ reason: enumerationError
630
+ });
631
+ }
632
+ return out;
633
+ }
634
+ __name(classifyProjects, "classifyProjects");
351
635
  export {
352
636
  GCFloorError,
353
637
  GCProtectionUnavailableError,
638
+ LivenessBudgetError,
354
639
  SessionInUseError,
640
+ SessionRegistryRemoverError,
641
+ classifyProjects,
355
642
  deleteSession,
356
643
  forkBeforeUserTurn,
357
644
  listSessions,
@@ -360,10 +647,12 @@ export {
360
647
  planTranscriptGC,
361
648
  projectDirFor,
362
649
  projectDirMatches,
650
+ projectsRoot,
363
651
  protectedTranscripts,
364
652
  recordProjectDir,
365
653
  resolveProjectDir,
366
654
  runTranscriptGC,
367
- sessionPointerPath
655
+ sessionPointerPath,
656
+ transcriptRootHint
368
657
  };
369
658
  //# sourceMappingURL=session.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/session/session-lifecycle.ts","../src/session/project-index.ts","../src/session/session-pointer.ts","../src/session/gc/transcript-gc.ts"],"mappings":"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","names":["readFileSync","readdirSync","rmSync","statSync","join","TheokitAgentError","classifySessionArtifact","forkTranscript","loadJsonl","sessionHasWriter","transcriptPath","transcriptRoot","mkdirSync","readFileSync","writeFileSync","dirname","join","encodeProjectDir","transcriptRoot","CWD_SIDECAR","projectDirFor","cwd","root","transcriptRoot","join","encodeProjectDir","recordProjectDir","sidecar","mkdirSync","dirname","recursive","writeFileSync","resolveProjectDir","encodedName","raw","readFileSync","trim","length","undefined","projectDirMatches","readFileSync","mkdirSync","join","dirname","atomicWriteText","transcriptRoot","POINTER","sessionPointerPath","cwd","root","transcriptRoot","join","projectDirFor","loadOrCreateSessionId","mintId","existing","readFileSync","trim","length","sessionId","resumed","persistSessionId","target","mkdirSync","dirname","recursive","atomicWriteText","persisted","SessionInUseError","TheokitAgentError","name","sessionId","reason","listSessions","cwd","root","transcriptRoot","dir","projectDirFor","entries","readdirSync","found","entry","path","join","isDirectory","modifiedAt","stats","statSync","mtime","kind","classifySessionArtifact","push","id","replace","transcript","sort","a","b","getTime","protectedTranscripts","protectedBy","Map","sessions","pointer","readPointer","undefined","set","length","has","session","hasWriter","sessionHasWriter","readFileSync","sessionPointerPath","trim","deleteSession","options","force","get","transcriptRemoved","rmSync","transcriptPath","registryRemoved","removeFromRegistry","forkBeforeUserTurn","srcId","newId","nth","Number","isInteger","String","src","dst","recordIndex","recordIndexOfUserTurn","forkTranscript","beforeRecordIndex","liveSessionPaths","keys","map","records","loadJsonl","seen","index","record","type","rmSync","TheokitAgentError","transcriptPath","transcriptRoot","FLOOR","keepLast","maxAgeDays","GCProtectionUnavailableError","TheokitAgentError","name","reason","Error","message","String","code","isRetryable","cause","GCFloorError","field","received","resolveProtection","builtin","provider","undefined","extra","union","Map","id","set","planTranscriptGC","options","Number","isFinite","root","transcriptRoot","now","Date","cutoff","sessions","listSessions","cwd","protectedBy","protectedTranscripts","protectedIds","candidates","kept","index","session","entries","protection","get","push","age","modifiedAt","getTime","isNaN","transcript","runTranscriptGC","plan","removed","errors","protectedNow","apply","candidate","has","rmSync","transcriptPath","error","dryRun"]}
1
+ {"version":3,"sources":["../src/session/session-lifecycle.ts","../src/session/gc/registry-remover.ts","../src/session/project-index.ts","../src/session/session-pointer.ts","../src/session/gc/transcript-gc.ts","../src/session/transcript-root-hint.ts","../src/session/liveness-oracle.ts"],"mappings":"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","names":["readFileSync","readdirSync","rmSync","statSync","join","TheokitAgentError","classifySessionArtifact","forkTranscript","loadJsonl","sessionHasWriter","transcriptPath","transcriptRoot","TheokitAgentError","SessionRegistryRemoverError","TheokitAgentError","name","sessionId","timeoutMs","String","DEFAULT_REGISTRY_TIMEOUT_MS","isThenable","value","then","awaitRegistryRemoval","outcome","Number","isFinite","timer","Promise","race","_resolve","reject","setTimeout","undefined","clearTimeout","readFileSync","writeFileSync","join","encodeProjectDir","transcriptRoot","CWD_SIDECAR","projectsRoot","root","transcriptRoot","join","projectDirFor","cwd","encodeProjectDir","recordProjectDir","sidecar","ensureSecureDir","writeFileSync","resolveProjectDir","encodedName","raw","readFileSync","trim","length","undefined","projectDirMatches","readFileSync","join","atomicWriteText","transcriptRoot","POINTER","sessionPointerPath","cwd","root","transcriptRoot","join","projectDirFor","loadOrCreateSessionId","mintId","existing","readFileSync","trim","length","sessionId","resumed","persistSessionId","target","ensureSecureDir","atomicWriteText","persisted","SessionInUseError","TheokitAgentError","name","sessionId","reason","registryRemoved","listSessions","cwd","root","transcriptRoot","dir","projectDirFor","entries","readdirSync","found","entry","path","join","isDirectory","modifiedAt","stats","statSync","mtime","kind","classifySessionArtifact","push","id","replace","transcript","sort","a","b","getTime","protectedTranscripts","protectedBy","Map","sessions","pointer","readPointer","undefined","set","length","has","session","hasWriter","sessionHasWriter","readFileSync","sessionPointerPath","trim","deleteSession","options","force","get","registryError","removeFromRegistry","outcome","awaitRegistryRemoval","registryTimeoutMs","error","transcriptRemoved","nowProtected","rmSync","transcriptPath","forkBeforeUserTurn","srcId","newId","nth","Number","isInteger","String","src","dst","turns","reachableUserTurns","selected","forkTranscript","beforeRecordIndex","index","liveSessionPaths","keys","map","recordIndex","selectedText","text","GOAL_CONTINUATION_MARKER","textOfRecord","record","message","content","filter","block","type","isGenuineUserTurn","startsWith","records","loadJsonl","floor","i","subtype","rmSync","TheokitAgentError","transcriptPath","transcriptRoot","FLOOR","keepLast","maxAgeDays","GCProtectionUnavailableError","TheokitAgentError","name","reason","Error","message","String","code","isRetryable","cause","GCFloorError","field","received","resolveProtection","builtin","provider","undefined","extra","union","Map","id","set","planTranscriptGC","options","Number","isFinite","root","transcriptRoot","now","Date","cutoff","sessions","listSessions","cwd","protectedBy","protectedTranscripts","protectedIds","candidates","kept","index","session","entries","protection","get","push","age","modifiedAt","getTime","isNaN","transcript","runTranscriptGC","plan","removed","errors","protectedNow","apply","candidate","has","removeFromRegistry","awaitRegistryRemoval","registryTimeoutMs","error","rmSync","transcriptPath","dryRun","readdirSync","transcriptRootHint","found","previousRoot","env","process","undefined","current","THEOKIT_HOME","trim","length","projects","readdirSync","projectsRoot","String","TheokitAgentError","DEFAULT_TRANSCRIPT_SAMPLES","encodeProjectDir","cwd","replace","LivenessBudgetError","TheokitAgentError","budget","String","assertUsableBudget","Number","isInteger","verdictFromRecordedCwds","cwds","probe","budgetLeft","unprobeable","at","error","found","liveness","reason","undefined","join","classifyProjects","encoded","opts","out","Map","remaining","path","answer","fs","exists","Error","message","recordedCwd","name","dir","projectsRoot","entries","listEntries","kind","samples","transcriptSamples","file","filter","f","endsWith","slice","record","JSON","parse","firstLine","length","includes","push","candidates","enumerationError","enumerate","candidatePaths","searchPool","pool","seen","Set","candidate","has","add","hit","set","recorded"]}
package/dist/testing.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import { AgentOutputEvent } from '@theokit/presenter';
2
2
  import { WireChunk } from '@theokit/presenter/wire';
3
- import { A as AgentDefinition } from './define-agent-3Kuf6iKM.js';
3
+ import { A as AgentDefinition } from './define-agent-BO5QSjV8.js';
4
4
  import '@theokit/sdk';
5
5
  import 'zod';
6
+ import './agent-compiler-CIPQkehU.js';
6
7
  import '@theokit/sdk/errors';
7
8
  import './hook-handlers-Cw2FsnE5.js';
8
9
 
package/dist/tools.d.ts CHANGED
@@ -1 +1,55 @@
1
1
  export { CatastrophicCommandError, CommandPolicy, ContextMatchError, ContextMatchReason, CreateApplyPatchToolOptions, CreateBraveWebSearchAdapterOptions, CreateCurrentTimeToolOptions, CreateEditFileToolOptions, CreateGenericHttpSearchAdapterOptions, CreateGitDiffToolOptions, CreateGitStatusToolOptions, CreateGlobToolOptions, CreateInteractiveShellToolOptions, CreateListDirToolOptions, CreateReadFileToolOptions, CreateRunVitestToolOptions, CreateSearchTextToolOptions, CreateShellToolOptions, CreateWebFetchToolOptions, CreateWebSearchToolOptions, CreateWriteFileToolOptions, DEFAULT_TOOL_GUIDANCE, EnvContextOptions, PlanModeTool, PlanModeToolOptions, PlanModeToolWithStore, PlanNode, QuestionTool, QuestionToolOptions, ReadTracker, ReasoningTools, RedirectBlockedError, RepoMapOptions, ResolveAndScreenOptions, ScreenedFetchOptions, SessionArtifactStore, SessionArtifactStoreOptions, SsrfBlockedError, TodoItem, TodolistTool, ToolGuidanceMap, TruncationMode, TruncationOptions, TruncationResult, VitestSummary, WebSearchCallback, WebSearchResult, buildEnvContext, buildRepoMap, catastrophicShellReason, commandDenialReason, createApplyPatchTool, createBraveWebSearchAdapter, createCurrentTimeTool, createEditFileTool, createGenericHttpSearchAdapter, createGitDiffTool, createGitStatusTool, createGlobTool, createInteractiveShellTool, createListDirTool, createPlanModeTool, createQuestionTool, createReadFileTool, createRunVitestTool, createSearchTextTool, createSessionArtifactStore, createShellTool, createTodolistTool, createUpdatePlanTool, createWebFetchTool, createWebSearchTool, createWriteFileTool, createWriteStdinTool, denyCatastrophicCommands, formatCode, formatDiff, formatError, formatFileList, injectGuidance, isBlockedIp, isCommandAllowed, renderToolList, replaceUnique, resolveAndScreen, screenedFetch, todoItemsToPlanNodes, truncateOutput, withDefaultGuidance, withDescription, withName, withShellExitGuidance, withToolResultGuidance } from '@theokit/sdk-tools';
2
+ import * as _theokit_sdk from '@theokit/sdk';
3
+ import { TheokitAgentError } from '@theokit/sdk/errors';
4
+ import { D as DelegationTarget, a as DelegateOptions } from './delegation-scoring-CDvtrYKd.js';
5
+ import '@theokit/sdk/retry';
6
+ import './agent-compiler-CIPQkehU.js';
7
+ import 'zod';
8
+ import './hook-handlers-Cw2FsnE5.js';
9
+
10
+ /**
11
+ * A roster misconfiguration — always raised at factory time, never at the model's first call.
12
+ *
13
+ * The distinction is the point. `delegate()` refuses an empty `apiKey` deep in its own call stack,
14
+ * so a factory that forwards `{}` fails only when the model first reaches for the tool — by which
15
+ * point the failure is a tool error the model will try to reason about, rather than a startup error
16
+ * a human can read.
17
+ */
18
+ declare class DelegateToolConfigError extends TheokitAgentError {
19
+ readonly code: 'empty_roster' | 'duplicate_name' | 'missing_api_key' | 'unknown_agent';
20
+ readonly name = "DelegateToolConfigError";
21
+ constructor(message: string, code: 'empty_roster' | 'duplicate_name' | 'missing_api_key' | 'unknown_agent');
22
+ }
23
+ /**
24
+ * One delegation target, named.
25
+ *
26
+ * The name is carried here rather than read off the target because `DelegationPort` is `{run}` and
27
+ * has no name to read — pairing them keeps a type guard out of every use site.
28
+ */
29
+ interface DelegateRosterEntry {
30
+ readonly name: string;
31
+ readonly target: DelegationTarget;
32
+ }
33
+ interface CreateDelegateToolOptions {
34
+ /** Who the agent may delegate to. Must be non-empty and free of duplicate names. */
35
+ readonly roster: readonly DelegateRosterEntry[];
36
+ /** Forwarded to `delegate()` verbatim. `apiKey` is required when any target is a `SubAgentSpec`. */
37
+ readonly defaults?: DelegateOptions;
38
+ /** Defaults to `delegate`. Override when an app already exposes a tool by that name. */
39
+ readonly name?: string;
40
+ /** Defaults to a description naming the roster. Override to describe the roster's semantics. */
41
+ readonly description?: string;
42
+ }
43
+ /**
44
+ * Build a tool that lets the agent delegate a task to one of `roster`.
45
+ *
46
+ * Recursion is bounded by BUDGET, not by depth — a sub-agent holding this same tool may delegate
47
+ * again, and `delegate()` clamps the parent's remaining budget into each child. That guarantee is
48
+ * conditional on the caller supplying `budget` / `parentBudgetRemaining` in `defaults`; both are
49
+ * optional in `DelegateOptions`, and with neither set nothing at this layer bounds the descent.
50
+ * Stated rather than fixed: a depth counter here would be a second owner of a rule `delegate()`
51
+ * already owns.
52
+ */
53
+ declare function createDelegateTool(options: CreateDelegateToolOptions): _theokit_sdk.CustomTool;
54
+
55
+ export { type CreateDelegateToolOptions, type DelegateRosterEntry, DelegateToolConfigError, createDelegateTool };