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
@@ -469,25 +469,56 @@ export function listTargetsByStatus(status) {
469
469
 
470
470
  export { _severityCEF, _allowedTargetTransitions };
471
471
 
472
-
473
472
  // ===== V2 Surface: SIEM Exporter governance overlay (CLI v0.138.0) =====
474
473
  export const SIEM_TARGET_MATURITY_V2 = Object.freeze({
475
- PENDING: "pending", ACTIVE: "active", DEGRADED: "degraded", RETIRED: "retired",
474
+ PENDING: "pending",
475
+ ACTIVE: "active",
476
+ DEGRADED: "degraded",
477
+ RETIRED: "retired",
476
478
  });
477
479
  export const SIEM_EXPORT_LIFECYCLE_V2 = Object.freeze({
478
- QUEUED: "queued", SENDING: "sending", DELIVERED: "delivered", FAILED: "failed", CANCELLED: "cancelled",
480
+ QUEUED: "queued",
481
+ SENDING: "sending",
482
+ DELIVERED: "delivered",
483
+ FAILED: "failed",
484
+ CANCELLED: "cancelled",
479
485
  });
480
486
 
481
487
  const _siemTargetTrans = new Map([
482
- [SIEM_TARGET_MATURITY_V2.PENDING, new Set([SIEM_TARGET_MATURITY_V2.ACTIVE, SIEM_TARGET_MATURITY_V2.RETIRED])],
483
- [SIEM_TARGET_MATURITY_V2.ACTIVE, new Set([SIEM_TARGET_MATURITY_V2.DEGRADED, SIEM_TARGET_MATURITY_V2.RETIRED])],
484
- [SIEM_TARGET_MATURITY_V2.DEGRADED, new Set([SIEM_TARGET_MATURITY_V2.ACTIVE, SIEM_TARGET_MATURITY_V2.RETIRED])],
488
+ [
489
+ SIEM_TARGET_MATURITY_V2.PENDING,
490
+ new Set([SIEM_TARGET_MATURITY_V2.ACTIVE, SIEM_TARGET_MATURITY_V2.RETIRED]),
491
+ ],
492
+ [
493
+ SIEM_TARGET_MATURITY_V2.ACTIVE,
494
+ new Set([
495
+ SIEM_TARGET_MATURITY_V2.DEGRADED,
496
+ SIEM_TARGET_MATURITY_V2.RETIRED,
497
+ ]),
498
+ ],
499
+ [
500
+ SIEM_TARGET_MATURITY_V2.DEGRADED,
501
+ new Set([SIEM_TARGET_MATURITY_V2.ACTIVE, SIEM_TARGET_MATURITY_V2.RETIRED]),
502
+ ],
485
503
  [SIEM_TARGET_MATURITY_V2.RETIRED, new Set()],
486
504
  ]);
487
505
  const _siemTargetTerminal = new Set([SIEM_TARGET_MATURITY_V2.RETIRED]);
488
506
  const _siemExportTrans = new Map([
489
- [SIEM_EXPORT_LIFECYCLE_V2.QUEUED, new Set([SIEM_EXPORT_LIFECYCLE_V2.SENDING, SIEM_EXPORT_LIFECYCLE_V2.CANCELLED])],
490
- [SIEM_EXPORT_LIFECYCLE_V2.SENDING, new Set([SIEM_EXPORT_LIFECYCLE_V2.DELIVERED, SIEM_EXPORT_LIFECYCLE_V2.FAILED, SIEM_EXPORT_LIFECYCLE_V2.CANCELLED])],
507
+ [
508
+ SIEM_EXPORT_LIFECYCLE_V2.QUEUED,
509
+ new Set([
510
+ SIEM_EXPORT_LIFECYCLE_V2.SENDING,
511
+ SIEM_EXPORT_LIFECYCLE_V2.CANCELLED,
512
+ ]),
513
+ ],
514
+ [
515
+ SIEM_EXPORT_LIFECYCLE_V2.SENDING,
516
+ new Set([
517
+ SIEM_EXPORT_LIFECYCLE_V2.DELIVERED,
518
+ SIEM_EXPORT_LIFECYCLE_V2.FAILED,
519
+ SIEM_EXPORT_LIFECYCLE_V2.CANCELLED,
520
+ ]),
521
+ ],
491
522
  [SIEM_EXPORT_LIFECYCLE_V2.DELIVERED, new Set()],
492
523
  [SIEM_EXPORT_LIFECYCLE_V2.FAILED, new Set()],
493
524
  [SIEM_EXPORT_LIFECYCLE_V2.CANCELLED, new Set()],
@@ -500,76 +531,292 @@ let _siemMaxPendingExportsPerTarget = 50;
500
531
  let _siemTargetIdleMs = 24 * 60 * 60 * 1000;
501
532
  let _siemExportStuckMs = 5 * 60 * 1000;
502
533
 
503
- function _siemPos(n, lbl) { const v = Math.floor(Number(n)); if (!Number.isFinite(v) || v <= 0) throw new Error(`${lbl} must be positive integer`); return v; }
534
+ function _siemPos(n, lbl) {
535
+ const v = Math.floor(Number(n));
536
+ if (!Number.isFinite(v) || v <= 0)
537
+ throw new Error(`${lbl} must be positive integer`);
538
+ return v;
539
+ }
504
540
 
505
- export function setMaxActiveSiemTargetsPerOperatorV2(n) { _siemMaxActivePerOperator = _siemPos(n, "maxActiveSiemTargetsPerOperator"); }
506
- export function getMaxActiveSiemTargetsPerOperatorV2() { return _siemMaxActivePerOperator; }
507
- export function setMaxPendingSiemExportsPerTargetV2(n) { _siemMaxPendingExportsPerTarget = _siemPos(n, "maxPendingSiemExportsPerTarget"); }
508
- export function getMaxPendingSiemExportsPerTargetV2() { return _siemMaxPendingExportsPerTarget; }
509
- export function setSiemTargetIdleMsV2(n) { _siemTargetIdleMs = _siemPos(n, "siemTargetIdleMs"); }
510
- export function getSiemTargetIdleMsV2() { return _siemTargetIdleMs; }
511
- export function setSiemExportStuckMsV2(n) { _siemExportStuckMs = _siemPos(n, "siemExportStuckMs"); }
512
- export function getSiemExportStuckMsV2() { return _siemExportStuckMs; }
541
+ export function setMaxActiveSiemTargetsPerOperatorV2(n) {
542
+ _siemMaxActivePerOperator = _siemPos(n, "maxActiveSiemTargetsPerOperator");
543
+ }
544
+ export function getMaxActiveSiemTargetsPerOperatorV2() {
545
+ return _siemMaxActivePerOperator;
546
+ }
547
+ export function setMaxPendingSiemExportsPerTargetV2(n) {
548
+ _siemMaxPendingExportsPerTarget = _siemPos(
549
+ n,
550
+ "maxPendingSiemExportsPerTarget",
551
+ );
552
+ }
553
+ export function getMaxPendingSiemExportsPerTargetV2() {
554
+ return _siemMaxPendingExportsPerTarget;
555
+ }
556
+ export function setSiemTargetIdleMsV2(n) {
557
+ _siemTargetIdleMs = _siemPos(n, "siemTargetIdleMs");
558
+ }
559
+ export function getSiemTargetIdleMsV2() {
560
+ return _siemTargetIdleMs;
561
+ }
562
+ export function setSiemExportStuckMsV2(n) {
563
+ _siemExportStuckMs = _siemPos(n, "siemExportStuckMs");
564
+ }
565
+ export function getSiemExportStuckMsV2() {
566
+ return _siemExportStuckMs;
567
+ }
513
568
 
514
569
  export function _resetStateSiemExporterV2() {
515
- _siemTargets.clear(); _siemExportJobs.clear();
516
- _siemMaxActivePerOperator = 8; _siemMaxPendingExportsPerTarget = 50;
517
- _siemTargetIdleMs = 24 * 60 * 60 * 1000; _siemExportStuckMs = 5 * 60 * 1000;
570
+ _siemTargets.clear();
571
+ _siemExportJobs.clear();
572
+ _siemMaxActivePerOperator = 8;
573
+ _siemMaxPendingExportsPerTarget = 50;
574
+ _siemTargetIdleMs = 24 * 60 * 60 * 1000;
575
+ _siemExportStuckMs = 5 * 60 * 1000;
518
576
  }
519
577
 
520
578
  export function registerSiemTargetV2({ id, operator, kind, metadata } = {}) {
521
579
  if (!id || typeof id !== "string") throw new Error("id is required");
522
- if (!operator || typeof operator !== "string") throw new Error("operator is required");
523
- if (_siemTargets.has(id)) throw new Error(`siem target ${id} already registered`);
580
+ if (!operator || typeof operator !== "string")
581
+ throw new Error("operator is required");
582
+ if (_siemTargets.has(id))
583
+ throw new Error(`siem target ${id} already registered`);
524
584
  const now = Date.now();
525
- const t = { id, operator, kind: kind || "splunk_hec", status: SIEM_TARGET_MATURITY_V2.PENDING, createdAt: now, updatedAt: now, activatedAt: null, retiredAt: null, lastTouchedAt: now, metadata: { ...(metadata || {}) } };
585
+ const t = {
586
+ id,
587
+ operator,
588
+ kind: kind || "splunk_hec",
589
+ status: SIEM_TARGET_MATURITY_V2.PENDING,
590
+ createdAt: now,
591
+ updatedAt: now,
592
+ activatedAt: null,
593
+ retiredAt: null,
594
+ lastTouchedAt: now,
595
+ metadata: { ...(metadata || {}) },
596
+ };
526
597
  _siemTargets.set(id, t);
527
598
  return { ...t, metadata: { ...t.metadata } };
528
599
  }
529
- function _siemCheckT(from, to) { const a = _siemTargetTrans.get(from); if (!a || !a.has(to)) throw new Error(`invalid siem target transition ${from} → ${to}`); }
530
- function _siemCountActive(operator) { let n = 0; for (const t of _siemTargets.values()) if (t.operator === operator && t.status === SIEM_TARGET_MATURITY_V2.ACTIVE) n++; return n; }
600
+ function _siemCheckT(from, to) {
601
+ const a = _siemTargetTrans.get(from);
602
+ if (!a || !a.has(to))
603
+ throw new Error(`invalid siem target transition ${from} → ${to}`);
604
+ }
605
+ function _siemCountActive(operator) {
606
+ let n = 0;
607
+ for (const t of _siemTargets.values())
608
+ if (t.operator === operator && t.status === SIEM_TARGET_MATURITY_V2.ACTIVE)
609
+ n++;
610
+ return n;
611
+ }
531
612
 
532
613
  export function activateSiemTargetV2(id) {
533
- const t = _siemTargets.get(id); if (!t) throw new Error(`siem target ${id} not found`);
614
+ const t = _siemTargets.get(id);
615
+ if (!t) throw new Error(`siem target ${id} not found`);
534
616
  _siemCheckT(t.status, SIEM_TARGET_MATURITY_V2.ACTIVE);
535
617
  const recovery = t.status === SIEM_TARGET_MATURITY_V2.DEGRADED;
536
- if (!recovery) { const c = _siemCountActive(t.operator); if (c >= _siemMaxActivePerOperator) throw new Error(`max active siem targets per operator (${_siemMaxActivePerOperator}) reached for ${t.operator}`); }
537
- const now = Date.now(); t.status = SIEM_TARGET_MATURITY_V2.ACTIVE; t.updatedAt = now; t.lastTouchedAt = now; if (!t.activatedAt) t.activatedAt = now;
618
+ if (!recovery) {
619
+ const c = _siemCountActive(t.operator);
620
+ if (c >= _siemMaxActivePerOperator)
621
+ throw new Error(
622
+ `max active siem targets per operator (${_siemMaxActivePerOperator}) reached for ${t.operator}`,
623
+ );
624
+ }
625
+ const now = Date.now();
626
+ t.status = SIEM_TARGET_MATURITY_V2.ACTIVE;
627
+ t.updatedAt = now;
628
+ t.lastTouchedAt = now;
629
+ if (!t.activatedAt) t.activatedAt = now;
538
630
  return { ...t, metadata: { ...t.metadata } };
539
631
  }
540
- export function degradeSiemTargetV2(id) { const t = _siemTargets.get(id); if (!t) throw new Error(`siem target ${id} not found`); _siemCheckT(t.status, SIEM_TARGET_MATURITY_V2.DEGRADED); t.status = SIEM_TARGET_MATURITY_V2.DEGRADED; t.updatedAt = Date.now(); return { ...t, metadata: { ...t.metadata } }; }
541
- export function retireSiemTargetV2(id) { const t = _siemTargets.get(id); if (!t) throw new Error(`siem target ${id} not found`); _siemCheckT(t.status, SIEM_TARGET_MATURITY_V2.RETIRED); const now = Date.now(); t.status = SIEM_TARGET_MATURITY_V2.RETIRED; t.updatedAt = now; if (!t.retiredAt) t.retiredAt = now; return { ...t, metadata: { ...t.metadata } }; }
542
- export function touchSiemTargetV2(id) { const t = _siemTargets.get(id); if (!t) throw new Error(`siem target ${id} not found`); if (_siemTargetTerminal.has(t.status)) throw new Error(`cannot touch terminal siem target ${id}`); const now = Date.now(); t.lastTouchedAt = now; t.updatedAt = now; return { ...t, metadata: { ...t.metadata } }; }
543
- export function getSiemTargetV2(id) { const t = _siemTargets.get(id); if (!t) return null; return { ...t, metadata: { ...t.metadata } }; }
544
- export function listSiemTargetsV2() { return [..._siemTargets.values()].map((t) => ({ ...t, metadata: { ...t.metadata } })); }
632
+ export function degradeSiemTargetV2(id) {
633
+ const t = _siemTargets.get(id);
634
+ if (!t) throw new Error(`siem target ${id} not found`);
635
+ _siemCheckT(t.status, SIEM_TARGET_MATURITY_V2.DEGRADED);
636
+ t.status = SIEM_TARGET_MATURITY_V2.DEGRADED;
637
+ t.updatedAt = Date.now();
638
+ return { ...t, metadata: { ...t.metadata } };
639
+ }
640
+ export function retireSiemTargetV2(id) {
641
+ const t = _siemTargets.get(id);
642
+ if (!t) throw new Error(`siem target ${id} not found`);
643
+ _siemCheckT(t.status, SIEM_TARGET_MATURITY_V2.RETIRED);
644
+ const now = Date.now();
645
+ t.status = SIEM_TARGET_MATURITY_V2.RETIRED;
646
+ t.updatedAt = now;
647
+ if (!t.retiredAt) t.retiredAt = now;
648
+ return { ...t, metadata: { ...t.metadata } };
649
+ }
650
+ export function touchSiemTargetV2(id) {
651
+ const t = _siemTargets.get(id);
652
+ if (!t) throw new Error(`siem target ${id} not found`);
653
+ if (_siemTargetTerminal.has(t.status))
654
+ throw new Error(`cannot touch terminal siem target ${id}`);
655
+ const now = Date.now();
656
+ t.lastTouchedAt = now;
657
+ t.updatedAt = now;
658
+ return { ...t, metadata: { ...t.metadata } };
659
+ }
660
+ export function getSiemTargetV2(id) {
661
+ const t = _siemTargets.get(id);
662
+ if (!t) return null;
663
+ return { ...t, metadata: { ...t.metadata } };
664
+ }
665
+ export function listSiemTargetsV2() {
666
+ return [..._siemTargets.values()].map((t) => ({
667
+ ...t,
668
+ metadata: { ...t.metadata },
669
+ }));
670
+ }
545
671
 
546
- function _siemCountPendingExports(tid) { let n = 0; for (const e of _siemExportJobs.values()) if (e.targetId === tid && (e.status === SIEM_EXPORT_LIFECYCLE_V2.QUEUED || e.status === SIEM_EXPORT_LIFECYCLE_V2.SENDING)) n++; return n; }
672
+ function _siemCountPendingExports(tid) {
673
+ let n = 0;
674
+ for (const e of _siemExportJobs.values())
675
+ if (
676
+ e.targetId === tid &&
677
+ (e.status === SIEM_EXPORT_LIFECYCLE_V2.QUEUED ||
678
+ e.status === SIEM_EXPORT_LIFECYCLE_V2.SENDING)
679
+ )
680
+ n++;
681
+ return n;
682
+ }
547
683
 
548
684
  export function createSiemExportV2({ id, targetId, format, metadata } = {}) {
549
685
  if (!id || typeof id !== "string") throw new Error("id is required");
550
- if (!targetId || typeof targetId !== "string") throw new Error("targetId is required");
551
- if (_siemExportJobs.has(id)) throw new Error(`siem export ${id} already exists`);
552
- if (!_siemTargets.has(targetId)) throw new Error(`siem target ${targetId} not found`);
686
+ if (!targetId || typeof targetId !== "string")
687
+ throw new Error("targetId is required");
688
+ if (_siemExportJobs.has(id))
689
+ throw new Error(`siem export ${id} already exists`);
690
+ if (!_siemTargets.has(targetId))
691
+ throw new Error(`siem target ${targetId} not found`);
553
692
  const pending = _siemCountPendingExports(targetId);
554
- if (pending >= _siemMaxPendingExportsPerTarget) throw new Error(`max pending siem exports per target (${_siemMaxPendingExportsPerTarget}) reached for ${targetId}`);
693
+ if (pending >= _siemMaxPendingExportsPerTarget)
694
+ throw new Error(
695
+ `max pending siem exports per target (${_siemMaxPendingExportsPerTarget}) reached for ${targetId}`,
696
+ );
555
697
  const now = Date.now();
556
- const e = { id, targetId, format: format || "json", status: SIEM_EXPORT_LIFECYCLE_V2.QUEUED, createdAt: now, updatedAt: now, startedAt: null, settledAt: null, metadata: { ...(metadata || {}) } };
698
+ const e = {
699
+ id,
700
+ targetId,
701
+ format: format || "json",
702
+ status: SIEM_EXPORT_LIFECYCLE_V2.QUEUED,
703
+ createdAt: now,
704
+ updatedAt: now,
705
+ startedAt: null,
706
+ settledAt: null,
707
+ metadata: { ...(metadata || {}) },
708
+ };
557
709
  _siemExportJobs.set(id, e);
558
710
  return { ...e, metadata: { ...e.metadata } };
559
711
  }
560
- function _siemCheckE(from, to) { const a = _siemExportTrans.get(from); if (!a || !a.has(to)) throw new Error(`invalid siem export transition ${from} → ${to}`); }
561
- export function startSiemExportV2(id) { const e = _siemExportJobs.get(id); if (!e) throw new Error(`siem export ${id} not found`); _siemCheckE(e.status, SIEM_EXPORT_LIFECYCLE_V2.SENDING); const now = Date.now(); e.status = SIEM_EXPORT_LIFECYCLE_V2.SENDING; e.updatedAt = now; if (!e.startedAt) e.startedAt = now; return { ...e, metadata: { ...e.metadata } }; }
562
- export function deliverSiemExportV2(id) { const e = _siemExportJobs.get(id); if (!e) throw new Error(`siem export ${id} not found`); _siemCheckE(e.status, SIEM_EXPORT_LIFECYCLE_V2.DELIVERED); const now = Date.now(); e.status = SIEM_EXPORT_LIFECYCLE_V2.DELIVERED; e.updatedAt = now; if (!e.settledAt) e.settledAt = now; return { ...e, metadata: { ...e.metadata } }; }
563
- export function failSiemExportV2(id, reason) { const e = _siemExportJobs.get(id); if (!e) throw new Error(`siem export ${id} not found`); _siemCheckE(e.status, SIEM_EXPORT_LIFECYCLE_V2.FAILED); const now = Date.now(); e.status = SIEM_EXPORT_LIFECYCLE_V2.FAILED; e.updatedAt = now; if (!e.settledAt) e.settledAt = now; if (reason) e.metadata.failReason = String(reason); return { ...e, metadata: { ...e.metadata } }; }
564
- export function cancelSiemExportV2(id, reason) { const e = _siemExportJobs.get(id); if (!e) throw new Error(`siem export ${id} not found`); _siemCheckE(e.status, SIEM_EXPORT_LIFECYCLE_V2.CANCELLED); const now = Date.now(); e.status = SIEM_EXPORT_LIFECYCLE_V2.CANCELLED; e.updatedAt = now; if (!e.settledAt) e.settledAt = now; if (reason) e.metadata.cancelReason = String(reason); return { ...e, metadata: { ...e.metadata } }; }
565
- export function getSiemExportV2(id) { const e = _siemExportJobs.get(id); if (!e) return null; return { ...e, metadata: { ...e.metadata } }; }
566
- export function listSiemExportsV2() { return [..._siemExportJobs.values()].map((e) => ({ ...e, metadata: { ...e.metadata } })); }
712
+ function _siemCheckE(from, to) {
713
+ const a = _siemExportTrans.get(from);
714
+ if (!a || !a.has(to))
715
+ throw new Error(`invalid siem export transition ${from} ${to}`);
716
+ }
717
+ export function startSiemExportV2(id) {
718
+ const e = _siemExportJobs.get(id);
719
+ if (!e) throw new Error(`siem export ${id} not found`);
720
+ _siemCheckE(e.status, SIEM_EXPORT_LIFECYCLE_V2.SENDING);
721
+ const now = Date.now();
722
+ e.status = SIEM_EXPORT_LIFECYCLE_V2.SENDING;
723
+ e.updatedAt = now;
724
+ if (!e.startedAt) e.startedAt = now;
725
+ return { ...e, metadata: { ...e.metadata } };
726
+ }
727
+ export function deliverSiemExportV2(id) {
728
+ const e = _siemExportJobs.get(id);
729
+ if (!e) throw new Error(`siem export ${id} not found`);
730
+ _siemCheckE(e.status, SIEM_EXPORT_LIFECYCLE_V2.DELIVERED);
731
+ const now = Date.now();
732
+ e.status = SIEM_EXPORT_LIFECYCLE_V2.DELIVERED;
733
+ e.updatedAt = now;
734
+ if (!e.settledAt) e.settledAt = now;
735
+ return { ...e, metadata: { ...e.metadata } };
736
+ }
737
+ export function failSiemExportV2(id, reason) {
738
+ const e = _siemExportJobs.get(id);
739
+ if (!e) throw new Error(`siem export ${id} not found`);
740
+ _siemCheckE(e.status, SIEM_EXPORT_LIFECYCLE_V2.FAILED);
741
+ const now = Date.now();
742
+ e.status = SIEM_EXPORT_LIFECYCLE_V2.FAILED;
743
+ e.updatedAt = now;
744
+ if (!e.settledAt) e.settledAt = now;
745
+ if (reason) e.metadata.failReason = String(reason);
746
+ return { ...e, metadata: { ...e.metadata } };
747
+ }
748
+ export function cancelSiemExportV2(id, reason) {
749
+ const e = _siemExportJobs.get(id);
750
+ if (!e) throw new Error(`siem export ${id} not found`);
751
+ _siemCheckE(e.status, SIEM_EXPORT_LIFECYCLE_V2.CANCELLED);
752
+ const now = Date.now();
753
+ e.status = SIEM_EXPORT_LIFECYCLE_V2.CANCELLED;
754
+ e.updatedAt = now;
755
+ if (!e.settledAt) e.settledAt = now;
756
+ if (reason) e.metadata.cancelReason = String(reason);
757
+ return { ...e, metadata: { ...e.metadata } };
758
+ }
759
+ export function getSiemExportV2(id) {
760
+ const e = _siemExportJobs.get(id);
761
+ if (!e) return null;
762
+ return { ...e, metadata: { ...e.metadata } };
763
+ }
764
+ export function listSiemExportsV2() {
765
+ return [..._siemExportJobs.values()].map((e) => ({
766
+ ...e,
767
+ metadata: { ...e.metadata },
768
+ }));
769
+ }
567
770
 
568
- export function autoDegradeIdleSiemTargetsV2({ now } = {}) { const t = now ?? Date.now(); const flipped = []; for (const tgt of _siemTargets.values()) if (tgt.status === SIEM_TARGET_MATURITY_V2.ACTIVE && (t - tgt.lastTouchedAt) >= _siemTargetIdleMs) { tgt.status = SIEM_TARGET_MATURITY_V2.DEGRADED; tgt.updatedAt = t; flipped.push(tgt.id); } return { flipped, count: flipped.length }; }
569
- export function autoFailStuckSiemExportsV2({ now } = {}) { const t = now ?? Date.now(); const flipped = []; for (const e of _siemExportJobs.values()) if (e.status === SIEM_EXPORT_LIFECYCLE_V2.SENDING && e.startedAt != null && (t - e.startedAt) >= _siemExportStuckMs) { e.status = SIEM_EXPORT_LIFECYCLE_V2.FAILED; e.updatedAt = t; if (!e.settledAt) e.settledAt = t; e.metadata.failReason = "auto-fail-stuck"; flipped.push(e.id); } return { flipped, count: flipped.length }; }
771
+ export function autoDegradeIdleSiemTargetsV2({ now } = {}) {
772
+ const t = now ?? Date.now();
773
+ const flipped = [];
774
+ for (const tgt of _siemTargets.values())
775
+ if (
776
+ tgt.status === SIEM_TARGET_MATURITY_V2.ACTIVE &&
777
+ t - tgt.lastTouchedAt >= _siemTargetIdleMs
778
+ ) {
779
+ tgt.status = SIEM_TARGET_MATURITY_V2.DEGRADED;
780
+ tgt.updatedAt = t;
781
+ flipped.push(tgt.id);
782
+ }
783
+ return { flipped, count: flipped.length };
784
+ }
785
+ export function autoFailStuckSiemExportsV2({ now } = {}) {
786
+ const t = now ?? Date.now();
787
+ const flipped = [];
788
+ for (const e of _siemExportJobs.values())
789
+ if (
790
+ e.status === SIEM_EXPORT_LIFECYCLE_V2.SENDING &&
791
+ e.startedAt != null &&
792
+ t - e.startedAt >= _siemExportStuckMs
793
+ ) {
794
+ e.status = SIEM_EXPORT_LIFECYCLE_V2.FAILED;
795
+ e.updatedAt = t;
796
+ if (!e.settledAt) e.settledAt = t;
797
+ e.metadata.failReason = "auto-fail-stuck";
798
+ flipped.push(e.id);
799
+ }
800
+ return { flipped, count: flipped.length };
801
+ }
570
802
 
571
803
  export function getSiemExporterGovStatsV2() {
572
- const targetsByStatus = {}; for (const s of Object.values(SIEM_TARGET_MATURITY_V2)) targetsByStatus[s] = 0; for (const t of _siemTargets.values()) targetsByStatus[t.status]++;
573
- const exportsByStatus = {}; for (const s of Object.values(SIEM_EXPORT_LIFECYCLE_V2)) exportsByStatus[s] = 0; for (const e of _siemExportJobs.values()) exportsByStatus[e.status]++;
574
- return { totalSiemTargetsV2: _siemTargets.size, totalSiemExportsV2: _siemExportJobs.size, maxActiveSiemTargetsPerOperator: _siemMaxActivePerOperator, maxPendingSiemExportsPerTarget: _siemMaxPendingExportsPerTarget, siemTargetIdleMs: _siemTargetIdleMs, siemExportStuckMs: _siemExportStuckMs, targetsByStatus, exportsByStatus };
804
+ const targetsByStatus = {};
805
+ for (const s of Object.values(SIEM_TARGET_MATURITY_V2))
806
+ targetsByStatus[s] = 0;
807
+ for (const t of _siemTargets.values()) targetsByStatus[t.status]++;
808
+ const exportsByStatus = {};
809
+ for (const s of Object.values(SIEM_EXPORT_LIFECYCLE_V2))
810
+ exportsByStatus[s] = 0;
811
+ for (const e of _siemExportJobs.values()) exportsByStatus[e.status]++;
812
+ return {
813
+ totalSiemTargetsV2: _siemTargets.size,
814
+ totalSiemExportsV2: _siemExportJobs.size,
815
+ maxActiveSiemTargetsPerOperator: _siemMaxActivePerOperator,
816
+ maxPendingSiemExportsPerTarget: _siemMaxPendingExportsPerTarget,
817
+ siemTargetIdleMs: _siemTargetIdleMs,
818
+ siemExportStuckMs: _siemExportStuckMs,
819
+ targetsByStatus,
820
+ exportsByStatus,
821
+ };
575
822
  }