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
@@ -736,25 +736,62 @@ export function getInferenceStatsV2() {
736
736
  };
737
737
  }
738
738
 
739
-
740
739
  // ===== V2 Surface: Inference Network governance overlay (CLI v0.139.0) =====
741
740
  export const INFERENCE_NODE_MATURITY_V2 = Object.freeze({
742
- PENDING: "pending", ACTIVE: "active", DEGRADED: "degraded", DECOMMISSIONED: "decommissioned",
741
+ PENDING: "pending",
742
+ ACTIVE: "active",
743
+ DEGRADED: "degraded",
744
+ DECOMMISSIONED: "decommissioned",
743
745
  });
744
746
  export const INFERENCE_JOB_LIFECYCLE_V2 = Object.freeze({
745
- QUEUED: "queued", RUNNING: "running", COMPLETED: "completed", FAILED: "failed", CANCELLED: "cancelled",
747
+ QUEUED: "queued",
748
+ RUNNING: "running",
749
+ COMPLETED: "completed",
750
+ FAILED: "failed",
751
+ CANCELLED: "cancelled",
746
752
  });
747
753
 
748
754
  const _inTrans = new Map([
749
- [INFERENCE_NODE_MATURITY_V2.PENDING, new Set([INFERENCE_NODE_MATURITY_V2.ACTIVE, INFERENCE_NODE_MATURITY_V2.DECOMMISSIONED])],
750
- [INFERENCE_NODE_MATURITY_V2.ACTIVE, new Set([INFERENCE_NODE_MATURITY_V2.DEGRADED, INFERENCE_NODE_MATURITY_V2.DECOMMISSIONED])],
751
- [INFERENCE_NODE_MATURITY_V2.DEGRADED, new Set([INFERENCE_NODE_MATURITY_V2.ACTIVE, INFERENCE_NODE_MATURITY_V2.DECOMMISSIONED])],
755
+ [
756
+ INFERENCE_NODE_MATURITY_V2.PENDING,
757
+ new Set([
758
+ INFERENCE_NODE_MATURITY_V2.ACTIVE,
759
+ INFERENCE_NODE_MATURITY_V2.DECOMMISSIONED,
760
+ ]),
761
+ ],
762
+ [
763
+ INFERENCE_NODE_MATURITY_V2.ACTIVE,
764
+ new Set([
765
+ INFERENCE_NODE_MATURITY_V2.DEGRADED,
766
+ INFERENCE_NODE_MATURITY_V2.DECOMMISSIONED,
767
+ ]),
768
+ ],
769
+ [
770
+ INFERENCE_NODE_MATURITY_V2.DEGRADED,
771
+ new Set([
772
+ INFERENCE_NODE_MATURITY_V2.ACTIVE,
773
+ INFERENCE_NODE_MATURITY_V2.DECOMMISSIONED,
774
+ ]),
775
+ ],
752
776
  [INFERENCE_NODE_MATURITY_V2.DECOMMISSIONED, new Set()],
753
777
  ]);
754
778
  const _inTerminal = new Set([INFERENCE_NODE_MATURITY_V2.DECOMMISSIONED]);
