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
@@ -539,3 +539,349 @@ export function _resetStateScimManagerV2() {
539
539
  _identityIdleMsV2 = SCIM_DEFAULT_IDENTITY_IDLE_MS;
540
540
  _syncStuckMsV2 = SCIM_DEFAULT_SYNC_STUCK_MS;
541
541
  }
542
+
543
+ // =====================================================================
544
+ // scim-manager V2 governance overlay (iter19)
545
+ // =====================================================================
546
+ export const SCIMGOV_PROFILE_MATURITY_V2 = Object.freeze({
547
+ PENDING: "pending",
548
+ ACTIVE: "active",
549
+ STALE: "stale",
550
+ ARCHIVED: "archived",
551
+ });
552
+ export const SCIMGOV_SYNC_LIFECYCLE_V2 = Object.freeze({
553
+ QUEUED: "queued",
554
+ SYNCING: "syncing",
555
+ SYNCED: "synced",
556
+ FAILED: "failed",
557
+ CANCELLED: "cancelled",
558
+ });
559
+ const _scimgovPTrans = new Map([
560
+ [
561
+ SCIMGOV_PROFILE_MATURITY_V2.PENDING,
562
+ new Set([
563
+ SCIMGOV_PROFILE_MATURITY_V2.ACTIVE,
564
+ SCIMGOV_PROFILE_MATURITY_V2.ARCHIVED,
565
+ ]),
566
+ ],
567
+ [
568
+ SCIMGOV_PROFILE_MATURITY_V2.ACTIVE,
569
+ new Set([
570
+ SCIMGOV_PROFILE_MATURITY_V2.STALE,
571
+ SCIMGOV_PROFILE_MATURITY_V2.ARCHIVED,
572
+ ]),
573
+ ],
574
+ [
575
+ SCIMGOV_PROFILE_MATURITY_V2.STALE,
576
+ new Set([
577
+ SCIMGOV_PROFILE_MATURITY_V2.ACTIVE,
578
+ SCIMGOV_PROFILE_MATURITY_V2.ARCHIVED,
579
+ ]),
580
+ ],
581
+ [SCIMGOV_PROFILE_MATURITY_V2.ARCHIVED, new Set()],
582
+ ]);
583
+ const _scimgovPTerminal = new Set([SCIMGOV_PROFILE_MATURITY_V2.ARCHIVED]);
584
+ const _scimgovJTrans = new Map([
585
+ [
586
+ SCIMGOV_SYNC_LIFECYCLE_V2.QUEUED,
587
+ new Set([
588
+ SCIMGOV_SYNC_LIFECYCLE_V2.SYNCING,
589
+ SCIMGOV_SYNC_LIFECYCLE_V2.CANCELLED,
590
+ ]),
591
+ ],
592
+ [
593
+ SCIMGOV_SYNC_LIFECYCLE_V2.SYNCING,
594
+ new Set([
595
+ SCIMGOV_SYNC_LIFECYCLE_V2.SYNCED,
596
+ SCIMGOV_SYNC_LIFECYCLE_V2.FAILED,
597
+ SCIMGOV_SYNC_LIFECYCLE_V2.CANCELLED,
598
+ ]),
599
+ ],
600
+ [SCIMGOV_SYNC_LIFECYCLE_V2.SYNCED, new Set()],
601
+ [SCIMGOV_SYNC_LIFECYCLE_V2.FAILED, new Set()],
602
+ [SCIMGOV_SYNC_LIFECYCLE_V2.CANCELLED, new Set()],
603
+ ]);
604
+ const _scimgovPsV2 = new Map();
605
+ const _scimgovJsV2 = new Map();
606
+ let _scimgovMaxActive = 6,
607
+ _scimgovMaxPending = 15,
608
+ _scimgovIdleMs = 30 * 24 * 60 * 60 * 1000,
609
+ _scimgovStuckMs = 60 * 1000;
610
+ function _scimgovPos(n, label) {
611
+ const v = Math.floor(Number(n));
612
+ if (!Number.isFinite(v) || v <= 0)
613
+ throw new Error(`${label} must be positive integer`);
614
+ return v;
615
+ }
616
+ function _scimgovCheckP(from, to) {
617
+ const a = _scimgovPTrans.get(from);
618
+ if (!a || !a.has(to))
619
+ throw new Error(`invalid scimgov profile transition ${from} → ${to}`);
620
+ }
621
+ function _scimgovCheckJ(from, to) {
622
+ const a = _scimgovJTrans.get(from);
623
+ if (!a || !a.has(to))
624
+ throw new Error(`invalid scimgov sync transition ${from} → ${to}`);
625
+ }
626
+ function _scimgovCountActive(owner) {
627
+ let c = 0;
628
+ for (const p of _scimgovPsV2.values())
629
+ if (p.owner === owner && p.status === SCIMGOV_PROFILE_MATURITY_V2.ACTIVE)
630
+ c++;
631
+ return c;
632
+ }
633
+ function _scimgovCountPending(profileId) {
634
+ let c = 0;
635
+ for (const j of _scimgovJsV2.values())
636
+ if (
637
+ j.profileId === profileId &&
638
+ (j.status === SCIMGOV_SYNC_LIFECYCLE_V2.QUEUED ||
639
+ j.status === SCIMGOV_SYNC_LIFECYCLE_V2.SYNCING)
640
+ )
641
+ c++;
642
+ return c;
643
+ }
644
+ export function setMaxActiveScimgovProfilesPerOwnerV2(n) {
645
+ _scimgovMaxActive = _scimgovPos(n, "maxActiveScimgovProfilesPerOwner");
646
+ }
647
+ export function getMaxActiveScimgovProfilesPerOwnerV2() {
648
+ return _scimgovMaxActive;
649
+ }
650
+ export function setMaxPendingScimgovSyncsPerProfileV2(n) {
651
+ _scimgovMaxPending = _scimgovPos(n, "maxPendingScimgovSyncsPerProfile");
652
+ }
653
+ export function getMaxPendingScimgovSyncsPerProfileV2() {
654
+ return _scimgovMaxPending;
655
+ }
656
+ export function setScimgovProfileIdleMsV2(n) {
657
+ _scimgovIdleMs = _scimgovPos(n, "scimgovProfileIdleMs");
658
+ }
659
+ export function getScimgovProfileIdleMsV2() {
660
+ return _scimgovIdleMs;
661
+ }
662
+ export function setScimgovSyncStuckMsV2(n) {
663
+ _scimgovStuckMs = _scimgovPos(n, "scimgovSyncStuckMs");
664
+ }
665
+ export function getScimgovSyncStuckMsV2() {
666
+ return _scimgovStuckMs;
667
+ }
668
+ export function _resetStateScimManagerGovV2() {
669
+ _scimgovPsV2.clear();
670
+ _scimgovJsV2.clear();
671
+ _scimgovMaxActive = 6;
672
+ _scimgovMaxPending = 15;
673
+ _scimgovIdleMs = 30 * 24 * 60 * 60 * 1000;
674
+ _scimgovStuckMs = 60 * 1000;
675
+ }
676
+ export function registerScimgovProfileV2({
677
+ id,
678
+ owner,
679
+ resource,
680
+ metadata,
681
+ } = {}) {
682
+ if (!id || !owner) throw new Error("id and owner required");
683
+ if (_scimgovPsV2.has(id))
684
+ throw new Error(`scimgov profile ${id} already exists`);
685
+ const now = Date.now();
686
+ const p = {
687
+ id,
688
+ owner,
689
+ resource: resource || "users",
690
+ status: SCIMGOV_PROFILE_MATURITY_V2.PENDING,
691
+ createdAt: now,
692
+ updatedAt: now,
693
+ lastTouchedAt: now,
694
+ activatedAt: null,
695
+ archivedAt: null,
696
+ metadata: { ...(metadata || {}) },
697
+ };
698
+ _scimgovPsV2.set(id, p);
699
+ return { ...p, metadata: { ...p.metadata } };
700
+ }
701
+ export function activateScimgovProfileV2(id) {
702
+ const p = _scimgovPsV2.get(id);
703
+ if (!p) throw new Error(`scimgov profile ${id} not found`);
704
+ const isInitial = p.status === SCIMGOV_PROFILE_MATURITY_V2.PENDING;
705
+ _scimgovCheckP(p.status, SCIMGOV_PROFILE_MATURITY_V2.ACTIVE);
706
+ if (isInitial && _scimgovCountActive(p.owner) >= _scimgovMaxActive)
707
+ throw new Error(`max active scimgov profiles for owner ${p.owner} reached`);
708
+ const now = Date.now();
709
+ p.status = SCIMGOV_PROFILE_MATURITY_V2.ACTIVE;
710
+ p.updatedAt = now;
711
+ p.lastTouchedAt = now;
712
+ if (!p.activatedAt) p.activatedAt = now;
713
+ return { ...p, metadata: { ...p.metadata } };
714
+ }
715
+ export function staleScimgovProfileV2(id) {
716
+ const p = _scimgovPsV2.get(id);
717
+ if (!p) throw new Error(`scimgov profile ${id} not found`);
718
+ _scimgovCheckP(p.status, SCIMGOV_PROFILE_MATURITY_V2.STALE);
719
+ p.status = SCIMGOV_PROFILE_MATURITY_V2.STALE;
720
+ p.updatedAt = Date.now();
721
+ return { ...p, metadata: { ...p.metadata } };
722
+ }
723
+ export function archiveScimgovProfileV2(id) {
724
+ const p = _scimgovPsV2.get(id);
725
+ if (!p) throw new Error(`scimgov profile ${id} not found`);
726
+ _scimgovCheckP(p.status, SCIMGOV_PROFILE_MATURITY_V2.ARCHIVED);
727
+ const now = Date.now();
728
+ p.status = SCIMGOV_PROFILE_MATURITY_V2.ARCHIVED;
729
+ p.updatedAt = now;
730
+ if (!p.archivedAt) p.archivedAt = now;
731
+ return { ...p, metadata: { ...p.metadata } };
732
+ }
733
+ export function touchScimgovProfileV2(id) {
734
+ const p = _scimgovPsV2.get(id);
735
+ if (!p) throw new Error(`scimgov profile ${id} not found`);
736
+ if (_scimgovPTerminal.has(p.status))
737
+ throw new Error(`cannot touch terminal scimgov profile ${id}`);
738
+ const now = Date.now();
739
+ p.lastTouchedAt = now;
740
+ p.updatedAt = now;
741
+ return { ...p, metadata: { ...p.metadata } };
742
+ }
743
+ export function getScimgovProfileV2(id) {
744
+ const p = _scimgovPsV2.get(id);
745
+ if (!p) return null;
746
+ return { ...p, metadata: { ...p.metadata } };
747
+ }
748
+ export function listScimgovProfilesV2() {
749
+ return [..._scimgovPsV2.values()].map((p) => ({
750
+ ...p,
751
+ metadata: { ...p.metadata },
752
+ }));
753
+ }
754
+ export function createScimgovSyncV2({
755
+ id,
756
+ profileId,
757
+ endpoint,
758
+ metadata,
759
+ } = {}) {
760
+ if (!id || !profileId) throw new Error("id and profileId required");
761
+ if (_scimgovJsV2.has(id))
762
+ throw new Error(`scimgov sync ${id} already exists`);
763
+ if (!_scimgovPsV2.has(profileId))
764
+ throw new Error(`scimgov profile ${profileId} not found`);
765
+ if (_scimgovCountPending(profileId) >= _scimgovMaxPending)
766
+ throw new Error(
767
+ `max pending scimgov syncs for profile ${profileId} reached`,
768
+ );
769
+ const now = Date.now();
770
+ const j = {
771
+ id,
772
+ profileId,
773
+ endpoint: endpoint || "",
774
+ status: SCIMGOV_SYNC_LIFECYCLE_V2.QUEUED,
775
+ createdAt: now,
776
+ updatedAt: now,
777
+ startedAt: null,
778
+ settledAt: null,
779
+ metadata: { ...(metadata || {}) },
780
+ };
781
+ _scimgovJsV2.set(id, j);
782
+ return { ...j, metadata: { ...j.metadata } };
783
+ }
784
+ export function syncingScimgovSyncV2(id) {
785
+ const j = _scimgovJsV2.get(id);
786
+ if (!j) throw new Error(`scimgov sync ${id} not found`);
787
+ _scimgovCheckJ(j.status, SCIMGOV_SYNC_LIFECYCLE_V2.SYNCING);
788
+ const now = Date.now();
789
+ j.status = SCIMGOV_SYNC_LIFECYCLE_V2.SYNCING;
790
+ j.updatedAt = now;
791
+ if (!j.startedAt) j.startedAt = now;
792
+ return { ...j, metadata: { ...j.metadata } };
793
+ }
794
+ export function completeSyncScimgovV2(id) {
795
+ const j = _scimgovJsV2.get(id);
796
+ if (!j) throw new Error(`scimgov sync ${id} not found`);
797
+ _scimgovCheckJ(j.status, SCIMGOV_SYNC_LIFECYCLE_V2.SYNCED);
798
+ const now = Date.now();
799
+ j.status = SCIMGOV_SYNC_LIFECYCLE_V2.SYNCED;
800
+ j.updatedAt = now;
801
+ if (!j.settledAt) j.settledAt = now;
802
+ return { ...j, metadata: { ...j.metadata } };
803
+ }
804
+ export function failScimgovSyncV2(id, reason) {
805
+ const j = _scimgovJsV2.get(id);
806
+ if (!j) throw new Error(`scimgov sync ${id} not found`);
807
+ _scimgovCheckJ(j.status, SCIMGOV_SYNC_LIFECYCLE_V2.FAILED);
808
+ const now = Date.now();
809
+ j.status = SCIMGOV_SYNC_LIFECYCLE_V2.FAILED;
810
+ j.updatedAt = now;
811
+ if (!j.settledAt) j.settledAt = now;
812
+ if (reason) j.metadata.failReason = String(reason);
813
+ return { ...j, metadata: { ...j.metadata } };
814
+ }
815
+ export function cancelScimgovSyncV2(id, reason) {
816
+ const j = _scimgovJsV2.get(id);
817
+ if (!j) throw new Error(`scimgov sync ${id} not found`);
818
+ _scimgovCheckJ(j.status, SCIMGOV_SYNC_LIFECYCLE_V2.CANCELLED);
819
+ const now = Date.now();
820
+ j.status = SCIMGOV_SYNC_LIFECYCLE_V2.CANCELLED;
821
+ j.updatedAt = now;
822
+ if (!j.settledAt) j.settledAt = now;
823
+ if (reason) j.metadata.cancelReason = String(reason);
824
+ return { ...j, metadata: { ...j.metadata } };
825
+ }
826
+ export function getScimgovSyncV2(id) {
827
+ const j = _scimgovJsV2.get(id);
828
+ if (!j) return null;
829
+ return { ...j, metadata: { ...j.metadata } };
830
+ }
831
+ export function listScimgovSyncsV2() {
832
+ return [..._scimgovJsV2.values()].map((j) => ({
833
+ ...j,
834
+ metadata: { ...j.metadata },
835
+ }));
836
+ }
837
+ export function autoStaleIdleScimgovProfilesV2({ now } = {}) {
838
+ const t = now ?? Date.now();
839
+ const flipped = [];
840
+ for (const p of _scimgovPsV2.values())
841
+ if (
842
+ p.status === SCIMGOV_PROFILE_MATURITY_V2.ACTIVE &&
843
+ t - p.lastTouchedAt >= _scimgovIdleMs
844
+ ) {
845
+ p.status = SCIMGOV_PROFILE_MATURITY_V2.STALE;
846
+ p.updatedAt = t;
847
+ flipped.push(p.id);
848
+ }
849
+ return { flipped, count: flipped.length };
850
+ }
851
+ export function autoFailStuckScimgovSyncsV2({ now } = {}) {
852
+ const t = now ?? Date.now();
853
+ const flipped = [];
854
+ for (const j of _scimgovJsV2.values())
855
+ if (
856
+ j.status === SCIMGOV_SYNC_LIFECYCLE_V2.SYNCING &&
857
+ j.startedAt != null &&
858
+ t - j.startedAt >= _scimgovStuckMs
859
+ ) {
860
+ j.status = SCIMGOV_SYNC_LIFECYCLE_V2.FAILED;
861
+ j.updatedAt = t;
862
+ if (!j.settledAt) j.settledAt = t;
863
+ j.metadata.failReason = "auto-fail-stuck";
864
+ flipped.push(j.id);
865
+ }
866
+ return { flipped, count: flipped.length };
867
+ }
868
+ export function getScimManagerGovStatsV2() {
869
+ const profilesByStatus = {};
870
+ for (const v of Object.values(SCIMGOV_PROFILE_MATURITY_V2))
871
+ profilesByStatus[v] = 0;
872
+ for (const p of _scimgovPsV2.values()) profilesByStatus[p.status]++;
873
+ const syncsByStatus = {};
874
+ for (const v of Object.values(SCIMGOV_SYNC_LIFECYCLE_V2))
875
+ syncsByStatus[v] = 0;
876
+ for (const j of _scimgovJsV2.values()) syncsByStatus[j.status]++;
877
+ return {
878
+ totalScimgovProfilesV2: _scimgovPsV2.size,
879
+ totalScimgovSyncsV2: _scimgovJsV2.size,
880
+ maxActiveScimgovProfilesPerOwner: _scimgovMaxActive,
881
+ maxPendingScimgovSyncsPerProfile: _scimgovMaxPending,
882
+ scimgovProfileIdleMs: _scimgovIdleMs,
883
+ scimgovSyncStuckMs: _scimgovStuckMs,
884
+ profilesByStatus,
885
+ syncsByStatus,
886
+ };
887
+ }