@robota-sdk/agent-session 3.0.6 → 3.1.1

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.
@@ -1,5 +1,6 @@
1
- import { ConversationAgent, ExecutionSuspendedError, IAIProvider, IAgentConfig, IContextWindowState, IEventService, IExecutionJournal, IHistoryEntry, IHookTypeExecutor, IPathProtectionPolicy, IProviderRegistrationOptions, IRecoverableExecutionJournal, IResponseFormatConfig, IResumeExecutionOptions, IRunTraceContext, ISpinner, ISubprocessTraceEnv, ITerminalOutput, IToolAppView, IToolExecutionContext, IToolExecutionResult, IToolResultSpillStore, IToolSchema, IToolWaitRequest, IToolWithEventService, IUserInteraction, TBackgroundPermissionPolicy, TModelEffort, TModelEffortSelection, TPermissionMode, TProviderOwnership, TSessionEndReason, TToolArgs, TToolChoice, TToolParameters, TUniversalMessage, TUniversalMessagePart, TUniversalValue } from "@robota-sdk/agent-core";
2
- import { ICompactEvent, IInteractiveSessionRecord, IInteractiveSessionRecord as IInteractiveSessionRecord$1, IInteractiveSessionRecord as ISessionRecord, IInteractiveSessionStore, IInteractiveSessionStore as IInteractiveSessionStore$1, IInteractiveSessionStore as ISessionStore, IPromptHistoryBlock, IPromptHistoryEntry, IPromptHistoryReadOptions, IPromptHistorySource, IPromptHistoryWriter, IRuntimeToolInvokeOptions, ISessionConversationSnapshot, ISessionListEntry, ISessionPendingExecution, ISessionRecordDecodeIssue, TCompactTrigger, TPermissionRequester, TPermissionResultValue, TSessionLoadOutcome } from "@robota-sdk/agent-interface-session";
1
+ import { a as isSessionClaimedError, c as IExternalPayloadSink, d as IExternalPayloadReference, f as IFileSessionLoggerOptions, i as TSessionClaimRefusal, l as ISessionLogSink, m as TSessionLogValue, n as ISessionWriterHolder, o as IExternalPayloadSource, p as TSessionLogData, r as SessionClaimedError, s as ISessionLogSource, u as createSessionLogExternalPayloadReference } from "./session-claims-DELiAZkZ.js";
2
+ import { ConversationAgent, ExecutionSuspendedError, IAIProvider, IAgentConfig, IContextWindowState, IEventService, IExecutionJournal, IHistoryEntry, IHookTypeExecutor, IPathProtectionPolicy, IProviderRegistrationOptions, IRecoverableExecutionJournal, IResponseFormatConfig, IResumeExecutionOptions, IRunTraceContext, ISpinner, ISubprocessTraceEnv, ITerminalOutput, IToolAppView, IToolExecutionContext, IToolExecutionResult, IToolSchema, IToolWaitRequest, IToolWithEventService, IUserInteraction, TBackgroundPermissionPolicy, TModelEffort, TModelEffortSelection, TPermissionMode, TProviderOwnership, TResolveInWorkspace, TSessionEndReason, TToolArgs, TToolChoice, TToolParameters, TUniversalMessage, TUniversalMessagePart, TUniversalValue } from "@robota-sdk/agent-core";
3
+ import { ICompactEvent, IInteractiveSessionRecord, IInteractiveSessionRecord as IInteractiveSessionRecord$1, IInteractiveSessionRecord as ISessionRecord, IInteractiveSessionStore, IInteractiveSessionStore as IInteractiveSessionStore$1, IInteractiveSessionStore as ISessionStore, IRuntimeToolInvokeOptions, ISessionConversationSnapshot, ISessionPendingExecution, ISessionRecordDecodeIssue, TCompactTrigger, TPermissionRequester, TPermissionResultValue, TSessionLoadOutcome } from "@robota-sdk/agent-interface-session";
3
4
  //#region src/context-window-tracker.d.ts
4
5
  /** Auto-compact when context usage reaches this fraction */
5
6
  declare const AUTO_COMPACT_THRESHOLD = 0.835;
@@ -34,51 +35,6 @@ declare class ContextWindowTracker {
34
35
  reset(): void;
35
36
  }
36
37
  //#endregion
