@ponythewhite/base-context 1.0.14 → 1.0.16

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 (90) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/base-context-runtime/pyproject.toml +1 -1
  3. package/dist/base-context-runtime/src/rlm/bash.py +19 -0
  4. package/dist/base-context-runtime/src/rlm/job_watch.py +156 -0
  5. package/dist/base-context-runtime/src/rlm/repl.md +28 -6
  6. package/dist/base-context-runtime/src/rlm/repl.py +6 -1
  7. package/dist/base-context-runtime/test/test_bash.py +4 -4
  8. package/dist/base-context-runtime/test/test_job_watch.py +67 -0
  9. package/dist/base-context-runtime/uv.lock +1 -1
  10. package/dist/build-info.json +1 -1
  11. package/dist/bundle/{bundled-modules-UODO7ZR7.js → bundled-modules-2DMTK7VK.js} +2 -2
  12. package/dist/bundle/{chunk-SX7CAXWU.js → chunk-MSH6QRP5.js} +1730 -867
  13. package/dist/bundle/{chunk-NLRWERWA.js → chunk-T2OK7SRV.js} +53 -21
  14. package/dist/bundle/{cli-main-6GXXIMQQ.js → cli-main-WL2L5IEQ.js} +2 -2
  15. package/dist/bundle/cli.js +1 -1
  16. package/dist/bundle/{main-HF64B4HM.js → main-XPIEIEQJ.js} +2 -2
  17. package/dist/core/agent-session.d.ts +2 -0
  18. package/dist/core/agent-session.d.ts.map +1 -1
  19. package/dist/core/agent-session.js +191 -33
  20. package/dist/core/agent-session.js.map +1 -1
  21. package/dist/core/compaction/compaction.d.ts +1 -1
  22. package/dist/core/compaction/compaction.d.ts.map +1 -1
  23. package/dist/core/compaction/compaction.js +11 -9
  24. package/dist/core/compaction/compaction.js.map +1 -1
  25. package/dist/core/history-index-worker.d.ts.map +1 -1
  26. package/dist/core/history-index-worker.js +22 -1
  27. package/dist/core/history-index-worker.js.map +1 -1
  28. package/dist/core/history-index.d.ts +2 -0
  29. package/dist/core/history-index.d.ts.map +1 -1
  30. package/dist/core/history-index.js.map +1 -1
  31. package/dist/core/inference-coordinator.d.ts.map +1 -1
  32. package/dist/core/inference-coordinator.js +13 -2
  33. package/dist/core/inference-coordinator.js.map +1 -1
  34. package/dist/core/job-watch.d.ts +120 -0
  35. package/dist/core/job-watch.d.ts.map +1 -0
  36. package/dist/core/job-watch.js +648 -0
  37. package/dist/core/job-watch.js.map +1 -0
  38. package/dist/core/kernel/repl-manager.d.ts +5 -1
  39. package/dist/core/kernel/repl-manager.d.ts.map +1 -1
  40. package/dist/core/kernel/repl-manager.js +57 -0
  41. package/dist/core/kernel/repl-manager.js.map +1 -1
  42. package/dist/core/kernel/shared.d.ts +12 -0
  43. package/dist/core/kernel/shared.d.ts.map +1 -1
  44. package/dist/core/kernel/shared.js.map +1 -1
  45. package/dist/core/prompts/rlm.d.ts.map +1 -1
  46. package/dist/core/prompts/rlm.js +49 -39
  47. package/dist/core/prompts/rlm.js.map +1 -1
  48. package/dist/core/session-manager.d.ts +10 -0
  49. package/dist/core/session-manager.d.ts.map +1 -1
  50. package/dist/core/session-manager.js +66 -1
  51. package/dist/core/session-manager.js.map +1 -1
  52. package/dist/core/tools/prime-context.d.ts.map +1 -1
  53. package/dist/core/tools/prime-context.js +1 -1
  54. package/dist/core/tools/prime-context.js.map +1 -1
  55. package/dist/modes/daemon/daemon-mode.d.ts.map +1 -1
  56. package/dist/modes/daemon/daemon-mode.js +17 -17
  57. package/dist/modes/daemon/daemon-mode.js.map +1 -1
  58. package/dist/modes/daemon/daemon-worker-client.d.ts +1 -0
  59. package/dist/modes/daemon/daemon-worker-client.d.ts.map +1 -1
  60. package/dist/modes/daemon/daemon-worker-client.js +8 -0
  61. package/dist/modes/daemon/daemon-worker-client.js.map +1 -1
  62. package/dist/modes/interactive/interactive-mode.d.ts +2 -0
  63. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  64. package/dist/modes/interactive/interactive-mode.js +31 -5
  65. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  66. package/dist/skills/agent-message/SKILL.md +8 -2
  67. package/dist/skills/bounded-inspect/SKILL.md +78 -0
  68. package/dist/skills/bounded-inspect/pyproject.toml +16 -0
  69. package/dist/skills/bounded-inspect/src/bounded_inspect/__init__.py +313 -0
  70. package/dist/skills/bounded-inspect/src/bounded_inspect/__main__.py +3 -0
  71. package/dist/skills/job-watch/SKILL.md +43 -0
  72. package/dist/skills/job-watch/pyproject.toml +13 -0
  73. package/dist/skills/job-watch/src/job_watch/__init__.py +61 -0
  74. package/dist/skills/rlm-heartbeat/SKILL.md +10 -6
  75. package/dist/utils/file-lines.d.ts.map +1 -1
  76. package/dist/utils/file-lines.js +6 -2
  77. package/dist/utils/file-lines.js.map +1 -1
  78. package/docs/rlm-runtime.md +4 -1
  79. package/docs/skills.md +18 -26
  80. package/docs/upstream-1.0.15.md +83 -0
  81. package/package.json +4 -4
  82. package/skills/agent-message/SKILL.md +8 -2
  83. package/skills/bounded-inspect/SKILL.md +78 -0
  84. package/skills/bounded-inspect/pyproject.toml +16 -0
  85. package/skills/bounded-inspect/src/bounded_inspect/__init__.py +313 -0
  86. package/skills/bounded-inspect/src/bounded_inspect/__main__.py +3 -0
  87. package/skills/job-watch/SKILL.md +43 -0
  88. package/skills/job-watch/pyproject.toml +13 -0
  89. package/skills/job-watch/src/job_watch/__init__.py +61 -0
  90. package/skills/rlm-heartbeat/SKILL.md +10 -6
