@ponythewhite/base-context 1.0.10 → 1.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/dist/base-context-runtime/pyproject.toml +1 -1
- package/dist/base-context-runtime/uv.lock +1 -1
- package/dist/build-info.json +1 -1
- package/dist/bundle/amazon-bedrock.js +3 -3
- package/dist/bundle/{anthropic-5PSCZEER.js → anthropic-BJVPUMPB.js} +2 -2
- package/dist/bundle/{azure-openai-responses-AYTLJR33.js → azure-openai-responses-ERRMAXK6.js} +4 -5
- package/dist/bundle/{bundled-modules-MX6YNAM2.js → bundled-modules-WCGPZI2H.js} +5 -5
- package/dist/bundle/{chunk-D3KOF57W.js → chunk-25VYRAC6.js} +14 -1
- package/dist/bundle/{chunk-2IPDSTDR.js → chunk-AEMRBMI2.js} +9 -9
- package/dist/bundle/{chunk-Q3MBSBEB.js → chunk-FOGKLC7V.js} +1 -1
- package/dist/bundle/{chunk-UHLGPYMI.js → chunk-IAKHCQA2.js} +185 -39
- package/dist/bundle/{chunk-KT2BNEPE.js → chunk-MUFZODP5.js} +1 -1
- package/dist/bundle/{chunk-QKIFBA7N.js → chunk-Q6UAHLII.js} +2 -2
- package/dist/bundle/{chunk-CDXQNS5P.js → chunk-YGV3Y4AD.js} +1009 -185
- package/dist/bundle/{cli-main-D7W3WWCV.js → cli-main-CTYDQHFE.js} +4 -4
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/{google-HTMCUJ7X.js → google-4GA4YMUX.js} +2 -2
- package/dist/bundle/{google-vertex-ZQO65AXF.js → google-vertex-7AMALD7D.js} +2 -2
- package/dist/bundle/{main-5J3QBZ5Y.js → main-GVGK354K.js} +5 -5
- package/dist/bundle/{mistral-SB7LU56G.js → mistral-74BXMNRM.js} +1 -1
- package/dist/bundle/{openai-codex-responses-5CEW4VN3.js → openai-codex-responses-COXNC4IH.js} +2 -2
- package/dist/bundle/{openai-completions-BAZJQSS2.js → openai-completions-BCSA5Q6S.js} +2 -2
- package/dist/bundle/{openai-responses-VHOE427P.js → openai-responses-ONCIZSJS.js} +3 -3
- package/dist/core/agent-session.d.ts +6 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +445 -146
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/canonical-context.d.ts +19 -3
- package/dist/core/canonical-context.d.ts.map +1 -1
- package/dist/core/canonical-context.js +130 -9
- package/dist/core/canonical-context.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +9 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +29 -3
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/context-epoch-copy.d.ts +1 -1
- package/dist/core/context-epoch-copy.d.ts.map +1 -1
- package/dist/core/context-epoch-copy.js +18 -7
- package/dist/core/context-epoch-copy.js.map +1 -1
- package/dist/core/context-epoch.d.ts +4 -0
- package/dist/core/context-epoch.d.ts.map +1 -1
- package/dist/core/context-epoch.js +8 -1
- package/dist/core/context-epoch.js.map +1 -1
- package/dist/core/context-tree.d.ts +14 -11
- package/dist/core/context-tree.d.ts.map +1 -1
- package/dist/core/context-tree.js +145 -9
- package/dist/core/context-tree.js.map +1 -1
- package/dist/core/history-index-worker.d.ts.map +1 -1
- package/dist/core/history-index-worker.js +59 -6
- package/dist/core/history-index-worker.js.map +1 -1
- package/dist/core/history-index.d.ts +17 -0
- package/dist/core/history-index.d.ts.map +1 -1
- package/dist/core/history-index.js +22 -0
- package/dist/core/history-index.js.map +1 -1
- package/dist/core/inference-coordinator.d.ts +1 -1
- package/dist/core/inference-coordinator.d.ts.map +1 -1
- package/dist/core/inference-coordinator.js +23 -6
- package/dist/core/inference-coordinator.js.map +1 -1
- package/dist/core/messages.d.ts +2 -0
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +2 -0
- package/dist/core/messages.js.map +1 -1
- package/dist/core/refinement/refinement.d.ts +2 -0
- package/dist/core/refinement/refinement.d.ts.map +1 -1
- package/dist/core/refinement/refinement.js +10 -1
- package/dist/core/refinement/refinement.js.map +1 -1
- package/dist/core/request-usage.d.ts +34 -0
- package/dist/core/request-usage.d.ts.map +1 -0
- package/dist/core/request-usage.js +111 -0
- package/dist/core/request-usage.js.map +1 -0
- package/dist/core/request-view-selection.d.ts +2 -1
- package/dist/core/request-view-selection.d.ts.map +1 -1
- package/dist/core/request-view-selection.js +29 -2
- package/dist/core/request-view-selection.js.map +1 -1
- package/dist/core/session-fork-messages.d.ts +5 -0
- package/dist/core/session-fork-messages.d.ts.map +1 -1
- package/dist/core/session-fork-messages.js +44 -0
- package/dist/core/session-fork-messages.js.map +1 -1
- package/dist/core/session-history-index.d.ts +5 -0
- package/dist/core/session-history-index.d.ts.map +1 -1
- package/dist/core/session-history-index.js +7 -0
- package/dist/core/session-history-index.js.map +1 -1
- package/dist/core/session-manager.d.ts +2 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +155 -13
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-tree.d.ts +9 -0
- package/dist/core/session-tree.d.ts.map +1 -1
- package/dist/core/session-tree.js +71 -11
- package/dist/core/session-tree.js.map +1 -1
- package/dist/core/settings-manager.d.ts +3 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +7 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/system-prompt.d.ts +2 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +4 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/modes/agent-connection/daemon-agent-connection.d.ts.map +1 -1
- package/dist/modes/agent-connection/daemon-agent-connection.js +8 -1
- package/dist/modes/agent-connection/daemon-agent-connection.js.map +1 -1
- package/dist/modes/agent-connection/in-process-agent-connection.d.ts.map +1 -1
- package/dist/modes/agent-connection/in-process-agent-connection.js +4 -4
- package/dist/modes/agent-connection/in-process-agent-connection.js.map +1 -1
- package/dist/modes/daemon/daemon-mode.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-mode.js +4 -4
- package/dist/modes/daemon/daemon-mode.js.map +1 -1
- package/dist/modes/daemon/daemon-protocol.d.ts +13 -3
- package/dist/modes/daemon/daemon-protocol.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-protocol.js +10 -2
- package/dist/modes/daemon/daemon-protocol.js.map +1 -1
- package/dist/modes/daemon/daemon-session-summarizer.d.ts +3 -0
- package/dist/modes/daemon/daemon-session-summarizer.d.ts.map +1 -1
- package/dist/modes/daemon/daemon-session-summarizer.js +71 -32
- package/dist/modes/daemon/daemon-session-summarizer.js.map +1 -1
- package/dist/modes/interactive/components/context-tree-format.d.ts.map +1 -1
- package/dist/modes/interactive/components/context-tree-format.js +49 -0
- package/dist/modes/interactive/components/context-tree-format.js.map +1 -1
- package/docs/compaction.md +27 -3
- package/docs/context-management.md +17 -1
- package/docs/rlm.md +1 -1
- package/docs/settings.md +12 -0
- package/docs/usage.md +24 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-history-index.js","sourceRoot":"","sources":["../../src/core/session-history-index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype CanonicalPayloadCursor,\n\ttype CanonicalPayloadFragment,\n\tMAX_CANONICAL_PAYLOAD_PART_BYTES,\n} from \"./canonical-payload-parts.js\";\nimport {\n\ttype BranchBootstrapState,\n\ttype ContextManifestOptions,\n\ttype ContextManifestPage,\n\ttype ContextUpdates,\n\ttype ContextUpdateTarget,\n\tHistoryIndex,\n\ttype HistoryIndexPage,\n\ttype HistoryPayloadReadOptions,\n\ttype IndexedSourceEvent,\n\ttype IpythonSentMessagesOptions,\n\ttype IpythonSentMessagesPage,\n\ttype ParentPathOptions,\n\ttype ParentPathPage,\n\ttype SourceBootstrapState,\n\ttype TaskEvidenceOptions,\n\ttype TaskEvidencePage,\n} from \"./history-index.js\";\nimport type { BoundRequestSink, SourceSnapshotRef } from \"./request-events.js\";\nimport type { SessionJournalState } from \"./session-journal-owner.js\";\nimport type { SessionEntry } from \"./session-manager.js\";\n\n/** One source/branch frontier shared by every operation in a captured request. */\nexport interface SessionHistoryReadView {\n\treadonly source: SourceSnapshotRef;\n\t/** A narrower ancestor/prefix on this same capture; its lifetime never outlives the parent read. */\n\tatSnapshot?(source: SourceSnapshotRef): Promise<SessionHistoryReadView>;\n\tcontextManifest(options?: ContextManifestOptions): Promise<ContextManifestPage>;\n\tcontextUpdates(target: ContextUpdateTarget): Promise<ContextUpdates>;\n\treadContextUpdatePayload(\n\t\tid: string,\n\t\ttarget: ContextUpdateTarget,\n\t\toptions?: HistoryPayloadReadOptions,\n\t): Promise<CanonicalPayloadFragment | undefined>;\n\tget(id: string): Promise<IndexedSourceEvent | undefined>;\n\tpage(after?: number, limit?: number, options?: { scan?: boolean }): Promise<HistoryIndexPage>;\n\tsearch(query: string, limit?: number): Promise<HistoryIndexPage>;\n\ttaskEvidence(options?: TaskEvidenceOptions): Promise<TaskEvidencePage>;\n\treadPayload(id: string, options?: HistoryPayloadReadOptions): Promise<CanonicalPayloadFragment | undefined>;\n}\n\nexport interface BoundHistoryReadSink<View> extends Omit<BoundRequestSink, \"readHistory\"> {\n\treadHistory<T>(read: (view: View) => Promise<T>): Promise<T>;\n}\n\nexport interface BoundSessionRequestSink extends BoundHistoryReadSink<SessionHistoryReadView> {}\n\nexport interface SessionHistoryReadLimits {\n\tmaxEntries: number;\n\t/** Canonical frame bytes, not a decoded heap or tokenizer estimate. */\n\tmaxSourceBytes: number;\n}\n\nexport interface HydratedSessionHistoryEntry {\n\tentry: SessionEntry;\n\t/** Includes the exact locator/revision and lowering-only retention outside the payload. */\n\tsource: IndexedSourceEvent;\n}\n\nexport interface MaterializedSessionHistory {\n\tsource: SourceSnapshotRef;\n\tscope: \"branch\" | \"source\";\n\tentries: HydratedSessionHistoryEntry[];\n\tsourceBytes: number;\n}\n\n/** Bootstrap refs and booleans from the same pinned branch used for exact hydration. */\nexport interface SessionBranchBootstrapState extends BranchBootstrapState {\n\treadonly source: SourceSnapshotRef;\n}\n\n/** Exact parent-chain metadata from one captured canonical source and leaf. */\nexport interface SessionParentPathPage extends ParentPathPage {\n\treadonly source: SourceSnapshotRef;\n}\n\n/** Consume iterators inside the owning read callback. Materialized results are detached. */\nexport interface SessionHistoryReadScope {\n\treadonly source: SourceSnapshotRef;\n\treadonly scope: \"branch\" | \"source\";\n\treadonly branchContext: SessionHistoryReadView;\n\t/** Select the captured branch even when invoked from an explicit whole-source scope. */\n\tbranchBootstrap(): Promise<SessionBranchBootstrapState>;\n\t/** Chronological parent chain only; attached request evidence is not an ancestor. */\n\tparentPath(options?: ParentPathOptions): Promise<SessionParentPathPage>;\n\t/** Source scope only: use another leaf without changing the captured source or branchContext. */\n\tparentPathFrom(leafId: string | null, options?: ParentPathOptions): Promise<SessionParentPathPage>;\n\t/** Explicit whole-source relations, clipped to this captured prefix. */\n\tsourceLabel(targetId: string): Promise<IndexedSourceEvent | undefined>;\n\tsourceAssistantUsage(targetId: string): Promise<IndexedSourceEvent | undefined>;\n\t/** Exact sent-message refs on the original captured parent branch, even before a tool result. */\n\tipythonSentMessages(toolCallId: string, options?: IpythonSentMessagesOptions): Promise<IpythonSentMessagesPage>;\n\tget(id: string): Promise<IndexedSourceEvent | undefined>;\n\tpage(after?: number, limit?: number): Promise<HistoryIndexPage>;\n\tsearch(query: string, limit?: number): Promise<HistoryIndexPage>;\n\treadPayload(id: string, options?: HistoryPayloadReadOptions): Promise<CanonicalPayloadFragment | undefined>;\n\thydrateEntry(id: string, maxSourceBytes: number): Promise<HydratedSessionHistoryEntry | undefined>;\n\titerateEntries(limits: SessionHistoryReadLimits): AsyncGenerator<HydratedSessionHistoryEntry>;\n\tmaterialize(limits: SessionHistoryReadLimits): Promise<MaterializedSessionHistory>;\n}\n\nexport type HistoryReadQuery = <T>(operation: () => Promise<T>) => Promise<T>;\n\n/** Existing inference/request views remain strictly branch-scoped. */\nexport function createBranchHistoryReadView(\n\tindex: HistoryIndex,\n\tsource: SourceSnapshotRef,\n\tquery: HistoryReadQuery,\n): SessionHistoryReadView {\n\tconst sessionId = source.sessionId;\n\tconst scope = { leafId: source.leafId, through: source.sourceSequence };\n\treturn Object.freeze({\n\t\tsource,\n\t\tatSnapshot: async (requested: SourceSnapshotRef) => {\n\t\t\tconst captured = Object.freeze({ ...requested });\n\t\t\tif (\n\t\t\t\tcaptured.sessionId !== sessionId ||\n\t\t\t\tcaptured.sessionFile !== source.sessionFile ||\n\t\t\t\tcaptured.persistent !== source.persistent ||\n\t\t\t\t!Number.isSafeInteger(captured.sourceSequence) ||\n\t\t\t\tcaptured.sourceSequence < 0 ||\n\t\t\t\tcaptured.sourceSequence > source.sourceSequence\n\t\t\t)\n\t\t\t\tthrow new Error(\"Context epoch snapshot is outside its captured source\");\n\t\t\tif (captured.leafId !== null) {\n\t\t\t\tconst leaf = await query(() => index.get(sessionId, captured.leafId!, scope));\n\t\t\t\tif (!leaf || leaf.sequence > captured.sourceSequence)\n\t\t\t\t\tthrow new Error(\"Context epoch snapshot is outside its captured branch\");\n\t\t\t}\n\t\t\treturn createBranchHistoryReadView(index, captured, query);\n\t\t},\n\t\tcontextManifest: (options: ContextManifestOptions = {}) =>\n\t\t\tquery(() => index.contextManifest(sessionId, scope, options)),\n\t\tcontextUpdates: (target: ContextUpdateTarget) => query(() => index.contextUpdates(sessionId, scope, target)),\n\t\treadContextUpdatePayload: (id: string, target: ContextUpdateTarget, options: HistoryPayloadReadOptions = {}) =>\n\t\t\tquery(() => index.readContextUpdatePayload(sessionId, id, scope, target, options)),\n\t\tget: (id: string) => query(() => index.get(sessionId, id, scope)),\n\t\tpage: (after = 0, limit = 64, options: { scan?: boolean } = {}) =>\n\t\t\tquery(() => index.page(sessionId, after, scope.through, limit, scope, options)),\n\t\tsearch: (text: string, limit = 16) => query(() => index.search(sessionId, text, scope.through, limit, scope)),\n\t\ttaskEvidence: (options: TaskEvidenceOptions = {}) => query(() => index.taskEvidence(sessionId, scope, options)),\n\t\treadPayload: (id: string, options: HistoryPayloadReadOptions = {}) =>\n\t\t\tquery(() => index.readPayload(sessionId, id, scope, options)),\n\t});\n}\n\nfunction positiveLimit(value: number): boolean {\n\treturn Number.isSafeInteger(value) && value > 0;\n}\n\n/** Reuse the same bounded payload/identity hydration for a captured branch adapter. */\nexport async function hydrateCapturedHistoryEntry(\n\tmetadata: IndexedSourceEvent,\n\tmaxSourceBytes: number,\n\treadPayload: SessionHistoryReadView[\"readPayload\"],\n): Promise<HydratedSessionHistoryEntry> {\n\tif (metadata.locator.length > maxSourceBytes) throw new Error(\"History entry source byte budget exceeded\");\n\tconst chunks: string[] = [];\n\tlet bytes = 0;\n\tlet cursor: CanonicalPayloadCursor | undefined;\n\tdo {\n\t\tconst fragment = await readPayload(metadata.id, {\n\t\t\tcursor,\n\t\t\tmaxBytes: Math.min(MAX_CANONICAL_PAYLOAD_PART_BYTES, maxSourceBytes - bytes),\n\t\t});\n\t\tif (!fragment) throw new Error(\"Captured history entry payload is unavailable\");\n\t\tbytes += fragment.byteLength;\n\t\tif (bytes > maxSourceBytes) throw new Error(\"History entry source byte budget exceeded\");\n\t\tchunks.push(fragment.text);\n\t\tcursor = fragment.nextCursor ?? undefined;\n\t} while (cursor);\n\tconst entry = JSON.parse(chunks.join(\"\")) as SessionEntry;\n\tif (\n\t\t!entry ||\n\t\ttypeof entry !== \"object\" ||\n\t\tentry.id !== metadata.id ||\n\t\tentry.type !== metadata.kind ||\n\t\tentry.parentId !== metadata.parentId\n\t)\n\t\tthrow new Error(\"Canonical history entry does not match indexed identity\");\n\treturn { entry, source: metadata };\n}\n\n/** Source access is selected explicitly, never by widening a coordinator's branch view. */\nexport function createSessionHistoryReadScope(\n\tindex: HistoryIndex,\n\tsource: SourceSnapshotRef,\n\tquery: HistoryReadQuery,\n\tscope: \"branch\" | \"source\",\n): SessionHistoryReadScope {\n\tconst sessionId = source.sessionId;\n\tconst branch = { leafId: source.leafId, through: source.sourceSequence };\n\tconst get = (id: string) =>\n\t\tquery(() =>\n\t\t\tscope === \"branch\" ? index.get(sessionId, id, branch) : index.getSource(sessionId, id, source.sourceSequence),\n\t\t);\n\tconst page = (after = 0, limit = 64) =>\n\t\tquery(() => index.page(sessionId, after, source.sourceSequence, limit, scope === \"branch\" ? branch : undefined));\n\tconst readPayload = (id: string, options: HistoryPayloadReadOptions = {}) =>\n\t\tquery(() =>\n\t\t\tscope === \"branch\"\n\t\t\t\t? index.readPayload(sessionId, id, branch, options)\n\t\t\t\t: index.readSourcePayload(sessionId, id, source.sourceSequence, options),\n\t\t);\n\n\tconst hydrate = (metadata: IndexedSourceEvent, maxSourceBytes: number) =>\n\t\thydrateCapturedHistoryEntry(metadata, maxSourceBytes, readPayload);\n\n\tasync function* iterateEntries(limits: SessionHistoryReadLimits): AsyncGenerator<HydratedSessionHistoryEntry> {\n\t\tconst { maxEntries, maxSourceBytes } = limits;\n\t\tif (!positiveLimit(maxEntries) || !positiveLimit(maxSourceBytes))\n\t\t\tthrow new Error(\"Invalid history materialization limits\");\n\t\tlet after = 0;\n\t\tlet entries = 0;\n\t\tlet sourceBytes = 0;\n\t\twhile (true) {\n\t\t\tconst selected = await page(after, Math.min(64, maxEntries - entries + 1));\n\t\t\tif (selected.indexedThrough < source.sourceSequence)\n\t\t\t\tthrow new Error(\"Captured history has incomplete index coverage\");\n\t\t\tfor (const metadata of selected.events) {\n\t\t\t\tif (++entries > maxEntries) throw new Error(\"History entry budget exceeded\");\n\t\t\t\tif (sourceBytes + metadata.locator.length > maxSourceBytes)\n\t\t\t\t\tthrow new Error(\"History source byte budget exceeded\");\n\t\t\t\tconst hydrated = await hydrate(metadata, maxSourceBytes - sourceBytes);\n\t\t\t\tsourceBytes += metadata.locator.length;\n\t\t\t\tyield hydrated;\n\t\t\t}\n\t\t\tif (selected.nextAfter === null) return;\n\t\t\tafter = selected.nextAfter;\n\t\t}\n\t}\n\n\treturn Object.freeze({\n\t\tsource,\n\t\tscope,\n\t\tbranchContext: createBranchHistoryReadView(index, source, query),\n\t\tbranchBootstrap: () => query(async () => ({ ...(await index.branchBootstrap(sessionId, branch)), source })),\n\t\tparentPath: (options: ParentPathOptions = {}) =>\n\t\t\tquery(async () => ({ ...(await index.parentPath(sessionId, branch, options)), source })),\n\t\tparentPathFrom: (leafId: string | null, options: ParentPathOptions = {}) =>\n\t\t\tquery(async () => {\n\t\t\t\tif (scope !== \"source\") throw new Error(\"Parent path selection requires a source-scoped history read\");\n\t\t\t\treturn {\n\t\t\t\t\t...(await index.parentPath(sessionId, { leafId, through: source.sourceSequence }, options)),\n\t\t\t\t\tsource,\n\t\t\t\t};\n\t\t\t}),\n\t\tsourceLabel: (targetId: string) => query(() => index.sourceLabel(sessionId, targetId, source.sourceSequence)),\n\t\tsourceAssistantUsage: (targetId: string) =>\n\t\t\tquery(() => index.sourceAssistantUsage(sessionId, targetId, source.sourceSequence)),\n\t\tipythonSentMessages: (toolCallId: string, options: IpythonSentMessagesOptions = {}) =>\n\t\t\tquery(() => index.ipythonSentMessages(sessionId, branch, toolCallId, options)),\n\t\tget,\n\t\tpage,\n\t\tsearch: (text: string, limit = 16) =>\n\t\t\tquery(() =>\n\t\t\t\tindex.search(sessionId, text, source.sourceSequence, limit, scope === \"branch\" ? branch : undefined),\n\t\t\t),\n\t\treadPayload,\n\t\thydrateEntry: async (id: string, maxSourceBytes: number) => {\n\t\t\tif (!positiveLimit(maxSourceBytes)) throw new Error(\"Invalid history entry source byte budget\");\n\t\t\tconst metadata = await get(id);\n\t\t\treturn metadata ? hydrate(metadata, maxSourceBytes) : undefined;\n\t\t},\n\t\titerateEntries: (limits: SessionHistoryReadLimits) => iterateEntries({ ...limits }),\n\t\tmaterialize: async (limits: SessionHistoryReadLimits) => {\n\t\t\tconst entries: HydratedSessionHistoryEntry[] = [];\n\t\t\tlet sourceBytes = 0;\n\t\t\tfor await (const entry of iterateEntries(limits)) {\n\t\t\t\tentries.push(entry);\n\t\t\t\tsourceBytes += entry.source.locator.length;\n\t\t\t}\n\t\t\treturn { source, scope, entries, sourceBytes };\n\t\t},\n\t});\n}\n\n/** A derived, coalescing feed. Canonical source ACKs do not depend on index availability. */\nexport class SessionHistoryIndex {\n\tprivate index?: HistoryIndex;\n\tprivate latest?: SessionJournalState;\n\tprivate indexedThrough = -1;\n\tprivate pumping?: Promise<void>;\n\tprivate failure?: unknown;\n\tprivate closing?: Promise<void>;\n\n\tconstructor(\n\t\tprivate readonly sessionId: string,\n\t\tprivate readonly path: string,\n\t) {}\n\n\t/** Retain at most one newer snapshot while the external worker indexes a prefix. */\n\tpublish(snapshot: SessionJournalState): void {\n\t\tif (this.closing) return;\n\t\tif (!this.latest || snapshot.nextSequence > this.latest.nextSequence) this.latest = { ...snapshot };\n\t\tthis.start();\n\t}\n\n\tprivate needsWork(): boolean {\n\t\treturn this.latest !== undefined && this.indexedThrough < this.latest.nextSequence - 1;\n\t}\n\n\tprivate start(): void {\n\t\tif (this.pumping || !this.needsWork()) return;\n\t\tthis.failure = undefined;\n\t\tconst job = this.pump();\n\t\tthis.pumping = job;\n\t\tvoid job.then(() => {\n\t\t\tthis.pumping = undefined;\n\t\t\tif (!this.failure && this.needsWork()) this.start();\n\t\t});\n\t}\n\n\tprivate async pump(): Promise<void> {\n\t\twhile (this.latest && this.needsWork()) {\n\t\t\tconst snapshot = this.latest;\n\t\t\ttry {\n\t\t\t\tthis.index ??= await HistoryIndex.open(this.path);\n\t\t\t\tconst frontier = await this.index.syncSource(this.sessionId, snapshot);\n\t\t\t\tthis.indexedThrough = frontier.indexedThrough;\n\t\t\t} catch (error) {\n\t\t\t\tthis.failure = error;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Callers must apply their captured sequence/branch scope to the following query. */\n\tasync synchronize(snapshot: SessionJournalState): Promise<HistoryIndex> {\n\t\tif (this.closing) throw new Error(\"Session history index is closing\");\n\t\tthis.publish(snapshot);\n\t\twhile (this.indexedThrough < snapshot.nextSequence - 1) {\n\t\t\tconst job = this.pumping;\n\t\t\tif (!job) throw this.failure ?? new Error(\"Session history index has incomplete coverage\");\n\t\t\tawait job;\n\t\t}\n\t\tif (!this.index) throw new Error(\"Session history index is unavailable\");\n\t\treturn this.index;\n\t}\n\n\t/** Internal current-owner bootstrap; never substitutes current facts for an older captured prefix. */\n\tasync currentSourceBootstrap(snapshot: SessionJournalState): Promise<SourceBootstrapState> {\n\t\tconst captured = { ...snapshot };\n\t\tconst index = await this.synchronize(captured);\n\t\treturn index.currentSourceBootstrap(this.sessionId, captured);\n\t}\n\n\t/** Finish accepted indexing, then wait for the external worker to close. */\n\tclose(): Promise<void> {\n\t\tthis.closing ??= (async () => {\n\t\t\twhile (this.pumping) await this.pumping;\n\t\t\tawait this.index?.close();\n\t\t})();\n\t\treturn this.closing;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"session-history-index.js","sourceRoot":"","sources":["../../src/core/session-history-index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype CanonicalPayloadCursor,\n\ttype CanonicalPayloadFragment,\n\tMAX_CANONICAL_PAYLOAD_PART_BYTES,\n} from \"./canonical-payload-parts.js\";\nimport {\n\ttype BranchBootstrapState,\n\ttype ContextManifestOptions,\n\ttype ContextManifestPage,\n\ttype ContextUpdates,\n\ttype ContextUpdateTarget,\n\tHistoryIndex,\n\ttype HistoryIndexPage,\n\ttype HistoryPayloadReadOptions,\n\ttype IndexedSourceEvent,\n\ttype IpythonSentMessagesOptions,\n\ttype IpythonSentMessagesPage,\n\ttype ParentPathOptions,\n\ttype ParentPathPage,\n\ttype SourceBootstrapState,\n\ttype TaskEvidenceOptions,\n\ttype TaskEvidencePage,\n} from \"./history-index.js\";\nimport type { BoundRequestSink, SourceSnapshotRef } from \"./request-events.js\";\nimport type { SessionJournalState } from \"./session-journal-owner.js\";\nimport type { SessionEntry } from \"./session-manager.js\";\nimport type { SessionUsageSummary } from \"./usage.js\";\n\n/** One source/branch frontier shared by every operation in a captured request. */\nexport interface SessionHistoryReadView {\n\treadonly source: SourceSnapshotRef;\n\t/** A narrower ancestor/prefix on this same capture; its lifetime never outlives the parent read. */\n\tatSnapshot?(source: SourceSnapshotRef): Promise<SessionHistoryReadView>;\n\tcontextManifest(options?: ContextManifestOptions): Promise<ContextManifestPage>;\n\tcontextUpdates(target: ContextUpdateTarget): Promise<ContextUpdates>;\n\treadContextUpdatePayload(\n\t\tid: string,\n\t\ttarget: ContextUpdateTarget,\n\t\toptions?: HistoryPayloadReadOptions,\n\t): Promise<CanonicalPayloadFragment | undefined>;\n\tget(id: string): Promise<IndexedSourceEvent | undefined>;\n\tpage(after?: number, limit?: number, options?: { scan?: boolean }): Promise<HistoryIndexPage>;\n\tsearch(query: string, limit?: number): Promise<HistoryIndexPage>;\n\ttaskEvidence(options?: TaskEvidenceOptions): Promise<TaskEvidencePage>;\n\treadPayload(id: string, options?: HistoryPayloadReadOptions): Promise<CanonicalPayloadFragment | undefined>;\n}\n\nexport interface BoundHistoryReadSink<View> extends Omit<BoundRequestSink, \"readHistory\"> {\n\treadHistory<T>(read: (view: View) => Promise<T>): Promise<T>;\n}\n\nexport interface BoundSessionRequestSink extends BoundHistoryReadSink<SessionHistoryReadView> {}\n\nexport interface SessionHistoryReadLimits {\n\tmaxEntries: number;\n\t/** Canonical frame bytes, not a decoded heap or tokenizer estimate. */\n\tmaxSourceBytes: number;\n}\n\nexport interface HydratedSessionHistoryEntry {\n\tentry: SessionEntry;\n\t/** Includes the exact locator/revision and lowering-only retention outside the payload. */\n\tsource: IndexedSourceEvent;\n}\n\nexport interface MaterializedSessionHistory {\n\tsource: SourceSnapshotRef;\n\tscope: \"branch\" | \"source\";\n\tentries: HydratedSessionHistoryEntry[];\n\tsourceBytes: number;\n}\n\n/** Bootstrap refs and booleans from the same pinned branch used for exact hydration. */\nexport interface SessionBranchBootstrapState extends BranchBootstrapState {\n\treadonly source: SourceSnapshotRef;\n}\n\n/** Exact parent-chain metadata from one captured canonical source and leaf. */\nexport interface SessionParentPathPage extends ParentPathPage {\n\treadonly source: SourceSnapshotRef;\n}\n\n/** Consume iterators inside the owning read callback. Materialized results are detached. */\nexport interface SessionHistoryReadScope {\n\treadonly source: SourceSnapshotRef;\n\treadonly scope: \"branch\" | \"source\";\n\treadonly branchContext: SessionHistoryReadView;\n\t/** Select the captured branch even when invoked from an explicit whole-source scope. */\n\tbranchBootstrap(): Promise<SessionBranchBootstrapState>;\n\t/** Chronological parent chain only; attached request evidence is not an ancestor. */\n\tparentPath(options?: ParentPathOptions): Promise<SessionParentPathPage>;\n\t/** Source scope only: use another leaf without changing the captured source or branchContext. */\n\tparentPathFrom(leafId: string | null, options?: ParentPathOptions): Promise<SessionParentPathPage>;\n\t/** Explicit whole-source relations, clipped to this captured prefix. */\n\tsourceLabel(targetId: string): Promise<IndexedSourceEvent | undefined>;\n\tsourceAssistantUsage(targetId: string): Promise<IndexedSourceEvent | undefined>;\n\t/** All source update revisions for a target, including off-branch records, in bounded pages. */\n\tsourceContextUpdates(target: ContextUpdateTarget, after?: number): Promise<HistoryIndexPage>;\n\t/** Exact sent-message refs on the original captured parent branch, even before a tool result. */\n\tipythonSentMessages(toolCallId: string, options?: IpythonSentMessagesOptions): Promise<IpythonSentMessagesPage>;\n\tget(id: string): Promise<IndexedSourceEvent | undefined>;\n\tpage(after?: number, limit?: number): Promise<HistoryIndexPage>;\n\tsearch(query: string, limit?: number): Promise<HistoryIndexPage>;\n\treadPayload(id: string, options?: HistoryPayloadReadOptions): Promise<CanonicalPayloadFragment | undefined>;\n\thydrateEntry(id: string, maxSourceBytes: number): Promise<HydratedSessionHistoryEntry | undefined>;\n\titerateEntries(limits: SessionHistoryReadLimits): AsyncGenerator<HydratedSessionHistoryEntry>;\n\tmaterialize(limits: SessionHistoryReadLimits): Promise<MaterializedSessionHistory>;\n}\n\nexport type HistoryReadQuery = <T>(operation: () => Promise<T>) => Promise<T>;\n\n/** Existing inference/request views remain strictly branch-scoped. */\nexport function createBranchHistoryReadView(\n\tindex: HistoryIndex,\n\tsource: SourceSnapshotRef,\n\tquery: HistoryReadQuery,\n): SessionHistoryReadView {\n\tconst sessionId = source.sessionId;\n\tconst scope = { leafId: source.leafId, through: source.sourceSequence };\n\treturn Object.freeze({\n\t\tsource,\n\t\tatSnapshot: async (requested: SourceSnapshotRef) => {\n\t\t\tconst captured = Object.freeze({ ...requested });\n\t\t\tif (\n\t\t\t\tcaptured.sessionId !== sessionId ||\n\t\t\t\tcaptured.sessionFile !== source.sessionFile ||\n\t\t\t\tcaptured.persistent !== source.persistent ||\n\t\t\t\t!Number.isSafeInteger(captured.sourceSequence) ||\n\t\t\t\tcaptured.sourceSequence < 0 ||\n\t\t\t\tcaptured.sourceSequence > source.sourceSequence\n\t\t\t)\n\t\t\t\tthrow new Error(\"Context epoch snapshot is outside its captured source\");\n\t\t\tif (captured.leafId !== null) {\n\t\t\t\tconst leaf = await query(() => index.get(sessionId, captured.leafId!, scope));\n\t\t\t\tif (!leaf || leaf.sequence > captured.sourceSequence)\n\t\t\t\t\tthrow new Error(\"Context epoch snapshot is outside its captured branch\");\n\t\t\t}\n\t\t\treturn createBranchHistoryReadView(index, captured, query);\n\t\t},\n\t\tcontextManifest: (options: ContextManifestOptions = {}) =>\n\t\t\tquery(() => index.contextManifest(sessionId, scope, options)),\n\t\tcontextUpdates: (target: ContextUpdateTarget) => query(() => index.contextUpdates(sessionId, scope, target)),\n\t\treadContextUpdatePayload: (id: string, target: ContextUpdateTarget, options: HistoryPayloadReadOptions = {}) =>\n\t\t\tquery(() => index.readContextUpdatePayload(sessionId, id, scope, target, options)),\n\t\tget: (id: string) => query(() => index.get(sessionId, id, scope)),\n\t\tpage: (after = 0, limit = 64, options: { scan?: boolean } = {}) =>\n\t\t\tquery(() => index.page(sessionId, after, scope.through, limit, scope, options)),\n\t\tsearch: (text: string, limit = 16) => query(() => index.search(sessionId, text, scope.through, limit, scope)),\n\t\ttaskEvidence: (options: TaskEvidenceOptions = {}) => query(() => index.taskEvidence(sessionId, scope, options)),\n\t\treadPayload: (id: string, options: HistoryPayloadReadOptions = {}) =>\n\t\t\tquery(() => index.readPayload(sessionId, id, scope, options)),\n\t});\n}\n\nfunction positiveLimit(value: number): boolean {\n\treturn Number.isSafeInteger(value) && value > 0;\n}\n\n/** Reuse the same bounded payload/identity hydration for a captured branch adapter. */\nexport async function hydrateCapturedHistoryEntry(\n\tmetadata: IndexedSourceEvent,\n\tmaxSourceBytes: number,\n\treadPayload: SessionHistoryReadView[\"readPayload\"],\n): Promise<HydratedSessionHistoryEntry> {\n\tif (metadata.locator.length > maxSourceBytes) throw new Error(\"History entry source byte budget exceeded\");\n\tconst chunks: string[] = [];\n\tlet bytes = 0;\n\tlet cursor: CanonicalPayloadCursor | undefined;\n\tdo {\n\t\tconst fragment = await readPayload(metadata.id, {\n\t\t\tcursor,\n\t\t\tmaxBytes: Math.min(MAX_CANONICAL_PAYLOAD_PART_BYTES, maxSourceBytes - bytes),\n\t\t});\n\t\tif (!fragment) throw new Error(\"Captured history entry payload is unavailable\");\n\t\tbytes += fragment.byteLength;\n\t\tif (bytes > maxSourceBytes) throw new Error(\"History entry source byte budget exceeded\");\n\t\tchunks.push(fragment.text);\n\t\tcursor = fragment.nextCursor ?? undefined;\n\t} while (cursor);\n\tconst entry = JSON.parse(chunks.join(\"\")) as SessionEntry;\n\tif (\n\t\t!entry ||\n\t\ttypeof entry !== \"object\" ||\n\t\tentry.id !== metadata.id ||\n\t\tentry.type !== metadata.kind ||\n\t\tentry.parentId !== metadata.parentId\n\t)\n\t\tthrow new Error(\"Canonical history entry does not match indexed identity\");\n\treturn { entry, source: metadata };\n}\n\n/** Source access is selected explicitly, never by widening a coordinator's branch view. */\nexport function createSessionHistoryReadScope(\n\tindex: HistoryIndex,\n\tsource: SourceSnapshotRef,\n\tquery: HistoryReadQuery,\n\tscope: \"branch\" | \"source\",\n): SessionHistoryReadScope {\n\tconst sessionId = source.sessionId;\n\tconst branch = { leafId: source.leafId, through: source.sourceSequence };\n\tconst get = (id: string) =>\n\t\tquery(() =>\n\t\t\tscope === \"branch\" ? index.get(sessionId, id, branch) : index.getSource(sessionId, id, source.sourceSequence),\n\t\t);\n\tconst page = (after = 0, limit = 64) =>\n\t\tquery(() => index.page(sessionId, after, source.sourceSequence, limit, scope === \"branch\" ? branch : undefined));\n\tconst readPayload = (id: string, options: HistoryPayloadReadOptions = {}) =>\n\t\tquery(() =>\n\t\t\tscope === \"branch\"\n\t\t\t\t? index.readPayload(sessionId, id, branch, options)\n\t\t\t\t: index.readSourcePayload(sessionId, id, source.sourceSequence, options),\n\t\t);\n\n\tconst hydrate = (metadata: IndexedSourceEvent, maxSourceBytes: number) =>\n\t\thydrateCapturedHistoryEntry(metadata, maxSourceBytes, readPayload);\n\n\tasync function* iterateEntries(limits: SessionHistoryReadLimits): AsyncGenerator<HydratedSessionHistoryEntry> {\n\t\tconst { maxEntries, maxSourceBytes } = limits;\n\t\tif (!positiveLimit(maxEntries) || !positiveLimit(maxSourceBytes))\n\t\t\tthrow new Error(\"Invalid history materialization limits\");\n\t\tlet after = 0;\n\t\tlet entries = 0;\n\t\tlet sourceBytes = 0;\n\t\twhile (true) {\n\t\t\tconst selected = await page(after, Math.min(64, maxEntries - entries + 1));\n\t\t\tif (selected.indexedThrough < source.sourceSequence)\n\t\t\t\tthrow new Error(\"Captured history has incomplete index coverage\");\n\t\t\tfor (const metadata of selected.events) {\n\t\t\t\tif (++entries > maxEntries) throw new Error(\"History entry budget exceeded\");\n\t\t\t\tif (sourceBytes + metadata.locator.length > maxSourceBytes)\n\t\t\t\t\tthrow new Error(\"History source byte budget exceeded\");\n\t\t\t\tconst hydrated = await hydrate(metadata, maxSourceBytes - sourceBytes);\n\t\t\t\tsourceBytes += metadata.locator.length;\n\t\t\t\tyield hydrated;\n\t\t\t}\n\t\t\tif (selected.nextAfter === null) return;\n\t\t\tafter = selected.nextAfter;\n\t\t}\n\t}\n\n\treturn Object.freeze({\n\t\tsource,\n\t\tscope,\n\t\tbranchContext: createBranchHistoryReadView(index, source, query),\n\t\tbranchBootstrap: () => query(async () => ({ ...(await index.branchBootstrap(sessionId, branch)), source })),\n\t\tparentPath: (options: ParentPathOptions = {}) =>\n\t\t\tquery(async () => ({ ...(await index.parentPath(sessionId, branch, options)), source })),\n\t\tparentPathFrom: (leafId: string | null, options: ParentPathOptions = {}) =>\n\t\t\tquery(async () => {\n\t\t\t\tif (scope !== \"source\") throw new Error(\"Parent path selection requires a source-scoped history read\");\n\t\t\t\treturn {\n\t\t\t\t\t...(await index.parentPath(sessionId, { leafId, through: source.sourceSequence }, options)),\n\t\t\t\t\tsource,\n\t\t\t\t};\n\t\t\t}),\n\t\tsourceLabel: (targetId: string) => query(() => index.sourceLabel(sessionId, targetId, source.sourceSequence)),\n\t\tsourceAssistantUsage: (targetId: string) =>\n\t\t\tquery(() => index.sourceAssistantUsage(sessionId, targetId, source.sourceSequence)),\n\t\tsourceContextUpdates: (target: ContextUpdateTarget, after = 0) =>\n\t\t\tquery(() => index.sourceContextUpdates(sessionId, target, source.sourceSequence, after)),\n\t\tipythonSentMessages: (toolCallId: string, options: IpythonSentMessagesOptions = {}) =>\n\t\t\tquery(() => index.ipythonSentMessages(sessionId, branch, toolCallId, options)),\n\t\tget,\n\t\tpage,\n\t\tsearch: (text: string, limit = 16) =>\n\t\t\tquery(() =>\n\t\t\t\tindex.search(sessionId, text, source.sourceSequence, limit, scope === \"branch\" ? branch : undefined),\n\t\t\t),\n\t\treadPayload,\n\t\thydrateEntry: async (id: string, maxSourceBytes: number) => {\n\t\t\tif (!positiveLimit(maxSourceBytes)) throw new Error(\"Invalid history entry source byte budget\");\n\t\t\tconst metadata = await get(id);\n\t\t\treturn metadata ? hydrate(metadata, maxSourceBytes) : undefined;\n\t\t},\n\t\titerateEntries: (limits: SessionHistoryReadLimits) => iterateEntries({ ...limits }),\n\t\tmaterialize: async (limits: SessionHistoryReadLimits) => {\n\t\t\tconst entries: HydratedSessionHistoryEntry[] = [];\n\t\t\tlet sourceBytes = 0;\n\t\t\tfor await (const entry of iterateEntries(limits)) {\n\t\t\t\tentries.push(entry);\n\t\t\t\tsourceBytes += entry.source.locator.length;\n\t\t\t}\n\t\t\treturn { source, scope, entries, sourceBytes };\n\t\t},\n\t});\n}\n\n/** A derived, coalescing feed. Canonical source ACKs do not depend on index availability. */\nexport class SessionHistoryIndex {\n\tprivate index?: HistoryIndex;\n\tprivate latest?: SessionJournalState;\n\tprivate indexedThrough = -1;\n\tprivate pumping?: Promise<void>;\n\tprivate failure?: unknown;\n\tprivate closing?: Promise<void>;\n\n\tconstructor(\n\t\tprivate readonly sessionId: string,\n\t\tprivate readonly path: string,\n\t) {}\n\n\t/** Retain at most one newer snapshot while the external worker indexes a prefix. */\n\tpublish(snapshot: SessionJournalState): void {\n\t\tif (this.closing) return;\n\t\tif (!this.latest || snapshot.nextSequence > this.latest.nextSequence) this.latest = { ...snapshot };\n\t\tthis.start();\n\t}\n\n\tprivate needsWork(): boolean {\n\t\treturn this.latest !== undefined && this.indexedThrough < this.latest.nextSequence - 1;\n\t}\n\n\tprivate start(): void {\n\t\tif (this.pumping || !this.needsWork()) return;\n\t\tthis.failure = undefined;\n\t\tconst job = this.pump();\n\t\tthis.pumping = job;\n\t\tvoid job.then(() => {\n\t\t\tthis.pumping = undefined;\n\t\t\tif (!this.failure && this.needsWork()) this.start();\n\t\t});\n\t}\n\n\tprivate async pump(): Promise<void> {\n\t\twhile (this.latest && this.needsWork()) {\n\t\t\tconst snapshot = this.latest;\n\t\t\ttry {\n\t\t\t\tthis.index ??= await HistoryIndex.open(this.path);\n\t\t\t\tconst frontier = await this.index.syncSource(this.sessionId, snapshot);\n\t\t\t\tthis.indexedThrough = frontier.indexedThrough;\n\t\t\t} catch (error) {\n\t\t\t\tthis.failure = error;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Callers must apply their captured sequence/branch scope to the following query. */\n\tasync synchronize(snapshot: SessionJournalState): Promise<HistoryIndex> {\n\t\tif (this.closing) throw new Error(\"Session history index is closing\");\n\t\tthis.publish(snapshot);\n\t\twhile (this.indexedThrough < snapshot.nextSequence - 1) {\n\t\t\tconst job = this.pumping;\n\t\t\tif (!job) throw this.failure ?? new Error(\"Session history index has incomplete coverage\");\n\t\t\tawait job;\n\t\t}\n\t\tif (!this.index) throw new Error(\"Session history index is unavailable\");\n\t\treturn this.index;\n\t}\n\n\t/** Internal current-owner bootstrap; never substitutes current facts for an older captured prefix. */\n\tasync currentSourceBootstrap(snapshot: SessionJournalState): Promise<SourceBootstrapState> {\n\t\tconst captured = { ...snapshot };\n\t\tconst index = await this.synchronize(captured);\n\t\treturn index.currentSourceBootstrap(this.sessionId, captured);\n\t}\n\n\t/** Caller holds the owner queue until the exact current projection is read. */\n\tasync currentSourceUsage(snapshot: SessionJournalState): Promise<SessionUsageSummary | undefined> {\n\t\tconst captured = { ...snapshot };\n\t\tconst index = await this.synchronize(captured);\n\t\treturn index.currentSourceUsage(this.sessionId, captured);\n\t}\n\n\t/** Finish accepted indexing, then wait for the external worker to close. */\n\tclose(): Promise<void> {\n\t\tthis.closing ??= (async () => {\n\t\t\twhile (this.pumping) await this.pumping;\n\t\t\tawait this.index?.close();\n\t\t})();\n\t\treturn this.closing;\n\t}\n}\n"]}
|
|
@@ -355,6 +355,8 @@ export declare class SessionManager {
|
|
|
355
355
|
readBranchHistory<T>(read: (view: SessionHistoryReadScope) => Promise<T>): Promise<T>;
|
|
356
356
|
/** Explicit whole-source read, including branches outside the current leaf. */
|
|
357
357
|
readSourceHistory<T>(read: (view: SessionHistoryReadScope) => Promise<T>): Promise<T>;
|
|
358
|
+
/** Read the owner-maintained own-spend projection without hydrating the source. */
|
|
359
|
+
readOwnUsageSummary(): Promise<SessionUsageSummary | undefined>;
|
|
358
360
|
/** Complete bounded structured task reduction on one captured native branch. */
|
|
359
361
|
readTaskState(limits?: Partial<TaskStateReadLimits>): Promise<TaskStateView>;
|
|
360
362
|
private _materializeParentPath;
|