37
- //#region src/session-log-reference-types.d.ts
38
- /**
39
- * Leaf type module for {@link IExternalPayloadReference}.
40
- *
41
- * Split out of `session-logger.ts` so `session-log-sinks.ts` and `session-log-payload.ts` can
42
- * depend on this type without importing back from `session-logger.ts`, which previously created
43
- * import cycles among the three files.
44
- */
45
- interface IExternalPayloadReference {
46
- kind: 'external-payload';
47
- encoding: 'json';
48
- sha256: string;
49
- byteLength: number;
50
- relativePath: string;
51
- }
52
- /** Session log event data — extensible record of event metadata. */
53
- type TSessionLogValue = string | number | boolean | object | null | undefined;
54
- type TSessionLogData = Record<string, TSessionLogValue>;
55
- interface IFileSessionLoggerOptions {
56
- externalPayloadThresholdBytes?: number;
57
- redactedValue?: string;
58
- }
59
- //#endregion
60
- //#region src/session-log-sinks.d.ts
61
- /** Canonical validation and construction for every session-log external-payload reference. */
62
- declare function createSessionLogExternalPayloadReference(sessionId: string, sha256: string, serialized: string): IExternalPayloadReference;
63
- /** Workspace-neutral sink for content-addressed external JSON payloads. */
64
- interface IExternalPayloadSink {
65
- writeJson(sessionId: string, sha256: string, serialized: string): IExternalPayloadReference;
66
- }
67
- /** Workspace-neutral append sink for session-log bytes. */
68
- interface ISessionLogSink {
69
- append(sessionId: string, text: string): void;
70
- readonly externalPayloadSink?: IExternalPayloadSink;
71
- }
72
- /** Explicit host-filesystem sink for JSONL logs and their content-addressed sidecars. */
73
- declare class NodeSessionLogSink implements ISessionLogSink, IExternalPayloadSink {
74
- private readonly logDirectory;
75
- readonly externalPayloadSink: IExternalPayloadSink;
76
- private readonly enabled;
77
- constructor(logDirectory: string);
78
- append(sessionId: string, text: string): void;
79
- writeJson(sessionId: string, sha256: string, serialized: string): IExternalPayloadReference;
80
- }
81
- //#endregion
82
38
  //#region src/session-logger.d.ts
83
39
  /**
84
40
  * Session logger interface — injected into Session for pluggable logging.
@@ -106,6 +62,7 @@ interface ISessionLogger {
106
62
  declare class FileSessionLogger implements ISessionLogger {
107
63
  private readonly sink;
108
64
  private readonly options;
65
+ private readonly registerExitFlush;
109
66
  /** Buffered hot-path lines, per session file. Keyed by session id (CORE-029). */
110
67
  private readonly pending;
111
68
  private pendingBytes;
@@ -238,8 +195,19 @@ interface IPermissionEnforcerOptions {
238
195
  * lets it run without a prompt.
239
196
  */
240
197
  commandSandbox?: ICommandSandboxApproval;
241
- /** Where `~` and `$HOME` point for critical-path removal checks. Defaults to the OS home directory. */
198
+ /**
199
+ * Where `~` and `$HOME` point for the gate's path checks. Absent, the home directory is unknown:
200
+ * a bare `~` is still refused as a critical target, but a path written under it is not expanded,
201
+ * so it cannot match a protected path.
202
+ */
242
203
  homeDirectory?: string;
204
+ /**
205
+ * Where a path a shell command names really is, symlinks followed (a host with a filesystem
206
+ * supplies it). Absent, a command with a path operand is not read-only.
207
+ */
208
+ resolveInWorkspace?: TResolveInWorkspace;
209
+ /** The host's canonical spelling of a directory; absent, a path is compared as written. */
210
+ canonicalizePath?: (path: string) => string;
243
211
  /**
244
212
  * ARCH-040 Group C (issue #1934): the rules BEFORE any preset contributed.
245
213
  *
@@ -269,8 +237,8 @@ interface IPermissionEnforcerOptions {
269
237
  /** The source's view of the result, for a surface that can host one; never model context. */
270
238
  view?: IToolAppView;
271
239
  }) => void;
272
- /** Additional hook type executors (e.g. prompt, agent) beyond the core defaults. */
273
- hookTypeExecutors?: IHookTypeExecutor[];
240
+ /** The executors that run hook handlers; required, there is no host default. */
241
+ hookTypeExecutors: readonly IHookTypeExecutor[];
274
242
  /** Absolute path to session transcript file — passed to PreToolUse hook inputs as transcript_path */
275
243
  transcriptPath?: string;
276
244
  /** Called when the user selects "allow for project" — persists the tool pattern to project settings. */
