@remnic/core 10.0.8 → 10.0.10

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 (188) hide show
  1. package/dist/access-admin-ops-surface.js +14 -14
  2. package/dist/access-authorization-probe.js +15 -15
  3. package/dist/access-boundary.js +14 -14
  4. package/dist/access-cli.js +52 -52
  5. package/dist/access-extraction-force-flush.js +14 -14
  6. package/dist/access-http-briefing.js +15 -15
  7. package/dist/access-http-query.js +16 -16
  8. package/dist/access-http.js +30 -30
  9. package/dist/access-identity-continuity-surface.js +14 -14
  10. package/dist/access-lcm-surface.js +14 -14
  11. package/dist/access-mcp.js +23 -23
  12. package/dist/access-namespace-preflight.js +14 -14
  13. package/dist/access-observe-write-surface.js +14 -14
  14. package/dist/access-operations-batch.js +15 -15
  15. package/dist/access-operations.js +22 -22
  16. package/dist/access-recall-concurrency.js +14 -14
  17. package/dist/access-recall-response.js +14 -14
  18. package/dist/access-recall-surface.js +14 -14
  19. package/dist/access-service.js +14 -14
  20. package/dist/access-surface-catalog.js +16 -16
  21. package/dist/active-recall.js +1 -1
  22. package/dist/briefing.js +2 -2
  23. package/dist/causal-consolidation.js +3 -3
  24. package/dist/{chunk-ZQYAE2C5.js → chunk-2U4BM3TW.js} +2 -2
  25. package/dist/{chunk-QFIPSKPC.js → chunk-3ZCRHW7U.js} +2 -2
  26. package/dist/{chunk-76KHEHT2.js → chunk-4N2MFNTG.js} +2 -2
  27. package/dist/{chunk-FBVLTTVV.js → chunk-4TP3MJ3D.js} +5 -5
  28. package/dist/{chunk-JSIQSZXI.js → chunk-56GJLXBA.js} +3 -3
  29. package/dist/{chunk-MVRIW6MI.js → chunk-6OAXWYE3.js} +2 -2
  30. package/dist/{chunk-KDYQYMJZ.js → chunk-7SUWY37K.js} +2 -2
  31. package/dist/{chunk-KRIEQCKE.js → chunk-A2L3P2IY.js} +2 -2
  32. package/dist/{chunk-AMFCRZYB.js → chunk-AV2OQF2O.js} +2 -2
  33. package/dist/{chunk-WJLGUY27.js → chunk-BD5QEP3T.js} +2 -1
  34. package/dist/{chunk-C3WJNRGR.js → chunk-BH44JOLA.js} +2 -2
  35. package/dist/{chunk-NYVKLB2I.js → chunk-BX4WDBTE.js} +11 -11
  36. package/dist/{chunk-V4WSQYO6.js → chunk-CAUNCRLQ.js} +21 -21
  37. package/dist/{chunk-RH6QEGCT.js → chunk-D5UPBXZM.js} +2 -2
  38. package/dist/{chunk-77HNHT6S.js → chunk-E57LYSHI.js} +114 -4
  39. package/dist/chunk-E57LYSHI.js.map +1 -0
  40. package/dist/{chunk-IOM5QSNR.js → chunk-EKKAHJ4B.js} +2 -2
  41. package/dist/{chunk-JK3DYMOC.js → chunk-GKOML66M.js} +2 -2
  42. package/dist/{chunk-QW7G7PWN.js → chunk-I2M4ZVDD.js} +2 -2
  43. package/dist/{chunk-JTUKDLAD.js → chunk-J6FFBORM.js} +2 -2
  44. package/dist/{chunk-MAJ2OKE4.js → chunk-J7MDPTX7.js} +6 -6
  45. package/dist/{chunk-5FNVK7MW.js → chunk-JVNEXW6X.js} +2 -2
  46. package/dist/{chunk-IJWEXCWF.js → chunk-JXWTPOMJ.js} +2 -2
  47. package/dist/{chunk-3R6SLDTH.js → chunk-KJOGIRMF.js} +2 -2
  48. package/dist/{chunk-GDI64ITR.js → chunk-KWVI52ER.js} +2 -2
  49. package/dist/{chunk-AV46CT77.js → chunk-KX36OCGK.js} +2 -2
  50. package/dist/{chunk-2K7D6EFT.js → chunk-L3G5CGL5.js} +674 -126
  51. package/dist/chunk-L3G5CGL5.js.map +1 -0
  52. package/dist/{chunk-CSUAHUOH.js → chunk-MK552I5J.js} +2 -2
  53. package/dist/{chunk-BPY4RRTF.js → chunk-MO25AN7J.js} +10 -10
  54. package/dist/{chunk-NAHUBSUF.js → chunk-N75Q5ZSP.js} +2 -2
  55. package/dist/{chunk-HZVYDWUP.js → chunk-NQMG2W5L.js} +2 -2
  56. package/dist/{chunk-L3Z4NXDO.js → chunk-O52WWLKU.js} +3 -3
  57. package/dist/{chunk-OC6JYPZX.js → chunk-O5MW6CQL.js} +2 -2
  58. package/dist/{chunk-6PHB45IU.js → chunk-O6YDGTH4.js} +2 -2
  59. package/dist/{chunk-E5274WUC.js → chunk-OAIWPB2I.js} +19 -2
  60. package/dist/chunk-OAIWPB2I.js.map +1 -0
  61. package/dist/{chunk-5NOPZYNI.js → chunk-OFDIGTC2.js} +7 -7
  62. package/dist/{chunk-5EOV7ANU.js → chunk-OGWEWJRH.js} +2 -2
  63. package/dist/{chunk-3ENX2RB4.js → chunk-OM3RWZQK.js} +2 -2
  64. package/dist/{chunk-GSAZBZMA.js → chunk-PDVWGGX4.js} +2 -2
  65. package/dist/{chunk-N44GZ73R.js → chunk-SOJ3IQD3.js} +3 -3
  66. package/dist/{chunk-4OKPH6FG.js → chunk-SQA2MM2F.js} +2 -2
  67. package/dist/{chunk-7O252IE6.js → chunk-SSAXGPXY.js} +2 -2
  68. package/dist/{chunk-R2AWYR4Q.js → chunk-SVDU4OHO.js} +2 -2
  69. package/dist/{chunk-WPFSZZ35.js → chunk-UOA2VQ7C.js} +2 -2
  70. package/dist/{chunk-S4GUMZRB.js → chunk-VA2HNBGQ.js} +17 -17
  71. package/dist/{chunk-YAF3NRNC.js → chunk-VBJD4RSJ.js} +2 -2
  72. package/dist/{chunk-A6G7K273.js → chunk-VDXTXVFZ.js} +3 -3
  73. package/dist/{chunk-5Q4NQNW7.js → chunk-VJGDQA3D.js} +2 -2
  74. package/dist/{chunk-QN77HA6P.js → chunk-WCTL3PVM.js} +2 -2
  75. package/dist/{chunk-NXLQQ6WI.js → chunk-WH4QXVKU.js} +2 -2
  76. package/dist/{chunk-3VTNNO2B.js → chunk-WXFKXCOQ.js} +3 -3
  77. package/dist/{chunk-K3DZ3G5I.js → chunk-XQIHFXYP.js} +2 -2
  78. package/dist/{chunk-VSHRMIJH.js → chunk-YYNHJF3N.js} +2 -2
  79. package/dist/cli.js +40 -40
  80. package/dist/coding/export-okf-codegraph.js +1 -1
  81. package/dist/compounding/engine.d.ts +1 -5
  82. package/dist/compounding/engine.d.ts.map +1 -1
  83. package/dist/compounding/engine.js +5 -3
  84. package/dist/compounding/iso-week.d.ts +18 -0
  85. package/dist/compounding/iso-week.d.ts.map +1 -0
  86. package/dist/compounding/weekly-evidence.d.ts +123 -0
  87. package/dist/compounding/weekly-evidence.d.ts.map +1 -0
  88. package/dist/config.js +1 -1
  89. package/dist/connectors/codex-materialize-runner.js +2 -2
  90. package/dist/connectors/index.js +2 -2
  91. package/dist/convergence-refresh.js +4 -4
  92. package/dist/corpus-watermark.js +4 -4
  93. package/dist/entity-retrieval.js +2 -2
  94. package/dist/external-wiki-access.js +15 -15
  95. package/dist/extraction.js +2 -2
  96. package/dist/harmonic-retrieval.js +2 -2
  97. package/dist/index.js +52 -52
  98. package/dist/location/index.js +4 -4
  99. package/dist/maintenance/memory-governance.js +2 -2
  100. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +2 -2
  101. package/dist/maintenance/rebuild-memory-projection-runner.js +4 -4
  102. package/dist/maintenance/rebuild-memory-projection.js +3 -3
  103. package/dist/memory-browse-operations.js +15 -15
  104. package/dist/memory-browse.js +2 -2
  105. package/dist/namespaces/migrate.js +3 -3
  106. package/dist/namespaces/storage.js +2 -2
  107. package/dist/operator-doctor-corpus.js +5 -5
  108. package/dist/operator-toolkit.js +10 -10
  109. package/dist/orchestration/generic-recall-paths.d.ts.map +1 -1
  110. package/dist/orchestration/maintenance.js +11 -11
  111. package/dist/orchestrator.js +52 -52
  112. package/dist/recall-navigation-operations.js +15 -15
  113. package/dist/recall-navigation.js +14 -14
  114. package/dist/recall-state-view-admission.js +2 -2
  115. package/dist/recall-why-service.js +2 -2
  116. package/dist/resume-bundles.js +1 -1
  117. package/dist/semantic-consolidation.js +3 -3
  118. package/dist/semantic-rule-promotion.js +2 -2
  119. package/dist/semantic-rule-verifier.js +2 -2
  120. package/dist/shared-context/manager.d.ts +18 -0
  121. package/dist/shared-context/manager.d.ts.map +1 -1
  122. package/dist/shared-context/manager.js +7 -1
  123. package/dist/source-agent-qualifier.js +2 -2
  124. package/dist/standup/build.js +2 -2
  125. package/dist/storage.js +1 -1
  126. package/dist/support-passport/index.js +17 -17
  127. package/dist/transfer/export-okf.js +2 -2
  128. package/dist/verified-recall.js +2 -2
  129. package/dist/who-knows-cli.js +3 -3
  130. package/dist/who-knows.js +2 -2
  131. package/package.json +2 -2
  132. package/src/compounding/engine.ts +135 -130
  133. package/src/compounding/iso-week.ts +60 -0
  134. package/src/compounding/weekly-evidence.ts +698 -0
  135. package/src/orchestration/generic-recall-paths.ts +27 -1
  136. package/src/shared-context/manager.ts +132 -3
  137. package/dist/chunk-2K7D6EFT.js.map +0 -1
  138. package/dist/chunk-77HNHT6S.js.map +0 -1
  139. package/dist/chunk-E5274WUC.js.map +0 -1
  140. /package/dist/{chunk-ZQYAE2C5.js.map → chunk-2U4BM3TW.js.map} +0 -0
  141. /package/dist/{chunk-QFIPSKPC.js.map → chunk-3ZCRHW7U.js.map} +0 -0
  142. /package/dist/{chunk-76KHEHT2.js.map → chunk-4N2MFNTG.js.map} +0 -0
  143. /package/dist/{chunk-FBVLTTVV.js.map → chunk-4TP3MJ3D.js.map} +0 -0
  144. /package/dist/{chunk-JSIQSZXI.js.map → chunk-56GJLXBA.js.map} +0 -0
  145. /package/dist/{chunk-MVRIW6MI.js.map → chunk-6OAXWYE3.js.map} +0 -0
  146. /package/dist/{chunk-KDYQYMJZ.js.map → chunk-7SUWY37K.js.map} +0 -0
  147. /package/dist/{chunk-KRIEQCKE.js.map → chunk-A2L3P2IY.js.map} +0 -0
  148. /package/dist/{chunk-AMFCRZYB.js.map → chunk-AV2OQF2O.js.map} +0 -0
  149. /package/dist/{chunk-WJLGUY27.js.map → chunk-BD5QEP3T.js.map} +0 -0
  150. /package/dist/{chunk-C3WJNRGR.js.map → chunk-BH44JOLA.js.map} +0 -0
  151. /package/dist/{chunk-NYVKLB2I.js.map → chunk-BX4WDBTE.js.map} +0 -0
  152. /package/dist/{chunk-V4WSQYO6.js.map → chunk-CAUNCRLQ.js.map} +0 -0
  153. /package/dist/{chunk-RH6QEGCT.js.map → chunk-D5UPBXZM.js.map} +0 -0
  154. /package/dist/{chunk-IOM5QSNR.js.map → chunk-EKKAHJ4B.js.map} +0 -0
  155. /package/dist/{chunk-JK3DYMOC.js.map → chunk-GKOML66M.js.map} +0 -0
  156. /package/dist/{chunk-QW7G7PWN.js.map → chunk-I2M4ZVDD.js.map} +0 -0
  157. /package/dist/{chunk-JTUKDLAD.js.map → chunk-J6FFBORM.js.map} +0 -0
  158. /package/dist/{chunk-MAJ2OKE4.js.map → chunk-J7MDPTX7.js.map} +0 -0
  159. /package/dist/{chunk-5FNVK7MW.js.map → chunk-JVNEXW6X.js.map} +0 -0
  160. /package/dist/{chunk-IJWEXCWF.js.map → chunk-JXWTPOMJ.js.map} +0 -0
  161. /package/dist/{chunk-3R6SLDTH.js.map → chunk-KJOGIRMF.js.map} +0 -0
  162. /package/dist/{chunk-GDI64ITR.js.map → chunk-KWVI52ER.js.map} +0 -0
  163. /package/dist/{chunk-AV46CT77.js.map → chunk-KX36OCGK.js.map} +0 -0
  164. /package/dist/{chunk-CSUAHUOH.js.map → chunk-MK552I5J.js.map} +0 -0
  165. /package/dist/{chunk-BPY4RRTF.js.map → chunk-MO25AN7J.js.map} +0 -0
  166. /package/dist/{chunk-NAHUBSUF.js.map → chunk-N75Q5ZSP.js.map} +0 -0
  167. /package/dist/{chunk-HZVYDWUP.js.map → chunk-NQMG2W5L.js.map} +0 -0
  168. /package/dist/{chunk-L3Z4NXDO.js.map → chunk-O52WWLKU.js.map} +0 -0
  169. /package/dist/{chunk-OC6JYPZX.js.map → chunk-O5MW6CQL.js.map} +0 -0
  170. /package/dist/{chunk-6PHB45IU.js.map → chunk-O6YDGTH4.js.map} +0 -0
  171. /package/dist/{chunk-5NOPZYNI.js.map → chunk-OFDIGTC2.js.map} +0 -0
  172. /package/dist/{chunk-5EOV7ANU.js.map → chunk-OGWEWJRH.js.map} +0 -0
  173. /package/dist/{chunk-3ENX2RB4.js.map → chunk-OM3RWZQK.js.map} +0 -0
  174. /package/dist/{chunk-GSAZBZMA.js.map → chunk-PDVWGGX4.js.map} +0 -0
  175. /package/dist/{chunk-N44GZ73R.js.map → chunk-SOJ3IQD3.js.map} +0 -0
  176. /package/dist/{chunk-4OKPH6FG.js.map → chunk-SQA2MM2F.js.map} +0 -0
  177. /package/dist/{chunk-7O252IE6.js.map → chunk-SSAXGPXY.js.map} +0 -0
  178. /package/dist/{chunk-R2AWYR4Q.js.map → chunk-SVDU4OHO.js.map} +0 -0
  179. /package/dist/{chunk-WPFSZZ35.js.map → chunk-UOA2VQ7C.js.map} +0 -0
  180. /package/dist/{chunk-S4GUMZRB.js.map → chunk-VA2HNBGQ.js.map} +0 -0
  181. /package/dist/{chunk-YAF3NRNC.js.map → chunk-VBJD4RSJ.js.map} +0 -0
  182. /package/dist/{chunk-A6G7K273.js.map → chunk-VDXTXVFZ.js.map} +0 -0
  183. /package/dist/{chunk-5Q4NQNW7.js.map → chunk-VJGDQA3D.js.map} +0 -0
  184. /package/dist/{chunk-QN77HA6P.js.map → chunk-WCTL3PVM.js.map} +0 -0
  185. /package/dist/{chunk-NXLQQ6WI.js.map → chunk-WH4QXVKU.js.map} +0 -0
  186. /package/dist/{chunk-3VTNNO2B.js.map → chunk-WXFKXCOQ.js.map} +0 -0
  187. /package/dist/{chunk-K3DZ3G5I.js.map → chunk-XQIHFXYP.js.map} +0 -0
  188. /package/dist/{chunk-VSHRMIJH.js.map → chunk-YYNHJF3N.js.map} +0 -0
