@ponythewhite/base-context 1.0.7 → 1.0.9

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 (138) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/base-context-runtime/pyproject.toml +1 -1
  3. package/dist/base-context-runtime/src/rlm/__init__.py +3 -0
  4. package/dist/base-context-runtime/src/rlm/harness.py +86 -48
  5. package/dist/base-context-runtime/test/test_harness.py +215 -140
  6. package/dist/base-context-runtime/uv.lock +1 -1
  7. package/dist/build-info.json +1 -1
  8. package/dist/bundle/amazon-bedrock.js +3 -3
  9. package/dist/bundle/{anthropic-UV5GZDGU.js → anthropic-5PSCZEER.js} +2 -7
  10. package/dist/bundle/{azure-openai-responses-WSNPXLYC.js → azure-openai-responses-AYTLJR33.js} +2 -2
  11. package/dist/bundle/{bundled-modules-PS66L3IT.js → bundled-modules-5JRM6P4T.js} +5 -5
  12. package/dist/bundle/{chunk-UPVDERMD.js → chunk-2IPDSTDR.js} +11 -9
  13. package/dist/bundle/chunk-D3KOF57W.js +22040 -0
  14. package/dist/bundle/{chunk-VSIYFWYI.js → chunk-KT2BNEPE.js} +21 -8
  15. package/dist/bundle/{chunk-VCW3YDFF.js → chunk-NEHLB7JV.js} +1548 -574
  16. package/dist/bundle/{chunk-KTNETTHI.js → chunk-Q3MBSBEB.js} +3 -101
  17. package/dist/bundle/{chunk-LFPWHI42.js → chunk-QKIFBA7N.js} +2 -2
  18. package/dist/bundle/{chunk-PFROC4EV.js → chunk-VVI3UKGR.js} +12 -9
  19. package/dist/bundle/{cli-main-MMHTK7EB.js → cli-main-YUDBEYE2.js} +4 -4
  20. package/dist/bundle/cli.js +1 -1
  21. package/dist/bundle/{google-T32FMD4G.js → google-HTMCUJ7X.js} +2 -2
  22. package/dist/bundle/{google-vertex-56KP6I3B.js → google-vertex-ZQO65AXF.js} +2 -2
  23. package/dist/bundle/{main-XAIVH4Y7.js → main-ZLGGAAGU.js} +5 -5
  24. package/dist/bundle/{mistral-WGBMYIVU.js → mistral-SB7LU56G.js} +1 -1
  25. package/dist/bundle/{openai-codex-responses-PIV2RQ3G.js → openai-codex-responses-5CEW4VN3.js} +53 -27
  26. package/dist/bundle/{openai-completions-64C3JPR4.js → openai-completions-BAZJQSS2.js} +1 -1
  27. package/dist/bundle/{openai-responses-UI7RSTDV.js → openai-responses-VHOE427P.js} +48 -5
  28. package/dist/core/agent-session.d.ts +9 -1
  29. package/dist/core/agent-session.d.ts.map +1 -1
  30. package/dist/core/agent-session.js +225 -29
  31. package/dist/core/agent-session.js.map +1 -1
  32. package/dist/core/canonical-context.d.ts +8 -0
  33. package/dist/core/canonical-context.d.ts.map +1 -1
  34. package/dist/core/canonical-context.js +37 -5
  35. package/dist/core/canonical-context.js.map +1 -1
  36. package/dist/core/compaction/compaction.d.ts +2 -2
  37. package/dist/core/compaction/compaction.d.ts.map +1 -1
  38. package/dist/core/compaction/compaction.js +31 -13
  39. package/dist/core/compaction/compaction.js.map +1 -1
  40. package/dist/core/context-epoch.d.ts +1 -1
  41. package/dist/core/context-epoch.d.ts.map +1 -1
  42. package/dist/core/context-epoch.js +2 -1
  43. package/dist/core/context-epoch.js.map +1 -1
  44. package/dist/core/extensions/types.d.ts +2 -2
  45. package/dist/core/extensions/types.d.ts.map +1 -1
  46. package/dist/core/extensions/types.js.map +1 -1
  47. package/dist/core/history-index-worker.d.ts.map +1 -1
  48. package/dist/core/history-index-worker.js +29 -8
  49. package/dist/core/history-index-worker.js.map +1 -1
  50. package/dist/core/history-index.d.ts +11 -1
  51. package/dist/core/history-index.d.ts.map +1 -1
  52. package/dist/core/history-index.js +2 -1
  53. package/dist/core/history-index.js.map +1 -1
  54. package/dist/core/inference-coordinator.d.ts +1 -1
  55. package/dist/core/inference-coordinator.d.ts.map +1 -1
  56. package/dist/core/inference-coordinator.js +110 -15
  57. package/dist/core/inference-coordinator.js.map +1 -1
  58. package/dist/core/kernel/bootstrap.d.ts.map +1 -1
  59. package/dist/core/kernel/bootstrap.js +97 -107
  60. package/dist/core/kernel/bootstrap.js.map +1 -1
  61. package/dist/core/kernel/repl-manager.d.ts.map +1 -1
  62. package/dist/core/kernel/repl-manager.js +11 -0
  63. package/dist/core/kernel/repl-manager.js.map +1 -1
  64. package/dist/core/kernel/shared.d.ts +2 -0
  65. package/dist/core/kernel/shared.d.ts.map +1 -1
  66. package/dist/core/kernel/shared.js.map +1 -1
  67. package/dist/core/messages.d.ts.map +1 -1
  68. package/dist/core/messages.js +4 -1
  69. package/dist/core/messages.js.map +1 -1
  70. package/dist/core/prompts/rlm.d.ts.map +1 -1
  71. package/dist/core/prompts/rlm.js +4 -2
  72. package/dist/core/prompts/rlm.js.map +1 -1
  73. package/dist/core/public-context.d.ts.map +1 -1
  74. package/dist/core/public-context.js +16 -0
  75. package/dist/core/public-context.js.map +1 -1
  76. package/dist/core/refinement/refinement.d.ts +19 -5
  77. package/dist/core/refinement/refinement.d.ts.map +1 -1
  78. package/dist/core/refinement/refinement.js +90 -35
  79. package/dist/core/refinement/refinement.js.map +1 -1
  80. package/dist/core/request-view-selection.d.ts +13 -3
  81. package/dist/core/request-view-selection.d.ts.map +1 -1
  82. package/dist/core/request-view-selection.js +239 -101
  83. package/dist/core/request-view-selection.js.map +1 -1
  84. package/dist/core/retained-tool-output.d.ts +28 -0
  85. package/dist/core/retained-tool-output.d.ts.map +1 -0
  86. package/dist/core/retained-tool-output.js +102 -0
  87. package/dist/core/retained-tool-output.js.map +1 -0
  88. package/dist/core/selective-recovery.d.ts +47 -3
  89. package/dist/core/selective-recovery.d.ts.map +1 -1
  90. package/dist/core/selective-recovery.js +428 -109
  91. package/dist/core/selective-recovery.js.map +1 -1
  92. package/dist/core/session-history-index.d.ts +3 -1
  93. package/dist/core/session-history-index.d.ts.map +1 -1
  94. package/dist/core/session-history-index.js +1 -1
  95. package/dist/core/session-history-index.js.map +1 -1
  96. package/dist/core/session-manager.d.ts +2 -0
  97. package/dist/core/session-manager.d.ts.map +1 -1
  98. package/dist/core/session-manager.js +38 -13
  99. package/dist/core/session-manager.js.map +1 -1
  100. package/dist/core/settings-manager.d.ts +5 -0
  101. package/dist/core/settings-manager.d.ts.map +1 -1
  102. package/dist/core/settings-manager.js +3 -0
  103. package/dist/core/settings-manager.js.map +1 -1
  104. package/dist/core/system-prompt.d.ts +3 -1
  105. package/dist/core/system-prompt.d.ts.map +1 -1
  106. package/dist/core/system-prompt.js +3 -3
  107. package/dist/core/system-prompt.js.map +1 -1
  108. package/dist/core/task-frame.d.ts +1 -1
  109. package/dist/core/task-frame.d.ts.map +1 -1
  110. package/dist/core/task-frame.js +21 -1
  111. package/dist/core/task-frame.js.map +1 -1
  112. package/dist/core/task-state-reader.d.ts +10 -2
  113. package/dist/core/task-state-reader.d.ts.map +1 -1
  114. package/dist/core/task-state-reader.js +75 -9
  115. package/dist/core/task-state-reader.js.map +1 -1
  116. package/dist/core/tools/ipython.d.ts +5 -0
  117. package/dist/core/tools/ipython.d.ts.map +1 -1
  118. package/dist/core/tools/ipython.js +59 -17
  119. package/dist/core/tools/ipython.js.map +1 -1
  120. package/dist/core/tools/prime-context.d.ts.map +1 -1
  121. package/dist/core/tools/prime-context.js +1 -1
  122. package/dist/core/tools/prime-context.js.map +1 -1
  123. package/dist/core/view-units.d.ts +4 -0
  124. package/dist/core/view-units.d.ts.map +1 -1
  125. package/dist/core/view-units.js +28 -19
  126. package/dist/core/view-units.js.map +1 -1
  127. package/dist/installer.mjs +98 -77
  128. package/dist/modes/interactive/components/refinement-outcome-message.d.ts.map +1 -1
  129. package/dist/modes/interactive/components/refinement-outcome-message.js.map +1 -1
  130. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  131. package/dist/modes/interactive/interactive-mode.js +5 -5
  132. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  133. package/dist/skills/skill-creator/SKILL.md +18 -1
  134. package/docs/settings.md +45 -0
  135. package/docs/skills.md +77 -2
  136. package/package.json +4 -4
  137. package/skills/skill-creator/SKILL.md +18 -1
  138. package/dist/bundle/chunk-W46VZFI6.js +0 -21681
@@ -97,6 +97,12 @@ export type IndexedTaskEvidence = (TaskEvidenceCursor & {
97
97
  truncated: true;
98
98
  });
