chainlesschain 0.143.0 → 0.152.0

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 (227) hide show
  1. package/package.json +1 -1
  2. package/src/commands/a2a.js +196 -28
  3. package/src/commands/activitypub.js +364 -27
  4. package/src/commands/agent-network.js +217 -0
  5. package/src/commands/agent.js +587 -103
  6. package/src/commands/audit.js +206 -0
  7. package/src/commands/automation.js +201 -0
  8. package/src/commands/bi.js +355 -27
  9. package/src/commands/bm25.js +111 -27
  10. package/src/commands/browse.js +403 -29
  11. package/src/commands/ccron.js +128 -28
  12. package/src/commands/chat.js +207 -0
  13. package/src/commands/codegen.js +207 -0
  14. package/src/commands/collab.js +211 -0
  15. package/src/commands/compliance.js +824 -34
  16. package/src/commands/compt.js +127 -29
  17. package/src/commands/consol.js +8 -2
  18. package/src/commands/cowork.js +783 -34
  19. package/src/commands/crosschain.js +182 -28
  20. package/src/commands/dao.js +182 -28
  21. package/src/commands/dbevo.js +227 -0
  22. package/src/commands/dev.js +207 -0
  23. package/src/commands/did-v2.js +217 -0
  24. package/src/commands/did.js +221 -0
  25. package/src/commands/dlp.js +385 -27
  26. package/src/commands/economy.js +205 -50
  27. package/src/commands/evolution.js +203 -50
  28. package/src/commands/evomap.js +387 -27
  29. package/src/commands/export.js +213 -0
  30. package/src/commands/federation.js +209 -0
  31. package/src/commands/fflag.js +74 -22
  32. package/src/commands/fusion.js +205 -0
  33. package/src/commands/git.js +177 -37
  34. package/src/commands/governance.js +209 -0
  35. package/src/commands/hardening.js +209 -0
  36. package/src/commands/hmemory.js +204 -50
  37. package/src/commands/hook.js +209 -0
  38. package/src/commands/import.js +209 -0
  39. package/src/commands/incentive.js +209 -0
  40. package/src/commands/inference.js +170 -34
  41. package/src/commands/infra.js +203 -0
  42. package/src/commands/instinct.js +209 -0
  43. package/src/commands/ipfs.js +207 -0
  44. package/src/commands/itbudget.js +149 -33
  45. package/src/commands/kg.js +206 -0
  46. package/src/commands/llm.js +217 -0
  47. package/src/commands/lowcode.js +195 -38
  48. package/src/commands/marketplace.js +206 -0
  49. package/src/commands/matrix.js +386 -27
  50. package/src/commands/mcp.js +217 -0
  51. package/src/commands/mcpscaf.js +145 -33
  52. package/src/commands/meminj.js +145 -33
  53. package/src/commands/memory.js +209 -0
  54. package/src/commands/multimodal.js +203 -0
  55. package/src/commands/nlprog.js +225 -0
  56. package/src/commands/nostr.js +387 -27
  57. package/src/commands/note.js +205 -0
  58. package/src/commands/ops.js +219 -0
  59. package/src/commands/orchestrate.js +217 -0
  60. package/src/commands/orchgov.js +144 -33
  61. package/src/commands/org.js +209 -0
  62. package/src/commands/p2p.js +209 -0
  63. package/src/commands/pdfp.js +109 -27
  64. package/src/commands/perception.js +209 -0
  65. package/src/commands/perf.js +169 -32
  66. package/src/commands/perm.js +144 -33
  67. package/src/commands/permmem.js +203 -0
  68. package/src/commands/pipeline.js +207 -52
  69. package/src/commands/planmode.js +141 -32
  70. package/src/commands/plugin-ecosystem.js +209 -0
  71. package/src/commands/pqc.js +213 -0
  72. package/src/commands/privacy.js +203 -0
  73. package/src/commands/promcomp.js +111 -27
  74. package/src/commands/quantization.js +207 -0
  75. package/src/commands/rcache.js +205 -0
  76. package/src/commands/recommend.js +410 -34
  77. package/src/commands/reputation.js +208 -0
  78. package/src/commands/runtime.js +205 -0
  79. package/src/commands/sandbox.js +206 -0
  80. package/src/commands/scim.js +209 -0
  81. package/src/commands/seshhook.js +145 -33
  82. package/src/commands/seshsearch.js +141 -33
  83. package/src/commands/seshtail.js +144 -33
  84. package/src/commands/seshu.js +152 -33
  85. package/src/commands/session.js +209 -0
  86. package/src/commands/sganal.js +123 -29
  87. package/src/commands/siem.js +201 -34
  88. package/src/commands/skill.js +207 -0
  89. package/src/commands/sla.js +212 -0
  90. package/src/commands/slotfill.js +146 -33
  91. package/src/commands/social.js +358 -32
  92. package/src/commands/sso.js +209 -0
  93. package/src/commands/stress.js +206 -0
  94. package/src/commands/svccont.js +145 -33
  95. package/src/commands/sync.js +209 -0
  96. package/src/commands/tech.js +209 -0
  97. package/src/commands/tenant.js +217 -0
  98. package/src/commands/terraform.js +206 -0
  99. package/src/commands/tms.js +171 -33
  100. package/src/commands/tokens.js +209 -0
  101. package/src/commands/topiccls.js +146 -33
  102. package/src/commands/trust.js +217 -0
  103. package/src/commands/uprof.js +141 -32
  104. package/src/commands/vcheck.js +122 -28
  105. package/src/commands/wallet.js +209 -0
  106. package/src/commands/webfetch.js +141 -32
  107. package/src/commands/workflow.js +203 -0
  108. package/src/commands/zkp.js +184 -28
  109. package/src/index.js +180 -0
  110. package/src/lib/a2a-protocol.js +319 -51
  111. package/src/lib/activitypub-bridge.js +622 -50
  112. package/src/lib/agent-economy.js +304 -51
  113. package/src/lib/agent-network.js +341 -0
  114. package/src/lib/aiops.js +346 -0
  115. package/src/lib/app-builder.js +279 -46
  116. package/src/lib/audit-logger.js +321 -0
  117. package/src/lib/automation-engine.js +335 -0
  118. package/src/lib/autonomous-agent.js +284 -48
  119. package/src/lib/autonomous-developer.js +332 -0
  120. package/src/lib/bi-engine.js +616 -49
  121. package/src/lib/bm25-search.js +301 -49
  122. package/src/lib/browser-automation.js +630 -49
  123. package/src/lib/chat-core.js +336 -0
  124. package/src/lib/claude-code-bridge.js +341 -0
  125. package/src/lib/code-agent.js +339 -0
  126. package/src/lib/collaboration-governance.js +334 -0
  127. package/src/lib/community-governance.js +346 -0
  128. package/src/lib/compliance-framework-reporter.js +305 -51
  129. package/src/lib/compliance-manager.js +330 -0
  130. package/src/lib/compression-telemetry.js +301 -49
  131. package/src/lib/content-recommendation.js +351 -0
  132. package/src/lib/content-recommender.js +317 -52
  133. package/src/lib/cowork-cron.js +298 -49
  134. package/src/lib/cowork-learning.js +333 -0
  135. package/src/lib/cowork-share.js +338 -0
  136. package/src/lib/cowork-task-runner.js +308 -51
  137. package/src/lib/cowork-workflow.js +327 -0
  138. package/src/lib/cross-chain.js +311 -51
  139. package/src/lib/dao-governance.js +280 -46
  140. package/src/lib/dbevo.js +351 -0
  141. package/src/lib/decentral-infra.js +330 -0
  142. package/src/lib/did-manager.js +341 -0
  143. package/src/lib/did-v2-manager.js +341 -0
  144. package/src/lib/dlp-engine.js +626 -49
  145. package/src/lib/evolution-system.js +278 -47
  146. package/src/lib/evomap-governance.js +334 -0
  147. package/src/lib/evomap-manager.js +280 -46
  148. package/src/lib/execution-backend.js +294 -48
  149. package/src/lib/feature-flags.js +294 -49
  150. package/src/lib/federation-hardening.js +340 -0
  151. package/src/lib/git-integration.js +285 -47
  152. package/src/lib/hardening-manager.js +341 -0
  153. package/src/lib/hierarchical-memory.js +284 -48
  154. package/src/lib/hook-manager.js +341 -0
  155. package/src/lib/inference-network.js +308 -51
  156. package/src/lib/instinct-manager.js +346 -0
  157. package/src/lib/ipfs-storage.js +334 -0
  158. package/src/lib/iteration-budget.js +302 -50
  159. package/src/lib/knowledge-exporter.js +341 -0
  160. package/src/lib/knowledge-graph.js +333 -0
  161. package/src/lib/knowledge-importer.js +341 -0
  162. package/src/lib/llm-providers.js +346 -0
  163. package/src/lib/matrix-bridge.js +620 -47
  164. package/src/lib/mcp-registry.js +346 -0
  165. package/src/lib/mcp-scaffold.js +318 -54
  166. package/src/lib/memory-injection.js +288 -49
  167. package/src/lib/memory-manager.js +336 -0
  168. package/src/lib/multimodal.js +330 -0
  169. package/src/lib/nl-programming.js +341 -0
  170. package/src/lib/nostr-bridge.js +622 -49
  171. package/src/lib/note-versioning.js +339 -0
  172. package/src/lib/orchestrator.js +293 -48
  173. package/src/lib/org-manager.js +336 -0
  174. package/src/lib/p2p-manager.js +341 -0
  175. package/src/lib/pdf-parser.js +298 -49
  176. package/src/lib/perception.js +346 -0
  177. package/src/lib/perf-tuning.js +309 -50
  178. package/src/lib/permanent-memory.js +327 -0
  179. package/src/lib/permission-engine.js +287 -49
  180. package/src/lib/pipeline-orchestrator.js +289 -49
  181. package/src/lib/plan-mode.js +298 -51
  182. package/src/lib/plugin-ecosystem.js +346 -0
  183. package/src/lib/pqc-manager.js +346 -0
  184. package/src/lib/privacy-computing.js +335 -0
  185. package/src/lib/protocol-fusion.js +338 -0
  186. package/src/lib/quantization.js +337 -0
  187. package/src/lib/reputation-optimizer.js +340 -0
  188. package/src/lib/response-cache.js +333 -0
  189. package/src/lib/sandbox-v2.js +327 -0
  190. package/src/lib/scim-manager.js +346 -0
  191. package/src/lib/service-container.js +313 -52
  192. package/src/lib/session-consolidator.js +296 -49
  193. package/src/lib/session-hooks.js +312 -53
  194. package/src/lib/session-manager.js +334 -0
  195. package/src/lib/session-search.js +304 -51
  196. package/src/lib/session-tail.js +288 -49
  197. package/src/lib/session-usage.js +298 -52
  198. package/src/lib/siem-exporter.js +298 -51
  199. package/src/lib/skill-loader.js +334 -0
  200. package/src/lib/skill-marketplace.js +345 -0
  201. package/src/lib/sla-manager.js +341 -0
  202. package/src/lib/slot-filler.js +303 -51
  203. package/src/lib/social-graph-analytics.js +295 -49
  204. package/src/lib/social-graph.js +272 -49
  205. package/src/lib/social-manager.js +330 -0
  206. package/src/lib/sso-manager.js +340 -0
  207. package/src/lib/stress-tester.js +342 -0
  208. package/src/lib/sub-agent-registry.js +302 -53
  209. package/src/lib/sync-manager.js +336 -0
  210. package/src/lib/task-model-selector.js +302 -50
  211. package/src/lib/tech-learning-engine.js +341 -0
  212. package/src/lib/tenant-saas.js +341 -0
  213. package/src/lib/terraform-manager.js +333 -0
  214. package/src/lib/threat-intel.js +330 -0
  215. package/src/lib/todo-manager.js +281 -47
  216. package/src/lib/token-incentive.js +341 -0
  217. package/src/lib/token-tracker.js +336 -0
  218. package/src/lib/topic-classifier.js +297 -49
  219. package/src/lib/trust-security.js +343 -0
  220. package/src/lib/ueba.js +340 -0
  221. package/src/lib/universal-runtime.js +330 -0
  222. package/src/lib/user-profile.js +294 -50
  223. package/src/lib/version-checker.js +304 -50
  224. package/src/lib/wallet-manager.js +336 -0
  225. package/src/lib/web-fetch.js +292 -51
  226. package/src/lib/workflow-engine.js +330 -0
  227. package/src/lib/zkp-engine.js +286 -49
