@remnic/core 10.0.76 → 10.0.77

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 (80) hide show
  1. package/dist/access-admin-ops-surface.js +2 -2
  2. package/dist/access-authorization-probe.js +3 -3
  3. package/dist/access-boundary.js +2 -2
  4. package/dist/access-cli.js +17 -17
  5. package/dist/access-extraction-force-flush.js +2 -2
  6. package/dist/access-http-briefing.js +3 -3
  7. package/dist/access-http-query.js +2 -2
  8. package/dist/access-http.js +14 -14
  9. package/dist/access-identity-continuity-surface.js +2 -2
  10. package/dist/access-lcm-surface.js +2 -2
  11. package/dist/access-mcp.js +9 -9
  12. package/dist/access-namespace-preflight.js +2 -2
  13. package/dist/access-observe-helpers.d.ts.map +1 -1
  14. package/dist/access-observe-helpers.js +1 -1
  15. package/dist/access-observe-write-surface.js +2 -2
  16. package/dist/access-operations-batch.js +3 -3
  17. package/dist/access-operations.js +8 -8
  18. package/dist/access-recall-concurrency.js +2 -2
  19. package/dist/access-recall-response.js +2 -2
  20. package/dist/access-recall-surface.js +2 -2
  21. package/dist/access-service.js +2 -2
  22. package/dist/access-surface-catalog.js +4 -4
  23. package/dist/{chunk-R24RYSQX.js → chunk-2JRLKDHV.js} +2 -2
  24. package/dist/{chunk-N6GEGRCT.js → chunk-4NDDRYBY.js} +2 -2
  25. package/dist/{chunk-VEWTHVX2.js → chunk-5HVEYVNQ.js} +2 -2
  26. package/dist/{chunk-KAED7IBB.js → chunk-6L62IDS6.js} +2 -2
  27. package/dist/{chunk-IPHIIRDN.js → chunk-CYTTY4M2.js} +5 -7
  28. package/dist/chunk-CYTTY4M2.js.map +1 -0
  29. package/dist/{chunk-SZBZOUHR.js → chunk-D26XMQP5.js} +2 -2
  30. package/dist/{chunk-VPEMGBTI.js → chunk-D3USVQIV.js} +2 -2
  31. package/dist/{chunk-E22CQZ3H.js → chunk-EYIBIGIU.js} +8 -8
  32. package/dist/{chunk-IBQ7LGUJ.js → chunk-FQU65RJX.js} +3 -3
  33. package/dist/{chunk-FP2AT4WL.js → chunk-G3PBNYDH.js} +2 -2
  34. package/dist/{chunk-HR6NTVYZ.js → chunk-I4W2ADBP.js} +140 -7
  35. package/dist/chunk-I4W2ADBP.js.map +1 -0
  36. package/dist/{chunk-ZG57BEUS.js → chunk-LXDERMOU.js} +2 -2
  37. package/dist/{chunk-SY4AFWUZ.js → chunk-MAURCRPQ.js} +4 -4
  38. package/dist/{chunk-3GGCMRO7.js → chunk-MUZWS6KB.js} +2 -2
  39. package/dist/{chunk-TD5VTVPT.js → chunk-MXQKGSMW.js} +2 -2
  40. package/dist/{chunk-RXGFITWS.js → chunk-NUBOY2LQ.js} +2 -2
  41. package/dist/{chunk-PLGBPFEO.js → chunk-TWHVCSLX.js} +2 -2
  42. package/dist/{chunk-VEQVXNWR.js → chunk-TX627XOF.js} +2 -2
  43. package/dist/cli.js +15 -15
  44. package/dist/external-wiki-access.js +3 -3
  45. package/dist/index.js +17 -17
  46. package/dist/memory-browse-operations.js +3 -3
  47. package/dist/orchestration/backlog-scheduler.js +18 -18
  48. package/dist/orchestration/buffer-drain-runner.js +18 -18
  49. package/dist/orchestration/extraction-queue-snapshot-sharing.d.ts +113 -0
  50. package/dist/orchestration/extraction-queue-snapshot-sharing.d.ts.map +1 -0
  51. package/dist/orchestration/turn-ingestion.d.ts +3 -0
  52. package/dist/orchestration/turn-ingestion.d.ts.map +1 -1
  53. package/dist/orchestrator.js +17 -17
  54. package/dist/recall-navigation-operations.js +3 -3
  55. package/dist/recall-navigation.js +2 -2
  56. package/dist/support-passport/index.js +5 -5
  57. package/package.json +2 -2
  58. package/src/access-observe-helpers.test.ts +156 -0
  59. package/src/access-observe-helpers.ts +6 -6
  60. package/src/orchestration/extraction-queue-bounded-retention.test.ts +548 -0
  61. package/src/orchestration/extraction-queue-snapshot-sharing.ts +257 -0
  62. package/src/orchestration/turn-ingestion.ts +19 -6
  63. package/dist/chunk-HR6NTVYZ.js.map +0 -1
  64. package/dist/chunk-IPHIIRDN.js.map +0 -1
  65. /package/dist/{chunk-R24RYSQX.js.map → chunk-2JRLKDHV.js.map} +0 -0
  66. /package/dist/{chunk-N6GEGRCT.js.map → chunk-4NDDRYBY.js.map} +0 -0
  67. /package/dist/{chunk-VEWTHVX2.js.map → chunk-5HVEYVNQ.js.map} +0 -0
  68. /package/dist/{chunk-KAED7IBB.js.map → chunk-6L62IDS6.js.map} +0 -0
  69. /package/dist/{chunk-SZBZOUHR.js.map → chunk-D26XMQP5.js.map} +0 -0
  70. /package/dist/{chunk-VPEMGBTI.js.map → chunk-D3USVQIV.js.map} +0 -0
  71. /package/dist/{chunk-E22CQZ3H.js.map → chunk-EYIBIGIU.js.map} +0 -0
  72. /package/dist/{chunk-IBQ7LGUJ.js.map → chunk-FQU65RJX.js.map} +0 -0
  73. /package/dist/{chunk-FP2AT4WL.js.map → chunk-G3PBNYDH.js.map} +0 -0
  74. /package/dist/{chunk-ZG57BEUS.js.map → chunk-LXDERMOU.js.map} +0 -0
  75. /package/dist/{chunk-SY4AFWUZ.js.map → chunk-MAURCRPQ.js.map} +0 -0
  76. /package/dist/{chunk-3GGCMRO7.js.map → chunk-MUZWS6KB.js.map} +0 -0
  77. /package/dist/{chunk-TD5VTVPT.js.map → chunk-MXQKGSMW.js.map} +0 -0
  78. /package/dist/{chunk-RXGFITWS.js.map → chunk-NUBOY2LQ.js.map} +0 -0
  79. /package/dist/{chunk-PLGBPFEO.js.map → chunk-TWHVCSLX.js.map} +0 -0
  80. /package/dist/{chunk-VEQVXNWR.js.map → chunk-TX627XOF.js.map} +0 -0