99
99
  export interface TaskEvidencePage {
100
+ /** Existing journal incarnation; absent for unbacked synthetic index rows. */
101
+ sourceIdentity?: {
102
+ journalPath: string;
103
+ dev: number;
104
+ ino: number;
105
+ };
100
106
  entries: IndexedTaskEvidence[];
101
107
  indexedThrough: number;
102
108
  coverage: "complete" | "partial";
@@ -333,6 +339,8 @@ export type HistoryIndexRequest = {
333
339
  } | {
334
340
  id: number;
335
341
  action: "page";
342
+ /** Bound examined rows and advance over nonmatches instead of requiring an exact filled page. */
343
+ scan?: boolean;
336
344
  sessionId: string;
337
345
  after: number;
338
346
  limit: number;
@@ -390,7 +398,9 @@ export declare class HistoryIndex {
390
398
  /** Whole-source metadata within a synchronized captured prefix, independent of branch selection. */
391
399
  getSource(sessionId: string, eventId: string, through: number): Promise<IndexedSourceEvent | undefined>;
392
400
  /** Exact ordered page; rejects if 256 candidates cannot establish the page and lookahead. */
393
- page(sessionId: string, after: number, through: number, limit?: number, scope?: HistoryIndexScope): Promise<HistoryIndexPage>;
401
+ page(sessionId: string, after: number, through: number, limit?: number, scope?: HistoryIndexScope, options?: {
402
+ scan?: boolean;
403
+ }): Promise<HistoryIndexPage>;
394
404
  /** Selection and text-coverage scans each reject after 256 unresolved candidates. */
395
405
  search(sessionId: string, query: string, through: number, limit?: number, scope?: HistoryIndexScope): Promise<HistoryIndexPage>;
396
406
  /** Selection and import-loss scans each have a 256-candidate exact-or-refuse budget. */
@@ -1 +1 @@
1
- {"version":3,"file":"history-index.d.ts","sourceRoot":"","sources":["../../src/core/history-index.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ChildProcess, fork } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { homedir, tmpdir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { getPackageDir } from \"../config.js\";\nimport { assertProductStatePath } from \"../runtime-paths.js\";\nimport type { CanonicalPayloadCursor, CanonicalPayloadFragment } from \"./canonical-payload-parts.js\";\nimport type { CatalogSourceIdentity } from \"./history-source.js\";\nimport type { JournalFrameRetention, NativeEntryQualification } from \"./journal-frame.js\";\nimport type { SessionCatalogProjection } from \"./session-info-projection.js\";\nimport type { SessionJournalState } from \"./session-journal-owner.js\";\nimport type { TaskStateProjection, TaskStateSourceRef } from \"./task-state.js\";\n\n/** Derived metadata only. Exact evidence remains at the canonical source locator. */\nexport interface IndexedSourceEvent {\n\tid: string;\n\tsequence: number;\n\tparentId: string | null;\n\tkind: string;\n\tauthority: \"user\" | \"runtime\" | \"assistant\" | \"imported\" | \"unrecorded\";\n\tlocator: { path: string; offset: number; length: number };\n\trevision: string;\n\t/** Decoded frame qualifier, never a claim inside the payload. */\n\tretention?: JournalFrameRetention;\n\t/** Positive qualification comes only from synchronized canonical frame control. */\n\tqualification?: NativeEntryQualification;\n\ttext: string;\n\ttextComplete: boolean;\n}\n\nexport interface HistoryIndexPage {\n\tevents: IndexedSourceEvent[];\n\tindexedThrough: number;\n\tcoverage: \"complete\" | \"partial\";\n\ttruncated: boolean;\n\tnextAfter: number | null;\n}\n\nexport interface HistoryIndexFrontier extends SessionJournalState {\n\tformat: \"framed\";\n\tindexedThrough: number;\n}\n\nexport interface HistoryIndexScope {\n\tleafId: string | null;\n}\n\n/** Whole-source facts for exactly the current indexed owner snapshot, not an older prefix. */\nexport interface SourceBootstrapState {\n\tleaf: IndexedSourceEvent | null;\n\tsessionInfo: IndexedSourceEvent | null;\n\tsessionState: IndexedSourceEvent | null;\n\tcompactionCount: number;\n\t/** Position in the optional initial model/thinking/tier content prefix. */\n\tcontentPrefix: number;\n\thasUserContent: boolean;\n}\n\nexport type SessionCatalogIndexResult =\n\t| { selection: \"unavailable\" | \"stale\" | \"unsupported\"; reason: string }\n\t| {\n\t\t\tselection: \"covered\";\n\t\t\tfrontier: HistoryIndexFrontier;\n\t\t\tprojection: SessionCatalogProjection;\n\t\t\trefs: {\n\t\t\t\tfirstMessage: IndexedSourceEvent | null;\n\t\t\t\tname: IndexedSourceEvent | null;\n\t\t\t\tagentStatus: IndexedSourceEvent | null;\n\t\t\t};\n\t };\n\n/** Captured parent-chain state. Values remain in the referenced canonical payloads. */\nexport interface BranchBootstrapState {\n\tmodel: IndexedSourceEvent | null;\n\tthinkingLevel: IndexedSourceEvent | null;\n\tserviceTier: IndexedSourceEvent | null;\n\tgoalState: IndexedSourceEvent | null;\n\trlmMaxDepth: IndexedSourceEvent | null;\n\tlatestCompaction: IndexedSourceEvent | null;\n\tcontextUsageAssistant: IndexedSourceEvent | null;\n\tgitState: IndexedSourceEvent | null;\n\tagentStatus: IndexedSourceEvent | null;\n\thasContextMessages: boolean;\n\t/** Exact message-entry presence, independent of payload truthiness. */\n\thasBranchMessage: boolean;\n\tgoalSeedable: boolean;\n}\n\nexport interface TaskEvidenceCursor {\n\tsequence: number;\n\tordinal: number;\n}\nexport interface TaskEvidenceOptions {\n\ttaskKey?: string;\n\tafter?: TaskEvidenceCursor | null;\n\tlimit?: number;\n\titemId?: string;\n}\nexport type IndexedTaskEvidence =\n\t| (TaskEvidenceCursor & { projection: TaskStateProjection; truncated: false })\n\t| (TaskEvidenceCursor & { source: TaskStateSourceRef; itemId?: string; itemIdOmitted?: true; truncated: true });\nexport interface TaskEvidencePage {\n\tentries: IndexedTaskEvidence[];\n\tindexedThrough: number;\n\tcoverage: \"complete\" | \"partial\";\n\t/** A structured-evidence slice, never exhaustive semantic requirement extraction. */\n\tstructuredOnly: true;\n\tselective: true;\n\ttruncated: boolean;\n\tnextAfter: TaskEvidenceCursor | null;\n}\n\nexport interface ContextManifestCursor {\n\tversion: 1;\n\tsessionId: string;\n\tjournalPath: string;\n\tdev: number;\n\tino: number;\n\tleafId: string | null;\n\tthrough: number;\n\tthroughRevision: string;\n\tnextOrdinal: number;\n}\n\n/** Exact canonical source ref, not a decoded message or provider-ordered item. */\nexport interface ContextRef {\n\tentryId: string;\n\tsequence: number;\n\t/** Source classification, not authority inferred from rendered message text. */\n\tauthority?: IndexedSourceEvent[\"authority\"];\n\t/** Canonical frame control, never projected from message/details payloads. */\n\tqualification?: NativeEntryQualification;\n\tretention?: JournalFrameRetention;\n\tkind: \"message\" | \"custom_message\" | \"branch_summary\" | \"compaction\";\n\tlocator: IndexedSourceEvent[\"locator\"];\n\trevision: string;\n}\nexport interface ContextManifestOptions {\n\tcursor?: ContextManifestCursor;\n\tlimit?: number;\n}\n\nexport interface ParentPathCursor {\n\tversion: 1;\n\tsessionId: string;\n\tjournalPath: string;\n\tdev: number;\n\tino: number;\n\tleafId: string | null;\n\tthrough: number;\n\tthroughRevision: string;\n\t/** Zero-based depth of the next entry on the captured parent path. */\n\tnextDepth: number;\n}\nexport interface ParentPathOptions {\n\tcursor?: ParentPathCursor;\n\tlimit?: number;\n}\nexport interface ParentPathPage {\n\tevents: IndexedSourceEvent[];\n\tnextCursor: ParentPathCursor | null;\n\ttotalEntries: number;\n}\nexport type ContextManifestPage =\n\t| {\n\t\t\tselection: \"known\";\n\t\t\tsummaryRef: ContextRef | null;\n\t\t\tactiveBase: number;\n\t\t\tretainedMessageCount: number;\n\t\t\tactiveMessageCount: number;\n\t\t\trefs: (ContextRef & { ordinal: number })[];\n\t\t\torder: \"source\";\n\t\t\tnextCursor: ContextManifestCursor | null;\n\t }\n\t| {\n\t\t\tselection: \"unresolved-lineage\" | \"invalid-first-kept\";\n\t\t\tsummaryRef: ContextRef | null;\n\t\t\trefs: [];\n\t\t\torder: \"source\";\n\t\t\tnextCursor: null;\n\t };\n\nexport type ContextUpdateTarget =\n\t| { kind: \"assistant-usage\"; targetId: string }\n\t| { kind: \"ipython-sent-message\"; toolCallId: string };\n\n/** A related canonical record, not a copied usage value or sent message. */\nexport interface ContextUpdateRef extends Omit<ContextRef, \"kind\"> {\n\tkind: \"child_usage_attributed\" | \"custom\";\n}\nexport interface ContextUpdates {\n\trefs: ContextUpdateRef[];\n\torder: \"source\";\n}\n\nexport interface IpythonSentMessagesCursor {\n\tversion: 1;\n\tsessionId: string;\n\tjournalPath: string;\n\tdev: number;\n\tino: number;\n\tleafId: string | null;\n\tthrough: number;\n\tthroughRevision: string;\n\ttoolCallId: string;\n\tmessageId: string | null;\n\t/** Last examined source sequence; empty pages can still make bounded progress. */\n\tafter: number;\n}\nexport interface IpythonSentMessagesOptions {\n\tmessageId?: string;\n\tcursor?: IpythonSentMessagesCursor;\n\tlimit?: number;\n}\nexport interface IpythonSentMessagesPage {\n\trefs: ContextUpdateRef[];\n\tnextCursor: IpythonSentMessagesCursor | null;\n}\n\nexport interface HistoryPayloadReadOptions {\n\tcursor?: CanonicalPayloadCursor;\n\tmaxBytes?: number;\n}\n\nexport type HistoryIndexRequest =\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"ipython_sent_messages\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\ttoolCallId: string;\n\t\t\toptions: IpythonSentMessagesOptions;\n\t }\n\t| { id: number; action: \"current_source_bootstrap\"; sessionId: string; snapshot: SessionJournalState }\n\t| { id: number; action: \"catalog\"; sessionId: string; source: CatalogSourceIdentity }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"source_label\" | \"source_assistant_usage\";\n\t\t\tsessionId: string;\n\t\t\ttargetId: string;\n\t\t\tthrough: number;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"parent_path\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\toptions: ParentPathOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"branch_bootstrap\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"context_updates\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\ttarget: ContextUpdateTarget;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"read_context_update_payload\";\n\t\t\tsessionId: string;\n\t\t\teventId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\ttarget: ContextUpdateTarget;\n\t\t\toptions: HistoryPayloadReadOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"context_manifest\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\toptions: ContextManifestOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"read_payload\";\n\t\t\tsessionId: string;\n\t\t\teventId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\toptions: HistoryPayloadReadOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"task_evidence\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\toptions: TaskEvidenceOptions;\n\t }\n\t| { id: number; action: \"sync_source\"; sessionId: string; snapshot: SessionJournalState }\n\t| { id: number; action: \"apply\"; sessionId: string; events: IndexedSourceEvent[]; committedThrough: number }\n\t| { id: number; action: \"get\"; sessionId: string; eventId: string; scope?: HistoryIndexScope & { through: number } }\n\t| { id: number; action: \"get_source\"; sessionId: string; eventId: string; through: number }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"read_source_payload\";\n\t\t\tsessionId: string;\n\t\t\teventId: string;\n\t\t\tthrough: number;\n\t\t\toptions: HistoryPayloadReadOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"page\";\n\t\t\tsessionId: string;\n\t\t\tafter: number;\n\t\t\tlimit: number;\n\t\t\tthrough: number;\n\t\t\tscope?: HistoryIndexScope;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"search\";\n\t\t\tsessionId: string;\n\t\t\tquery: string;\n\t\t\tlimit: number;\n\t\t\tthrough: number;\n\t\t\tscope?: HistoryIndexScope;\n\t }\n\t| { id: number; action: \"clear\"; sessionId: string }\n\t| { id: number; action: \"close\" };\n\nexport class HistoryIndexUnsupportedError extends Error {}\n\ntype Response =\n\t| { id: number; result?: unknown; error?: string }\n\t| { ready: true }\n\t| { startupError: string; unsupported: boolean };\nconst MAX_PENDING_BYTES = 4 * 1024 * 1024;\nconst MAX_REQUEST_BYTES = 2 * 1024 * 1024;\n\nfunction workerPath(): string {\n\tconst candidates = [\n\t\tfileURLToPath(new URL(\"./history-index-worker.js\", import.meta.url)),\n\t\tfileURLToPath(new URL(\"./history-index-worker.ts\", import.meta.url)),\n\t\tjoin(getPackageDir(), \"dist\", \"core\", \"history-index-worker.js\"),\n\t\tjoin(dirname(process.execPath), \"core\", \"history-index-worker.js\"),\n\t\tjoin(dirname(process.execPath), \"history-index-worker.js\"),\n\t];\n\tconst path = candidates.find((candidate) => existsSync(candidate));\n\tif (!path) throw new Error(\"Base Context history-index worker payload is missing\");\n\treturn path;\n}\n\n/** One bounded IPC queue; all SQLite work runs outside the agent/UI event loop. */\nexport class HistoryIndex {\n\tprivate child: ChildProcess;\n\tprivate nextId = 1;\n\tprivate pendingBytes = 0;\n\tprivate closed = false;\n\tprivate closing = false;\n\tprivate closePromise: Promise<void> | undefined;\n\tprivate exited: Promise<void>;\n\tprivate settled: Promise<void> = Promise.resolve();\n\tprivate pending = new Map<\n\t\tnumber,\n\t\t{ bytes: number; resolve: (result: unknown) => void; reject: (error: Error) => void }\n\t>();\n\tprivate ready: Promise<void>;\n\n\tstatic async open(\n\t\tpath: string,\n\t\toptions: { nodeExecutable?: string; readOnly?: boolean } = {},\n\t): Promise<HistoryIndex> {\n\t\tconst index = new HistoryIndex(path, options);\n\t\ttry {\n\t\t\tawait index.ready;\n\t\t\treturn index;\n\t\t} catch (error) {\n\t\t\tawait index.close().catch(() => undefined);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate constructor(path: string, options: { nodeExecutable?: string; readOnly?: boolean }) {\n\t\tassertProductStatePath(path);\n\t\tconst entrypoint = workerPath();\n\t\tconst nodeExecutable = options.nodeExecutable ?? (\"bun\" in process.versions ? \"node\" : process.execPath);\n\t\tthis.child = fork(entrypoint, options.readOnly ? [path, \"--read-only\"] : [path], {\n\t\t\texecPath: nodeExecutable,\n\t\t\texecArgv: [\n\t\t\t\t\"--experimental-sqlite\",\n\t\t\t\t\"--disable-warning=ExperimentalWarning\",\n\t\t\t\t...(entrypoint.endsWith(\".ts\") ? [\"--import\", import.meta.resolve(\"tsx\")] : []),\n\t\t\t],\n\t\t\tstdio: [\"ignore\", \"ignore\", \"pipe\", \"ipc\"],\n\t\t\tenv: {\n\t\t\t\tPATH: process.env.PATH,\n\t\t\t\tHOME: homedir(),\n\t\t\t\tTMPDIR: tmpdir(),\n\t\t\t\tSYSTEMROOT: process.env.SYSTEMROOT,\n\t\t\t\tWINDIR: process.env.WINDIR,\n\t\t\t},\n\t\t});\n\t\tthis.exited = new Promise<void>((resolveExit) => {\n\t\t\tthis.child.once(\"exit\", () => resolveExit());\n\t\t\tthis.child.once(\"close\", () => resolveExit());\n\t\t});\n\t\tlet diagnostics = \"\";\n\t\tthis.child.stderr?.on(\"data\", (data: Buffer) => {\n\t\t\tdiagnostics = (diagnostics + data.toString()).slice(-8192);\n\t\t});\n\t\tlet readyResolve = () => {};\n\t\tlet readyReject: (error: Error) => void = () => {};\n\t\tthis.ready = new Promise<void>((resolve, reject) => {\n\t\t\treadyResolve = resolve;\n\t\t\treadyReject = reject;\n\t\t});\n\t\tconst fail = (error: Error) => {\n\t\t\tthis.closed = true;\n\t\t\treadyReject(error);\n\t\t\tfor (const request of this.pending.values()) request.reject(error);\n\t\t\tthis.pending.clear();\n\t\t\tthis.pendingBytes = 0;\n\t\t};\n\t\tthis.child.on(\"error\", (error) => {\n\t\t\tfail(error);\n\t\t\tthis.child.kill();\n\t\t});\n\t\tthis.child.on(\"disconnect\", () => {\n\t\t\tfail(new Error(\"History-index worker disconnected\"));\n\t\t\tif (!this.closing) this.child.kill();\n\t\t});\n\t\tthis.child.on(\"exit\", (code) =>\n\t\t\tfail(new Error(`History-index worker exited (${code})${diagnostics ? `: ${diagnostics}` : \"\"}`)),\n\t\t);\n\t\tthis.child.on(\"message\", (message: Response) => {\n\t\t\tif (\"startupError\" in message) {\n\t\t\t\tfail(\n\t\t\t\t\tmessage.unsupported\n\t\t\t\t\t\t? new HistoryIndexUnsupportedError(message.startupError)\n\t\t\t\t\t\t: new Error(message.startupError),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (\"ready\" in message) {\n\t\t\t\treadyResolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst request = this.pending.get(message.id);\n\t\t\tif (!request) return;\n\t\t\tthis.pending.delete(message.id);\n\t\t\tthis.pendingBytes -= request.bytes;\n\t\t\tif (message.error) request.reject(new Error(message.error));\n\t\t\telse request.resolve(message.result);\n\t\t});\n\t}\n\n\tprivate async request(message: HistoryIndexRequest): Promise<unknown> {\n\t\tif (this.closed || (this.closing && message.action !== \"close\")) throw new Error(\"History index is closed\");\n\t\tif (\n\t\t\t(\"sessionId\" in message && message.sessionId.length > 512) ||\n\t\t\t((message.action === \"get\" ||\n\t\t\t\tmessage.action === \"get_source\" ||\n\t\t\t\tmessage.action === \"read_source_payload\" ||\n\t\t\t\tmessage.action === \"read_payload\" ||\n\t\t\t\tmessage.action === \"read_context_update_payload\") &&\n\t\t\t\tmessage.eventId.length > 512) ||\n\t\t\t((message.action === \"source_label\" || message.action === \"source_assistant_usage\") &&\n\t\t\t\tmessage.targetId.length > 512) ||\n\t\t\t(message.action === \"ipython_sent_messages\" &&\n\t\t\t\t(message.toolCallId.length > 8192 ||\n\t\t\t\t\t(message.options.messageId !== undefined && message.options.messageId.length > 8192))) ||\n\t\t\t(message.action === \"search\" && message.query.length > 8192)\n\t\t) {\n\t\t\tthrow new Error(\"History-index request field limit exceeded\");\n\t\t}\n\t\tconst bytes = Buffer.byteLength(JSON.stringify(message));\n\t\tif (bytes > MAX_REQUEST_BYTES || this.pendingBytes + bytes > MAX_PENDING_BYTES || this.pending.size >= 32) {\n\t\t\tthrow new Error(\"History-index queue limit reached; await pending work before admitting more\");\n\t\t}\n\t\tthis.pendingBytes += bytes;\n\t\tconst result = new Promise<unknown>((resolve, reject) => {\n\t\t\tthis.pending.set(message.id, { bytes, resolve, reject });\n\t\t});\n\t\tthis.settled = Promise.allSettled([this.settled, result]).then(() => undefined);\n\t\ttry {\n\t\t\tawait this.ready;\n\t\t\tthis.child.send(message, (error) => {\n\t\t\t\tif (!error) return;\n\t\t\t\tconst request = this.pending.get(message.id);\n\t\t\t\tif (!request) return;\n\t\t\t\tthis.pending.delete(message.id);\n\t\t\t\tthis.pendingBytes -= request.bytes;\n\t\t\t\trequest.reject(error);\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconst request = this.pending.get(message.id);\n\t\t\tif (request) {\n\t\t\t\tthis.pending.delete(message.id);\n\t\t\t\tthis.pendingBytes -= request.bytes;\n\t\t\t\trequest.reject(error instanceof Error ? error : new Error(String(error)));\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tasync apply(sessionId: string, events: IndexedSourceEvent[], committedThrough: number): Promise<void> {\n\t\tif (events.length > 128) throw new Error(\"Index batch limit exceeded\");\n\t\tlet bytes = 1024;\n\t\tconst snapshots = events.map((event) => {\n\t\t\tif (\n\t\t\t\t!event.id ||\n\t\t\t\tevent.id.length > 512 ||\n\t\t\t\t(event.parentId?.length ?? 0) > 512 ||\n\t\t\t\tevent.kind.length > 128 ||\n\t\t\t\tevent.revision.length > 512 ||\n\t\t\t\tevent.text.length > 8192 ||\n\t\t\t\tevent.locator.path.length > 4096\n\t\t\t) {\n\t\t\t\tthrow new Error(\"Index record limit exceeded; use bounded source parts\");\n\t\t\t}\n\t\t\t// Copy the allowlisted metadata, not extra fields or a mutable source object.\n\t\t\tconst snapshot: IndexedSourceEvent = {\n\t\t\t\tid: event.id,\n\t\t\t\tsequence: event.sequence,\n\t\t\t\tparentId: event.parentId,\n\t\t\t\tkind: event.kind,\n\t\t\t\tauthority: event.authority,\n\t\t\t\trevision: event.revision,\n\t\t\t\t...(event.retention === undefined ? {} : { retention: event.retention }),\n\t\t\t\ttext: event.text,\n\t\t\t\ttextComplete: event.textComplete,\n\t\t\t\tlocator: { path: event.locator.path, offset: event.locator.offset, length: event.locator.length },\n\t\t\t};\n\t\t\tbytes += Buffer.byteLength(JSON.stringify(snapshot)) + 1;\n\t\t\tif (bytes > MAX_REQUEST_BYTES) throw new Error(\"Index batch byte limit exceeded\");\n\t\t\treturn snapshot;\n\t\t});\n\t\tawait this.request({ id: this.nextId++, action: \"apply\", sessionId, events: snapshots, committedThrough });\n\t}\n\tasync syncSource(sessionId: string, snapshot: SessionJournalState): Promise<HistoryIndexFrontier> {\n\t\tconst target: SessionJournalState = {\n\t\t\tjournalPath: snapshot.journalPath,\n\t\t\tnextSequence: snapshot.nextSequence,\n\t\t\tformat: snapshot.format,\n\t\t\tbyteLength: snapshot.byteLength,\n\t\t\tchecksum: snapshot.checksum,\n\t\t\tdev: snapshot.dev,\n\t\t\tino: snapshot.ino,\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"sync_source\",\n\t\t\tsessionId,\n\t\t\tsnapshot: target,\n\t\t})) as HistoryIndexFrontier;\n\t}\n\t/** One read-only SQLite snapshot, checked against current source descriptor/frontier identity. */\n\tasync readSessionCatalog(sessionId: string, source: CatalogSourceIdentity): Promise<SessionCatalogIndexResult> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"catalog\",\n\t\t\tsessionId,\n\t\t\tsource: { ...source },\n\t\t})) as SessionCatalogIndexResult;\n\t}\n\t/** Current whole-source bootstrap; equality with this exact owner snapshot is required. */\n\tasync currentSourceBootstrap(sessionId: string, snapshot: SessionJournalState): Promise<SourceBootstrapState> {\n\t\tconst target: SessionJournalState = {\n\t\t\tjournalPath: snapshot.journalPath,\n\t\t\tnextSequence: snapshot.nextSequence,\n\t\t\tformat: snapshot.format,\n\t\t\tbyteLength: snapshot.byteLength,\n\t\t\tchecksum: snapshot.checksum,\n\t\t\tdev: snapshot.dev,\n\t\t\tino: snapshot.ino,\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"current_source_bootstrap\",\n\t\t\tsessionId,\n\t\t\tsnapshot: target,\n\t\t})) as SourceBootstrapState;\n\t}\n\t/** Latest label control for this source target, including a clear. */\n\tasync sourceLabel(sessionId: string, targetId: string, through: number): Promise<IndexedSourceEvent | undefined> {\n\t\treturn (await this.request({ id: this.nextId++, action: \"source_label\", sessionId, targetId, through })) as\n\t\t\t| IndexedSourceEvent\n\t\t\t| undefined;\n\t}\n\t/** Latest stored source aggregate, without validating or replacing its payload. */\n\tasync sourceAssistantUsage(\n\t\tsessionId: string,\n\t\ttargetId: string,\n\t\tthrough: number,\n\t): Promise<IndexedSourceEvent | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"source_assistant_usage\",\n\t\t\tsessionId,\n\t\t\ttargetId,\n\t\t\tthrough,\n\t\t})) as IndexedSourceEvent | undefined;\n\t}\n\tasync get(\n\t\tsessionId: string,\n\t\teventId: string,\n\t\tscope?: HistoryIndexScope & { through: number },\n\t): Promise<IndexedSourceEvent | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"get\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\t...(scope ? { scope: { leafId: scope.leafId, through: scope.through } } : {}),\n\t\t})) as IndexedSourceEvent | undefined;\n\t}\n\t/** Whole-source metadata within a synchronized captured prefix, independent of branch selection. */\n\tasync getSource(sessionId: string, eventId: string, through: number): Promise<IndexedSourceEvent | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"get_source\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\tthrough,\n\t\t})) as IndexedSourceEvent | undefined;\n\t}\n\t/** Exact ordered page; rejects if 256 candidates cannot establish the page and lookahead. */\n\tasync page(\n\t\tsessionId: string,\n\t\tafter: number,\n\t\tthrough: number,\n\t\tlimit = 64,\n\t\tscope?: HistoryIndexScope,\n\t): Promise<HistoryIndexPage> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"page\",\n\t\t\tsessionId,\n\t\t\tafter,\n\t\t\tthrough,\n\t\t\tlimit,\n\t\t\t...(scope ? { scope: { leafId: scope.leafId } } : {}),\n\t\t})) as HistoryIndexPage;\n\t}\n\t/** Selection and text-coverage scans each reject after 256 unresolved candidates. */\n\tasync search(\n\t\tsessionId: string,\n\t\tquery: string,\n\t\tthrough: number,\n\t\tlimit = 16,\n\t\tscope?: HistoryIndexScope,\n\t): Promise<HistoryIndexPage> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"search\",\n\t\t\tsessionId,\n\t\t\tquery,\n\t\t\tthrough,\n\t\t\tlimit,\n\t\t\t...(scope ? { scope: { leafId: scope.leafId } } : {}),\n\t\t})) as HistoryIndexPage;\n\t}\n\t/** Selection and import-loss scans each have a 256-candidate exact-or-refuse budget. */\n\tasync taskEvidence(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\toptions: TaskEvidenceOptions = {},\n\t): Promise<TaskEvidencePage> {\n\t\tconst selection: TaskEvidenceOptions = {\n\t\t\t...(options.after ? { after: { sequence: options.after.sequence, ordinal: options.after.ordinal } } : {}),\n\t\t\tlimit: options.limit ?? 64,\n\t\t\t...(options.itemId !== undefined ? { itemId: options.itemId } : {}),\n\t\t\t...(options.taskKey !== undefined ? { taskKey: options.taskKey } : {}),\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"task_evidence\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: selection,\n\t\t})) as TaskEvidencePage;\n\t}\n\t/** Chronological pages of the exact parent chain, never attached request evidence. */\n\tasync parentPath(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\toptions: ParentPathOptions = {},\n\t): Promise<ParentPathPage> {\n\t\tconst cursor = options.cursor;\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"parent_path\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: {\n\t\t\t\t...(cursor\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tcursor: {\n\t\t\t\t\t\t\t\tversion: cursor.version,\n\t\t\t\t\t\t\t\tsessionId: cursor.sessionId,\n\t\t\t\t\t\t\t\tjournalPath: cursor.journalPath,\n\t\t\t\t\t\t\t\tdev: cursor.dev,\n\t\t\t\t\t\t\t\tino: cursor.ino,\n\t\t\t\t\t\t\t\tleafId: cursor.leafId,\n\t\t\t\t\t\t\t\tthrough: cursor.through,\n\t\t\t\t\t\t\t\tthroughRevision: cursor.throughRevision,\n\t\t\t\t\t\t\t\tnextDepth: cursor.nextDepth,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t\t...(options.limit !== undefined ? { limit: options.limit } : {}),\n\t\t\t},\n\t\t})) as ParentPathPage;\n\t}\n\t/** Actual parent-path sent-message refs; a tool result need not exist yet. */\n\tasync ipythonSentMessages(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\ttoolCallId: string,\n\t\toptions: IpythonSentMessagesOptions = {},\n\t): Promise<IpythonSentMessagesPage> {\n\t\tconst cursor = options.cursor;\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"ipython_sent_messages\",\n\t\t\tsessionId,\n\t\t\ttoolCallId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: {\n\t\t\t\t...(options.messageId !== undefined ? { messageId: options.messageId } : {}),\n\t\t\t\t...(options.limit !== undefined ? { limit: options.limit } : {}),\n\t\t\t\t...(cursor\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tcursor: {\n\t\t\t\t\t\t\t\tversion: cursor.version,\n\t\t\t\t\t\t\t\tsessionId: cursor.sessionId,\n\t\t\t\t\t\t\t\tjournalPath: cursor.journalPath,\n\t\t\t\t\t\t\t\tdev: cursor.dev,\n\t\t\t\t\t\t\t\tino: cursor.ino,\n\t\t\t\t\t\t\t\tleafId: cursor.leafId,\n\t\t\t\t\t\t\t\tthrough: cursor.through,\n\t\t\t\t\t\t\t\tthroughRevision: cursor.throughRevision,\n\t\t\t\t\t\t\t\ttoolCallId: cursor.toolCallId,\n\t\t\t\t\t\t\t\tmessageId: cursor.messageId,\n\t\t\t\t\t\t\t\tafter: cursor.after,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t})) as IpythonSentMessagesPage;\n\t}\n\t/** At most nine source refs and exact message/goal-seeding facts for the captured branch. */\n\tasync branchBootstrap(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t): Promise<BranchBootstrapState> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"branch_bootstrap\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t})) as BranchBootstrapState;\n\t}\n\t/** Context-visible source refs; compiler ordering and LLM filtering happen after selection. */\n\tasync contextUpdates(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\ttarget: ContextUpdateTarget,\n\t): Promise<ContextUpdates> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"context_updates\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\ttarget:\n\t\t\t\ttarget.kind === \"assistant-usage\"\n\t\t\t\t\t? { kind: target.kind, targetId: target.targetId }\n\t\t\t\t\t: { kind: target.kind, toolCallId: target.toolCallId },\n\t\t})) as ContextUpdates;\n\t}\n\tasync readContextUpdatePayload(\n\t\tsessionId: string,\n\t\teventId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\ttarget: ContextUpdateTarget,\n\t\toptions: HistoryPayloadReadOptions = {},\n\t): Promise<CanonicalPayloadFragment | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"read_context_update_payload\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\ttarget:\n\t\t\t\ttarget.kind === \"assistant-usage\"\n\t\t\t\t\t? { kind: target.kind, targetId: target.targetId }\n\t\t\t\t\t: { kind: target.kind, toolCallId: target.toolCallId },\n\t\t\toptions: { ...options, cursor: options.cursor ? { ...options.cursor } : undefined },\n\t\t})) as CanonicalPayloadFragment | undefined;\n\t}\n\tasync contextManifest(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\toptions: ContextManifestOptions = {},\n\t): Promise<ContextManifestPage> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"context_manifest\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: {\n\t\t\t\t...(options.cursor ? { cursor: { ...options.cursor } } : {}),\n\t\t\t\t...(options.limit !== undefined ? { limit: options.limit } : {}),\n\t\t\t},\n\t\t})) as ContextManifestPage;\n\t}\n\tasync readPayload(\n\t\tsessionId: string,\n\t\teventId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\toptions: HistoryPayloadReadOptions = {},\n\t): Promise<CanonicalPayloadFragment | undefined> {\n\t\tconst selection: HistoryPayloadReadOptions = {\n\t\t\t...(options.cursor\n\t\t\t\t? {\n\t\t\t\t\t\tcursor: {\n\t\t\t\t\t\t\tframeChecksum: options.cursor.frameChecksum,\n\t\t\t\t\t\t\tpayloadOffset: options.cursor.payloadOffset,\n\t\t\t\t\t\t\tbyteOffset: options.cursor.byteOffset,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\t...(options.maxBytes !== undefined ? { maxBytes: options.maxBytes } : {}),\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"read_payload\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: selection,\n\t\t})) as CanonicalPayloadFragment | undefined;\n\t}\n\t/** Exact whole-source payload bytes, bounded by the captured prefix and fragment limit. */\n\tasync readSourcePayload(\n\t\tsessionId: string,\n\t\teventId: string,\n\t\tthrough: number,\n\t\toptions: HistoryPayloadReadOptions = {},\n\t): Promise<CanonicalPayloadFragment | undefined> {\n\t\tconst selection: HistoryPayloadReadOptions = {\n\t\t\t...(options.cursor\n\t\t\t\t? {\n\t\t\t\t\t\tcursor: {\n\t\t\t\t\t\t\tframeChecksum: options.cursor.frameChecksum,\n\t\t\t\t\t\t\tpayloadOffset: options.cursor.payloadOffset,\n\t\t\t\t\t\t\tbyteOffset: options.cursor.byteOffset,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\t...(options.maxBytes !== undefined ? { maxBytes: options.maxBytes } : {}),\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"read_source_payload\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\tthrough,\n\t\t\toptions: selection,\n\t\t})) as CanonicalPayloadFragment | undefined;\n\t}\n\tasync clear(sessionId: string): Promise<void> {\n\t\tawait this.request({ id: this.nextId++, action: \"clear\", sessionId });\n\t}\n\tclose(): Promise<void> {\n\t\tif (this.closePromise) return this.closePromise;\n\t\tthis.closing = true;\n\t\tthis.closePromise = (async () => {\n\t\t\ttry {\n\t\t\t\tawait this.settled;\n\t\t\t\tif (!this.closed) await this.request({ id: this.nextId++, action: \"close\" });\n\t\t\t} finally {\n\t\t\t\tawait this.exited;\n\t\t\t\tthis.closed = true;\n\t\t\t}\n\t\t})();\n\t\treturn this.closePromise;\n\t}\n}\n"]}
1
+ {"version":3,"file":"history-index.d.ts","sourceRoot":"","sources":["../../src/core/history-index.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ChildProcess, fork } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { homedir, tmpdir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { getPackageDir } from \"../config.js\";\nimport { assertProductStatePath } from \"../runtime-paths.js\";\nimport type { CanonicalPayloadCursor, CanonicalPayloadFragment } from \"./canonical-payload-parts.js\";\nimport type { CatalogSourceIdentity } from \"./history-source.js\";\nimport type { JournalFrameRetention, NativeEntryQualification } from \"./journal-frame.js\";\nimport type { SessionCatalogProjection } from \"./session-info-projection.js\";\nimport type { SessionJournalState } from \"./session-journal-owner.js\";\nimport type { TaskStateProjection, TaskStateSourceRef } from \"./task-state.js\";\n\n/** Derived metadata only. Exact evidence remains at the canonical source locator. */\nexport interface IndexedSourceEvent {\n\tid: string;\n\tsequence: number;\n\tparentId: string | null;\n\tkind: string;\n\tauthority: \"user\" | \"runtime\" | \"assistant\" | \"imported\" | \"unrecorded\";\n\tlocator: { path: string; offset: number; length: number };\n\trevision: string;\n\t/** Decoded frame qualifier, never a claim inside the payload. */\n\tretention?: JournalFrameRetention;\n\t/** Positive qualification comes only from synchronized canonical frame control. */\n\tqualification?: NativeEntryQualification;\n\ttext: string;\n\ttextComplete: boolean;\n}\n\nexport interface HistoryIndexPage {\n\tevents: IndexedSourceEvent[];\n\tindexedThrough: number;\n\tcoverage: \"complete\" | \"partial\";\n\ttruncated: boolean;\n\tnextAfter: number | null;\n}\n\nexport interface HistoryIndexFrontier extends SessionJournalState {\n\tformat: \"framed\";\n\tindexedThrough: number;\n}\n\nexport interface HistoryIndexScope {\n\tleafId: string | null;\n}\n\n/** Whole-source facts for exactly the current indexed owner snapshot, not an older prefix. */\nexport interface SourceBootstrapState {\n\tleaf: IndexedSourceEvent | null;\n\tsessionInfo: IndexedSourceEvent | null;\n\tsessionState: IndexedSourceEvent | null;\n\tcompactionCount: number;\n\t/** Position in the optional initial model/thinking/tier content prefix. */\n\tcontentPrefix: number;\n\thasUserContent: boolean;\n}\n\nexport type SessionCatalogIndexResult =\n\t| { selection: \"unavailable\" | \"stale\" | \"unsupported\"; reason: string }\n\t| {\n\t\t\tselection: \"covered\";\n\t\t\tfrontier: HistoryIndexFrontier;\n\t\t\tprojection: SessionCatalogProjection;\n\t\t\trefs: {\n\t\t\t\tfirstMessage: IndexedSourceEvent | null;\n\t\t\t\tname: IndexedSourceEvent | null;\n\t\t\t\tagentStatus: IndexedSourceEvent | null;\n\t\t\t};\n\t };\n\n/** Captured parent-chain state. Values remain in the referenced canonical payloads. */\nexport interface BranchBootstrapState {\n\tmodel: IndexedSourceEvent | null;\n\tthinkingLevel: IndexedSourceEvent | null;\n\tserviceTier: IndexedSourceEvent | null;\n\tgoalState: IndexedSourceEvent | null;\n\trlmMaxDepth: IndexedSourceEvent | null;\n\tlatestCompaction: IndexedSourceEvent | null;\n\tcontextUsageAssistant: IndexedSourceEvent | null;\n\tgitState: IndexedSourceEvent | null;\n\tagentStatus: IndexedSourceEvent | null;\n\thasContextMessages: boolean;\n\t/** Exact message-entry presence, independent of payload truthiness. */\n\thasBranchMessage: boolean;\n\tgoalSeedable: boolean;\n}\n\nexport interface TaskEvidenceCursor {\n\tsequence: number;\n\tordinal: number;\n}\nexport interface TaskEvidenceOptions {\n\ttaskKey?: string;\n\tafter?: TaskEvidenceCursor | null;\n\tlimit?: number;\n\titemId?: string;\n}\nexport type IndexedTaskEvidence =\n\t| (TaskEvidenceCursor & { projection: TaskStateProjection; truncated: false })\n\t| (TaskEvidenceCursor & { source: TaskStateSourceRef; itemId?: string; itemIdOmitted?: true; truncated: true });\nexport interface TaskEvidencePage {\n\t/** Existing journal incarnation; absent for unbacked synthetic index rows. */\n\tsourceIdentity?: { journalPath: string; dev: number; ino: number };\n\tentries: IndexedTaskEvidence[];\n\tindexedThrough: number;\n\tcoverage: \"complete\" | \"partial\";\n\t/** A structured-evidence slice, never exhaustive semantic requirement extraction. */\n\tstructuredOnly: true;\n\tselective: true;\n\ttruncated: boolean;\n\tnextAfter: TaskEvidenceCursor | null;\n}\n\nexport interface ContextManifestCursor {\n\tversion: 1;\n\tsessionId: string;\n\tjournalPath: string;\n\tdev: number;\n\tino: number;\n\tleafId: string | null;\n\tthrough: number;\n\tthroughRevision: string;\n\tnextOrdinal: number;\n}\n\n/** Exact canonical source ref, not a decoded message or provider-ordered item. */\nexport interface ContextRef {\n\tentryId: string;\n\tsequence: number;\n\t/** Source classification, not authority inferred from rendered message text. */\n\tauthority?: IndexedSourceEvent[\"authority\"];\n\t/** Canonical frame control, never projected from message/details payloads. */\n\tqualification?: NativeEntryQualification;\n\tretention?: JournalFrameRetention;\n\tkind: \"message\" | \"custom_message\" | \"branch_summary\" | \"compaction\";\n\tlocator: IndexedSourceEvent[\"locator\"];\n\trevision: string;\n}\nexport interface ContextManifestOptions {\n\tcursor?: ContextManifestCursor;\n\tlimit?: number;\n}\n\nexport interface ParentPathCursor {\n\tversion: 1;\n\tsessionId: string;\n\tjournalPath: string;\n\tdev: number;\n\tino: number;\n\tleafId: string | null;\n\tthrough: number;\n\tthroughRevision: string;\n\t/** Zero-based depth of the next entry on the captured parent path. */\n\tnextDepth: number;\n}\nexport interface ParentPathOptions {\n\tcursor?: ParentPathCursor;\n\tlimit?: number;\n}\nexport interface ParentPathPage {\n\tevents: IndexedSourceEvent[];\n\tnextCursor: ParentPathCursor | null;\n\ttotalEntries: number;\n}\nexport type ContextManifestPage =\n\t| {\n\t\t\tselection: \"known\";\n\t\t\tsummaryRef: ContextRef | null;\n\t\t\tactiveBase: number;\n\t\t\tretainedMessageCount: number;\n\t\t\tactiveMessageCount: number;\n\t\t\trefs: (ContextRef & { ordinal: number })[];\n\t\t\torder: \"source\";\n\t\t\tnextCursor: ContextManifestCursor | null;\n\t }\n\t| {\n\t\t\tselection: \"unresolved-lineage\" | \"invalid-first-kept\";\n\t\t\tsummaryRef: ContextRef | null;\n\t\t\trefs: [];\n\t\t\torder: \"source\";\n\t\t\tnextCursor: null;\n\t };\n\nexport type ContextUpdateTarget =\n\t| { kind: \"assistant-usage\"; targetId: string }\n\t| { kind: \"ipython-sent-message\"; toolCallId: string };\n\n/** A related canonical record, not a copied usage value or sent message. */\nexport interface ContextUpdateRef extends Omit<ContextRef, \"kind\"> {\n\tkind: \"child_usage_attributed\" | \"custom\";\n}\nexport interface ContextUpdates {\n\trefs: ContextUpdateRef[];\n\torder: \"source\";\n}\n\nexport interface IpythonSentMessagesCursor {\n\tversion: 1;\n\tsessionId: string;\n\tjournalPath: string;\n\tdev: number;\n\tino: number;\n\tleafId: string | null;\n\tthrough: number;\n\tthroughRevision: string;\n\ttoolCallId: string;\n\tmessageId: string | null;\n\t/** Last examined source sequence; empty pages can still make bounded progress. */\n\tafter: number;\n}\nexport interface IpythonSentMessagesOptions {\n\tmessageId?: string;\n\tcursor?: IpythonSentMessagesCursor;\n\tlimit?: number;\n}\nexport interface IpythonSentMessagesPage {\n\trefs: ContextUpdateRef[];\n\tnextCursor: IpythonSentMessagesCursor | null;\n}\n\nexport interface HistoryPayloadReadOptions {\n\tcursor?: CanonicalPayloadCursor;\n\tmaxBytes?: number;\n}\n\nexport type HistoryIndexRequest =\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"ipython_sent_messages\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\ttoolCallId: string;\n\t\t\toptions: IpythonSentMessagesOptions;\n\t }\n\t| { id: number; action: \"current_source_bootstrap\"; sessionId: string; snapshot: SessionJournalState }\n\t| { id: number; action: \"catalog\"; sessionId: string; source: CatalogSourceIdentity }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"source_label\" | \"source_assistant_usage\";\n\t\t\tsessionId: string;\n\t\t\ttargetId: string;\n\t\t\tthrough: number;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"parent_path\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\toptions: ParentPathOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"branch_bootstrap\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"context_updates\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\ttarget: ContextUpdateTarget;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"read_context_update_payload\";\n\t\t\tsessionId: string;\n\t\t\teventId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\ttarget: ContextUpdateTarget;\n\t\t\toptions: HistoryPayloadReadOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"context_manifest\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\toptions: ContextManifestOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"read_payload\";\n\t\t\tsessionId: string;\n\t\t\teventId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\toptions: HistoryPayloadReadOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"task_evidence\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\toptions: TaskEvidenceOptions;\n\t }\n\t| { id: number; action: \"sync_source\"; sessionId: string; snapshot: SessionJournalState }\n\t| { id: number; action: \"apply\"; sessionId: string; events: IndexedSourceEvent[]; committedThrough: number }\n\t| { id: number; action: \"get\"; sessionId: string; eventId: string; scope?: HistoryIndexScope & { through: number } }\n\t| { id: number; action: \"get_source\"; sessionId: string; eventId: string; through: number }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"read_source_payload\";\n\t\t\tsessionId: string;\n\t\t\teventId: string;\n\t\t\tthrough: number;\n\t\t\toptions: HistoryPayloadReadOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"page\";\n\t\t\t/** Bound examined rows and advance over nonmatches instead of requiring an exact filled page. */\n\t\t\tscan?: boolean;\n\t\t\tsessionId: string;\n\t\t\tafter: number;\n\t\t\tlimit: number;\n\t\t\tthrough: number;\n\t\t\tscope?: HistoryIndexScope;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"search\";\n\t\t\tsessionId: string;\n\t\t\tquery: string;\n\t\t\tlimit: number;\n\t\t\tthrough: number;\n\t\t\tscope?: HistoryIndexScope;\n\t }\n\t| { id: number; action: \"clear\"; sessionId: string }\n\t| { id: number; action: \"close\" };\n\nexport class HistoryIndexUnsupportedError extends Error {}\n\ntype Response =\n\t| { id: number; result?: unknown; error?: string }\n\t| { ready: true }\n\t| { startupError: string; unsupported: boolean };\nconst MAX_PENDING_BYTES = 4 * 1024 * 1024;\nconst MAX_REQUEST_BYTES = 2 * 1024 * 1024;\n\nfunction workerPath(): string {\n\tconst candidates = [\n\t\tfileURLToPath(new URL(\"./history-index-worker.js\", import.meta.url)),\n\t\tfileURLToPath(new URL(\"./history-index-worker.ts\", import.meta.url)),\n\t\tjoin(getPackageDir(), \"dist\", \"core\", \"history-index-worker.js\"),\n\t\tjoin(dirname(process.execPath), \"core\", \"history-index-worker.js\"),\n\t\tjoin(dirname(process.execPath), \"history-index-worker.js\"),\n\t];\n\tconst path = candidates.find((candidate) => existsSync(candidate));\n\tif (!path) throw new Error(\"Base Context history-index worker payload is missing\");\n\treturn path;\n}\n\n/** One bounded IPC queue; all SQLite work runs outside the agent/UI event loop. */\nexport class HistoryIndex {\n\tprivate child: ChildProcess;\n\tprivate nextId = 1;\n\tprivate pendingBytes = 0;\n\tprivate closed = false;\n\tprivate closing = false;\n\tprivate closePromise: Promise<void> | undefined;\n\tprivate exited: Promise<void>;\n\tprivate settled: Promise<void> = Promise.resolve();\n\tprivate pending = new Map<\n\t\tnumber,\n\t\t{ bytes: number; resolve: (result: unknown) => void; reject: (error: Error) => void }\n\t>();\n\tprivate ready: Promise<void>;\n\n\tstatic async open(\n\t\tpath: string,\n\t\toptions: { nodeExecutable?: string; readOnly?: boolean } = {},\n\t): Promise<HistoryIndex> {\n\t\tconst index = new HistoryIndex(path, options);\n\t\ttry {\n\t\t\tawait index.ready;\n\t\t\treturn index;\n\t\t} catch (error) {\n\t\t\tawait index.close().catch(() => undefined);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate constructor(path: string, options: { nodeExecutable?: string; readOnly?: boolean }) {\n\t\tassertProductStatePath(path);\n\t\tconst entrypoint = workerPath();\n\t\tconst nodeExecutable = options.nodeExecutable ?? (\"bun\" in process.versions ? \"node\" : process.execPath);\n\t\tthis.child = fork(entrypoint, options.readOnly ? [path, \"--read-only\"] : [path], {\n\t\t\texecPath: nodeExecutable,\n\t\t\texecArgv: [\n\t\t\t\t\"--experimental-sqlite\",\n\t\t\t\t\"--disable-warning=ExperimentalWarning\",\n\t\t\t\t...(entrypoint.endsWith(\".ts\") ? [\"--import\", import.meta.resolve(\"tsx\")] : []),\n\t\t\t],\n\t\t\tstdio: [\"ignore\", \"ignore\", \"pipe\", \"ipc\"],\n\t\t\tenv: {\n\t\t\t\tPATH: process.env.PATH,\n\t\t\t\tHOME: homedir(),\n\t\t\t\tTMPDIR: tmpdir(),\n\t\t\t\tSYSTEMROOT: process.env.SYSTEMROOT,\n\t\t\t\tWINDIR: process.env.WINDIR,\n\t\t\t},\n\t\t});\n\t\tthis.exited = new Promise<void>((resolveExit) => {\n\t\t\tthis.child.once(\"exit\", () => resolveExit());\n\t\t\tthis.child.once(\"close\", () => resolveExit());\n\t\t});\n\t\tlet diagnostics = \"\";\n\t\tthis.child.stderr?.on(\"data\", (data: Buffer) => {\n\t\t\tdiagnostics = (diagnostics + data.toString()).slice(-8192);\n\t\t});\n\t\tlet readyResolve = () => {};\n\t\tlet readyReject: (error: Error) => void = () => {};\n\t\tthis.ready = new Promise<void>((resolve, reject) => {\n\t\t\treadyResolve = resolve;\n\t\t\treadyReject = reject;\n\t\t});\n\t\tconst fail = (error: Error) => {\n\t\t\tthis.closed = true;\n\t\t\treadyReject(error);\n\t\t\tfor (const request of this.pending.values()) request.reject(error);\n\t\t\tthis.pending.clear();\n\t\t\tthis.pendingBytes = 0;\n\t\t};\n\t\tthis.child.on(\"error\", (error) => {\n\t\t\tfail(error);\n\t\t\tthis.child.kill();\n\t\t});\n\t\tthis.child.on(\"disconnect\", () => {\n\t\t\tfail(new Error(\"History-index worker disconnected\"));\n\t\t\tif (!this.closing) this.child.kill();\n\t\t});\n\t\tthis.child.on(\"exit\", (code) =>\n\t\t\tfail(new Error(`History-index worker exited (${code})${diagnostics ? `: ${diagnostics}` : \"\"}`)),\n\t\t);\n\t\tthis.child.on(\"message\", (message: Response) => {\n\t\t\tif (\"startupError\" in message) {\n\t\t\t\tfail(\n\t\t\t\t\tmessage.unsupported\n\t\t\t\t\t\t? new HistoryIndexUnsupportedError(message.startupError)\n\t\t\t\t\t\t: new Error(message.startupError),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (\"ready\" in message) {\n\t\t\t\treadyResolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst request = this.pending.get(message.id);\n\t\t\tif (!request) return;\n\t\t\tthis.pending.delete(message.id);\n\t\t\tthis.pendingBytes -= request.bytes;\n\t\t\tif (message.error) request.reject(new Error(message.error));\n\t\t\telse request.resolve(message.result);\n\t\t});\n\t}\n\n\tprivate async request(message: HistoryIndexRequest): Promise<unknown> {\n\t\tif (this.closed || (this.closing && message.action !== \"close\")) throw new Error(\"History index is closed\");\n\t\tif (\n\t\t\t(\"sessionId\" in message && message.sessionId.length > 512) ||\n\t\t\t((message.action === \"get\" ||\n\t\t\t\tmessage.action === \"get_source\" ||\n\t\t\t\tmessage.action === \"read_source_payload\" ||\n\t\t\t\tmessage.action === \"read_payload\" ||\n\t\t\t\tmessage.action === \"read_context_update_payload\") &&\n\t\t\t\tmessage.eventId.length > 512) ||\n\t\t\t((message.action === \"source_label\" || message.action === \"source_assistant_usage\") &&\n\t\t\t\tmessage.targetId.length > 512) ||\n\t\t\t(message.action === \"ipython_sent_messages\" &&\n\t\t\t\t(message.toolCallId.length > 8192 ||\n\t\t\t\t\t(message.options.messageId !== undefined && message.options.messageId.length > 8192))) ||\n\t\t\t(message.action === \"search\" && message.query.length > 8192)\n\t\t) {\n\t\t\tthrow new Error(\"History-index request field limit exceeded\");\n\t\t}\n\t\tconst bytes = Buffer.byteLength(JSON.stringify(message));\n\t\tif (bytes > MAX_REQUEST_BYTES || this.pendingBytes + bytes > MAX_PENDING_BYTES || this.pending.size >= 32) {\n\t\t\tthrow new Error(\"History-index queue limit reached; await pending work before admitting more\");\n\t\t}\n\t\tthis.pendingBytes += bytes;\n\t\tconst result = new Promise<unknown>((resolve, reject) => {\n\t\t\tthis.pending.set(message.id, { bytes, resolve, reject });\n\t\t});\n\t\tthis.settled = Promise.allSettled([this.settled, result]).then(() => undefined);\n\t\ttry {\n\t\t\tawait this.ready;\n\t\t\tthis.child.send(message, (error) => {\n\t\t\t\tif (!error) return;\n\t\t\t\tconst request = this.pending.get(message.id);\n\t\t\t\tif (!request) return;\n\t\t\t\tthis.pending.delete(message.id);\n\t\t\t\tthis.pendingBytes -= request.bytes;\n\t\t\t\trequest.reject(error);\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconst request = this.pending.get(message.id);\n\t\t\tif (request) {\n\t\t\t\tthis.pending.delete(message.id);\n\t\t\t\tthis.pendingBytes -= request.bytes;\n\t\t\t\trequest.reject(error instanceof Error ? error : new Error(String(error)));\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tasync apply(sessionId: string, events: IndexedSourceEvent[], committedThrough: number): Promise<void> {\n\t\tif (events.length > 128) throw new Error(\"Index batch limit exceeded\");\n\t\tlet bytes = 1024;\n\t\tconst snapshots = events.map((event) => {\n\t\t\tif (\n\t\t\t\t!event.id ||\n\t\t\t\tevent.id.length > 512 ||\n\t\t\t\t(event.parentId?.length ?? 0) > 512 ||\n\t\t\t\tevent.kind.length > 128 ||\n\t\t\t\tevent.revision.length > 512 ||\n\t\t\t\tevent.text.length > 8192 ||\n\t\t\t\tevent.locator.path.length > 4096\n\t\t\t) {\n\t\t\t\tthrow new Error(\"Index record limit exceeded; use bounded source parts\");\n\t\t\t}\n\t\t\t// Copy the allowlisted metadata, not extra fields or a mutable source object.\n\t\t\tconst snapshot: IndexedSourceEvent = {\n\t\t\t\tid: event.id,\n\t\t\t\tsequence: event.sequence,\n\t\t\t\tparentId: event.parentId,\n\t\t\t\tkind: event.kind,\n\t\t\t\tauthority: event.authority,\n\t\t\t\trevision: event.revision,\n\t\t\t\t...(event.retention === undefined ? {} : { retention: event.retention }),\n\t\t\t\ttext: event.text,\n\t\t\t\ttextComplete: event.textComplete,\n\t\t\t\tlocator: { path: event.locator.path, offset: event.locator.offset, length: event.locator.length },\n\t\t\t};\n\t\t\tbytes += Buffer.byteLength(JSON.stringify(snapshot)) + 1;\n\t\t\tif (bytes > MAX_REQUEST_BYTES) throw new Error(\"Index batch byte limit exceeded\");\n\t\t\treturn snapshot;\n\t\t});\n\t\tawait this.request({ id: this.nextId++, action: \"apply\", sessionId, events: snapshots, committedThrough });\n\t}\n\tasync syncSource(sessionId: string, snapshot: SessionJournalState): Promise<HistoryIndexFrontier> {\n\t\tconst target: SessionJournalState = {\n\t\t\tjournalPath: snapshot.journalPath,\n\t\t\tnextSequence: snapshot.nextSequence,\n\t\t\tformat: snapshot.format,\n\t\t\tbyteLength: snapshot.byteLength,\n\t\t\tchecksum: snapshot.checksum,\n\t\t\tdev: snapshot.dev,\n\t\t\tino: snapshot.ino,\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"sync_source\",\n\t\t\tsessionId,\n\t\t\tsnapshot: target,\n\t\t})) as HistoryIndexFrontier;\n\t}\n\t/** One read-only SQLite snapshot, checked against current source descriptor/frontier identity. */\n\tasync readSessionCatalog(sessionId: string, source: CatalogSourceIdentity): Promise<SessionCatalogIndexResult> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"catalog\",\n\t\t\tsessionId,\n\t\t\tsource: { ...source },\n\t\t})) as SessionCatalogIndexResult;\n\t}\n\t/** Current whole-source bootstrap; equality with this exact owner snapshot is required. */\n\tasync currentSourceBootstrap(sessionId: string, snapshot: SessionJournalState): Promise<SourceBootstrapState> {\n\t\tconst target: SessionJournalState = {\n\t\t\tjournalPath: snapshot.journalPath,\n\t\t\tnextSequence: snapshot.nextSequence,\n\t\t\tformat: snapshot.format,\n\t\t\tbyteLength: snapshot.byteLength,\n\t\t\tchecksum: snapshot.checksum,\n\t\t\tdev: snapshot.dev,\n\t\t\tino: snapshot.ino,\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"current_source_bootstrap\",\n\t\t\tsessionId,\n\t\t\tsnapshot: target,\n\t\t})) as SourceBootstrapState;\n\t}\n\t/** Latest label control for this source target, including a clear. */\n\tasync sourceLabel(sessionId: string, targetId: string, through: number): Promise<IndexedSourceEvent | undefined> {\n\t\treturn (await this.request({ id: this.nextId++, action: \"source_label\", sessionId, targetId, through })) as\n\t\t\t| IndexedSourceEvent\n\t\t\t| undefined;\n\t}\n\t/** Latest stored source aggregate, without validating or replacing its payload. */\n\tasync sourceAssistantUsage(\n\t\tsessionId: string,\n\t\ttargetId: string,\n\t\tthrough: number,\n\t): Promise<IndexedSourceEvent | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"source_assistant_usage\",\n\t\t\tsessionId,\n\t\t\ttargetId,\n\t\t\tthrough,\n\t\t})) as IndexedSourceEvent | undefined;\n\t}\n\tasync get(\n\t\tsessionId: string,\n\t\teventId: string,\n\t\tscope?: HistoryIndexScope & { through: number },\n\t): Promise<IndexedSourceEvent | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"get\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\t...(scope ? { scope: { leafId: scope.leafId, through: scope.through } } : {}),\n\t\t})) as IndexedSourceEvent | undefined;\n\t}\n\t/** Whole-source metadata within a synchronized captured prefix, independent of branch selection. */\n\tasync getSource(sessionId: string, eventId: string, through: number): Promise<IndexedSourceEvent | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"get_source\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\tthrough,\n\t\t})) as IndexedSourceEvent | undefined;\n\t}\n\t/** Exact ordered page; rejects if 256 candidates cannot establish the page and lookahead. */\n\tasync page(\n\t\tsessionId: string,\n\t\tafter: number,\n\t\tthrough: number,\n\t\tlimit = 64,\n\t\tscope?: HistoryIndexScope,\n\t\toptions: { scan?: boolean } = {},\n\t): Promise<HistoryIndexPage> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"page\",\n\t\t\tscan: options.scan,\n\t\t\tsessionId,\n\t\t\tafter,\n\t\t\tthrough,\n\t\t\tlimit,\n\t\t\t...(scope ? { scope: { leafId: scope.leafId } } : {}),\n\t\t})) as HistoryIndexPage;\n\t}\n\t/** Selection and text-coverage scans each reject after 256 unresolved candidates. */\n\tasync search(\n\t\tsessionId: string,\n\t\tquery: string,\n\t\tthrough: number,\n\t\tlimit = 16,\n\t\tscope?: HistoryIndexScope,\n\t): Promise<HistoryIndexPage> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"search\",\n\t\t\tsessionId,\n\t\t\tquery,\n\t\t\tthrough,\n\t\t\tlimit,\n\t\t\t...(scope ? { scope: { leafId: scope.leafId } } : {}),\n\t\t})) as HistoryIndexPage;\n\t}\n\t/** Selection and import-loss scans each have a 256-candidate exact-or-refuse budget. */\n\tasync taskEvidence(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\toptions: TaskEvidenceOptions = {},\n\t): Promise<TaskEvidencePage> {\n\t\tconst selection: TaskEvidenceOptions = {\n\t\t\t...(options.after ? { after: { sequence: options.after.sequence, ordinal: options.after.ordinal } } : {}),\n\t\t\tlimit: options.limit ?? 64,\n\t\t\t...(options.itemId !== undefined ? { itemId: options.itemId } : {}),\n\t\t\t...(options.taskKey !== undefined ? { taskKey: options.taskKey } : {}),\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"task_evidence\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: selection,\n\t\t})) as TaskEvidencePage;\n\t}\n\t/** Chronological pages of the exact parent chain, never attached request evidence. */\n\tasync parentPath(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\toptions: ParentPathOptions = {},\n\t): Promise<ParentPathPage> {\n\t\tconst cursor = options.cursor;\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"parent_path\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: {\n\t\t\t\t...(cursor\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tcursor: {\n\t\t\t\t\t\t\t\tversion: cursor.version,\n\t\t\t\t\t\t\t\tsessionId: cursor.sessionId,\n\t\t\t\t\t\t\t\tjournalPath: cursor.journalPath,\n\t\t\t\t\t\t\t\tdev: cursor.dev,\n\t\t\t\t\t\t\t\tino: cursor.ino,\n\t\t\t\t\t\t\t\tleafId: cursor.leafId,\n\t\t\t\t\t\t\t\tthrough: cursor.through,\n\t\t\t\t\t\t\t\tthroughRevision: cursor.throughRevision,\n\t\t\t\t\t\t\t\tnextDepth: cursor.nextDepth,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t\t...(options.limit !== undefined ? { limit: options.limit } : {}),\n\t\t\t},\n\t\t})) as ParentPathPage;\n\t}\n\t/** Actual parent-path sent-message refs; a tool result need not exist yet. */\n\tasync ipythonSentMessages(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\ttoolCallId: string,\n\t\toptions: IpythonSentMessagesOptions = {},\n\t): Promise<IpythonSentMessagesPage> {\n\t\tconst cursor = options.cursor;\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"ipython_sent_messages\",\n\t\t\tsessionId,\n\t\t\ttoolCallId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: {\n\t\t\t\t...(options.messageId !== undefined ? { messageId: options.messageId } : {}),\n\t\t\t\t...(options.limit !== undefined ? { limit: options.limit } : {}),\n\t\t\t\t...(cursor\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tcursor: {\n\t\t\t\t\t\t\t\tversion: cursor.version,\n\t\t\t\t\t\t\t\tsessionId: cursor.sessionId,\n\t\t\t\t\t\t\t\tjournalPath: cursor.journalPath,\n\t\t\t\t\t\t\t\tdev: cursor.dev,\n\t\t\t\t\t\t\t\tino: cursor.ino,\n\t\t\t\t\t\t\t\tleafId: cursor.leafId,\n\t\t\t\t\t\t\t\tthrough: cursor.through,\n\t\t\t\t\t\t\t\tthroughRevision: cursor.throughRevision,\n\t\t\t\t\t\t\t\ttoolCallId: cursor.toolCallId,\n\t\t\t\t\t\t\t\tmessageId: cursor.messageId,\n\t\t\t\t\t\t\t\tafter: cursor.after,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t})) as IpythonSentMessagesPage;\n\t}\n\t/** At most nine source refs and exact message/goal-seeding facts for the captured branch. */\n\tasync branchBootstrap(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t): Promise<BranchBootstrapState> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"branch_bootstrap\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t})) as BranchBootstrapState;\n\t}\n\t/** Context-visible source refs; compiler ordering and LLM filtering happen after selection. */\n\tasync contextUpdates(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\ttarget: ContextUpdateTarget,\n\t): Promise<ContextUpdates> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"context_updates\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\ttarget:\n\t\t\t\ttarget.kind === \"assistant-usage\"\n\t\t\t\t\t? { kind: target.kind, targetId: target.targetId }\n\t\t\t\t\t: { kind: target.kind, toolCallId: target.toolCallId },\n\t\t})) as ContextUpdates;\n\t}\n\tasync readContextUpdatePayload(\n\t\tsessionId: string,\n\t\teventId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\ttarget: ContextUpdateTarget,\n\t\toptions: HistoryPayloadReadOptions = {},\n\t): Promise<CanonicalPayloadFragment | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"read_context_update_payload\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\ttarget:\n\t\t\t\ttarget.kind === \"assistant-usage\"\n\t\t\t\t\t? { kind: target.kind, targetId: target.targetId }\n\t\t\t\t\t: { kind: target.kind, toolCallId: target.toolCallId },\n\t\t\toptions: { ...options, cursor: options.cursor ? { ...options.cursor } : undefined },\n\t\t})) as CanonicalPayloadFragment | undefined;\n\t}\n\tasync contextManifest(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\toptions: ContextManifestOptions = {},\n\t): Promise<ContextManifestPage> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"context_manifest\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: {\n\t\t\t\t...(options.cursor ? { cursor: { ...options.cursor } } : {}),\n\t\t\t\t...(options.limit !== undefined ? { limit: options.limit } : {}),\n\t\t\t},\n\t\t})) as ContextManifestPage;\n\t}\n\tasync readPayload(\n\t\tsessionId: string,\n\t\teventId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\toptions: HistoryPayloadReadOptions = {},\n\t): Promise<CanonicalPayloadFragment | undefined> {\n\t\tconst selection: HistoryPayloadReadOptions = {\n\t\t\t...(options.cursor\n\t\t\t\t? {\n\t\t\t\t\t\tcursor: {\n\t\t\t\t\t\t\tframeChecksum: options.cursor.frameChecksum,\n\t\t\t\t\t\t\tpayloadOffset: options.cursor.payloadOffset,\n\t\t\t\t\t\t\tbyteOffset: options.cursor.byteOffset,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\t...(options.maxBytes !== undefined ? { maxBytes: options.maxBytes } : {}),\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"read_payload\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: selection,\n\t\t})) as CanonicalPayloadFragment | undefined;\n\t}\n\t/** Exact whole-source payload bytes, bounded by the captured prefix and fragment limit. */\n\tasync readSourcePayload(\n\t\tsessionId: string,\n\t\teventId: string,\n\t\tthrough: number,\n\t\toptions: HistoryPayloadReadOptions = {},\n\t): Promise<CanonicalPayloadFragment | undefined> {\n\t\tconst selection: HistoryPayloadReadOptions = {\n\t\t\t...(options.cursor\n\t\t\t\t? {\n\t\t\t\t\t\tcursor: {\n\t\t\t\t\t\t\tframeChecksum: options.cursor.frameChecksum,\n\t\t\t\t\t\t\tpayloadOffset: options.cursor.payloadOffset,\n\t\t\t\t\t\t\tbyteOffset: options.cursor.byteOffset,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\t...(options.maxBytes !== undefined ? { maxBytes: options.maxBytes } : {}),\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"read_source_payload\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\tthrough,\n\t\t\toptions: selection,\n\t\t})) as CanonicalPayloadFragment | undefined;\n\t}\n\tasync clear(sessionId: string): Promise<void> {\n\t\tawait this.request({ id: this.nextId++, action: \"clear\", sessionId });\n\t}\n\tclose(): Promise<void> {\n\t\tif (this.closePromise) return this.closePromise;\n\t\tthis.closing = true;\n\t\tthis.closePromise = (async () => {\n\t\t\ttry {\n\t\t\t\tawait this.settled;\n\t\t\t\tif (!this.closed) await this.request({ id: this.nextId++, action: \"close\" });\n\t\t\t} finally {\n\t\t\t\tawait this.exited;\n\t\t\t\tthis.closed = true;\n\t\t\t}\n\t\t})();\n\t\treturn this.closePromise;\n\t}\n}\n"]}
@@ -281,10 +281,11 @@ export class HistoryIndex {
281
281
  }));