755
779
  const _ijTrans = new Map([
756
- [INFERENCE_JOB_LIFECYCLE_V2.QUEUED, new Set([INFERENCE_JOB_LIFECYCLE_V2.RUNNING, INFERENCE_JOB_LIFECYCLE_V2.CANCELLED])],
757
- [INFERENCE_JOB_LIFECYCLE_V2.RUNNING, new Set([INFERENCE_JOB_LIFECYCLE_V2.COMPLETED, INFERENCE_JOB_LIFECYCLE_V2.FAILED, INFERENCE_JOB_LIFECYCLE_V2.CANCELLED])],
780
+ [
781
+ INFERENCE_JOB_LIFECYCLE_V2.QUEUED,
782
+ new Set([
783
+ INFERENCE_JOB_LIFECYCLE_V2.RUNNING,
784
+ INFERENCE_JOB_LIFECYCLE_V2.CANCELLED,
785
+ ]),
786
+ ],
787
+ [
788
+ INFERENCE_JOB_LIFECYCLE_V2.RUNNING,
789
+ new Set([
790
+ INFERENCE_JOB_LIFECYCLE_V2.COMPLETED,
791
+ INFERENCE_JOB_LIFECYCLE_V2.FAILED,
792
+ INFERENCE_JOB_LIFECYCLE_V2.CANCELLED,
793
+ ]),
794
+ ],
758
795
  [INFERENCE_JOB_LIFECYCLE_V2.COMPLETED, new Set()],
759
796
  [INFERENCE_JOB_LIFECYCLE_V2.FAILED, new Set()],
760
797
  [INFERENCE_JOB_LIFECYCLE_V2.CANCELLED, new Set()],
@@ -767,76 +804,296 @@ let _inMaxPendingJobsPerNode = 25;
767
804
  let _inIdleMs = 24 * 60 * 60 * 1000;
768
805
  let _ijStuckMs = 10 * 60 * 1000;
769
806
 
770
- function _inPos(n, lbl) { const v = Math.floor(Number(n)); if (!Number.isFinite(v) || v <= 0) throw new Error(`${lbl} must be positive integer`); return v; }
807
+ function _inPos(n, lbl) {
808
+ const v = Math.floor(Number(n));
809
+ if (!Number.isFinite(v) || v <= 0)
810
+ throw new Error(`${lbl} must be positive integer`);
811
+ return v;
812
+ }
771
813
 
772
- export function setMaxActiveInferenceNodesPerOperatorV2(n) { _inMaxActivePerOperator = _inPos(n, "maxActiveInferenceNodesPerOperator"); }
773
- export function getMaxActiveInferenceNodesPerOperatorV2() { return _inMaxActivePerOperator; }
774
- export function setMaxPendingInferenceJobsPerNodeV2(n) { _inMaxPendingJobsPerNode = _inPos(n, "maxPendingInferenceJobsPerNode"); }
775
- export function getMaxPendingInferenceJobsPerNodeV2() { return _inMaxPendingJobsPerNode; }
776
- export function setInferenceNodeIdleMsV2(n) { _inIdleMs = _inPos(n, "inferenceNodeIdleMs"); }
777
- export function getInferenceNodeIdleMsV2() { return _inIdleMs; }
778
- export function setInferenceJobStuckMsV2(n) { _ijStuckMs = _inPos(n, "inferenceJobStuckMs"); }
779
- export function getInferenceJobStuckMsV2() { return _ijStuckMs; }
814
+ export function setMaxActiveInferenceNodesPerOperatorV2(n) {
815
+ _inMaxActivePerOperator = _inPos(n, "maxActiveInferenceNodesPerOperator");
816
+ }
817
+ export function getMaxActiveInferenceNodesPerOperatorV2() {
818
+ return _inMaxActivePerOperator;
819
+ }
820
+ export function setMaxPendingInferenceJobsPerNodeV2(n) {
821
+ _inMaxPendingJobsPerNode = _inPos(n, "maxPendingInferenceJobsPerNode");
822
+ }
823
+ export function getMaxPendingInferenceJobsPerNodeV2() {
824
+ return _inMaxPendingJobsPerNode;
825
+ }
826
+ export function setInferenceNodeIdleMsV2(n) {
827
+ _inIdleMs = _inPos(n, "inferenceNodeIdleMs");
828
+ }
829
+ export function getInferenceNodeIdleMsV2() {
830
+ return _inIdleMs;
831
+ }
832
+ export function setInferenceJobStuckMsV2(n) {
833
+ _ijStuckMs = _inPos(n, "inferenceJobStuckMs");
834
+ }
835
+ export function getInferenceJobStuckMsV2() {
836
+ return _ijStuckMs;
837
+ }
780
838
 
781
839
  export function _resetStateInferenceNetworkV2() {
782
- _innV2.clear(); _ijsV2.clear();
783
- _inMaxActivePerOperator = 12; _inMaxPendingJobsPerNode = 25;
784
- _inIdleMs = 24 * 60 * 60 * 1000; _ijStuckMs = 10 * 60 * 1000;
840
+ _innV2.clear();
841
+ _ijsV2.clear();
842
+ _inMaxActivePerOperator = 12;
843
+ _inMaxPendingJobsPerNode = 25;
844
+ _inIdleMs = 24 * 60 * 60 * 1000;
845
+ _ijStuckMs = 10 * 60 * 1000;
785
846
  }
786
847
 
787
- export function registerInferenceNodeV2({ id, operator, model, metadata } = {}) {
848
+ export function registerInferenceNodeV2({
849
+ id,
850
+ operator,
851
+ model,
852
+ metadata,
853
+ } = {}) {
788
854
  if (!id || typeof id !== "string") throw new Error("id is required");
789
- if (!operator || typeof operator !== "string") throw new Error("operator is required");
790
- if (_innV2.has(id)) throw new Error(`inference node ${id} already registered`);
855
+ if (!operator || typeof operator !== "string")
856
+ throw new Error("operator is required");
857
+ if (_innV2.has(id))
858
+ throw new Error(`inference node ${id} already registered`);
791
859
  const now = Date.now();
792
- const n = { id, operator, model: model || "default", status: INFERENCE_NODE_MATURITY_V2.PENDING, createdAt: now, updatedAt: now, activatedAt: null, decommissionedAt: null, lastTouchedAt: now, metadata: { ...(metadata || {}) } };
860
+ const n = {
861
+ id,
862
+ operator,
863
+ model: model || "default",
864
+ status: INFERENCE_NODE_MATURITY_V2.PENDING,
865
+ createdAt: now,
866
+ updatedAt: now,
867
+ activatedAt: null,
868
+ decommissionedAt: null,
869
+ lastTouchedAt: now,
870
+ metadata: { ...(metadata || {}) },
871
+ };
793
872
  _innV2.set(id, n);
794
873
  return { ...n, metadata: { ...n.metadata } };
795
874
  }
796
- function _inCheckN(from, to) { const a = _inTrans.get(from); if (!a || !a.has(to)) throw new Error(`invalid inference node transition ${from} → ${to}`); }
797
- function _inCountActive(operator) { let n = 0; for (const x of _innV2.values()) if (x.operator === operator && x.status === INFERENCE_NODE_MATURITY_V2.ACTIVE) n++; return n; }
875
+ function _inCheckN(from, to) {
876
+ const a = _inTrans.get(from);
877
+ if (!a || !a.has(to))
878
+ throw new Error(`invalid inference node transition ${from} → ${to}`);
879
+ }
880
+ function _inCountActive(operator) {
881
+ let n = 0;
882
+ for (const x of _innV2.values())
883
+ if (
884
+ x.operator === operator &&
885
+ x.status === INFERENCE_NODE_MATURITY_V2.ACTIVE
886
+ )
887
+ n++;
888
+ return n;
889
+ }
798
890
 
799
891
  export function activateInferenceNodeV2(id) {
800
- const n = _innV2.get(id); if (!n) throw new Error(`inference node ${id} not found`);
892
+ const n = _innV2.get(id);
893
+ if (!n) throw new Error(`inference node ${id} not found`);
801
894
  _inCheckN(n.status, INFERENCE_NODE_MATURITY_V2.ACTIVE);
802
895
  const recovery = n.status === INFERENCE_NODE_MATURITY_V2.DEGRADED;
803
- if (!recovery) { const c = _inCountActive(n.operator); if (c >= _inMaxActivePerOperator) throw new Error(`max active inference nodes per operator (${_inMaxActivePerOperator}) reached for ${n.operator}`); }
804
- const now = Date.now(); n.status = INFERENCE_NODE_MATURITY_V2.ACTIVE; n.updatedAt = now; n.lastTouchedAt = now; if (!n.activatedAt) n.activatedAt = now;
896
+ if (!recovery) {
897
+ const c = _inCountActive(n.operator);
898
+ if (c >= _inMaxActivePerOperator)
899
+ throw new Error(
900
+ `max active inference nodes per operator (${_inMaxActivePerOperator}) reached for ${n.operator}`,
901
+ );
902
+ }
903
+ const now = Date.now();
904
+ n.status = INFERENCE_NODE_MATURITY_V2.ACTIVE;
905
+ n.updatedAt = now;
906
+ n.lastTouchedAt = now;
907
+ if (!n.activatedAt) n.activatedAt = now;
805
908
  return { ...n, metadata: { ...n.metadata } };
806
909
  }
807
- export function degradeInferenceNodeV2(id) { const n = _innV2.get(id); if (!n) throw new Error(`inference node ${id} not found`); _inCheckN(n.status, INFERENCE_NODE_MATURITY_V2.DEGRADED); n.status = INFERENCE_NODE_MATURITY_V2.DEGRADED; n.updatedAt = Date.now(); return { ...n, metadata: { ...n.metadata } }; }
808
- export function decommissionInferenceNodeV2(id) { const n = _innV2.get(id); if (!n) throw new Error(`inference node ${id} not found`); _inCheckN(n.status, INFERENCE_NODE_MATURITY_V2.DECOMMISSIONED); const now = Date.now(); n.status = INFERENCE_NODE_MATURITY_V2.DECOMMISSIONED; n.updatedAt = now; if (!n.decommissionedAt) n.decommissionedAt = now; return { ...n, metadata: { ...n.metadata } }; }
809
- export function touchInferenceNodeV2(id) { const n = _innV2.get(id); if (!n) throw new Error(`inference node ${id} not found`); if (_inTerminal.has(n.status)) throw new Error(`cannot touch terminal inference node ${id}`); const now = Date.now(); n.lastTouchedAt = now; n.updatedAt = now; return { ...n, metadata: { ...n.metadata } }; }
810
- export function getInferenceNodeV2(id) { const n = _innV2.get(id); if (!n) return null; return { ...n, metadata: { ...n.metadata } }; }
811
- export function listInferenceNodesV2() { return [..._innV2.values()].map((n) => ({ ...n, metadata: { ...n.metadata } })); }
910
+ export function degradeInferenceNodeV2(id) {
911
+ const n = _innV2.get(id);
912
+ if (!n) throw new Error(`inference node ${id} not found`);
913
+ _inCheckN(n.status, INFERENCE_NODE_MATURITY_V2.DEGRADED);
914
+ n.status = INFERENCE_NODE_MATURITY_V2.DEGRADED;
915
+ n.updatedAt = Date.now();
916
+ return { ...n, metadata: { ...n.metadata } };
917
+ }
918
+ export function decommissionInferenceNodeV2(id) {
919
+ const n = _innV2.get(id);
920
+ if (!n) throw new Error(`inference node ${id} not found`);
921
+ _inCheckN(n.status, INFERENCE_NODE_MATURITY_V2.DECOMMISSIONED);
922
+ const now = Date.now();
923
+ n.status = INFERENCE_NODE_MATURITY_V2.DECOMMISSIONED;
924
+ n.updatedAt = now;
925
+ if (!n.decommissionedAt) n.decommissionedAt = now;
926
+ return { ...n, metadata: { ...n.metadata } };
927
+ }
928
+ export function touchInferenceNodeV2(id) {
929
+ const n = _innV2.get(id);
930
+ if (!n) throw new Error(`inference node ${id} not found`);
931
+ if (_inTerminal.has(n.status))
932
+ throw new Error(`cannot touch terminal inference node ${id}`);
933
+ const now = Date.now();
934
+ n.lastTouchedAt = now;
935
+ n.updatedAt = now;
936
+ return { ...n, metadata: { ...n.metadata } };
937
+ }
938
+ export function getInferenceNodeV2(id) {
939
+ const n = _innV2.get(id);
940
+ if (!n) return null;
941
+ return { ...n, metadata: { ...n.metadata } };
942
+ }
943
+ export function listInferenceNodesV2() {
944
+ return [..._innV2.values()].map((n) => ({
945
+ ...n,
946
+ metadata: { ...n.metadata },
947
+ }));
948
+ }
812
949
 
813
- function _ijCountPending(nodeId) { let n = 0; for (const j of _ijsV2.values()) if (j.nodeId === nodeId && (j.status === INFERENCE_JOB_LIFECYCLE_V2.QUEUED || j.status === INFERENCE_JOB_LIFECYCLE_V2.RUNNING)) n++; return n; }
950
+ function _ijCountPending(nodeId) {
951
+ let n = 0;
952
+ for (const j of _ijsV2.values())
953
+ if (
954
+ j.nodeId === nodeId &&
955
+ (j.status === INFERENCE_JOB_LIFECYCLE_V2.QUEUED ||
956
+ j.status === INFERENCE_JOB_LIFECYCLE_V2.RUNNING)
957
+ )
958
+ n++;
959
+ return n;
960
+ }
814
961
 
815
962
  export function createInferenceJobV2({ id, nodeId, prompt, metadata } = {}) {
816
963
  if (!id || typeof id !== "string") throw new Error("id is required");
817
- if (!nodeId || typeof nodeId !== "string") throw new Error("nodeId is required");
964
+ if (!nodeId || typeof nodeId !== "string")
965
+ throw new Error("nodeId is required");
818
966
  if (_ijsV2.has(id)) throw new Error(`inference job ${id} already exists`);
819
- if (!_innV2.has(nodeId)) throw new Error(`inference node ${nodeId} not found`);
967
+ if (!_innV2.has(nodeId))
968
+ throw new Error(`inference node ${nodeId} not found`);
820
969
  const pending = _ijCountPending(nodeId);
821
- if (pending >= _inMaxPendingJobsPerNode) throw new Error(`max pending inference jobs per node (${_inMaxPendingJobsPerNode}) reached for ${nodeId}`);
970
+ if (pending >= _inMaxPendingJobsPerNode)
971
+ throw new Error(
972
+ `max pending inference jobs per node (${_inMaxPendingJobsPerNode}) reached for ${nodeId}`,
973
+ );
822
974
  const now = Date.now();
823
- const j = { id, nodeId, prompt: prompt || "", status: INFERENCE_JOB_LIFECYCLE_V2.QUEUED, createdAt: now, updatedAt: now, startedAt: null, settledAt: null, metadata: { ...(metadata || {}) } };
975
+ const j = {
976
+ id,
977
+ nodeId,
978
+ prompt: prompt || "",
979
+ status: INFERENCE_JOB_LIFECYCLE_V2.QUEUED,
980
+ createdAt: now,
981
+ updatedAt: now,
982
+ startedAt: null,
983
+ settledAt: null,
984
+ metadata: { ...(metadata || {}) },
985
+ };
824
986
  _ijsV2.set(id, j);
825
987
  return { ...j, metadata: { ...j.metadata } };
826
988
  }
827
- function _ijCheckJ(from, to) { const a = _ijTrans.get(from); if (!a || !a.has(to)) throw new Error(`invalid inference job transition ${from} → ${to}`); }
828
- export function startInferenceJobV2(id) { const j = _ijsV2.get(id); if (!j) throw new Error(`inference job ${id} not found`); _ijCheckJ(j.status, INFERENCE_JOB_LIFECYCLE_V2.RUNNING); const now = Date.now(); j.status = INFERENCE_JOB_LIFECYCLE_V2.RUNNING; j.updatedAt = now; if (!j.startedAt) j.startedAt = now; return { ...j, metadata: { ...j.metadata } }; }
829
- export function completeInferenceJobV2(id) { const j = _ijsV2.get(id); if (!j) throw new Error(`inference job ${id} not found`); _ijCheckJ(j.status, INFERENCE_JOB_LIFECYCLE_V2.COMPLETED); const now = Date.now(); j.status = INFERENCE_JOB_LIFECYCLE_V2.COMPLETED; j.updatedAt = now; if (!j.settledAt) j.settledAt = now; return { ...j, metadata: { ...j.metadata } }; }
830
- export function failInferenceJobV2(id, reason) { const j = _ijsV2.get(id); if (!j) throw new Error(`inference job ${id} not found`); _ijCheckJ(j.status, INFERENCE_JOB_LIFECYCLE_V2.FAILED); const now = Date.now(); j.status = INFERENCE_JOB_LIFECYCLE_V2.FAILED; j.updatedAt = now; if (!j.settledAt) j.settledAt = now; if (reason) j.metadata.failReason = String(reason); return { ...j, metadata: { ...j.metadata } }; }
831
- export function cancelInferenceJobV2(id, reason) { const j = _ijsV2.get(id); if (!j) throw new Error(`inference job ${id} not found`); _ijCheckJ(j.status, INFERENCE_JOB_LIFECYCLE_V2.CANCELLED); const now = Date.now(); j.status = INFERENCE_JOB_LIFECYCLE_V2.CANCELLED; j.updatedAt = now; if (!j.settledAt) j.settledAt = now; if (reason) j.metadata.cancelReason = String(reason); return { ...j, metadata: { ...j.metadata } }; }
832
- export function getInferenceJobV2(id) { const j = _ijsV2.get(id); if (!j) return null; return { ...j, metadata: { ...j.metadata } }; }
833
- export function listInferenceJobsV2() { return [..._ijsV2.values()].map((j) => ({ ...j, metadata: { ...j.metadata } })); }
989
+ function _ijCheckJ(from, to) {
990
+ const a = _ijTrans.get(from);
991
+ if (!a || !a.has(to))
992
+ throw new Error(`invalid inference job transition ${from} ${to}`);
993
+ }
994
+ export function startInferenceJobV2(id) {
995
+ const j = _ijsV2.get(id);
996
+ if (!j) throw new Error(`inference job ${id} not found`);
997
+ _ijCheckJ(j.status, INFERENCE_JOB_LIFECYCLE_V2.RUNNING);
998
+ const now = Date.now();
999
+ j.status = INFERENCE_JOB_LIFECYCLE_V2.RUNNING;
1000
+ j.updatedAt = now;
1001
+ if (!j.startedAt) j.startedAt = now;
1002
+ return { ...j, metadata: { ...j.metadata } };
1003
+ }
1004
+ export function completeInferenceJobV2(id) {
1005
+ const j = _ijsV2.get(id);
1006
+ if (!j) throw new Error(`inference job ${id} not found`);
1007
+ _ijCheckJ(j.status, INFERENCE_JOB_LIFECYCLE_V2.COMPLETED);
1008
+ const now = Date.now();
1009
+ j.status = INFERENCE_JOB_LIFECYCLE_V2.COMPLETED;
1010
+ j.updatedAt = now;
1011
+ if (!j.settledAt) j.settledAt = now;
1012
+ return { ...j, metadata: { ...j.metadata } };
1013
+ }
1014
+ export function failInferenceJobV2(id, reason) {
1015
+ const j = _ijsV2.get(id);
1016
+ if (!j) throw new Error(`inference job ${id} not found`);
1017
+ _ijCheckJ(j.status, INFERENCE_JOB_LIFECYCLE_V2.FAILED);
1018
+ const now = Date.now();
1019
+ j.status = INFERENCE_JOB_LIFECYCLE_V2.FAILED;
1020
+ j.updatedAt = now;
1021
+ if (!j.settledAt) j.settledAt = now;
1022
+ if (reason) j.metadata.failReason = String(reason);
1023
+ return { ...j, metadata: { ...j.metadata } };
1024
+ }
1025
+ export function cancelInferenceJobV2(id, reason) {
1026
+ const j = _ijsV2.get(id);
1027
+ if (!j) throw new Error(`inference job ${id} not found`);
1028
+ _ijCheckJ(j.status, INFERENCE_JOB_LIFECYCLE_V2.CANCELLED);
1029
+ const now = Date.now();
1030
+ j.status = INFERENCE_JOB_LIFECYCLE_V2.CANCELLED;
1031
+ j.updatedAt = now;
1032
+ if (!j.settledAt) j.settledAt = now;
1033
+ if (reason) j.metadata.cancelReason = String(reason);
1034
+ return { ...j, metadata: { ...j.metadata } };
1035
+ }
1036
+ export function getInferenceJobV2(id) {
1037
+ const j = _ijsV2.get(id);
1038
+ if (!j) return null;
1039
+ return { ...j, metadata: { ...j.metadata } };
1040
+ }
1041
+ export function listInferenceJobsV2() {
1042
+ return [..._ijsV2.values()].map((j) => ({
1043
+ ...j,
1044
+ metadata: { ...j.metadata },
1045
+ }));
1046
+ }
834
1047
 
835
- export function autoDegradeIdleInferenceNodesV2({ now } = {}) { const t = now ?? Date.now(); const flipped = []; for (const n of _innV2.values()) if (n.status === INFERENCE_NODE_MATURITY_V2.ACTIVE && (t - n.lastTouchedAt) >= _inIdleMs) { n.status = INFERENCE_NODE_MATURITY_V2.DEGRADED; n.updatedAt = t; flipped.push(n.id); } return { flipped, count: flipped.length }; }
836
- export function autoFailStuckInferenceJobsV2({ now } = {}) { const t = now ?? Date.now(); const flipped = []; for (const j of _ijsV2.values()) if (j.status === INFERENCE_JOB_LIFECYCLE_V2.RUNNING && j.startedAt != null && (t - j.startedAt) >= _ijStuckMs) { j.status = INFERENCE_JOB_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 }; }
1048
+ export function autoDegradeIdleInferenceNodesV2({ now } = {}) {
1049
+ const t = now ?? Date.now();
1050
+ const flipped = [];
1051
+ for (const n of _innV2.values())
1052
+ if (
1053
+ n.status === INFERENCE_NODE_MATURITY_V2.ACTIVE &&
1054
+ t - n.lastTouchedAt >= _inIdleMs
1055
+ ) {
1056
+ n.status = INFERENCE_NODE_MATURITY_V2.DEGRADED;
1057
+ n.updatedAt = t;
1058
+ flipped.push(n.id);
1059
+ }
1060
+ return { flipped, count: flipped.length };
1061
+ }
1062
+ export function autoFailStuckInferenceJobsV2({ now } = {}) {
1063
+ const t = now ?? Date.now();
1064
+ const flipped = [];
1065
+ for (const j of _ijsV2.values())
1066
+ if (
1067
+ j.status === INFERENCE_JOB_LIFECYCLE_V2.RUNNING &&
1068
+ j.startedAt != null &&
1069
+ t - j.startedAt >= _ijStuckMs
1070
+ ) {
1071
+ j.status = INFERENCE_JOB_LIFECYCLE_V2.FAILED;
1072
+ j.updatedAt = t;
1073
+ if (!j.settledAt) j.settledAt = t;
1074
+ j.metadata.failReason = "auto-fail-stuck";
1075
+ flipped.push(j.id);
1076
+ }
1077
+ return { flipped, count: flipped.length };
1078
+ }
837
1079
 
838
1080
  export function getInferenceNetworkGovStatsV2() {
839
- const nodesByStatus = {}; for (const s of Object.values(INFERENCE_NODE_MATURITY_V2)) nodesByStatus[s] = 0; for (const n of _innV2.values()) nodesByStatus[n.status]++;
840
- const jobsByStatus = {}; for (const s of Object.values(INFERENCE_JOB_LIFECYCLE_V2)) jobsByStatus[s] = 0; for (const j of _ijsV2.values()) jobsByStatus[j.status]++;
841
- return { totalInferenceNodesV2: _innV2.size, totalInferenceJobsV2: _ijsV2.size, maxActiveInferenceNodesPerOperator: _inMaxActivePerOperator, maxPendingInferenceJobsPerNode: _inMaxPendingJobsPerNode, inferenceNodeIdleMs: _inIdleMs, inferenceJobStuckMs: _ijStuckMs, nodesByStatus, jobsByStatus };
1081
+ const nodesByStatus = {};
1082
+ for (const s of Object.values(INFERENCE_NODE_MATURITY_V2))
1083
+ nodesByStatus[s] = 0;
1084
+ for (const n of _innV2.values()) nodesByStatus[n.status]++;
1085
+ const jobsByStatus = {};
1086
+ for (const s of Object.values(INFERENCE_JOB_LIFECYCLE_V2))
1087
+ jobsByStatus[s] = 0;
1088
+ for (const j of _ijsV2.values()) jobsByStatus[j.status]++;
1089
+ return {
1090
+ totalInferenceNodesV2: _innV2.size,
1091
+ totalInferenceJobsV2: _ijsV2.size,
1092
+ maxActiveInferenceNodesPerOperator: _inMaxActivePerOperator,
1093
+ maxPendingInferenceJobsPerNode: _inMaxPendingJobsPerNode,
1094
+ inferenceNodeIdleMs: _inIdleMs,
1095
+ inferenceJobStuckMs: _ijStuckMs,
1096
+ nodesByStatus,
1097
+ jobsByStatus,
1098
+ };
842
1099
  }