@@ -88,11 +88,9 @@ var PendingObserveExtractionTracker = class {
88
88
  );
89
89
  if (rejected) throw rejected.reason;
90
90
  }) : extraction;
91
- const entry = {
92
- promise,
93
- running: previous?.running ?? extraction,
94
- controllers: new Set(previous ? [...previous.controllers, controller] : [controller])
95
- };
91
+ const controllers = previous?.controllers ?? /* @__PURE__ */ new Set();
92
+ controllers.add(controller);
93
+ const entry = { promise, running: previous?.running ?? extraction, controllers };
96
94
  this.entries.set(key, entry);
97
95
  void promise.then(() => {
98
96
  if (this.entries.get(key) === entry) this.entries.delete(key);
@@ -119,7 +117,7 @@ var PendingObserveExtractionTracker = class {
119
117
  for (const [key, entry] of this.entries) {
120
118
  const [entrySessionKey, entryPrincipal, entryNamespace] = key.split("\0");
121
119
  if (entrySessionKey !== sessionKey || principal !== void 0 && entryPrincipal !== (principal ?? "") || namespace !== void 0 && entryNamespace !== (namespace ?? "")) continue;
122
- for (const controller of entry.controllers) controller.abort(reason);
120
+ for (const controller of [...entry.controllers]) controller.abort(reason);
123
121
  }
124
122
  }
125
123
  async wait(sessionKey, principal, namespace, abortSignal, registerCancellation, scopeHint, preemptAfterAdmission) {
@@ -171,4 +169,4 @@ export {
171
169
  pendingObserveScopeHint,
172
170
  PendingObserveExtractionTracker
173
171
  };
174
- //# sourceMappingURL=chunk-IPHIIRDN.js.map
172
+ //# sourceMappingURL=chunk-CYTTY4M2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/access-observe-helpers.ts"],"sourcesContent":["import { isPreemptedExtraction } from \"./abort-error.js\";\n\ntype PendingObservePreparation = {\n cancelled: boolean;\n scopeHint?: string;\n principal?: string;\n namespace?: string;\n scopeResolved: boolean;\n resolvedScopeFences: Array<{ principal?: string; namespace?: string }>;\n released: Promise<void>;\n release: () => void;\n};\n\nfunction resolvedScopesMatch(\n left: { principal?: string; namespace?: string },\n right: { principal?: string; namespace?: string },\n): boolean {\n return left.principal === right.principal && left.namespace === right.namespace;\n}\n\nfunction preparationMatchesScope(\n reservation: PendingObservePreparation,\n principal: string | undefined,\n namespace: string | undefined,\n scopeHint: string | undefined,\n): boolean {\n if (reservation.scopeResolved) {\n return resolvedScopesMatch(reservation, { principal, namespace });\n }\n return reservation.scopeHint === undefined || scopeHint === undefined || reservation.scopeHint === scopeHint;\n}\n\nexport type PendingObservePreparationHandle = {\n isCancelled(): boolean;\n setScope(principal?: string, namespace?: string): void;\n release(): void;\n};\n\nexport function pendingObserveScopeHint(options: {\n namespace?: string;\n projectTag?: string;\n cwd?: string;\n}): string | undefined {\n const namespace = options.namespace?.trim();\n if (namespace) return `namespace:${namespace}`;\n const projectTag = options.projectTag?.trim();\n if (projectTag) return `projectTag:${projectTag}`;\n const cwd = options.cwd?.trim();\n return cwd ? `cwd:${cwd}` : undefined;\n}\n\ntype PendingObserveExtraction = {\n promise: Promise<void>;\n running: Promise<void>;\n controllers: Set<AbortController>;\n};\n\nexport class PendingObserveExtractionTracker {\n private readonly entries = new Map<string, PendingObserveExtraction>();\n private readonly preparations = new Map<string, Set<PendingObservePreparation>>();\n\n reserve(sessionKey: string, scopeHint?: string): PendingObservePreparationHandle {\n let released = false;\n let resolveReleased: () => void = () => {};\n const reservation: PendingObservePreparation = {\n cancelled: false,\n scopeResolved: false,\n resolvedScopeFences: [],\n scopeHint,\n released: new Promise<void>((resolve) => {\n resolveReleased = resolve;\n }),\n release: () => {\n if (released) return;\n released = true;\n const entries = this.preparations.get(sessionKey);\n entries?.delete(reservation);\n if (entries?.size === 0) this.preparations.delete(sessionKey);\n resolveReleased();\n },\n };\n const entries = this.preparations.get(sessionKey) ?? new Set<PendingObservePreparation>();\n entries.add(reservation);\n this.preparations.set(sessionKey, entries);\n return {\n isCancelled: () => reservation.cancelled,\n setScope: (principal, namespace) => {\n reservation.principal = principal;\n reservation.namespace = namespace;\n reservation.scopeResolved = true;\n if (reservation.resolvedScopeFences.some((fence) => resolvedScopesMatch(reservation, fence))) {\n reservation.cancelled = true;\n }\n },\n release: reservation.release,\n };\n }\n\n private async waitForPreparations(\n sessionKey: string,\n principal: string | undefined,\n namespace: string | undefined,\n scopeHint: string | undefined,\n ): Promise<void> {\n while (true) {\n const reservations = [...(this.preparations.get(sessionKey) ?? [])];\n for (const reservation of reservations) {\n if (\n !reservation.cancelled &&\n !reservation.scopeResolved &&\n !preparationMatchesScope(reservation, principal, namespace, scopeHint) &&\n !reservation.resolvedScopeFences.some((fence) =>\n resolvedScopesMatch(fence, { principal, namespace }),\n )\n ) {\n reservation.resolvedScopeFences.push({ principal, namespace });\n }\n }\n const pending = reservations.filter(\n (reservation) =>\n !reservation.cancelled && preparationMatchesScope(reservation, principal, namespace, scopeHint),\n );\n if (pending.length === 0) return;\n await Promise.all(pending.map((reservation) => reservation.released));\n }\n }\n\n\n key(sessionKey: string, principal: string | undefined, namespace: string | undefined): string {\n return `${sessionKey}\\u0000${principal ?? \"\"}\\u0000${namespace ?? \"\"}`;\n }\n\n track(key: string, extraction: Promise<void>, controller: AbortController): void {\n const previous = this.entries.get(key);\n const promise = previous\n ? Promise.allSettled([previous.promise, extraction]).then((results) => {\n const rejected = results.find(\n (result): result is PromiseRejectedResult =>\n result.status === \"rejected\" &&\n !(result.reason instanceof Error && isPreemptedExtraction(result.reason)),\n );\n if (rejected) throw rejected.reason;\n })\n : extraction;\n const controllers = previous?.controllers ?? new Set<AbortController>();\n controllers.add(controller);\n const entry = { promise, running: previous?.running ?? extraction, controllers };\n this.entries.set(key, entry);\n // Any settle (success OR rejection — preemption is just one rejection\n // kind) ends the pending entry; leaving a settled failure tracked wedged\n // the key and kept every controller ever registered for it alive.\n void promise\n .then(() => {\n if (this.entries.get(key) === entry) this.entries.delete(key);\n })\n .catch(() => {\n if (this.entries.get(key) === entry) this.entries.delete(key);\n });\n }\n\n cancelPreparations(sessionKey: string, scopeHint?: string): void {\n for (const reservation of this.preparations.get(sessionKey) ?? []) {\n if (\n scopeHint !== undefined &&\n reservation.scopeHint !== undefined &&\n reservation.scopeHint !== scopeHint\n ) {\n continue;\n }\n reservation.cancelled = true;\n }\n }\n\n cancel(\n sessionKey: string,\n principal?: string,\n namespace?: string,\n scopeHint?: string,\n reason?: Error,\n ): void {\n for (const reservation of this.preparations.get(sessionKey) ?? []) {\n if (!preparationMatchesScope(reservation, principal, namespace, scopeHint)) continue;\n reservation.cancelled = true;\n }\n\n this.abortTracked(sessionKey, principal, namespace, reason);\n }\n\n private abortTracked(\n sessionKey: string,\n principal: string | undefined,\n namespace: string | undefined,\n reason?: Error,\n ): void {\n for (const [key, entry] of this.entries) {\n const [entrySessionKey, entryPrincipal, entryNamespace] = key.split(\"\\u0000\");\n if (\n entrySessionKey !== sessionKey ||\n (principal !== undefined && entryPrincipal !== (principal ?? \"\")) ||\n (namespace !== undefined && entryNamespace !== (namespace ?? \"\"))\n ) continue;\n // Snapshot: an abort listener may track() synchronously; iterating the\n // shared live set would abort that new admission or never terminate.\n for (const controller of [...entry.controllers]) controller.abort(reason);\n }\n }\n\n async wait(\n sessionKey: string,\n principal: string | undefined,\n namespace: string | undefined,\n abortSignal?: AbortSignal,\n registerCancellation?: (cancel: () => void) => void,\n scopeHint?: string,\n preemptAfterAdmission?: () => void,\n ): Promise<void> {\n const key = this.key(sessionKey, principal, namespace);\n let cancelled = abortSignal?.aborted === true;\n const abortTracked = (): void => {\n cancelled = true;\n this.cancel(sessionKey, principal, namespace, scopeHint);\n };\n registerCancellation?.(abortTracked);\n abortSignal?.addEventListener(\"abort\", abortTracked, { once: true });\n try {\n await this.waitForPreparations(sessionKey, principal, namespace, scopeHint);\n if (cancelled || abortSignal?.aborted) return;\n if (preemptAfterAdmission) {\n preemptAfterAdmission();\n const running = this.entries.get(key)?.running;\n if (!running) return;\n try {\n await running;\n } catch (error) {\n if (this.entries.get(key)?.running === running) this.entries.delete(key);\n if (!(error instanceof Error && isPreemptedExtraction(error))) throw error;\n }\n return;\n }\n while (true) {\n const entry = this.entries.get(key);\n if (!entry) return;\n try {\n await entry.promise;\n } catch (error) {\n if (this.entries.get(key) !== entry) continue;\n this.entries.delete(key);\n if (error instanceof Error && isPreemptedExtraction(error)) return;\n throw error;\n }\n if (this.entries.get(key) !== entry) continue;\n this.entries.delete(key);\n return;\n }\n } finally {\n abortSignal?.removeEventListener(\"abort\", abortTracked);\n }\n }\n}\n"],"mappings":";;;;;AAaA,SAAS,oBACP,MACA,OACS;AACT,SAAO,KAAK,cAAc,MAAM,aAAa,KAAK,cAAc,MAAM;AACxE;AAEA,SAAS,wBACP,aACA,WACA,WACA,WACS;AACT,MAAI,YAAY,eAAe;AAC7B,WAAO,oBAAoB,aAAa,EAAE,WAAW,UAAU,CAAC;AAAA,EAClE;AACA,SAAO,YAAY,cAAc,UAAa,cAAc,UAAa,YAAY,cAAc;AACrG;AAQO,SAAS,wBAAwB,SAIjB;AACrB,QAAM,YAAY,QAAQ,WAAW,KAAK;AAC1C,MAAI,UAAW,QAAO,aAAa,SAAS;AAC5C,QAAM,aAAa,QAAQ,YAAY,KAAK;AAC5C,MAAI,WAAY,QAAO,cAAc,UAAU;AAC/C,QAAM,MAAM,QAAQ,KAAK,KAAK;AAC9B,SAAO,MAAM,OAAO,GAAG,KAAK;AAC9B;AAQO,IAAM,kCAAN,MAAsC;AAAA,EAC1B,UAAU,oBAAI,IAAsC;AAAA,EACpD,eAAe,oBAAI,IAA4C;AAAA,EAEhF,QAAQ,YAAoB,WAAqD;AAC/E,QAAI,WAAW;AACf,QAAI,kBAA8B,MAAM;AAAA,IAAC;AACzC,UAAM,cAAyC;AAAA,MAC7C,WAAW;AAAA,MACX,eAAe;AAAA,MACf,qBAAqB,CAAC;AAAA,MACtB;AAAA,MACA,UAAU,IAAI,QAAc,CAAC,YAAY;AACvC,0BAAkB;AAAA,MACpB,CAAC;AAAA,MACD,SAAS,MAAM;AACb,YAAI,SAAU;AACd,mBAAW;AACX,cAAMA,WAAU,KAAK,aAAa,IAAI,UAAU;AAChD,QAAAA,UAAS,OAAO,WAAW;AAC3B,YAAIA,UAAS,SAAS,EAAG,MAAK,aAAa,OAAO,UAAU;AAC5D,wBAAgB;AAAA,MAClB;AAAA,IACF;AACA,UAAM,UAAU,KAAK,aAAa,IAAI,UAAU,KAAK,oBAAI,IAA+B;AACxF,YAAQ,IAAI,WAAW;AACvB,SAAK,aAAa,IAAI,YAAY,OAAO;AACzC,WAAO;AAAA,MACL,aAAa,MAAM,YAAY;AAAA,MAC/B,UAAU,CAAC,WAAW,cAAc;AAClC,oBAAY,YAAY;AACxB,oBAAY,YAAY;AACxB,oBAAY,gBAAgB;AAC5B,YAAI,YAAY,oBAAoB,KAAK,CAAC,UAAU,oBAAoB,aAAa,KAAK,CAAC,GAAG;AAC5F,sBAAY,YAAY;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAS,YAAY;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,MAAc,oBACZ,YACA,WACA,WACA,WACe;AACf,WAAO,MAAM;AACX,YAAM,eAAe,CAAC,GAAI,KAAK,aAAa,IAAI,UAAU,KAAK,CAAC,CAAE;AAClE,iBAAW,eAAe,cAAc;AACtC,YACE,CAAC,YAAY,aACb,CAAC,YAAY,iBACb,CAAC,wBAAwB,aAAa,WAAW,WAAW,SAAS,KACrE,CAAC,YAAY,oBAAoB;AAAA,UAAK,CAAC,UACrC,oBAAoB,OAAO,EAAE,WAAW,UAAU,CAAC;AAAA,QACrD,GACA;AACA,sBAAY,oBAAoB,KAAK,EAAE,WAAW,UAAU,CAAC;AAAA,QAC/D;AAAA,MACF;AACA,YAAM,UAAU,aAAa;AAAA,QAC3B,CAAC,gBACC,CAAC,YAAY,aAAa,wBAAwB,aAAa,WAAW,WAAW,SAAS;AAAA,MAClG;AACA,UAAI,QAAQ,WAAW,EAAG;AAC1B,YAAM,QAAQ,IAAI,QAAQ,IAAI,CAAC,gBAAgB,YAAY,QAAQ,CAAC;AAAA,IACtE;AAAA,EACF;AAAA,EAGA,IAAI,YAAoB,WAA+B,WAAuC;AAC5F,WAAO,GAAG,UAAU,KAAS,aAAa,EAAE,KAAS,aAAa,EAAE;AAAA,EACtE;AAAA,EAEA,MAAM,KAAa,YAA2B,YAAmC;AAC/E,UAAM,WAAW,KAAK,QAAQ,IAAI,GAAG;AACrC,UAAM,UAAU,WACZ,QAAQ,WAAW,CAAC,SAAS,SAAS,UAAU,CAAC,EAAE,KAAK,CAAC,YAAY;AACnE,YAAM,WAAW,QAAQ;AAAA,QACvB,CAAC,WACC,OAAO,WAAW,cAClB,EAAE,OAAO,kBAAkB,SAAS,sBAAsB,OAAO,MAAM;AAAA,MAC3E;AACA,UAAI,SAAU,OAAM,SAAS;AAAA,IAC/B,CAAC,IACD;AACJ,UAAM,cAAc,UAAU,eAAe,oBAAI,IAAqB;AACtE,gBAAY,IAAI,UAAU;AAC1B,UAAM,QAAQ,EAAE,SAAS,SAAS,UAAU,WAAW,YAAY,YAAY;AAC/E,SAAK,QAAQ,IAAI,KAAK,KAAK;AAI3B,SAAK,QACF,KAAK,MAAM;AACV,UAAI,KAAK,QAAQ,IAAI,GAAG,MAAM,MAAO,MAAK,QAAQ,OAAO,GAAG;AAAA,IAC9D,CAAC,EACA,MAAM,MAAM;AACX,UAAI,KAAK,QAAQ,IAAI,GAAG,MAAM,MAAO,MAAK,QAAQ,OAAO,GAAG;AAAA,IAC9D,CAAC;AAAA,EACL;AAAA,EAEA,mBAAmB,YAAoB,WAA0B;AAC/D,eAAW,eAAe,KAAK,aAAa,IAAI,UAAU,KAAK,CAAC,GAAG;AACjE,UACE,cAAc,UACd,YAAY,cAAc,UAC1B,YAAY,cAAc,WAC1B;AACA;AAAA,MACF;AACA,kBAAY,YAAY;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,OACE,YACA,WACA,WACA,WACA,QACM;AACN,eAAW,eAAe,KAAK,aAAa,IAAI,UAAU,KAAK,CAAC,GAAG;AACjE,UAAI,CAAC,wBAAwB,aAAa,WAAW,WAAW,SAAS,EAAG;AAC5E,kBAAY,YAAY;AAAA,IAC1B;AAEA,SAAK,aAAa,YAAY,WAAW,WAAW,MAAM;AAAA,EAC5D;AAAA,EAEQ,aACN,YACA,WACA,WACA,QACM;AACN,eAAW,CAAC,KAAK,KAAK,KAAK,KAAK,SAAS;AACvC,YAAM,CAAC,iBAAiB,gBAAgB,cAAc,IAAI,IAAI,MAAM,IAAQ;AAC5E,UACE,oBAAoB,cACnB,cAAc,UAAa,oBAAoB,aAAa,OAC5D,cAAc,UAAa,oBAAoB,aAAa,IAC7D;AAGF,iBAAW,cAAc,CAAC,GAAG,MAAM,WAAW,EAAG,YAAW,MAAM,MAAM;AAAA,IAC1E;AAAA,EACF;AAAA,EAEA,MAAM,KACJ,YACA,WACA,WACA,aACA,sBACA,WACA,uBACe;AACf,UAAM,MAAM,KAAK,IAAI,YAAY,WAAW,SAAS;AACrD,QAAI,YAAY,aAAa,YAAY;AACzC,UAAM,eAAe,MAAY;AAC/B,kBAAY;AACZ,WAAK,OAAO,YAAY,WAAW,WAAW,SAAS;AAAA,IACzD;AACA,2BAAuB,YAAY;AACnC,iBAAa,iBAAiB,SAAS,cAAc,EAAE,MAAM,KAAK,CAAC;AACnE,QAAI;AACF,YAAM,KAAK,oBAAoB,YAAY,WAAW,WAAW,SAAS;AAC1E,UAAI,aAAa,aAAa,QAAS;AACvC,UAAI,uBAAuB;AACzB,8BAAsB;AACtB,cAAM,UAAU,KAAK,QAAQ,IAAI,GAAG,GAAG;AACvC,YAAI,CAAC,QAAS;AACd,YAAI;AACF,gBAAM;AAAA,QACR,SAAS,OAAO;AACd,cAAI,KAAK,QAAQ,IAAI,GAAG,GAAG,YAAY,QAAS,MAAK,QAAQ,OAAO,GAAG;AACvE,cAAI,EAAE,iBAAiB,SAAS,sBAAsB,KAAK,GAAI,OAAM;AAAA,QACvE;AACA;AAAA,MACF;AACA,aAAO,MAAM;AACX,cAAM,QAAQ,KAAK,QAAQ,IAAI,GAAG;AAClC,YAAI,CAAC,MAAO;AACZ,YAAI;AACF,gBAAM,MAAM;AAAA,QACd,SAAS,OAAO;AACd,cAAI,KAAK,QAAQ,IAAI,GAAG,MAAM,MAAO;AACrC,eAAK,QAAQ,OAAO,GAAG;AACvB,cAAI,iBAAiB,SAAS,sBAAsB,KAAK,EAAG;AAC5D,gBAAM;AAAA,QACR;AACA,YAAI,KAAK,QAAQ,IAAI,GAAG,MAAM,MAAO;AACrC,aAAK,QAAQ,OAAO,GAAG;AACvB;AAAA,MACF;AAAA,IACF,UAAE;AACA,mBAAa,oBAAoB,SAAS,YAAY;AAAA,IACxD;AAAA,EACF;AACF;","names":["entries"]}
@@ -2,7 +2,7 @@ import {
2
2
  SupportPassportError,
3
3
  SupportPassportOwnerCreateGrantRequestSchema,
4
4
  getOperation
5
- } from "./chunk-R24RYSQX.js";
5
+ } from "./chunk-2JRLKDHV.js";
6
6
 
7
7
  // src/support-passport/access-http.ts
8
8
  var OWNER_ROOT = "/engram/v1/support-passport";
@@ -137,4 +137,4 @@ export {
137
137
  SUPPORT_PASSPORT_OWNER_HTTP_ROUTES,
138
138
  handleSupportPassportOwnerHttp
139
139
  };
140
- //# sourceMappingURL=chunk-SZBZOUHR.js.map
140
+ //# sourceMappingURL=chunk-D26XMQP5.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-7T4TOGMS.js";
4
4
  import {
5
5
  defineOperation
6
- } from "./chunk-R24RYSQX.js";
6
+ } from "./chunk-2JRLKDHV.js";
7
7
 
8
8
  // src/external-wiki-access.ts
9
9
  import { z } from "zod";
@@ -26,4 +26,4 @@ var externalWikiSearchOperation = defineOperation({
26
26
  export {
27
27
  externalWikiSearchOperation
28
28
  };
29
- //# sourceMappingURL=chunk-VPEMGBTI.js.map
29
+ //# sourceMappingURL=chunk-D3USVQIV.js.map
@@ -21,10 +21,10 @@ import {
21
21
  } from "./chunk-FETPTCQZ.js";
22
22
  import {
23
23
  handleSupportPassportOwnerHttp
24
- } from "./chunk-SZBZOUHR.js";
24
+ } from "./chunk-D26XMQP5.js";
25
25
  import {
26
26
  buildSupportPassportPublicRequestHandler
27
- } from "./chunk-VEWTHVX2.js";
27
+ } from "./chunk-5HVEYVNQ.js";
28
28
  import {
29
29
  handleMcpGetSse
30
30
  } from "./chunk-SRT6SHVZ.js";
@@ -37,10 +37,10 @@ import {
37
37
  processChatMessage,
38
38
  sessionBelongsToPrincipal,
39
39
  subscribeChatTranscript
40
- } from "./chunk-VEQVXNWR.js";
40
+ } from "./chunk-TX627XOF.js";
41
41
  import {
42
42
  RelayMissionStoreError
43
- } from "./chunk-IBQ7LGUJ.js";
43
+ } from "./chunk-FQU65RJX.js";
44
44
  import {
45
45
  handleRecallWhyHttpQuery,
46
46
  handleRecallXrayHttpQuery
@@ -64,7 +64,7 @@ import {
64
64
  } from "./chunk-KNZDGZSY.js";
65
65
  import {
66
66
  respondBriefingHttp
67
- } from "./chunk-KAED7IBB.js";
67
+ } from "./chunk-6L62IDS6.js";
68
68
  import {
69
69
  maybeHandleLifecycleFlush
70
70
  } from "./chunk-2BPPGNAQ.js";
