chainlesschain 0.143.0 → 0.145.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 (133) hide show
  1. package/package.json +1 -1
  2. package/src/commands/a2a.js +196 -28
  3. package/src/commands/activitypub.js +157 -27
  4. package/src/commands/agent.js +587 -103
  5. package/src/commands/audit.js +206 -0
  6. package/src/commands/bi.js +152 -27
  7. package/src/commands/bm25.js +111 -27
  8. package/src/commands/browse.js +190 -29
  9. package/src/commands/ccron.js +128 -28
  10. package/src/commands/chat.js +207 -0
  11. package/src/commands/compliance.js +414 -34
  12. package/src/commands/compt.js +127 -29
  13. package/src/commands/consol.js +8 -2
  14. package/src/commands/cowork.js +580 -34
  15. package/src/commands/crosschain.js +182 -28
  16. package/src/commands/dao.js +182 -28
  17. package/src/commands/dlp.js +172 -27
  18. package/src/commands/economy.js +205 -50
  19. package/src/commands/evolution.js +203 -50
  20. package/src/commands/evomap.js +182 -27
  21. package/src/commands/fflag.js +74 -22
  22. package/src/commands/git.js +177 -37
  23. package/src/commands/hardening.js +209 -0
  24. package/src/commands/hmemory.js +204 -50
  25. package/src/commands/incentive.js +209 -0
  26. package/src/commands/inference.js +170 -34
  27. package/src/commands/itbudget.js +149 -33
  28. package/src/commands/kg.js +206 -0
  29. package/src/commands/lowcode.js +195 -38
  30. package/src/commands/marketplace.js +206 -0
  31. package/src/commands/matrix.js +179 -27
  32. package/src/commands/mcpscaf.js +145 -33
  33. package/src/commands/meminj.js +145 -33
  34. package/src/commands/nostr.js +178 -27
  35. package/src/commands/orchestrate.js +217 -0
  36. package/src/commands/orchgov.js +144 -33
  37. package/src/commands/pdfp.js +109 -27
  38. package/src/commands/perf.js +169 -32
  39. package/src/commands/perm.js +144 -33
  40. package/src/commands/pipeline.js +207 -52
  41. package/src/commands/planmode.js +141 -32
  42. package/src/commands/privacy.js +203 -0
  43. package/src/commands/promcomp.js +111 -27
  44. package/src/commands/recommend.js +177 -34
  45. package/src/commands/reputation.js +208 -0
  46. package/src/commands/sandbox.js +206 -0
  47. package/src/commands/seshhook.js +145 -33
  48. package/src/commands/seshsearch.js +141 -33
  49. package/src/commands/seshtail.js +144 -33
  50. package/src/commands/seshu.js +152 -33
  51. package/src/commands/sganal.js +123 -29
  52. package/src/commands/siem.js +201 -34
  53. package/src/commands/sla.js +212 -0
  54. package/src/commands/slotfill.js +146 -33
  55. package/src/commands/social.js +157 -32
  56. package/src/commands/stress.js +206 -0
  57. package/src/commands/svccont.js +145 -33
  58. package/src/commands/terraform.js +206 -0
  59. package/src/commands/tms.js +171 -33
  60. package/src/commands/topiccls.js +146 -33
  61. package/src/commands/uprof.js +141 -32
  62. package/src/commands/vcheck.js +122 -28
  63. package/src/commands/webfetch.js +141 -32
  64. package/src/commands/zkp.js +184 -28
  65. package/src/index.js +40 -0
  66. package/src/lib/a2a-protocol.js +319 -51
  67. package/src/lib/activitypub-bridge.js +288 -50
  68. package/src/lib/agent-economy.js +304 -51
  69. package/src/lib/app-builder.js +279 -46
  70. package/src/lib/audit-logger.js +321 -0
  71. package/src/lib/autonomous-agent.js +284 -48
  72. package/src/lib/bi-engine.js +283 -49
  73. package/src/lib/bm25-search.js +301 -49
  74. package/src/lib/browser-automation.js +296 -49
  75. package/src/lib/chat-core.js +336 -0
  76. package/src/lib/claude-code-bridge.js +341 -0
  77. package/src/lib/compliance-framework-reporter.js +305 -51
  78. package/src/lib/compliance-manager.js +330 -0
  79. package/src/lib/compression-telemetry.js +301 -49
  80. package/src/lib/content-recommender.js +317 -52
  81. package/src/lib/cowork-cron.js +298 -49
  82. package/src/lib/cowork-learning.js +333 -0
  83. package/src/lib/cowork-task-runner.js +308 -51
  84. package/src/lib/cowork-workflow.js +327 -0
  85. package/src/lib/cross-chain.js +311 -51
  86. package/src/lib/dao-governance.js +280 -46
  87. package/src/lib/dlp-engine.js +287 -49
  88. package/src/lib/evolution-system.js +278 -47
  89. package/src/lib/evomap-manager.js +280 -46
  90. package/src/lib/execution-backend.js +294 -48
  91. package/src/lib/feature-flags.js +294 -49
  92. package/src/lib/git-integration.js +285 -47
  93. package/src/lib/hardening-manager.js +341 -0
  94. package/src/lib/hierarchical-memory.js +284 -48
  95. package/src/lib/inference-network.js +308 -51
  96. package/src/lib/iteration-budget.js +302 -50
  97. package/src/lib/knowledge-graph.js +333 -0
  98. package/src/lib/matrix-bridge.js +281 -47
  99. package/src/lib/mcp-scaffold.js +318 -54
  100. package/src/lib/memory-injection.js +288 -49
  101. package/src/lib/nostr-bridge.js +286 -49
  102. package/src/lib/orchestrator.js +293 -48
  103. package/src/lib/pdf-parser.js +298 -49
  104. package/src/lib/perf-tuning.js +309 -50
  105. package/src/lib/permission-engine.js +287 -49
  106. package/src/lib/pipeline-orchestrator.js +289 -49
  107. package/src/lib/plan-mode.js +298 -51
  108. package/src/lib/privacy-computing.js +335 -0
  109. package/src/lib/reputation-optimizer.js +340 -0
  110. package/src/lib/sandbox-v2.js +327 -0
  111. package/src/lib/service-container.js +313 -52
  112. package/src/lib/session-consolidator.js +296 -49
  113. package/src/lib/session-hooks.js +312 -53
  114. package/src/lib/session-search.js +304 -51
  115. package/src/lib/session-tail.js +288 -49
  116. package/src/lib/session-usage.js +298 -52
  117. package/src/lib/siem-exporter.js +298 -51
  118. package/src/lib/skill-marketplace.js +345 -0
  119. package/src/lib/sla-manager.js +341 -0
  120. package/src/lib/slot-filler.js +303 -51
  121. package/src/lib/social-graph-analytics.js +295 -49
  122. package/src/lib/social-graph.js +272 -49
  123. package/src/lib/stress-tester.js +342 -0
  124. package/src/lib/sub-agent-registry.js +302 -53
  125. package/src/lib/task-model-selector.js +302 -50
  126. package/src/lib/terraform-manager.js +333 -0
  127. package/src/lib/todo-manager.js +281 -47
  128. package/src/lib/token-incentive.js +341 -0
  129. package/src/lib/topic-classifier.js +297 -49
  130. package/src/lib/user-profile.js +294 -50
  131. package/src/lib/version-checker.js +304 -50
  132. package/src/lib/web-fetch.js +292 -51
  133. package/src/lib/zkp-engine.js +286 -49