@@ -7,6 +7,9 @@ import {
7
7
  resolveReadAuthority,
8
8
  resolveWriteOrigin
9
9
  } from "./chunk-OGXXGHW6.js";
10
+ import {
11
+ pathIsInside
12
+ } from "./chunk-C7HJ3NEI.js";
10
13
  import {
11
14
  resolveConversationContextCapabilities
12
15
  } from "./chunk-2EMROIXS.js";
@@ -16,13 +19,16 @@ import {
16
19
  import {
17
20
  throwIfAborted
18
21
  } from "./chunk-BTTPKDIL.js";
22
+ import {
23
+ isErrnoCode
24
+ } from "./chunk-KNA3BXXL.js";
19
25
  import {
20
26
  log
21
27
  } from "./chunk-3WCASNQZ.js";
22
28
 
23
29
  // src/shared-context/manager.ts
24
30
  import { randomUUID } from "crypto";
25
- import { mkdir, readFile, readdir, appendFile, writeFile, stat, rename, rm } from "fs/promises";
31
+ import { mkdir, readFile, readdir, appendFile, writeFile, stat, lstat, realpath, rename, rm } from "fs/promises";
26
32
  import path from "path";
27
33
  import { z } from "zod";
28
34
 
@@ -440,6 +446,105 @@ async function writeFileAtomic(filePath, content) {
440
446
  function resolveSharedContextDir(config) {
441
447
  return typeof config.sharedContextDir === "string" && config.sharedContextDir.length > 0 ? expandTildePath(config.sharedContextDir) : path.join(expandTildePath(config.workspaceDir), "shared-context");
442
448
  }
449
+ function resolveFeedbackInboxPath(config) {
450
+ if (typeof config.sharedContextDir === "string" && config.sharedContextDir.length > 0) {
451
+ return path.join(resolveSharedContextDir(config), "feedback", "inbox.jsonl");
452
+ }
453
+ return path.join(expandTildePath(config.memoryDir), "shared-context", "feedback", "inbox.jsonl");
454
+ }
455
+ async function migrateLegacyFeedbackInbox(config) {
456
+ if (typeof config.sharedContextDir === "string" && config.sharedContextDir.length > 0) return;
457
+ const nextPath = resolveFeedbackInboxPath(config);
458
+ const legacyPath = path.join(resolveSharedContextDir(config), "feedback", "inbox.jsonl");
459
+ if (path.resolve(nextPath) === path.resolve(legacyPath)) return;
460
+ if (!await legacyInboxCanMigrate(legacyPath)) return;
461
+ try {
462
+ const nextProbe = await lstat(nextPath);
463
+ if (nextProbe.isSymbolicLink() || !nextProbe.isFile() || nextProbe.size > 0) return;
464
+ } catch (err) {
465
+ if (!isErrnoCode(err, "ENOENT")) throw err;
466
+ }
467
+ await mkdir(path.dirname(nextPath), { recursive: true });
468
+ await withFeedbackMigrateLock(`${nextPath}.migrate.lock`, async () => {
469
+ let nextStat;
470
+ try {
471
+ nextStat = await lstat(nextPath);
472
+ } catch (err) {
473
+ if (!isErrnoCode(err, "ENOENT")) throw err;
474
+ }
475
+ if (nextStat && (nextStat.isSymbolicLink() || !nextStat.isFile() || nextStat.size > 0)) return;
476
+ if (!await legacyInboxCanMigrate(legacyPath)) return;
477
+ const workspaceReal = await realpath(expandTildePath(config.workspaceDir));
478
+ const legacyReal = await realpath(legacyPath);
479
+ if (!pathIsInside(workspaceReal, legacyReal)) return;
480
+ const memoryDir = expandTildePath(config.memoryDir);
481
+ const memoryReal = await realpath(memoryDir);
482
+ const nextParentReal = await realpath(path.dirname(nextPath));
483
+ if (!pathIsInside(memoryReal, nextParentReal)) return;
484
+ if (nextStat) {
485
+ const nextReal = await realpath(nextPath);
486
+ if (!pathIsInside(memoryReal, nextReal)) return;
487
+ }
488
+ const body = await readFile(legacyReal);
489
+ const tempPath = path.join(
490
+ path.dirname(nextPath),
491
+ `.${path.basename(nextPath)}.${process.pid}.${randomUUID()}.migrate.tmp`
492
+ );
493
+ await writeFile(tempPath, body, { flag: "wx" });
494
+ try {
495
+ let current;
496
+ try {
497
+ current = await lstat(nextPath);
498
+ } catch (err) {
499
+ if (!isErrnoCode(err, "ENOENT")) throw err;
500
+ }
501
+ if (current && (current.isSymbolicLink() || !current.isFile() || current.size > 0)) return;
502
+ await rename(tempPath, nextPath);
503
+ } finally {
504
+ await rm(tempPath, { force: true }).catch(() => void 0);
505
+ }
506
+ });
507
+ }
508
+ async function legacyInboxCanMigrate(legacyPath) {
509
+ let legacyStat;
510
+ try {
511
+ legacyStat = await lstat(legacyPath);
512
+ } catch (err) {
513
+ if (isErrnoCode(err, "ENOENT")) return false;
514
+ throw err;
515
+ }
516
+ return !legacyStat.isSymbolicLink() && legacyStat.isFile() && legacyStat.size > 0;
517
+ }
518
+ async function withFeedbackMigrateLock(lockPath, body) {
519
+ const deadline = Date.now() + 2e3;
520
+ while (Date.now() < deadline) {
521
+ try {
522
+ await writeFile(lockPath, "", { flag: "wx" });
523
+ } catch (err) {
524
+ if (!isErrnoCode(err, "EEXIST")) throw err;
525
+ let lockStat;
526
+ try {
527
+ lockStat = await lstat(lockPath);
528
+ } catch (statErr) {
529
+ if (isErrnoCode(statErr, "ENOENT")) continue;
530
+ throw statErr;
531
+ }
532
+ if (!lockStat.isSymbolicLink() && lockStat.isFile() && Date.now() - lockStat.mtimeMs > 3e4) {
533
+ await rm(lockPath, { force: true });
534
+ continue;
535
+ }
536
+ await new Promise((resolve) => setTimeout(resolve, 20));
537
+ continue;
538
+ }
539
+ try {
540
+ await body();
541
+ } finally {
542
+ await rm(lockPath, { force: true });
543
+ }
544
+ return;
545
+ }
546
+ throw new Error("feedback inbox migration did not acquire its lock before the wait elapsed");
547
+ }
443
548
  var SharedContextManager = class {
444
549
  constructor(config) {
445
550
  this.config = config;
@@ -449,8 +554,8 @@ var SharedContextManager = class {
449
554
  this.prioritiesInboxPath = path.join(base, "priorities.inbox.md");
450
555
  this.outputsDir = path.join(base, "agent-outputs");
451
556
  this.roundtableDir = path.join(base, "roundtable");
452
- this.feedbackDir = path.join(base, "feedback");
453
- this.feedbackInboxPath = path.join(this.feedbackDir, "inbox.jsonl");
557
+ this.feedbackInboxPath = resolveFeedbackInboxPath(config);
558
+ this.feedbackDir = path.dirname(this.feedbackInboxPath);
454
559
  this.crossSignalsDir = path.join(base, "cross-signals");
455
560
  this.allowBindingAuthority = config.sharedContextAllowBindingAuthority === true;
456
561
  }
@@ -499,6 +604,7 @@ var SharedContextManager = class {
499
604
  ""
500
605
  ].join("\n")
501
606
  );
607
+ await migrateLegacyFeedbackInbox(this.config);
502
608
  await this.ensureFile(this.feedbackInboxPath, "");
503
609
  }
504
610
  async ensureFile(fp, content) {
@@ -597,6 +703,7 @@ var SharedContextManager = class {
597
703
  }
598
704
  async appendFeedback(entry) {
599
705
  const parsed = SharedFeedbackEntrySchema.parse(entry);
706
+ await migrateLegacyFeedbackInbox(this.config);
600
707
  await appendFile(this.feedbackInboxPath, JSON.stringify(parsed) + "\n", "utf-8");
601
708
  }
602
709
  async appendPrioritiesInbox(opts) {
@@ -677,6 +784,7 @@ var SharedContextManager = class {
677
784
  ).filter((item) => item.circulating === true).map((item) => item.id).sort();
678
785
  const feedback = [];
679
786
  try {
787
+ await migrateLegacyFeedbackInbox(this.config);
680
788
  const raw = await readFile(this.feedbackInboxPath, "utf-8");
681
789
  for (const line of raw.split("\n")) {
682
790
  if (!line.trim()) continue;
@@ -913,6 +1021,8 @@ ${body}`),
913
1021
  export {
914
1022
  SharedFeedbackEntrySchema,
915
1023
  resolveSharedContextDir,
1024
+ resolveFeedbackInboxPath,
1025
+ migrateLegacyFeedbackInbox,
916
1026
  SharedContextManager
917
1027
  };
918
- //# sourceMappingURL=chunk-77HNHT6S.js.map
1028
+ //# sourceMappingURL=chunk-E57LYSHI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shared-context/manager.ts","../src/shared-context/contradictions.ts","../src/shared-context/curation-lint.ts","../src/shared-context/provenance.ts","../src/shared-context/staleness.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { Stats } from \"node:fs\";\nimport { mkdir, readFile, readdir, appendFile, writeFile, stat, lstat, realpath, rename, rm } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { z } from \"zod\";\nimport { log } from \"../logger.js\";\nimport type { PluginConfig } from \"../types.js\";\nimport { isErrnoCode } from \"../utils/errno.js\";\nimport { expandTildePath } from \"../utils/path.js\";\nimport { pathIsInside } from \"../utils/path-containment.js\";\nimport { resolveConversationContextCapabilities } from \"../capabilities.js\";\nimport { throwIfAborted } from \"../abort-error.js\";\nimport {\n composeWriteEnvelope,\n envelopeFromScalars,\n envelopeToFrontmatterLines,\n resolveReadAuthority,\n resolveWriteOrigin,\n} from \"./envelope-io.js\";\nimport type { SharedAuthority, SharedEnvelope } from \"./governance.js\";\nimport { detectContradictionPair } from \"./contradictions.js\";\nimport { lintCuratedClaims } from \"./curation-lint.js\";\nimport { stampProvenance } from \"./provenance.js\";\nimport { filterLiveEnvelopes, markSupersededCirculation } from \"./staleness.js\";\n\nexport const SharedFeedbackEntrySchema = z.object({\n agent: z.string().min(1),\n decision: z.enum([\"approved\", \"approved_with_feedback\", \"rejected\"]),\n reason: z.string().min(1),\n date: z.string().min(8), // ISO-ish; keep loose\n learning: z.string().optional(),\n outcome: z.string().optional(),\n severity: z.enum([\"low\", \"medium\", \"high\"]).optional(),\n confidence: z.number().min(0).max(1).optional(),\n workflow: z.string().min(1).optional(),\n tags: z.array(z.string().min(1)).optional(),\n evidenceWindowStart: z.string().min(8).optional(),\n evidenceWindowEnd: z.string().min(8).optional(),\n refs: z.array(z.string()).optional(),\n});\n\nexport type SharedFeedbackEntry = z.infer<typeof SharedFeedbackEntrySchema>;\n\nfunction safeSlug(s: string): string {\n let slug = s.toLowerCase().replace(/[^a-z0-9]+/g, \"-\");\n // Trim leading/trailing dashes without ReDoS-prone anchored quantifiers\n let start = 0;\n while (start < slug.length && slug[start] === \"-\") start++;\n let end = slug.length;\n while (end > start && slug[end - 1] === \"-\") end--;\n return slug.slice(start, end).slice(0, 80) || \"output\";\n}\n\nfunction safePathSegment(s: string, label: string): string {\n if (s.length === 0) throw new Error(`${label} must not be empty`);\n if (/[\\r\\n]/.test(s)) throw new Error(`${label} must not contain line breaks`);\n const encoded = encodeURIComponent(s);\n if (encoded === \".\" || encoded === \"..\") {\n return encoded.replace(/\\./g, \"%2E\");\n }\n return encoded;\n}\n\nfunction safeDecodePathSegment(s: string): string {\n try {\n return decodeURIComponent(s);\n } catch {\n return s;\n }\n}\n\nfunction normalizeFrontmatterScalar(value: string): string {\n if (value.length >= 2 && value.startsWith('\"') && value.endsWith('\"')) {\n try {\n const parsed = JSON.parse(value);\n if (typeof parsed === \"string\") return parsed;\n } catch {\n // Fall through to the legacy partial unescape below.\n }\n return value.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, \"\\\\\");\n }\n if (value.length >= 2 && value.startsWith(\"'\") && value.endsWith(\"'\")) {\n return value.slice(1, -1).replace(/''/g, \"'\");\n }\n return value;\n}\n\nfunction formatFrontmatterScalar(value: string): string {\n return JSON.stringify(value);\n}\n\nfunction readFrontmatterScalar(raw: string, key: string): string | null {\n const frontmatter = raw.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---(?:\\r?\\n|$)/)?.[1];\n if (!frontmatter) return null;\n for (const line of frontmatter.split(/\\r?\\n/)) {\n if (!line.startsWith(`${key}:`)) continue;\n const value = line.slice(key.length + 1).trim();\n return value ? normalizeFrontmatterScalar(value) : null;\n }\n return null;\n}\n\nfunction ymd(d: Date): string {\n return d.toISOString().slice(0, 10);\n}\n\nfunction safeDateSegment(date: string): string {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(date)) {\n throw new Error(`Invalid shared-context date: ${JSON.stringify(date)}; expected YYYY-MM-DD`);\n }\n const parsed = new Date(`${date}T00:00:00.000Z`);\n if (!Number.isFinite(parsed.getTime()) || parsed.toISOString().slice(0, 10) !== date) {\n throw new Error(`Invalid shared-context date: ${JSON.stringify(date)}; expected a real calendar date`);\n }\n return date;\n}\n\nconst CROSS_SIGNAL_STOPWORDS = new Set([\n \"a\",\n \"an\",\n \"and\",\n \"are\",\n \"as\",\n \"at\",\n \"be\",\n \"by\",\n \"for\",\n \"from\",\n \"has\",\n \"have\",\n \"in\",\n \"is\",\n \"it\",\n \"of\",\n \"on\",\n \"or\",\n \"that\",\n \"the\",\n \"this\",\n \"to\",\n \"was\",\n \"were\",\n \"with\",\n \"agent\",\n \"output\",\n \"today\",\n \"daily\",\n \"notes\",\n \"note\",\n \"summary\",\n]);\n\nfunction extractTopicTokens(text: string, maxTokens: number = 12): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n const tokens = text\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, \" \")\n .split(/\\s+/)\n .map((token) => token.trim())\n .filter((token) => token.length >= 4)\n .filter((token) => !CROSS_SIGNAL_STOPWORDS.has(token));\n\n for (const token of tokens) {\n if (seen.has(token)) continue;\n seen.add(token);\n out.push(token);\n if (out.length >= maxTokens) break;\n }\n return out;\n}\n\nfunction stripYamlFrontmatter(text: string): string {\n if (!text.startsWith(\"---\\n\")) return text;\n const closing = text.indexOf(\"\\n---\\n\", 4);\n if (closing === -1) return text;\n return text.slice(closing + 5);\n}\n\nfunction semanticRoot(token: string): string {\n let root = token.toLowerCase();\n if (root.endsWith(\"izations\") && root.length > 9) {\n root = `${root.slice(0, -8)}ize`;\n }\n else if (root.endsWith(\"ization\") && root.length > 8) {\n root = `${root.slice(0, -7)}ize`;\n } else if (root.endsWith(\"isations\") && root.length > 9) {\n root = `${root.slice(0, -8)}ise`;\n } else if (root.endsWith(\"isation\") && root.length > 8) {\n root = `${root.slice(0, -7)}ise`;\n } else {\n const suffixes = [\n \"ations\",\n \"ation\",\n \"ments\",\n \"ment\",\n \"ingly\",\n \"edly\",\n \"ings\",\n \"ing\",\n \"ers\",\n \"er\",\n \"ies\",\n \"ied\",\n \"ions\",\n \"ion\",\n \"es\",\n \"ed\",\n \"s\",\n ];\n for (const suffix of suffixes) {\n if (root.length > suffix.length + 3 && root.endsWith(suffix)) {\n root = root.slice(0, -suffix.length);\n break;\n }\n }\n }\n if (root.length > 4 && root.endsWith(\"e\")) {\n root = root.slice(0, -1);\n }\n return root;\n}\n\nfunction mergeOverlaps(\n base: SharedCrossSignalOverlap[],\n extra: SharedCrossSignalOverlap[],\n): SharedCrossSignalOverlap[] {\n const merged = new Map<string, { agents: Set<string>; sourcePaths: Set<string> }>();\n for (const entry of [...base, ...extra]) {\n const existing = merged.get(entry.token);\n if (existing) {\n for (const agent of entry.agents) existing.agents.add(agent);\n for (const sourcePath of entry.sourcePaths) existing.sourcePaths.add(sourcePath);\n } else {\n merged.set(entry.token, {\n agents: new Set(entry.agents),\n sourcePaths: new Set(entry.sourcePaths),\n });\n }\n }\n return [...merged.entries()]\n .map(([token, value]) => ({\n token,\n agents: [...value.agents].sort(),\n sourcePaths: [...value.sourcePaths].sort(),\n agentCount: value.agents.size,\n }))\n .filter((entry) => entry.agentCount >= 2)\n .sort((a, b) => b.agentCount - a.agentCount || a.token.localeCompare(b.token));\n}\n\nasync function computeSemanticOverlapCandidates(\n sources: SharedCrossSignalSource[],\n maxCandidates: number,\n timeoutAtMs: number,\n): Promise<{ overlaps: SharedCrossSignalOverlap[]; candidateCount: number; timedOut: boolean }> {\n const tokenRows: Array<{ token: string; agent: string; path: string }> = [];\n for (const source of sources) {\n for (const token of source.topics) {\n if (Date.now() >= timeoutAtMs) return { overlaps: [], candidateCount: tokenRows.length, timedOut: true };\n await new Promise<void>((resolve) => setImmediate(resolve));\n tokenRows.push({ token, agent: source.agent, path: source.path });\n if (tokenRows.length >= maxCandidates) break;\n }\n if (tokenRows.length >= maxCandidates) break;\n }\n\n const byRoot = new Map<string, Map<string, { agents: Set<string>; paths: Set<string> }>>();\n for (const row of tokenRows) {\n if (Date.now() >= timeoutAtMs) return { overlaps: [], candidateCount: tokenRows.length, timedOut: true };\n await new Promise<void>((resolve) => setImmediate(resolve));\n const root = semanticRoot(row.token);\n if (root.length < 4) continue;\n const rootGroup = byRoot.get(root) ?? new Map<string, { agents: Set<string>; paths: Set<string> }>();\n const tokenGroup = rootGroup.get(row.token) ?? { agents: new Set<string>(), paths: new Set<string>() };\n tokenGroup.agents.add(row.agent);\n tokenGroup.paths.add(row.path);\n rootGroup.set(row.token, tokenGroup);\n byRoot.set(root, rootGroup);\n }\n\n const overlaps: SharedCrossSignalOverlap[] = [];\n for (const [root, tokenMap] of byRoot.entries()) {\n if (Date.now() >= timeoutAtMs) return { overlaps: [], candidateCount: tokenRows.length, timedOut: true };\n await new Promise<void>((resolve) => setImmediate(resolve));\n if (tokenMap.size < 2) continue;\n const agents = new Set<string>();\n const sourcePaths = new Set<string>();\n for (const value of tokenMap.values()) {\n for (const agent of value.agents) agents.add(agent);\n for (const sourcePath of value.paths) sourcePaths.add(sourcePath);\n }\n if (agents.size < 2) continue;\n overlaps.push({\n token: `semantic:${root}`,\n agents: [...agents].sort(),\n sourcePaths: [...sourcePaths].sort(),\n agentCount: agents.size,\n });\n }\n\n overlaps.sort((a, b) => b.agentCount - a.agentCount || a.token.localeCompare(b.token));\n return {\n overlaps,\n candidateCount: tokenRows.length,\n timedOut: false,\n };\n}\n\nasync function computeSemanticOverlapsWithTimeout(\n sources: SharedCrossSignalSource[],\n timeoutMs: number,\n maxCandidates: number,\n): Promise<{ overlaps: SharedCrossSignalOverlap[]; candidateCount: number; timedOut: boolean }> {\n const safeTimeoutMs = Math.max(1, Math.floor(timeoutMs));\n const safeMaxCandidates = Math.max(0, Math.floor(maxCandidates));\n if (safeMaxCandidates === 0 || sources.length === 0) {\n return { overlaps: [], candidateCount: 0, timedOut: false };\n }\n const timeoutAtMs = Date.now() + safeTimeoutMs;\n return computeSemanticOverlapCandidates(sources, safeMaxCandidates, timeoutAtMs);\n}\n\ninterface SharedCrossSignalSource {\n agent: string;\n path: string;\n title: string;\n topics: string[];\n /** Resolved least-privilege authority from the item's envelope (issue #1957). */\n authority: SharedAuthority;\n /** Envelope origin agent id; legacy items fall back to the agent field. */\n sharedBy: string;\n}\n\ninterface SharedCrossSignalOverlap {\n token: string;\n agents: string[];\n sourcePaths: string[];\n agentCount: number;\n}\n\ninterface SharedCrossSignalReport {\n date: string;\n generatedAt: string;\n sourceCount: number;\n feedbackCount: number;\n feedbackByDecision: Record<\"approved\" | \"approved_with_feedback\" | \"rejected\", number>;\n feedbackEntries: SharedFeedbackEntry[];\n sources: SharedCrossSignalSource[];\n overlaps: SharedCrossSignalOverlap[];\n /** Control 2 (issue #1957): expiry drops and supersession circulation. */\n staleness: {\n expiredDropped: number;\n supersededStillCirculating: string[];\n };\n /** Control 3 (issue #1957): refs two agents ruled on differently. */\n disputed: Array<{ ref: string; agents: string[]; decisions: string[] }>;\n /** Control 4 (issue #1957): who synthesized this report and when. */\n provenance: { actor: string; at: string };\n semantic: {\n enabled: boolean;\n applied: boolean;\n timedOut: boolean;\n candidateCount: number;\n maxCandidates: number;\n addedOverlapCount: number;\n };\n}\n\nexport interface SharedCrossSignalSynthesisResult {\n date: string;\n crossSignalsPath: string;\n crossSignalsMarkdownPath: string;\n overlapCount: number;\n report: SharedCrossSignalReport;\n}\n\nexport interface SharedDailyCurationResult {\n date: string;\n roundtablePath: string;\n crossSignalsPath: string;\n crossSignalsMarkdownPath: string;\n overlapCount: number;\n}\n\nfunction feedbackDecisionPriority(decision: SharedFeedbackEntry[\"decision\"]): number {\n switch (decision) {\n case \"rejected\":\n return 3;\n case \"approved_with_feedback\":\n return 2;\n case \"approved\":\n return 1;\n }\n}\n\nfunction feedbackSeverityPriority(severity: SharedFeedbackEntry[\"severity\"]): number {\n switch (severity) {\n case \"high\":\n return 3;\n case \"medium\":\n return 2;\n case \"low\":\n return 1;\n default:\n return 0;\n }\n}\n\nfunction compareFeedbackPriority(a: SharedFeedbackEntry, b: SharedFeedbackEntry): number {\n return (\n feedbackDecisionPriority(b.decision) - feedbackDecisionPriority(a.decision)\n || feedbackSeverityPriority(b.severity) - feedbackSeverityPriority(a.severity)\n || a.date.localeCompare(b.date)\n );\n}\n\nfunction markdownLineText(value: string): string {\n return value.replace(/[\\r\\n]+/g, \" \").replace(/\\s+/g, \" \").trim();\n}\n\nfunction markdownLineList(values: readonly string[]): string {\n return values.map(markdownLineText).filter(Boolean).join(\", \");\n}\n\nfunction formatFeedbackLine(entry: SharedFeedbackEntry): string {\n const extras: string[] = [`feedback: ${markdownLineText(entry.date)}`];\n if (entry.severity) extras.push(`severity: ${markdownLineText(entry.severity)}`);\n if (entry.refs?.length) extras.push(`refs: ${markdownLineList(entry.refs)}`);\n return `- [${markdownLineText(entry.agent)}] ${entry.decision}: ${markdownLineText(entry.reason)} [${extras.join(\"; \")}]`;\n}\n\nfunction formatOverlapLine(entry: SharedCrossSignalOverlap): string {\n return `- \\`${entry.token}\\` (${entry.agentCount} agents: ${markdownLineList(entry.agents)}) [sources: ${markdownLineList(entry.sourcePaths)}]`;\n}\n\nfunction formatStalenessLines(report: SharedCrossSignalReport): string[] {\n const circulating = report.staleness.supersededStillCirculating;\n return [\n `- Expired items dropped: ${report.staleness.expiredDropped}`,\n circulating.length === 0\n ? \"- Superseded items still circulating: 0\"\n : `- Superseded items still circulating: ${circulating.length} (${markdownLineList(circulating)})`,\n ];\n}\n\nfunction formatDisputedLines(report: SharedCrossSignalReport): string[] {\n if (report.disputed.length === 0) return [\"- No contradictory agent judgments recorded.\"];\n return report.disputed.map((entry) =>\n `- \\`${entry.ref}\\` disputed by ${markdownLineList(entry.agents)} (decisions: ${markdownLineList(entry.decisions)})`\n );\n}\n\nasync function writeFileAtomic(filePath: string, content: string): Promise<void> {\n await mkdir(path.dirname(filePath), { recursive: true });\n const tempPath = path.join(\n path.dirname(filePath),\n `.${path.basename(filePath)}.${process.pid}.${randomUUID()}.tmp`,\n );\n try {\n await writeFile(tempPath, content, { encoding: \"utf-8\", flag: \"wx\" });\n await rename(tempPath, filePath);\n } catch (error) {\n await rm(tempPath, { force: true }).catch(() => undefined);\n throw error;\n }\n}\n\nexport function resolveSharedContextDir(config: PluginConfig): string {\n return typeof config.sharedContextDir === \"string\" && config.sharedContextDir.length > 0\n ? expandTildePath(config.sharedContextDir)\n : path.join(expandTildePath(config.workspaceDir), \"shared-context\");\n}\n\n/**\n * Feedback inbox path. An explicit `sharedContextDir` keeps the inbox beside\n * the other shared-context files. When that override is unset, the inbox\n * lives under the memory directory so a standalone store replicates it.\n * Priorities, outputs, and roundtable stay on {@link resolveSharedContextDir}.\n */\nexport function resolveFeedbackInboxPath(config: PluginConfig): string {\n if (typeof config.sharedContextDir === \"string\" && config.sharedContextDir.length > 0) {\n return path.join(resolveSharedContextDir(config), \"feedback\", \"inbox.jsonl\");\n }\n return path.join(expandTildePath(config.memoryDir), \"shared-context\", \"feedback\", \"inbox.jsonl\");\n}\n\n/**\n * Copy a pre-upgrade workspace inbox into the memory-dir inbox once.\n *\n * Older builds stored `feedback/inbox.jsonl` under the workspace\n * shared-context directory even when `sharedContextDir` was unset. The copy\n * runs only while the memory-dir inbox is missing or empty, and only for a\n * regular legacy file that stays inside the workspace. A non-empty memory-dir\n * inbox is left untouched, so a later workspace file is not read again.\n * An explicit `sharedContextDir` does not migrate.\n */\nexport async function migrateLegacyFeedbackInbox(config: PluginConfig): Promise<void> {\n if (typeof config.sharedContextDir === \"string\" && config.sharedContextDir.length > 0) return;\n const nextPath = resolveFeedbackInboxPath(config);\n const legacyPath = path.join(resolveSharedContextDir(config), \"feedback\", \"inbox.jsonl\");\n if (path.resolve(nextPath) === path.resolve(legacyPath)) return;\n if (!(await legacyInboxCanMigrate(legacyPath))) return;\n try {\n const nextProbe = await lstat(nextPath);\n if (nextProbe.isSymbolicLink() || !nextProbe.isFile() || nextProbe.size > 0) return;\n } catch (err) {\n if (!isErrnoCode(err, \"ENOENT\")) throw err;\n }\n\n await mkdir(path.dirname(nextPath), { recursive: true });\n await withFeedbackMigrateLock(`${nextPath}.migrate.lock`, async () => {\n let nextStat: Stats | undefined;\n try {\n nextStat = await lstat(nextPath);\n } catch (err) {\n if (!isErrnoCode(err, \"ENOENT\")) throw err;\n }\n if (nextStat && (nextStat.isSymbolicLink() || !nextStat.isFile() || nextStat.size > 0)) return;\n if (!(await legacyInboxCanMigrate(legacyPath))) return;\n\n const workspaceReal = await realpath(expandTildePath(config.workspaceDir));\n const legacyReal = await realpath(legacyPath);\n if (!pathIsInside(workspaceReal, legacyReal)) return;\n const memoryDir = expandTildePath(config.memoryDir);\n const memoryReal = await realpath(memoryDir);\n const nextParentReal = await realpath(path.dirname(nextPath));\n if (!pathIsInside(memoryReal, nextParentReal)) return;\n if (nextStat) {\n const nextReal = await realpath(nextPath);\n if (!pathIsInside(memoryReal, nextReal)) return;\n }\n\n const body = await readFile(legacyReal);\n const tempPath = path.join(\n path.dirname(nextPath),\n `.${path.basename(nextPath)}.${process.pid}.${randomUUID()}.migrate.tmp`,\n );\n await writeFile(tempPath, body, { flag: \"wx\" });\n try {\n let current: Stats | undefined;\n try {\n current = await lstat(nextPath);\n } catch (err) {\n if (!isErrnoCode(err, \"ENOENT\")) throw err;\n }\n if (current && (current.isSymbolicLink() || !current.isFile() || current.size > 0)) return;\n await rename(tempPath, nextPath);\n } finally {\n await rm(tempPath, { force: true }).catch(() => undefined);\n }\n });\n}\n\nasync function legacyInboxCanMigrate(legacyPath: string): Promise<boolean> {\n let legacyStat: Stats;\n try {\n legacyStat = await lstat(legacyPath);\n } catch (err) {\n if (isErrnoCode(err, \"ENOENT\")) return false;\n throw err;\n }\n return !legacyStat.isSymbolicLink() && legacyStat.isFile() && legacyStat.size > 0;\n}\n\n/** One migration at a time. A lock older than 30s is stale and is replaced. */\nasync function withFeedbackMigrateLock(lockPath: string, body: () => Promise<void>): Promise<void> {\n const deadline = Date.now() + 2_000;\n while (Date.now() < deadline) {\n try {\n await writeFile(lockPath, \"\", { flag: \"wx\" });\n } catch (err) {\n if (!isErrnoCode(err, \"EEXIST\")) throw err;\n let lockStat: Stats;\n try {\n lockStat = await lstat(lockPath);\n } catch (statErr) {\n if (isErrnoCode(statErr, \"ENOENT\")) continue;\n throw statErr;\n }\n if (!lockStat.isSymbolicLink() && lockStat.isFile() && Date.now() - lockStat.mtimeMs > 30_000) {\n await rm(lockPath, { force: true });\n continue;\n }\n await new Promise((resolve) => setTimeout(resolve, 20));\n continue;\n }\n try {\n await body();\n } finally {\n await rm(lockPath, { force: true });\n }\n return;\n }\n throw new Error(\"feedback inbox migration did not acquire its lock before the wait elapsed\");\n}\n\nexport class SharedContextManager {\n readonly dir: string;\n private readonly prioritiesPath: string;\n private readonly prioritiesInboxPath: string;\n private readonly outputsDir: string;\n private readonly roundtableDir: string;\n private readonly feedbackDir: string;\n private readonly feedbackInboxPath: string;\n private readonly crossSignalsDir: string;\n private readonly allowBindingAuthority: boolean;\n private readonly dailySynthesisChains = new Map<string, Promise<void>>();\n\n constructor(private readonly config: PluginConfig) {\n const base = resolveSharedContextDir(config);\n\n this.dir = base;\n this.prioritiesPath = path.join(base, \"priorities.md\");\n this.prioritiesInboxPath = path.join(base, \"priorities.inbox.md\");\n this.outputsDir = path.join(base, \"agent-outputs\");\n this.roundtableDir = path.join(base, \"roundtable\");\n this.feedbackInboxPath = resolveFeedbackInboxPath(config);\n this.feedbackDir = path.dirname(this.feedbackInboxPath);\n this.crossSignalsDir = path.join(base, \"cross-signals\");\n this.allowBindingAuthority = config.sharedContextAllowBindingAuthority === true;\n }\n\n async ensureStructure(): Promise<void> {\n await mkdir(this.dir, { recursive: true });\n await mkdir(this.outputsDir, { recursive: true });\n await mkdir(this.roundtableDir, { recursive: true });\n await mkdir(this.feedbackDir, { recursive: true });\n await mkdir(this.crossSignalsDir, { recursive: true });\n await mkdir(path.join(this.dir, \"staging\"), { recursive: true });\n await mkdir(path.join(this.dir, \"kpis\"), { recursive: true });\n await mkdir(path.join(this.dir, \"calendar\"), { recursive: true });\n await mkdir(path.join(this.dir, \"content-calendar\"), { recursive: true });\n\n // Bootstrap files if missing.\n await this.ensureFile(\n this.prioritiesPath,\n [\n \"# Priorities\",\n \"\",\n \"This is the shared priority stack. Agents should read this before acting.\",\n \"\",\n \"## Current\",\n \"- (empty)\",\n \"\",\n \"## Notes\",\n \"- (empty)\",\n \"\",\n ].join(\"\\n\"),\n );\n await this.ensureFile(\n this.prioritiesInboxPath,\n [\n \"# Priorities Inbox\",\n \"\",\n \"Append-only inbox. Curator merges into priorities.md.\",\n \"\",\n ].join(\"\\n\"),\n );\n await migrateLegacyFeedbackInbox(this.config);\n await this.ensureFile(this.feedbackInboxPath, \"\");\n }\n\n private async ensureFile(fp: string, content: string): Promise<void> {\n try {\n await stat(fp);\n } catch {\n await writeFile(fp, content, \"utf-8\");\n }\n }\n\n async readPriorities(signal?: AbortSignal): Promise<string> {\n throwIfAborted(signal, \"shared context priorities read aborted\");\n try {\n const content = await readFile(this.prioritiesPath, { encoding: \"utf-8\", signal });\n throwIfAborted(signal, \"shared context priorities read aborted\");\n return content;\n } catch {\n throwIfAborted(signal, \"shared context priorities read aborted\");\n return \"\";\n }\n }\n\n async readLatestRoundtable(signal?: AbortSignal): Promise<string> {\n throwIfAborted(signal, \"shared context roundtable read aborted\");\n try {\n const files = (await readdir(this.roundtableDir))\n .filter((f) => f.endsWith(\".md\"))\n .sort()\n .reverse();\n throwIfAborted(signal, \"shared context roundtable read aborted\");\n const fp = files[0] ? path.join(this.roundtableDir, files[0]) : null;\n if (!fp) return \"\";\n const content = await readFile(fp, { encoding: \"utf-8\", signal });\n throwIfAborted(signal, \"shared context roundtable read aborted\");\n return content;\n } catch {\n throwIfAborted(signal, \"shared context roundtable read aborted\");\n return \"\";\n }\n }\n\n async readLatestCrossSignals(signal?: AbortSignal): Promise<string> {\n throwIfAborted(signal, \"shared context cross-signals read aborted\");\n try {\n const files = (await readdir(this.crossSignalsDir))\n .filter((f) => f.endsWith(\".md\"))\n .sort()\n .reverse();\n throwIfAborted(signal, \"shared context cross-signals read aborted\");\n const fp = files[0] ? path.join(this.crossSignalsDir, files[0]) : null;\n if (!fp) return \"\";\n const content = await readFile(fp, { encoding: \"utf-8\", signal });\n throwIfAborted(signal, \"shared context cross-signals read aborted\");\n return content;\n } catch {\n throwIfAborted(signal, \"shared context cross-signals read aborted\");\n return \"\";\n }\n }\n\n async writeAgentOutput(opts: {\n agentId: string;\n title: string;\n content: string;\n createdAt?: Date;\n /** Envelope authority class (issue #1957). Unrecognized values throw. */\n authority?: string;\n /** Optional ISO-8601 expiry stamped on the item. */\n expiresAt?: string;\n /** Optional id of the shared item this output supersedes. */\n supersedes?: string;\n /**\n * Server-resolved identity of the caller, supplied by the access\n * surface (issue #1957 review). When present it IS both the producer\n * and the envelope origin; a disagreeing caller-supplied `agentId` is\n * rejected so no caller can publish as another agent.\n */\n authenticatedIdentity?: string;\n /**\n * Server-owned origin token for a write that crosses an external\n * boundary but resolved no identity (issue #1957 review round 4).\n * Stamped as the envelope origin (`sharedBy`); the caller label stays\n * the producer so grouping never collapses.\n */\n unattributedOrigin?: string;\n }): Promise<string> {\n const identity = resolveWriteOrigin({\n agentId: opts.agentId,\n authenticatedIdentity: opts.authenticatedIdentity,\n unattributedOrigin: opts.unattributedOrigin,\n });\n const createdAt = opts.createdAt ?? new Date();\n const date = ymd(createdAt);\n const time = createdAt.toISOString().slice(11, 19).replace(/:/g, \"\");\n const slug = safeSlug(opts.title);\n const agentPathSegment = safePathSegment(identity.agent, \"agentId\");\n\n const envelope = composeWriteEnvelope({\n origin: identity.origin,\n authority: opts.authority,\n expiresAt: opts.expiresAt,\n supersedes: opts.supersedes,\n allowBinding: this.allowBindingAuthority,\n nowMs: createdAt.getTime(),\n });\n\n const dir = path.join(this.outputsDir, agentPathSegment, date);\n await mkdir(dir, { recursive: true });\n\n const body = [\n \"---\",\n \"kind: agent_output\",\n `agent: ${formatFrontmatterScalar(identity.agent)}`,\n `createdAt: ${createdAt.toISOString()}`,\n `title: ${formatFrontmatterScalar(opts.title.replace(/\\n/g, \" \").slice(0, 200))}`,\n ...envelopeToFrontmatterLines(envelope),\n \"---\",\n \"\",\n opts.content.trimEnd(),\n \"\",\n ].join(\"\\n\");\n\n for (let attempt = 0; attempt < 100; attempt++) {\n const suffix = attempt === 0 ? \"\" : `-${attempt + 1}`;\n const fp = path.join(dir, `${time}-${slug}${suffix}.md`);\n try {\n await writeFile(fp, body, { encoding: \"utf-8\", flag: \"wx\" });\n return fp;\n } catch (error) {\n if (error instanceof Error && \"code\" in error && error.code === \"EEXIST\") continue;\n throw error;\n }\n }\n\n throw new Error(`Unable to allocate unique shared-context output path for ${identity.agent}`);\n }\n\n async appendFeedback(entry: SharedFeedbackEntry): Promise<void> {\n const parsed = SharedFeedbackEntrySchema.parse(entry);\n await migrateLegacyFeedbackInbox(this.config);\n await appendFile(this.feedbackInboxPath, JSON.stringify(parsed) + \"\\n\", \"utf-8\");\n }\n\n async appendPrioritiesInbox(opts: { agentId: string; text: string }): Promise<void> {\n const stamp = new Date().toISOString();\n const lines = [\n \"\",\n `## ${stamp} (${opts.agentId})`,\n \"\",\n opts.text.trimEnd(),\n \"\",\n ].join(\"\\n\");\n await appendFile(this.prioritiesInboxPath, lines, \"utf-8\");\n }\n\n private async withDailySynthesisLock<T>(date: string, fn: () => Promise<T>): Promise<T> {\n const previous = this.dailySynthesisChains.get(date) ?? Promise.resolve();\n let releaseCurrent!: () => void;\n const current = new Promise<void>((resolve) => {\n releaseCurrent = resolve;\n });\n const queued = previous.catch(() => undefined).then(() => current);\n this.dailySynthesisChains.set(date, queued);\n await previous.catch(() => undefined);\n try {\n return await fn();\n } finally {\n releaseCurrent();\n if (this.dailySynthesisChains.get(date) === queued) {\n this.dailySynthesisChains.delete(date);\n }\n }\n }\n\n async synthesizeCrossSignals(opts: {\n date?: string;\n maxSummaryItems?: number;\n }): Promise<SharedCrossSignalSynthesisResult> {\n const date = safeDateSegment(opts.date ?? ymd(new Date()));\n return this.withDailySynthesisLock(date, () => this.synthesizeCrossSignalsUnlocked({\n date,\n maxSummaryItems: opts.maxSummaryItems,\n }));\n }\n\n private async synthesizeCrossSignalsUnlocked(opts: {\n date: string;\n maxSummaryItems?: number;\n }): Promise<SharedCrossSignalSynthesisResult> {\n const date = opts.date;\n const maxSummaryItems = Math.max(1, opts.maxSummaryItems ?? 8);\n\n // Collect outputs for the day (best-effort).\n const outputs: Array<{ agent: string; path: string; title: string; raw: string; envelope: SharedEnvelope }> = [];\n try {\n const agents = (await readdir(this.outputsDir, { withFileTypes: true }))\n .sort((a, b) => a.name.localeCompare(b.name));\n for (const a of agents) {\n if (!a.isDirectory()) continue;\n const dayDir = path.join(this.outputsDir, a.name, date);\n try {\n const files = (await readdir(dayDir)).filter((f) => f.endsWith(\".md\")).sort();\n for (const f of files) {\n const p = path.join(dayDir, f);\n const raw = await readFile(p, \"utf-8\");\n const title = readFrontmatterScalar(raw, \"title\") ?? f;\n const agent = readFrontmatterScalar(raw, \"agent\") ?? safeDecodePathSegment(a.name);\n const envelope = envelopeFromScalars({\n sharedBy: readFrontmatterScalar(raw, \"sharedBy\"),\n authority: readFrontmatterScalar(raw, \"authority\"),\n expiresAt: readFrontmatterScalar(raw, \"expiresAt\"),\n supersedes: readFrontmatterScalar(raw, \"supersedes\"),\n });\n outputs.push({ agent, path: p, title, raw, envelope });\n }\n } catch {\n // no outputs for this agent/date\n }\n }\n } catch {\n // ignore\n }\n outputs.sort(\n (a, b) =>\n a.agent.localeCompare(b.agent)\n || a.path.localeCompare(b.path)\n || a.title.localeCompare(b.title),\n );\n\n // Control 2 (issue #1957): expired items never enter the working set;\n // items another live item supersedes are marked while they circulate.\n const liveOutputs = filterLiveEnvelopes(\n outputs.map((output) => ({ output, expiresAt: output.envelope.expiresAt })),\n Date.now(),\n ).map((entry) => entry.output);\n const expiredDropped = outputs.length - liveOutputs.length;\n const supersededStillCirculating = markSupersededCirculation(\n liveOutputs.map((output) => ({ id: output.path, supersedes: output.envelope.supersedes })),\n )\n .filter((item) => item.circulating === true)\n .map((item) => item.id)\n .sort();\n\n // Collect feedback entries for the day.\n const feedback: SharedFeedbackEntry[] = [];\n try {\n await migrateLegacyFeedbackInbox(this.config);\n const raw = await readFile(this.feedbackInboxPath, \"utf-8\");\n for (const line of raw.split(\"\\n\")) {\n if (!line.trim()) continue;\n try {\n const obj = JSON.parse(line);\n const parsed = SharedFeedbackEntrySchema.safeParse(obj);\n if (!parsed.success) continue;\n if (String(parsed.data.date).startsWith(date)) feedback.push(parsed.data);\n } catch {\n // ignore\n }\n }\n } catch {\n // ignore\n }\n\n const sources: SharedCrossSignalSource[] = liveOutputs.map((output) => {\n const body = stripYamlFrontmatter(output.raw);\n return {\n agent: output.agent,\n path: output.path,\n title: output.title,\n topics: extractTopicTokens(`${output.title}\\n${body}`),\n authority: resolveReadAuthority(output.envelope, this.allowBindingAuthority),\n sharedBy: output.envelope.sharedBy ?? output.agent,\n };\n });\n\n const overlapMap = new Map<string, { agents: Set<string>; sourcePaths: Set<string> }>();\n for (const source of sources) {\n for (const token of source.topics) {\n const existing = overlapMap.get(token);\n if (existing) {\n existing.agents.add(source.agent);\n existing.sourcePaths.add(source.path);\n } else {\n overlapMap.set(token, {\n agents: new Set([source.agent]),\n sourcePaths: new Set([source.path]),\n });\n }\n }\n }\n\n const overlaps: SharedCrossSignalOverlap[] = [...overlapMap.entries()]\n .map(([token, v]) => ({\n token,\n agents: [...v.agents].sort(),\n sourcePaths: [...v.sourcePaths].sort(),\n agentCount: v.agents.size,\n }))\n .filter((entry) => entry.agentCount >= 2)\n .sort((a, b) => b.agentCount - a.agentCount || a.token.localeCompare(b.token));\n\n const semanticEnabled =\n resolveConversationContextCapabilities(this.config).sharedCrossSignalSemantic === true\n || resolveConversationContextCapabilities(this.config).crossSignalsSemantic === true;\n const semanticTimeoutMs =\n this.config.sharedCrossSignalSemanticTimeoutMs\n ?? this.config.crossSignalsSemanticTimeoutMs\n ?? 4000;\n const semanticMaxCandidates = this.config.sharedCrossSignalSemanticMaxCandidates ?? 120;\n let semanticApplied = false;\n let semanticTimedOut = false;\n let semanticCandidateCount = 0;\n let semanticAddedOverlapCount = 0;\n let mergedOverlaps = overlaps;\n if (semanticEnabled) {\n try {\n const semanticResult = await computeSemanticOverlapsWithTimeout(\n sources,\n semanticTimeoutMs,\n semanticMaxCandidates,\n );\n semanticTimedOut = semanticResult.timedOut;\n semanticCandidateCount = semanticResult.candidateCount;\n if (!semanticResult.timedOut && semanticResult.overlaps.length > 0) {\n mergedOverlaps = mergeOverlaps(overlaps, semanticResult.overlaps);\n semanticAddedOverlapCount = Math.max(0, mergedOverlaps.length - overlaps.length);\n semanticApplied = semanticAddedOverlapCount > 0;\n }\n } catch (err) {\n log.warn(`shared-context semantic cross-signals failed; fail-open to deterministic output: ${err}`);\n }\n }\n\n const feedbackByDecision: SharedCrossSignalReport[\"feedbackByDecision\"] = {\n approved: 0,\n approved_with_feedback: 0,\n rejected: 0,\n };\n for (const entry of feedback) {\n feedbackByDecision[entry.decision] += 1;\n }\n\n // Control 3 (issue #1957): feedback refs are claim keys; two agents\n // ruling differently on the same ref surface as disputed, never silently\n // averaged. Pairwise scan is bounded by one day's feedback entries.\n const claimItems = feedback.map((entry, index) => ({\n id: `${entry.agent}#${index}`,\n claims: Object.fromEntries((entry.refs ?? []).map((ref) => [ref, entry.decision])),\n }));\n const disputedByRef = new Map<string, { agents: Set<string>; decisions: Set<string> }>();\n for (let i = 0; i < claimItems.length; i++) {\n for (let j = i + 1; j < claimItems.length; j++) {\n const pair = detectContradictionPair(claimItems[i]!, claimItems[j]!);\n if (pair.kind !== \"conflict\") continue;\n for (const ref of pair.keys) {\n const slot = disputedByRef.get(ref) ?? { agents: new Set<string>(), decisions: new Set<string>() };\n slot.agents.add(feedback[i]!.agent);\n slot.agents.add(feedback[j]!.agent);\n slot.decisions.add(feedback[i]!.decision);\n slot.decisions.add(feedback[j]!.decision);\n disputedByRef.set(ref, slot);\n }\n }\n }\n const disputed = [...disputedByRef.entries()]\n .map(([ref, slot]) => ({ ref, agents: [...slot.agents].sort(), decisions: [...slot.decisions].sort() }))\n .sort((a, b) => a.ref.localeCompare(b.ref));\n\n const generatedAt = new Date().toISOString();\n const baseReport = {\n date,\n generatedAt,\n sourceCount: sources.length,\n feedbackCount: feedback.length,\n feedbackByDecision,\n feedbackEntries: [...feedback].sort(compareFeedbackPriority),\n sources,\n overlaps: mergedOverlaps,\n staleness: { expiredDropped, supersededStillCirculating },\n disputed,\n semantic: {\n enabled: semanticEnabled,\n applied: semanticApplied,\n timedOut: semanticTimedOut,\n candidateCount: semanticCandidateCount,\n maxCandidates: Math.max(0, Math.floor(semanticMaxCandidates)),\n addedOverlapCount: semanticAddedOverlapCount,\n },\n };\n // Control 4 (issue #1957): stamp who synthesized the report and when.\n const report = stampProvenance(baseReport, { actor: \"shared-context:curation\", at: generatedAt });\n\n const crossSignalsPath = path.join(this.crossSignalsDir, `${date}.json`);\n await writeFileAtomic(crossSignalsPath, `${JSON.stringify(report, null, 2)}\\n`);\n\n const recurringThemeLines = mergedOverlaps.length === 0\n ? [\"- No multi-agent topic overlap detected.\"]\n : mergedOverlaps.slice(0, maxSummaryItems).map((entry) => formatOverlapLine(entry));\n const riskSignals = [...feedback]\n .filter((entry) => entry.decision !== \"approved\" || entry.severity === \"high\" || entry.severity === \"medium\")\n .sort(compareFeedbackPriority)\n .slice(0, maxSummaryItems);\n const riskLines = riskSignals.length === 0\n ? [\"- No explicit blockers or elevated review risks recorded.\"]\n : riskSignals.map((entry) => formatFeedbackLine(entry));\n const promotionCandidates = mergedOverlaps\n .filter((entry) => entry.agentCount >= 3)\n .slice(0, maxSummaryItems);\n const promotionLines = promotionCandidates.length === 0\n ? [\"- No promotion candidates yet.\"]\n : promotionCandidates.map((entry) =>\n `- Consider promoting \\`${entry.token}\\` into priorities or operating rules [sources: ${markdownLineList(entry.sourcePaths)}]`\n );\n\n const crossSignalsMarkdown = [\n `# Cross-Signals — ${date}`,\n \"\",\n \"## Overview\",\n `- Source outputs analyzed: ${sources.length}`,\n `- Feedback entries analyzed: ${feedback.length}`,\n `- Decision totals: approved=${feedbackByDecision.approved}, approved_with_feedback=${feedbackByDecision.approved_with_feedback}, rejected=${feedbackByDecision.rejected}`,\n `- Semantic enhancer: ${semanticEnabled ? (semanticTimedOut ? \"enabled (timed out, fail-open)\" : semanticApplied ? \"enabled (applied)\" : \"enabled (no additional overlaps)\") : \"disabled\"}`,\n `- JSON report: ${crossSignalsPath}`,\n \"\",\n \"## Staleness\",\n ...formatStalenessLines(report),\n \"\",\n \"## Disputed\",\n ...formatDisputedLines(report),\n \"\",\n \"## Recurring Themes\",\n ...recurringThemeLines,\n \"\",\n \"## Risks And Blockers\",\n ...riskLines,\n \"\",\n \"## Potential Promotions\",\n ...promotionLines,\n \"\",\n \"## Sources\",\n ...(sources.length === 0 ? [\"- (none)\"] : sources.map((source) =>\n `- [${markdownLineText(source.agent)}] ${markdownLineText(source.title)} (${markdownLineText(source.path)}) [authority: ${source.authority}; sharedBy: ${markdownLineText(source.sharedBy)}]`\n )),\n \"\",\n ].join(\"\\n\");\n\n const crossSignalsMarkdownPath = path.join(this.crossSignalsDir, `${date}.md`);\n await writeFileAtomic(crossSignalsMarkdownPath, crossSignalsMarkdown);\n\n return {\n date,\n crossSignalsPath,\n crossSignalsMarkdownPath,\n overlapCount: mergedOverlaps.length,\n report,\n };\n }\n\n async curateDaily(opts: { date?: string; maxChars?: number }): Promise<SharedDailyCurationResult> {\n const date = safeDateSegment(opts.date ?? ymd(new Date()));\n return this.withDailySynthesisLock(date, () => this.curateDailyUnlocked({ ...opts, date }));\n }\n\n private async curateDailyUnlocked(opts: { date: string; maxChars?: number }): Promise<SharedDailyCurationResult> {\n const date = opts.date;\n const maxChars = Math.max(2_000, opts.maxChars ?? 20_000);\n const crossSignals = await this.synthesizeCrossSignalsUnlocked({ date });\n // Control 4 (issue #1957): every synthesized claim must cite at least one\n // item this run actually had. Overlaps are built from sources, so this is\n // a tripwire — it fires only if a synthesized section stops citing.\n const lintFindings = lintCuratedClaims({\n claims: crossSignals.report.overlaps.map((overlap) => ({\n claimId: `overlap:${overlap.token}`,\n citedItemIds: overlap.sourcePaths,\n })),\n availableItemIds: crossSignals.report.sources.map((source) => source.path),\n });\n if (lintFindings.length > 0) {\n throw new Error(`shared-context curation self-check failed: ${JSON.stringify(lintFindings)}`);\n }\n const feedbackLines = crossSignals.report.feedbackEntries.length === 0\n ? [\"- (none)\"]\n : crossSignals.report.feedbackEntries.map((entry) => formatFeedbackLine(entry));\n const overlapBullets = crossSignals.report.overlaps.length === 0\n ? [\"- No multi-agent topic overlap detected.\"]\n : crossSignals.report.overlaps.slice(0, 8).map((entry) => formatOverlapLine(entry));\n\n const md: string[] = [\n `# Roundtable — ${date}`,\n \"\",\n \"## Notable Agent Outputs\",\n ...(crossSignals.report.sources.length === 0\n ? [\"- (none)\"]\n : crossSignals.report.sources.map((source) =>\n `- ${markdownLineText(source.title)} (${markdownLineText(source.path)}) [authority: ${source.authority}; sharedBy: ${markdownLineText(source.sharedBy)}]`)),\n \"\",\n \"## Feedback (Approve/Reject)\",\n ...feedbackLines,\n \"\",\n \"## Cross-Signals\",\n `- Source outputs analyzed: ${crossSignals.report.sourceCount}`,\n `- Feedback entries analyzed: ${crossSignals.report.feedbackCount}`,\n `- Decision totals: approved=${crossSignals.report.feedbackByDecision.approved}, approved_with_feedback=${crossSignals.report.feedbackByDecision.approved_with_feedback}, rejected=${crossSignals.report.feedbackByDecision.rejected}`,\n `- Semantic enhancer: ${crossSignals.report.semantic.enabled ? (crossSignals.report.semantic.timedOut ? \"enabled (timed out, fail-open)\" : crossSignals.report.semantic.applied ? \"enabled (applied)\" : \"enabled (no additional overlaps)\") : \"disabled\"}`,\n `- Cross-signals JSON: ${crossSignals.crossSignalsPath}`,\n `- Cross-signals markdown: ${crossSignals.crossSignalsMarkdownPath}`,\n ...overlapBullets,\n \"\",\n \"## Staleness\",\n ...formatStalenessLines(crossSignals.report),\n \"\",\n \"## Disputed\",\n ...formatDisputedLines(crossSignals.report),\n \"\",\n ];\n\n\n const out = md.join(\"\\n\");\n const trimmed = out.length > maxChars ? out.slice(0, maxChars) + \"\\n\\n...(trimmed)\\n\" : out;\n\n const roundtablePath = path.join(this.roundtableDir, `${date}.md`);\n await writeFileAtomic(roundtablePath, trimmed);\n\n log.info(`shared-context curated daily roundtable: ${roundtablePath}`);\n return {\n date,\n roundtablePath,\n crossSignalsPath: crossSignals.crossSignalsPath,\n crossSignalsMarkdownPath: crossSignals.crossSignalsMarkdownPath,\n overlapCount: crossSignals.overlapCount,\n };\n }\n}\n","/**\n * Shared-item contradiction detection (issue #1957).\n *\n * Pure helper. Same-id items are one item; overlapping claim keys with\n * unequal values are a conflict. No deletes, no persistence.\n */\n\nexport interface SharedClaimItem {\n id: string;\n claims: Record<string, string>;\n}\n\nexport type ContradictionPairResult =\n | { kind: \"same\" }\n | { kind: \"conflict\"; keys: string[] }\n | { kind: \"none\" };\n\nexport function detectContradictionPair(\n a: SharedClaimItem,\n b: SharedClaimItem,\n): ContradictionPairResult {\n if (a.id === b.id) {\n return { kind: \"same\" };\n }\n const keys: string[] = [];\n for (const key of Object.keys(a.claims)) {\n if (key in b.claims && a.claims[key] !== b.claims[key]) {\n keys.push(key);\n }\n }\n return keys.length > 0 ? { kind: \"conflict\", keys: keys.sort() } : { kind: \"none\" };\n}\n","/**\n * Shared-context curation self-check (issue #1957 requirement 4).\n *\n * Pure. A synthesized claim with no traceable source is a lint error:\n * report claims whose citations are missing, blank, or absent from the\n * item ids the curation run actually had available.\n */\n\nexport interface CuratedClaim {\n claimId: string;\n /** Shared-context item ids this claim was synthesized from. */\n citedItemIds?: readonly string[];\n}\n\nexport interface CurationLintFinding {\n claimId: string;\n reason: \"no_citations\" | \"unknown_citation\";\n /** Cited ids that are not in the available set. Only for unknown_citation. */\n unknownIds?: string[];\n}\n\nexport function lintCuratedClaims(input: {\n claims: readonly CuratedClaim[];\n availableItemIds: readonly string[];\n}): CurationLintFinding[] {\n const available = new Set(input.availableItemIds);\n const findings: CurationLintFinding[] = [];\n\n for (const claim of input.claims) {\n const claimId = claim.claimId;\n if (typeof claimId !== \"string\" || claimId.trim().length === 0) {\n throw new RangeError(\"claimId must be a non-blank string\");\n }\n\n const unknown = new Set<string>();\n let validCount = 0;\n for (const id of claim.citedItemIds ?? []) {\n if (id.trim().length === 0) continue;\n if (available.has(id)) {\n validCount += 1;\n } else {\n unknown.add(id);\n }\n }\n\n if (validCount === 0) {\n findings.push({ claimId, reason: \"no_citations\" });\n continue;\n }\n if (unknown.size > 0) {\n findings.push({ claimId, reason: \"unknown_citation\", unknownIds: [...unknown].sort() });\n }\n }\n\n findings.sort((a, b) => {\n if (a.claimId !== b.claimId) return a.claimId < b.claimId ? -1 : 1;\n if (a.reason !== b.reason) return a.reason < b.reason ? -1 : 1;\n // Duplicate claim ids are linted independently, so two findings can share\n // both keys above and still differ. Without this tertiary key the result\n // would depend on upstream iteration order, which the deterministic-output\n // contract forbids.\n const left = (a.unknownIds ?? []).join(\",\");\n const right = (b.unknownIds ?? []).join(\",\");\n if (left !== right) return left < right ? -1 : 1;\n return 0;\n });\n return findings;\n}\n","/**\n * Shared-item provenance stamp (issue #1957).\n *\n * First slice: stamp actor + at onto a new object. Curation wiring\n * comes later. Does not mutate the input.\n */\n\nimport { isStrictIsoInstant } from \"./iso-instant.js\";\n\nexport interface ProvenanceStamp {\n actor: string;\n at: string;\n}\n\nexport interface StampProvenanceOptions {\n actor: string;\n at: string;\n}\n\nfunction requireActor(actor: string): string {\n if (typeof actor !== \"string\" || actor.trim().length === 0) {\n throw new Error(\"stampProvenance: actor must be a non-empty string\");\n }\n return actor;\n}\n\nfunction requireAt(at: unknown): string {\n if (typeof at !== \"string\" || !isStrictIsoInstant(at)) {\n throw new Error(\"stampProvenance: at must be a valid ISO-8601 timestamp\");\n }\n return at;\n}\n\nexport function stampProvenance<T extends object>(\n item: T,\n stamp: StampProvenanceOptions,\n): T & { provenance: ProvenanceStamp } {\n return {\n ...item,\n provenance: {\n actor: requireActor(stamp.actor),\n at: requireAt(stamp.at),\n },\n };\n}\n","/**\n * Shared-item staleness (issue #1957).\n *\n * Pure helpers. Expired items drop; superseded items that still circulate\n * get a marker. Callers never `rm`.\n */\nimport { isExpired } from \"./governance.js\";\n\nexport interface SharedStalenessItem {\n id: string;\n expiresAt?: string;\n supersedes?: string;\n circulating?: boolean;\n}\n\n/** Drop expired items. Half-open: `nowMs >= expiresAt` is expired. */\nexport function filterLiveEnvelopes<T extends { expiresAt?: string }>(\n items: readonly T[],\n nowMs: number,\n): T[] {\n return items.filter((item) => !isExpired(item, nowMs));\n}\n\n/**\n * Mark items whose id appears in another item's `supersedes`.\n * Returns a new array. Does not mutate input and does not delete files.\n */\nexport function markSupersededCirculation<T extends SharedStalenessItem>(\n items: readonly T[],\n): (T & { circulating?: boolean })[] {\n const supersededIds = new Set<string>();\n for (const item of items) {\n if (item.supersedes) supersededIds.add(item.supersedes);\n }\n return items.map((item) =>\n supersededIds.has(item.id) ? { ...item, circulating: true } : item,\n );\n}\n"],"mappings":"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","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-KJTKLXTH.js";
4
4
  import {
5
5
  StorageManager
6
- } from "./chunk-WJLGUY27.js";
6
+ } from "./chunk-BD5QEP3T.js";
7
7
  import {
8
8
  assertInjectedStorageRooted
9
9
  } from "./chunk-FQD2KPQH.js";
@@ -260,4 +260,4 @@ export {
260
260
  backupExistingLedger,
261
261
  rebuildMemoryLifecycleLedger
262
262
  };
263
- //# sourceMappingURL=chunk-IOM5QSNR.js.map
263
+ //# sourceMappingURL=chunk-EKKAHJ4B.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-5HFVWYHL.js";
4
4
  import {
5
5
  isGenericRecallExcludedPath
6
- } from "./chunk-E5274WUC.js";
6
+ } from "./chunk-OAIWPB2I.js";
7
7
  import {
8
8
  planRecallMode
9
9
  } from "./chunk-CSAKJVXW.js";
@@ -132,4 +132,4 @@ async function findExpectedMemory(orchestrator, namespaces, expect) {
132
132
  export {
133
133
  runRecallWhy
134
134
  };
135
- //# sourceMappingURL=chunk-JK3DYMOC.js.map
135
+ //# sourceMappingURL=chunk-GKOML66M.js.map
@@ -34,7 +34,7 @@ import {
34
34
  } from "./chunk-NVKO5YKP.js";
35
35
  import {
36
36
  compareEntityTimestamps
37
- } from "./chunk-WJLGUY27.js";
37
+ } from "./chunk-BD5QEP3T.js";
38
38
  import {
39
39
  normalizeEntityText,
40
40
  resolveRequestedEntitySectionKeys
@@ -927,4 +927,4 @@ export {
927
927
  entityIndexVersion,
928
928
  entityRecentTranscriptLookbackHours
929
929
  };
930
- //# sourceMappingURL=chunk-QW7G7PWN.js.map
930
+ //# sourceMappingURL=chunk-I2M4ZVDD.js.map
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  computeCorpusWatermarks,
6
6
  resolveCorpusNamespaceRoots
7
- } from "./chunk-5FNVK7MW.js";
7
+ } from "./chunk-JVNEXW6X.js";
8
8
 
9
9
  // src/operator-doctor-corpus.ts
10
10
  var DIGEST_PREFIX_LENGTH = 12;
@@ -78,4 +78,4 @@ export {
78
78
  corpusWatermarksFromCheck,
79
79
  summarizeCorpusAndReplica
80
80
  };
81
- //# sourceMappingURL=chunk-JTUKDLAD.js.map
81
+ //# sourceMappingURL=chunk-J6FFBORM.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  PROJECTION_REBUILD_RUNNER_FLAG
3
- } from "./chunk-3R6SLDTH.js";
3
+ } from "./chunk-KJOGIRMF.js";
4
4
  import {
5
5
  startLocationAutoSync
6
- } from "./chunk-7O252IE6.js";
6
+ } from "./chunk-SSAXGPXY.js";
7
7
  import {
8
8
  ensureContradictionScanCron,
9
9
  ensureDaySummaryCron,
@@ -15,14 +15,14 @@ import {
15
15
  } from "./chunk-666A3MOW.js";
16
16
  import {
17
17
  rebuildMemoryLifecycleLedger
18
- } from "./chunk-IOM5QSNR.js";
18
+ } from "./chunk-EKKAHJ4B.js";
19
19
  import {
20
20
  planNamespaceMaintenance,
21
21
  runNamespaceMaintenanceBatchPlan
22
- } from "./chunk-L3Z4NXDO.js";
22
+ } from "./chunk-O52WWLKU.js";
23
23
  import {
24
24
  rebuildMemoryProjection
25
- } from "./chunk-JSIQSZXI.js";
25
+ } from "./chunk-56GJLXBA.js";
26
26
  import {
27
27
  DEFAULT_TIMELINE_CATEGORIES,
28
28
  TIMELINE_RESERVED_IDLE,
@@ -2647,4 +2647,4 @@ export {
2647
2647
  ActivitySyncScheduler,
2648
2648
  MaintenanceScheduler
2649
2649
  };
2650
- //# sourceMappingURL=chunk-MAJ2OKE4.js.map
2650
+ //# sourceMappingURL=chunk-J7MDPTX7.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  listNamespaces
3
- } from "./chunk-GDI64ITR.js";
3
+ } from "./chunk-KWVI52ER.js";
4
4
  import {
5
5
  capabilityAllowsNamespace
6
6
  } from "./chunk-IG747LRN.js";