@@ -75,11 +75,11 @@ import {
75
75
  authorizationProbeNamespaces,
76
76
  authorizationProbeRequiresPrincipalNamespace,
77
77
  probeOperationAuthorization
78
- } from "./chunk-FP2AT4WL.js";
78
+ } from "./chunk-G3PBNYDH.js";
79
79
  import {
80
80
  getOperation,
81
81
  resolveQueryNamespaceWritablePreflight
82
- } from "./chunk-R24RYSQX.js";
82
+ } from "./chunk-2JRLKDHV.js";
83
83
  import {
84
84
  handleWhoKnowsHttpQuery
85
85
  } from "./chunk-ELUG6NKQ.js";
@@ -3573,4 +3573,4 @@ export {
3573
3573
  resolveDefaultAdminConsolePublicDir,
3574
3574
  EngramAccessHttpServer
3575
3575
  };
3576
- //# sourceMappingURL=chunk-E22CQZ3H.js.map
3576
+ //# sourceMappingURL=chunk-EYIBIGIU.js.map
@@ -12,13 +12,13 @@ import {
12
12
  } from "./chunk-233S3MXC.js";
13
13
  import {
14
14
  externalWikiSearchOperation
15
- } from "./chunk-VPEMGBTI.js";
15
+ } from "./chunk-D3USVQIV.js";
16
16
  import {
17
17
  DECISION_SUBCOMMANDS,
18
18
  DELTA_SUBCOMMANDS,
19
19
  defineOperation,
20
20
  isCodegraphToolName
21
- } from "./chunk-R24RYSQX.js";
21
+ } from "./chunk-2JRLKDHV.js";
22
22
  import {
23
23
  CorrectionContractError
24
24
  } from "./chunk-ETSJD5IV.js";
