@theokit/agents 13.0.0-next.2 → 13.0.0-next.4

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/CHANGELOG.md CHANGED
@@ -1,5 +1,75 @@
1
1
  # @theokit/agents
2
2
 
3
+ ## 13.0.0-next.4
4
+
5
+ ### Minor Changes
6
+
7
+ - a7f4d3d: `deleteSession` stops reporting a registry removal it cannot confirm
8
+
9
+ `registryRemoved` was computed as `outcome !== false`, so a remover that resolved saying **nothing**
10
+ was reported as a removal. That is the shape `Agent.delete` has — `Promise<void>` — and below
11
+ `@theokit/sdk@5.3.1` it is what a no-op returns: measured in `4.52.1`, `removeRegisteredAgent`
12
+ mutates an in-memory map and schedules a save only when the entry was in it, while `delete` — unlike
13
+ `list` — never hydrates from disk. In any freshly started process the entry is not in memory, so the
14
+ call resolves having left `registry.json` untouched and throws nothing.
15
+
16
+ Breaking, inside the unreleased 13.0.0 line:
17
+
18
+ - `DeleteSessionResult.registryRemoved: boolean` is replaced by
19
+ `registryOutcome: 'removed' | 'nothing-to-remove' | 'unconfirmed' | 'failed' | 'not-attempted'`.
20
+ Renamed rather than retyped: `if (result.registryRemoved)` would have kept compiling while
21
+ silently changing which branch it took.
22
+ - `SessionInUseError.registryRemoved` becomes `registryOutcome`, and the refusal no longer advertises
23
+ "the registry entry was already removed" for a half it cannot confirm — it tells the caller to
24
+ verify instead.
25
+
26
+ `not-attempted` and `unconfirmed` are distinct on purpose: "nobody asked" and "we asked and got
27
+ silence" lead a caller to opposite actions, and the old boolean said `false` to both.
28
+
29
+ The declared SDK range is unchanged. `5.3.1` fixes the behaviour and not the signature — `delete`
30
+ still returns `Promise<void>` — so `unconfirmed` remains the honest answer on every admitted version,
31
+ and raising the floor is a separate decision that would make the removal happen without making it
32
+ reportable.
33
+
34
+ Closes usetheokit/theokit#675.
35
+
36
+ ## 13.0.0-next.3
37
+
38
+ ### Minor Changes
39
+
40
+ - 59d6dcc: A transcript nobody can read is listed without an id, and keeps its protection
41
+
42
+ `listSessions` fell back to the filename stem whenever the first record could not be read. Under
43
+ `@theokit/sdk` 5.x that stem is a one-way hash of the id, so the fallback did not return a degraded
44
+ id — it returned an identifier belonging to no session. Session GC keyed protection on it, so a
45
+ session someone had DECLARED protected lost its protection and was planned for deletion, while the
46
+ registry removal was called with the hash and left the real entry behind.
47
+
48
+ Protection now runs in the direction that has a function. `transcriptPath(root, cwd, id)` is total on
49
+ both majors and its inverse is not, so protection is keyed by transcript PATH and caller-supplied ids
50
+ are mapped forward onto paths. Whether a transcript can be read stops mattering to whether it is
51
+ protected.
52
+
53
+ Breaking, inside the unreleased 13.0.0 line:
54
+
55
+ - `SessionSummary.id` is `string | undefined`, alongside a new `idSource: 'transcript' | 'unavailable'`.
56
+ It is never derived from the filename.
57
+ - **`protectedTranscripts` is RENAMED to `protectedTranscriptPaths`, and the rename is the fix.** Its
58
+ keys changed from session ids to transcript paths while the signature stayed `Map<string, string>`,
59
+ so a consumer that mapped the keys forward through `transcriptPath` — correct when they were ids —
60
+ kept compiling and started double-mapping, leaving its protection array matching nothing. Measured
61
+ on a real consumer against this build: `deleteSession` collected a session holding a LIVE writer
62
+ lease. The old name is gone rather than aliased; a silent break that loses data is worse than a
63
+ loud one, and an alias would have preserved the silence. `transcriptOf(id, cwd, root)` maps forward
64
+ for callers that hold an id.
65
+ - `GCCandidate.id`, `GCKept.id` and `GCError.id` admit `undefined` for the same reason.
66
+ - `RunTranscriptGCResult` gains `orphaned` — transcripts collected whose session id could not be
67
+ read, by path. A separate list rather than a second meaning inside `removed`, which answers "which
68
+ sessions did I collect"; `theo sessions gc` reports both, and never prints a filename where an id
69
+ belongs.
70
+
71
+ Closes usetheokit/theokit#668.
72
+
3
73
  ## 13.0.0-next.2
4
74
 
5
75
  ### Minor Changes
