agent-afk 5.265.2 → 5.266.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/agent/_lib/dir-newest-mtime.d.ts +5 -0
  2. package/dist/agent/dag-subagent.d.ts +2 -1
  3. package/dist/agent/journal/append-queue.d.ts +17 -0
  4. package/dist/agent/journal/blobs.d.ts +14 -0
  5. package/dist/agent/journal/fork.d.ts +1 -0
  6. package/dist/agent/journal/hydrate.d.ts +4 -0
  7. package/dist/agent/journal/index.d.ts +5 -0
  8. package/dist/agent/journal/journal-file.d.ts +37 -0
  9. package/dist/agent/journal/noop.d.ts +3 -0
  10. package/dist/agent/journal/reader.d.ts +24 -0
  11. package/dist/agent/journal/records.d.ts +13 -0
  12. package/dist/agent/journal/spill.d.ts +9 -0
  13. package/dist/agent/journal/sync.d.ts +18 -0
  14. package/dist/agent/journal/types.d.ts +121 -0
  15. package/dist/agent/journal/writer.d.ts +11 -0
  16. package/dist/agent/provider.d.ts +2 -0
  17. package/dist/agent/providers/anthropic-direct/journal-adapter.d.ts +3 -0
  18. package/dist/agent/providers/anthropic-direct/query/session-state.d.ts +4 -0
  19. package/dist/agent/providers/anthropic-direct/query/turn-request.d.ts +1 -0
  20. package/dist/agent/providers/anthropic-direct/query-options.d.ts +1 -0
  21. package/dist/agent/providers/anthropic-direct/query-runtime.d.ts +2 -0
  22. package/dist/agent/providers/anthropic-direct/request-types.d.ts +1 -0
  23. package/dist/agent/providers/openai-compatible/journal-adapter.d.ts +4 -0
  24. package/dist/agent/providers/openai-compatible/query/journal-wiring.d.ts +18 -0
  25. package/dist/agent/providers/openai-compatible/query.d.ts +3 -0
  26. package/dist/agent/providers/router/provider-router.d.ts +2 -0
  27. package/dist/agent/providers/shared/compaction.d.ts +2 -0
  28. package/dist/agent/providers/shared/resume-usage-seed.d.ts +8 -0
  29. package/dist/agent/session/agent-session.d.ts +3 -0
  30. package/dist/agent/session/journal-lifecycle.d.ts +22 -0
  31. package/dist/agent/session/session-config.d.ts +2 -0
  32. package/dist/agent/session/session-reset.d.ts +2 -0
  33. package/dist/agent/session/session-setup.d.ts +1 -0
  34. package/dist/agent/session-sidecar-sweep.d.ts +2 -0
  35. package/dist/agent/session-sidecar-sweep.dirs.d.ts +9 -0
  36. package/dist/agent/subagent/fork-types.d.ts +6 -1
  37. package/dist/agent/tools/compose-executor.d.ts +1 -1
  38. package/dist/agent/tools/nesting.d.ts +2 -1
  39. package/dist/agent/tools/skill-executor/fork-child-config.d.ts +5 -1
  40. package/dist/agent/tools/skill-executor/fork-dispatch.d.ts +2 -0
  41. package/dist/agent/tools/skill-executor/types.d.ts +3 -2
  42. package/dist/agent/tools/subagent/child-config.d.ts +4 -1
  43. package/dist/agent/tools/subagent-executor/types.d.ts +3 -2
  44. package/dist/agent/types/config-types.d.ts +3 -0
  45. package/dist/agent/types/session-types.d.ts +2 -0
  46. package/dist/cli/commands/interactive/turn-handler.completion.d.ts +0 -5
  47. package/dist/cli/commands/interactive/turn-handler.d.ts +0 -1
  48. package/dist/cli/commands/trace-format.d.ts +6 -0
  49. package/dist/cli/commands/trace-results.d.ts +13 -0
  50. package/dist/cli/commands/trace.d.ts +2 -0
  51. package/dist/cli/commit-mode.d.ts +0 -1
  52. package/dist/cli/slash/session-stats.d.ts +1 -2
  53. package/dist/cli/terminal-compositor.commit-geometry.d.ts +0 -1
  54. package/dist/cli/terminal-compositor.commit-phase1.d.ts +0 -1
  55. package/dist/cli/terminal-compositor.commit-route.d.ts +1 -0
  56. package/dist/cli/terminal-compositor.committed-band-commit.d.ts +2 -0
  57. package/dist/cli/terminal-compositor.d.ts +3 -0
  58. package/dist/cli/terminal-compositor.lifecycle.d.ts +5 -0
  59. package/dist/cli/terminal-compositor.lifecycle.suspend-observer.d.ts +8 -0
  60. package/dist/cli/terminal-compositor.lifecycle.suspend-observer.process.d.ts +20 -0
  61. package/dist/cli/terminal-compositor.lifecycle.teardown.d.ts +1 -0
  62. package/dist/cli/terminal-compositor.reset.d.ts +3 -0
  63. package/dist/cli.mjs +466 -441
  64. package/dist/config/env.d.ts +7 -0
  65. package/dist/config/env.session-storage.d.ts +15 -0
  66. package/dist/index.mjs +175 -160
  67. package/dist/paths.d.ts +1 -0
  68. package/dist/paths.journal.d.ts +4 -0
  69. package/dist/telegram.mjs +226 -211
  70. package/dist/web-server/routes.tool-results.d.ts +12 -0
  71. package/dist/web-server/shared/ledger-adapter.d.ts +4 -0
  72. package/dist/web-server/tool-result-text.d.ts +5 -0
  73. package/dist/web-ui-assets/assets/{index-yyhuSaHa.js → index-CpbGrtNj.js} +75 -75
  74. package/dist/web-ui-assets/assets/{index-DA-_KrIR.js → index-MIgeDul2.js} +1 -1
  75. package/dist/web-ui-assets/assets/index-PzcVW5-O.css +1 -0
  76. package/dist/web-ui-assets/index.html +2 -2
  77. package/package.json +1 -1
  78. package/dist/web-ui-assets/assets/index-BMUkERO1.css +0 -1