@@ -184,81 +184,342 @@ export function createServiceContainer() {
184
184
 
185
185
  // ===== V2 Surface: Service Container governance overlay (CLI v0.141.0) =====
186
186
  export const SVC_CONTAINER_MATURITY_V2 = Object.freeze({
187
- PENDING: "pending", ACTIVE: "active", DEGRADED: "degraded", DECOMMISSIONED: "decommissioned",
187
+ PENDING: "pending",
188
+ ACTIVE: "active",
189
+ DEGRADED: "degraded",
190
+ DECOMMISSIONED: "decommissioned",
188
191
  });
189
192
  export const SVC_RESOLUTION_LIFECYCLE_V2 = Object.freeze({
190
- QUEUED: "queued", RESOLVING: "resolving", RESOLVED: "resolved", FAILED: "failed", CANCELLED: "cancelled",
193
+ QUEUED: "queued",
194
+ RESOLVING: "resolving",
195
+ RESOLVED: "resolved",
196
+ FAILED: "failed",
197
+ CANCELLED: "cancelled",
191
198
  });
192
199
  const _svcCTrans = new Map([
193
- [SVC_CONTAINER_MATURITY_V2.PENDING, new Set([SVC_CONTAINER_MATURITY_V2.ACTIVE, SVC_CONTAINER_MATURITY_V2.DECOMMISSIONED])],
194
- [SVC_CONTAINER_MATURITY_V2.ACTIVE, new Set([SVC_CONTAINER_MATURITY_V2.DEGRADED, SVC_CONTAINER_MATURITY_V2.DECOMMISSIONED])],
195
- [SVC_CONTAINER_MATURITY_V2.DEGRADED, new Set([SVC_CONTAINER_MATURITY_V2.ACTIVE, SVC_CONTAINER_MATURITY_V2.DECOMMISSIONED])],
200
+ [
201
+ SVC_CONTAINER_MATURITY_V2.PENDING,
202
+ new Set([
203
+ SVC_CONTAINER_MATURITY_V2.ACTIVE,
204
+ SVC_CONTAINER_MATURITY_V2.DECOMMISSIONED,
205
+ ]),
206
+ ],
207
+ [
208
+ SVC_CONTAINER_MATURITY_V2.ACTIVE,
209
+ new Set([
210
+ SVC_CONTAINER_MATURITY_V2.DEGRADED,
211
+ SVC_CONTAINER_MATURITY_V2.DECOMMISSIONED,
212
+ ]),
213
+ ],
214
+ [
215
+ SVC_CONTAINER_MATURITY_V2.DEGRADED,
216
+ new Set([
217
+ SVC_CONTAINER_MATURITY_V2.ACTIVE,
218
+ SVC_CONTAINER_MATURITY_V2.DECOMMISSIONED,
219
+ ]),
220
+ ],
196
221
  [SVC_CONTAINER_MATURITY_V2.DECOMMISSIONED, new Set()],
197
222
  ]);
198
223
  const _svcCTerminal = new Set([SVC_CONTAINER_MATURITY_V2.DECOMMISSIONED]);
199
224
  const _svcRTrans = new Map([
200
- [SVC_RESOLUTION_LIFECYCLE_V2.QUEUED, new Set([SVC_RESOLUTION_LIFECYCLE_V2.RESOLVING, SVC_RESOLUTION_LIFECYCLE_V2.CANCELLED])],
201
- [SVC_RESOLUTION_LIFECYCLE_V2.RESOLVING, new Set([SVC_RESOLUTION_LIFECYCLE_V2.RESOLVED, SVC_RESOLUTION_LIFECYCLE_V2.FAILED, SVC_RESOLUTION_LIFECYCLE_V2.CANCELLED])],
225
+ [
226
+ SVC_RESOLUTION_LIFECYCLE_V2.QUEUED,
227
+ new Set([
228
+ SVC_RESOLUTION_LIFECYCLE_V2.RESOLVING,
229
+ SVC_RESOLUTION_LIFECYCLE_V2.CANCELLED,
230
+ ]),
231
+ ],
232
+ [
233
+ SVC_RESOLUTION_LIFECYCLE_V2.RESOLVING,
234
+ new Set([
235
+ SVC_RESOLUTION_LIFECYCLE_V2.RESOLVED,
236
+ SVC_RESOLUTION_LIFECYCLE_V2.FAILED,
237
+ SVC_RESOLUTION_LIFECYCLE_V2.CANCELLED,
238
+ ]),
239
+ ],
202
240
  [SVC_RESOLUTION_LIFECYCLE_V2.RESOLVED, new Set()],
203
241
  [SVC_RESOLUTION_LIFECYCLE_V2.FAILED, new Set()],
204
242
  [SVC_RESOLUTION_LIFECYCLE_V2.CANCELLED, new Set()],
205
243
  ]);
206
244
  const _svcCsV2 = new Map();
207
245
  const _svcRsV2 = new Map();
208
- let _svcMaxActivePerOwner = 8, _svcMaxPendingResPerContainer = 25, _svcIdleMs = 60 * 60 * 1000, _svcStuckMs = 30 * 1000;
209
- function _svcPos(n, label) { const v = Math.floor(Number(n)); if (!Number.isFinite(v) || v <= 0) throw new Error(`${label} must be positive integer`); return v; }
210
- function _svcCheckC(from, to) { const a = _svcCTrans.get(from); if (!a || !a.has(to)) throw new Error(`invalid svc container transition ${from} → ${to}`); }
211
- function _svcCheckR(from, to) { const a = _svcRTrans.get(from); if (!a || !a.has(to)) throw new Error(`invalid svc resolution transition ${from} → ${to}`); }
212
- export function setMaxActiveSvcContainersPerOwnerV2(n) { _svcMaxActivePerOwner = _svcPos(n, "maxActiveSvcContainersPerOwner"); }
213
- export function getMaxActiveSvcContainersPerOwnerV2() { return _svcMaxActivePerOwner; }
214
- export function setMaxPendingSvcResolutionsPerContainerV2(n) { _svcMaxPendingResPerContainer = _svcPos(n, "maxPendingSvcResolutionsPerContainer"); }
215
- export function getMaxPendingSvcResolutionsPerContainerV2() { return _svcMaxPendingResPerContainer; }
216
- export function setSvcContainerIdleMsV2(n) { _svcIdleMs = _svcPos(n, "svcContainerIdleMs"); }
217
- export function getSvcContainerIdleMsV2() { return _svcIdleMs; }
218
- export function setSvcResolutionStuckMsV2(n) { _svcStuckMs = _svcPos(n, "svcResolutionStuckMs"); }
219
- export function getSvcResolutionStuckMsV2() { return _svcStuckMs; }
220
- export function _resetStateServiceContainerV2() { _svcCsV2.clear(); _svcRsV2.clear(); _svcMaxActivePerOwner = 8; _svcMaxPendingResPerContainer = 25; _svcIdleMs = 60 * 60 * 1000; _svcStuckMs = 30 * 1000; }
246
+ let _svcMaxActivePerOwner = 8,
247
+ _svcMaxPendingResPerContainer = 25,
248
+ _svcIdleMs = 60 * 60 * 1000,
249
+ _svcStuckMs = 30 * 1000;
250
+ function _svcPos(n, label) {
251
+ const v = Math.floor(Number(n));
252
+ if (!Number.isFinite(v) || v <= 0)
253
+ throw new Error(`${label} must be positive integer`);
254
+ return v;
255
+ }
256
+ function _svcCheckC(from, to) {
257
+ const a = _svcCTrans.get(from);
258
+ if (!a || !a.has(to))
259
+ throw new Error(`invalid svc container transition ${from} → ${to}`);
260
+ }
261
+ function _svcCheckR(from, to) {
262
+ const a = _svcRTrans.get(from);
263
+ if (!a || !a.has(to))
264
+ throw new Error(`invalid svc resolution transition ${from} → ${to}`);
265
+ }
266
+ export function setMaxActiveSvcContainersPerOwnerV2(n) {
267
+ _svcMaxActivePerOwner = _svcPos(n, "maxActiveSvcContainersPerOwner");
268
+ }
269
+ export function getMaxActiveSvcContainersPerOwnerV2() {
270
+ return _svcMaxActivePerOwner;
271
+ }
272
+ export function setMaxPendingSvcResolutionsPerContainerV2(n) {
273
+ _svcMaxPendingResPerContainer = _svcPos(
274
+ n,
275
+ "maxPendingSvcResolutionsPerContainer",
276
+ );
277
+ }
278
+ export function getMaxPendingSvcResolutionsPerContainerV2() {
279
+ return _svcMaxPendingResPerContainer;
280
+ }
281
+ export function setSvcContainerIdleMsV2(n) {
282
+ _svcIdleMs = _svcPos(n, "svcContainerIdleMs");
283
+ }
284
+ export function getSvcContainerIdleMsV2() {
285
+ return _svcIdleMs;
286
+ }
287
+ export function setSvcResolutionStuckMsV2(n) {
288
+ _svcStuckMs = _svcPos(n, "svcResolutionStuckMs");
289
+ }
290
+ export function getSvcResolutionStuckMsV2() {
291
+ return _svcStuckMs;
292
+ }
293
+ export function _resetStateServiceContainerV2() {
294
+ _svcCsV2.clear();
295
+ _svcRsV2.clear();
296
+ _svcMaxActivePerOwner = 8;
297
+ _svcMaxPendingResPerContainer = 25;
298
+ _svcIdleMs = 60 * 60 * 1000;
299
+ _svcStuckMs = 30 * 1000;
300
+ }
221
301
  export function registerSvcContainerV2({ id, owner, scope, metadata } = {}) {
222
- if (!id) throw new Error("svc container id required"); if (!owner) throw new Error("svc container owner required");
223
- if (_svcCsV2.has(id)) throw new Error(`svc container ${id} already registered`);
302
+ if (!id) throw new Error("svc container id required");
303
+ if (!owner) throw new Error("svc container owner required");
304
+ if (_svcCsV2.has(id))
305
+ throw new Error(`svc container ${id} already registered`);
224
306
  const now = Date.now();
225
- const c = { id, owner, scope: scope || "default", status: SVC_CONTAINER_MATURITY_V2.PENDING, createdAt: now, updatedAt: now, activatedAt: null, decommissionedAt: null, lastTouchedAt: now, metadata: { ...(metadata || {}) } };
226
- _svcCsV2.set(id, c); return { ...c, metadata: { ...c.metadata } };
307
+ const c = {
308
+ id,
309
+ owner,
310
+ scope: scope || "default",
311
+ status: SVC_CONTAINER_MATURITY_V2.PENDING,
312
+ createdAt: now,
313
+ updatedAt: now,
314
+ activatedAt: null,
315
+ decommissionedAt: null,
316
+ lastTouchedAt: now,
317
+ metadata: { ...(metadata || {}) },
318
+ };
319
+ _svcCsV2.set(id, c);
320
+ return { ...c, metadata: { ...c.metadata } };
321
+ }
322
+ function _svcCountActive(owner) {
323
+ let n = 0;
324
+ for (const c of _svcCsV2.values())
325
+ if (c.owner === owner && c.status === SVC_CONTAINER_MATURITY_V2.ACTIVE) n++;
326
+ return n;
227
327
  }
228
- function _svcCountActive(owner) { let n = 0; for (const c of _svcCsV2.values()) if (c.owner === owner && c.status === SVC_CONTAINER_MATURITY_V2.ACTIVE) n++; return n; }
229
328
  export function activateSvcContainerV2(id) {
230
- const c = _svcCsV2.get(id); if (!c) throw new Error(`svc container ${id} not found`);
329
+ const c = _svcCsV2.get(id);
330
+ if (!c) throw new Error(`svc container ${id} not found`);
231
331
  _svcCheckC(c.status, SVC_CONTAINER_MATURITY_V2.ACTIVE);
232
332
  const recovery = c.status === SVC_CONTAINER_MATURITY_V2.DEGRADED;
233
- if (!recovery && _svcCountActive(c.owner) >= _svcMaxActivePerOwner) throw new Error(`max active svc containers for owner ${c.owner} reached`);
234
- const now = Date.now(); c.status = SVC_CONTAINER_MATURITY_V2.ACTIVE; c.updatedAt = now; c.lastTouchedAt = now; if (!c.activatedAt) c.activatedAt = now;
333
+ if (!recovery && _svcCountActive(c.owner) >= _svcMaxActivePerOwner)
334
+ throw new Error(`max active svc containers for owner ${c.owner} reached`);
335
+ const now = Date.now();
336
+ c.status = SVC_CONTAINER_MATURITY_V2.ACTIVE;
337
+ c.updatedAt = now;
338
+ c.lastTouchedAt = now;
339
+ if (!c.activatedAt) c.activatedAt = now;
340
+ return { ...c, metadata: { ...c.metadata } };
341
+ }
342
+ export function degradeSvcContainerV2(id) {
343
+ const c = _svcCsV2.get(id);
344
+ if (!c) throw new Error(`svc container ${id} not found`);
345
+ _svcCheckC(c.status, SVC_CONTAINER_MATURITY_V2.DEGRADED);
346
+ c.status = SVC_CONTAINER_MATURITY_V2.DEGRADED;
347
+ c.updatedAt = Date.now();
348
+ return { ...c, metadata: { ...c.metadata } };
349
+ }
350
+ export function decommissionSvcContainerV2(id) {
351
+ const c = _svcCsV2.get(id);
352
+ if (!c) throw new Error(`svc container ${id} not found`);
353
+ _svcCheckC(c.status, SVC_CONTAINER_MATURITY_V2.DECOMMISSIONED);
354
+ const now = Date.now();
355
+ c.status = SVC_CONTAINER_MATURITY_V2.DECOMMISSIONED;
356
+ c.updatedAt = now;
357
+ if (!c.decommissionedAt) c.decommissionedAt = now;
358
+ return { ...c, metadata: { ...c.metadata } };
359
+ }
360
+ export function touchSvcContainerV2(id) {
361
+ const c = _svcCsV2.get(id);
362
+ if (!c) throw new Error(`svc container ${id} not found`);
363
+ if (_svcCTerminal.has(c.status))
364
+ throw new Error(`cannot touch terminal svc container ${id}`);
365
+ const now = Date.now();
366
+ c.lastTouchedAt = now;
367
+ c.updatedAt = now;
368
+ return { ...c, metadata: { ...c.metadata } };
369
+ }
370
+ export function getSvcContainerV2(id) {
371
+ const c = _svcCsV2.get(id);
372
+ if (!c) return null;
235
373
  return { ...c, metadata: { ...c.metadata } };
236
374
  }
237
- export function degradeSvcContainerV2(id) { const c = _svcCsV2.get(id); if (!c) throw new Error(`svc container ${id} not found`); _svcCheckC(c.status, SVC_CONTAINER_MATURITY_V2.DEGRADED); c.status = SVC_CONTAINER_MATURITY_V2.DEGRADED; c.updatedAt = Date.now(); return { ...c, metadata: { ...c.metadata } }; }
238
- export function decommissionSvcContainerV2(id) { const c = _svcCsV2.get(id); if (!c) throw new Error(`svc container ${id} not found`); _svcCheckC(c.status, SVC_CONTAINER_MATURITY_V2.DECOMMISSIONED); const now = Date.now(); c.status = SVC_CONTAINER_MATURITY_V2.DECOMMISSIONED; c.updatedAt = now; if (!c.decommissionedAt) c.decommissionedAt = now; return { ...c, metadata: { ...c.metadata } }; }
239
- export function touchSvcContainerV2(id) { const c = _svcCsV2.get(id); if (!c) throw new Error(`svc container ${id} not found`); if (_svcCTerminal.has(c.status)) throw new Error(`cannot touch terminal svc container ${id}`); const now = Date.now(); c.lastTouchedAt = now; c.updatedAt = now; return { ...c, metadata: { ...c.metadata } }; }
240
- export function getSvcContainerV2(id) { const c = _svcCsV2.get(id); if (!c) return null; return { ...c, metadata: { ...c.metadata } }; }
241
- export function listSvcContainersV2() { return [..._svcCsV2.values()].map((c) => ({ ...c, metadata: { ...c.metadata } })); }
242
- function _svcCountPending(containerId) { let n = 0; for (const r of _svcRsV2.values()) if (r.containerId === containerId && (r.status === SVC_RESOLUTION_LIFECYCLE_V2.QUEUED || r.status === SVC_RESOLUTION_LIFECYCLE_V2.RESOLVING)) n++; return n; }
243
- export function createSvcResolutionV2({ id, containerId, token, metadata } = {}) {
244
- if (!id) throw new Error("svc resolution id required"); if (!containerId) throw new Error("svc resolution containerId required");
375
+ export function listSvcContainersV2() {
376
+ return [..._svcCsV2.values()].map((c) => ({
377
+ ...c,
378
+ metadata: { ...c.metadata },
379
+ }));
380
+ }
381
+ function _svcCountPending(containerId) {
382
+ let n = 0;
383
+ for (const r of _svcRsV2.values())
384
+ if (
385
+ r.containerId === containerId &&
386
+ (r.status === SVC_RESOLUTION_LIFECYCLE_V2.QUEUED ||
387
+ r.status === SVC_RESOLUTION_LIFECYCLE_V2.RESOLVING)
388
+ )
389
+ n++;
390
+ return n;
391
+ }
392
+ export function createSvcResolutionV2({
393
+ id,
394
+ containerId,
395
+ token,
396
+ metadata,
397
+ } = {}) {
398
+ if (!id) throw new Error("svc resolution id required");
399
+ if (!containerId) throw new Error("svc resolution containerId required");
245
400
  if (_svcRsV2.has(id)) throw new Error(`svc resolution ${id} already exists`);
246
- if (!_svcCsV2.has(containerId)) throw new Error(`svc container ${containerId} not found`);
247
- if (_svcCountPending(containerId) >= _svcMaxPendingResPerContainer) throw new Error(`max pending svc resolutions for container ${containerId} reached`);
401
+ if (!_svcCsV2.has(containerId))
402
+ throw new Error(`svc container ${containerId} not found`);
403
+ if (_svcCountPending(containerId) >= _svcMaxPendingResPerContainer)
404
+ throw new Error(
405
+ `max pending svc resolutions for container ${containerId} reached`,
406
+ );
248
407
  const now = Date.now();
249
- const r = { id, containerId, token: token || "", status: SVC_RESOLUTION_LIFECYCLE_V2.QUEUED, createdAt: now, updatedAt: now, startedAt: null, settledAt: null, metadata: { ...(metadata || {}) } };
250
- _svcRsV2.set(id, r); return { ...r, metadata: { ...r.metadata } };
251
- }
252
- export function resolvingSvcResolutionV2(id) { const r = _svcRsV2.get(id); if (!r) throw new Error(`svc resolution ${id} not found`); _svcCheckR(r.status, SVC_RESOLUTION_LIFECYCLE_V2.RESOLVING); const now = Date.now(); r.status = SVC_RESOLUTION_LIFECYCLE_V2.RESOLVING; r.updatedAt = now; if (!r.startedAt) r.startedAt = now; return { ...r, metadata: { ...r.metadata } }; }
253
- export function resolveSvcResolutionV2(id) { const r = _svcRsV2.get(id); if (!r) throw new Error(`svc resolution ${id} not found`); _svcCheckR(r.status, SVC_RESOLUTION_LIFECYCLE_V2.RESOLVED); const now = Date.now(); r.status = SVC_RESOLUTION_LIFECYCLE_V2.RESOLVED; r.updatedAt = now; if (!r.settledAt) r.settledAt = now; return { ...r, metadata: { ...r.metadata } }; }
254
- export function failSvcResolutionV2(id, reason) { const r = _svcRsV2.get(id); if (!r) throw new Error(`svc resolution ${id} not found`); _svcCheckR(r.status, SVC_RESOLUTION_LIFECYCLE_V2.FAILED); const now = Date.now(); r.status = SVC_RESOLUTION_LIFECYCLE_V2.FAILED; r.updatedAt = now; if (!r.settledAt) r.settledAt = now; if (reason) r.metadata.failReason = String(reason); return { ...r, metadata: { ...r.metadata } }; }
255
- export function cancelSvcResolutionV2(id, reason) { const r = _svcRsV2.get(id); if (!r) throw new Error(`svc resolution ${id} not found`); _svcCheckR(r.status, SVC_RESOLUTION_LIFECYCLE_V2.CANCELLED); const now = Date.now(); r.status = SVC_RESOLUTION_LIFECYCLE_V2.CANCELLED; r.updatedAt = now; if (!r.settledAt) r.settledAt = now; if (reason) r.metadata.cancelReason = String(reason); return { ...r, metadata: { ...r.metadata } }; }
256
- export function getSvcResolutionV2(id) { const r = _svcRsV2.get(id); if (!r) return null; return { ...r, metadata: { ...r.metadata } }; }
257
- export function listSvcResolutionsV2() { return [..._svcRsV2.values()].map((r) => ({ ...r, metadata: { ...r.metadata } })); }
258
- export function autoDegradeIdleSvcContainersV2({ now } = {}) { const t = now ?? Date.now(); const flipped = []; for (const c of _svcCsV2.values()) if (c.status === SVC_CONTAINER_MATURITY_V2.ACTIVE && (t - c.lastTouchedAt) >= _svcIdleMs) { c.status = SVC_CONTAINER_MATURITY_V2.DEGRADED; c.updatedAt = t; flipped.push(c.id); } return { flipped, count: flipped.length }; }
259
- export function autoFailStuckSvcResolutionsV2({ now } = {}) { const t = now ?? Date.now(); const flipped = []; for (const r of _svcRsV2.values()) if (r.status === SVC_RESOLUTION_LIFECYCLE_V2.RESOLVING && r.startedAt != null && (t - r.startedAt) >= _svcStuckMs) { r.status = SVC_RESOLUTION_LIFECYCLE_V2.FAILED; r.updatedAt = t; if (!r.settledAt) r.settledAt = t; r.metadata.failReason = "auto-fail-stuck"; flipped.push(r.id); } return { flipped, count: flipped.length }; }
408
+ const r = {
409
+ id,
410
+ containerId,
411
+ token: token || "",
412
+ status: SVC_RESOLUTION_LIFECYCLE_V2.QUEUED,
413
+ createdAt: now,
414
+ updatedAt: now,
415
+ startedAt: null,
416
+ settledAt: null,
417
+ metadata: { ...(metadata || {}) },
418
+ };
419
+ _svcRsV2.set(id, r);
420
+ return { ...r, metadata: { ...r.metadata } };
421
+ }
422
+ export function resolvingSvcResolutionV2(id) {
423
+ const r = _svcRsV2.get(id);
424
+ if (!r) throw new Error(`svc resolution ${id} not found`);
425
+ _svcCheckR(r.status, SVC_RESOLUTION_LIFECYCLE_V2.RESOLVING);
426
+ const now = Date.now();
427
+ r.status = SVC_RESOLUTION_LIFECYCLE_V2.RESOLVING;
428
+ r.updatedAt = now;
429
+ if (!r.startedAt) r.startedAt = now;
430
+ return { ...r, metadata: { ...r.metadata } };
431
+ }
432
+ export function resolveSvcResolutionV2(id) {
433
+ const r = _svcRsV2.get(id);
434
+ if (!r) throw new Error(`svc resolution ${id} not found`);
435
+ _svcCheckR(r.status, SVC_RESOLUTION_LIFECYCLE_V2.RESOLVED);
436
+ const now = Date.now();
437
+ r.status = SVC_RESOLUTION_LIFECYCLE_V2.RESOLVED;
438
+ r.updatedAt = now;
439
+ if (!r.settledAt) r.settledAt = now;
440
+ return { ...r, metadata: { ...r.metadata } };
441
+ }
442
+ export function failSvcResolutionV2(id, reason) {
443
+ const r = _svcRsV2.get(id);
444
+ if (!r) throw new Error(`svc resolution ${id} not found`);
445
+ _svcCheckR(r.status, SVC_RESOLUTION_LIFECYCLE_V2.FAILED);
446
+ const now = Date.now();
447
+ r.status = SVC_RESOLUTION_LIFECYCLE_V2.FAILED;
448
+ r.updatedAt = now;
449
+ if (!r.settledAt) r.settledAt = now;
450
+ if (reason) r.metadata.failReason = String(reason);
451
+ return { ...r, metadata: { ...r.metadata } };
452
+ }
453
+ export function cancelSvcResolutionV2(id, reason) {
454
+ const r = _svcRsV2.get(id);
455
+ if (!r) throw new Error(`svc resolution ${id} not found`);
456
+ _svcCheckR(r.status, SVC_RESOLUTION_LIFECYCLE_V2.CANCELLED);
457
+ const now = Date.now();
458
+ r.status = SVC_RESOLUTION_LIFECYCLE_V2.CANCELLED;
459
+ r.updatedAt = now;
460
+ if (!r.settledAt) r.settledAt = now;
461
+ if (reason) r.metadata.cancelReason = String(reason);
462
+ return { ...r, metadata: { ...r.metadata } };
463
+ }
464
+ export function getSvcResolutionV2(id) {
465
+ const r = _svcRsV2.get(id);
466
+ if (!r) return null;
467
+ return { ...r, metadata: { ...r.metadata } };
468
+ }
469
+ export function listSvcResolutionsV2() {
470
+ return [..._svcRsV2.values()].map((r) => ({
471
+ ...r,
472
+ metadata: { ...r.metadata },
473
+ }));
474
+ }
475
+ export function autoDegradeIdleSvcContainersV2({ now } = {}) {
476
+ const t = now ?? Date.now();
477
+ const flipped = [];
478
+ for (const c of _svcCsV2.values())
479
+ if (
480
+ c.status === SVC_CONTAINER_MATURITY_V2.ACTIVE &&
481
+ t - c.lastTouchedAt >= _svcIdleMs
482
+ ) {
483
+ c.status = SVC_CONTAINER_MATURITY_V2.DEGRADED;
484
+ c.updatedAt = t;
485
+ flipped.push(c.id);
486
+ }
487
+ return { flipped, count: flipped.length };
488
+ }
489
+ export function autoFailStuckSvcResolutionsV2({ now } = {}) {
490
+ const t = now ?? Date.now();
491
+ const flipped = [];
492
+ for (const r of _svcRsV2.values())
493
+ if (
494
+ r.status === SVC_RESOLUTION_LIFECYCLE_V2.RESOLVING &&
495
+ r.startedAt != null &&
496
+ t - r.startedAt >= _svcStuckMs
497
+ ) {
498
+ r.status = SVC_RESOLUTION_LIFECYCLE_V2.FAILED;
499
+ r.updatedAt = t;
500
+ if (!r.settledAt) r.settledAt = t;
501
+ r.metadata.failReason = "auto-fail-stuck";
502
+ flipped.push(r.id);
503
+ }
504
+ return { flipped, count: flipped.length };
505
+ }
260
506
  export function getServiceContainerGovStatsV2() {
261
- const containersByStatus = {}; for (const v of Object.values(SVC_CONTAINER_MATURITY_V2)) containersByStatus[v] = 0; for (const c of _svcCsV2.values()) containersByStatus[c.status]++;
262
- const resolutionsByStatus = {}; for (const v of Object.values(SVC_RESOLUTION_LIFECYCLE_V2)) resolutionsByStatus[v] = 0; for (const r of _svcRsV2.values()) resolutionsByStatus[r.status]++;
263
- return { totalSvcContainersV2: _svcCsV2.size, totalSvcResolutionsV2: _svcRsV2.size, maxActiveSvcContainersPerOwner: _svcMaxActivePerOwner, maxPendingSvcResolutionsPerContainer: _svcMaxPendingResPerContainer, svcContainerIdleMs: _svcIdleMs, svcResolutionStuckMs: _svcStuckMs, containersByStatus, resolutionsByStatus };
507
+ const containersByStatus = {};
508
+ for (const v of Object.values(SVC_CONTAINER_MATURITY_V2))
509
+ containersByStatus[v] = 0;
510
+ for (const c of _svcCsV2.values()) containersByStatus[c.status]++;
511
+ const resolutionsByStatus = {};
512
+ for (const v of Object.values(SVC_RESOLUTION_LIFECYCLE_V2))
513
+ resolutionsByStatus[v] = 0;
514
+ for (const r of _svcRsV2.values()) resolutionsByStatus[r.status]++;
515
+ return {
516
+ totalSvcContainersV2: _svcCsV2.size,
517
+ totalSvcResolutionsV2: _svcRsV2.size,
518
+ maxActiveSvcContainersPerOwner: _svcMaxActivePerOwner,
519
+ maxPendingSvcResolutionsPerContainer: _svcMaxPendingResPerContainer,
520
+ svcContainerIdleMs: _svcIdleMs,
521
+ svcResolutionStuckMs: _svcStuckMs,
522
+ containersByStatus,
523
+ resolutionsByStatus,
524
+ };
264
525
  }