@robota-sdk/agent-session 3.0.7 → 3.1.2
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 +374 -0
- package/README.md +98 -40
- package/dist/index.cjs +9 -0
- package/dist/{node/index.d.cts → index.d.cts} +100 -242
- package/dist/index.d.cts.map +1 -0
- package/dist/{node/index.d.ts → index.d.ts} +100 -242
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/node.cjs +13 -0
- package/dist/node.d.cts +876 -0
- package/dist/node.d.cts.map +1 -0
- package/dist/node.d.ts +876 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +14 -0
- package/dist/node.js.map +1 -0
- package/dist/session-claims-BQGdD3Fe.cjs +1 -0
- package/dist/session-claims-D-Azmxq6.js +2 -0
- package/dist/session-claims-D-Azmxq6.js.map +1 -0
- package/dist/session-claims-DELiAZkZ.d.cts +145 -0
- package/dist/session-claims-DELiAZkZ.d.cts.map +1 -0
- package/dist/session-claims-DELiAZkZ.d.ts +145 -0
- package/dist/session-claims-DELiAZkZ.d.ts.map +1 -0
- package/package.json +26 -25
- package/dist/node/index.cjs +0 -10
- package/dist/node/index.d.cts.map +0 -1
- package/dist/node/index.d.ts.map +0 -1
- package/dist/node/index.js +0 -11
- package/dist/node/index.js.map +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
273
|
-
hookTypeExecutors
|
|
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
|
-
/**
|
|
456
|
-
|
|
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
|
-
/**
|
|
651
|
-
hookTypeExecutors
|
|
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-
|
|
1400
|
+
//#region src/load-session-for-update.d.ts
|
|
1500
1401
|
/**
|
|
1501
|
-
*
|
|
1402
|
+
* What a writer should read before it saves, to keep the members of a record it does not own.
|
|
1502
1403
|
*
|
|
1503
|
-
*
|
|
1504
|
-
*
|
|
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
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
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,
|
|
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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"}
|