@@ -0,0 +1,5 @@
1
+ export interface DirStats {
2
+ newestMtimeMs: number;
3
+ bytes: number;
4
+ }
5
+ export declare function newestMtimeAndBytes(dir: string): Promise<DirStats>;
@@ -3,6 +3,7 @@ import type { ContentBlockParam } from '@anthropic-ai/sdk/resources';
3
3
  import type { AgentModelInput, CanUseTool, IAgentSession } from './types.js';
4
4
  import type { ModelProvider } from './provider.js';
5
5
  import type { SubagentManager } from './subagent.js';
6
+ import type { JournalParent } from './subagent/fork-types.js';
6
7
  import { type DAGEdge, type DAGRunResult } from './dag.js';
7
8
  import type { DelegationBudget } from './tools/delegation-budget.js';
8
9
  import type { ImageBlockAttachment } from './content/image-blocks.js';
@@ -32,7 +33,7 @@ export interface SubagentDAGNode {
32
33
  }
33
34
  export interface SubagentDAGOptions {
34
35
  manager: SubagentManager;
35
- parentSession: Pick<IAgentSession, 'sessionId' | 'abortSignal'>;
36
+ parentSession: Pick<IAgentSession, 'sessionId' | 'abortSignal'> & JournalParent;
36
37
  nodes: SubagentDAGNode[];
37
38
  edges: DAGEdge[];
38
39
  failFast?: boolean;
@@ -0,0 +1,17 @@
1
+ export type OnceReporter = (what: string, err?: unknown) => void;
2
+ export declare function createOnceReporter(label: string): OnceReporter;
3
+ export declare class SerialQueue {
4
+ private readonly onError;
5
+ private tail;
6
+ constructor(onError: (err: unknown) => void);
7
+ push(task: () => Promise<void>): void;
8
+ idle(): Promise<void>;
9
+ }
10
+ export declare class JsonlFileAppender {
11
+ readonly path: string;
12
+ private dirReady;
13
+ constructor(path: string);
14
+ write(data: string): Promise<void>;
15
+ private ensureDir;
16
+ private append;
17
+ }
@@ -0,0 +1,14 @@
1
+ import type { BlobRef } from './types.js';
2
+ export interface PendingBlob {
3
+ ref: BlobRef;
4
+ data: Buffer;
5
+ absPath: string;
6
+ }
7
+ export declare function extForMediaType(mediaType: string): string;
8
+ export declare function makePendingBlob(sessionId: string, sha256: string, data: Buffer, mediaType: string): PendingBlob;
9
+ export declare function resolveBlobPath(ref: BlobRef): string | null;
10
+ export declare function readBlob(ref: BlobRef): Buffer | null;
11
+ export declare class BlobStore {
12
+ private readonly inFlight;
13
+ write(blob: PendingBlob): Promise<void>;
14
+ }
@@ -0,0 +1 @@
1
+ export declare function forkJournal(sourceSessionId: string, newSessionId: string): boolean;
@@ -0,0 +1,4 @@
1
+ import type { JournalBlock, JournalMessage, JournalResultPart } from './types.js';
2
+ export declare function hydratePart(p: JournalResultPart): JournalResultPart;
3
+ export declare function hydrateBlock(b: JournalBlock): JournalBlock;
4
+ export declare function hydrateMessage(m: JournalMessage): JournalMessage;
@@ -0,0 +1,5 @@
1
+ export * from './types.js';
2
+ export { JournalSync, type SyncOptions } from './sync.js';
3
+ export { createMessageJournal, isMessageJournalDisabled, type CreateMessageJournalOptions } from './writer.js';
4
+ export { findToolResult, foldJournal, hydrateMessages, journalExists, listSubagentJournals, loadJournalFold, loadJournalMessages, readJournalRecords, type FoldResult, type JournalLocator, } from './reader.js';
5
+ export { forkJournal } from './fork.js';
@@ -0,0 +1,37 @@
1
+ import { type OnceReporter } from './append-queue.js';
2
+ import type { BlobStore } from './blobs.js';
3
+ import { type JournalRecordInput } from './types.js';
4
+ export declare const MAX_BUFFERED_RECORDS = 10000;
5
+ export interface JournalSessionShared {
6
+ getSessionId: () => string | undefined;
7
+ meta: {
8
+ provider?: string;
9
+ model?: string;
10
+ cwd?: string;
11
+ };
12
+ blobs: BlobStore;
13
+ report: OnceReporter;
14
+ }
15
+ export declare class JournalFileWriter {
16
+ private readonly shared;
17
+ readonly subagentId?: string | undefined;
18
+ private readonly writerId;
19
+ private readonly queue;
20
+ private resolved;
21
+ private failed;
22
+ private closed;
23
+ private metaWritten;
24
+ private buffered;
25
+ private bufferedDropped;
26
+ private len;
27
+ constructor(shared: JournalSessionShared, subagentId?: string | undefined);
28
+ get length(): number;
29
+ get isClosed(): boolean;
30
+ record(input: JournalRecordInput): void;
31
+ private recordUnsafe;
32
+ flush(): Promise<void>;
33
+ close(): Promise<void>;
34
+ private tryResolve;
35
+ private enqueue;
36
+ private metaLine;
37
+ }
@@ -0,0 +1,3 @@
1
+ import type { MessageJournal } from './types.js';
2
+ export declare function isMessageJournalDisabled(): boolean;
3
+ export declare const NOOP_JOURNAL: MessageJournal;
@@ -0,0 +1,24 @@
1
+ import type { JournalBlock, JournalMessage, JournalRecord } from './types.js';
2
+ export interface JournalLocator {
3
+ subagentId?: string;
4
+ }
5
+ export interface FoldResult {
6
+ messages: JournalMessage[];
7
+ meta: Extract<JournalRecord, {
8
+ kind: 'meta';
9
+ }> | undefined;
10
+ anomalies: string[];
11
+ }
12
+ export declare function journalExists(sessionId: string, loc?: JournalLocator): boolean;
13
+ export declare function readJournalRecords(sessionId: string, loc?: JournalLocator): JournalRecord[];
14
+ export declare function foldJournal(records: readonly JournalRecord[]): FoldResult;
15
+ export declare function loadJournalFold(sessionId: string, loc?: JournalLocator): FoldResult | null;
16
+ export declare function hydrateMessages(messages: readonly JournalMessage[]): JournalMessage[];
17
+ export declare function loadJournalMessages(sessionId: string, loc?: JournalLocator): JournalMessage[] | null;
18
+ export declare function findToolResult(sessionId: string, toolUseId: string): {
19
+ block: Extract<JournalBlock, {
20
+ type: 'tool_result';
21
+ }>;
22
+ subagentId?: string;
23
+ } | null;
24
+ export declare function listSubagentJournals(sessionId: string): string[];
@@ -0,0 +1,13 @@
1
+ import { type JournalRecord, type JournalRecordInput } from './types.js';
2
+ export declare function parseJournalLine(line: string): JournalRecord | null;
3
+ export interface JournalFileRead {
4
+ exists: boolean;
5
+ records: JournalRecord[];
6
+ malformedLines: number;
7
+ endsWithNewline: boolean;
8
+ }
9
+ export declare function readJournalFile(path: string): JournalFileRead;
10
+ type LengthInput = JournalRecord | JournalRecordInput;
11
+ export declare function nextLength(len: number, rec: LengthInput): number;
12
+ export declare function foldLength(records: readonly LengthInput[]): number;
13
+ export {};
@@ -0,0 +1,9 @@
1
+ import { type PendingBlob } from './blobs.js';
2
+ import type { JournalMessage } from './types.js';
3
+ export declare const SPILL_TEXT_BYTES: number;
4
+ export declare const PREVIEW_CHARS: number;
5
+ export interface SpillResult {
6
+ message: JournalMessage;
7
+ blobs: PendingBlob[];
8
+ }
9
+ export declare function spillMessage(sessionId: string, message: JournalMessage): SpillResult;
@@ -0,0 +1,18 @@
1
+ import type { JournalAdapter, JournalMessage, JournalTruncateReason, MessageJournal } from './types.js';
2
+ export interface SyncOptions {
3
+ reason?: JournalTruncateReason;
4
+ }
5
+ export declare class JournalSync<T> {
6
+ private readonly journal;
7
+ private readonly adapter;
8
+ private committed;
9
+ private lenAfter;
10
+ private seeded;
11
+ constructor(journal: MessageJournal | undefined, adapter: JournalAdapter<T>);
12
+ get enabled(): boolean;
13
+ seed(messages: readonly T[]): void;
14
+ sync(messages: readonly T[], opts?: SyncOptions): void;
15
+ invalidateFrom(index: number): void;
16
+ snapshot(): JournalMessage[];
17
+ private mapAll;
18
+ }
@@ -0,0 +1,121 @@
1
+ export declare const JOURNAL_VERSION: 1;
2
+ export interface BlobRef {
3
+ path: string;
4
+ bytes: number;
5
+ sha256: string;
6
+ mediaType: string;
7
+ }
8
+ export type JournalBinary = {
9
+ kind: 'base64';
10
+ mediaType: string;
11
+ data: string;
12
+ } | {
13
+ kind: 'url';
14
+ url: string;
15
+ } | {
16
+ kind: 'ref';
17
+ ref: BlobRef;
18
+ };
19
+ export type JournalResultPart = {
20
+ type: 'text';
21
+ text: string;
22
+ } | {
23
+ type: 'text_ref';
24
+ ref: BlobRef;
25
+ preview: string;
26
+ } | {
27
+ type: 'image';
28
+ source: JournalBinary;
29
+ } | {
30
+ type: 'document';
31
+ source: JournalBinary;
32
+ title?: string;
33
+ };
34
+ export type JournalBlock = {
35
+ type: 'text';
36
+ text: string;
37
+ } | {
38
+ type: 'text_ref';
39
+ ref: BlobRef;
40
+ preview: string;
41
+ } | {
42
+ type: 'thinking';
43
+ thinking: string;
44
+ signature?: string;
45
+ } | {
46
+ type: 'redacted_thinking';
47
+ data: string;
48
+ } | {
49
+ type: 'tool_use';
50
+ id: string;
51
+ name: string;
52
+ input: unknown;
53
+ } | {
54
+ type: 'tool_result';
55
+ toolUseId: string;
56
+ isError?: boolean;
57
+ content: JournalResultPart[];
58
+ } | {
59
+ type: 'image';
60
+ source: JournalBinary;
61
+ } | {
62
+ type: 'document';
63
+ source: JournalBinary;
64
+ title?: string;
65
+ };
66
+ export interface JournalMessage {
67
+ role: 'user' | 'assistant';
68
+ content: JournalBlock[];
69
+ }
70
+ export type JournalTruncateReason = 'resync' | 'compact' | 'rewind' | 'clear' | 'repair' | 'provider_switch';
71
+ export type JournalMarkLabel = 'compact' | 'rewind' | 'clear' | 'resume' | 'fork' | 'model_switch';
72
+ interface RecordBase {
73
+ v: typeof JOURNAL_VERSION;
74
+ ts: number;
75
+ }
76
+ export type JournalRecord = (RecordBase & {
77
+ kind: 'meta';
78
+ sessionId: string;
79
+ subagentId?: string;
80
+ writerId: string;
81
+ provider?: string;
82
+ model?: string;
83
+ cwd?: string;
84
+ forkedFrom?: {
85
+ sessionId: string;
86
+ length: number;
87
+ };
88
+ }) | (RecordBase & {
89
+ kind: 'append';
90
+ index: number;
91
+ message: JournalMessage;
92
+ }) | (RecordBase & {
93
+ kind: 'truncate';
94
+ length: number;
95
+ reason?: JournalTruncateReason;
96
+ }) | (RecordBase & {
97
+ kind: 'mark';
98
+ label: JournalMarkLabel;
99
+ detail?: Record<string, unknown>;
100
+ });
101
+ export type JournalRecordInput = Omit<Extract<JournalRecord, {
102
+ kind: 'append';
103
+ }>, 'v' | 'ts'> | Omit<Extract<JournalRecord, {
104
+ kind: 'truncate';
105
+ }>, 'v' | 'ts'> | Omit<Extract<JournalRecord, {
106
+ kind: 'mark';
107
+ }>, 'v' | 'ts'>;
108
+ export interface MessageJournal {
109
+ readonly length: number;
110
+ append(index: number, message: JournalMessage): void;
111
+ truncate(length: number, reason?: JournalTruncateReason): void;
112
+ mark(label: JournalMarkLabel, detail?: Record<string, unknown>): void;
113
+ forSubagent(subagentId: string): MessageJournal;
114
+ flush(): Promise<void>;
115
+ close(): Promise<void>;
116
+ }
117
+ export interface JournalAdapter<T> {
118
+ toJournal(message: T): JournalMessage | null;
119
+ fromJournalMessages(messages: readonly JournalMessage[]): T[];
120
+ }
121
+ export {};
@@ -0,0 +1,11 @@
1
+ import type { MessageJournal } from './types.js';
2
+ export { isMessageJournalDisabled } from './noop.js';
3
+ export interface CreateMessageJournalOptions {
4
+ getSessionId: () => string | undefined;
5
+ meta?: {
6
+ provider?: string;
7
+ model?: string;
8
+ cwd?: string;
9
+ };
10
+ }
11
+ export declare function createMessageJournal(opts: CreateMessageJournalOptions): MessageJournal;
@@ -172,6 +172,7 @@ export interface ProviderQuery extends AsyncIterable<ProviderEvent> {
172
172
  compact?(): Promise<ProviderCompactResult>;
173
173
  listRewindTargets?(): RewindTarget[];
174
174
  rewindConversation?(turnIndex: number): Promise<ProviderRewindConversationResult>;
175
+ journalSnapshot?(): import('./journal/types.js').JournalMessage[] | undefined;
175
176
  setCwd?(cwd: string): void;
176
177
  setSystemPrompt?(basePrompt: string | undefined): boolean;
177
178
  setBeforeNextRound?(cb: (() => string | undefined) | undefined): void;
@@ -266,6 +267,7 @@ export interface ProviderCompactResult {
266
267
  microcompaction?: {
267
268
  blocksCleared: number;
268
269
  bytesReclaimed: number;
270
+ firstClearedIndex?: number;
269
271
  };
270
272
  }
271
273
  export interface RewindTarget {
@@ -0,0 +1,3 @@
1
+ import type { MessageParam } from '@anthropic-ai/sdk/resources';
2
+ import type { JournalAdapter } from '../../journal/index.js';
3
+ export declare const anthropicJournalAdapter: JournalAdapter<MessageParam>;
@@ -1,6 +1,7 @@
1
1
  import type { MessageParam } from '@anthropic-ai/sdk/resources';
2
2
  import type { ProviderUsage } from '../../../provider.js';
3
3
  import type { ToolDispatcher } from '../tool-dispatcher.js';
4
+ import { JournalSync, type MessageJournal } from '../../../journal/index.js';
4
5
  export interface SessionState {
5
6
  readonly messages: MessageParam[];
6
7
  currentModel: string;
@@ -11,6 +12,8 @@ export interface SessionState {
11
12
  lastUsage: ProviderUsage | null;
12
13
  closed: boolean;
13
14
  autoCompactThreshold: number | undefined;
15
+ readonly journalSync: JournalSync<MessageParam>;
16
+ readonly messageJournal: MessageJournal | undefined;
14
17
  }
15
18
  export declare function createSessionState(opts: {
16
19
  model: string;
@@ -21,4 +24,5 @@ export declare function createSessionState(opts: {
21
24
  initialMessages?: MessageParam[];
22
25
  autoCompactThreshold?: number;
23
26
  initialUsageInputTokens?: number;
27
+ messageJournal?: MessageJournal;
24
28
  }): SessionState;
@@ -25,6 +25,7 @@ export interface TurnRequestInput {
25
25
  throttleQueue?: RunTurnInput['throttleQueue'];
26
26
  onUsageProgress?: RunTurnInput['onUsageProgress'];
27
27
  beforeNextRound?: RunTurnInput['beforeNextRound'];
28
+ journalSync?: RunTurnInput['journalSync'];
28
29
  }
29
30
  export declare function prepareTurnRequest(input: TurnRequestInput): {
30
31
  decision: FastTurnDecision | undefined;
@@ -11,6 +11,7 @@ export interface AnthropicDirectQueryOptions {
11
11
  toolDispatcher: ToolDispatcher;
12
12
  sessionId?: string;
13
13
  initialMessages?: MessageParam[];
14
+ messageJournal?: import('../../journal/index.js').MessageJournal;
14
15
  initialUsageInputTokens?: number;
15
16
  model: string;
16
17
  requestedModel?: string;
@@ -1,5 +1,6 @@
1
1
  import type { ProviderAccountInfo, ProviderAgentInfo, ProviderCommandInfo, ProviderCompactResult, ProviderContextUsage, ProviderEvent, ProviderMcpServerStatus, ProviderModelInfo, ProviderQuery, ProviderRewindConversationResult, ProviderRewindResult, RewindTarget } from '../../provider.js';
2
2
  import type { AnthropicDirectQueryOptions } from './query-options.js';
3
+ import type { JournalMessage } from '../../journal/index.js';
3
4
  export type { AnthropicDirectQueryOptions } from './query-options.js';
4
5
  export declare class AnthropicDirectQuery implements ProviderQuery {
5
6
  private readonly initSessionId;
@@ -52,6 +53,7 @@ export declare class AnthropicDirectQuery implements ProviderQuery {
52
53
  }): Promise<ProviderRewindResult>;
53
54
  compact(): Promise<ProviderCompactResult>;
54
55
  listRewindTargets(): RewindTarget[];
56
+ journalSnapshot(): JournalMessage[] | undefined;
55
57
  rewindConversation(turnIndex: number): Promise<ProviderRewindConversationResult>;
56
58
  close(): void;
57
59
  }
@@ -24,6 +24,7 @@ export interface RunTurnInput {
24
24
  onUsageProgress?: (usage: ProviderUsage) => void;
25
25
  throttleQueue?: import('./throttle-queue.js').ThrottleQueue;
26
26
  beforeNextRound?: () => string | undefined;
27
+ journalSync?: import('../../journal/index.js').JournalSync<MessageParam>;
27
28
  }
28
29
  export interface AnthropicClientLike {
29
30
  messages: {
@@ -0,0 +1,4 @@
1
+ import type { JournalAdapter } from '../../journal/index.js';
2
+ import type { OpenAIMessage } from './messages.js';
3
+ export declare const INTERRUPTED_TOOL_RESULT: string;
4
+ export declare const openAIJournalAdapter: JournalAdapter<OpenAIMessage>;
@@ -0,0 +1,18 @@
1
+ import type { AgentConfig, ResumeHistoryTurn } from '../../../types/config-types.js';
2
+ import type { ProviderCompactResult, ProviderUsage } from '../../../provider.js';
3
+ import type { OpenAIMessage } from '../messages.js';
4
+ import type { JournalMessage } from '../../../journal/index.js';
5
+ export declare class OpenAIJournalWiring {
6
+ private readonly config;
7
+ private readonly journalSync;
8
+ constructor(config: AgentConfig);
9
+ initialTurns(): OpenAIMessage[];
10
+ resumedUsage(): ProviderUsage | null;
11
+ legacyResumeHistory(): {
12
+ resumeHistory?: ResumeHistoryTurn[];
13
+ };
14
+ afterCompact(turns: readonly OpenAIMessage[], result: ProviderCompactResult): void;
15
+ microcompactFallback(turns: OpenAIMessage[]): ProviderCompactResult | null;
16
+ snapshot(turns: readonly OpenAIMessage[]): JournalMessage[] | undefined;
17
+ sync(turns: readonly OpenAIMessage[], compacted?: boolean): void;
18
+ }
@@ -3,6 +3,7 @@ import type { TraceSink } from '../../trace/index.js';
3
3
  import type { ProviderQuery, ProviderEvent, ProviderUserTurn, ProviderContextUsage, ProviderRewindResult, ProviderModelInfo, ProviderCommandInfo, ProviderAgentInfo, ProviderMcpServerStatus, ProviderAccountInfo, ProviderCompactResult } from '../../provider.js';
4
4
  import { type OpenAIAuthResolution, type AuthResolverDeps } from './auth.js';
5
5
  import type { ToolDispatcher } from '../anthropic-direct/tool-dispatcher.js';
6
+ import { OpenAIJournalWiring } from './query/journal-wiring.js';
6
7
  import { resolveReasoningEffort } from './query/model-params.js';
7
8
  import { type FastTierOptions } from './query/fast-tier-session.js';
8
9
  export { __setRetryBaseDelay } from './query/retry.js';
@@ -39,6 +40,7 @@ export declare class OpenAICompatibleQuery implements ProviderQuery {
39
40
  private readonly traceWriter;
40
41
  private readonly fastTier;
41
42
  private priorTurns;
43
+ private readonly journal;
42
44
  private currentModel;
43
45
  private currentPermissionMode;
44
46
  private responsesCompactionUnavailable;
@@ -70,6 +72,7 @@ export declare class OpenAICompatibleQuery implements ProviderQuery {
70
72
  rewindFiles(_userMessageId: string, _options?: {
71
73
  dryRun?: boolean;
72
74
  }): Promise<ProviderRewindResult>;
75
+ journalSnapshot(): ReturnType<OpenAIJournalWiring['snapshot']>;
73
76
  close(): void;
74
77
  }
75
78
  export declare function buildQueryFromConfig(config: AgentConfig, promptStream: AsyncIterable<ProviderUserTurn>, options?: {
@@ -1,5 +1,6 @@
1
1
  import type { ModelProvider, ProviderQuery, ProviderEvent, ProviderUserTurn, ProviderCommandInfo, ProviderModelInfo, ProviderAgentInfo, ProviderContextUsage, ProviderMcpServerStatus, ProviderAccountInfo, ProviderRewindResult, ProviderRewindConversationResult, ProviderCompactResult, RewindTarget } from '../../provider.js';
2
2
  import type { AgentConfig } from '../../types/config-types.js';
3
+ import type { JournalMessage } from '../../journal/index.js';
3
4
  export interface ProviderRouterDeps {
4
5
  resolveProvider: (model: string | undefined) => ModelProvider;
5
6
  providerNameForModel: (model: string | undefined) => string;
@@ -53,6 +54,7 @@ export declare class ProviderRouter implements ProviderQuery {
53
54
  dryRun?: boolean;
54
55
  }): Promise<ProviderRewindResult>;
55
56
  compact(): Promise<ProviderCompactResult>;
57
+ journalSnapshot(): JournalMessage[] | undefined;
56
58
  listRewindTargets(): RewindTarget[];
57
59
  rewindConversation(turnIndex: number): Promise<ProviderRewindConversationResult>;
58
60
  reloadPlugins(...args: unknown[]): Promise<unknown>;
@@ -20,6 +20,7 @@ export interface ToolResultRef {
20
20
  isPlaceholder: boolean;
21
21
  clear(placeholder: string): void;
22
22
  toolName?: string;
23
+ messageIndex?: number;
23
24
  }
24
25
  export interface MicrocompactOps<M> {
25
26
  listToolResults(messages: ReadonlyArray<M>): ToolResultRef[];
@@ -33,6 +34,7 @@ export interface MicrocompactResult {
33
34
  blocksCleared: number;
34
35
  bytesReclaimed: number;
35
36
  blocksScanned: number;
37
+ firstClearedIndex?: number;
36
38
  }
37
39
  export declare function microcompactToolResults<M>(messages: ReadonlyArray<M>, ops: MicrocompactOps<M>, opts?: MicrocompactOptions): MicrocompactResult;
38
40
  export declare function byteLengthOf(text: string): number;
@@ -0,0 +1,8 @@
1
+ import type { JournalMessage } from '../../journal/types.js';
2
+ import type { ResumeHistoryTurn } from '../../types/config-types.js';
3
+ export declare const BINARY_TOKEN_ESTIMATE = 1600;
4
+ export declare function estimateJournalInputTokens(messages: readonly JournalMessage[]): number;
5
+ export declare function resumeSeedInputTokens(config: {
6
+ resumeHistory?: ResumeHistoryTurn[];
7
+ resumeMessages?: JournalMessage[];
8
+ }): number | undefined;
@@ -5,6 +5,7 @@ import type { ProviderCommandInfo, ProviderCompactResult, ProviderQuery, Provide
5
5
  import type { AccountInfo, AgentConfig, AgentInfo, AgentModelInput, IAgentSession, InputStreamRef, McpServerStatus, Message, ModelInfo, OutputEvent, PermissionMode, ResponseMetadata, RewindFilesResult, SDKControlGetContextUsageResponse, SendMessageOptions, SessionIdentity, SessionMetadata, SessionState, StructuredMessageOptions } from '../types.js';
6
6
  import type { ZodType } from 'zod';
7
7
  import type { ElicitationRequest } from '../types/sdk-types.js';
8
+ import type { MessageJournal } from '../journal/index.js';
8
9
  export declare class AgentSession implements IAgentSession {
9
10
  private readonly ownedTraceWriter;
10
11
  private config;
@@ -26,6 +27,7 @@ export declare class AgentSession implements IAgentSession {
26
27
  private stateManager;
27
28
  private readonly accounting;
28
29
  private readonly ledger;
30
+ private readonly journal;
29
31
  private readonly outputBroadcast;
30
32
  private readonly shutdown;
31
33
  private runner;
@@ -36,6 +38,7 @@ export declare class AgentSession implements IAgentSession {
36
38
  get cwd(): string | undefined;
37
39
  get abortSignal(): AbortSignal;
38
40
  get hookRegistry(): HookRegistry | undefined;
41
+ get messageJournal(): MessageJournal | undefined;
39
42
  abort(reason: string): void;
40
43
  private makeSendDeps;
41
44
  sendMessage(content: string, options?: SendMessageOptions): Promise<Message>;
@@ -0,0 +1,22 @@
1
+ import { type MessageJournal } from '../journal/index.js';
2
+ import type { AgentConfig } from '../types.js';
3
+ export declare function isForkConfig(config: AgentConfig): boolean;
4
+ export declare class JournalLifecycle {
5
+ private readonly getLiveSessionId;
6
+ private journal;
7
+ private owned;
8
+ private gate;
9
+ constructor(getLiveSessionId: () => string | undefined);
10
+ get current(): MessageJournal | undefined;
11
+ open(config: AgentConfig): AgentConfig;
12
+ arm(config: AgentConfig): void;
13
+ closeForReset(): Promise<void>;
14
+ stripForReset(config: AgentConfig): AgentConfig;
15
+ markCleared(): void;
16
+ markModelSwitch(model: string): void;
17
+ flush(): void;
18
+ close(): Promise<void>;
19
+ private freezeGate;
20
+ private resolveGateId;
21
+ private safeLiveId;
22
+ }
@@ -3,6 +3,7 @@ import type { AgentConfig } from '../types.js';
3
3
  import type { ProviderQuery } from '../provider.js';
4
4
  import type { SessionStateManager } from './session-state.js';
5
5
  import type { PlanExitBridge } from './plan-exit-bridge.js';
6
+ import type { JournalLifecycle } from './journal-lifecycle.js';
6
7
  export interface ConfigDeps {
7
8
  getConfig: () => AgentConfig;
8
9
  setConfig: (patch: (prev: AgentConfig) => AgentConfig) => void;
@@ -10,6 +11,7 @@ export interface ConfigDeps {
10
11
  getStateManager: () => SessionStateManager;
11
12
  getPlanExit: () => PlanExitBridge;
12
13
  pushSidebandEvent: (event: OutputEvent) => void;
14
+ getJournal?: () => JournalLifecycle;
13
15
  }
14
16
  export declare function setModel(model: AgentModelInput | undefined, deps: ConfigDeps): Promise<void>;
15
17
  export declare function setPermissionMode(mode: PermissionMode, deps: ConfigDeps): Promise<void>;
@@ -3,6 +3,7 @@ import type { ProviderQuery, ProviderEvent } from '../provider.js';
3
3
  import type { SessionStateManager } from './session-state.js';
4
4
  import type { SessionShutdown } from './session-shutdown.js';
5
5
  import type { LedgerLifecycle } from './ledger-lifecycle.js';
6
+ import type { JournalLifecycle } from './journal-lifecycle.js';
6
7
  export interface ResetDeps {
7
8
  getState: () => SessionState;
8
9
  setState: (s: SessionState) => void;
@@ -12,6 +13,7 @@ export interface ResetDeps {
12
13
  getInitPromise: () => Promise<void> | null;
13
14
  getShutdown: () => SessionShutdown;
14
15
  getLedger: () => LedgerLifecycle;
16
+ getJournal: () => JournalLifecycle;
15
17
  getStateManager: () => SessionStateManager;
16
18
  reinitialize: (patchConfig: (prev: AgentConfig) => AgentConfig) => void;
17
19
  }
@@ -4,3 +4,4 @@ export declare function buildInitialState(config: AgentConfig, resolvedModel: st
4
4
  sessionIdentity: SessionIdentity;
5
5
  metadata: SessionMetadata;
6
6
  };
7
+ export declare function scheduleTopLevelHousekeeping(getActiveLabel: () => string | undefined, getActiveSessionId: () => string | undefined): void;
@@ -5,11 +5,13 @@ export interface SessionSweepResult {
5
5
  evictedAge: number;
6
6
  evictedCount: number;
7
7
  remaining: number;
8
+ evictedDirs: number;
8
9
  }
9
10
  export interface SessionSweepOptions {
10
11
  root?: string;
11
12
  force?: boolean;
12
13
  activeSessionId?: string;
13
14
  _unlink?: (path: string) => Promise<void>;
15
+ _rmDir?: (path: string) => Promise<void>;
14
16
  }
15
17
  export declare function sweepSessionSidecars(opts?: SessionSweepOptions): Promise<SessionSweepResult>;
@@ -0,0 +1,9 @@
1
+ export interface SessionDirSweepOptions {
2
+ root: string;
3
+ now: number;
4
+ maxAgeMs: number;
5
+ graceMs: number;
6
+ activeSessionId?: string;
7
+ _rm?: (path: string) => Promise<void>;
8
+ }
9
+ export declare function sweepSessionDirs(opts: SessionDirSweepOptions): Promise<number>;
@@ -7,12 +7,17 @@ import type { SubagentProgressSink, OutputEvent } from '../types/session-types.j
7
7
  import type { TraceSink } from '../trace/index.js';
8
8
  import type { Surface } from '../awareness/types.js';
9
9
  import type { PhaseRole } from '../tools/nesting.js';
10
+ import type { MessageJournal } from '../journal/index.js';
10
11
  export interface ForkParent {
11
12
  sessionId?: string;
12
13
  id?: string;
14
+ readonly messageJournal?: MessageJournal;
15
+ }
16
+ export interface JournalParent {
17
+ readonly messageJournal?: MessageJournal;
13
18
  }
14
19
  export interface ForkSubagentOptions<T = unknown> {
15
- parent: Pick<IAgentSession, 'sessionId'> & Partial<Pick<IAgentSession, 'getInputStreamRef' | 'abortSignal' | 'hookRegistry'>>;
20
+ parent: Pick<IAgentSession, 'sessionId'> & Partial<Pick<IAgentSession, 'getInputStreamRef' | 'abortSignal' | 'hookRegistry'>> & JournalParent;
16
21
  config: AgentConfig;
17
22
  idPrefix?: string;
18
23
  outputSchema?: ZodType<T>;
@@ -7,7 +7,7 @@ import type { ToolCall, ToolResult } from './types.js';
7
7
  import type { InboundAttachmentReader } from '../content/attachment-registry.js';
8
8
  import type { AgentRegistry } from '../agents/index.js';
9
9
  export interface ComposeExecutorContext {
10
- parentSession: Pick<IAgentSession, 'sessionId' | 'abortSignal'>;
10
+ parentSession: Pick<IAgentSession, 'sessionId' | 'abortSignal'> & import('../subagent/fork-types.js').JournalParent;
11
11
  defaultModel?: AgentModelInput;
12
12
  defaultSubagentModel: AgentModelInput;
13
13
  apiKey?: string;