@@ -69,6 +69,8 @@ export interface BranchBootstrapState {
69
69
  serviceTier: IndexedSourceEvent | null;
70
70
  goalState: IndexedSourceEvent | null;
71
71
  rlmMaxDepth: IndexedSourceEvent | null;
72
+ jobWatchState?: IndexedSourceEvent | null;
73
+ jobWatchUnavailable?: "candidate_budget_exceeded";
72
74
  latestCompaction: IndexedSourceEvent | null;
73
75
  contextUsageAssistant: IndexedSourceEvent | null;
74
76
  gitState: IndexedSourceEvent | null;
@@ -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\";\nimport type { SessionUsageSummary } from \"./usage.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: \"current_source_usage\"; 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: \"source_context_updates\";\n\t\t\tsessionId: string;\n\t\t\ttarget: ContextUpdateTarget;\n\t\t\tthrough: number;\n\t\t\tafter: 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/** Whole-source own usage for exactly the current acknowledged owner snapshot. */\n\tasync currentSourceUsage(\n\t\tsessionId: string,\n\t\tsnapshot: SessionJournalState,\n\t): Promise<SessionUsageSummary | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"current_source_usage\",\n\t\t\tsessionId,\n\t\t\tsnapshot,\n\t\t})) as SessionUsageSummary | undefined;\n\t}\n\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\t/** All matching source update refs, including off-branch and older revisions. */\n\tasync sourceContextUpdates(\n\t\tsessionId: string,\n\t\ttarget: ContextUpdateTarget,\n\t\tthrough: number,\n\t\tafter = 0,\n\t): Promise<HistoryIndexPage> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"source_context_updates\",\n\t\t\tsessionId,\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\tthrough,\n\t\t\tafter,\n\t\t})) as HistoryIndexPage;\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"]}
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\";\nimport type { SessionUsageSummary } from \"./usage.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\tjobWatchState?: IndexedSourceEvent | null;\n\tjobWatchUnavailable?: \"candidate_budget_exceeded\";\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: \"current_source_usage\"; 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: \"source_context_updates\";\n\t\t\tsessionId: string;\n\t\t\ttarget: ContextUpdateTarget;\n\t\t\tthrough: number;\n\t\t\tafter: 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/** Whole-source own usage for exactly the current acknowledged owner snapshot. */\n\tasync currentSourceUsage(\n\t\tsessionId: string,\n\t\tsnapshot: SessionJournalState,\n\t): Promise<SessionUsageSummary | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"current_source_usage\",\n\t\t\tsessionId,\n\t\t\tsnapshot,\n\t\t})) as SessionUsageSummary | undefined;\n\t}\n\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\t/** All matching source update refs, including off-branch and older revisions. */\n\tasync sourceContextUpdates(\n\t\tsessionId: string,\n\t\ttarget: ContextUpdateTarget,\n\t\tthrough: number,\n\t\tafter = 0,\n\t): Promise<HistoryIndexPage> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"source_context_updates\",\n\t\t\tsessionId,\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\tthrough,\n\t\t\tafter,\n\t\t})) as HistoryIndexPage;\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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"history-index.js","sourceRoot":"","sources":["../../src/core/history-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AA+U7D,MAAM,OAAO,4BAA6B,SAAQ,KAAK;CAAG;AAM1D,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1C,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1C,SAAS,UAAU,GAAW;IAC7B,MAAM,UAAU,GAAG;QAClB,aAAa,CAAC,IAAI,GAAG,CAAC,2BAA2B,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACpE,aAAa,CAAC,IAAI,GAAG,CAAC,2BAA2B,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACpE,IAAI,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,yBAAyB,CAAC;QAChE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,yBAAyB,CAAC;QAClE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,yBAAyB,CAAC;KAC1D,CAAC;IACF,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IACnF,OAAO,IAAI,CAAC;AAAA,CACZ;AAED,mFAAmF;AACnF,MAAM,OAAO,YAAY;IAChB,KAAK,CAAe;IACpB,MAAM,GAAG,CAAC,CAAC;IACX,YAAY,GAAG,CAAC,CAAC;IACjB,MAAM,GAAG,KAAK,CAAC;IACf,OAAO,GAAG,KAAK,CAAC;IAChB,YAAY,CAA4B;IACxC,MAAM,CAAgB;IACtB,OAAO,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3C,OAAO,GAAG,IAAI,GAAG,EAGtB,CAAC;IACI,KAAK,CAAgB;IAE7B,MAAM,CAAC,KAAK,CAAC,IAAI,CAChB,IAAY,EACZ,OAAO,GAAoD,EAAE,EACrC;QACxB,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC;YACJ,MAAM,KAAK,CAAC,KAAK,CAAC;YAClB,OAAO,KAAK,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,KAAK,CAAC;QACb,CAAC;IAAA,CACD;IAED,YAAoB,IAAY,EAAE,OAAwD,EAAE;QAC3F,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;QAChC,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YAChF,QAAQ,EAAE,cAAc;YACxB,QAAQ,EAAE;gBACT,uBAAuB;gBACvB,uCAAuC;gBACvC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/E;YACD,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC;YAC1C,GAAG,EAAE;gBACJ,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI;gBACtB,IAAI,EAAE,OAAO,EAAE;gBACf,MAAM,EAAE,MAAM,EAAE;gBAChB,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;gBAClC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM;aAC1B;SACD,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,CAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAAA,CAC9C,CAAC,CAAC;QACH,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC;YAC/C,WAAW,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QAAA,CAC3D,CAAC,CAAC;QACH,IAAI,YAAY,GAAG,GAAG,EAAE,CAAC,EAAC,CAAC,CAAC;QAC5B,IAAI,WAAW,GAA2B,GAAG,EAAE,CAAC,EAAC,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;YACnD,YAAY,GAAG,OAAO,CAAC;YACvB,WAAW,GAAG,MAAM,CAAC;QAAA,CACrB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,KAAY,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,WAAW,CAAC,KAAK,CAAC,CAAC;YACnB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QAAA,CACtB,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,CAAC;YACZ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAAA,CAClB,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAAA,CACrC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAC9B,IAAI,CAAC,IAAI,KAAK,CAAC,gCAAgC,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAChG,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAiB,EAAE,EAAE,CAAC;YAC/C,IAAI,cAAc,IAAI,OAAO,EAAE,CAAC;gBAC/B,IAAI,CACH,OAAO,CAAC,WAAW;oBAClB,CAAC,CAAC,IAAI,4BAA4B,CAAC,OAAO,CAAC,YAAY,CAAC;oBACxD,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAClC,CAAC;gBACF,OAAO;YACR,CAAC;YACD,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;gBACxB,YAAY,EAAE,CAAC;gBACf,OAAO;YACR,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAChC,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;YACnC,IAAI,OAAO,CAAC,KAAK;gBAAE,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;;gBACvD,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAAA,CACrC,CAAC,CAAC;IAAA,CACH;IAEO,KAAK,CAAC,OAAO,CAAC,OAA4B,EAAoB;QACrE,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC5G,IACC,CAAC,WAAW,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC;YAC1D,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK;gBACzB,OAAO,CAAC,MAAM,KAAK,YAAY;gBAC/B,OAAO,CAAC,MAAM,KAAK,qBAAqB;gBACxC,OAAO,CAAC,MAAM,KAAK,cAAc;gBACjC,OAAO,CAAC,MAAM,KAAK,6BAA6B,CAAC;gBACjD,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC;YAC9B,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,cAAc,IAAI,OAAO,CAAC,MAAM,KAAK,wBAAwB,CAAC;gBAClF,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;YAC/B,CAAC,OAAO,CAAC,MAAM,KAAK,uBAAuB;gBAC1C,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI;oBAChC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;YACxF,CAAC,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,EAC3D,CAAC;YACF,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACzD,IAAI,KAAK,GAAG,iBAAiB,IAAI,IAAI,CAAC,YAAY,GAAG,KAAK,GAAG,iBAAiB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YAC3G,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;YACxD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAAA,CACzD,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAChF,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,KAAK,CAAC;YACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;gBACnC,IAAI,CAAC,KAAK;oBAAE,OAAO;gBACnB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC7C,IAAI,CAAC,OAAO;oBAAE,OAAO;gBACrB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAChC,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;gBACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAAA,CACtB,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAChC,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;gBACnC,OAAO,CAAC,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3E,CAAC;QACF,CAAC;QACD,OAAO,MAAM,CAAC;IAAA,CACd;IAED,KAAK,CAAC,KAAK,CAAC,SAAiB,EAAE,MAA4B,EAAE,gBAAwB,EAAiB;QACrG,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACvE,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YACvC,IACC,CAAC,KAAK,CAAC,EAAE;gBACT,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,GAAG;gBACrB,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,GAAG;gBACnC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG;gBACvB,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;gBAC3B,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI;gBACxB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,EAC/B,CAAC;gBACF,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;YAC1E,CAAC;YACD,8EAA8E;YAC9E,MAAM,QAAQ,GAAuB;gBACpC,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;gBACxE,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;aACjG,CAAC;YACF,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;YACzD,IAAI,KAAK,GAAG,iBAAiB;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YAClF,OAAO,QAAQ,CAAC;QAAA,CAChB,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAAA,CAC3G;IACD,KAAK,CAAC,UAAU,CAAC,SAAiB,EAAE,QAA6B,EAAiC;QACjG,MAAM,MAAM,GAAwB;YACnC,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,GAAG,EAAE,QAAQ,CAAC,GAAG;SACjB,CAAC;QACF,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,aAAa;YACrB,SAAS;YACT,QAAQ,EAAE,MAAM;SAChB,CAAC,CAAyB,CAAC;IAAA,CAC5B;IACD,kGAAkG;IAClG,KAAK,CAAC,kBAAkB,CAAC,SAAiB,EAAE,MAA6B,EAAsC;QAC9G,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,SAAS;YACjB,SAAS;YACT,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE;SACrB,CAAC,CAA8B,CAAC;IAAA,CACjC;IACD,2FAA2F;IAC3F,KAAK,CAAC,sBAAsB,CAAC,SAAiB,EAAE,QAA6B,EAAiC;QAC7G,MAAM,MAAM,GAAwB;YACnC,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,GAAG,EAAE,QAAQ,CAAC,GAAG;SACjB,CAAC;QACF,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,0BAA0B;YAClC,SAAS;YACT,QAAQ,EAAE,MAAM;SAChB,CAAC,CAAyB,CAAC;IAAA,CAC5B;IACD,kFAAkF;IAClF,KAAK,CAAC,kBAAkB,CACvB,SAAiB,EACjB,QAA6B,EACc;QAC3C,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,sBAAsB;YAC9B,SAAS;YACT,QAAQ;SACR,CAAC,CAAoC,CAAC;IAAA,CACvC;IAED,sEAAsE;IACtE,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,QAAgB,EAAE,OAAe,EAA2C;QAChH,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAE3F,CAAC;IAAA,CACb;IACD,mFAAmF;IACnF,KAAK,CAAC,oBAAoB,CACzB,SAAiB,EACjB,QAAgB,EAChB,OAAe,EAC2B;QAC1C,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,wBAAwB;YAChC,SAAS;YACT,QAAQ;YACR,OAAO;SACP,CAAC,CAAmC,CAAC;IAAA,CACtC;IACD,iFAAiF;IACjF,KAAK,CAAC,oBAAoB,CACzB,SAAiB,EACjB,MAA2B,EAC3B,OAAe,EACf,KAAK,GAAG,CAAC,EACmB;QAC5B,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,wBAAwB;YAChC,SAAS;YACT,MAAM,EACL,MAAM,CAAC,IAAI,KAAK,iBAAiB;gBAChC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;gBAClD,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE;YACxD,OAAO;YACP,KAAK;SACL,CAAC,CAAqB,CAAC;IAAA,CACxB;IACD,KAAK,CAAC,GAAG,CACR,SAAiB,EACjB,OAAe,EACf,KAA+C,EACL;QAC1C,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,KAAK;YACb,SAAS;YACT,OAAO;YACP,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7E,CAAC,CAAmC,CAAC;IAAA,CACtC;IACD,oGAAoG;IACpG,KAAK,CAAC,SAAS,CAAC,SAAiB,EAAE,OAAe,EAAE,OAAe,EAA2C;QAC7G,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,YAAY;YACpB,SAAS;YACT,OAAO;YACP,OAAO;SACP,CAAC,CAAmC,CAAC;IAAA,CACtC;IACD,6FAA6F;IAC7F,KAAK,CAAC,IAAI,CACT,SAAiB,EACjB,KAAa,EACb,OAAe,EACf,KAAK,GAAG,EAAE,EACV,KAAyB,EACzB,OAAO,GAAuB,EAAE,EACJ;QAC5B,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS;YACT,KAAK;YACL,OAAO;YACP,KAAK;YACL,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrD,CAAC,CAAqB,CAAC;IAAA,CACxB;IACD,qFAAqF;IACrF,KAAK,CAAC,MAAM,CACX,SAAiB,EACjB,KAAa,EACb,OAAe,EACf,KAAK,GAAG,EAAE,EACV,KAAyB,EACG;QAC5B,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,QAAQ;YAChB,SAAS;YACT,KAAK;YACL,OAAO;YACP,KAAK;YACL,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrD,CAAC,CAAqB,CAAC;IAAA,CACxB;IACD,wFAAwF;IACxF,KAAK,CAAC,YAAY,CACjB,SAAiB,EACjB,KAA8C,EAC9C,OAAO,GAAwB,EAAE,EACL;QAC5B,MAAM,SAAS,GAAwB;YACtC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzG,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;YAC1B,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtE,CAAC;QACF,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,eAAe;YACvB,SAAS;YACT,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;YACvD,OAAO,EAAE,SAAS;SAClB,CAAC,CAAqB,CAAC;IAAA,CACxB;IACD,sFAAsF;IACtF,KAAK,CAAC,UAAU,CACf,SAAiB,EACjB,KAA8C,EAC9C,OAAO,GAAsB,EAAE,EACL;QAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,aAAa;YACrB,SAAS;YACT,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;YACvD,OAAO,EAAE;gBACR,GAAG,CAAC,MAAM;oBACT,CAAC,CAAC;wBACA,MAAM,EAAE;4BACP,OAAO,EAAE,MAAM,CAAC,OAAO;4BACvB,SAAS,EAAE,MAAM,CAAC,SAAS;4BAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;4BAC/B,GAAG,EAAE,MAAM,CAAC,GAAG;4BACf,GAAG,EAAE,MAAM,CAAC,GAAG;4BACf,MAAM,EAAE,MAAM,CAAC,MAAM;4BACrB,OAAO,EAAE,MAAM,CAAC,OAAO;4BACvB,eAAe,EAAE,MAAM,CAAC,eAAe;4BACvC,SAAS,EAAE,MAAM,CAAC,SAAS;yBAC3B;qBACD;oBACF,CAAC,CAAC,EAAE,CAAC;gBACN,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE;SACD,CAAC,CAAmB,CAAC;IAAA,CACtB;IACD,8EAA8E;IAC9E,KAAK,CAAC,mBAAmB,CACxB,SAAiB,EACjB,KAA8C,EAC9C,UAAkB,EAClB,OAAO,GAA+B,EAAE,EACL;QACnC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,uBAAuB;YAC/B,SAAS;YACT,UAAU;YACV,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;YACvD,OAAO,EAAE;gBACR,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5E,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,GAAG,CAAC,MAAM;oBACT,CAAC,CAAC;wBACA,MAAM,EAAE;4BACP,OAAO,EAAE,MAAM,CAAC,OAAO;4BACvB,SAAS,EAAE,MAAM,CAAC,SAAS;4BAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;4BAC/B,GAAG,EAAE,MAAM,CAAC,GAAG;4BACf,GAAG,EAAE,MAAM,CAAC,GAAG;4BACf,MAAM,EAAE,MAAM,CAAC,MAAM;4BACrB,OAAO,EAAE,MAAM,CAAC,OAAO;4BACvB,eAAe,EAAE,MAAM,CAAC,eAAe;4BACvC,UAAU,EAAE,MAAM,CAAC,UAAU;4BAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;4BAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;yBACnB;qBACD;oBACF,CAAC,CAAC,EAAE,CAAC;aACN;SACD,CAAC,CAA4B,CAAC;IAAA,CAC/B;IACD,6FAA6F;IAC7F,KAAK,CAAC,eAAe,CACpB,SAAiB,EACjB,KAA8C,EACd;QAChC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,kBAAkB;YAC1B,SAAS;YACT,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;SACvD,CAAC,CAAyB,CAAC;IAAA,CAC5B;IACD,+FAA+F;IAC/F,KAAK,CAAC,cAAc,CACnB,SAAiB,EACjB,KAA8C,EAC9C,MAA2B,EACD;QAC1B,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,iBAAiB;YACzB,SAAS;YACT,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;YACvD,MAAM,EACL,MAAM,CAAC,IAAI,KAAK,iBAAiB;gBAChC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;gBAClD,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE;SACxD,CAAC,CAAmB,CAAC;IAAA,CACtB;IACD,KAAK,CAAC,wBAAwB,CAC7B,SAAiB,EACjB,OAAe,EACf,KAA8C,EAC9C,MAA2B,EAC3B,OAAO,GAA8B,EAAE,EACS;QAChD,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,6BAA6B;YACrC,SAAS;YACT,OAAO;YACP,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;YACvD,MAAM,EACL,MAAM,CAAC,IAAI,KAAK,iBAAiB;gBAChC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;gBAClD,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE;YACxD,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE;SACnF,CAAC,CAAyC,CAAC;IAAA,CAC5C;IACD,KAAK,CAAC,eAAe,CACpB,SAAiB,EACjB,KAA8C,EAC9C,OAAO,GAA2B,EAAE,EACL;QAC/B,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,kBAAkB;YAC1B,SAAS;YACT,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;YACvD,OAAO,EAAE;gBACR,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5D,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE;SACD,CAAC,CAAwB,CAAC;IAAA,CAC3B;IACD,KAAK,CAAC,WAAW,CAChB,SAAiB,EACjB,OAAe,EACf,KAA8C,EAC9C,OAAO,GAA8B,EAAE,EACS;QAChD,MAAM,SAAS,GAA8B;YAC5C,GAAG,CAAC,OAAO,CAAC,MAAM;gBACjB,CAAC,CAAC;oBACA,MAAM,EAAE;wBACP,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa;wBAC3C,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa;wBAC3C,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU;qBACrC;iBACD;gBACF,CAAC,CAAC,EAAE,CAAC;YACN,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzE,CAAC;QACF,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,cAAc;YACtB,SAAS;YACT,OAAO;YACP,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;YACvD,OAAO,EAAE,SAAS;SAClB,CAAC,CAAyC,CAAC;IAAA,CAC5C;IACD,2FAA2F;IAC3F,KAAK,CAAC,iBAAiB,CACtB,SAAiB,EACjB,OAAe,EACf,OAAe,EACf,OAAO,GAA8B,EAAE,EACS;QAChD,MAAM,SAAS,GAA8B;YAC5C,GAAG,CAAC,OAAO,CAAC,MAAM;gBACjB,CAAC,CAAC;oBACA,MAAM,EAAE;wBACP,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa;wBAC3C,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa;wBAC3C,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU;qBACrC;iBACD;gBACF,CAAC,CAAC,EAAE,CAAC;YACN,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzE,CAAC;QACF,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,qBAAqB;YAC7B,SAAS;YACT,OAAO;YACP,OAAO;YACP,OAAO,EAAE,SAAS;SAClB,CAAC,CAAyC,CAAC;IAAA,CAC5C;IACD,KAAK,CAAC,KAAK,CAAC,SAAiB,EAAiB;QAC7C,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IAAA,CACtE;IACD,KAAK,GAAkB;QACtB,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;QAChD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC;gBACJ,MAAM,IAAI,CAAC,OAAO,CAAC;gBACnB,IAAI,CAAC,IAAI,CAAC,MAAM;oBAAE,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9E,CAAC;oBAAS,CAAC;gBACV,MAAM,IAAI,CAAC,MAAM,CAAC;gBAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACpB,CAAC;QAAA,CACD,CAAC,EAAE,CAAC;QACL,OAAO,IAAI,CAAC,YAAY,CAAC;IAAA,CACzB;CACD","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\";\nimport type { SessionUsageSummary } from \"./usage.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: \"current_source_usage\"; 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: \"source_context_updates\";\n\t\t\tsessionId: string;\n\t\t\ttarget: ContextUpdateTarget;\n\t\t\tthrough: number;\n\t\t\tafter: 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/** Whole-source own usage for exactly the current acknowledged owner snapshot. */\n\tasync currentSourceUsage(\n\t\tsessionId: string,\n\t\tsnapshot: SessionJournalState,\n\t): Promise<SessionUsageSummary | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"current_source_usage\",\n\t\t\tsessionId,\n\t\t\tsnapshot,\n\t\t})) as SessionUsageSummary | undefined;\n\t}\n\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\t/** All matching source update refs, including off-branch and older revisions. */\n\tasync sourceContextUpdates(\n\t\tsessionId: string,\n\t\ttarget: ContextUpdateTarget,\n\t\tthrough: number,\n\t\tafter = 0,\n\t): Promise<HistoryIndexPage> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"source_context_updates\",\n\t\t\tsessionId,\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\tthrough,\n\t\t\tafter,\n\t\t})) as HistoryIndexPage;\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"]}
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\";\nimport type { SessionUsageSummary } from \"./usage.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\tjobWatchState?: IndexedSourceEvent | null;\n\tjobWatchUnavailable?: \"candidate_budget_exceeded\";\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: \"current_source_usage\"; 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: \"source_context_updates\";\n\t\t\tsessionId: string;\n\t\t\ttarget: ContextUpdateTarget;\n\t\t\tthrough: number;\n\t\t\tafter: 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/** Whole-source own usage for exactly the current acknowledged owner snapshot. */\n\tasync currentSourceUsage(\n\t\tsessionId: string,\n\t\tsnapshot: SessionJournalState,\n\t): Promise<SessionUsageSummary | undefined> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"current_source_usage\",\n\t\t\tsessionId,\n\t\t\tsnapshot,\n\t\t})) as SessionUsageSummary | undefined;\n\t}\n\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\t/** All matching source update refs, including off-branch and older revisions. */\n\tasync sourceContextUpdates(\n\t\tsessionId: string,\n\t\ttarget: ContextUpdateTarget,\n\t\tthrough: number,\n\t\tafter = 0,\n\t): Promise<HistoryIndexPage> {\n\t\treturn (await this.request({\n\t\t\tid: this.nextId++,\n\t\t\taction: \"source_context_updates\",\n\t\t\tsessionId,\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\tthrough,\n\t\t\tafter,\n\t\t})) as HistoryIndexPage;\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"]}