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
@@ -757,3 +757,344 @@ export function getSLAStatsV2() {
757
757
  },
758
758
  };
759
759
  }
760
+
761
+ // =====================================================================
762
+ // sla-manager V2 governance overlay (iter16)
763
+ // =====================================================================
764
+ export const SLAGOV_PROFILE_MATURITY_V2 = Object.freeze({
765
+ PENDING: "pending",
766
+ ACTIVE: "active",
767
+ BREACHED: "breached",
768
+ ARCHIVED: "archived",
769
+ });
770
+ export const SLAGOV_MEASUREMENT_LIFECYCLE_V2 = Object.freeze({
771
+ QUEUED: "queued",
772
+ MEASURING: "measuring",
773
+ MEASURED: "measured",
774
+ FAILED: "failed",
775
+ CANCELLED: "cancelled",
776
+ });
777
+ const _slagovPTrans = new Map([
778
+ [
779
+ SLAGOV_PROFILE_MATURITY_V2.PENDING,
780
+ new Set([
781
+ SLAGOV_PROFILE_MATURITY_V2.ACTIVE,
782
+ SLAGOV_PROFILE_MATURITY_V2.ARCHIVED,
783
+ ]),
784
+ ],
785
+ [
786
+ SLAGOV_PROFILE_MATURITY_V2.ACTIVE,
787
+ new Set([
788
+ SLAGOV_PROFILE_MATURITY_V2.BREACHED,
789
+ SLAGOV_PROFILE_MATURITY_V2.ARCHIVED,
790
+ ]),
791
+ ],
792
+ [
793
+ SLAGOV_PROFILE_MATURITY_V2.BREACHED,
794
+ new Set([
795
+ SLAGOV_PROFILE_MATURITY_V2.ACTIVE,
796
+ SLAGOV_PROFILE_MATURITY_V2.ARCHIVED,
797
+ ]),
798
+ ],
799
+ [SLAGOV_PROFILE_MATURITY_V2.ARCHIVED, new Set()],
800
+ ]);
801
+ const _slagovPTerminal = new Set([SLAGOV_PROFILE_MATURITY_V2.ARCHIVED]);
802
+ const _slagovJTrans = new Map([
803
+ [
804
+ SLAGOV_MEASUREMENT_LIFECYCLE_V2.QUEUED,
805
+ new Set([
806
+ SLAGOV_MEASUREMENT_LIFECYCLE_V2.MEASURING,
807
+ SLAGOV_MEASUREMENT_LIFECYCLE_V2.CANCELLED,
808
+ ]),
809
+ ],
810
+ [
811
+ SLAGOV_MEASUREMENT_LIFECYCLE_V2.MEASURING,
812
+ new Set([
813
+ SLAGOV_MEASUREMENT_LIFECYCLE_V2.MEASURED,
814
+ SLAGOV_MEASUREMENT_LIFECYCLE_V2.FAILED,
815
+ SLAGOV_MEASUREMENT_LIFECYCLE_V2.CANCELLED,
816
+ ]),
817
+ ],
818
+ [SLAGOV_MEASUREMENT_LIFECYCLE_V2.MEASURED, new Set()],
819
+ [SLAGOV_MEASUREMENT_LIFECYCLE_V2.FAILED, new Set()],
820
+ [SLAGOV_MEASUREMENT_LIFECYCLE_V2.CANCELLED, new Set()],
821
+ ]);
822
+ const _slagovPsV2 = new Map();
823
+ const _slagovJsV2 = new Map();
824
+ let _slagovMaxActive = 8,
825
+ _slagovMaxPending = 20,
826
+ _slagovIdleMs = 30 * 24 * 60 * 60 * 1000,
827
+ _slagovStuckMs = 60 * 1000;
828
+ function _slagovPos(n, label) {
829
+ const v = Math.floor(Number(n));
830
+ if (!Number.isFinite(v) || v <= 0)
831
+ throw new Error(`${label} must be positive integer`);
832
+ return v;
833
+ }
834
+ function _slagovCheckP(from, to) {
835
+ const a = _slagovPTrans.get(from);
836
+ if (!a || !a.has(to))
837
+ throw new Error(`invalid slagov profile transition ${from} → ${to}`);
838
+ }
839
+ function _slagovCheckJ(from, to) {
840
+ const a = _slagovJTrans.get(from);
841
+ if (!a || !a.has(to))
842
+ throw new Error(`invalid slagov measurement transition ${from} → ${to}`);
843
+ }
844
+ function _slagovCountActive(owner) {
845
+ let c = 0;
846
+ for (const p of _slagovPsV2.values())
847
+ if (p.owner === owner && p.status === SLAGOV_PROFILE_MATURITY_V2.ACTIVE)
848
+ c++;
849
+ return c;
850
+ }
851
+ function _slagovCountPending(profileId) {
852
+ let c = 0;
853
+ for (const j of _slagovJsV2.values())
854
+ if (
855
+ j.profileId === profileId &&
856
+ (j.status === SLAGOV_MEASUREMENT_LIFECYCLE_V2.QUEUED ||
857
+ j.status === SLAGOV_MEASUREMENT_LIFECYCLE_V2.MEASURING)
858
+ )
859
+ c++;
860
+ return c;
861
+ }
862
+ export function setMaxActiveSlagovProfilesPerOwnerV2(n) {
863
+ _slagovMaxActive = _slagovPos(n, "maxActiveSlagovProfilesPerOwner");
864
+ }
865
+ export function getMaxActiveSlagovProfilesPerOwnerV2() {
866
+ return _slagovMaxActive;
867
+ }
868
+ export function setMaxPendingSlagovMeasurementsPerProfileV2(n) {
869
+ _slagovMaxPending = _slagovPos(n, "maxPendingSlagovMeasurementsPerProfile");
870
+ }
871
+ export function getMaxPendingSlagovMeasurementsPerProfileV2() {
872
+ return _slagovMaxPending;
873
+ }
874
+ export function setSlagovProfileIdleMsV2(n) {
875
+ _slagovIdleMs = _slagovPos(n, "slagovProfileIdleMs");
876
+ }
877
+ export function getSlagovProfileIdleMsV2() {
878
+ return _slagovIdleMs;
879
+ }
880
+ export function setSlagovMeasurementStuckMsV2(n) {
881
+ _slagovStuckMs = _slagovPos(n, "slagovMeasurementStuckMs");
882
+ }
883
+ export function getSlagovMeasurementStuckMsV2() {
884
+ return _slagovStuckMs;
885
+ }
886
+ export function _resetStateSlaManagerV2() {
887
+ _slagovPsV2.clear();
888
+ _slagovJsV2.clear();
889
+ _slagovMaxActive = 8;
890
+ _slagovMaxPending = 20;
891
+ _slagovIdleMs = 30 * 24 * 60 * 60 * 1000;
892
+ _slagovStuckMs = 60 * 1000;
893
+ }
894
+ export function registerSlagovProfileV2({ id, owner, tier, metadata } = {}) {
895
+ if (!id || !owner) throw new Error("id and owner required");
896
+ if (_slagovPsV2.has(id))
897
+ throw new Error(`slagov profile ${id} already exists`);
898
+ const now = Date.now();
899
+ const p = {
900
+ id,
901
+ owner,
902
+ tier: tier || "standard",
903
+ status: SLAGOV_PROFILE_MATURITY_V2.PENDING,
904
+ createdAt: now,
905
+ updatedAt: now,
906
+ lastTouchedAt: now,
907
+ activatedAt: null,
908
+ archivedAt: null,
909
+ metadata: { ...(metadata || {}) },
910
+ };
911
+ _slagovPsV2.set(id, p);
912
+ return { ...p, metadata: { ...p.metadata } };
913
+ }
914
+ export function activateSlagovProfileV2(id) {
915
+ const p = _slagovPsV2.get(id);
916
+ if (!p) throw new Error(`slagov profile ${id} not found`);
917
+ const isInitial = p.status === SLAGOV_PROFILE_MATURITY_V2.PENDING;
918
+ _slagovCheckP(p.status, SLAGOV_PROFILE_MATURITY_V2.ACTIVE);
919
+ if (isInitial && _slagovCountActive(p.owner) >= _slagovMaxActive)
920
+ throw new Error(`max active slagov profiles for owner ${p.owner} reached`);
921
+ const now = Date.now();
922
+ p.status = SLAGOV_PROFILE_MATURITY_V2.ACTIVE;
923
+ p.updatedAt = now;
924
+ p.lastTouchedAt = now;
925
+ if (!p.activatedAt) p.activatedAt = now;
926
+ return { ...p, metadata: { ...p.metadata } };
927
+ }
928
+ export function breachSlagovProfileV2(id) {
929
+ const p = _slagovPsV2.get(id);
930
+ if (!p) throw new Error(`slagov profile ${id} not found`);
931
+ _slagovCheckP(p.status, SLAGOV_PROFILE_MATURITY_V2.BREACHED);
932
+ p.status = SLAGOV_PROFILE_MATURITY_V2.BREACHED;
933
+ p.updatedAt = Date.now();
934
+ return { ...p, metadata: { ...p.metadata } };
935
+ }
936
+ export function archiveSlagovProfileV2(id) {
937
+ const p = _slagovPsV2.get(id);
938
+ if (!p) throw new Error(`slagov profile ${id} not found`);
939
+ _slagovCheckP(p.status, SLAGOV_PROFILE_MATURITY_V2.ARCHIVED);
940
+ const now = Date.now();
941
+ p.status = SLAGOV_PROFILE_MATURITY_V2.ARCHIVED;
942
+ p.updatedAt = now;
943
+ if (!p.archivedAt) p.archivedAt = now;
944
+ return { ...p, metadata: { ...p.metadata } };
945
+ }
946
+ export function touchSlagovProfileV2(id) {
947
+ const p = _slagovPsV2.get(id);
948
+ if (!p) throw new Error(`slagov profile ${id} not found`);
949
+ if (_slagovPTerminal.has(p.status))
950
+ throw new Error(`cannot touch terminal slagov profile ${id}`);
951
+ const now = Date.now();
952
+ p.lastTouchedAt = now;
953
+ p.updatedAt = now;
954
+ return { ...p, metadata: { ...p.metadata } };
955
+ }
956
+ export function getSlagovProfileV2(id) {
957
+ const p = _slagovPsV2.get(id);
958
+ if (!p) return null;
959
+ return { ...p, metadata: { ...p.metadata } };
960
+ }
961
+ export function listSlagovProfilesV2() {
962
+ return [..._slagovPsV2.values()].map((p) => ({
963
+ ...p,
964
+ metadata: { ...p.metadata },
965
+ }));
966
+ }
967
+ export function createSlagovMeasurementV2({
968
+ id,
969
+ profileId,
970
+ metric,
971
+ metadata,
972
+ } = {}) {
973
+ if (!id || !profileId) throw new Error("id and profileId required");
974
+ if (_slagovJsV2.has(id))
975
+ throw new Error(`slagov measurement ${id} already exists`);
976
+ if (!_slagovPsV2.has(profileId))
977
+ throw new Error(`slagov profile ${profileId} not found`);
978
+ if (_slagovCountPending(profileId) >= _slagovMaxPending)
979
+ throw new Error(
980
+ `max pending slagov measurements for profile ${profileId} reached`,
981
+ );
982
+ const now = Date.now();
983
+ const j = {
984
+ id,
985
+ profileId,
986
+ metric: metric || "",
987
+ status: SLAGOV_MEASUREMENT_LIFECYCLE_V2.QUEUED,
988
+ createdAt: now,
989
+ updatedAt: now,
990
+ startedAt: null,
991
+ settledAt: null,
992
+ metadata: { ...(metadata || {}) },
993
+ };
994
+ _slagovJsV2.set(id, j);
995
+ return { ...j, metadata: { ...j.metadata } };
996
+ }
997
+ export function measuringSlagovMeasurementV2(id) {
998
+ const j = _slagovJsV2.get(id);
999
+ if (!j) throw new Error(`slagov measurement ${id} not found`);
1000
+ _slagovCheckJ(j.status, SLAGOV_MEASUREMENT_LIFECYCLE_V2.MEASURING);
1001
+ const now = Date.now();
1002
+ j.status = SLAGOV_MEASUREMENT_LIFECYCLE_V2.MEASURING;
1003
+ j.updatedAt = now;
1004
+ if (!j.startedAt) j.startedAt = now;
1005
+ return { ...j, metadata: { ...j.metadata } };
1006
+ }
1007
+ export function completeMeasurementSlagovV2(id) {
1008
+ const j = _slagovJsV2.get(id);
1009
+ if (!j) throw new Error(`slagov measurement ${id} not found`);
1010
+ _slagovCheckJ(j.status, SLAGOV_MEASUREMENT_LIFECYCLE_V2.MEASURED);
1011
+ const now = Date.now();
1012
+ j.status = SLAGOV_MEASUREMENT_LIFECYCLE_V2.MEASURED;
1013
+ j.updatedAt = now;
1014
+ if (!j.settledAt) j.settledAt = now;
1015
+ return { ...j, metadata: { ...j.metadata } };
1016
+ }
1017
+ export function failSlagovMeasurementV2(id, reason) {
1018
+ const j = _slagovJsV2.get(id);
1019
+ if (!j) throw new Error(`slagov measurement ${id} not found`);
1020
+ _slagovCheckJ(j.status, SLAGOV_MEASUREMENT_LIFECYCLE_V2.FAILED);
1021
+ const now = Date.now();
1022
+ j.status = SLAGOV_MEASUREMENT_LIFECYCLE_V2.FAILED;
1023
+ j.updatedAt = now;
1024
+ if (!j.settledAt) j.settledAt = now;
1025
+ if (reason) j.metadata.failReason = String(reason);
1026
+ return { ...j, metadata: { ...j.metadata } };
1027
+ }
1028
+ export function cancelSlagovMeasurementV2(id, reason) {
1029
+ const j = _slagovJsV2.get(id);
1030
+ if (!j) throw new Error(`slagov measurement ${id} not found`);
1031
+ _slagovCheckJ(j.status, SLAGOV_MEASUREMENT_LIFECYCLE_V2.CANCELLED);
1032
+ const now = Date.now();
1033
+ j.status = SLAGOV_MEASUREMENT_LIFECYCLE_V2.CANCELLED;
1034
+ j.updatedAt = now;
1035
+ if (!j.settledAt) j.settledAt = now;
1036
+ if (reason) j.metadata.cancelReason = String(reason);
1037
+ return { ...j, metadata: { ...j.metadata } };
1038
+ }
1039
+ export function getSlagovMeasurementV2(id) {
1040
+ const j = _slagovJsV2.get(id);
1041
+ if (!j) return null;
1042
+ return { ...j, metadata: { ...j.metadata } };
1043
+ }
1044
+ export function listSlagovMeasurementsV2() {
1045
+ return [..._slagovJsV2.values()].map((j) => ({
1046
+ ...j,
1047
+ metadata: { ...j.metadata },
1048
+ }));
1049
+ }
1050
+ export function autoBreachIdleSlagovProfilesV2({ now } = {}) {
1051
+ const t = now ?? Date.now();
1052
+ const flipped = [];
1053
+ for (const p of _slagovPsV2.values())
1054
+ if (
1055
+ p.status === SLAGOV_PROFILE_MATURITY_V2.ACTIVE &&
1056
+ t - p.lastTouchedAt >= _slagovIdleMs
1057
+ ) {
1058
+ p.status = SLAGOV_PROFILE_MATURITY_V2.BREACHED;
1059
+ p.updatedAt = t;
1060
+ flipped.push(p.id);
1061
+ }
1062
+ return { flipped, count: flipped.length };
1063
+ }
1064
+ export function autoFailStuckSlagovMeasurementsV2({ now } = {}) {
1065
+ const t = now ?? Date.now();
1066
+ const flipped = [];
1067
+ for (const j of _slagovJsV2.values())
1068
+ if (
1069
+ j.status === SLAGOV_MEASUREMENT_LIFECYCLE_V2.MEASURING &&
1070
+ j.startedAt != null &&
1071
+ t - j.startedAt >= _slagovStuckMs
1072
+ ) {
1073
+ j.status = SLAGOV_MEASUREMENT_LIFECYCLE_V2.FAILED;
1074
+ j.updatedAt = t;
1075
+ if (!j.settledAt) j.settledAt = t;
1076
+ j.metadata.failReason = "auto-fail-stuck";
1077
+ flipped.push(j.id);
1078
+ }
1079
+ return { flipped, count: flipped.length };
1080
+ }
1081
+ export function getSlaManagerGovStatsV2() {
1082
+ const profilesByStatus = {};
1083
+ for (const v of Object.values(SLAGOV_PROFILE_MATURITY_V2))
1084
+ profilesByStatus[v] = 0;
1085
+ for (const p of _slagovPsV2.values()) profilesByStatus[p.status]++;
1086
+ const measurementsByStatus = {};
1087
+ for (const v of Object.values(SLAGOV_MEASUREMENT_LIFECYCLE_V2))
1088
+ measurementsByStatus[v] = 0;
1089
+ for (const j of _slagovJsV2.values()) measurementsByStatus[j.status]++;
1090
+ return {
1091
+ totalSlagovProfilesV2: _slagovPsV2.size,
1092
+ totalSlagovMeasurementsV2: _slagovJsV2.size,
1093
+ maxActiveSlagovProfilesPerOwner: _slagovMaxActive,
1094
+ maxPendingSlagovMeasurementsPerProfile: _slagovMaxPending,
1095
+ slagovProfileIdleMs: _slagovIdleMs,
1096
+ slagovMeasurementStuckMs: _slagovStuckMs,
1097
+ profilesByStatus,
1098
+ measurementsByStatus,
1099
+ };
1100
+ }