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
@@ -524,3 +524,337 @@ export function getGovernanceStatsV2() {
524
524
  byType,
525
525
  };
526
526
  }
527
+
528
+ // =====================================================================
529
+ // evomap-governance V2 governance overlay (iter20)
530
+ // =====================================================================
531
+ export const EVGOV_PROFILE_MATURITY_V2 = Object.freeze({
532
+ PENDING: "pending",
533
+ ACTIVE: "active",
534
+ PAUSED: "paused",
535
+ ARCHIVED: "archived",
536
+ });
537
+ export const EVGOV_PROPOSAL_LIFECYCLE_V2 = Object.freeze({
538
+ QUEUED: "queued",
539
+ REVIEWING: "reviewing",
540
+ REVIEWED: "reviewed",
541
+ FAILED: "failed",
542
+ CANCELLED: "cancelled",
543
+ });
544
+ const _evgovPTrans = new Map([
545
+ [
546
+ EVGOV_PROFILE_MATURITY_V2.PENDING,
547
+ new Set([
548
+ EVGOV_PROFILE_MATURITY_V2.ACTIVE,
549
+ EVGOV_PROFILE_MATURITY_V2.ARCHIVED,
550
+ ]),
551
+ ],
552
+ [
553
+ EVGOV_PROFILE_MATURITY_V2.ACTIVE,
554
+ new Set([
555
+ EVGOV_PROFILE_MATURITY_V2.PAUSED,
556
+ EVGOV_PROFILE_MATURITY_V2.ARCHIVED,
557
+ ]),
558
+ ],
559
+ [
560
+ EVGOV_PROFILE_MATURITY_V2.PAUSED,
561
+ new Set([
562
+ EVGOV_PROFILE_MATURITY_V2.ACTIVE,
563
+ EVGOV_PROFILE_MATURITY_V2.ARCHIVED,
564
+ ]),
565
+ ],
566
+ [EVGOV_PROFILE_MATURITY_V2.ARCHIVED, new Set()],
567
+ ]);
568
+ const _evgovPTerminal = new Set([EVGOV_PROFILE_MATURITY_V2.ARCHIVED]);
569
+ const _evgovJTrans = new Map([
570
+ [
571
+ EVGOV_PROPOSAL_LIFECYCLE_V2.QUEUED,
572
+ new Set([
573
+ EVGOV_PROPOSAL_LIFECYCLE_V2.REVIEWING,
574
+ EVGOV_PROPOSAL_LIFECYCLE_V2.CANCELLED,
575
+ ]),
576
+ ],
577
+ [
578
+ EVGOV_PROPOSAL_LIFECYCLE_V2.REVIEWING,
579
+ new Set([
580
+ EVGOV_PROPOSAL_LIFECYCLE_V2.REVIEWED,
581
+ EVGOV_PROPOSAL_LIFECYCLE_V2.FAILED,
582
+ EVGOV_PROPOSAL_LIFECYCLE_V2.CANCELLED,
583
+ ]),
584
+ ],
585
+ [EVGOV_PROPOSAL_LIFECYCLE_V2.REVIEWED, new Set()],
586
+ [EVGOV_PROPOSAL_LIFECYCLE_V2.FAILED, new Set()],
587
+ [EVGOV_PROPOSAL_LIFECYCLE_V2.CANCELLED, new Set()],
588
+ ]);
589
+ const _evgovPsV2 = new Map();
590
+ const _evgovJsV2 = new Map();
591
+ let _evgovMaxActive = 6,
592
+ _evgovMaxPending = 15,
593
+ _evgovIdleMs = 30 * 24 * 60 * 60 * 1000,
594
+ _evgovStuckMs = 60 * 1000;
595
+ function _evgovPos(n, label) {
596
+ const v = Math.floor(Number(n));
597
+ if (!Number.isFinite(v) || v <= 0)
598
+ throw new Error(`${label} must be positive integer`);
599
+ return v;
600
+ }
601
+ function _evgovCheckP(from, to) {
602
+ const a = _evgovPTrans.get(from);
603
+ if (!a || !a.has(to))
604
+ throw new Error(`invalid evgov profile transition ${from} → ${to}`);
605
+ }
606
+ function _evgovCheckJ(from, to) {
607
+ const a = _evgovJTrans.get(from);
608
+ if (!a || !a.has(to))
609
+ throw new Error(`invalid evgov proposal transition ${from} → ${to}`);
610
+ }
611
+ function _evgovCountActive(owner) {
612
+ let c = 0;
613
+ for (const p of _evgovPsV2.values())
614
+ if (p.owner === owner && p.status === EVGOV_PROFILE_MATURITY_V2.ACTIVE) c++;
615
+ return c;
616
+ }
617
+ function _evgovCountPending(profileId) {
618
+ let c = 0;
619
+ for (const j of _evgovJsV2.values())
620
+ if (
621
+ j.profileId === profileId &&
622
+ (j.status === EVGOV_PROPOSAL_LIFECYCLE_V2.QUEUED ||
623
+ j.status === EVGOV_PROPOSAL_LIFECYCLE_V2.REVIEWING)
624
+ )
625
+ c++;
626
+ return c;
627
+ }
628
+ export function setMaxActiveEvgovProfilesPerOwnerV2(n) {
629
+ _evgovMaxActive = _evgovPos(n, "maxActiveEvgovProfilesPerOwner");
630
+ }
631
+ export function getMaxActiveEvgovProfilesPerOwnerV2() {
632
+ return _evgovMaxActive;
633
+ }
634
+ export function setMaxPendingEvgovProposalsPerProfileV2(n) {
635
+ _evgovMaxPending = _evgovPos(n, "maxPendingEvgovProposalsPerProfile");
636
+ }
637
+ export function getMaxPendingEvgovProposalsPerProfileV2() {
638
+ return _evgovMaxPending;
639
+ }
640
+ export function setEvgovProfileIdleMsV2(n) {
641
+ _evgovIdleMs = _evgovPos(n, "evgovProfileIdleMs");
642
+ }
643
+ export function getEvgovProfileIdleMsV2() {
644
+ return _evgovIdleMs;
645
+ }
646
+ export function setEvgovProposalStuckMsV2(n) {
647
+ _evgovStuckMs = _evgovPos(n, "evgovProposalStuckMs");
648
+ }
649
+ export function getEvgovProposalStuckMsV2() {
650
+ return _evgovStuckMs;
651
+ }
652
+ export function _resetStateEvomapGovernanceGovV2() {
653
+ _evgovPsV2.clear();
654
+ _evgovJsV2.clear();
655
+ _evgovMaxActive = 6;
656
+ _evgovMaxPending = 15;
657
+ _evgovIdleMs = 30 * 24 * 60 * 60 * 1000;
658
+ _evgovStuckMs = 60 * 1000;
659
+ }
660
+ export function registerEvgovProfileV2({ id, owner, lane, metadata } = {}) {
661
+ if (!id || !owner) throw new Error("id and owner required");
662
+ if (_evgovPsV2.has(id)) throw new Error(`evgov profile ${id} already exists`);
663
+ const now = Date.now();
664
+ const p = {
665
+ id,
666
+ owner,
667
+ lane: lane || "core",
668
+ status: EVGOV_PROFILE_MATURITY_V2.PENDING,
669
+ createdAt: now,
670
+ updatedAt: now,
671
+ lastTouchedAt: now,
672
+ activatedAt: null,
673
+ archivedAt: null,
674
+ metadata: { ...(metadata || {}) },
675
+ };
676
+ _evgovPsV2.set(id, p);
677
+ return { ...p, metadata: { ...p.metadata } };
678
+ }
679
+ export function activateEvgovProfileV2(id) {
680
+ const p = _evgovPsV2.get(id);
681
+ if (!p) throw new Error(`evgov profile ${id} not found`);
682
+ const isInitial = p.status === EVGOV_PROFILE_MATURITY_V2.PENDING;
683
+ _evgovCheckP(p.status, EVGOV_PROFILE_MATURITY_V2.ACTIVE);
684
+ if (isInitial && _evgovCountActive(p.owner) >= _evgovMaxActive)
685
+ throw new Error(`max active evgov profiles for owner ${p.owner} reached`);
686
+ const now = Date.now();
687
+ p.status = EVGOV_PROFILE_MATURITY_V2.ACTIVE;
688
+ p.updatedAt = now;
689
+ p.lastTouchedAt = now;
690
+ if (!p.activatedAt) p.activatedAt = now;
691
+ return { ...p, metadata: { ...p.metadata } };
692
+ }
693
+ export function pauseEvgovProfileV2(id) {
694
+ const p = _evgovPsV2.get(id);
695
+ if (!p) throw new Error(`evgov profile ${id} not found`);
696
+ _evgovCheckP(p.status, EVGOV_PROFILE_MATURITY_V2.PAUSED);
697
+ p.status = EVGOV_PROFILE_MATURITY_V2.PAUSED;
698
+ p.updatedAt = Date.now();
699
+ return { ...p, metadata: { ...p.metadata } };
700
+ }
701
+ export function archiveEvgovProfileV2(id) {
702
+ const p = _evgovPsV2.get(id);
703
+ if (!p) throw new Error(`evgov profile ${id} not found`);
704
+ _evgovCheckP(p.status, EVGOV_PROFILE_MATURITY_V2.ARCHIVED);
705
+ const now = Date.now();
706
+ p.status = EVGOV_PROFILE_MATURITY_V2.ARCHIVED;
707
+ p.updatedAt = now;
708
+ if (!p.archivedAt) p.archivedAt = now;
709
+ return { ...p, metadata: { ...p.metadata } };
710
+ }
711
+ export function touchEvgovProfileV2(id) {
712
+ const p = _evgovPsV2.get(id);
713
+ if (!p) throw new Error(`evgov profile ${id} not found`);
714
+ if (_evgovPTerminal.has(p.status))
715
+ throw new Error(`cannot touch terminal evgov profile ${id}`);
716
+ const now = Date.now();
717
+ p.lastTouchedAt = now;
718
+ p.updatedAt = now;
719
+ return { ...p, metadata: { ...p.metadata } };
720
+ }
721
+ export function getEvgovProfileV2(id) {
722
+ const p = _evgovPsV2.get(id);
723
+ if (!p) return null;
724
+ return { ...p, metadata: { ...p.metadata } };
725
+ }
726
+ export function listEvgovProfilesV2() {
727
+ return [..._evgovPsV2.values()].map((p) => ({
728
+ ...p,
729
+ metadata: { ...p.metadata },
730
+ }));
731
+ }
732
+ export function createEvgovProposalV2({ id, profileId, topic, metadata } = {}) {
733
+ if (!id || !profileId) throw new Error("id and profileId required");
734
+ if (_evgovJsV2.has(id))
735
+ throw new Error(`evgov proposal ${id} already exists`);
736
+ if (!_evgovPsV2.has(profileId))
737
+ throw new Error(`evgov profile ${profileId} not found`);
738
+ if (_evgovCountPending(profileId) >= _evgovMaxPending)
739
+ throw new Error(
740
+ `max pending evgov proposals for profile ${profileId} reached`,
741
+ );
742
+ const now = Date.now();
743
+ const j = {
744
+ id,
745
+ profileId,
746
+ topic: topic || "",
747
+ status: EVGOV_PROPOSAL_LIFECYCLE_V2.QUEUED,
748
+ createdAt: now,
749
+ updatedAt: now,
750
+ startedAt: null,
751
+ settledAt: null,
752
+ metadata: { ...(metadata || {}) },
753
+ };
754
+ _evgovJsV2.set(id, j);
755
+ return { ...j, metadata: { ...j.metadata } };
756
+ }
757
+ export function reviewingEvgovProposalV2(id) {
758
+ const j = _evgovJsV2.get(id);
759
+ if (!j) throw new Error(`evgov proposal ${id} not found`);
760
+ _evgovCheckJ(j.status, EVGOV_PROPOSAL_LIFECYCLE_V2.REVIEWING);
761
+ const now = Date.now();
762
+ j.status = EVGOV_PROPOSAL_LIFECYCLE_V2.REVIEWING;
763
+ j.updatedAt = now;
764
+ if (!j.startedAt) j.startedAt = now;
765
+ return { ...j, metadata: { ...j.metadata } };
766
+ }
767
+ export function completeProposalEvgovV2(id) {
768
+ const j = _evgovJsV2.get(id);
769
+ if (!j) throw new Error(`evgov proposal ${id} not found`);
770
+ _evgovCheckJ(j.status, EVGOV_PROPOSAL_LIFECYCLE_V2.REVIEWED);
771
+ const now = Date.now();
772
+ j.status = EVGOV_PROPOSAL_LIFECYCLE_V2.REVIEWED;
773
+ j.updatedAt = now;
774
+ if (!j.settledAt) j.settledAt = now;
775
+ return { ...j, metadata: { ...j.metadata } };
776
+ }
777
+ export function failEvgovProposalV2(id, reason) {
778
+ const j = _evgovJsV2.get(id);
779
+ if (!j) throw new Error(`evgov proposal ${id} not found`);
780
+ _evgovCheckJ(j.status, EVGOV_PROPOSAL_LIFECYCLE_V2.FAILED);
781
+ const now = Date.now();
782
+ j.status = EVGOV_PROPOSAL_LIFECYCLE_V2.FAILED;
783
+ j.updatedAt = now;
784
+ if (!j.settledAt) j.settledAt = now;
785
+ if (reason) j.metadata.failReason = String(reason);
786
+ return { ...j, metadata: { ...j.metadata } };
787
+ }
788
+ export function cancelEvgovProposalV2(id, reason) {
789
+ const j = _evgovJsV2.get(id);
790
+ if (!j) throw new Error(`evgov proposal ${id} not found`);
791
+ _evgovCheckJ(j.status, EVGOV_PROPOSAL_LIFECYCLE_V2.CANCELLED);
792
+ const now = Date.now();
793
+ j.status = EVGOV_PROPOSAL_LIFECYCLE_V2.CANCELLED;
794
+ j.updatedAt = now;
795
+ if (!j.settledAt) j.settledAt = now;
796
+ if (reason) j.metadata.cancelReason = String(reason);
797
+ return { ...j, metadata: { ...j.metadata } };
798
+ }
799
+ export function getEvgovProposalV2(id) {
800
+ const j = _evgovJsV2.get(id);
801
+ if (!j) return null;
802
+ return { ...j, metadata: { ...j.metadata } };
803
+ }
804
+ export function listEvgovProposalsV2() {
805
+ return [..._evgovJsV2.values()].map((j) => ({
806
+ ...j,
807
+ metadata: { ...j.metadata },
808
+ }));
809
+ }
810
+ export function autoPauseIdleEvgovProfilesV2({ now } = {}) {
811
+ const t = now ?? Date.now();
812
+ const flipped = [];
813
+ for (const p of _evgovPsV2.values())
814
+ if (
815
+ p.status === EVGOV_PROFILE_MATURITY_V2.ACTIVE &&
816
+ t - p.lastTouchedAt >= _evgovIdleMs
817
+ ) {
818
+ p.status = EVGOV_PROFILE_MATURITY_V2.PAUSED;
819
+ p.updatedAt = t;
820
+ flipped.push(p.id);
821
+ }
822
+ return { flipped, count: flipped.length };
823
+ }
824
+ export function autoFailStuckEvgovProposalsV2({ now } = {}) {
825
+ const t = now ?? Date.now();
826
+ const flipped = [];
827
+ for (const j of _evgovJsV2.values())
828
+ if (
829
+ j.status === EVGOV_PROPOSAL_LIFECYCLE_V2.REVIEWING &&
830
+ j.startedAt != null &&
831
+ t - j.startedAt >= _evgovStuckMs
832
+ ) {
833
+ j.status = EVGOV_PROPOSAL_LIFECYCLE_V2.FAILED;
834
+ j.updatedAt = t;
835
+ if (!j.settledAt) j.settledAt = t;
836
+ j.metadata.failReason = "auto-fail-stuck";
837
+ flipped.push(j.id);
838
+ }
839
+ return { flipped, count: flipped.length };
840
+ }
841
+ export function getEvomapGovernanceGovStatsV2() {
842
+ const profilesByStatus = {};
843
+ for (const v of Object.values(EVGOV_PROFILE_MATURITY_V2))
844
+ profilesByStatus[v] = 0;
845
+ for (const p of _evgovPsV2.values()) profilesByStatus[p.status]++;
846
+ const proposalsByStatus = {};
847
+ for (const v of Object.values(EVGOV_PROPOSAL_LIFECYCLE_V2))
848
+ proposalsByStatus[v] = 0;
849
+ for (const j of _evgovJsV2.values()) proposalsByStatus[j.status]++;
850
+ return {
851
+ totalEvgovProfilesV2: _evgovPsV2.size,
852
+ totalEvgovProposalsV2: _evgovJsV2.size,
853
+ maxActiveEvgovProfilesPerOwner: _evgovMaxActive,
854
+ maxPendingEvgovProposalsPerProfile: _evgovMaxPending,
855
+ evgovProfileIdleMs: _evgovIdleMs,
856
+ evgovProposalStuckMs: _evgovStuckMs,
857
+ profilesByStatus,
858
+ proposalsByStatus,
859
+ };
860
+ }