@@ -1916,4 +1916,4 @@ export {
1916
1916
  codegraphIngestTracesOperation,
1917
1917
  REGISTERED_OPERATIONS
1918
1918
  };
1919
- //# sourceMappingURL=chunk-IBQ7LGUJ.js.map
1919
+ //# sourceMappingURL=chunk-FQU65RJX.js.map
@@ -3,7 +3,7 @@ import {
3
3
  getOperation,
4
4
  operationRequiresAuthorizedNamespace,
5
5
  operationUsesPrincipalNamespace
6
- } from "./chunk-R24RYSQX.js";
6
+ } from "./chunk-2JRLKDHV.js";
7
7
  import {
8
8
  assertOperationAuthorizationAllowed
9
9
  } from "./chunk-YO2JEX2Z.js";
@@ -60,4 +60,4 @@ export {
60
60
  authorizationProbeNamespaces,
61
61
  authorizationProbeRequiresPrincipalNamespace
62
62
  };
63
- //# sourceMappingURL=chunk-FP2AT4WL.js.map
63
+ //# sourceMappingURL=chunk-G3PBNYDH.js.map
@@ -234,7 +234,7 @@ import {
234
234
  runTimelinePublishCli,
235
235
  screenCandidateFact,
236
236
  summarizeVaultPublish
237
- } from "./chunk-SY4AFWUZ.js";
237
+ } from "./chunk-MAURCRPQ.js";
238
238
  import {
239
239
  RoutingRulesStore
240
240
  } from "./chunk-TBUEE7XF.js";