@@ -452,8 +420,31 @@ interface ISessionOptions {
452
420
  sessionLogger?: ISessionLogger;
453
421
  /** Host-projected transcript path for hook compatibility; never inferred from a record store. */
454
422
  transcriptPath?: string;
455
- /** Additional hook type executors (e.g. prompt, agent) beyond the core defaults. */
456
- hookTypeExecutors?: IHookTypeExecutor[];
423
+ /**
424
+ * The executors that run hook handlers. REQUIRED: the shell and HTTP executors drive a Node host,
425
+ * so a platform-neutral session has no default for them. A Node composition root passes
426
+ * `[new CommandExecutor(), new HttpExecutor()]` from `@robota-sdk/agent-core/node`, `[]` runs no
427
+ * handler — a configured hook is then reported as having no executor, not silently skipped.
428
+ */
429
+ hookTypeExecutors: readonly IHookTypeExecutor[];
430
+ /**
431
+ * Where `~` and `$HOME` point for the permission gate's path checks. Absent, the home directory is
432
+ * unknown: a bare `~` is still refused as a critical target, but a path written under it is not
433
+ * expanded, so it cannot match a protected path.
434
+ */
435
+ homeDirectory?: string;
436
+ /**
437
+ * Where a path a shell command names really is, symlinks followed, or `undefined` when outside the
438
+ * workspace (agent-core `TResolveInWorkspace`). Needs a filesystem, so a host supplies it; absent,
439
+ * a command with a path operand is not judged read-only.
440
+ */
441
+ resolveInWorkspace?: TResolveInWorkspace;
442
+ /**
443
+ * The host's canonical spelling of a directory (symlinks followed), used to compare the session's
444
+ * `cwd` with the one a saved snapshot, journal or approval names. Absent, the path is compared as
445
+ * written.
446
+ */
447
+ canonicalizePath?: (path: string) => string;
457
448
  /** Name reported to the ConversationAgent agent config. Defaults to 'agent' if not provided. */
458
449
  agentName?: string;
459
450
  /**
@@ -647,8 +638,8 @@ interface ICompactionOptions {
647
638
  * formatted conversation are appended after it.
648
639
  */
649
640
  basePrompt?: string;
650
- /** Additional hook type executors (e.g. prompt, agent) beyond the core defaults. */
651
- hookTypeExecutors?: IHookTypeExecutor[];
641
+ /** The executors that run hook handlers; required, there is no host default. */
642
+ hookTypeExecutors: readonly IHookTypeExecutor[];
652
643
  }