282
282
  }
283
283
  /** Exact ordered page; rejects if 256 candidates cannot establish the page and lookahead. */
284
- async page(sessionId, after, through, limit = 64, scope) {
284
+ async page(sessionId, after, through, limit = 64, scope, options = {}) {
285
285
  return (await this.request({
286
286
  id: this.nextId++,
287
287
  action: "page",
288
+ scan: options.scan,
288
289
  sessionId,
289
290
  after,
290
291
  through,
@@ -1 +1 @@
1
- {"version":3,"file":"history-index.js","sourceRoot":"","sources":["../../src/core/history-index.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ChildProcess, fork } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { homedir, tmpdir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { getPackageDir } from \"../config.js\";\nimport { assertProductStatePath } from \"../runtime-paths.js\";\nimport type { CanonicalPayloadCursor, CanonicalPayloadFragment } from \"./canonical-payload-parts.js\";\nimport type { CatalogSourceIdentity } from \"./history-source.js\";\nimport type { JournalFrameRetention, NativeEntryQualification } from \"./journal-frame.js\";\nimport type { SessionCatalogProjection } from \"./session-info-projection.js\";\nimport type { SessionJournalState } from \"./session-journal-owner.js\";\nimport type { TaskStateProjection, TaskStateSourceRef } from \"./task-state.js\";\n\n/** Derived metadata only. Exact evidence remains at the canonical source locator. */\nexport interface IndexedSourceEvent {\n\tid: string;\n\tsequence: number;\n\tparentId: string | null;\n\tkind: string;\n\tauthority: \"user\" | \"runtime\" | \"assistant\" | \"imported\" | \"unrecorded\";\n\tlocator: { path: string; offset: number; length: number };\n\trevision: string;\n\t/** Decoded frame qualifier, never a claim inside the payload. */\n\tretention?: JournalFrameRetention;\n\t/** Positive qualification comes only from synchronized canonical frame control. */\n\tqualification?: NativeEntryQualification;\n\ttext: string;\n\ttextComplete: boolean;\n}\n\nexport interface HistoryIndexPage {\n\tevents: IndexedSourceEvent[];\n\tindexedThrough: number;\n\tcoverage: \"complete\" | \"partial\";\n\ttruncated: boolean;\n\tnextAfter: number | null;\n}\n\nexport interface HistoryIndexFrontier extends SessionJournalState {\n\tformat: \"framed\";\n\tindexedThrough: number;\n}\n\nexport interface HistoryIndexScope {\n\tleafId: string | null;\n}\n\n/** Whole-source facts for exactly the current indexed owner snapshot, not an older prefix. */\nexport interface SourceBootstrapState {\n\tleaf: IndexedSourceEvent | null;\n\tsessionInfo: IndexedSourceEvent | null;\n\tsessionState: IndexedSourceEvent | null;\n\tcompactionCount: number;\n\t/** Position in the optional initial model/thinking/tier content prefix. */\n\tcontentPrefix: number;\n\thasUserContent: boolean;\n}\n\nexport type SessionCatalogIndexResult =\n\t| { selection: \"unavailable\" | \"stale\" | \"unsupported\"; reason: string }\n\t| {\n\t\t\tselection: \"covered\";\n\t\t\tfrontier: HistoryIndexFrontier;\n\t\t\tprojection: SessionCatalogProjection;\n\t\t\trefs: {\n\t\t\t\tfirstMessage: IndexedSourceEvent | null;\n\t\t\t\tname: IndexedSourceEvent | null;\n\t\t\t\tagentStatus: IndexedSourceEvent | null;\n\t\t\t};\n\t };\n\n/** Captured parent-chain state. Values remain in the referenced canonical payloads. */\nexport interface BranchBootstrapState {\n\tmodel: IndexedSourceEvent | null;\n\tthinkingLevel: IndexedSourceEvent | null;\n\tserviceTier: IndexedSourceEvent | null;\n\tgoalState: IndexedSourceEvent | null;\n\trlmMaxDepth: IndexedSourceEvent | null;\n\tlatestCompaction: IndexedSourceEvent | null;\n\tcontextUsageAssistant: IndexedSourceEvent | null;\n\tgitState: IndexedSourceEvent | null;\n\tagentStatus: IndexedSourceEvent | null;\n\thasContextMessages: boolean;\n\t/** Exact message-entry presence, independent of payload truthiness. */\n\thasBranchMessage: boolean;\n\tgoalSeedable: boolean;\n}\n\nexport interface TaskEvidenceCursor {\n\tsequence: number;\n\tordinal: number;\n}\nexport interface TaskEvidenceOptions {\n\ttaskKey?: string;\n\tafter?: TaskEvidenceCursor | null;\n\tlimit?: number;\n\titemId?: string;\n}\nexport type IndexedTaskEvidence =\n\t| (TaskEvidenceCursor & { projection: TaskStateProjection; truncated: false })\n\t| (TaskEvidenceCursor & { source: TaskStateSourceRef; itemId?: string; itemIdOmitted?: true; truncated: true });\nexport interface TaskEvidencePage {\n\tentries: IndexedTaskEvidence[];\n\tindexedThrough: number;\n\tcoverage: \"complete\" | \"partial\";\n\t/** A structured-evidence slice, never exhaustive semantic requirement extraction. */\n\tstructuredOnly: true;\n\tselective: true;\n\ttruncated: boolean;\n\tnextAfter: TaskEvidenceCursor | null;\n}\n\nexport interface ContextManifestCursor {\n\tversion: 1;\n\tsessionId: string;\n\tjournalPath: string;\n\tdev: number;\n\tino: number;\n\tleafId: string | null;\n\tthrough: number;\n\tthroughRevision: string;\n\tnextOrdinal: number;\n}\n\n/** Exact canonical source ref, not a decoded message or provider-ordered item. */\nexport interface ContextRef {\n\tentryId: string;\n\tsequence: number;\n\t/** Source classification, not authority inferred from rendered message text. */\n\tauthority?: IndexedSourceEvent[\"authority\"];\n\t/** Canonical frame control, never projected from message/details payloads. */\n\tqualification?: NativeEntryQualification;\n\tretention?: JournalFrameRetention;\n\tkind: \"message\" | \"custom_message\" | \"branch_summary\" | \"compaction\";\n\tlocator: IndexedSourceEvent[\"locator\"];\n\trevision: string;\n}\nexport interface ContextManifestOptions {\n\tcursor?: ContextManifestCursor;\n\tlimit?: number;\n}\n\nexport interface ParentPathCursor {\n\tversion: 1;\n\tsessionId: string;\n\tjournalPath: string;\n\tdev: number;\n\tino: number;\n\tleafId: string | null;\n\tthrough: number;\n\tthroughRevision: string;\n\t/** Zero-based depth of the next entry on the captured parent path. */\n\tnextDepth: number;\n}\nexport interface ParentPathOptions {\n\tcursor?: ParentPathCursor;\n\tlimit?: number;\n}\nexport interface ParentPathPage {\n\tevents: IndexedSourceEvent[];\n\tnextCursor: ParentPathCursor | null;\n\ttotalEntries: number;\n}\nexport type ContextManifestPage =\n\t| {\n\t\t\tselection: \"known\";\n\t\t\tsummaryRef: ContextRef | null;\n\t\t\tactiveBase: number;\n\t\t\tretainedMessageCount: number;\n\t\t\tactiveMessageCount: number;\n\t\t\trefs: (ContextRef & { ordinal: number })[];\n\t\t\torder: \"source\";\n\t\t\tnextCursor: ContextManifestCursor | null;\n\t }\n\t| {\n\t\t\tselection: \"unresolved-lineage\" | \"invalid-first-kept\";\n\t\t\tsummaryRef: ContextRef | null;\n\t\t\trefs: [];\n\t\t\torder: \"source\";\n\t\t\tnextCursor: null;\n\t };\n\nexport type ContextUpdateTarget =\n\t| { kind: \"assistant-usage\"; targetId: string }\n\t| { kind: \"ipython-sent-message\"; toolCallId: string };\n\n/** A related canonical record, not a copied usage value or sent message. */\nexport interface ContextUpdateRef extends Omit<ContextRef, \"kind\"> {\n\tkind: \"child_usage_attributed\" | \"custom\";\n}\nexport interface ContextUpdates {\n\trefs: ContextUpdateRef[];\n\torder: \"source\";\n}\n\nexport interface IpythonSentMessagesCursor {\n\tversion: 1;\n\tsessionId: string;\n\tjournalPath: string;\n\tdev: number;\n\tino: number;\n\tleafId: string | null;\n\tthrough: number;\n\tthroughRevision: string;\n\ttoolCallId: string;\n\tmessageId: string | null;\n\t/** Last examined source sequence; empty pages can still make bounded progress. */\n\tafter: number;\n}\nexport interface IpythonSentMessagesOptions {\n\tmessageId?: string;\n\tcursor?: IpythonSentMessagesCursor;\n\tlimit?: number;\n}\nexport interface IpythonSentMessagesPage {\n\trefs: ContextUpdateRef[];\n\tnextCursor: IpythonSentMessagesCursor | null;\n}\n\nexport interface HistoryPayloadReadOptions {\n\tcursor?: CanonicalPayloadCursor;\n\tmaxBytes?: number;\n}\n\nexport type HistoryIndexRequest =\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"ipython_sent_messages\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\ttoolCallId: string;\n\t\t\toptions: IpythonSentMessagesOptions;\n\t }\n\t| { id: number; action: \"current_source_bootstrap\"; sessionId: string; snapshot: SessionJournalState }\n\t| { id: number; action: \"catalog\"; sessionId: string; source: CatalogSourceIdentity }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"source_label\" | \"source_assistant_usage\";\n\t\t\tsessionId: string;\n\t\t\ttargetId: string;\n\t\t\tthrough: number;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"parent_path\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\toptions: ParentPathOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"branch_bootstrap\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"context_updates\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\ttarget: ContextUpdateTarget;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"read_context_update_payload\";\n\t\t\tsessionId: string;\n\t\t\teventId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\ttarget: ContextUpdateTarget;\n\t\t\toptions: HistoryPayloadReadOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"context_manifest\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\toptions: ContextManifestOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"read_payload\";\n\t\t\tsessionId: string;\n\t\t\teventId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\toptions: HistoryPayloadReadOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"task_evidence\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\toptions: TaskEvidenceOptions;\n\t }\n\t| { id: number; action: \"sync_source\"; sessionId: string; snapshot: SessionJournalState }\n\t| { id: number; action: \"apply\"; sessionId: string; events: IndexedSourceEvent[]; committedThrough: number }\n\t| { id: number; action: \"get\"; sessionId: string; eventId: string; scope?: HistoryIndexScope & { through: number } }\n\t| { id: number; action: \"get_source\"; sessionId: string; eventId: string; through: number }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"read_source_payload\";\n\t\t\tsessionId: string;\n\t\t\teventId: string;\n\t\t\tthrough: number;\n\t\t\toptions: HistoryPayloadReadOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"page\";\n\t\t\tsessionId: string;\n\t\t\tafter: number;\n\t\t\tlimit: number;\n\t\t\tthrough: number;\n\t\t\tscope?: HistoryIndexScope;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"search\";\n\t\t\tsessionId: string;\n\t\t\tquery: string;\n\t\t\tlimit: number;\n\t\t\tthrough: number;\n\t\t\tscope?: HistoryIndexScope;\n\t }\n\t| { id: number; action: \"clear\"; sessionId: string }\n\t| { id: number; action: \"close\" };\n\nexport class HistoryIndexUnsupportedError extends Error {}\n\ntype Response =\n\t| { id: number; result?: unknown; error?: string }\n\t| { ready: true }\n\t| { startupError: string; unsupported: boolean };\nconst MAX_PENDING_BYTES = 4 * 1024 * 1024;\nconst MAX_REQUEST_BYTES = 2 * 1024 * 1024;\n\nfunction workerPath(): string {\n\tconst candidates = [\n\t\tfileURLToPath(new URL(\"./history-index-worker.js\", import.meta.url)),\n\t\tfileURLToPath(new URL(\"./history-index-worker.ts\", import.meta.url)),\n\t\tjoin(getPackageDir(), \"dist\", \"core\", \"history-index-worker.js\"),\n\t\tjoin(dirname(process.execPath), \"core\", \"history-index-worker.js\"),\n\t\tjoin(dirname(process.execPath), \"history-index-worker.js\"),\n\t];\n\tconst path = candidates.find((candidate) => existsSync(candidate));\n\tif (!path) throw new Error(\"Base Context history-index worker payload is missing\");\n\treturn path;\n}\n\n/** One bounded IPC queue; all SQLite work runs outside the agent/UI event loop. */\nexport class HistoryIndex {\n\tprivate child: ChildProcess;\n\tprivate nextId = 1;\n\tprivate pendingBytes = 0;\n\tprivate closed = false;\n\tprivate closing = false;\n\tprivate closePromise: Promise<void> | undefined;\n\tprivate exited: Promise<void>;\n\tprivate settled: Promise<void> = Promise.resolve();\n\tprivate pending = new Map<\n\t\tnumber,\n\t\t{ bytes: number; resolve: (result: unknown) => void; reject: (error: Error) => void }\n\t>();\n\tprivate ready: Promise<void>;\n\n\tstatic async open(\n\t\tpath: string,\n\t\toptions: { nodeExecutable?: string; readOnly?: boolean } = {},\n\t): Promise<HistoryIndex> {\n\t\tconst index = new HistoryIndex(path, options);\n\t\ttry {\n\t\t\tawait index.ready;\n\t\t\treturn index;\n\t\t} catch (error) {\n\t\t\tawait index.close().catch(() => undefined);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate constructor(path: string, options: { nodeExecutable?: string; readOnly?: boolean }) {\n\t\tassertProductStatePath(path);\n\t\tconst entrypoint = workerPath();\n\t\tconst nodeExecutable = options.nodeExecutable ?? (\"bun\" in process.versions ? \"node\" : process.execPath);\n\t\tthis.child = fork(entrypoint, options.readOnly ? [path, \"--read-only\"] : [path], {\n\t\t\texecPath: nodeExecutable,\n\t\t\texecArgv: [\n\t\t\t\t\"--experimental-sqlite\",\n\t\t\t\t\"--disable-warning=ExperimentalWarning\",\n\t\t\t\t...(entrypoint.endsWith(\".ts\") ? [\"--import\", import.meta.resolve(\"tsx\")] : []),\n\t\t\t],\n\t\t\tstdio: [\"ignore\", \"ignore\", \"pipe\", \"ipc\"],\n\t\t\tenv: {\n\t\t\t\tPATH: process.env.PATH,\n\t\t\t\tHOME: homedir(),\n\t\t\t\tTMPDIR: tmpdir(),\n\t\t\t\tSYSTEMROOT: process.env.SYSTEMROOT,\n\t\t\t\tWINDIR: process.env.WINDIR,\n\t\t\t},\n\t\t});\n\t\tthis.exited = new Promise<void>((resolveExit) => {\n\t\t\tthis.child.once(\"exit\", () => resolveExit());\n\t\t\tthis.child.once(\"close\", () => resolveExit());\n\t\t});\n\t\tlet diagnostics = \"\";\n\t\tthis.child.stderr?.on(\"data\", (data: Buffer) => {\n\t\t\tdiagnostics = (diagnostics + data.toString()).slice(-8192);\n\t\t});\n\t\tlet readyResolve = () => {};\n\t\tlet readyReject: (error: Error) => void = () => {};\n\t\tthis.ready = new Promise<void>((resolve, reject) => {\n\t\t\treadyResolve = resolve;\n\t\t\treadyReject = reject;\n\t\t});\n\t\tconst fail = (error: Error) => {\n\t\t\tthis.closed = true;\n\t\t\treadyReject(error);\n\t\t\tfor (const request of this.pending.values()) request.reject(error);\n\t\t\tthis.pending.clear();\n\t\t\tthis.pendingBytes = 0;\n\t\t};\n\t\tthis.child.on(\"error\", (error) => {\n\t\t\tfail(error);\n\t\t\tthis.child.kill();\n\t\t});\n\t\tthis.child.on(\"disconnect\", () => {\n\t\t\tfail(new Error(\"History-index worker disconnected\"));\n\t\t\tif (!this.closing) this.child.kill();\n\t\t});\n\t\tthis.child.on(\"exit\", (code) =>\n\t\t\tfail(new Error(`History-index worker exited (${code})${diagnostics ? `: ${diagnostics}` : \"\"}`)),\n\t\t);\n\t\tthis.child.on(\"message\", (message: Response) => {\n\t\t\tif (\"startupError\" in message) {\n\t\t\t\tfail(\n\t\t\t\t\tmessage.unsupported\n\t\t\t\t\t\t? new HistoryIndexUnsupportedError(message.startupError)\n\t\t\t\t\t\t: new Error(message.startupError),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (\"ready\" in message) {\n\t\t\t\treadyResolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst request = this.pending.get(message.id);\n\t\t\tif (!request) return;\n\t\t\tthis.pending.delete(message.id);\n\t\t\tthis.pendingBytes -= request.bytes;\n\t\t\tif (message.error) request.reject(new Error(message.error));\n\t\t\telse request.resolve(message.result);\n\t\t});\n\t}\n\n\tprivate async request(message: HistoryIndexRequest): Promise<unknown> {\n\t\tif (this.closed || (this.closing && message.action !== \"close\")) throw new Error(\"History index is closed\");\n\t\tif (\n\t\t\t(\"sessionId\" in message && message.sessionId.length > 512) ||\n\t\t\t((message.action === \"get\" ||\n\t\t\t\tmessage.action === \"get_source\" ||\n\t\t\t\tmessage.action === \"read_source_payload\" ||\n\t\t\t\tmessage.action === \"read_payload\" ||\n\t\t\t\tmessage.action === \"read_context_update_payload\") &&\n\t\t\t\tmessage.eventId.length > 512) ||\n\t\t\t((message.action === \"source_label\" || message.action === \"source_assistant_usage\") &&\n\t\t\t\tmessage.targetId.length > 512) ||\n\t\t\t(message.action === \"ipython_sent_messages\" &&\n\t\t\t\t(message.toolCallId.length > 8192 ||\n\t\t\t\t\t(message.options.messageId !== undefined && message.options.messageId.length > 8192))) ||\n\t\t\t(message.action === \"search\" && message.query.length > 8192)\n\t\t) {\n\t\t\tthrow new Error(\"History-index request field limit exceeded\");\n\t\t}\n\t\tconst bytes = Buffer.byteLength(JSON.stringify(message));\n\t\tif (bytes > MAX_REQUEST_BYTES || this.pendingBytes + bytes > MAX_PENDING_BYTES || this.pending.size >= 32) {\n\t\t\tthrow new Error(\"History-index queue limit reached; await pending work before admitting more\");\n\t\t}\n\t\tthis.pendingBytes += bytes;\n\t\tconst result = new Promise<unknown>((resolve, reject) => {\n\t\t\tthis.pending.set(message.id, { bytes, resolve, reject });\n\t\t});\n\t\tthis.settled = Promise.allSettled([this.settled, result]).then(() => undefined);\n\t\ttry {\n\t\t\tawait this.ready;\n\t\t\tthis.child.send(message, (error) => {\n\t\t\t\tif (!error) return;\n\t\t\t\tconst request = this.pending.get(message.id);\n\t\t\t\tif (!request) return;\n\t\t\t\tthis.pending.delete(message.id);\n\t\t\t\tthis.pendingBytes -= request.bytes;\n\t\t\t\trequest.reject(error);\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconst request = this.pending.get(message.id);\n\t\t\tif (request) {\n\t\t\t\tthis.pending.delete(message.id);\n\t\t\t\tthis.pendingBytes -= request.bytes;\n\t\t\t\trequest.reject(error instanceof Error ? error : new Error(String(error)));\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tasync apply(sessionId: string, events: IndexedSourceEvent[], committedThrough: number): Promise<void> {\n\t\tif (events.length > 128) throw new Error(\"Index batch limit exceeded\");\n\t\tlet bytes = 1024;\n\t\tconst snapshots = events.map((event) => {\n\t\t\tif (\n\t\t\t\t!event.id ||\n\t\t\t\tevent.id.length > 512 ||\n\t\t\t\t(event.parentId?.length ?? 0) > 512 ||\n\t\t\t\tevent.kind.length > 128 ||\n\t\t\t\tevent.revision.length > 512 ||\n\t\t\t\tevent.text.length > 8192 ||\n\t\t\t\tevent.locator.path.length > 4096\n\t\t\t) {\n\t\t\t\tthrow new Error(\"Index record limit exceeded; use bounded source parts\");\n\t\t\t}\n\t\t\t// Copy the allowlisted metadata, not extra fields or a mutable source object.\n\t\t\tconst snapshot: IndexedSourceEvent = {\n\t\t\t\tid: event.id,\n\t\t\t\tsequence: event.sequence,\n\t\t\t\tparentId: event.parentId,\n\t\t\t\tkind: event.kind,\n\t\t\t\tauthority: event.authority,\n\t\t\t\trevision: event.revision,\n\t\t\t\t...(event.retention === undefined ? {} : { retention: event.retention }),\n\t\t\t\ttext: event.text,\n\t\t\t\ttextComplete: event.textComplete,\n\t\t\t\tlocator: { path: event.locator.path, offset: event.locator.offset, length: event.locator.length },\n\t\t\t};\n\t\t\tbytes += Buffer.byteLength(JSON.stringify(snapshot)) + 1;\n\t\t\tif (bytes > MAX_REQUEST_BYTES) throw new Error(\"Index batch byte limit exceeded\");\n\t\t\treturn snapshot;\n\t\t});\n\t\tawait this.request({ id: this.nextId++, action: \"apply\", sessionId, events: snapshots, committedThrough });\n\t}\n\tasync syncSource(sessionId: string, snapshot: SessionJournalState): Promise<HistoryIndexFrontier> {\n\t\tconst target: SessionJournalState = {\n\t\t\tjournalPath: snapshot.journalPath,\n\t\t\tnextSequence: snapshot.nextSequence,\n\t\t\tformat: snapshot.format,\n\t\t\tbyteLength: snapshot.byteLength,\n\t\t\tchecksum: snapshot.checksum,\n\t\t\tdev: snapshot.dev,\n\t\t\tino: snapshot.ino,\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"sync_source\",\n\t\t\tsessionId,\n\t\t\tsnapshot: target,\n\t\t})) as HistoryIndexFrontier;\n\t}\n\t/** One read-only SQLite snapshot, checked against current source descriptor/frontier identity. */\n\tasync readSessionCatalog(sessionId: string, source: CatalogSourceIdentity): Promise<SessionCatalogIndexResult> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"catalog\",\n\t\t\tsessionId,\n\t\t\tsource: { ...source },\n\t\t})) as SessionCatalogIndexResult;\n\t}\n\t/** Current whole-source bootstrap; equality with this exact owner snapshot is required. */\n\tasync currentSourceBootstrap(sessionId: string, snapshot: SessionJournalState): Promise<SourceBootstrapState> {\n\t\tconst target: SessionJournalState = {\n\t\t\tjournalPath: snapshot.journalPath,\n\t\t\tnextSequence: snapshot.nextSequence,\n\t\t\tformat: snapshot.format,\n\t\t\tbyteLength: snapshot.byteLength,\n\t\t\tchecksum: snapshot.checksum,\n\t\t\tdev: snapshot.dev,\n\t\t\tino: snapshot.ino,\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"current_source_bootstrap\",\n\t\t\tsessionId,\n\t\t\tsnapshot: target,\n\t\t})) as SourceBootstrapState;\n\t}\n\t/** Latest label control for this source target, including a clear. */\n\tasync sourceLabel(sessionId: string, targetId: string, through: number): Promise<IndexedSourceEvent | undefined> {\n\t\treturn (await this.request({ id: this.nextId++, action: \"source_label\", sessionId, targetId, through })) as\n\t\t\t| IndexedSourceEvent\n\t\t\t| undefined;\n\t}\n\t/** Latest stored source aggregate, without validating or replacing its payload. */\n\tasync sourceAssistantUsage(\n\t\tsessionId: string,\n\t\ttargetId: string,\n\t\tthrough: number,\n\t): Promise<IndexedSourceEvent | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"source_assistant_usage\",\n\t\t\tsessionId,\n\t\t\ttargetId,\n\t\t\tthrough,\n\t\t})) as IndexedSourceEvent | undefined;\n\t}\n\tasync get(\n\t\tsessionId: string,\n\t\teventId: string,\n\t\tscope?: HistoryIndexScope & { through: number },\n\t): Promise<IndexedSourceEvent | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"get\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\t...(scope ? { scope: { leafId: scope.leafId, through: scope.through } } : {}),\n\t\t})) as IndexedSourceEvent | undefined;\n\t}\n\t/** Whole-source metadata within a synchronized captured prefix, independent of branch selection. */\n\tasync getSource(sessionId: string, eventId: string, through: number): Promise<IndexedSourceEvent | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"get_source\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\tthrough,\n\t\t})) as IndexedSourceEvent | undefined;\n\t}\n\t/** Exact ordered page; rejects if 256 candidates cannot establish the page and lookahead. */\n\tasync page(\n\t\tsessionId: string,\n\t\tafter: number,\n\t\tthrough: number,\n\t\tlimit = 64,\n\t\tscope?: HistoryIndexScope,\n\t): Promise<HistoryIndexPage> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"page\",\n\t\t\tsessionId,\n\t\t\tafter,\n\t\t\tthrough,\n\t\t\tlimit,\n\t\t\t...(scope ? { scope: { leafId: scope.leafId } } : {}),\n\t\t})) as HistoryIndexPage;\n\t}\n\t/** Selection and text-coverage scans each reject after 256 unresolved candidates. */\n\tasync search(\n\t\tsessionId: string,\n\t\tquery: string,\n\t\tthrough: number,\n\t\tlimit = 16,\n\t\tscope?: HistoryIndexScope,\n\t): Promise<HistoryIndexPage> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"search\",\n\t\t\tsessionId,\n\t\t\tquery,\n\t\t\tthrough,\n\t\t\tlimit,\n\t\t\t...(scope ? { scope: { leafId: scope.leafId } } : {}),\n\t\t})) as HistoryIndexPage;\n\t}\n\t/** Selection and import-loss scans each have a 256-candidate exact-or-refuse budget. */\n\tasync taskEvidence(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\toptions: TaskEvidenceOptions = {},\n\t): Promise<TaskEvidencePage> {\n\t\tconst selection: TaskEvidenceOptions = {\n\t\t\t...(options.after ? { after: { sequence: options.after.sequence, ordinal: options.after.ordinal } } : {}),\n\t\t\tlimit: options.limit ?? 64,\n\t\t\t...(options.itemId !== undefined ? { itemId: options.itemId } : {}),\n\t\t\t...(options.taskKey !== undefined ? { taskKey: options.taskKey } : {}),\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"task_evidence\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: selection,\n\t\t})) as TaskEvidencePage;\n\t}\n\t/** Chronological pages of the exact parent chain, never attached request evidence. */\n\tasync parentPath(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\toptions: ParentPathOptions = {},\n\t): Promise<ParentPathPage> {\n\t\tconst cursor = options.cursor;\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"parent_path\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: {\n\t\t\t\t...(cursor\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tcursor: {\n\t\t\t\t\t\t\t\tversion: cursor.version,\n\t\t\t\t\t\t\t\tsessionId: cursor.sessionId,\n\t\t\t\t\t\t\t\tjournalPath: cursor.journalPath,\n\t\t\t\t\t\t\t\tdev: cursor.dev,\n\t\t\t\t\t\t\t\tino: cursor.ino,\n\t\t\t\t\t\t\t\tleafId: cursor.leafId,\n\t\t\t\t\t\t\t\tthrough: cursor.through,\n\t\t\t\t\t\t\t\tthroughRevision: cursor.throughRevision,\n\t\t\t\t\t\t\t\tnextDepth: cursor.nextDepth,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t\t...(options.limit !== undefined ? { limit: options.limit } : {}),\n\t\t\t},\n\t\t})) as ParentPathPage;\n\t}\n\t/** Actual parent-path sent-message refs; a tool result need not exist yet. */\n\tasync ipythonSentMessages(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\ttoolCallId: string,\n\t\toptions: IpythonSentMessagesOptions = {},\n\t): Promise<IpythonSentMessagesPage> {\n\t\tconst cursor = options.cursor;\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"ipython_sent_messages\",\n\t\t\tsessionId,\n\t\t\ttoolCallId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: {\n\t\t\t\t...(options.messageId !== undefined ? { messageId: options.messageId } : {}),\n\t\t\t\t...(options.limit !== undefined ? { limit: options.limit } : {}),\n\t\t\t\t...(cursor\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tcursor: {\n\t\t\t\t\t\t\t\tversion: cursor.version,\n\t\t\t\t\t\t\t\tsessionId: cursor.sessionId,\n\t\t\t\t\t\t\t\tjournalPath: cursor.journalPath,\n\t\t\t\t\t\t\t\tdev: cursor.dev,\n\t\t\t\t\t\t\t\tino: cursor.ino,\n\t\t\t\t\t\t\t\tleafId: cursor.leafId,\n\t\t\t\t\t\t\t\tthrough: cursor.through,\n\t\t\t\t\t\t\t\tthroughRevision: cursor.throughRevision,\n\t\t\t\t\t\t\t\ttoolCallId: cursor.toolCallId,\n\t\t\t\t\t\t\t\tmessageId: cursor.messageId,\n\t\t\t\t\t\t\t\tafter: cursor.after,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t})) as IpythonSentMessagesPage;\n\t}\n\t/** At most nine source refs and exact message/goal-seeding facts for the captured branch. */\n\tasync branchBootstrap(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t): Promise<BranchBootstrapState> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"branch_bootstrap\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t})) as BranchBootstrapState;\n\t}\n\t/** Context-visible source refs; compiler ordering and LLM filtering happen after selection. */\n\tasync contextUpdates(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\ttarget: ContextUpdateTarget,\n\t): Promise<ContextUpdates> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"context_updates\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\ttarget:\n\t\t\t\ttarget.kind === \"assistant-usage\"\n\t\t\t\t\t? { kind: target.kind, targetId: target.targetId }\n\t\t\t\t\t: { kind: target.kind, toolCallId: target.toolCallId },\n\t\t})) as ContextUpdates;\n\t}\n\tasync readContextUpdatePayload(\n\t\tsessionId: string,\n\t\teventId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\ttarget: ContextUpdateTarget,\n\t\toptions: HistoryPayloadReadOptions = {},\n\t): Promise<CanonicalPayloadFragment | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"read_context_update_payload\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\ttarget:\n\t\t\t\ttarget.kind === \"assistant-usage\"\n\t\t\t\t\t? { kind: target.kind, targetId: target.targetId }\n\t\t\t\t\t: { kind: target.kind, toolCallId: target.toolCallId },\n\t\t\toptions: { ...options, cursor: options.cursor ? { ...options.cursor } : undefined },\n\t\t})) as CanonicalPayloadFragment | undefined;\n\t}\n\tasync contextManifest(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\toptions: ContextManifestOptions = {},\n\t): Promise<ContextManifestPage> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"context_manifest\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: {\n\t\t\t\t...(options.cursor ? { cursor: { ...options.cursor } } : {}),\n\t\t\t\t...(options.limit !== undefined ? { limit: options.limit } : {}),\n\t\t\t},\n\t\t})) as ContextManifestPage;\n\t}\n\tasync readPayload(\n\t\tsessionId: string,\n\t\teventId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\toptions: HistoryPayloadReadOptions = {},\n\t): Promise<CanonicalPayloadFragment | undefined> {\n\t\tconst selection: HistoryPayloadReadOptions = {\n\t\t\t...(options.cursor\n\t\t\t\t? {\n\t\t\t\t\t\tcursor: {\n\t\t\t\t\t\t\tframeChecksum: options.cursor.frameChecksum,\n\t\t\t\t\t\t\tpayloadOffset: options.cursor.payloadOffset,\n\t\t\t\t\t\t\tbyteOffset: options.cursor.byteOffset,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\t...(options.maxBytes !== undefined ? { maxBytes: options.maxBytes } : {}),\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"read_payload\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: selection,\n\t\t})) as CanonicalPayloadFragment | undefined;\n\t}\n\t/** Exact whole-source payload bytes, bounded by the captured prefix and fragment limit. */\n\tasync readSourcePayload(\n\t\tsessionId: string,\n\t\teventId: string,\n\t\tthrough: number,\n\t\toptions: HistoryPayloadReadOptions = {},\n\t): Promise<CanonicalPayloadFragment | undefined> {\n\t\tconst selection: HistoryPayloadReadOptions = {\n\t\t\t...(options.cursor\n\t\t\t\t? {\n\t\t\t\t\t\tcursor: {\n\t\t\t\t\t\t\tframeChecksum: options.cursor.frameChecksum,\n\t\t\t\t\t\t\tpayloadOffset: options.cursor.payloadOffset,\n\t\t\t\t\t\t\tbyteOffset: options.cursor.byteOffset,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\t...(options.maxBytes !== undefined ? { maxBytes: options.maxBytes } : {}),\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"read_source_payload\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\tthrough,\n\t\t\toptions: selection,\n\t\t})) as CanonicalPayloadFragment | undefined;\n\t}\n\tasync clear(sessionId: string): Promise<void> {\n\t\tawait this.request({ id: this.nextId++, action: \"clear\", sessionId });\n\t}\n\tclose(): Promise<void> {\n\t\tif (this.closePromise) return this.closePromise;\n\t\tthis.closing = true;\n\t\tthis.closePromise = (async () => {\n\t\t\ttry {\n\t\t\t\tawait this.settled;\n\t\t\t\tif (!this.closed) await this.request({ id: this.nextId++, action: \"close\" });\n\t\t\t} finally {\n\t\t\t\tawait this.exited;\n\t\t\t\tthis.closed = true;\n\t\t\t}\n\t\t})();\n\t\treturn this.closePromise;\n\t}\n}\n"]}
1
+ {"version":3,"file":"history-index.js","sourceRoot":"","sources":["../../src/core/history-index.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ChildProcess, fork } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { homedir, tmpdir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { getPackageDir } from \"../config.js\";\nimport { assertProductStatePath } from \"../runtime-paths.js\";\nimport type { CanonicalPayloadCursor, CanonicalPayloadFragment } from \"./canonical-payload-parts.js\";\nimport type { CatalogSourceIdentity } from \"./history-source.js\";\nimport type { JournalFrameRetention, NativeEntryQualification } from \"./journal-frame.js\";\nimport type { SessionCatalogProjection } from \"./session-info-projection.js\";\nimport type { SessionJournalState } from \"./session-journal-owner.js\";\nimport type { TaskStateProjection, TaskStateSourceRef } from \"./task-state.js\";\n\n/** Derived metadata only. Exact evidence remains at the canonical source locator. */\nexport interface IndexedSourceEvent {\n\tid: string;\n\tsequence: number;\n\tparentId: string | null;\n\tkind: string;\n\tauthority: \"user\" | \"runtime\" | \"assistant\" | \"imported\" | \"unrecorded\";\n\tlocator: { path: string; offset: number; length: number };\n\trevision: string;\n\t/** Decoded frame qualifier, never a claim inside the payload. */\n\tretention?: JournalFrameRetention;\n\t/** Positive qualification comes only from synchronized canonical frame control. */\n\tqualification?: NativeEntryQualification;\n\ttext: string;\n\ttextComplete: boolean;\n}\n\nexport interface HistoryIndexPage {\n\tevents: IndexedSourceEvent[];\n\tindexedThrough: number;\n\tcoverage: \"complete\" | \"partial\";\n\ttruncated: boolean;\n\tnextAfter: number | null;\n}\n\nexport interface HistoryIndexFrontier extends SessionJournalState {\n\tformat: \"framed\";\n\tindexedThrough: number;\n}\n\nexport interface HistoryIndexScope {\n\tleafId: string | null;\n}\n\n/** Whole-source facts for exactly the current indexed owner snapshot, not an older prefix. */\nexport interface SourceBootstrapState {\n\tleaf: IndexedSourceEvent | null;\n\tsessionInfo: IndexedSourceEvent | null;\n\tsessionState: IndexedSourceEvent | null;\n\tcompactionCount: number;\n\t/** Position in the optional initial model/thinking/tier content prefix. */\n\tcontentPrefix: number;\n\thasUserContent: boolean;\n}\n\nexport type SessionCatalogIndexResult =\n\t| { selection: \"unavailable\" | \"stale\" | \"unsupported\"; reason: string }\n\t| {\n\t\t\tselection: \"covered\";\n\t\t\tfrontier: HistoryIndexFrontier;\n\t\t\tprojection: SessionCatalogProjection;\n\t\t\trefs: {\n\t\t\t\tfirstMessage: IndexedSourceEvent | null;\n\t\t\t\tname: IndexedSourceEvent | null;\n\t\t\t\tagentStatus: IndexedSourceEvent | null;\n\t\t\t};\n\t };\n\n/** Captured parent-chain state. Values remain in the referenced canonical payloads. */\nexport interface BranchBootstrapState {\n\tmodel: IndexedSourceEvent | null;\n\tthinkingLevel: IndexedSourceEvent | null;\n\tserviceTier: IndexedSourceEvent | null;\n\tgoalState: IndexedSourceEvent | null;\n\trlmMaxDepth: IndexedSourceEvent | null;\n\tlatestCompaction: IndexedSourceEvent | null;\n\tcontextUsageAssistant: IndexedSourceEvent | null;\n\tgitState: IndexedSourceEvent | null;\n\tagentStatus: IndexedSourceEvent | null;\n\thasContextMessages: boolean;\n\t/** Exact message-entry presence, independent of payload truthiness. */\n\thasBranchMessage: boolean;\n\tgoalSeedable: boolean;\n}\n\nexport interface TaskEvidenceCursor {\n\tsequence: number;\n\tordinal: number;\n}\nexport interface TaskEvidenceOptions {\n\ttaskKey?: string;\n\tafter?: TaskEvidenceCursor | null;\n\tlimit?: number;\n\titemId?: string;\n}\nexport type IndexedTaskEvidence =\n\t| (TaskEvidenceCursor & { projection: TaskStateProjection; truncated: false })\n\t| (TaskEvidenceCursor & { source: TaskStateSourceRef; itemId?: string; itemIdOmitted?: true; truncated: true });\nexport interface TaskEvidencePage {\n\t/** Existing journal incarnation; absent for unbacked synthetic index rows. */\n\tsourceIdentity?: { journalPath: string; dev: number; ino: number };\n\tentries: IndexedTaskEvidence[];\n\tindexedThrough: number;\n\tcoverage: \"complete\" | \"partial\";\n\t/** A structured-evidence slice, never exhaustive semantic requirement extraction. */\n\tstructuredOnly: true;\n\tselective: true;\n\ttruncated: boolean;\n\tnextAfter: TaskEvidenceCursor | null;\n}\n\nexport interface ContextManifestCursor {\n\tversion: 1;\n\tsessionId: string;\n\tjournalPath: string;\n\tdev: number;\n\tino: number;\n\tleafId: string | null;\n\tthrough: number;\n\tthroughRevision: string;\n\tnextOrdinal: number;\n}\n\n/** Exact canonical source ref, not a decoded message or provider-ordered item. */\nexport interface ContextRef {\n\tentryId: string;\n\tsequence: number;\n\t/** Source classification, not authority inferred from rendered message text. */\n\tauthority?: IndexedSourceEvent[\"authority\"];\n\t/** Canonical frame control, never projected from message/details payloads. */\n\tqualification?: NativeEntryQualification;\n\tretention?: JournalFrameRetention;\n\tkind: \"message\" | \"custom_message\" | \"branch_summary\" | \"compaction\";\n\tlocator: IndexedSourceEvent[\"locator\"];\n\trevision: string;\n}\nexport interface ContextManifestOptions {\n\tcursor?: ContextManifestCursor;\n\tlimit?: number;\n}\n\nexport interface ParentPathCursor {\n\tversion: 1;\n\tsessionId: string;\n\tjournalPath: string;\n\tdev: number;\n\tino: number;\n\tleafId: string | null;\n\tthrough: number;\n\tthroughRevision: string;\n\t/** Zero-based depth of the next entry on the captured parent path. */\n\tnextDepth: number;\n}\nexport interface ParentPathOptions {\n\tcursor?: ParentPathCursor;\n\tlimit?: number;\n}\nexport interface ParentPathPage {\n\tevents: IndexedSourceEvent[];\n\tnextCursor: ParentPathCursor | null;\n\ttotalEntries: number;\n}\nexport type ContextManifestPage =\n\t| {\n\t\t\tselection: \"known\";\n\t\t\tsummaryRef: ContextRef | null;\n\t\t\tactiveBase: number;\n\t\t\tretainedMessageCount: number;\n\t\t\tactiveMessageCount: number;\n\t\t\trefs: (ContextRef & { ordinal: number })[];\n\t\t\torder: \"source\";\n\t\t\tnextCursor: ContextManifestCursor | null;\n\t }\n\t| {\n\t\t\tselection: \"unresolved-lineage\" | \"invalid-first-kept\";\n\t\t\tsummaryRef: ContextRef | null;\n\t\t\trefs: [];\n\t\t\torder: \"source\";\n\t\t\tnextCursor: null;\n\t };\n\nexport type ContextUpdateTarget =\n\t| { kind: \"assistant-usage\"; targetId: string }\n\t| { kind: \"ipython-sent-message\"; toolCallId: string };\n\n/** A related canonical record, not a copied usage value or sent message. */\nexport interface ContextUpdateRef extends Omit<ContextRef, \"kind\"> {\n\tkind: \"child_usage_attributed\" | \"custom\";\n}\nexport interface ContextUpdates {\n\trefs: ContextUpdateRef[];\n\torder: \"source\";\n}\n\nexport interface IpythonSentMessagesCursor {\n\tversion: 1;\n\tsessionId: string;\n\tjournalPath: string;\n\tdev: number;\n\tino: number;\n\tleafId: string | null;\n\tthrough: number;\n\tthroughRevision: string;\n\ttoolCallId: string;\n\tmessageId: string | null;\n\t/** Last examined source sequence; empty pages can still make bounded progress. */\n\tafter: number;\n}\nexport interface IpythonSentMessagesOptions {\n\tmessageId?: string;\n\tcursor?: IpythonSentMessagesCursor;\n\tlimit?: number;\n}\nexport interface IpythonSentMessagesPage {\n\trefs: ContextUpdateRef[];\n\tnextCursor: IpythonSentMessagesCursor | null;\n}\n\nexport interface HistoryPayloadReadOptions {\n\tcursor?: CanonicalPayloadCursor;\n\tmaxBytes?: number;\n}\n\nexport type HistoryIndexRequest =\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"ipython_sent_messages\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\ttoolCallId: string;\n\t\t\toptions: IpythonSentMessagesOptions;\n\t }\n\t| { id: number; action: \"current_source_bootstrap\"; sessionId: string; snapshot: SessionJournalState }\n\t| { id: number; action: \"catalog\"; sessionId: string; source: CatalogSourceIdentity }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"source_label\" | \"source_assistant_usage\";\n\t\t\tsessionId: string;\n\t\t\ttargetId: string;\n\t\t\tthrough: number;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"parent_path\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\toptions: ParentPathOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"branch_bootstrap\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"context_updates\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\ttarget: ContextUpdateTarget;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"read_context_update_payload\";\n\t\t\tsessionId: string;\n\t\t\teventId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\ttarget: ContextUpdateTarget;\n\t\t\toptions: HistoryPayloadReadOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"context_manifest\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\toptions: ContextManifestOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"read_payload\";\n\t\t\tsessionId: string;\n\t\t\teventId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\toptions: HistoryPayloadReadOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"task_evidence\";\n\t\t\tsessionId: string;\n\t\t\tscope: HistoryIndexScope & { through: number };\n\t\t\toptions: TaskEvidenceOptions;\n\t }\n\t| { id: number; action: \"sync_source\"; sessionId: string; snapshot: SessionJournalState }\n\t| { id: number; action: \"apply\"; sessionId: string; events: IndexedSourceEvent[]; committedThrough: number }\n\t| { id: number; action: \"get\"; sessionId: string; eventId: string; scope?: HistoryIndexScope & { through: number } }\n\t| { id: number; action: \"get_source\"; sessionId: string; eventId: string; through: number }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"read_source_payload\";\n\t\t\tsessionId: string;\n\t\t\teventId: string;\n\t\t\tthrough: number;\n\t\t\toptions: HistoryPayloadReadOptions;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"page\";\n\t\t\t/** Bound examined rows and advance over nonmatches instead of requiring an exact filled page. */\n\t\t\tscan?: boolean;\n\t\t\tsessionId: string;\n\t\t\tafter: number;\n\t\t\tlimit: number;\n\t\t\tthrough: number;\n\t\t\tscope?: HistoryIndexScope;\n\t }\n\t| {\n\t\t\tid: number;\n\t\t\taction: \"search\";\n\t\t\tsessionId: string;\n\t\t\tquery: string;\n\t\t\tlimit: number;\n\t\t\tthrough: number;\n\t\t\tscope?: HistoryIndexScope;\n\t }\n\t| { id: number; action: \"clear\"; sessionId: string }\n\t| { id: number; action: \"close\" };\n\nexport class HistoryIndexUnsupportedError extends Error {}\n\ntype Response =\n\t| { id: number; result?: unknown; error?: string }\n\t| { ready: true }\n\t| { startupError: string; unsupported: boolean };\nconst MAX_PENDING_BYTES = 4 * 1024 * 1024;\nconst MAX_REQUEST_BYTES = 2 * 1024 * 1024;\n\nfunction workerPath(): string {\n\tconst candidates = [\n\t\tfileURLToPath(new URL(\"./history-index-worker.js\", import.meta.url)),\n\t\tfileURLToPath(new URL(\"./history-index-worker.ts\", import.meta.url)),\n\t\tjoin(getPackageDir(), \"dist\", \"core\", \"history-index-worker.js\"),\n\t\tjoin(dirname(process.execPath), \"core\", \"history-index-worker.js\"),\n\t\tjoin(dirname(process.execPath), \"history-index-worker.js\"),\n\t];\n\tconst path = candidates.find((candidate) => existsSync(candidate));\n\tif (!path) throw new Error(\"Base Context history-index worker payload is missing\");\n\treturn path;\n}\n\n/** One bounded IPC queue; all SQLite work runs outside the agent/UI event loop. */\nexport class HistoryIndex {\n\tprivate child: ChildProcess;\n\tprivate nextId = 1;\n\tprivate pendingBytes = 0;\n\tprivate closed = false;\n\tprivate closing = false;\n\tprivate closePromise: Promise<void> | undefined;\n\tprivate exited: Promise<void>;\n\tprivate settled: Promise<void> = Promise.resolve();\n\tprivate pending = new Map<\n\t\tnumber,\n\t\t{ bytes: number; resolve: (result: unknown) => void; reject: (error: Error) => void }\n\t>();\n\tprivate ready: Promise<void>;\n\n\tstatic async open(\n\t\tpath: string,\n\t\toptions: { nodeExecutable?: string; readOnly?: boolean } = {},\n\t): Promise<HistoryIndex> {\n\t\tconst index = new HistoryIndex(path, options);\n\t\ttry {\n\t\t\tawait index.ready;\n\t\t\treturn index;\n\t\t} catch (error) {\n\t\t\tawait index.close().catch(() => undefined);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate constructor(path: string, options: { nodeExecutable?: string; readOnly?: boolean }) {\n\t\tassertProductStatePath(path);\n\t\tconst entrypoint = workerPath();\n\t\tconst nodeExecutable = options.nodeExecutable ?? (\"bun\" in process.versions ? \"node\" : process.execPath);\n\t\tthis.child = fork(entrypoint, options.readOnly ? [path, \"--read-only\"] : [path], {\n\t\t\texecPath: nodeExecutable,\n\t\t\texecArgv: [\n\t\t\t\t\"--experimental-sqlite\",\n\t\t\t\t\"--disable-warning=ExperimentalWarning\",\n\t\t\t\t...(entrypoint.endsWith(\".ts\") ? [\"--import\", import.meta.resolve(\"tsx\")] : []),\n\t\t\t],\n\t\t\tstdio: [\"ignore\", \"ignore\", \"pipe\", \"ipc\"],\n\t\t\tenv: {\n\t\t\t\tPATH: process.env.PATH,\n\t\t\t\tHOME: homedir(),\n\t\t\t\tTMPDIR: tmpdir(),\n\t\t\t\tSYSTEMROOT: process.env.SYSTEMROOT,\n\t\t\t\tWINDIR: process.env.WINDIR,\n\t\t\t},\n\t\t});\n\t\tthis.exited = new Promise<void>((resolveExit) => {\n\t\t\tthis.child.once(\"exit\", () => resolveExit());\n\t\t\tthis.child.once(\"close\", () => resolveExit());\n\t\t});\n\t\tlet diagnostics = \"\";\n\t\tthis.child.stderr?.on(\"data\", (data: Buffer) => {\n\t\t\tdiagnostics = (diagnostics + data.toString()).slice(-8192);\n\t\t});\n\t\tlet readyResolve = () => {};\n\t\tlet readyReject: (error: Error) => void = () => {};\n\t\tthis.ready = new Promise<void>((resolve, reject) => {\n\t\t\treadyResolve = resolve;\n\t\t\treadyReject = reject;\n\t\t});\n\t\tconst fail = (error: Error) => {\n\t\t\tthis.closed = true;\n\t\t\treadyReject(error);\n\t\t\tfor (const request of this.pending.values()) request.reject(error);\n\t\t\tthis.pending.clear();\n\t\t\tthis.pendingBytes = 0;\n\t\t};\n\t\tthis.child.on(\"error\", (error) => {\n\t\t\tfail(error);\n\t\t\tthis.child.kill();\n\t\t});\n\t\tthis.child.on(\"disconnect\", () => {\n\t\t\tfail(new Error(\"History-index worker disconnected\"));\n\t\t\tif (!this.closing) this.child.kill();\n\t\t});\n\t\tthis.child.on(\"exit\", (code) =>\n\t\t\tfail(new Error(`History-index worker exited (${code})${diagnostics ? `: ${diagnostics}` : \"\"}`)),\n\t\t);\n\t\tthis.child.on(\"message\", (message: Response) => {\n\t\t\tif (\"startupError\" in message) {\n\t\t\t\tfail(\n\t\t\t\t\tmessage.unsupported\n\t\t\t\t\t\t? new HistoryIndexUnsupportedError(message.startupError)\n\t\t\t\t\t\t: new Error(message.startupError),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (\"ready\" in message) {\n\t\t\t\treadyResolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst request = this.pending.get(message.id);\n\t\t\tif (!request) return;\n\t\t\tthis.pending.delete(message.id);\n\t\t\tthis.pendingBytes -= request.bytes;\n\t\t\tif (message.error) request.reject(new Error(message.error));\n\t\t\telse request.resolve(message.result);\n\t\t});\n\t}\n\n\tprivate async request(message: HistoryIndexRequest): Promise<unknown> {\n\t\tif (this.closed || (this.closing && message.action !== \"close\")) throw new Error(\"History index is closed\");\n\t\tif (\n\t\t\t(\"sessionId\" in message && message.sessionId.length > 512) ||\n\t\t\t((message.action === \"get\" ||\n\t\t\t\tmessage.action === \"get_source\" ||\n\t\t\t\tmessage.action === \"read_source_payload\" ||\n\t\t\t\tmessage.action === \"read_payload\" ||\n\t\t\t\tmessage.action === \"read_context_update_payload\") &&\n\t\t\t\tmessage.eventId.length > 512) ||\n\t\t\t((message.action === \"source_label\" || message.action === \"source_assistant_usage\") &&\n\t\t\t\tmessage.targetId.length > 512) ||\n\t\t\t(message.action === \"ipython_sent_messages\" &&\n\t\t\t\t(message.toolCallId.length > 8192 ||\n\t\t\t\t\t(message.options.messageId !== undefined && message.options.messageId.length > 8192))) ||\n\t\t\t(message.action === \"search\" && message.query.length > 8192)\n\t\t) {\n\t\t\tthrow new Error(\"History-index request field limit exceeded\");\n\t\t}\n\t\tconst bytes = Buffer.byteLength(JSON.stringify(message));\n\t\tif (bytes > MAX_REQUEST_BYTES || this.pendingBytes + bytes > MAX_PENDING_BYTES || this.pending.size >= 32) {\n\t\t\tthrow new Error(\"History-index queue limit reached; await pending work before admitting more\");\n\t\t}\n\t\tthis.pendingBytes += bytes;\n\t\tconst result = new Promise<unknown>((resolve, reject) => {\n\t\t\tthis.pending.set(message.id, { bytes, resolve, reject });\n\t\t});\n\t\tthis.settled = Promise.allSettled([this.settled, result]).then(() => undefined);\n\t\ttry {\n\t\t\tawait this.ready;\n\t\t\tthis.child.send(message, (error) => {\n\t\t\t\tif (!error) return;\n\t\t\t\tconst request = this.pending.get(message.id);\n\t\t\t\tif (!request) return;\n\t\t\t\tthis.pending.delete(message.id);\n\t\t\t\tthis.pendingBytes -= request.bytes;\n\t\t\t\trequest.reject(error);\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconst request = this.pending.get(message.id);\n\t\t\tif (request) {\n\t\t\t\tthis.pending.delete(message.id);\n\t\t\t\tthis.pendingBytes -= request.bytes;\n\t\t\t\trequest.reject(error instanceof Error ? error : new Error(String(error)));\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tasync apply(sessionId: string, events: IndexedSourceEvent[], committedThrough: number): Promise<void> {\n\t\tif (events.length > 128) throw new Error(\"Index batch limit exceeded\");\n\t\tlet bytes = 1024;\n\t\tconst snapshots = events.map((event) => {\n\t\t\tif (\n\t\t\t\t!event.id ||\n\t\t\t\tevent.id.length > 512 ||\n\t\t\t\t(event.parentId?.length ?? 0) > 512 ||\n\t\t\t\tevent.kind.length > 128 ||\n\t\t\t\tevent.revision.length > 512 ||\n\t\t\t\tevent.text.length > 8192 ||\n\t\t\t\tevent.locator.path.length > 4096\n\t\t\t) {\n\t\t\t\tthrow new Error(\"Index record limit exceeded; use bounded source parts\");\n\t\t\t}\n\t\t\t// Copy the allowlisted metadata, not extra fields or a mutable source object.\n\t\t\tconst snapshot: IndexedSourceEvent = {\n\t\t\t\tid: event.id,\n\t\t\t\tsequence: event.sequence,\n\t\t\t\tparentId: event.parentId,\n\t\t\t\tkind: event.kind,\n\t\t\t\tauthority: event.authority,\n\t\t\t\trevision: event.revision,\n\t\t\t\t...(event.retention === undefined ? {} : { retention: event.retention }),\n\t\t\t\ttext: event.text,\n\t\t\t\ttextComplete: event.textComplete,\n\t\t\t\tlocator: { path: event.locator.path, offset: event.locator.offset, length: event.locator.length },\n\t\t\t};\n\t\t\tbytes += Buffer.byteLength(JSON.stringify(snapshot)) + 1;\n\t\t\tif (bytes > MAX_REQUEST_BYTES) throw new Error(\"Index batch byte limit exceeded\");\n\t\t\treturn snapshot;\n\t\t});\n\t\tawait this.request({ id: this.nextId++, action: \"apply\", sessionId, events: snapshots, committedThrough });\n\t}\n\tasync syncSource(sessionId: string, snapshot: SessionJournalState): Promise<HistoryIndexFrontier> {\n\t\tconst target: SessionJournalState = {\n\t\t\tjournalPath: snapshot.journalPath,\n\t\t\tnextSequence: snapshot.nextSequence,\n\t\t\tformat: snapshot.format,\n\t\t\tbyteLength: snapshot.byteLength,\n\t\t\tchecksum: snapshot.checksum,\n\t\t\tdev: snapshot.dev,\n\t\t\tino: snapshot.ino,\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"sync_source\",\n\t\t\tsessionId,\n\t\t\tsnapshot: target,\n\t\t})) as HistoryIndexFrontier;\n\t}\n\t/** One read-only SQLite snapshot, checked against current source descriptor/frontier identity. */\n\tasync readSessionCatalog(sessionId: string, source: CatalogSourceIdentity): Promise<SessionCatalogIndexResult> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"catalog\",\n\t\t\tsessionId,\n\t\t\tsource: { ...source },\n\t\t})) as SessionCatalogIndexResult;\n\t}\n\t/** Current whole-source bootstrap; equality with this exact owner snapshot is required. */\n\tasync currentSourceBootstrap(sessionId: string, snapshot: SessionJournalState): Promise<SourceBootstrapState> {\n\t\tconst target: SessionJournalState = {\n\t\t\tjournalPath: snapshot.journalPath,\n\t\t\tnextSequence: snapshot.nextSequence,\n\t\t\tformat: snapshot.format,\n\t\t\tbyteLength: snapshot.byteLength,\n\t\t\tchecksum: snapshot.checksum,\n\t\t\tdev: snapshot.dev,\n\t\t\tino: snapshot.ino,\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"current_source_bootstrap\",\n\t\t\tsessionId,\n\t\t\tsnapshot: target,\n\t\t})) as SourceBootstrapState;\n\t}\n\t/** Latest label control for this source target, including a clear. */\n\tasync sourceLabel(sessionId: string, targetId: string, through: number): Promise<IndexedSourceEvent | undefined> {\n\t\treturn (await this.request({ id: this.nextId++, action: \"source_label\", sessionId, targetId, through })) as\n\t\t\t| IndexedSourceEvent\n\t\t\t| undefined;\n\t}\n\t/** Latest stored source aggregate, without validating or replacing its payload. */\n\tasync sourceAssistantUsage(\n\t\tsessionId: string,\n\t\ttargetId: string,\n\t\tthrough: number,\n\t): Promise<IndexedSourceEvent | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"source_assistant_usage\",\n\t\t\tsessionId,\n\t\t\ttargetId,\n\t\t\tthrough,\n\t\t})) as IndexedSourceEvent | undefined;\n\t}\n\tasync get(\n\t\tsessionId: string,\n\t\teventId: string,\n\t\tscope?: HistoryIndexScope & { through: number },\n\t): Promise<IndexedSourceEvent | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"get\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\t...(scope ? { scope: { leafId: scope.leafId, through: scope.through } } : {}),\n\t\t})) as IndexedSourceEvent | undefined;\n\t}\n\t/** Whole-source metadata within a synchronized captured prefix, independent of branch selection. */\n\tasync getSource(sessionId: string, eventId: string, through: number): Promise<IndexedSourceEvent | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"get_source\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\tthrough,\n\t\t})) as IndexedSourceEvent | undefined;\n\t}\n\t/** Exact ordered page; rejects if 256 candidates cannot establish the page and lookahead. */\n\tasync page(\n\t\tsessionId: string,\n\t\tafter: number,\n\t\tthrough: number,\n\t\tlimit = 64,\n\t\tscope?: HistoryIndexScope,\n\t\toptions: { scan?: boolean } = {},\n\t): Promise<HistoryIndexPage> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"page\",\n\t\t\tscan: options.scan,\n\t\t\tsessionId,\n\t\t\tafter,\n\t\t\tthrough,\n\t\t\tlimit,\n\t\t\t...(scope ? { scope: { leafId: scope.leafId } } : {}),\n\t\t})) as HistoryIndexPage;\n\t}\n\t/** Selection and text-coverage scans each reject after 256 unresolved candidates. */\n\tasync search(\n\t\tsessionId: string,\n\t\tquery: string,\n\t\tthrough: number,\n\t\tlimit = 16,\n\t\tscope?: HistoryIndexScope,\n\t): Promise<HistoryIndexPage> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"search\",\n\t\t\tsessionId,\n\t\t\tquery,\n\t\t\tthrough,\n\t\t\tlimit,\n\t\t\t...(scope ? { scope: { leafId: scope.leafId } } : {}),\n\t\t})) as HistoryIndexPage;\n\t}\n\t/** Selection and import-loss scans each have a 256-candidate exact-or-refuse budget. */\n\tasync taskEvidence(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\toptions: TaskEvidenceOptions = {},\n\t): Promise<TaskEvidencePage> {\n\t\tconst selection: TaskEvidenceOptions = {\n\t\t\t...(options.after ? { after: { sequence: options.after.sequence, ordinal: options.after.ordinal } } : {}),\n\t\t\tlimit: options.limit ?? 64,\n\t\t\t...(options.itemId !== undefined ? { itemId: options.itemId } : {}),\n\t\t\t...(options.taskKey !== undefined ? { taskKey: options.taskKey } : {}),\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"task_evidence\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: selection,\n\t\t})) as TaskEvidencePage;\n\t}\n\t/** Chronological pages of the exact parent chain, never attached request evidence. */\n\tasync parentPath(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\toptions: ParentPathOptions = {},\n\t): Promise<ParentPathPage> {\n\t\tconst cursor = options.cursor;\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"parent_path\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: {\n\t\t\t\t...(cursor\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tcursor: {\n\t\t\t\t\t\t\t\tversion: cursor.version,\n\t\t\t\t\t\t\t\tsessionId: cursor.sessionId,\n\t\t\t\t\t\t\t\tjournalPath: cursor.journalPath,\n\t\t\t\t\t\t\t\tdev: cursor.dev,\n\t\t\t\t\t\t\t\tino: cursor.ino,\n\t\t\t\t\t\t\t\tleafId: cursor.leafId,\n\t\t\t\t\t\t\t\tthrough: cursor.through,\n\t\t\t\t\t\t\t\tthroughRevision: cursor.throughRevision,\n\t\t\t\t\t\t\t\tnextDepth: cursor.nextDepth,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t\t...(options.limit !== undefined ? { limit: options.limit } : {}),\n\t\t\t},\n\t\t})) as ParentPathPage;\n\t}\n\t/** Actual parent-path sent-message refs; a tool result need not exist yet. */\n\tasync ipythonSentMessages(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\ttoolCallId: string,\n\t\toptions: IpythonSentMessagesOptions = {},\n\t): Promise<IpythonSentMessagesPage> {\n\t\tconst cursor = options.cursor;\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"ipython_sent_messages\",\n\t\t\tsessionId,\n\t\t\ttoolCallId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: {\n\t\t\t\t...(options.messageId !== undefined ? { messageId: options.messageId } : {}),\n\t\t\t\t...(options.limit !== undefined ? { limit: options.limit } : {}),\n\t\t\t\t...(cursor\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tcursor: {\n\t\t\t\t\t\t\t\tversion: cursor.version,\n\t\t\t\t\t\t\t\tsessionId: cursor.sessionId,\n\t\t\t\t\t\t\t\tjournalPath: cursor.journalPath,\n\t\t\t\t\t\t\t\tdev: cursor.dev,\n\t\t\t\t\t\t\t\tino: cursor.ino,\n\t\t\t\t\t\t\t\tleafId: cursor.leafId,\n\t\t\t\t\t\t\t\tthrough: cursor.through,\n\t\t\t\t\t\t\t\tthroughRevision: cursor.throughRevision,\n\t\t\t\t\t\t\t\ttoolCallId: cursor.toolCallId,\n\t\t\t\t\t\t\t\tmessageId: cursor.messageId,\n\t\t\t\t\t\t\t\tafter: cursor.after,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t})) as IpythonSentMessagesPage;\n\t}\n\t/** At most nine source refs and exact message/goal-seeding facts for the captured branch. */\n\tasync branchBootstrap(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t): Promise<BranchBootstrapState> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"branch_bootstrap\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t})) as BranchBootstrapState;\n\t}\n\t/** Context-visible source refs; compiler ordering and LLM filtering happen after selection. */\n\tasync contextUpdates(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\ttarget: ContextUpdateTarget,\n\t): Promise<ContextUpdates> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"context_updates\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\ttarget:\n\t\t\t\ttarget.kind === \"assistant-usage\"\n\t\t\t\t\t? { kind: target.kind, targetId: target.targetId }\n\t\t\t\t\t: { kind: target.kind, toolCallId: target.toolCallId },\n\t\t})) as ContextUpdates;\n\t}\n\tasync readContextUpdatePayload(\n\t\tsessionId: string,\n\t\teventId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\ttarget: ContextUpdateTarget,\n\t\toptions: HistoryPayloadReadOptions = {},\n\t): Promise<CanonicalPayloadFragment | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"read_context_update_payload\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\ttarget:\n\t\t\t\ttarget.kind === \"assistant-usage\"\n\t\t\t\t\t? { kind: target.kind, targetId: target.targetId }\n\t\t\t\t\t: { kind: target.kind, toolCallId: target.toolCallId },\n\t\t\toptions: { ...options, cursor: options.cursor ? { ...options.cursor } : undefined },\n\t\t})) as CanonicalPayloadFragment | undefined;\n\t}\n\tasync contextManifest(\n\t\tsessionId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\toptions: ContextManifestOptions = {},\n\t): Promise<ContextManifestPage> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"context_manifest\",\n\t\t\tsessionId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: {\n\t\t\t\t...(options.cursor ? { cursor: { ...options.cursor } } : {}),\n\t\t\t\t...(options.limit !== undefined ? { limit: options.limit } : {}),\n\t\t\t},\n\t\t})) as ContextManifestPage;\n\t}\n\tasync readPayload(\n\t\tsessionId: string,\n\t\teventId: string,\n\t\tscope: HistoryIndexScope & { through: number },\n\t\toptions: HistoryPayloadReadOptions = {},\n\t): Promise<CanonicalPayloadFragment | undefined> {\n\t\tconst selection: HistoryPayloadReadOptions = {\n\t\t\t...(options.cursor\n\t\t\t\t? {\n\t\t\t\t\t\tcursor: {\n\t\t\t\t\t\t\tframeChecksum: options.cursor.frameChecksum,\n\t\t\t\t\t\t\tpayloadOffset: options.cursor.payloadOffset,\n\t\t\t\t\t\t\tbyteOffset: options.cursor.byteOffset,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\t...(options.maxBytes !== undefined ? { maxBytes: options.maxBytes } : {}),\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"read_payload\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\tscope: { leafId: scope.leafId, through: scope.through },\n\t\t\toptions: selection,\n\t\t})) as CanonicalPayloadFragment | undefined;\n\t}\n\t/** Exact whole-source payload bytes, bounded by the captured prefix and fragment limit. */\n\tasync readSourcePayload(\n\t\tsessionId: string,\n\t\teventId: string,\n\t\tthrough: number,\n\t\toptions: HistoryPayloadReadOptions = {},\n\t): Promise<CanonicalPayloadFragment | undefined> {\n\t\tconst selection: HistoryPayloadReadOptions = {\n\t\t\t...(options.cursor\n\t\t\t\t? {\n\t\t\t\t\t\tcursor: {\n\t\t\t\t\t\t\tframeChecksum: options.cursor.frameChecksum,\n\t\t\t\t\t\t\tpayloadOffset: options.cursor.payloadOffset,\n\t\t\t\t\t\t\tbyteOffset: options.cursor.byteOffset,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\t...(options.maxBytes !== undefined ? { maxBytes: options.maxBytes } : {}),\n\t\t};\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"read_source_payload\",\n\t\t\tsessionId,\n\t\t\teventId,\n\t\t\tthrough,\n\t\t\toptions: selection,\n\t\t})) as CanonicalPayloadFragment | undefined;\n\t}\n\tasync clear(sessionId: string): Promise<void> {\n\t\tawait this.request({ id: this.nextId++, action: \"clear\", sessionId });\n\t}\n\tclose(): Promise<void> {\n\t\tif (this.closePromise) return this.closePromise;\n\t\tthis.closing = true;\n\t\tthis.closePromise = (async () => {\n\t\t\ttry {\n\t\t\t\tawait this.settled;\n\t\t\t\tif (!this.closed) await this.request({ id: this.nextId++, action: \"close\" });\n\t\t\t} finally {\n\t\t\t\tawait this.exited;\n\t\t\t\tthis.closed = true;\n\t\t\t}\n\t\t})();\n\t\treturn this.closePromise;\n\t}\n}\n"]}
@@ -93,7 +93,7 @@ export declare class InferenceCoordinator {
93
93
  /** Capture an auxiliary operation's subject before asynchronous auth or UI work. */
94
94
  capture(sink?: BoundRequestSink): InferenceCoordinator;
95
95
  /** Explicit Root-owned epoch boundary, on this same captured MAIN source only. */
96
- bindRequestViewBoundary(messages: readonly AgentMessage[], commit: RequestViewCommit, validate?: RequestViewValidate, fixedPrepare?: RequestViewFixedPrepare): void;
96
+ bindRequestViewBoundary(messages: readonly AgentMessage[], commit: RequestViewCommit, validate?: RequestViewValidate, fixedPrepare?: RequestViewFixedPrepare, isSourceCurrent?: () => boolean): void;
97
97
  /** Read through an explicit capture, never by recapturing the mutable current session. */
98
98
  readHistory<T>(read: (view: SessionHistoryReadView) => Promise<T>): Promise<T>;
99
99
  /** Release an unused capture, or join this capture's admitted requests. */