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
@@ -4,83 +4,335 @@ export {
4
4
  resetCompressionTelemetry,
5
5
  } from "../harness/compression-telemetry.js";
6
6
 
7
-
8
7
  // =====================================================================
9
8
  // Compression Telemetry V2 governance overlay
10
9
  // =====================================================================
11
- export const COMPT_PROFILE_MATURITY_V2 = Object.freeze({ PENDING: "pending", ACTIVE: "active", STALE: "stale", ARCHIVED: "archived" });
12
- export const COMPT_SAMPLE_LIFECYCLE_V2 = Object.freeze({ QUEUED: "queued", RECORDING: "recording", RECORDED: "recorded", FAILED: "failed", CANCELLED: "cancelled" });
10
+ export const COMPT_PROFILE_MATURITY_V2 = Object.freeze({
11
+ PENDING: "pending",
12
+ ACTIVE: "active",
13
+ STALE: "stale",
14
+ ARCHIVED: "archived",
15
+ });
16
+ export const COMPT_SAMPLE_LIFECYCLE_V2 = Object.freeze({
17
+ QUEUED: "queued",
18
+ RECORDING: "recording",
19
+ RECORDED: "recorded",
20
+ FAILED: "failed",
21
+ CANCELLED: "cancelled",
22
+ });
13
23
  const _comptPTrans = new Map([
14
- [COMPT_PROFILE_MATURITY_V2.PENDING, new Set([COMPT_PROFILE_MATURITY_V2.ACTIVE, COMPT_PROFILE_MATURITY_V2.ARCHIVED])],
15
- [COMPT_PROFILE_MATURITY_V2.ACTIVE, new Set([COMPT_PROFILE_MATURITY_V2.STALE, COMPT_PROFILE_MATURITY_V2.ARCHIVED])],
16
- [COMPT_PROFILE_MATURITY_V2.STALE, new Set([COMPT_PROFILE_MATURITY_V2.ACTIVE, COMPT_PROFILE_MATURITY_V2.ARCHIVED])],
24
+ [
25
+ COMPT_PROFILE_MATURITY_V2.PENDING,
26
+ new Set([
27
+ COMPT_PROFILE_MATURITY_V2.ACTIVE,
28
+ COMPT_PROFILE_MATURITY_V2.ARCHIVED,
29
+ ]),
30
+ ],
31
+ [
32
+ COMPT_PROFILE_MATURITY_V2.ACTIVE,
33
+ new Set([
34
+ COMPT_PROFILE_MATURITY_V2.STALE,
35
+ COMPT_PROFILE_MATURITY_V2.ARCHIVED,
36
+ ]),
37
+ ],
38
+ [
39
+ COMPT_PROFILE_MATURITY_V2.STALE,
40
+ new Set([
41
+ COMPT_PROFILE_MATURITY_V2.ACTIVE,
42
+ COMPT_PROFILE_MATURITY_V2.ARCHIVED,
43
+ ]),
44
+ ],
17
45
  [COMPT_PROFILE_MATURITY_V2.ARCHIVED, new Set()],
18
46
  ]);
19
47
  const _comptPTerminal = new Set([COMPT_PROFILE_MATURITY_V2.ARCHIVED]);
20
48
  const _comptJTrans = new Map([
21
- [COMPT_SAMPLE_LIFECYCLE_V2.QUEUED, new Set([COMPT_SAMPLE_LIFECYCLE_V2.RECORDING, COMPT_SAMPLE_LIFECYCLE_V2.CANCELLED])],
22
- [COMPT_SAMPLE_LIFECYCLE_V2.RECORDING, new Set([COMPT_SAMPLE_LIFECYCLE_V2.RECORDED, COMPT_SAMPLE_LIFECYCLE_V2.FAILED, COMPT_SAMPLE_LIFECYCLE_V2.CANCELLED])],
49
+ [
50
+ COMPT_SAMPLE_LIFECYCLE_V2.QUEUED,
51
+ new Set([
52
+ COMPT_SAMPLE_LIFECYCLE_V2.RECORDING,
53
+ COMPT_SAMPLE_LIFECYCLE_V2.CANCELLED,
54
+ ]),
55
+ ],
56
+ [
57
+ COMPT_SAMPLE_LIFECYCLE_V2.RECORDING,
58
+ new Set([
59
+ COMPT_SAMPLE_LIFECYCLE_V2.RECORDED,
60
+ COMPT_SAMPLE_LIFECYCLE_V2.FAILED,
61
+ COMPT_SAMPLE_LIFECYCLE_V2.CANCELLED,
62
+ ]),
63
+ ],
23
64
  [COMPT_SAMPLE_LIFECYCLE_V2.RECORDED, new Set()],
24
65
  [COMPT_SAMPLE_LIFECYCLE_V2.FAILED, new Set()],
25
66
  [COMPT_SAMPLE_LIFECYCLE_V2.CANCELLED, new Set()],
26
67
  ]);