653
644
  declare class CompactionOrchestrator {
654
645
  private readonly sessionId;
@@ -657,7 +648,7 @@ declare class CompactionOrchestrator {
657
648
  private readonly hooks?;
658
649
  private readonly compactInstructions?;
659
650
  private readonly basePrompt?;
660
- private readonly hookTypeExecutors?;
651
+ private readonly hookTypeExecutors;
661
652
  constructor(options: ICompactionOptions);
662
653
  setModel(model: string): void;
663
654
  /**
@@ -711,7 +702,7 @@ declare class PermissionEnforcer {
711
702
  private readonly promptForApprovalFn?;
712
703
  private readonly sessionLogger?;
713
704
  private readonly onToolExecution?;
714
- private readonly hookTypeExecutors?;
705
+ private readonly hookTypeExecutors;
715
706
  private readonly transcriptPath?;
716
707
  /**
717
708
  * Issue #2351: consent is remembered as PATTERNS (`consentScopeFor`), not tool names, and read
@@ -726,6 +717,7 @@ declare class PermissionEnforcer {
726
717
  private readonly pathProtection;
727
718
  private readonly homeDirectory;
728
719
  private readonly resolveInWorkspace;
720
+ private readonly canonicalizePath;
729
721
  private readonly commandSandbox?;
730
722
  private readonly denials;
731
723
  /** A turn a peer's message started is in progress: the one place the reply to that peer exists. */
@@ -1037,7 +1029,8 @@ declare class Session extends SessionBase {
1037
1029
  private readonly sessionStore?;
1038
1030
  private readonly checkpointHistoryCallback?;
1039
1031
  private readonly hooks?;
1040
- private readonly hookTypeExecutors?;
1032
+ private readonly hookTypeExecutors;
1033
+ private readonly canonicalizePath;
1041
1034
  private readonly onTextDeltaCallback?;
1042
1035
  private readonly onThinkingDeltaCallback?;
1043
1036
  private readonly onContextUpdateCallback?;
@@ -1332,98 +1325,6 @@ declare function decodeSessionLogEntries(entries: unknown, options?: {
1332
1325
  lineNumbers?: readonly number[];
1333
1326
  }): TDecodedSessionLogEntry[];
1334
1327
  //#endregion
1335
- //#region src/external-payload-source-types.d.ts
1336
- /**
1337
- * Leaf type module for {@link IExternalPayloadSource} and {@link ISessionLogSource}.
1338
- *
1339
- * Split out of `session-log-sources.ts` so `external-payload-resolution-contracts.ts` can depend
1340
- * on {@link IExternalPayloadSource} without importing back from `session-log-sources.ts`, which
1341
- * previously created an import cycle between the two.
1342
- */
1343
- /** Workspace-neutral byte source for relative external-payload references. */
1344
- interface IExternalPayloadSource {
1345
- readBytes(relativePath: string, maxBytes: number): Uint8Array | undefined;
1346
- }
1347
- /** Workspace-neutral source for one session-log document and its optional payload source. */
1348
- interface ISessionLogSource {
1349
- readText(): string | undefined;
1350
- readonly externalPayloadSource?: IExternalPayloadSource;
1351
- }
1352
- //#endregion
1353
- //#region src/session-log-sources.d.ts
1354
- /** Explicit host-filesystem adapter. A file path is never accepted by the neutral parser itself. */
1355
- declare class NodeExternalPayloadSource implements IExternalPayloadSource {
1356
- private readonly baseDirectory;
1357
- constructor(baseDirectory: string);
1358
- readBytes(relativePath: string, maxBytes: number): Uint8Array | undefined;
1359
- }
1360
- /** Explicit host-filesystem adapter for a JSONL session log. */
1361
- declare class NodeSessionLogSource implements ISessionLogSource {
1362
- private readonly logFile;
1363
- readonly externalPayloadSource: IExternalPayloadSource;
1364
- constructor(logFile: string);
1365
- readText(): string | undefined;
1366
- }
1367
- //#endregion
1368
- //#region src/tool-result-spill-store.d.ts
1369
- type TToolResultSpillErrorCode = 'invalid-options' | 'unsafe-root' | 'write-failed' | 'missing' | 'expired' | 'invalid-reference' | 'read-failed' | 'cleanup-failed' | 'closed';
1370
- declare class ToolResultSpillError extends Error {
1371
- readonly code: TToolResultSpillErrorCode;
1372
- constructor(code: TToolResultSpillErrorCode);
1373
- }
1374
- interface INodeToolResultSpillStoreOptions {
1375
- /** Host-owned parent; defaults to the operating-system temporary directory. */
1376
- readonly parentDirectory?: string;
1377
- readonly retentionMs?: number;
1378
- readonly now?: () => number;
1379
- /** Receives a fixed, payload-free reason if an idle expiry timer cannot delete a file. */
1380
- readonly onCleanupFailure?: (reason: 'cleanup-failed') => void;
1381
- }
1382
- /** Node host implementation of core's opaque, session-lifetime spill port. */
1383
- declare class NodeToolResultSpillStore implements IToolResultSpillStore {
1384
- private readonly directory;
1385
- private readonly retentionMs;
1386
- private readonly now;
1387
- private readonly onCleanupFailure?;
1388
- private readonly entries;
1389
- private expiryTimer?;
1390
- private closed;
1391
- constructor(options?: INodeToolResultSpillStoreOptions);
1392
- private assertRoot;
1393
- private scheduleExpiry;
1394
- write(content: string): Promise<{
1395
- readonly reference: string;
1396
- }>;
1397
- read(reference: string): Promise<string>;
1398
- private removeEntry;
1399
- cleanupExpired(): Promise<void>;
1400
- shutdown(): Promise<void>;
1401
- }
1402
- //#endregion
1403
- //#region src/prompt-history-file.d.ts
1404
- /** 64 KiB: a few hundred prompts per block — enough for the first frame, small enough to yield often. */
1405
- declare const DEFAULT_PROMPT_HISTORY_BLOCK_BYTES: number;
1406
- interface INodePromptHistoryFileOptions {
1407
- /** An ancestor of the file the host also owns, tightened along with the directory (SEC-020). */
1408
- readonly ownedRoot?: string;
1409
- /** Test seam: the read block size in bytes. */
1410
- readonly blockBytes?: number;
1411
- }
1412
- /** One line → an entry, or `undefined` when the line is not a well-formed entry. */
1413
- declare function parsePromptHistoryLine(line: string): IPromptHistoryEntry | undefined;
1414
- declare class NodePromptHistoryFile implements IPromptHistoryWriter, IPromptHistorySource {
1415
- private readonly path;
1416
- private readonly blockBytes;
1417
- private readonly ownedRoot;
1418
- constructor(path: string, options?: INodePromptHistoryFileOptions);
1419
- append(entry: IPromptHistoryEntry): void;
1420
- /**
1421
- * Newest-first blocks. Only a missing file is the empty state (a fresh install, or history off);
1422
- * any other open or read failure is thrown so the surface renders it instead of an empty list.
1423
- */
1424
- read(options: IPromptHistoryReadOptions): AsyncIterable<IPromptHistoryBlock>;
1425
- }
1426
- //#endregion
1427
1328
  //#region src/external-payload-resolution-contracts.d.ts
1428
1329
  type TSessionLogPayloadResolutionErrorCode = 'INVALID_LIMIT' | 'INVALID_REFERENCE' | 'UNRESOLVED_REFERENCE' | 'OUTSIDE_ROOT' | 'PAYLOAD_NOT_FOUND' | 'STABLE_PAYLOAD_READ_UNAVAILABLE' | 'PAYLOAD_UNREADABLE' | 'BYTE_LENGTH_MISMATCH' | 'SHA256_MISMATCH' | 'INVALID_JSON' | 'MAX_DEPTH_EXCEEDED' | 'MAX_TOTAL_BYTES_EXCEEDED' | 'CIRCULAR_REFERENCE';
1429
1330
  interface ISessionLogPayloadResolutionOptions {
@@ -1496,101 +1397,57 @@ declare function isSafeSessionId(id: string): boolean;
1496
1397
  /** Throw unless `id` is safe to use as a path component. */
1497
1398
  declare function assertSafeSessionId(id: string): void;
1498
1399
  //#endregion
1499
- //#region src/session-store.d.ts
1400
+ //#region src/load-session-for-update.d.ts
1500
1401
  /**
1501
- * Persistent session store backed by individual JSON files.
1402
+ * What a writer should read before it saves, to keep the members of a record it does not own.
1502
1403
  *
1503
- * Construct with a host-owned `baseDir`; framework project composition uses a separate
1504
- * authority-backed adapter over the same neutral port.
1404
+ * `load` is the answer, asked to `hold` the session, since the caller is about to save it: a store
1405
+ * that seals then remembers the record it opened, so the process can keep saving after the keys lock.
1406
+ * Sealing needs only the public key, so a process running a session keeps saving it after the lock —
1407
+ * but `load` then says `locked`, and a writer that stops on that would stop saving the whole
1408
+ * conversation. The store that wrote or holds the record still has that copy, and hands it back for
1409
+ * as long as the file on disk is exactly what it remembers. Anything else stays `locked`, and the
1410
+ * writer refuses.
1505
1411
  */
1506
- declare class NodeSessionStore implements IInteractiveSessionStore$1 {
1507
- private readonly baseDir;
1508
- private readonly ownedRoot;
1509
- /**
1510
- * @param baseDir the directory holding the records.
1511
- * @param ownedRoot an ancestor of `baseDir` the HOST also owns, tightened along with it (SEC-020).
1512
- * Optional because this adapter does not interpret its base directory as a trusted root and must
1513
- * not guess that a parent belongs to the product — which of them do is composition's knowledge.
1514
- * Omitting it leaves a store root an older version created at whatever mode it was given, which
1515
- * is what review of PR #2224 found: the leaf was 0700 and the directory above it was not.
1516
- */
1517
- constructor(baseDir: string, ownedRoot?: string);
1518
- /**
1519
- * Ensure the storage directory exists AND that only its owner can enter it (SEC-020).
1520
- *
1521
- * The `existsSync` guard this replaces is the whole defect. It skipped the case that matters: a
1522
- * directory some earlier version, a shared CI checkout, or another local user left at a wider
1523
- * mode was adopted as ours with no signal. Measured under umask 022 before this change, a fresh
1524
- * sessions directory came out 0755 and its records 0644 — and a directory pre-created at 0777
1525
- * stayed 0777.
1526
- */
1527
- private ensureDir;
1528
- /**
1529
- * Absolute path to a session's JSON file.
1530
- *
1531
- * SEC-006: every public method routes through here, so validating the id at this one point covers
1532
- * `save` (write), `load` (read), and `delete` (unlink) at once.
1533
- *
1534
- * Issue #2240: `assertSafeSessionId` is the guard, and it is sound — no separator, no `.`/`..`
1535
- * can pass it. But it is a regex reject behind a helper, which static analysis does not model as
1536
- * a path sanitizer, so `js/path-injection` re-opened on `load` every time this function changed
1537
- * length. The containment check below is the shape such tools DO recognise: the resolved path
1538
- * must stay inside the resolved base directory. It is unreachable after the assertion and costs
1539
- * one `resolve`; it exists so the guard is visible where the sink is, not to replace the guard.
1540
- */
1541
- private filePath;
1542
- /**
1543
- * Persist a session record to disk atomically (CORE-019).
1544
- * Creates the storage directory if needed.
1545
- *
1546
- * Bytes go to a same-directory temp file first, then move into place with rename —
1547
- * a crash mid-write can therefore never leave a truncated JSON where the previous
1548
- * record used to be. Same-directory is load-bearing: cross-device rename is a copy.
1549
- *
1550
- * SEC-020: the atomic write now comes from `writeOwnerOnlyFile`, which carries the mode from the
1551
- * moment the temp file is created. The hand-rolled version here wrote it at the umask's default
1552
- * and let `rename` carry that mode to the final path, so every record was 0644 — and even setting
1553
- * the mode after the write would leave a window in which the full transcript was world-readable
1554
- * on disk.
1555
- */
1556
- save(session: IInteractiveSessionRecord$1): void;
1557
- /**
1558
- * Load a session by its ID, saying WHICH of the four things happened.
1559
- *
1560
- * `undefined` used to answer all four — never saved, damaged, written by a build this one cannot
1561
- * read, and the read failed — and a caller that meant to preserve fields it does not own then
1562
- * treated "damaged" as "no prior record" and overwrote the file. The outcome type is what removes
1563
- * that, by making the caller answer the question it was not asking.
1564
- */
1565
- load(id: string): TSessionLoadOutcome;
1566
- /**
1567
- * Every session this directory holds, each with what the store concluded about it.
1568
- *
1569
- * Unreadable entries are REPORTED rather than skipped. A store that distinguishes four outcomes on
1570
- * `load` and then hides two of them from the surface a person browses has moved the defect rather
1571
- * than removed it: the difference a user experiences is between "my session vanished" and "my
1572
- * session needs a different build".
1573
- */
1574
- list(): readonly ISessionListEntry[];
1575
- /**
1576
- * The outcome for one directory entry, without letting a bad NAME throw out of `list`.
1577
- *
1578
- * `load` validates the id, because an id reaching it is a caller's value and a malformed one is a
1579
- * bug or an attack (SEC-006). A name read out of the directory is neither: the store did not
1580
- * choose it, and one file it cannot use as an id must not take the whole listing down with it.
1581
- * Routing `list` through `load` made exactly that happen — a single `my session.json` in the
1582
- * sessions directory threw, and the resume picker went with it.
1583
- *
1584
- * Reporting it is the same answer `list` gives for every other file it cannot read, which is the
1585
- * property this work exists to establish.
1586
- */
1587
- private outcomeForListedId;
1588
- /**
1589
- * Delete a session by its ID.
1590
- * No-ops silently if the session does not exist.
1591
- */
1592
- delete(id: string): void;
1412
+ declare function loadSessionForUpdate(store: IInteractiveSessionStore$1, id: string): TSessionLoadOutcome;
1413
+ //#endregion
1414
+ //#region src/sealed-session-refusal.d.ts
1415
+ /**
1416
+ * Why a store refused to replace the file at a session's path: each reason is something the store
1417
+ * saw, not a guess about who wrote what. Fixed text and the session id only.
1418
+ */
1419
+ /** Why a save was refused. */
1420
+ type TSealedSessionRefusal =
1421
+ /** A sealed file it cannot open while the keys are locked, and has no proof it wrote or holds. */
1422
+ 'locked' |
1423
+ /** A sealed file that does not open here: damaged, or sealed with other keys that may still open it. */
1424
+ 'does-not-open' |
1425
+ /** A sealed file it cannot open, and different from the bytes it last wrote or held. */
1426
+ 'changed' |
1427
+ /** A file it could not read, or one too large for it to read back. */
1428
+ 'unreadable' |
1429
+ /** A file sealed in a framing version this build does not open, so written by a newer one. */
1430
+ 'newer-format' |
1431
+ /** A sealed file, and this store seals nothing, so this process has no keys for it at all. */
1432
+ 'no-keys';
1433
+ /**
1434
+ * Thrown by a store's `save` when the file already at that id may be a session nobody here can
1435
+ * read: sealed and not openable by this store, not provably what this store wrote or holds, not
1436
+ * readable at all, or sealed by a newer build. Overwriting would destroy what may be the only copy
1437
+ * of a session — `locked` is intact and a later unlock reads it, and a sealed file that does not open
1438
+ * here may open under other keys — so the save is refused and the file is left exactly as it was.
1439
+ */
1440
+ declare class SealedSessionUnreadableError extends Error {
1441
+ readonly code: "SESSION_SEALED_UNREADABLE";
1442
+ readonly sessionId: string;
1443
+ readonly reason: TSealedSessionRefusal;
1444
+ constructor(sessionId: string, reason: TSealedSessionRefusal);
1593
1445
  }
1446
+ /**
1447
+ * Whether `error` is a {@link SealedSessionUnreadableError}, by `code`: this package ships an ES and
1448
+ * a CommonJS build, and a process that loads both has two classes an `instanceof` cannot match across.
1449
+ */
1450
+ declare function isSealedSessionUnreadableError(error: unknown): error is SealedSessionUnreadableError;
1594
1451
  //#endregion
1595
1452
  //#region src/checkpoint-tree.d.ts
1596
1453
  /**
@@ -1643,7 +1500,8 @@ declare class CheckpointTree {
1643
1500
  /**
1644
1501
  * The chain from `id` up to (and including) the root — nearest first. Empty if `id` is unknown. Only
1645
1502
  * REGISTERED nodes are included: a dangling `parentId` (edge to a node not in the tree — possible on
1646
- * manifest drift/corruption) terminates the walk rather than emitting a phantom id.
1503
+ * manifest drift/corruption) terminates the walk rather than emitting a phantom id, and so does an
1504
+ * edge back to a node already in the chain, which only damaged edges can form.
1647
1505
  */
1648
1506
  ancestors(id: string): string[];
1649
1507
  /** Whether a checkpoint id exists in the tree. */
@@ -1726,5 +1584,5 @@ declare function decodeInteractiveSessionRecord(value: unknown): TSessionRecordD
1726
1584
  */
1727
1585
  declare function decodeVersionedInteractiveSessionRecord(value: unknown): TSessionRecordDecodeOutcome;
1728
1586
  //#endregion
1729
- export { AUTO_COMPACT_THRESHOLD, AutoModeGate, CONSECUTIVE_BLOCK_LIMIT, CheckpointTree, CompactionError, CompactionOrchestrator, ContextWindowTracker, DEFAULT_COMPACTION_PROMPT, DEFAULT_PROMPT_HISTORY_BLOCK_BYTES, FileSessionLogger, type ICheckpointNode, type IClassifiedCall, type IClassifierVerdict, type ICommandSandboxApproval, type IExternalPayloadReference, type IExternalPayloadSink, type IExternalPayloadSource, type IFileSessionLoggerOptions, type IInteractiveSessionRecord, type IInteractiveSessionStore, INTERACTIVE_SESSION_RECORD_KEYS, type INodePromptHistoryFileOptions, type INodeToolResultSpillStoreOptions, type IPermissionAskContext, type IPermissionClassifier, type IPermissionDenial, type IProviderCallTraceObservation, type IProviderEventKey, type ISerializeSessionArtifactOptions, type ISessionLogEntry, type ISessionLogLine, type ISessionLogLoadOptions, type ISessionLogPayloadResolutionErrorMetadata, type ISessionLogPayloadResolutionOptions, type ISessionLogSink, type ISessionLogSource, type ISessionLogger, type ISessionOptions, type ISessionPendingExecution, type ISessionRecord, type ISessionRecoverableRunOptions, type ISessionReplayRecord, type ISessionReplayValidationIssue, type ISessionReplayValidationResult, type ISessionRunOptions, type ISessionShutdownOptions, type ISessionStore, type ISpinner, type ITerminalOutput, type IToolEventKey, type IVersionedInteractiveSessionRecord, NodeExternalPayloadSource, NodePromptHistoryFile, NodeSessionLogSink, NodeSessionLogSource, NodeSessionStore, NodeToolResultSpillStore, PermissionEnforcer, SENSITIVE_KEY_PATTERN, SESSION_LOG_EVENT, SESSION_LOG_SCHEMA_VERSION, SESSION_RECORD_ENVELOPE_VERSION, Session, SessionBusyError, SessionLogDecodeError, SessionLogPayloadResolutionError, SilentSessionLogger, type TAutoCompactThreshold, type TAutoModeJudgement, type TDecodedSessionLogEntry, TOTAL_BLOCK_LIMIT, type TPermissionDenialReason, type TPermissionHandler, type TPermissionRequester, type TPermissionResult, type TScrubbableValue, type TSessionExecutionResult, type TSessionLogData, type TSessionLogDecodeErrorCode, type TSessionLogEventName, type TSessionLogPayloadResolutionErrorCode, type TSessionLogValue, type TSessionRecordDecodeOutcome, type TSessionRecoverableResumeOptions, type TSessionResumeOptions, type TToolResultSpillErrorCode, ToolResultSpillError, TurnClaim, assertSafeSessionId, consentScopeFor, createSessionLogExternalPayloadReference, decodeInteractiveSessionRecord, decodeSessionLogEntries, decodeVersionedInteractiveSessionRecord, deserializeSessionArtifact, formatConversationEntries, isSafeSessionId, isSensitiveKey, isSessionLogEvent, loadSessionLogEntries, parsePromptHistoryLine, replaySessionLogEntries, resolveSessionLogExternalPayloads, scrubSensitiveKeys, serializeSessionArtifact, validateSessionReplayLogEntries };
1587
+ export { AUTO_COMPACT_THRESHOLD, AutoModeGate, CONSECUTIVE_BLOCK_LIMIT, CheckpointTree, CompactionError, CompactionOrchestrator, ContextWindowTracker, DEFAULT_COMPACTION_PROMPT, FileSessionLogger, type ICheckpointNode, type IClassifiedCall, type IClassifierVerdict, type ICommandSandboxApproval, type IExternalPayloadReference, type IExternalPayloadSink, type IExternalPayloadSource, type IFileSessionLoggerOptions, type IInteractiveSessionRecord, type IInteractiveSessionStore, INTERACTIVE_SESSION_RECORD_KEYS, type IPermissionAskContext, type IPermissionClassifier, type IPermissionDenial, type IProviderCallTraceObservation, type IProviderEventKey, type ISerializeSessionArtifactOptions, type ISessionLogEntry, type ISessionLogLine, type ISessionLogLoadOptions, type ISessionLogPayloadResolutionErrorMetadata, type ISessionLogPayloadResolutionOptions, type ISessionLogSink, type ISessionLogSource, type ISessionLogger, type ISessionOptions, type ISessionPendingExecution, type ISessionRecord, type ISessionRecoverableRunOptions, type ISessionReplayRecord, type ISessionReplayValidationIssue, type ISessionReplayValidationResult, type ISessionRunOptions, type ISessionShutdownOptions, type ISessionStore, type ISessionWriterHolder, type ISpinner, type ITerminalOutput, type IToolEventKey, type IVersionedInteractiveSessionRecord, PermissionEnforcer, SENSITIVE_KEY_PATTERN, SESSION_LOG_EVENT, SESSION_LOG_SCHEMA_VERSION, SESSION_RECORD_ENVELOPE_VERSION, SealedSessionUnreadableError, Session, SessionBusyError, SessionClaimedError, SessionLogDecodeError, SessionLogPayloadResolutionError, SilentSessionLogger, type TAutoCompactThreshold, type TAutoModeJudgement, type TDecodedSessionLogEntry, TOTAL_BLOCK_LIMIT, type TPermissionDenialReason, type TPermissionHandler, type TPermissionRequester, type TPermissionResult, type TScrubbableValue, type TSealedSessionRefusal, type TSessionClaimRefusal, type TSessionExecutionResult, type TSessionLogData, type TSessionLogDecodeErrorCode, type TSessionLogEventName, type TSessionLogPayloadResolutionErrorCode, type TSessionLogValue, type TSessionRecordDecodeOutcome, type TSessionRecoverableResumeOptions, type TSessionResumeOptions, TurnClaim, assertSafeSessionId, consentScopeFor, createSessionLogExternalPayloadReference, decodeInteractiveSessionRecord, decodeSessionLogEntries, decodeVersionedInteractiveSessionRecord, deserializeSessionArtifact, formatConversationEntries, isSafeSessionId, isSealedSessionUnreadableError, isSensitiveKey, isSessionClaimedError, isSessionLogEvent, loadSessionForUpdate, loadSessionLogEntries, replaySessionLogEntries, resolveSessionLogExternalPayloads, scrubSensitiveKeys, serializeSessionArtifact, validateSessionReplayLogEntries };
1730
1588
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/context-window-tracker.ts","../src/session-logger.ts","../src/auto-mode-gate.ts","../src/permission-types.ts","../src/session-types.ts","../src/session-resume.ts","../src/session-recoverable.ts","../src/turn-claim.ts","../src/compaction-orchestrator.ts","../src/permission-denial-log.ts","../src/permission-enforcer.ts","../src/session-base.ts","../src/session.ts","../src/consent-scope.ts","../src/conversation-transcript.ts","../src/session-artifact.ts","../src/scrub-sensitive.ts","../src/session-log-events.ts","../src/session-log-entry-types.ts","../src/session-log-codec/index.ts","../src/external-payload-resolution-contracts.ts","../src/external-payload-resolver.ts","../src/session-log-validation.ts","../src/session-log-replay.ts","../src/session-id.ts","../src/load-session-for-update.ts","../src/sealed-session-refusal.ts","../src/checkpoint-tree.ts","../src/session-record-codec/decode-outcome.ts","../src/session-record-codec/record-decoder.ts"],"mappings":"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"}