instar 1.3.469 → 1.3.471

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 (52) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +76 -9
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/config/ConfigDefaults.d.ts.map +1 -1
  5. package/dist/config/ConfigDefaults.js +28 -0
  6. package/dist/config/ConfigDefaults.js.map +1 -1
  7. package/dist/core/CartographerSweepEngine.d.ts +122 -0
  8. package/dist/core/CartographerSweepEngine.d.ts.map +1 -0
  9. package/dist/core/CartographerSweepEngine.js +454 -0
  10. package/dist/core/CartographerSweepEngine.js.map +1 -0
  11. package/dist/core/CartographerTree.d.ts +95 -0
  12. package/dist/core/CartographerTree.d.ts.map +1 -1
  13. package/dist/core/CartographerTree.js +147 -0
  14. package/dist/core/CartographerTree.js.map +1 -1
  15. package/dist/core/IntelligenceRouter.d.ts +7 -0
  16. package/dist/core/IntelligenceRouter.d.ts.map +1 -1
  17. package/dist/core/IntelligenceRouter.js +9 -0
  18. package/dist/core/IntelligenceRouter.js.map +1 -1
  19. package/dist/core/PostUpdateMigrator.d.ts +15 -0
  20. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  21. package/dist/core/PostUpdateMigrator.js +49 -0
  22. package/dist/core/PostUpdateMigrator.js.map +1 -1
  23. package/dist/core/cartographerSummary.d.ts +62 -0
  24. package/dist/core/cartographerSummary.d.ts.map +1 -0
  25. package/dist/core/cartographerSummary.js +0 -0
  26. package/dist/core/cartographerSummary.js.map +1 -0
  27. package/dist/core/componentCategories.d.ts.map +1 -1
  28. package/dist/core/componentCategories.js +7 -0
  29. package/dist/core/componentCategories.js.map +1 -1
  30. package/dist/monitoring/CartographerSweepPoller.d.ts +61 -0
  31. package/dist/monitoring/CartographerSweepPoller.d.ts.map +1 -0
  32. package/dist/monitoring/CartographerSweepPoller.js +211 -0
  33. package/dist/monitoring/CartographerSweepPoller.js.map +1 -0
  34. package/dist/monitoring/HostPressureSampler.d.ts +21 -0
  35. package/dist/monitoring/HostPressureSampler.d.ts.map +1 -0
  36. package/dist/monitoring/HostPressureSampler.js +44 -0
  37. package/dist/monitoring/HostPressureSampler.js.map +1 -0
  38. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  39. package/dist/server/CapabilityIndex.js +2 -1
  40. package/dist/server/CapabilityIndex.js.map +1 -1
  41. package/dist/server/routes.d.ts.map +1 -1
  42. package/dist/server/routes.js +97 -1
  43. package/dist/server/routes.js.map +1 -1
  44. package/package.json +1 -1
  45. package/scripts/cartographer-freshness.mjs +209 -0
  46. package/scripts/lint-no-direct-destructive.js +6 -0
  47. package/skills/spec-converge/SKILL.md +1 -1
  48. package/src/data/builtin-manifest.json +63 -63
  49. package/upgrades/1.3.470.md +27 -0
  50. package/upgrades/1.3.471.md +50 -0
  51. package/upgrades/side-effects/cartographer-doc-freshness.md +112 -0
  52. package/upgrades/side-effects/spec-converge-foundation-audit.md +92 -0
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAcH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAS3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AAuBjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAmG7D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAsBtD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAUT;AAyID,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA65BD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,cAAc,EAC9B,YAAY,CAAC,EAAE,YAAY,EAC3B,WAAW,CAAC,EAAE,WAAW,EACzB,WAAW,CAAC,EAAE,WAAW,EACzB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAGvE,UAAU,CAAC,EAAE,MAAM,OAAO,8BAA8B,EAAE,WAAW,GAAG,IAAI,EAK5E,qBAAqB,CAAC,EAAE,MAAM,OAAO,gCAAgC,EAAE,kBAAkB,GAAG,IAAI,EAKhG,mBAAmB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,GACpD,IAAI,CA0UN;AA2lBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAo9UtE;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDzE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD5E"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAcH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAS3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AAuBjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAmG7D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAsBtD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAUT;AAyID,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA65BD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,cAAc,EAC9B,YAAY,CAAC,EAAE,YAAY,EAC3B,WAAW,CAAC,EAAE,WAAW,EACzB,WAAW,CAAC,EAAE,WAAW,EACzB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAGvE,UAAU,CAAC,EAAE,MAAM,OAAO,8BAA8B,EAAE,WAAW,GAAG,IAAI,EAK5E,qBAAqB,CAAC,EAAE,MAAM,OAAO,gCAAgC,EAAE,kBAAkB,GAAG,IAAI,EAKhG,mBAAmB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,GACpD,IAAI,CA0UN;AA2lBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAohVtE;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDzE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD5E"}
@@ -7763,6 +7763,75 @@ export async function startServer(options) {
7763
7763
  : null;
7764
7764
  if (cartographer)
7765
7765
  console.log(pc.green(' Cartographer doc-tree enabled'));
7766
+ // Cartographer doc-freshness sweep (spec #2). In-process poller that authors
7767
+ // stale/never-authored node summaries on a LIGHT model routed OFF Claude.
7768
+ // Ships dark behind freshnessSweep.enabled AND egressAcknowledged (off-Claude
7769
+ // authoring transmits source content to a third-party framework — a separate
7770
+ // consent gate). The off-Claude guarantee needs the IntelligenceRouter
7771
+ // (router.for + defaultFramework); if routing is an unrouted provider the
7772
+ // sweep refuses to start (it could not enforce off-Claude).
7773
+ let cartographerSweepPoller = null;
7774
+ if (cartographer) {
7775
+ const fsCfg = config.cartographer?.freshnessSweep;
7776
+ const num = (v, d) => (typeof v === 'number' && Number.isFinite(v) ? v : d);
7777
+ if (fsCfg?.enabled && fsCfg?.egressAcknowledged && sharedLlmQueue) {
7778
+ const routerLike = sharedIntelligence &&
7779
+ typeof sharedIntelligence.for === 'function' &&
7780
+ typeof sharedIntelligence.defaultFramework === 'string'
7781
+ ? sharedIntelligence
7782
+ : null;
7783
+ if (!routerLike) {
7784
+ console.log(pc.yellow(' Cartographer sweep: NOT started (off-Claude routing requires the IntelligenceRouter)'));
7785
+ }
7786
+ else {
7787
+ const { CartographerSweepEngine } = await import('../core/CartographerSweepEngine.js');
7788
+ const { CartographerSweepPoller } = await import('../monitoring/CartographerSweepPoller.js');
7789
+ const { sampleHostPressure: _sampleHostPressure } = await import('../monitoring/HostPressureSampler.js');
7790
+ const rcfg = config.monitoring?.sessionReaper;
7791
+ const engine = new CartographerSweepEngine({
7792
+ tree: cartographer,
7793
+ router: routerLike,
7794
+ llmQueue: sharedLlmQueue,
7795
+ pressure: () => _sampleHostPressure({
7796
+ cpuModerateLoadPerCore: rcfg?.cpuModerateLoadPerCore ?? 1.0,
7797
+ cpuCriticalLoadPerCore: rcfg?.cpuCriticalLoadPerCore ?? 1.5,
7798
+ }),
7799
+ // Author ONLY on the lease holder (multi-machine N× burn fix); single-machine ⇒ always holder.
7800
+ holdsLease: () => (leaseCoordinatorRef ? leaseCoordinatorRef.holdsLease() : true),
7801
+ config: {
7802
+ maxNodesPerPass: num(fsCfg.maxNodesPerPass, 25),
7803
+ maxCentsPerPass: num(fsCfg.maxCentsPerPass, 25),
7804
+ estCentsPerAuthor: num(fsCfg.estCentsPerAuthor, 1),
7805
+ maxLeafBytes: num(fsCfg.maxLeafBytes, 24576),
7806
+ minSummaryChars: num(fsCfg.minSummaryChars, 24),
7807
+ maxSummaryChars: num(fsCfg.maxSummaryChars, 600),
7808
+ allowClaudeFallback: fsCfg.allowClaudeFallback === true,
7809
+ nodeFailQuarantineThreshold: num(fsCfg.nodeFailQuarantineThreshold, 3),
7810
+ maxDeferredPasses: num(fsCfg.maxDeferredPasses, 5),
7811
+ revalidateSamplePerPass: num(fsCfg.revalidateSamplePerPass, 2),
7812
+ minNodesUnderPressure: num(fsCfg.minNodesUnderPressure, 3),
7813
+ },
7814
+ stateDir: config.stateDir,
7815
+ log: (m) => console.log(pc.gray(m)),
7816
+ });
7817
+ cartographerSweepPoller = new CartographerSweepPoller({
7818
+ engine,
7819
+ cadenceMs: num(fsCfg.cadenceMs, 600000),
7820
+ idleCadenceMs: num(fsCfg.idleCadenceMs, 1800000),
7821
+ zeroProgressTicksToBreak: num(fsCfg.zeroProgressTicksToBreak, 3),
7822
+ breakerReescalateHours: num(fsCfg.breakerReescalateHours, 6),
7823
+ log: (m) => console.log(pc.gray(m)),
7824
+ reportDegradation: (d) => { try {
7825
+ DegradationReporter.getInstance().report(d);
7826
+ }
7827
+ catch { /* never break boot on a report */ } },
7828
+ });
7829
+ cartographerSweepPoller.start();
7830
+ console.log(pc.green(' Cartographer doc-freshness sweep enabled (off-Claude, lease-gated)'));
7831
+ }
7832
+ }
7833
+ }
7834
+ void cartographerSweepPoller;
7766
7835
  // Self-Knowledge Tree — tree-based agent self-knowledge with LLM triage
7767
7836
  let selfKnowledgeTree;
7768
7837
  let coverageAuditor;
@@ -9749,7 +9818,8 @@ export async function startServer(options) {
9749
9818
  // for v1 (advisory; spawn-denial-primary is a tracked follow-up) — and note
9750
9819
  // an over-eager tier can only reap a GENUINELY-idle session sooner, never a
9751
9820
  // working one (the classifier protects working sessions regardless of tier).
9752
- const { SessionReaper, computePressure, reaperAuditSink } = await import('../monitoring/SessionReaper.js');
9821
+ const { SessionReaper, reaperAuditSink } = await import('../monitoring/SessionReaper.js');
9822
+ const { sampleHostPressure } = await import('../monitoring/HostPressureSampler.js');
9753
9823
  const _os = await import('node:os');
9754
9824
  const _resolveTopic = (tmuxSession) => {
9755
9825
  const t = telegram?.getTopicForSession(tmuxSession);
@@ -9848,15 +9918,12 @@ export async function startServer(options) {
9848
9918
  catch { /* @silent-fallback-ok — best-effort; clock resets next restart on failure */ }
9849
9919
  },
9850
9920
  pressure: () => {
9851
- const total = _os.totalmem();
9852
- const freePct = total > 0 ? (_os.freemem() / total) * 100 : 100;
9853
- // CPU pressure: 1-min load average ÷ core count. The overall tier is the
9854
- // WORST of memory and CPU, so a CPU-bound box (the common case) raises
9855
- // pressure even when free memory is fine. cores unknown ⇒ memory-only.
9856
- const cores = _os.cpus()?.length ?? 0;
9857
- const loadPerCore = cores > 0 ? _os.loadavg()[0] / cores : null;
9921
+ // Behavior-preserving: the host CPU+memory pressure computation lives in
9922
+ // the shared HostPressureSampler (so the SessionReaper and the
9923
+ // CartographerSweepPoller read ONE definition of host pressure and cannot
9924
+ // drift). Identical math to the prior inline code; same reaper thresholds.
9858
9925
  const rcfg = config.monitoring?.sessionReaper;
9859
- return computePressure({ freePct, loadPerCore }, {
9926
+ return sampleHostPressure({
9860
9927
  cpuModerateLoadPerCore: rcfg?.cpuModerateLoadPerCore ?? 1.0,
9861
9928
  cpuCriticalLoadPerCore: rcfg?.cpuCriticalLoadPerCore ?? 1.5,
9862
9929
  });