27
68
  const _comptPsV2 = new Map();
28
69
  const _comptJsV2 = new Map();
29
- let _comptMaxActive = 10, _comptMaxPending = 30, _comptIdleMs = 30 * 24 * 60 * 60 * 1000, _comptStuckMs = 30 * 1000;
30
- function _comptPos(n, label) { const v = Math.floor(Number(n)); if (!Number.isFinite(v) || v <= 0) throw new Error(`${label} must be positive integer`); return v; }
31
- function _comptCheckP(from, to) { const a = _comptPTrans.get(from); if (!a || !a.has(to)) throw new Error(`invalid compt profile transition ${from} → ${to}`); }
32
- function _comptCheckJ(from, to) { const a = _comptJTrans.get(from); if (!a || !a.has(to)) throw new Error(`invalid compt sample transition ${from} → ${to}`); }
33
- function _comptCountActive(owner) { let c = 0; for (const p of _comptPsV2.values()) if (p.owner === owner && p.status === COMPT_PROFILE_MATURITY_V2.ACTIVE) c++; return c; }
34
- function _comptCountPending(profileId) { let c = 0; for (const j of _comptJsV2.values()) if (j.profileId === profileId && (j.status === COMPT_SAMPLE_LIFECYCLE_V2.QUEUED || j.status === COMPT_SAMPLE_LIFECYCLE_V2.RECORDING)) c++; return c; }
35
- export function setMaxActiveComptProfilesPerOwnerV2(n) { _comptMaxActive = _comptPos(n, "maxActiveComptProfilesPerOwner"); }
36
- export function getMaxActiveComptProfilesPerOwnerV2() { return _comptMaxActive; }
37
- export function setMaxPendingComptSamplesPerProfileV2(n) { _comptMaxPending = _comptPos(n, "maxPendingComptSamplesPerProfile"); }
38
- export function getMaxPendingComptSamplesPerProfileV2() { return _comptMaxPending; }
39
- export function setComptProfileIdleMsV2(n) { _comptIdleMs = _comptPos(n, "comptProfileIdleMs"); }
40
- export function getComptProfileIdleMsV2() { return _comptIdleMs; }
41
- export function setComptSampleStuckMsV2(n) { _comptStuckMs = _comptPos(n, "comptSampleStuckMs"); }
42
- export function getComptSampleStuckMsV2() { return _comptStuckMs; }
43
- export function _resetStateCompressionTelemetryV2() { _comptPsV2.clear(); _comptJsV2.clear(); _comptMaxActive = 10; _comptMaxPending = 30; _comptIdleMs = 30 * 24 * 60 * 60 * 1000; _comptStuckMs = 30 * 1000; }
70
+ let _comptMaxActive = 10,
71
+ _comptMaxPending = 30,
72
+ _comptIdleMs = 30 * 24 * 60 * 60 * 1000,
73
+ _comptStuckMs = 30 * 1000;
74
+ function _comptPos(n, label) {
75
+ const v = Math.floor(Number(n));
76
+ if (!Number.isFinite(v) || v <= 0)
77
+ throw new Error(`${label} must be positive integer`);
78
+ return v;
79
+ }
80
+ function _comptCheckP(from, to) {
81
+ const a = _comptPTrans.get(from);
82
+ if (!a || !a.has(to))
83
+ throw new Error(`invalid compt profile transition ${from} ${to}`);
84
+ }
85
+ function _comptCheckJ(from, to) {
86
+ const a = _comptJTrans.get(from);
87
+ if (!a || !a.has(to))
88
+ throw new Error(`invalid compt sample transition ${from} → ${to}`);
89
+ }
90
+ function _comptCountActive(owner) {
91
+ let c = 0;
92
+ for (const p of _comptPsV2.values())
93
+ if (p.owner === owner && p.status === COMPT_PROFILE_MATURITY_V2.ACTIVE) c++;
94
+ return c;
95
+ }
96
+ function _comptCountPending(profileId) {
97
+ let c = 0;
98
+ for (const j of _comptJsV2.values())
99
+ if (
100
+ j.profileId === profileId &&
101
+ (j.status === COMPT_SAMPLE_LIFECYCLE_V2.QUEUED ||
102
+ j.status === COMPT_SAMPLE_LIFECYCLE_V2.RECORDING)
103
+ )
104
+ c++;
105
+ return c;
106
+ }
107
+ export function setMaxActiveComptProfilesPerOwnerV2(n) {
108
+ _comptMaxActive = _comptPos(n, "maxActiveComptProfilesPerOwner");
109
+ }
110
+ export function getMaxActiveComptProfilesPerOwnerV2() {
111
+ return _comptMaxActive;
112
+ }
113
+ export function setMaxPendingComptSamplesPerProfileV2(n) {
114
+ _comptMaxPending = _comptPos(n, "maxPendingComptSamplesPerProfile");
115
+ }
116
+ export function getMaxPendingComptSamplesPerProfileV2() {
117
+ return _comptMaxPending;
118
+ }
119
+ export function setComptProfileIdleMsV2(n) {
120
+ _comptIdleMs = _comptPos(n, "comptProfileIdleMs");
121
+ }
122
+ export function getComptProfileIdleMsV2() {
123
+ return _comptIdleMs;
124
+ }
125
+ export function setComptSampleStuckMsV2(n) {
126
+ _comptStuckMs = _comptPos(n, "comptSampleStuckMs");
127
+ }
128
+ export function getComptSampleStuckMsV2() {
129
+ return _comptStuckMs;
130
+ }
131
+ export function _resetStateCompressionTelemetryV2() {
132
+ _comptPsV2.clear();
133
+ _comptJsV2.clear();
134
+ _comptMaxActive = 10;
135
+ _comptMaxPending = 30;
136
+ _comptIdleMs = 30 * 24 * 60 * 60 * 1000;
137
+ _comptStuckMs = 30 * 1000;
138
+ }
44
139
  export function registerComptProfileV2({ id, owner, kind, metadata } = {}) {
45
140
  if (!id || !owner) throw new Error("id and owner required");
46
141
  if (_comptPsV2.has(id)) throw new Error(`compt profile ${id} already exists`);
47
142
  const now = Date.now();
48
- const p = { id, owner, kind: kind || "default", status: COMPT_PROFILE_MATURITY_V2.PENDING, createdAt: now, updatedAt: now, lastTouchedAt: now, activatedAt: null, archivedAt: null, metadata: { ...(metadata || {}) } };
49
- _comptPsV2.set(id, p); return { ...p, metadata: { ...p.metadata } };
143
+ const p = {
144
+ id,
145
+ owner,
146
+ kind: kind || "default",
147
+ status: COMPT_PROFILE_MATURITY_V2.PENDING,
148
+ createdAt: now,
149
+ updatedAt: now,
150
+ lastTouchedAt: now,
151
+ activatedAt: null,
152
+ archivedAt: null,
153
+ metadata: { ...(metadata || {}) },
154
+ };
155
+ _comptPsV2.set(id, p);
156
+ return { ...p, metadata: { ...p.metadata } };
50
157
  }