@@ -591,3 +591,337 @@ export function _resetStateSessionManagerV2() {
591
591
  _convIdleMsV2 = SESSION_DEFAULT_CONV_IDLE_MS;
592
592
  _turnStuckMsV2 = SESSION_DEFAULT_TURN_STUCK_MS;
593
593
  }
594
+
595
+ // =====================================================================
596
+ // session-manager V2 governance overlay (iter21)
597
+ // =====================================================================
598
+ export const SESGOV_PROFILE_MATURITY_V2 = Object.freeze({
599
+ PENDING: "pending",
600
+ ACTIVE: "active",
601
+ PAUSED: "paused",
602
+ ARCHIVED: "archived",
603
+ });
604
+ export const SESGOV_TURN_LIFECYCLE_V2 = Object.freeze({
605
+ QUEUED: "queued",
606
+ ADVANCING: "advancing",
607
+ ADVANCED: "advanced",
608
+ FAILED: "failed",
609
+ CANCELLED: "cancelled",
610
+ });
611
+ const _sesgovPTrans = new Map([
612
+ [
613
+ SESGOV_PROFILE_MATURITY_V2.PENDING,
614
+ new Set([
615
+ SESGOV_PROFILE_MATURITY_V2.ACTIVE,
616
+ SESGOV_PROFILE_MATURITY_V2.ARCHIVED,
617
+ ]),
618
+ ],
619
+ [
620
+ SESGOV_PROFILE_MATURITY_V2.ACTIVE,
621
+ new Set([
622
+ SESGOV_PROFILE_MATURITY_V2.PAUSED,
623
+ SESGOV_PROFILE_MATURITY_V2.ARCHIVED,
624
+ ]),
625
+ ],
626
+ [
627
+ SESGOV_PROFILE_MATURITY_V2.PAUSED,
628
+ new Set([
629
+ SESGOV_PROFILE_MATURITY_V2.ACTIVE,
630
+ SESGOV_PROFILE_MATURITY_V2.ARCHIVED,
631
+ ]),
632
+ ],
633
+ [SESGOV_PROFILE_MATURITY_V2.ARCHIVED, new Set()],
634
+ ]);
635
+ const _sesgovPTerminal = new Set([SESGOV_PROFILE_MATURITY_V2.ARCHIVED]);
636
+ const _sesgovJTrans = new Map([
637
+ [
638
+ SESGOV_TURN_LIFECYCLE_V2.QUEUED,
639
+ new Set([
640
+ SESGOV_TURN_LIFECYCLE_V2.ADVANCING,
641
+ SESGOV_TURN_LIFECYCLE_V2.CANCELLED,
642
+ ]),
643
+ ],
644
+ [
645
+ SESGOV_TURN_LIFECYCLE_V2.ADVANCING,
646
+ new Set([
647
+ SESGOV_TURN_LIFECYCLE_V2.ADVANCED,
648
+ SESGOV_TURN_LIFECYCLE_V2.FAILED,
649
+ SESGOV_TURN_LIFECYCLE_V2.CANCELLED,
650
+ ]),
651
+ ],
652
+ [SESGOV_TURN_LIFECYCLE_V2.ADVANCED, new Set()],
653
+ [SESGOV_TURN_LIFECYCLE_V2.FAILED, new Set()],
654
+ [SESGOV_TURN_LIFECYCLE_V2.CANCELLED, new Set()],
655
+ ]);
656
+ const _sesgovPsV2 = new Map();
657
+ const _sesgovJsV2 = new Map();
658
+ let _sesgovMaxActive = 8,
659
+ _sesgovMaxPending = 20,
660
+ _sesgovIdleMs = 30 * 24 * 60 * 60 * 1000,
661
+ _sesgovStuckMs = 60 * 1000;
662
+ function _sesgovPos(n, label) {
663
+ const v = Math.floor(Number(n));
664
+ if (!Number.isFinite(v) || v <= 0)
665
+ throw new Error(`${label} must be positive integer`);
666
+ return v;
667
+ }
668
+ function _sesgovCheckP(from, to) {
669
+ const a = _sesgovPTrans.get(from);
670
+ if (!a || !a.has(to))
671
+ throw new Error(`invalid sesgov profile transition ${from} → ${to}`);
672
+ }
673
+ function _sesgovCheckJ(from, to) {
674
+ const a = _sesgovJTrans.get(from);
675
+ if (!a || !a.has(to))
676
+ throw new Error(`invalid sesgov turn transition ${from} → ${to}`);
677
+ }
678
+ function _sesgovCountActive(owner) {
679
+ let c = 0;
680
+ for (const p of _sesgovPsV2.values())
681
+ if (p.owner === owner && p.status === SESGOV_PROFILE_MATURITY_V2.ACTIVE)
682
+ c++;
683
+ return c;
684
+ }
685
+ function _sesgovCountPending(profileId) {
686
+ let c = 0;
687
+ for (const j of _sesgovJsV2.values())
688
+ if (
689
+ j.profileId === profileId &&
690
+ (j.status === SESGOV_TURN_LIFECYCLE_V2.QUEUED ||
691
+ j.status === SESGOV_TURN_LIFECYCLE_V2.ADVANCING)
692
+ )
693
+ c++;
694
+ return c;
695
+ }
696
+ export function setMaxActiveSesgovProfilesPerOwnerV2(n) {
697
+ _sesgovMaxActive = _sesgovPos(n, "maxActiveSesgovProfilesPerOwner");
698
+ }
699
+ export function getMaxActiveSesgovProfilesPerOwnerV2() {
700
+ return _sesgovMaxActive;
701
+ }
702
+ export function setMaxPendingSesgovTurnsPerProfileV2(n) {
703
+ _sesgovMaxPending = _sesgovPos(n, "maxPendingSesgovTurnsPerProfile");
704
+ }
705
+ export function getMaxPendingSesgovTurnsPerProfileV2() {
706
+ return _sesgovMaxPending;
707
+ }
708
+ export function setSesgovProfileIdleMsV2(n) {
709
+ _sesgovIdleMs = _sesgovPos(n, "sesgovProfileIdleMs");
710
+ }
711
+ export function getSesgovProfileIdleMsV2() {
712
+ return _sesgovIdleMs;
713
+ }
714
+ export function setSesgovTurnStuckMsV2(n) {
715
+ _sesgovStuckMs = _sesgovPos(n, "sesgovTurnStuckMs");
716
+ }
717
+ export function getSesgovTurnStuckMsV2() {
718
+ return _sesgovStuckMs;
719
+ }
720
+ export function _resetStateSessionManagerGovV2() {
721
+ _sesgovPsV2.clear();
722
+ _sesgovJsV2.clear();
723
+ _sesgovMaxActive = 8;
724
+ _sesgovMaxPending = 20;
725
+ _sesgovIdleMs = 30 * 24 * 60 * 60 * 1000;
726
+ _sesgovStuckMs = 60 * 1000;
727
+ }
728
+ export function registerSesgovProfileV2({ id, owner, channel, metadata } = {}) {
729
+ if (!id || !owner) throw new Error("id and owner required");
730
+ if (_sesgovPsV2.has(id))
731
+ throw new Error(`sesgov profile ${id} already exists`);
732
+ const now = Date.now();
733
+ const p = {
734
+ id,
735
+ owner,
736
+ channel: channel || "default",
737
+ status: SESGOV_PROFILE_MATURITY_V2.PENDING,
738
+ createdAt: now,
739
+ updatedAt: now,
740
+ lastTouchedAt: now,
741
+ activatedAt: null,
742
+ archivedAt: null,
743
+ metadata: { ...(metadata || {}) },
744
+ };
745
+ _sesgovPsV2.set(id, p);
746
+ return { ...p, metadata: { ...p.metadata } };
747
+ }
748
+ export function activateSesgovProfileV2(id) {
749
+ const p = _sesgovPsV2.get(id);
750
+ if (!p) throw new Error(`sesgov profile ${id} not found`);
751
+ const isInitial = p.status === SESGOV_PROFILE_MATURITY_V2.PENDING;
752
+ _sesgovCheckP(p.status, SESGOV_PROFILE_MATURITY_V2.ACTIVE);
753
+ if (isInitial && _sesgovCountActive(p.owner) >= _sesgovMaxActive)
754
+ throw new Error(`max active sesgov profiles for owner ${p.owner} reached`);
755
+ const now = Date.now();
756
+ p.status = SESGOV_PROFILE_MATURITY_V2.ACTIVE;
757
+ p.updatedAt = now;
758
+ p.lastTouchedAt = now;
759
+ if (!p.activatedAt) p.activatedAt = now;
760
+ return { ...p, metadata: { ...p.metadata } };
761
+ }
762
+ export function pauseSesgovProfileV2(id) {
763
+ const p = _sesgovPsV2.get(id);
764
+ if (!p) throw new Error(`sesgov profile ${id} not found`);
765
+ _sesgovCheckP(p.status, SESGOV_PROFILE_MATURITY_V2.PAUSED);
766
+ p.status = SESGOV_PROFILE_MATURITY_V2.PAUSED;
767
+ p.updatedAt = Date.now();
768
+ return { ...p, metadata: { ...p.metadata } };
769
+ }
770
+ export function archiveSesgovProfileV2(id) {
771
+ const p = _sesgovPsV2.get(id);
772
+ if (!p) throw new Error(`sesgov profile ${id} not found`);
773
+ _sesgovCheckP(p.status, SESGOV_PROFILE_MATURITY_V2.ARCHIVED);
774
+ const now = Date.now();
775
+ p.status = SESGOV_PROFILE_MATURITY_V2.ARCHIVED;
776
+ p.updatedAt = now;
777
+ if (!p.archivedAt) p.archivedAt = now;
778
+ return { ...p, metadata: { ...p.metadata } };
779
+ }
780
+ export function touchSesgovProfileV2(id) {
781
+ const p = _sesgovPsV2.get(id);
782
+ if (!p) throw new Error(`sesgov profile ${id} not found`);
783
+ if (_sesgovPTerminal.has(p.status))
784
+ throw new Error(`cannot touch terminal sesgov profile ${id}`);
785
+ const now = Date.now();
786
+ p.lastTouchedAt = now;
787
+ p.updatedAt = now;
788
+ return { ...p, metadata: { ...p.metadata } };
789
+ }
790
+ export function getSesgovProfileV2(id) {
791
+ const p = _sesgovPsV2.get(id);
792
+ if (!p) return null;
793
+ return { ...p, metadata: { ...p.metadata } };
794
+ }
795
+ export function listSesgovProfilesV2() {
796
+ return [..._sesgovPsV2.values()].map((p) => ({
797
+ ...p,
798
+ metadata: { ...p.metadata },
799
+ }));
800
+ }
801
+ export function createSesgovTurnV2({ id, profileId, topic, metadata } = {}) {
802
+ if (!id || !profileId) throw new Error("id and profileId required");
803
+ if (_sesgovJsV2.has(id)) throw new Error(`sesgov turn ${id} already exists`);
804
+ if (!_sesgovPsV2.has(profileId))
805
+ throw new Error(`sesgov profile ${profileId} not found`);
806
+ if (_sesgovCountPending(profileId) >= _sesgovMaxPending)
807
+ throw new Error(
808
+ `max pending sesgov turns for profile ${profileId} reached`,
809
+ );
810
+ const now = Date.now();
811
+ const j = {
812
+ id,
813
+ profileId,
814
+ topic: topic || "",
815
+ status: SESGOV_TURN_LIFECYCLE_V2.QUEUED,
816
+ createdAt: now,
817
+ updatedAt: now,
818
+ startedAt: null,
819
+ settledAt: null,
820
+ metadata: { ...(metadata || {}) },
821
+ };
822
+ _sesgovJsV2.set(id, j);
823
+ return { ...j, metadata: { ...j.metadata } };
824
+ }
825
+ export function advancingSesgovTurnV2(id) {
826
+ const j = _sesgovJsV2.get(id);
827
+ if (!j) throw new Error(`sesgov turn ${id} not found`);
828
+ _sesgovCheckJ(j.status, SESGOV_TURN_LIFECYCLE_V2.ADVANCING);
829
+ const now = Date.now();
830
+ j.status = SESGOV_TURN_LIFECYCLE_V2.ADVANCING;
831
+ j.updatedAt = now;
832
+ if (!j.startedAt) j.startedAt = now;
833
+ return { ...j, metadata: { ...j.metadata } };
834
+ }
835
+ export function completeTurnSesgovV2(id) {
836
+ const j = _sesgovJsV2.get(id);
837
+ if (!j) throw new Error(`sesgov turn ${id} not found`);
838
+ _sesgovCheckJ(j.status, SESGOV_TURN_LIFECYCLE_V2.ADVANCED);
839
+ const now = Date.now();
840
+ j.status = SESGOV_TURN_LIFECYCLE_V2.ADVANCED;
841
+ j.updatedAt = now;
842
+ if (!j.settledAt) j.settledAt = now;
843
+ return { ...j, metadata: { ...j.metadata } };
844
+ }
845
+ export function failSesgovTurnV2(id, reason) {
846
+ const j = _sesgovJsV2.get(id);
847
+ if (!j) throw new Error(`sesgov turn ${id} not found`);
848
+ _sesgovCheckJ(j.status, SESGOV_TURN_LIFECYCLE_V2.FAILED);
849
+ const now = Date.now();
850
+ j.status = SESGOV_TURN_LIFECYCLE_V2.FAILED;
851
+ j.updatedAt = now;
852
+ if (!j.settledAt) j.settledAt = now;
853
+ if (reason) j.metadata.failReason = String(reason);
854
+ return { ...j, metadata: { ...j.metadata } };
855
+ }
856
+ export function cancelSesgovTurnV2(id, reason) {
857
+ const j = _sesgovJsV2.get(id);
858
+ if (!j) throw new Error(`sesgov turn ${id} not found`);
859
+ _sesgovCheckJ(j.status, SESGOV_TURN_LIFECYCLE_V2.CANCELLED);
860
+ const now = Date.now();
861
+ j.status = SESGOV_TURN_LIFECYCLE_V2.CANCELLED;
862
+ j.updatedAt = now;
863
+ if (!j.settledAt) j.settledAt = now;
864
+ if (reason) j.metadata.cancelReason = String(reason);
865
+ return { ...j, metadata: { ...j.metadata } };
866
+ }
867
+ export function getSesgovTurnV2(id) {
868
+ const j = _sesgovJsV2.get(id);
869
+ if (!j) return null;
870
+ return { ...j, metadata: { ...j.metadata } };
871
+ }
872
+ export function listSesgovTurnsV2() {
873
+ return [..._sesgovJsV2.values()].map((j) => ({
874
+ ...j,
875
+ metadata: { ...j.metadata },
876
+ }));
877
+ }
878
+ export function autoPauseIdleSesgovProfilesV2({ now } = {}) {
879
+ const t = now ?? Date.now();
880
+ const flipped = [];
881
+ for (const p of _sesgovPsV2.values())
882
+ if (
883
+ p.status === SESGOV_PROFILE_MATURITY_V2.ACTIVE &&
884
+ t - p.lastTouchedAt >= _sesgovIdleMs
885
+ ) {
886
+ p.status = SESGOV_PROFILE_MATURITY_V2.PAUSED;
887
+ p.updatedAt = t;
888
+ flipped.push(p.id);
889
+ }
890
+ return { flipped, count: flipped.length };
891
+ }
892
+ export function autoFailStuckSesgovTurnsV2({ now } = {}) {
893
+ const t = now ?? Date.now();
894
+ const flipped = [];
895
+ for (const j of _sesgovJsV2.values())
896
+ if (
897
+ j.status === SESGOV_TURN_LIFECYCLE_V2.ADVANCING &&
898
+ j.startedAt != null &&
899
+ t - j.startedAt >= _sesgovStuckMs
900
+ ) {
901
+ j.status = SESGOV_TURN_LIFECYCLE_V2.FAILED;
902
+ j.updatedAt = t;
903
+ if (!j.settledAt) j.settledAt = t;
904
+ j.metadata.failReason = "auto-fail-stuck";
905
+ flipped.push(j.id);
906
+ }
907
+ return { flipped, count: flipped.length };
908
+ }
909
+ export function getSessionManagerGovStatsV2() {
910
+ const profilesByStatus = {};
911
+ for (const v of Object.values(SESGOV_PROFILE_MATURITY_V2))
912
+ profilesByStatus[v] = 0;
913
+ for (const p of _sesgovPsV2.values()) profilesByStatus[p.status]++;
914
+ const turnsByStatus = {};
915
+ for (const v of Object.values(SESGOV_TURN_LIFECYCLE_V2)) turnsByStatus[v] = 0;
916
+ for (const j of _sesgovJsV2.values()) turnsByStatus[j.status]++;
917
+ return {
918
+ totalSesgovProfilesV2: _sesgovPsV2.size,
919
+ totalSesgovTurnsV2: _sesgovJsV2.size,
920
+ maxActiveSesgovProfilesPerOwner: _sesgovMaxActive,
921
+ maxPendingSesgovTurnsPerProfile: _sesgovMaxPending,
922
+ sesgovProfileIdleMs: _sesgovIdleMs,
923
+ sesgovTurnStuckMs: _sesgovStuckMs,
924
+ profilesByStatus,
925
+ turnsByStatus,
926
+ };
927
+ }