@@ -373,7 +373,7 @@ import {
373
373
  } from "./chunk-MI2OTWV5.js";
374
374
  import {
375
375
  MeetingsInputError
376
- } from "./chunk-E22CQZ3H.js";
376
+ } from "./chunk-EYIBIGIU.js";
377
377
  import {
378
378
  WearablesInputError,
379
379
  describeErrorForOperator
@@ -400,7 +400,7 @@ import {
400
400
  detectPassiveCorrections,
401
401
  renderSessionExperiencePreview,
402
402
  scoreSessionExperienceForPrompt
403
- } from "./chunk-R24RYSQX.js";
403
+ } from "./chunk-2JRLKDHV.js";
404
404
  import {
405
405
  importCapsule
406
406
  } from "./chunk-2R7OCBRR.js";
@@ -671,7 +671,8 @@ import {
671
671
  import {
672
672
  bufferTurnsEqual,
673
673
  describeError,
674
- groupTurnsByExtractionScope
674
+ groupTurnsByExtractionScope,
675
+ scopeProfilePlanIdentity
675
676
  } from "./chunk-4KLQI3L2.js";
676
677
  import {
677
678
  FallbackLlmClient,
@@ -16354,6 +16355,132 @@ function queueBufferedCaptureScopeGroups(queueBufferedExtraction, extractionTurn
16354
16355
  }
16355
16356
  }
16356
16357
 
16358
+ // src/orchestration/extraction-queue-snapshot-sharing.ts
16359
+ function automaticSnapshotSharingEligible(options) {
16360
+ return options.execution === void 0 && options.preemptable === true && options.failOnExtractionFailure !== true && options.forceExtractionAttempt !== true && options.preemptRunning !== true;
16361
+ }
16362
+ function turnRepresentationEquivalent(left, right) {
16363
+ return bufferTurnsEqual(left, right) && left.extractionContextOnly === right.extractionContextOnly && left.importProvenance === right.importProvenance && left.parts === right.parts && left.rawContent === right.rawContent && left.sourceFormat === right.sourceFormat;
16364
+ }
16365
+ function scopeClassKey(turn) {
16366
+ return [
16367
+ turn.writeNamespaceOverride ?? "",
16368
+ turn.principalOverride ?? "",
16369
+ scopeProfilePlanIdentity(turn.scopeProfileWritePlan),
16370
+ turn.acceptedCapture === true ? "accepted" : "",
16371
+ turn.codingContext?.projectId ?? "",
16372
+ turn.codingContext?.rootPath ?? "",
16373
+ turn.codingContext?.branch ?? "",
16374
+ turn.codingContext?.defaultBranch ?? ""
16375
+ ].join("\0");
16376
+ }
16377
+ function chainNodes(chain) {
16378
+ const nodes = [];
16379
+ for (let node = chain; node; node = node.base) nodes.push(node);
16380
+ return [...nodes].reverse();
16381
+ }
16382
+ function chainPrefixEquivalent(chain, turns) {
16383
+ let offset = 0;
16384
+ for (const node of chainNodes(chain)) {
16385
+ for (const chained of node.tail) {
16386
+ const incoming = turns[offset];
16387
+ if (incoming === void 0) return false;
16388
+ if (!turnRepresentationEquivalent(chained, incoming)) return false;
16389
+ offset += 1;
16390
+ }
16391
+ }
16392
+ return offset === chain.total;
16393
+ }
16394
+ function materializeChain(chain) {
16395
+ const out = [];
16396
+ for (const node of chainNodes(chain)) {
16397
+ for (const turn of node.tail) out.push(turn);
16398
+ }
16399
+ return out;
16400
+ }
16401
+ var ExtractionSnapshotSharingRegistry = class {
16402
+ buckets = /* @__PURE__ */ new Map();
16403
+ /**
16404
+ * Admit one automatic snapshot for `bufferKey`: chain it onto the newest
16405
+ * queued same-scope snapshot when that is a verified prefix-extension,
16406
+ * otherwise start a fresh chain. The caller's array is never mutated.
16407
+ */
16408
+ admit(bufferKey, turns) {
16409
+ const scopeClass = turns.length > 0 ? scopeClassKey(turns[0]) : "";
16410
+ const bucketKey = `${bufferKey}\0${scopeClass}`;
16411
+ const list = this.buckets.get(bucketKey);
16412
+ const base = list !== void 0 && list.length > 0 ? list[list.length - 1] : void 0;
16413
+ if (base && base.total === turns.length && chainPrefixEquivalent(base, turns)) {
16414
+ base.holders += 1;
16415
+ return base;
16416
+ }
16417
+ const node = base && base.total <= turns.length && chainPrefixEquivalent(base, turns) ? {
16418
+ key: bufferKey,
16419
+ scopeClass,
16420
+ base,
16421
+ baseLength: base.total,
16422
+ tail: turns.slice(base.total),
16423
+ total: turns.length,
16424
+ holders: 1
16425
+ } : {
16426
+ key: bufferKey,
16427
+ scopeClass,
16428
+ base: void 0,
16429
+ baseLength: 0,
16430
+ tail: [...turns],
16431
+ total: turns.length,
16432
+ holders: 1
16433
+ };
16434
+ if (list) list.push(node);
16435
+ else this.buckets.set(bucketKey, [node]);
16436
+ return node;
16437
+ }
16438
+ /** Release one holder of a node when its task exits (or on enqueue
16439
+ * refusal). CONTRACT: called EXACTLY ONCE per admit, by the task that
16440
+ * admitted it — the registry has no task identity, so a second call by the
16441
+ * same task would steal another holder's count. The only production caller
16442
+ * (queueBufferedExtraction) enforces this structurally: the closure-finally
16443
+ * and the enqueue-refusal branch are mutually exclusive. Defensively, a
16444
+ * release past zero is a no-op. */
16445
+ release(node) {
16446
+ if (node.holders <= 0) return;
16447
+ node.holders -= 1;
16448
+ if (node.holders > 0) return;
16449
+ const list = this.buckets.get(`${node.key}\0${node.scopeClass}`);
16450
+ if (!list) return;
16451
+ const index = list.indexOf(node);
16452
+ if (index >= 0) list.splice(index, 1);
16453
+ if (list.length === 0) this.buckets.delete(`${node.key}\0${node.scopeClass}`);
16454
+ }
16455
+ /** Proof seam: what the queue retains right now. */
16456
+ stats() {
16457
+ const visited = /* @__PURE__ */ new Set();
16458
+ let queuedNodes = 0;
16459
+ let queuedTailRefs = 0;
16460
+ let queuedReachableDepth = 0;
16461
+ let queuedHolders = 0;
16462
+ let unsharedEquivalentRefs = 0;
16463
+ let queuedTotalRefs = 0;
16464
+ for (const list of this.buckets.values()) {
16465
+ for (const node of list) {
16466
+ queuedNodes += 1;
16467
+ unsharedEquivalentRefs += node.total * node.holders;
16468
+ queuedTotalRefs += node.total;
16469
+ let depth = 0;
16470
+ for (let walk = node; walk; walk = walk.base) {
16471
+ depth += 1;
16472
+ if (visited.has(walk)) continue;
16473
+ visited.add(walk);
16474
+ queuedTailRefs += walk.tail.length;
16475
+ queuedHolders += walk.holders;
16476
+ }
16477
+ if (depth > queuedReachableDepth) queuedReachableDepth = depth;
16478
+ }
16479
+ }
16480
+ return { queuedNodes, queuedTotalRefs, queuedTailRefs, queuedReachableDepth, queuedHolders, unsharedEquivalentRefs };
16481
+ }
16482
+ };
16483
+
16357
16484
  // src/orchestration/turn-ingestion.ts
16358
16485
  var ReplayAdmissionRefusedError = class extends Error {
16359
16486
  constructor(message) {
@@ -16367,13 +16494,15 @@ function isFlushPlanRecoveryTurn(turn) {
16367
16494
  return typeof provenance?.sourceId === "string" && /:flush-plan(:\d+\/\d+)?$/.test(provenance.sourceId);
16368
16495
  }
16369
16496
  var TurnIngestionCoordinator = class {
16370
- // chunked trigger-drain (extraction-drain.ts)
16371
16497
  constructor(deps) {
16372
16498
  this.deps = deps;
16373
16499
  this.drain = new ExtractionDrain(deps);
16374
16500
  }
16375
16501
  deps;
16376
16502
  drain;
16503
+ // chunked trigger-drain (extraction-drain.ts)
16504
+ /** Queued automatic-snapshot chains: bounded-queue retention via structural sharing. */
16505
+ snapshotSharing = new ExtractionSnapshotSharingRegistry();
16377
16506
  async processTurn(role, content, sessionKey, options = {}) {
16378
16507
  if (role !== "user" && role !== "assistant") {
16379
16508
  log.debug(`processTurn: ignoring unsupported role=${String(role)}`);
@@ -16855,6 +16984,8 @@ var TurnIngestionCoordinator = class {
16855
16984
  }
16856
16985
  if (settled) return;
16857
16986
  const preemptable = options.preemptable === true && options.preemptRunning !== true;
16987
+ const sharingNode = automaticSnapshotSharingEligible(options) && turnsToExtract.length > 0 ? this.snapshotSharing.admit(bufferKey, turnsToExtract) : void 0;
16988
+ const queuedTurnsSource = sharingNode ? { chain: sharingNode } : { direct: turnsToExtract };
16858
16989
  const accepted = this.deps.extractionQueueCoordinator.enqueue(async (preemptHandle) => {
16859
16990
  try {
16860
16991
  await this.deps.extractionQueueCoordinator.runPreemptable(preemptHandle, preemptable, options.abortSignal, async (abortSignal) => {
@@ -16866,7 +16997,7 @@ var TurnIngestionCoordinator = class {
16866
16997
  clearQueueWaitTimer();
16867
16998
  if (options.execution === void 0 && skipClaimedSession(this.deps.buffer, bufferKey, (result) => settleTask(void 0, result))) return;
16868
16999
  try {
16869
- let effectiveTurns = turnsToExtract;
17000
+ let effectiveTurns = "chain" in queuedTurnsSource ? materializeChain(queuedTurnsSource.chain) : queuedTurnsSource.direct;
16870
17001
  let effectiveScopePlan = options.scopeProfileWritePlan;
16871
17002
  const executionBuffer = options.execution?.buffer;
16872
17003
  if (effectiveTurns.some((turn) => turn.acceptedCapture === true)) {
@@ -16983,10 +17114,12 @@ var TurnIngestionCoordinator = class {
16983
17114
  }
16984
17115
  });
16985
17116
  } finally {
17117
+ if (sharingNode) this.snapshotSharing.release(sharingNode);
16986
17118
  options.onTaskExit?.();
16987
17119
  }
16988
17120
  }, { front: options.preemptRunning === true, key: bufferKey });
16989
17121
  if (!accepted) {
17122
+ if (sharingNode) this.snapshotSharing.release(sharingNode);
16990
17123
  settleTask(new Error("extraction queue is stopped"));
16991
17124
  options.onTaskExit?.();
16992
17125
  return;
@@ -32085,4 +32218,4 @@ export {
32085
32218
  qmdStartupCollectionChecksWithTimeout,
32086
32219
  Orchestrator
32087
32220
  };
32088
- //# sourceMappingURL=chunk-HR6NTVYZ.js.map
32221
+ //# sourceMappingURL=chunk-I4W2ADBP.js.map