51
158
  export function activateComptProfileV2(id) {
52
- const p = _comptPsV2.get(id); if (!p) throw new Error(`compt profile ${id} not found`);
159
+ const p = _comptPsV2.get(id);
160
+ if (!p) throw new Error(`compt profile ${id} not found`);
53
161
  const isInitial = p.status === COMPT_PROFILE_MATURITY_V2.PENDING;
54
162
  _comptCheckP(p.status, COMPT_PROFILE_MATURITY_V2.ACTIVE);
55
- if (isInitial && _comptCountActive(p.owner) >= _comptMaxActive) throw new Error(`max active compt profiles for owner ${p.owner} reached`);
56
- const now = Date.now(); p.status = COMPT_PROFILE_MATURITY_V2.ACTIVE; p.updatedAt = now; p.lastTouchedAt = now;
163
+ if (isInitial && _comptCountActive(p.owner) >= _comptMaxActive)
164
+ throw new Error(`max active compt profiles for owner ${p.owner} reached`);
165
+ const now = Date.now();
166
+ p.status = COMPT_PROFILE_MATURITY_V2.ACTIVE;
167
+ p.updatedAt = now;
168
+ p.lastTouchedAt = now;
57
169
  if (!p.activatedAt) p.activatedAt = now;
58
170
  return { ...p, metadata: { ...p.metadata } };
59
171
  }