@@ -282,4 +282,4 @@ export {
282
282
  computeServiceCorpusWatermarks,
283
283
  computeServiceCorpusCensus
284
284
  };
285
- //# sourceMappingURL=chunk-5FNVK7MW.js.map
285
+ //# sourceMappingURL=chunk-JVNEXW6X.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-B7RWBZXW.js";
4
4
  import {
5
5
  StorageManager
6
- } from "./chunk-WJLGUY27.js";
6
+ } from "./chunk-BD5QEP3T.js";
7
7
  import {
8
8
  getCachedEpisodeMap,
9
9
  setCachedEpisodeMap
@@ -109,4 +109,4 @@ export {
109
109
  compareVerifiedEpisodeResults,
110
110
  searchVerifiedEpisodes
111
111
  };
112
- //# sourceMappingURL=chunk-IJWEXCWF.js.map
112
+ //# sourceMappingURL=chunk-JXWTPOMJ.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  rebuildMemoryProjection,
3
3
  watchProjectionRebuildParent
4
- } from "./chunk-JSIQSZXI.js";
4
+ } from "./chunk-56GJLXBA.js";
5
5
  import {
6
6
  initLogger,
7
7
  log
@@ -77,4 +77,4 @@ if (invokedAsRunner) {
77
77
  export {
78
78
  PROJECTION_REBUILD_RUNNER_FLAG
79
79
  };
80
- //# sourceMappingURL=chunk-3R6SLDTH.js.map
80
+ //# sourceMappingURL=chunk-KJOGIRMF.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  NamespaceStorageRouter
3
- } from "./chunk-RH6QEGCT.js";
3
+ } from "./chunk-D5UPBXZM.js";
4
4
  import {
5
5
  namespaceCollectionName
6
6
  } from "./chunk-7UX44C4N.js";
@@ -213,4 +213,4 @@ export {
213
213
  verifyNamespaces,
214
214
  runNamespaceMigration
215
215
  };
216
- //# sourceMappingURL=chunk-GDI64ITR.js.map
216
+ //# sourceMappingURL=chunk-KWVI52ER.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-TBBDFYXW.js";
4
4
  import {
5
5
  StorageManager
6
- } from "./chunk-WJLGUY27.js";
6
+ } from "./chunk-BD5QEP3T.js";
7
7
  import {
8
8
  bumpMemoryCorpusVersionForDir
9
9
  } from "./chunk-M5GVCJSJ.js";
@@ -765,4 +765,4 @@ export {
765
765
  listMemoryGovernanceRuns,
766
766
  readMemoryGovernanceRunArtifact
767
767
  };
768
- //# sourceMappingURL=chunk-AV46CT77.js.map
768
+ //# sourceMappingURL=chunk-KX36OCGK.js.map