package/dist/session.d.ts CHANGED
@@ -50,7 +50,7 @@ declare class SessionRegistryRemoverError extends TheokitAgentError {
50
50
  *
51
51
  * `Agent.delete` clears the REGISTRY ENTRY and never touches the transcript on disk. A consumer had
52
52
  * to discover that by measuring. {@link deleteSession} is the answer: it returns
53
- * `{ registryRemoved, transcriptRemoved }` so the two are impossible to confuse, and a caller that
53
+ * `{ registryOutcome, transcriptRemoved }` so the two are impossible to confuse, and a caller that
54
54
  * wanted both and got one can see it.
55
55
  */
56
56
  /** Raised when a lifecycle operation is refused because the session is live. */
@@ -65,31 +65,46 @@ declare class SessionInUseError extends TheokitAgentError {
65
65
  /** Why it is protected — a writer lease, the resumable pointer, or being the most recent. */
66
66
  readonly reason: string;
67
67
  /**
68
- * Whether the registry half already happened before the refusal.
68
+ * What the registry half reported before the refusal, or `undefined` when it never ran.
69
69
  *
70
- * `true` only when the session became protected DURING the registry removal — the re-check
71
- * fires after the await, so the entry is already gone while the transcript stays. The caller
72
- * needs this: retrying a removal that is already done returns `false` ("no entry to remove"),
73
- * which reads as a failure and is not one.
70
+ * Set only when the session became protected DURING the registry removal — the re-check fires
71
+ * after the await, so that half has already been attempted while the transcript stays. The
72
+ * caller needs it: retrying a removal that is already done reports "nothing to remove", which
73
+ * reads as a failure and is not one.
74
+ *
75
+ * Carries the OUTCOME rather than a boolean since #675. `unconfirmed` must not be advertised as
76
+ * "already removed" — that is the assertion the issue is about, and telling a caller not to
77
+ * retry a half that may never have happened is the expensive direction to be wrong in.
74
78
  */
75
- readonly registryRemoved: boolean;
79
+ readonly registryOutcome?: RegistryOutcome | undefined;
76
80
  readonly name = "SessionInUseError";
77
81
  constructor(sessionId: string,
78
82
  /** Why it is protected — a writer lease, the resumable pointer, or being the most recent. */
79
83
  reason: string,
80
84
  /**
81
- * Whether the registry half already happened before the refusal.
85
+ * What the registry half reported before the refusal, or `undefined` when it never ran.
86
+ *
87
+ * Set only when the session became protected DURING the registry removal — the re-check fires
88
+ * after the await, so that half has already been attempted while the transcript stays. The
89
+ * caller needs it: retrying a removal that is already done reports "nothing to remove", which
90
+ * reads as a failure and is not one.
82
91
  *
83
- * `true` only when the session became protected DURING the registry removal the re-check
84
- * fires after the await, so the entry is already gone while the transcript stays. The caller
85
- * needs this: retrying a removal that is already done returns `false` ("no entry to remove"),
86
- * which reads as a failure and is not one.
92
+ * Carries the OUTCOME rather than a boolean since #675. `unconfirmed` must not be advertised as
93
+ * "already removed" that is the assertion the issue is about, and telling a caller not to
94
+ * retry a half that may never have happened is the expensive direction to be wrong in.
87
95
  */
88
- registryRemoved?: boolean);
96
+ registryOutcome?: RegistryOutcome | undefined);
89
97
  }
90
98
  /** One session as the lifecycle vocabulary sees it. */