60
- export function staleComptProfileV2(id) { const p = _comptPsV2.get(id); if (!p) throw new Error(`compt profile ${id} not found`); _comptCheckP(p.status, COMPT_PROFILE_MATURITY_V2.STALE); p.status = COMPT_PROFILE_MATURITY_V2.STALE; p.updatedAt = Date.now(); return { ...p, metadata: { ...p.metadata } }; }
61
- export function archiveComptProfileV2(id) { const p = _comptPsV2.get(id); if (!p) throw new Error(`compt profile ${id} not found`); _comptCheckP(p.status, COMPT_PROFILE_MATURITY_V2.ARCHIVED); const now = Date.now(); p.status = COMPT_PROFILE_MATURITY_V2.ARCHIVED; p.updatedAt = now; if (!p.archivedAt) p.archivedAt = now; return { ...p, metadata: { ...p.metadata } }; }
62
- export function touchComptProfileV2(id) { const p = _comptPsV2.get(id); if (!p) throw new Error(`compt profile ${id} not found`); if (_comptPTerminal.has(p.status)) throw new Error(`cannot touch terminal compt profile ${id}`); const now = Date.now(); p.lastTouchedAt = now; p.updatedAt = now; return { ...p, metadata: { ...p.metadata } }; }
63
- export function getComptProfileV2(id) { const p = _comptPsV2.get(id); if (!p) return null; return { ...p, metadata: { ...p.metadata } }; }
64
- export function listComptProfilesV2() { return [..._comptPsV2.values()].map((p) => ({ ...p, metadata: { ...p.metadata } })); }
172
+ export function staleComptProfileV2(id) {
173
+ const p = _comptPsV2.get(id);
174
+ if (!p) throw new Error(`compt profile ${id} not found`);
175
+ _comptCheckP(p.status, COMPT_PROFILE_MATURITY_V2.STALE);
176
+ p.status = COMPT_PROFILE_MATURITY_V2.STALE;
177
+ p.updatedAt = Date.now();
178
+ return { ...p, metadata: { ...p.metadata } };
179
+ }
180
+ export function archiveComptProfileV2(id) {
181
+ const p = _comptPsV2.get(id);
182
+ if (!p) throw new Error(`compt profile ${id} not found`);
183
+ _comptCheckP(p.status, COMPT_PROFILE_MATURITY_V2.ARCHIVED);
184
+ const now = Date.now();
185
+ p.status = COMPT_PROFILE_MATURITY_V2.ARCHIVED;
186
+ p.updatedAt = now;
187
+ if (!p.archivedAt) p.archivedAt = now;
188
+ return { ...p, metadata: { ...p.metadata } };
189
+ }
190
+ export function touchComptProfileV2(id) {
191
+ const p = _comptPsV2.get(id);
192
+ if (!p) throw new Error(`compt profile ${id} not found`);
193
+ if (_comptPTerminal.has(p.status))
194
+ throw new Error(`cannot touch terminal compt profile ${id}`);
195
+ const now = Date.now();
196
+ p.lastTouchedAt = now;
197
+ p.updatedAt = now;
198
+ return { ...p, metadata: { ...p.metadata } };
199
+ }
200
+ export function getComptProfileV2(id) {
201
+ const p = _comptPsV2.get(id);
202
+ if (!p) return null;
203
+ return { ...p, metadata: { ...p.metadata } };
204
+ }
205
+ export function listComptProfilesV2() {
206
+ return [..._comptPsV2.values()].map((p) => ({
207
+ ...p,
208
+ metadata: { ...p.metadata },
209
+ }));
210
+ }
65
211
  export function createComptSampleV2({ id, profileId, metric, metadata } = {}) {
66
212
  if (!id || !profileId) throw new Error("id and profileId required");
67
213
  if (_comptJsV2.has(id)) throw new Error(`compt sample ${id} already exists`);
68
- if (!_comptPsV2.has(profileId)) throw new Error(`compt profile ${profileId} not found`);
69
- if (_comptCountPending(profileId) >= _comptMaxPending) throw new Error(`max pending compt samples for profile ${profileId} reached`);
214
+ if (!_comptPsV2.has(profileId))
215
+ throw new Error(`compt profile ${profileId} not found`);
216
+ if (_comptCountPending(profileId) >= _comptMaxPending)
217
+ throw new Error(
218
+ `max pending compt samples for profile ${profileId} reached`,
219
+ );
220
+ const now = Date.now();
221
+ const j = {
222
+ id,
223
+ profileId,
224
+ metric: metric || "",
225
+ status: COMPT_SAMPLE_LIFECYCLE_V2.QUEUED,
226
+ createdAt: now,
227
+ updatedAt: now,
228
+ startedAt: null,
229
+ settledAt: null,
230
+ metadata: { ...(metadata || {}) },
231
+ };
232
+ _comptJsV2.set(id, j);
233
+ return { ...j, metadata: { ...j.metadata } };
234
+ }
235
+ export function recordingComptSampleV2(id) {
236
+ const j = _comptJsV2.get(id);
237
+ if (!j) throw new Error(`compt sample ${id} not found`);
238
+ _comptCheckJ(j.status, COMPT_SAMPLE_LIFECYCLE_V2.RECORDING);
239
+ const now = Date.now();
240
+ j.status = COMPT_SAMPLE_LIFECYCLE_V2.RECORDING;
241
+ j.updatedAt = now;
242
+ if (!j.startedAt) j.startedAt = now;
243
+ return { ...j, metadata: { ...j.metadata } };
244
+ }
245
+ export function recordComptSampleV2(id) {
246
+ const j = _comptJsV2.get(id);
247
+ if (!j) throw new Error(`compt sample ${id} not found`);
248
+ _comptCheckJ(j.status, COMPT_SAMPLE_LIFECYCLE_V2.RECORDED);
249
+ const now = Date.now();
250
+ j.status = COMPT_SAMPLE_LIFECYCLE_V2.RECORDED;
251
+ j.updatedAt = now;
252
+ if (!j.settledAt) j.settledAt = now;
253
+ return { ...j, metadata: { ...j.metadata } };
254
+ }
255
+ export function failComptSampleV2(id, reason) {
256
+ const j = _comptJsV2.get(id);
257
+ if (!j) throw new Error(`compt sample ${id} not found`);
258
+ _comptCheckJ(j.status, COMPT_SAMPLE_LIFECYCLE_V2.FAILED);
259
+ const now = Date.now();
260
+ j.status = COMPT_SAMPLE_LIFECYCLE_V2.FAILED;
261
+ j.updatedAt = now;
262
+ if (!j.settledAt) j.settledAt = now;
263
+ if (reason) j.metadata.failReason = String(reason);
264
+ return { ...j, metadata: { ...j.metadata } };
265
+ }
266
+ export function cancelComptSampleV2(id, reason) {
267
+ const j = _comptJsV2.get(id);
268
+ if (!j) throw new Error(`compt sample ${id} not found`);
269
+ _comptCheckJ(j.status, COMPT_SAMPLE_LIFECYCLE_V2.CANCELLED);
70
270
  const now = Date.now();
71
- const j = { id, profileId, metric: metric || "", status: COMPT_SAMPLE_LIFECYCLE_V2.QUEUED, createdAt: now, updatedAt: now, startedAt: null, settledAt: null, metadata: { ...(metadata || {}) } };
72
- _comptJsV2.set(id, j); return { ...j, metadata: { ...j.metadata } };
73
- }
74
- export function recordingComptSampleV2(id) { const j = _comptJsV2.get(id); if (!j) throw new Error(`compt sample ${id} not found`); _comptCheckJ(j.status, COMPT_SAMPLE_LIFECYCLE_V2.RECORDING); const now = Date.now(); j.status = COMPT_SAMPLE_LIFECYCLE_V2.RECORDING; j.updatedAt = now; if (!j.startedAt) j.startedAt = now; return { ...j, metadata: { ...j.metadata } }; }
75
- export function recordComptSampleV2(id) { const j = _comptJsV2.get(id); if (!j) throw new Error(`compt sample ${id} not found`); _comptCheckJ(j.status, COMPT_SAMPLE_LIFECYCLE_V2.RECORDED); const now = Date.now(); j.status = COMPT_SAMPLE_LIFECYCLE_V2.RECORDED; j.updatedAt = now; if (!j.settledAt) j.settledAt = now; return { ...j, metadata: { ...j.metadata } }; }
76
- export function failComptSampleV2(id, reason) { const j = _comptJsV2.get(id); if (!j) throw new Error(`compt sample ${id} not found`); _comptCheckJ(j.status, COMPT_SAMPLE_LIFECYCLE_V2.FAILED); const now = Date.now(); j.status = COMPT_SAMPLE_LIFECYCLE_V2.FAILED; j.updatedAt = now; if (!j.settledAt) j.settledAt = now; if (reason) j.metadata.failReason = String(reason); return { ...j, metadata: { ...j.metadata } }; }
77
- export function cancelComptSampleV2(id, reason) { const j = _comptJsV2.get(id); if (!j) throw new Error(`compt sample ${id} not found`); _comptCheckJ(j.status, COMPT_SAMPLE_LIFECYCLE_V2.CANCELLED); const now = Date.now(); j.status = COMPT_SAMPLE_LIFECYCLE_V2.CANCELLED; j.updatedAt = now; if (!j.settledAt) j.settledAt = now; if (reason) j.metadata.cancelReason = String(reason); return { ...j, metadata: { ...j.metadata } }; }
78
- export function getComptSampleV2(id) { const j = _comptJsV2.get(id); if (!j) return null; return { ...j, metadata: { ...j.metadata } }; }
79
- export function listComptSamplesV2() { return [..._comptJsV2.values()].map((j) => ({ ...j, metadata: { ...j.metadata } })); }
80
- export function autoStaleIdleComptProfilesV2({ now } = {}) { const t = now ?? Date.now(); const flipped = []; for (const p of _comptPsV2.values()) if (p.status === COMPT_PROFILE_MATURITY_V2.ACTIVE && (t - p.lastTouchedAt) >= _comptIdleMs) { p.status = COMPT_PROFILE_MATURITY_V2.STALE; p.updatedAt = t; flipped.push(p.id); } return { flipped, count: flipped.length }; }
81
- export function autoFailStuckComptSamplesV2({ now } = {}) { const t = now ?? Date.now(); const flipped = []; for (const j of _comptJsV2.values()) if (j.status === COMPT_SAMPLE_LIFECYCLE_V2.RECORDING && j.startedAt != null && (t - j.startedAt) >= _comptStuckMs) { j.status = COMPT_SAMPLE_LIFECYCLE_V2.FAILED; j.updatedAt = t; if (!j.settledAt) j.settledAt = t; j.metadata.failReason = "auto-fail-stuck"; flipped.push(j.id); } return { flipped, count: flipped.length }; }
271
+ j.status = COMPT_SAMPLE_LIFECYCLE_V2.CANCELLED;
272
+ j.updatedAt = now;
273
+ if (!j.settledAt) j.settledAt = now;
274
+ if (reason) j.metadata.cancelReason = String(reason);
275
+ return { ...j, metadata: { ...j.metadata } };
276
+ }
277
+ export function getComptSampleV2(id) {
278
+ const j = _comptJsV2.get(id);
279
+ if (!j) return null;
280
+ return { ...j, metadata: { ...j.metadata } };
281
+ }
282
+ export function listComptSamplesV2() {
283
+ return [..._comptJsV2.values()].map((j) => ({
284
+ ...j,
285
+ metadata: { ...j.metadata },
286
+ }));
287
+ }
288
+ export function autoStaleIdleComptProfilesV2({ now } = {}) {
289
+ const t = now ?? Date.now();
290
+ const flipped = [];
291
+ for (const p of _comptPsV2.values())
292
+ if (
293
+ p.status === COMPT_PROFILE_MATURITY_V2.ACTIVE &&
294
+ t - p.lastTouchedAt >= _comptIdleMs
295
+ ) {
296
+ p.status = COMPT_PROFILE_MATURITY_V2.STALE;
297
+ p.updatedAt = t;
298
+ flipped.push(p.id);
299
+ }
300
+ return { flipped, count: flipped.length };
301
+ }
302
+ export function autoFailStuckComptSamplesV2({ now } = {}) {
303
+ const t = now ?? Date.now();
304
+ const flipped = [];
305
+ for (const j of _comptJsV2.values())
306
+ if (
307
+ j.status === COMPT_SAMPLE_LIFECYCLE_V2.RECORDING &&
308
+ j.startedAt != null &&
309
+ t - j.startedAt >= _comptStuckMs
310
+ ) {
311
+ j.status = COMPT_SAMPLE_LIFECYCLE_V2.FAILED;
312
+ j.updatedAt = t;
313
+ if (!j.settledAt) j.settledAt = t;
314
+ j.metadata.failReason = "auto-fail-stuck";
315
+ flipped.push(j.id);
316
+ }
317
+ return { flipped, count: flipped.length };
318
+ }
82
319
  export function getCompressionTelemetryGovStatsV2() {
83
- const profilesByStatus = {}; for (const v of Object.values(COMPT_PROFILE_MATURITY_V2)) profilesByStatus[v] = 0; for (const p of _comptPsV2.values()) profilesByStatus[p.status]++;
84
- const samplesByStatus = {}; for (const v of Object.values(COMPT_SAMPLE_LIFECYCLE_V2)) samplesByStatus[v] = 0; for (const j of _comptJsV2.values()) samplesByStatus[j.status]++;
85
- return { totalComptProfilesV2: _comptPsV2.size, totalComptSamplesV2: _comptJsV2.size, maxActiveComptProfilesPerOwner: _comptMaxActive, maxPendingComptSamplesPerProfile: _comptMaxPending, comptProfileIdleMs: _comptIdleMs, comptSampleStuckMs: _comptStuckMs, profilesByStatus, samplesByStatus };
320
+ const profilesByStatus = {};
321
+ for (const v of Object.values(COMPT_PROFILE_MATURITY_V2))
322
+ profilesByStatus[v] = 0;
323
+ for (const p of _comptPsV2.values()) profilesByStatus[p.status]++;
324
+ const samplesByStatus = {};
325
+ for (const v of Object.values(COMPT_SAMPLE_LIFECYCLE_V2))
326
+ samplesByStatus[v] = 0;
327
+ for (const j of _comptJsV2.values()) samplesByStatus[j.status]++;
328
+ return {
329
+ totalComptProfilesV2: _comptPsV2.size,
330
+ totalComptSamplesV2: _comptJsV2.size,
331
+ maxActiveComptProfilesPerOwner: _comptMaxActive,
332
+ maxPendingComptSamplesPerProfile: _comptMaxPending,
333
+ comptProfileIdleMs: _comptIdleMs,
334
+ comptSampleStuckMs: _comptStuckMs,
335
+ profilesByStatus,
336
+ samplesByStatus,
337
+ };
86
338
  }