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
@@ -569,3 +569,330 @@ function _appendHistory(cwd, record) {
569
569
  // best-effort
570
570
  }
571
571
  }
572
+
573
+ // =====================================================================
574
+ // cowork-workflow V2 governance overlay (iter17)
575
+ // =====================================================================
576
+ export const CWWF_PROFILE_MATURITY_V2 = Object.freeze({
577
+ PENDING: "pending",
578
+ ACTIVE: "active",
579
+ PAUSED: "paused",
580
+ ARCHIVED: "archived",
581
+ });
582
+ export const CWWF_STEP_LIFECYCLE_V2 = Object.freeze({
583
+ QUEUED: "queued",
584
+ RUNNING: "running",
585
+ COMPLETED: "completed",
586
+ FAILED: "failed",
587
+ CANCELLED: "cancelled",
588
+ });
589
+ const _cwwfPTrans = new Map([
590
+ [
591
+ CWWF_PROFILE_MATURITY_V2.PENDING,
592
+ new Set([
593
+ CWWF_PROFILE_MATURITY_V2.ACTIVE,
594
+ CWWF_PROFILE_MATURITY_V2.ARCHIVED,
595
+ ]),
596
+ ],
597
+ [
598
+ CWWF_PROFILE_MATURITY_V2.ACTIVE,
599
+ new Set([
600
+ CWWF_PROFILE_MATURITY_V2.PAUSED,
601
+ CWWF_PROFILE_MATURITY_V2.ARCHIVED,
602
+ ]),
603
+ ],
604
+ [
605
+ CWWF_PROFILE_MATURITY_V2.PAUSED,
606
+ new Set([
607
+ CWWF_PROFILE_MATURITY_V2.ACTIVE,
608
+ CWWF_PROFILE_MATURITY_V2.ARCHIVED,
609
+ ]),
610
+ ],
611
+ [CWWF_PROFILE_MATURITY_V2.ARCHIVED, new Set()],
612
+ ]);
613
+ const _cwwfPTerminal = new Set([CWWF_PROFILE_MATURITY_V2.ARCHIVED]);
614
+ const _cwwfJTrans = new Map([
615
+ [
616
+ CWWF_STEP_LIFECYCLE_V2.QUEUED,
617
+ new Set([CWWF_STEP_LIFECYCLE_V2.RUNNING, CWWF_STEP_LIFECYCLE_V2.CANCELLED]),
618
+ ],
619
+ [
620
+ CWWF_STEP_LIFECYCLE_V2.RUNNING,
621
+ new Set([
622
+ CWWF_STEP_LIFECYCLE_V2.COMPLETED,
623
+ CWWF_STEP_LIFECYCLE_V2.FAILED,
624
+ CWWF_STEP_LIFECYCLE_V2.CANCELLED,
625
+ ]),
626
+ ],
627
+ [CWWF_STEP_LIFECYCLE_V2.COMPLETED, new Set()],
628
+ [CWWF_STEP_LIFECYCLE_V2.FAILED, new Set()],
629
+ [CWWF_STEP_LIFECYCLE_V2.CANCELLED, new Set()],
630
+ ]);
631
+ const _cwwfPsV2 = new Map();
632
+ const _cwwfJsV2 = new Map();
633
+ let _cwwfMaxActive = 8,
634
+ _cwwfMaxPending = 20,
635
+ _cwwfIdleMs = 30 * 24 * 60 * 60 * 1000,
636
+ _cwwfStuckMs = 60 * 1000;
637
+ function _cwwfPos(n, label) {
638
+ const v = Math.floor(Number(n));
639
+ if (!Number.isFinite(v) || v <= 0)
640
+ throw new Error(`${label} must be positive integer`);
641
+ return v;
642
+ }
643
+ function _cwwfCheckP(from, to) {
644
+ const a = _cwwfPTrans.get(from);
645
+ if (!a || !a.has(to))
646
+ throw new Error(`invalid cwwf profile transition ${from} → ${to}`);
647
+ }
648
+ function _cwwfCheckJ(from, to) {
649
+ const a = _cwwfJTrans.get(from);
650
+ if (!a || !a.has(to))
651
+ throw new Error(`invalid cwwf step transition ${from} → ${to}`);
652
+ }
653
+ function _cwwfCountActive(owner) {
654
+ let c = 0;
655
+ for (const p of _cwwfPsV2.values())
656
+ if (p.owner === owner && p.status === CWWF_PROFILE_MATURITY_V2.ACTIVE) c++;
657
+ return c;
658
+ }
659
+ function _cwwfCountPending(profileId) {
660
+ let c = 0;
661
+ for (const j of _cwwfJsV2.values())
662
+ if (
663
+ j.profileId === profileId &&
664
+ (j.status === CWWF_STEP_LIFECYCLE_V2.QUEUED ||
665
+ j.status === CWWF_STEP_LIFECYCLE_V2.RUNNING)
666
+ )
667
+ c++;
668
+ return c;
669
+ }
670
+ export function setMaxActiveCwwfProfilesPerOwnerV2(n) {
671
+ _cwwfMaxActive = _cwwfPos(n, "maxActiveCwwfProfilesPerOwner");
672
+ }
673
+ export function getMaxActiveCwwfProfilesPerOwnerV2() {
674
+ return _cwwfMaxActive;
675
+ }
676
+ export function setMaxPendingCwwfStepsPerProfileV2(n) {
677
+ _cwwfMaxPending = _cwwfPos(n, "maxPendingCwwfStepsPerProfile");
678
+ }
679
+ export function getMaxPendingCwwfStepsPerProfileV2() {
680
+ return _cwwfMaxPending;
681
+ }
682
+ export function setCwwfProfileIdleMsV2(n) {
683
+ _cwwfIdleMs = _cwwfPos(n, "cwwfProfileIdleMs");
684
+ }
685
+ export function getCwwfProfileIdleMsV2() {
686
+ return _cwwfIdleMs;
687
+ }
688
+ export function setCwwfStepStuckMsV2(n) {
689
+ _cwwfStuckMs = _cwwfPos(n, "cwwfStepStuckMs");
690
+ }
691
+ export function getCwwfStepStuckMsV2() {
692
+ return _cwwfStuckMs;
693
+ }
694
+ export function _resetStateCoworkWorkflowV2() {
695
+ _cwwfPsV2.clear();
696
+ _cwwfJsV2.clear();
697
+ _cwwfMaxActive = 8;
698
+ _cwwfMaxPending = 20;
699
+ _cwwfIdleMs = 30 * 24 * 60 * 60 * 1000;
700
+ _cwwfStuckMs = 60 * 1000;
701
+ }
702
+ export function registerCwwfProfileV2({ id, owner, mode, metadata } = {}) {
703
+ if (!id || !owner) throw new Error("id and owner required");
704
+ if (_cwwfPsV2.has(id)) throw new Error(`cwwf profile ${id} already exists`);
705
+ const now = Date.now();
706
+ const p = {
707
+ id,
708
+ owner,
709
+ mode: mode || "sequential",
710
+ status: CWWF_PROFILE_MATURITY_V2.PENDING,
711
+ createdAt: now,
712
+ updatedAt: now,
713
+ lastTouchedAt: now,
714
+ activatedAt: null,
715
+ archivedAt: null,
716
+ metadata: { ...(metadata || {}) },
717
+ };
718
+ _cwwfPsV2.set(id, p);
719
+ return { ...p, metadata: { ...p.metadata } };
720
+ }
721
+ export function activateCwwfProfileV2(id) {
722
+ const p = _cwwfPsV2.get(id);
723
+ if (!p) throw new Error(`cwwf profile ${id} not found`);
724
+ const isInitial = p.status === CWWF_PROFILE_MATURITY_V2.PENDING;
725
+ _cwwfCheckP(p.status, CWWF_PROFILE_MATURITY_V2.ACTIVE);
726
+ if (isInitial && _cwwfCountActive(p.owner) >= _cwwfMaxActive)
727
+ throw new Error(`max active cwwf profiles for owner ${p.owner} reached`);
728
+ const now = Date.now();
729
+ p.status = CWWF_PROFILE_MATURITY_V2.ACTIVE;
730
+ p.updatedAt = now;
731
+ p.lastTouchedAt = now;
732
+ if (!p.activatedAt) p.activatedAt = now;
733
+ return { ...p, metadata: { ...p.metadata } };
734
+ }
735
+ export function pauseCwwfProfileV2(id) {
736
+ const p = _cwwfPsV2.get(id);
737
+ if (!p) throw new Error(`cwwf profile ${id} not found`);
738
+ _cwwfCheckP(p.status, CWWF_PROFILE_MATURITY_V2.PAUSED);
739
+ p.status = CWWF_PROFILE_MATURITY_V2.PAUSED;
740
+ p.updatedAt = Date.now();
741
+ return { ...p, metadata: { ...p.metadata } };
742
+ }
743
+ export function archiveCwwfProfileV2(id) {
744
+ const p = _cwwfPsV2.get(id);
745
+ if (!p) throw new Error(`cwwf profile ${id} not found`);
746
+ _cwwfCheckP(p.status, CWWF_PROFILE_MATURITY_V2.ARCHIVED);
747
+ const now = Date.now();
748
+ p.status = CWWF_PROFILE_MATURITY_V2.ARCHIVED;
749
+ p.updatedAt = now;
750
+ if (!p.archivedAt) p.archivedAt = now;
751
+ return { ...p, metadata: { ...p.metadata } };
752
+ }
753
+ export function touchCwwfProfileV2(id) {
754
+ const p = _cwwfPsV2.get(id);
755
+ if (!p) throw new Error(`cwwf profile ${id} not found`);
756
+ if (_cwwfPTerminal.has(p.status))
757
+ throw new Error(`cannot touch terminal cwwf profile ${id}`);
758
+ const now = Date.now();
759
+ p.lastTouchedAt = now;
760
+ p.updatedAt = now;
761
+ return { ...p, metadata: { ...p.metadata } };
762
+ }
763
+ export function getCwwfProfileV2(id) {
764
+ const p = _cwwfPsV2.get(id);
765
+ if (!p) return null;
766
+ return { ...p, metadata: { ...p.metadata } };
767
+ }
768
+ export function listCwwfProfilesV2() {
769
+ return [..._cwwfPsV2.values()].map((p) => ({
770
+ ...p,
771
+ metadata: { ...p.metadata },
772
+ }));
773
+ }
774
+ export function createCwwfStepV2({ id, profileId, task, metadata } = {}) {
775
+ if (!id || !profileId) throw new Error("id and profileId required");
776
+ if (_cwwfJsV2.has(id)) throw new Error(`cwwf step ${id} already exists`);
777
+ if (!_cwwfPsV2.has(profileId))
778
+ throw new Error(`cwwf profile ${profileId} not found`);
779
+ if (_cwwfCountPending(profileId) >= _cwwfMaxPending)
780
+ throw new Error(`max pending cwwf steps for profile ${profileId} reached`);
781
+ const now = Date.now();
782
+ const j = {
783
+ id,
784
+ profileId,
785
+ task: task || "",
786
+ status: CWWF_STEP_LIFECYCLE_V2.QUEUED,
787
+ createdAt: now,
788
+ updatedAt: now,
789
+ startedAt: null,
790
+ settledAt: null,
791
+ metadata: { ...(metadata || {}) },
792
+ };
793
+ _cwwfJsV2.set(id, j);
794
+ return { ...j, metadata: { ...j.metadata } };
795
+ }
796
+ export function runningCwwfStepV2(id) {
797
+ const j = _cwwfJsV2.get(id);
798
+ if (!j) throw new Error(`cwwf step ${id} not found`);
799
+ _cwwfCheckJ(j.status, CWWF_STEP_LIFECYCLE_V2.RUNNING);
800
+ const now = Date.now();
801
+ j.status = CWWF_STEP_LIFECYCLE_V2.RUNNING;
802
+ j.updatedAt = now;
803
+ if (!j.startedAt) j.startedAt = now;
804
+ return { ...j, metadata: { ...j.metadata } };
805
+ }
806
+ export function completeStepCwwfV2(id) {
807
+ const j = _cwwfJsV2.get(id);
808
+ if (!j) throw new Error(`cwwf step ${id} not found`);
809
+ _cwwfCheckJ(j.status, CWWF_STEP_LIFECYCLE_V2.COMPLETED);
810
+ const now = Date.now();
811
+ j.status = CWWF_STEP_LIFECYCLE_V2.COMPLETED;
812
+ j.updatedAt = now;
813
+ if (!j.settledAt) j.settledAt = now;
814
+ return { ...j, metadata: { ...j.metadata } };
815
+ }
816
+ export function failCwwfStepV2(id, reason) {
817
+ const j = _cwwfJsV2.get(id);
818
+ if (!j) throw new Error(`cwwf step ${id} not found`);
819
+ _cwwfCheckJ(j.status, CWWF_STEP_LIFECYCLE_V2.FAILED);
820
+ const now = Date.now();
821
+ j.status = CWWF_STEP_LIFECYCLE_V2.FAILED;
822
+ j.updatedAt = now;
823
+ if (!j.settledAt) j.settledAt = now;
824
+ if (reason) j.metadata.failReason = String(reason);
825
+ return { ...j, metadata: { ...j.metadata } };
826
+ }
827
+ export function cancelCwwfStepV2(id, reason) {
828
+ const j = _cwwfJsV2.get(id);
829
+ if (!j) throw new Error(`cwwf step ${id} not found`);
830
+ _cwwfCheckJ(j.status, CWWF_STEP_LIFECYCLE_V2.CANCELLED);
831
+ const now = Date.now();
832
+ j.status = CWWF_STEP_LIFECYCLE_V2.CANCELLED;
833
+ j.updatedAt = now;
834
+ if (!j.settledAt) j.settledAt = now;
835
+ if (reason) j.metadata.cancelReason = String(reason);
836
+ return { ...j, metadata: { ...j.metadata } };
837
+ }
838
+ export function getCwwfStepV2(id) {
839
+ const j = _cwwfJsV2.get(id);
840
+ if (!j) return null;
841
+ return { ...j, metadata: { ...j.metadata } };
842
+ }
843
+ export function listCwwfStepsV2() {
844
+ return [..._cwwfJsV2.values()].map((j) => ({
845
+ ...j,
846
+ metadata: { ...j.metadata },
847
+ }));
848
+ }
849
+ export function autoPauseIdleCwwfProfilesV2({ now } = {}) {
850
+ const t = now ?? Date.now();
851
+ const flipped = [];
852
+ for (const p of _cwwfPsV2.values())
853
+ if (
854
+ p.status === CWWF_PROFILE_MATURITY_V2.ACTIVE &&
855
+ t - p.lastTouchedAt >= _cwwfIdleMs
856
+ ) {
857
+ p.status = CWWF_PROFILE_MATURITY_V2.PAUSED;
858
+ p.updatedAt = t;
859
+ flipped.push(p.id);
860
+ }
861
+ return { flipped, count: flipped.length };
862
+ }
863
+ export function autoFailStuckCwwfStepsV2({ now } = {}) {
864
+ const t = now ?? Date.now();
865
+ const flipped = [];
866
+ for (const j of _cwwfJsV2.values())
867
+ if (
868
+ j.status === CWWF_STEP_LIFECYCLE_V2.RUNNING &&
869
+ j.startedAt != null &&
870
+ t - j.startedAt >= _cwwfStuckMs
871
+ ) {
872
+ j.status = CWWF_STEP_LIFECYCLE_V2.FAILED;
873
+ j.updatedAt = t;
874
+ if (!j.settledAt) j.settledAt = t;
875
+ j.metadata.failReason = "auto-fail-stuck";
876
+ flipped.push(j.id);
877
+ }
878
+ return { flipped, count: flipped.length };
879
+ }
880
+ export function getCoworkWorkflowGovStatsV2() {
881
+ const profilesByStatus = {};
882
+ for (const v of Object.values(CWWF_PROFILE_MATURITY_V2))
883
+ profilesByStatus[v] = 0;
884
+ for (const p of _cwwfPsV2.values()) profilesByStatus[p.status]++;
885
+ const stepsByStatus = {};
886
+ for (const v of Object.values(CWWF_STEP_LIFECYCLE_V2)) stepsByStatus[v] = 0;
887
+ for (const j of _cwwfJsV2.values()) stepsByStatus[j.status]++;
888
+ return {
889
+ totalCwwfProfilesV2: _cwwfPsV2.size,
890
+ totalCwwfStepsV2: _cwwfJsV2.size,
891
+ maxActiveCwwfProfilesPerOwner: _cwwfMaxActive,
892
+ maxPendingCwwfStepsPerProfile: _cwwfMaxPending,
893
+ cwwfProfileIdleMs: _cwwfIdleMs,
894
+ cwwfStepStuckMs: _cwwfStuckMs,
895
+ profilesByStatus,
896
+ stepsByStatus,
897
+ };
898
+ }