91
99
  interface SessionSummary {
92
- readonly id: string;
100
+ /**
101
+ * The session id read from the transcript's first record, or `undefined` when the record could
102
+ * not be read. It is NEVER derived from the filename: on `@theokit/sdk` 5.x the name is a one-way
103
+ * hash of the id, so a name-derived value would name no session at all (usetheokit/theokit#668).
104
+ */
105
+ readonly id: string | undefined;
106
+ /** Where {@link SessionSummary.id} came from — so a caller can tell absence from a value. */
107
+ readonly idSource: 'transcript' | 'unavailable';
93
108
  /** Absolute path of the transcript file. */
94
109
  readonly transcript: string;
95
110
  /** Last modification, for recency ordering. */
@@ -111,19 +126,80 @@ declare function listSessions(cwd: string, root?: string): SessionSummary[];
111
126
  * is far less useful than one reporting why each was skipped, and retention policy is exactly where
112
127
  * an operator asks that question.
113
128
  */
114
- declare function protectedTranscripts(cwd: string, root?: string): Map<string, string>;
129
+ /**
130
+ * RENAMED from `protectedTranscripts` by usetheokit/theokit#668, and the rename IS the fix for the
131
+ * second half of that issue.
132
+ *
133
+ * The keys changed from session ids to transcript paths, and the signature did not:
134
+ * `Map<string, string>` before and `Map<string, string>` after. A consumer that mapped the keys
135
+ * forward through `transcriptPath` — the correct thing to do when they were ids — went on compiling
136
+ * and started double-mapping, so its protection array matched nothing and its delete guard passed.
137
+ * Measured on TheoCode against this very build: `deleteSession` collected a session with a LIVE
138
+ * writer lease, and no type could have caught it.
139
+ *
140
+ * A silent break that loses data is worse than a loud one. The old name is GONE rather than aliased,
141
+ * so a caller finds out at compile time instead of at delete time. Aliasing it would have preserved
142
+ * exactly the silence this rename exists to remove.
143
+ */
144
+ declare function protectedTranscriptPaths(cwd: string, root?: string): Map<string, string>;
145
+ /**
146
+ * The transcript a session id would occupy, for keying protection.
147
+ *
148
+ * Protection runs id → PATH and never the reverse, because that is the direction with a function:
149
+ * `transcriptPath` is total on both majors, while 5.x's naming is a one-way hash. Keying on the id
150
+ * meant a transcript nobody could read could not be matched against anything, so a session someone
151
+ * had DECLARED protected became collectable (usetheokit/theokit#668).
152
+ */
153
+ declare function transcriptOf(id: string, cwd: string, root?: string): string;
115
154
  /** What `deleteSession` did, per store. */
155
+ /**
156
+ * What the injected registry remover actually told us — REPLACES the `registryRemoved` boolean
157
+ * (usetheokit/theokit#675).
158
+ *
159
+ * There are three outcomes and a boolean could carry two, so the third was folded into `true`:
160
+ *
161
+ * - `removed` the remover reported that it removed an entry
162
+ * - `nothing-to-remove` the remover reported that there was none — a report, and an ordinary one
163
+ * - `unconfirmed` the remover ran, resolved, and said NOTHING
164
+ * - `failed` it threw or timed out; see `registryError`
165
+ * - `not-attempted` no remover was supplied, so the registry was never touched
166
+ *
167
+ * `not-attempted` and `unconfirmed` are deliberately not the same value. "Nobody asked" and "we
168
+ * asked and got silence" lead a caller to opposite actions, and the old boolean said `false` to
169
+ * both.
170
+ *
171
+ * `unconfirmed` is the one that matters, and it is the common case rather than an exotic one.
172
+ * `Agent.delete` returns `Promise<void>`: measured in `@theokit/sdk@4.52.1` and confirmed by the
173
+ * SDK's changelog for `5.3.1`, it mutates an in-memory map and — unlike `Agent.list` — never
174
+ * hydrates from disk, so in any freshly started process it resolves having removed nothing and
175
+ * throws nothing. Reporting that as a removal was this package asserting something no version below
176
+ * 5.3.1 gives it any way to know.
177
+ *
178
+ * `5.3.1` fixes the BEHAVIOUR and not the signature: `Agent.delete` still returns `Promise<void>`,
179
+ * so `unconfirmed` stays the honest answer on every version this package admits. Raising the floor
180
+ * would make the removal actually happen; it would not make it reportable, which is why the two are
181
+ * separate decisions.
182
+ *
183
+ * A caller that needs certainty verifies from its own side; this package deliberately does not own
184
+ * the registry (see `gc/registry-remover.ts`). `Agent.list` hydrates from disk — which `delete`
185
+ * never does, and that asymmetry IS the upstream defect — so it is the read that can answer.
186
+ */
187
+ type RegistryOutcome = 'removed' | 'nothing-to-remove' | 'unconfirmed' | 'failed' | 'not-attempted';
116
188
  interface DeleteSessionResult {
117
- /** Whether a registry entry was removed. */
118
- readonly registryRemoved: boolean;
189
+ /**
190
+ * What the registry remover reported. RENAMED from `registryRemoved` by #675: the meaning
191
+ * changed, and a boolean under the old name would have kept `if (result.registryRemoved)`
192
+ * compiling while silently flipping which branch it took.
193
+ */
194
+ readonly registryOutcome: RegistryOutcome;
119
195
  /** Whether the transcript file was removed. */
120
196
  readonly transcriptRemoved: boolean;
121
197
  /**
122
198
  * Why the registry removal failed, when it did.
123
199
  *
124
- * Kept SEPARATE from `registryRemoved` on purpose: collapsing the two outcomes into one boolean is
125
- * exactly how the original silent success hid. A caller that only checks `registryRemoved` sees
126
- * `false` and can still surface the reason.
200
+ * Kept SEPARATE from `registryOutcome` on purpose: collapsing the outcomes into one value is
201
+ * exactly how the original silent success hid. A caller that only reads the outcome sees
202
+ * `failed` and can still surface the reason.
127
203
  */
128
204
  readonly registryError?: unknown;
129
205
  }
@@ -278,13 +354,15 @@ declare class GCFloorError extends TheokitAgentError {
278
354
  }
279
355
  /** A transcript the policy would collect. */
280
356
  interface GCCandidate {
281
- readonly id: string;
357
+ /** `undefined` when the transcript could not be read — see `SessionSummary.id` (#668). */
358
+ readonly id: string | undefined;
282
359
  readonly transcript: string;
283
360
  readonly modifiedAt: Date;
284
361
  }
285
362
  /** A transcript the policy keeps, and why. */
286
363
  interface GCKept {
287
- readonly id: string;
364
+ /** `undefined` when the transcript could not be read — see `SessionSummary.id` (#668). */
365
+ readonly id: string | undefined;
288
366
  /** Human-readable protection reason — recency, policy, lease, or unreadable age. */
289
367
  readonly reason: string;
290
368
  }
@@ -300,7 +378,7 @@ interface TranscriptGCOptions {
300
378
  /**
301
379
  * Extra sessions this framework cannot see are live.
302
380
  *
303
- * `protectedTranscripts` derives protection from THIS framework's pointer convention. A consumer
381
+ * `protectedTranscriptPaths` derives protection from THIS framework's pointer convention. A consumer
304
382
  * whose live-session registry lives elsewhere gets an INERT guard — silently, inside a guard that
305
383
  * deletes user transcripts. That is the shape of the consumer's own PS-002: declared, wired, never
306
384
  * called, and therefore reading as protection while protecting nothing.
@@ -324,24 +402,26 @@ interface TranscriptGCPlan {
324
402
  declare function planTranscriptGC(options: TranscriptGCOptions): TranscriptGCPlan;
325
403
  /** What one candidate's removal did, or why it did not. */
326
404
  interface GCError {
327
- readonly id: string;
405
+ /** `undefined` when the failure IS that no id could be read (#668). */
406
+ readonly id: string | undefined;
328
407
  readonly message: string;
329
408
  }
330
409
  interface RunTranscriptGCResult {
331
410
  readonly dryRun: boolean;
332
411
  /** Ids that were (or, in a dry run, would be) removed. */
333
412
  readonly removed: readonly string[];
413
+ /**
414
+ * Transcripts collected whose session id could NOT be read, by path.
415
+ *
416
+ * A separate list rather than a second meaning inside `removed`: that one answers "which sessions
417
+ * did I collect", this one answers "which files did I collect that I could not name". Folding them
418
+ * together would put two kinds of string in one array and make every consumer guess which it held
419
+ * (usetheokit/theokit#668).
420
+ */
421
+ readonly orphaned: readonly string[];
334
422
  /** One entry per candidate that failed — the rest still ran. */
335
423
  readonly errors: readonly GCError[];
336
424
  }
337
- /**
338
- * Execute a plan. `apply: false` reports what would happen and changes nothing.
339
- *
340
- * Errors accumulate PER CANDIDATE (fail-open): one undeletable file must not leave the rest of the
341
- * disk uncollected, and the operator must still learn which one failed. `ENOENT` counts as success —
342
- * absent is the desired end state, and reporting it as failure would make the second run of an
343
- * interrupted GC look broken.
344
- */
345
425
  declare function runTranscriptGC(plan: TranscriptGCPlan, options: {
346
426
  readonly apply: boolean;
347
427
  /** Same additive, fail-closed contract as on the plan — see `TranscriptGCOptions.protectedIds`. */
@@ -577,4 +657,4 @@ declare class LivenessBudgetError extends TheokitAgentError {
577
657
  */
578
658
  declare function classifyProjects(encoded: readonly string[], opts: ClassifyProjectsOptions): Map<string, LivenessVerdict>;
579
659
 
580
- export { type ClassifyProjectsOptions, type DeleteSessionOptions, type DeleteSessionResult, type FsSeam, type GCCandidate, type GCError, GCFloorError, type GCKept, GCProtectionUnavailableError, type Liveness, LivenessBudgetError, type LivenessVerdict, type ReadThreadHistoryOptions, type RunTranscriptGCResult, SessionInUseError, SessionRegistryRemoverError, type SessionSummary, type ThreadHistory, type ThreadHistoryState, type TranscriptGCOptions, type TranscriptGCPlan, classifyProjects, deleteSession, forkBeforeUserTurn, listSessions, loadOrCreateSessionId, persistSessionId, planTranscriptGC, projectDirFor, projectDirMatches, projectsRoot, protectedTranscripts, readThreadHistory, recordProjectDir, resolveProjectDir, runTranscriptGC, sessionPointerPath, transcriptRootHint };
660
+ export { type ClassifyProjectsOptions, type DeleteSessionOptions, type DeleteSessionResult, type FsSeam, type GCCandidate, type GCError, GCFloorError, type GCKept, GCProtectionUnavailableError, type Liveness, LivenessBudgetError, type LivenessVerdict, type ReadThreadHistoryOptions, type RunTranscriptGCResult, SessionInUseError, SessionRegistryRemoverError, type SessionSummary, type ThreadHistory, type ThreadHistoryState, type TranscriptGCOptions, type TranscriptGCPlan, classifyProjects, deleteSession, forkBeforeUserTurn, listSessions, loadOrCreateSessionId, persistSessionId, planTranscriptGC, projectDirFor, projectDirMatches, projectsRoot, protectedTranscriptPaths, readThreadHistory, recordProjectDir, resolveProjectDir, runTranscriptGC, sessionPointerPath, transcriptOf, transcriptRootHint };
package/dist/session.js CHANGED
@@ -133,12 +133,22 @@ var SessionInUseError = class extends TheokitAgentError2 {
133
133
  }
134
134
  sessionId;
135
135
  reason;
136
- registryRemoved;
136
+ registryOutcome;
137
137
  name = "SessionInUseError";
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;
138
+ constructor(sessionId, reason, registryOutcome) {
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.` + registryNote(registryOutcome)), this.sessionId = sessionId, this.reason = reason, this.registryOutcome = registryOutcome;
140
140
  }
141
141
  };
142
+ function registryNote(outcome) {
143
+ if (outcome === "removed") {
144
+ return ` The registry entry was already removed before this was noticed \u2014 do not retry that half, only the transcript.`;
145
+ }
146
+ if (outcome === "unconfirmed") {
147
+ return ` The registry removal was already attempted and reported nothing, so whether the entry is gone is unknown \u2014 verify it before retrying.`;
148
+ }
149
+ return "";
150
+ }
151
+ __name(registryNote, "registryNote");
142
152
  function listSessions(cwd, root = transcriptRoot3()) {
143
153
  const dir = projectDirFor(cwd, root);
144
154
  let entries;
@@ -161,8 +171,10 @@ function listSessions(cwd, root = transcriptRoot3()) {
161
171
  }
162
172
  const kind = classifySessionArtifact(entry, isDirectory);
163
173
  if (kind !== "transcript") continue;
174
+ const id = sessionIdOf(path);
164
175
  found.push({
165
- id: sessionIdOf(path, entry),
176
+ id,
177
+ idSource: id === void 0 ? "unavailable" : "transcript",
166
178
  transcript: path,
167
179
  modifiedAt
168
180
  });
@@ -170,8 +182,7 @@ function listSessions(cwd, root = transcriptRoot3()) {
170
182
  return found.sort((a, b) => b.modifiedAt.getTime() - a.modifiedAt.getTime());
171
183
  }
172
184
  __name(listSessions, "listSessions");
173
- function sessionIdOf(path, entry) {
174
- const stem = entry.replace(/\.jsonl$/, "");
185
+ function sessionIdOf(path) {
175
186
  let fd;
176
187
  try {
177
188
  fd = openSync(path, "r");
@@ -188,25 +199,31 @@ function sessionIdOf(path, entry) {
188
199
  } finally {
189
200
  if (fd !== void 0) closeSync(fd);
190
201
  }
191
- return stem;
202
+ return void 0;
192
203
  }
193
204
  __name(sessionIdOf, "sessionIdOf");
194
205
  var FIRST_RECORD_BYTES = 64 * 1024;
195
- function protectedTranscripts(cwd, root = transcriptRoot3()) {
206
+ function protectedTranscriptPaths(cwd, root = transcriptRoot3()) {
196
207
  const protectedBy = /* @__PURE__ */ new Map();
197
208
  const sessions = listSessions(cwd, root);
198
209
  const pointer = readPointer(cwd, root);
199
- if (pointer !== void 0) protectedBy.set(pointer, "resumable session pointer");
200
- if (sessions.length > 0 && !protectedBy.has(sessions[0].id)) {
201
- protectedBy.set(sessions[0].id, "most recent session");
210
+ if (pointer !== void 0) {
211
+ protectedBy.set(transcriptPath(root, cwd, pointer), "resumable session pointer");
212
+ }
213
+ if (sessions.length > 0 && !protectedBy.has(sessions[0].transcript)) {
214
+ protectedBy.set(sessions[0].transcript, "most recent session");
202
215
  }
203
216
  for (const session of sessions) {
204
217
  const hasWriter = sessionHasWriter(session.transcript);
205
- if (hasWriter) protectedBy.set(session.id, "active writer lease");
218
+ if (hasWriter) protectedBy.set(session.transcript, "active writer lease");
206
219
  }
207
220
  return protectedBy;
208
221
  }
209
- __name(protectedTranscripts, "protectedTranscripts");
222
+ __name(protectedTranscriptPaths, "protectedTranscriptPaths");
223
+ function transcriptOf(id, cwd, root = transcriptRoot3()) {
224
+ return transcriptPath(root, cwd, id);
225
+ }
226
+ __name(transcriptOf, "transcriptOf");
210
227
  function readPointer(cwd, root) {
211
228
  try {
212
229
  const id = readFileSync3(sessionPointerPath(cwd, root), "utf8").trim();
@@ -219,27 +236,29 @@ __name(readPointer, "readPointer");
219
236
  async function deleteSession(sessionId, options) {
220
237
  const root = options.root ?? transcriptRoot3();
221
238
  if (options.force !== true) {
222
- const reason = protectedTranscripts(options.cwd, root).get(sessionId);
239
+ const reason = protectedTranscriptPaths(options.cwd, root).get(transcriptOf(sessionId, options.cwd, root));
223
240
  if (reason !== void 0) throw new SessionInUseError(sessionId, reason);
224
241
  }
225
- let registryRemoved = false;
242
+ let registryOutcome = "not-attempted";
226
243
  let registryError;
227
244
  if (options.removeFromRegistry !== void 0) {
228
245
  try {
229
246
  const outcome = await awaitRegistryRemoval(options.removeFromRegistry(sessionId), sessionId, options.registryTimeoutMs);
230
- registryRemoved = outcome !== false;
247
+ if (outcome === false) registryOutcome = "nothing-to-remove";
248
+ else if (outcome === void 0) registryOutcome = "unconfirmed";
249
+ else registryOutcome = "removed";
231
250
  } catch (error) {
232
251
  return {
233
- registryRemoved: false,
252
+ registryOutcome: "failed",
234
253
  transcriptRemoved: false,
235
254
  registryError: error
236
255
  };
237
256
  }
238
257
  }
239
258
  if (options.force !== true) {
240
- const nowProtected = protectedTranscripts(options.cwd, root).get(sessionId);
259
+ const nowProtected = protectedTranscriptPaths(options.cwd, root).get(transcriptOf(sessionId, options.cwd, root));
241
260
  if (nowProtected !== void 0) {
242
- throw new SessionInUseError(sessionId, nowProtected, registryRemoved);
261
+ throw new SessionInUseError(sessionId, nowProtected, registryOutcome);
243
262
  }
244
263
  }
245
264
  let transcriptRemoved = false;
@@ -249,7 +268,7 @@ async function deleteSession(sessionId, options) {
249
268
  } catch {
250
269
  }
251
270
  return {
252
- registryRemoved,
271
+ registryOutcome,
253
272
  transcriptRemoved,
254
273
  registryError
255
274
  };
@@ -273,7 +292,7 @@ function forkBeforeUserTurn(srcId, newId, nth, options) {
273
292
  forkTranscript(src, dst, {
274
293
  beforeRecordIndex: selected.index,
275
294
  liveSessionPaths: [
276
- ...protectedTranscripts(options.cwd, root).keys()
295
+ ...protectedTranscriptPaths(options.cwd, root).keys()
277
296
  ].map((id) => transcriptPath(root, options.cwd, id))
278
297
  });
279
298
  return {
@@ -319,7 +338,7 @@ __name(reachableUserTurns, "reachableUserTurns");
319
338
  // src/session/gc/transcript-gc.ts
320
339
  import { rmSync as rmSync2 } from "fs";
321
340
  import { TheokitAgentError as TheokitAgentError3 } from "@theokit/sdk/errors";
322
- import { transcriptPath as transcriptPath2, transcriptRoot as transcriptRoot4 } from "@theokit/sdk/persistence";
341
+ import { transcriptRoot as transcriptRoot4 } from "@theokit/sdk/persistence";
323
342
  var FLOOR = {
324
343
  keepLast: 1,
325
344
  maxAgeDays: 1
@@ -349,7 +368,7 @@ var GCFloorError = class extends TheokitAgentError3 {
349
368
  super(`transcript GC: \`${field}\` must be at least ${String(FLOOR[field])}, received ${String(received)}. This is refused rather than clamped: a policy silently replaced by a different one is a policy nobody reviewed.`), this.field = field, this.received = received;
350
369
  }
351
370
  };
352
- function resolveProtection(builtin, provider) {
371
+ function resolveProtection(builtin, provider, cwd, root) {
353
372
  if (provider === void 0) return builtin;
354
373
  let extra;
355
374
  try {
@@ -357,8 +376,9 @@ function resolveProtection(builtin, provider) {
357
376
  } catch (cause) {
358
377
  throw new GCProtectionUnavailableError(cause);
359
378
  }
360
- const union = new Map(extra);
361
- for (const [id, reason] of builtin) union.set(id, reason);
379
+ const union = /* @__PURE__ */ new Map();
380
+ for (const [id, reason] of extra) union.set(transcriptOf(id, cwd, root), reason);
381
+ for (const [path, reason] of builtin) union.set(path, reason);
362
382
  return union;
363
383
  }
364
384
  __name(resolveProtection, "resolveProtection");
@@ -373,11 +393,11 @@ function planTranscriptGC(options) {
373
393
  const now = options.now ?? Date.now();
374
394
  const cutoff = now - options.maxAgeDays * 864e5;
375
395
  const sessions = listSessions(options.cwd, root);
376
- const protectedBy = resolveProtection(protectedTranscripts(options.cwd, root), options.protectedIds);
396
+ const protectedBy = resolveProtection(protectedTranscriptPaths(options.cwd, root), options.protectedIds, options.cwd, root);
377
397
  const candidates = [];
378
398
  const kept = [];
379
399
  for (const [index, session] of sessions.entries()) {
380
- const protection = protectedBy.get(session.id);
400
+ const protection = protectedBy.get(session.transcript);
381
401
  if (protection !== void 0) {
382
402
  kept.push({
383
403
  id: session.id,
@@ -421,33 +441,62 @@ function planTranscriptGC(options) {
421
441
  };
422
442
  }
423
443
  __name(planTranscriptGC, "planTranscriptGC");
444
+ async function releaseFromRegistry(candidate, options) {
445
+ if (candidate.id === void 0) {
446
+ return {
447
+ note: {
448
+ id: void 0,
449
+ message: UNNAMEABLE_COLLECTION
450
+ },
451
+ unlink: true
452
+ };
453
+ }
454
+ if (options.removeFromRegistry === void 0) return {
455
+ unlink: true
456
+ };
457
+ try {
458
+ await awaitRegistryRemoval(options.removeFromRegistry(candidate.id), candidate.id, options.registryTimeoutMs);
459
+ return {
460
+ unlink: true
461
+ };
462
+ } catch (error) {
463
+ return {
464
+ note: {
465
+ id: candidate.id,
466
+ message: `registry removal failed, transcript kept: ${error.message}`
467
+ },
468
+ unlink: false
469
+ };
470
+ }
471
+ }
472
+ __name(releaseFromRegistry, "releaseFromRegistry");
473
+ var UNNAMEABLE_COLLECTION = "transcript collected without a registry removal: its session id could not be read, and a fabricated one would name no session";
474
+ function recordRemoval(candidate, removed, orphaned) {
475
+ if (candidate.id === void 0) orphaned.push(candidate.transcript);
476
+ else removed.push(candidate.id);
477
+ }
478
+ __name(recordRemoval, "recordRemoval");
424
479
  async function runTranscriptGC(plan, options) {
425
480
  const removed = [];
481
+ const orphaned = [];
426
482
  const errors = [];
427
- const protectedNow = options.apply ? resolveProtection(protectedTranscripts(plan.cwd, plan.root), options.protectedIds) : /* @__PURE__ */ new Map();
483
+ const protectedNow = options.apply ? resolveProtection(protectedTranscriptPaths(plan.cwd, plan.root), options.protectedIds, plan.cwd, plan.root) : /* @__PURE__ */ new Map();
428
484
  for (const candidate of plan.candidates) {
429
- if (protectedNow.has(candidate.id)) continue;
485
+ if (protectedNow.has(candidate.transcript)) continue;
430
486
  if (!options.apply) {
431
- removed.push(candidate.id);
487
+ if (candidate.id === void 0) orphaned.push(candidate.transcript);
488
+ else removed.push(candidate.id);
432
489
  continue;
433
490
  }
434
- if (options.removeFromRegistry !== void 0) {
435
- try {
436
- await awaitRegistryRemoval(options.removeFromRegistry(candidate.id), candidate.id, options.registryTimeoutMs);
437
- } catch (error) {
438
- errors.push({
439
- id: candidate.id,
440
- message: `registry removal failed, transcript kept: ${error.message}`
441
- });
442
- continue;
443
- }
444
- }
491
+ const registry = await releaseFromRegistry(candidate, options);
492
+ if (registry.note !== void 0) errors.push(registry.note);
493
+ if (!registry.unlink) continue;
445
494
  try {
446
- rmSync2(transcriptPath2(plan.root, plan.cwd, candidate.id));
447
- removed.push(candidate.id);
495
+ rmSync2(candidate.transcript);
496
+ recordRemoval(candidate, removed, orphaned);
448
497
  } catch (error) {
449
498
  if (error.code === "ENOENT") {
450
- removed.push(candidate.id);
499
+ recordRemoval(candidate, removed, orphaned);
451
500
  continue;
452
501
  }
453
502
  errors.push({
@@ -459,6 +508,7 @@ async function runTranscriptGC(plan, options) {
459
508
  return {
460
509
  dryRun: !options.apply,
461
510
  removed,
511
+ orphaned,
462
512
  errors
463
513
  };
464
514
  }
@@ -483,13 +533,13 @@ function transcriptRootHint(found, previousRoot, env = process.env) {
483
533
  __name(transcriptRootHint, "transcriptRootHint");
484
534
 
485
535
  // src/session/thread-history.ts
486
- import { loadJsonl as loadJsonl2, transcriptPath as transcriptPath3, transcriptRoot as transcriptRoot5 } from "@theokit/sdk/persistence";
536
+ import { loadJsonl as loadJsonl2, transcriptPath as transcriptPath2, transcriptRoot as transcriptRoot5 } from "@theokit/sdk/persistence";
487
537
  var ABSENT = {
488
538
  state: "absent",
489
539
  messages: []
490
540
  };
491
541
  function readThreadHistory(sessionId, options) {
492
- const path = transcriptPath3(options.root ?? transcriptRoot5(), options.cwd, sessionId);
542
+ const path = transcriptPath2(options.root ?? transcriptRoot5(), options.cwd, sessionId);
493
543
  try {
494
544
  return {
495
545
  state: "present",
@@ -708,12 +758,13 @@ export {
708
758
  projectDirFor,
709
759
  projectDirMatches,
710
760
  projectsRoot,
711
- protectedTranscripts,
761
+ protectedTranscriptPaths,
712
762
  readThreadHistory,
713
763
  recordProjectDir,
714
764
  resolveProjectDir,
715
765
  runTranscriptGC,
716
766
  sessionPointerPath,
767
+ transcriptOf,
717
768
  transcriptRootHint
718
769
  };
719
770
  //# sourceMappingURL=session.js.map
@@ -1 +1 @@
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/thread-history.ts","../src/session/liveness-oracle.ts"],"mappings":"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","names":["closeSync","openSync","readFileSync","readdirSync","readSync","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","sessionIdOf","transcript","sort","a","b","getTime","stem","replace","fd","openSync","buffer","Buffer","alloc","FIRST_RECORD_BYTES","read","readSync","newline","indexOf","end","first","JSON","parse","toString","length","undefined","closeSync","protectedTranscripts","protectedBy","Map","sessions","pointer","readPointer","set","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","loadJsonl","transcriptPath","transcriptRoot","ABSENT","state","messages","readThreadHistory","sessionId","options","path","transcriptPath","root","transcriptRoot","cwd","loadJsonl","err","isNotFound","reason","messageOf","code","Error","message","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"]}
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/thread-history.ts","../src/session/liveness-oracle.ts"],"mappings":"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","names":["closeSync","openSync","readFileSync","readdirSync","readSync","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","registryOutcome","registryNote","outcome","listSessions","cwd","root","transcriptRoot","dir","projectDirFor","entries","readdirSync","found","entry","path","join","isDirectory","modifiedAt","stats","statSync","mtime","kind","classifySessionArtifact","id","sessionIdOf","push","idSource","undefined","transcript","sort","a","b","getTime","fd","openSync","buffer","Buffer","alloc","FIRST_RECORD_BYTES","read","readSync","newline","indexOf","end","first","JSON","parse","toString","length","closeSync","protectedTranscriptPaths","protectedBy","Map","sessions","pointer","readPointer","set","transcriptPath","has","session","hasWriter","sessionHasWriter","transcriptOf","readFileSync","sessionPointerPath","trim","deleteSession","options","force","get","registryError","removeFromRegistry","awaitRegistryRemoval","registryTimeoutMs","error","transcriptRemoved","nowProtected","rmSync","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","transcriptRoot","FLOOR","keepLast","maxAgeDays","GCProtectionUnavailableError","TheokitAgentError","name","reason","Error","message","String","code","isRetryable","cause","GCFloorError","field","received","resolveProtection","builtin","provider","cwd","root","undefined","extra","union","Map","id","set","transcriptOf","path","planTranscriptGC","options","Number","isFinite","transcriptRoot","now","Date","cutoff","sessions","listSessions","protectedBy","protectedTranscriptPaths","protectedIds","candidates","kept","index","session","entries","protection","get","transcript","push","age","modifiedAt","getTime","isNaN","releaseFromRegistry","candidate","note","UNNAMEABLE_COLLECTION","unlink","removeFromRegistry","awaitRegistryRemoval","registryTimeoutMs","error","recordRemoval","removed","orphaned","runTranscriptGC","plan","errors","protectedNow","apply","has","registry","rmSync","dryRun","readdirSync","transcriptRootHint","found","previousRoot","env","process","undefined","current","THEOKIT_HOME","trim","length","projects","readdirSync","projectsRoot","String","loadJsonl","transcriptPath","transcriptRoot","ABSENT","state","messages","readThreadHistory","sessionId","options","path","transcriptPath","root","transcriptRoot","cwd","loadJsonl","err","isNotFound","reason","messageOf","code","Error","message","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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@theokit/agents",
3
- "version": "13.0.0-next.2",
3
+ "version": "13.0.0-next.4",
4
4
  "description": "AI agents as first-class citizens of the TheoKit pipeline. The AgentBuilder.create() authoring chain compiles to the @theokit/sdk runtime.",
5
5
  "repository": {
6
6
  "type": "git",