chainlesschain 0.145.0 → 0.156.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 (184) hide show
  1. package/README.md +52 -3
  2. package/package.json +1 -1
  3. package/src/commands/a2a.js +201 -0
  4. package/src/commands/activitypub.js +207 -0
  5. package/src/commands/agent-network.js +217 -0
  6. package/src/commands/agent.js +1250 -0
  7. package/src/commands/automation.js +201 -0
  8. package/src/commands/bi.js +203 -0
  9. package/src/commands/browse.js +213 -0
  10. package/src/commands/chat.js +605 -0
  11. package/src/commands/cli-anything.js +426 -0
  12. package/src/commands/codegen.js +207 -0
  13. package/src/commands/collab.js +211 -0
  14. package/src/commands/compliance.js +822 -0
  15. package/src/commands/config.js +213 -0
  16. package/src/commands/cowork.js +1666 -0
  17. package/src/commands/crosschain.js +203 -0
  18. package/src/commands/dao.js +203 -0
  19. package/src/commands/dbevo.js +227 -0
  20. package/src/commands/dev.js +207 -0
  21. package/src/commands/did-v2.js +217 -0
  22. package/src/commands/did.js +221 -0
  23. package/src/commands/dlp.js +213 -0
  24. package/src/commands/economy.js +199 -0
  25. package/src/commands/encrypt.js +201 -0
  26. package/src/commands/evolution.js +199 -0
  27. package/src/commands/evomap.js +830 -0
  28. package/src/commands/export.js +213 -0
  29. package/src/commands/federation.js +209 -0
  30. package/src/commands/fusion.js +205 -0
  31. package/src/commands/governance.js +209 -0
  32. package/src/commands/hmemory.js +203 -0
  33. package/src/commands/hook.js +209 -0
  34. package/src/commands/import.js +209 -0
  35. package/src/commands/inference.js +207 -0
  36. package/src/commands/infra.js +203 -0
  37. package/src/commands/instinct.js +209 -0
  38. package/src/commands/ipfs.js +207 -0
  39. package/src/commands/kg.js +195 -0
  40. package/src/commands/llm.js +426 -0
  41. package/src/commands/matrix.js +207 -0
  42. package/src/commands/mcp.js +217 -0
  43. package/src/commands/memory.js +412 -0
  44. package/src/commands/multimodal.js +203 -0
  45. package/src/commands/nlprog.js +225 -0
  46. package/src/commands/nostr.js +209 -0
  47. package/src/commands/note.js +205 -0
  48. package/src/commands/ops.js +219 -0
  49. package/src/commands/orchestrate.js +406 -0
  50. package/src/commands/org.js +209 -0
  51. package/src/commands/p2p.js +209 -0
  52. package/src/commands/perception.js +209 -0
  53. package/src/commands/permmem.js +203 -0
  54. package/src/commands/pipeline.js +199 -0
  55. package/src/commands/planmode.js +426 -0
  56. package/src/commands/plugin-ecosystem.js +209 -0
  57. package/src/commands/plugin.js +209 -0
  58. package/src/commands/pqc.js +213 -0
  59. package/src/commands/quantization.js +207 -0
  60. package/src/commands/rcache.js +205 -0
  61. package/src/commands/recommend.js +233 -0
  62. package/src/commands/runtime.js +205 -0
  63. package/src/commands/scim.js +209 -0
  64. package/src/commands/services.js +207 -0
  65. package/src/commands/session.js +209 -0
  66. package/src/commands/setup.js +205 -0
  67. package/src/commands/skill.js +414 -0
  68. package/src/commands/social.js +201 -0
  69. package/src/commands/sso.js +209 -0
  70. package/src/commands/start.js +209 -0
  71. package/src/commands/stream.js +213 -0
  72. package/src/commands/sync.js +209 -0
  73. package/src/commands/tech.js +209 -0
  74. package/src/commands/tenant.js +217 -0
  75. package/src/commands/tokens.js +209 -0
  76. package/src/commands/trust.js +217 -0
  77. package/src/commands/ui.js +225 -0
  78. package/src/commands/wallet.js +209 -0
  79. package/src/commands/workflow.js +412 -0
  80. package/src/index.js +252 -0
  81. package/src/lib/a2a-protocol.js +332 -0
  82. package/src/lib/activitypub-bridge.js +334 -0
  83. package/src/lib/agent-coordinator.js +334 -0
  84. package/src/lib/agent-economy.js +334 -0
  85. package/src/lib/agent-network.js +341 -0
  86. package/src/lib/agent-router.js +333 -0
  87. package/src/lib/aiops.js +346 -0
  88. package/src/lib/automation-engine.js +335 -0
  89. package/src/lib/autonomous-agent.js +332 -0
  90. package/src/lib/autonomous-developer.js +332 -0
  91. package/src/lib/bi-engine.js +333 -0
  92. package/src/lib/browser-automation.js +334 -0
  93. package/src/lib/chat-core.js +335 -0
  94. package/src/lib/cli-anything-bridge.js +341 -0
  95. package/src/lib/cli-context-engineering.js +351 -0
  96. package/src/lib/code-agent.js +339 -0
  97. package/src/lib/collaboration-governance.js +334 -0
  98. package/src/lib/community-governance.js +346 -0
  99. package/src/lib/compliance-manager.js +334 -0
  100. package/src/lib/content-recommendation.js +351 -0
  101. package/src/lib/cowork-adapter.js +336 -0
  102. package/src/lib/cowork-evomap-adapter.js +341 -0
  103. package/src/lib/cowork-mcp-tools.js +341 -0
  104. package/src/lib/cowork-observe-html.js +341 -0
  105. package/src/lib/cowork-observe.js +341 -0
  106. package/src/lib/cowork-share.js +338 -0
  107. package/src/lib/cowork-task-templates.js +342 -1
  108. package/src/lib/cowork-template-marketplace.js +340 -0
  109. package/src/lib/cross-chain.js +339 -0
  110. package/src/lib/crypto-manager.js +334 -0
  111. package/src/lib/dao-governance.js +339 -0
  112. package/src/lib/dbevo.js +351 -0
  113. package/src/lib/decentral-infra.js +330 -0
  114. package/src/lib/did-manager.js +341 -0
  115. package/src/lib/did-v2-manager.js +341 -0
  116. package/src/lib/dlp-engine.js +339 -0
  117. package/src/lib/downloader.js +334 -0
  118. package/src/lib/evolution-system.js +334 -0
  119. package/src/lib/evomap-client.js +342 -0
  120. package/src/lib/evomap-federation.js +338 -0
  121. package/src/lib/evomap-governance.js +334 -0
  122. package/src/lib/evomap-manager.js +330 -0
  123. package/src/lib/execution-backend.js +330 -0
  124. package/src/lib/federation-hardening.js +340 -0
  125. package/src/lib/hashline.js +338 -0
  126. package/src/lib/hierarchical-memory.js +334 -0
  127. package/src/lib/hook-manager.js +341 -0
  128. package/src/lib/inference-network.js +341 -0
  129. package/src/lib/instinct-manager.js +346 -0
  130. package/src/lib/interaction-adapter.js +330 -0
  131. package/src/lib/interactive-planner.js +354 -0
  132. package/src/lib/ipfs-storage.js +334 -0
  133. package/src/lib/knowledge-exporter.js +341 -0
  134. package/src/lib/knowledge-graph.js +331 -0
  135. package/src/lib/knowledge-importer.js +341 -0
  136. package/src/lib/llm-providers.js +346 -0
  137. package/src/lib/matrix-bridge.js +339 -0
  138. package/src/lib/mcp-registry.js +346 -0
  139. package/src/lib/memory-manager.js +336 -0
  140. package/src/lib/multimodal.js +330 -0
  141. package/src/lib/nl-programming.js +341 -0
  142. package/src/lib/nostr-bridge.js +336 -0
  143. package/src/lib/note-versioning.js +339 -0
  144. package/src/lib/org-manager.js +336 -0
  145. package/src/lib/p2p-manager.js +341 -0
  146. package/src/lib/perception.js +346 -0
  147. package/src/lib/permanent-memory.js +327 -0
  148. package/src/lib/pipeline-orchestrator.js +332 -0
  149. package/src/lib/plan-mode.js +336 -0
  150. package/src/lib/plugin-autodiscovery.js +334 -0
  151. package/src/lib/plugin-ecosystem.js +346 -0
  152. package/src/lib/pqc-manager.js +346 -0
  153. package/src/lib/process-manager.js +336 -0
  154. package/src/lib/protocol-fusion.js +338 -0
  155. package/src/lib/provider-options.js +346 -0
  156. package/src/lib/provider-stream.js +348 -0
  157. package/src/lib/quantization.js +337 -0
  158. package/src/lib/response-cache.js +333 -0
  159. package/src/lib/scim-manager.js +346 -0
  160. package/src/lib/service-manager.js +337 -0
  161. package/src/lib/session-core-singletons.js +341 -0
  162. package/src/lib/session-manager.js +334 -0
  163. package/src/lib/skill-loader.js +334 -0
  164. package/src/lib/skill-mcp.js +336 -0
  165. package/src/lib/social-manager.js +330 -0
  166. package/src/lib/sso-manager.js +340 -0
  167. package/src/lib/stix-parser.js +346 -0
  168. package/src/lib/sub-agent-context.js +343 -0
  169. package/src/lib/sub-agent-profiles.js +335 -0
  170. package/src/lib/sub-agent-registry.js +336 -0
  171. package/src/lib/sync-manager.js +336 -0
  172. package/src/lib/tech-learning-engine.js +341 -0
  173. package/src/lib/tenant-saas.js +341 -0
  174. package/src/lib/threat-intel.js +330 -0
  175. package/src/lib/todo-manager.js +336 -0
  176. package/src/lib/token-tracker.js +336 -0
  177. package/src/lib/trust-security.js +343 -0
  178. package/src/lib/ueba.js +340 -0
  179. package/src/lib/universal-runtime.js +330 -0
  180. package/src/lib/wallet-manager.js +336 -0
  181. package/src/lib/web-ui-server.js +348 -0
  182. package/src/lib/workflow-engine.js +330 -0
  183. package/src/lib/workflow-expr.js +346 -0
  184. package/src/lib/ws-chat-handler.js +337 -0
@@ -805,3 +805,208 @@ export function registerRuntimeCommand(program) {
805
805
 
806
806
  program.addCommand(runtime);
807
807
  }
808
+
809
+ // === Iter23 V2 governance overlay ===
810
+ export function registerRtgovV2Commands(program) {
811
+ const parent = program.commands.find((c) => c.name() === "runtime");
812
+ if (!parent) return;
813
+ const L = async () => await import("../lib/universal-runtime.js");
814
+ parent
815
+ .command("rtgov-enums-v2")
816
+ .description("Show V2 enums")
817
+ .action(async () => {
818
+ const m = await L();
819
+ console.log(
820
+ JSON.stringify(
821
+ {
822
+ profileMaturity: m.RTGOV_PROFILE_MATURITY_V2,
823
+ taskLifecycle: m.RTGOV_TASK_LIFECYCLE_V2,
824
+ },
825
+ null,
826
+ 2,
827
+ ),
828
+ );
829
+ });
830
+ parent
831
+ .command("rtgov-config-v2")
832
+ .description("Show V2 config")
833
+ .action(async () => {
834
+ const m = await L();
835
+ console.log(
836
+ JSON.stringify(
837
+ {
838
+ maxActive: m.getMaxActiveRtgovProfilesPerOwnerV2(),
839
+ maxPending: m.getMaxPendingRtgovTasksPerProfileV2(),
840
+ idleMs: m.getRtgovProfileIdleMsV2(),
841
+ stuckMs: m.getRtgovTaskStuckMsV2(),
842
+ },
843
+ null,
844
+ 2,
845
+ ),
846
+ );
847
+ });
848
+ parent
849
+ .command("rtgov-set-max-active-v2 <n>")
850
+ .description("Set max active")
851
+ .action(async (n) => {
852
+ (await L()).setMaxActiveRtgovProfilesPerOwnerV2(Number(n));
853
+ console.log("ok");
854
+ });
855
+ parent
856
+ .command("rtgov-set-max-pending-v2 <n>")
857
+ .description("Set max pending")
858
+ .action(async (n) => {
859
+ (await L()).setMaxPendingRtgovTasksPerProfileV2(Number(n));
860
+ console.log("ok");
861
+ });
862
+ parent
863
+ .command("rtgov-set-idle-ms-v2 <n>")
864
+ .description("Set idle threshold ms")
865
+ .action(async (n) => {
866
+ (await L()).setRtgovProfileIdleMsV2(Number(n));
867
+ console.log("ok");
868
+ });
869
+ parent
870
+ .command("rtgov-set-stuck-ms-v2 <n>")
871
+ .description("Set stuck threshold ms")
872
+ .action(async (n) => {
873
+ (await L()).setRtgovTaskStuckMsV2(Number(n));
874
+ console.log("ok");
875
+ });
876
+ parent
877
+ .command("rtgov-register-v2 <id> <owner>")
878
+ .description("Register V2 profile")
879
+ .option("--runtime <v>", "runtime")
880
+ .action(async (id, owner, o) => {
881
+ const m = await L();
882
+ console.log(
883
+ JSON.stringify(
884
+ m.registerRtgovProfileV2({ id, owner, runtime: o.runtime }),
885
+ null,
886
+ 2,
887
+ ),
888
+ );
889
+ });
890
+ parent
891
+ .command("rtgov-activate-v2 <id>")
892
+ .description("Activate profile")
893
+ .action(async (id) => {
894
+ console.log(
895
+ JSON.stringify((await L()).activateRtgovProfileV2(id), null, 2),
896
+ );
897
+ });
898
+ parent
899
+ .command("rtgov-degrade-v2 <id>")
900
+ .description("Degrade profile")
901
+ .action(async (id) => {
902
+ console.log(
903
+ JSON.stringify((await L()).degradeRtgovProfileV2(id), null, 2),
904
+ );
905
+ });
906
+ parent
907
+ .command("rtgov-archive-v2 <id>")
908
+ .description("Archive profile")
909
+ .action(async (id) => {
910
+ console.log(
911
+ JSON.stringify((await L()).archiveRtgovProfileV2(id), null, 2),
912
+ );
913
+ });
914
+ parent
915
+ .command("rtgov-touch-v2 <id>")
916
+ .description("Touch profile")
917
+ .action(async (id) => {
918
+ console.log(JSON.stringify((await L()).touchRtgovProfileV2(id), null, 2));
919
+ });
920
+ parent
921
+ .command("rtgov-get-v2 <id>")
922
+ .description("Get profile")
923
+ .action(async (id) => {
924
+ console.log(JSON.stringify((await L()).getRtgovProfileV2(id), null, 2));
925
+ });
926
+ parent
927
+ .command("rtgov-list-v2")
928
+ .description("List profiles")
929
+ .action(async () => {
930
+ console.log(JSON.stringify((await L()).listRtgovProfilesV2(), null, 2));
931
+ });
932
+ parent
933
+ .command("rtgov-create-task-v2 <id> <profileId>")
934
+ .description("Create task")
935
+ .option("--kind <v>", "kind")
936
+ .action(async (id, profileId, o) => {
937
+ const m = await L();
938
+ console.log(
939
+ JSON.stringify(
940
+ m.createRtgovTaskV2({ id, profileId, kind: o.kind }),
941
+ null,
942
+ 2,
943
+ ),
944
+ );
945
+ });
946
+ parent
947
+ .command("rtgov-executing-task-v2 <id>")
948
+ .description("Mark task as executing")
949
+ .action(async (id) => {
950
+ console.log(
951
+ JSON.stringify((await L()).executingRtgovTaskV2(id), null, 2),
952
+ );
953
+ });
954
+ parent
955
+ .command("rtgov-complete-task-v2 <id>")
956
+ .description("Complete task")
957
+ .action(async (id) => {
958
+ console.log(JSON.stringify((await L()).completeTaskRtgovV2(id), null, 2));
959
+ });
960
+ parent
961
+ .command("rtgov-fail-task-v2 <id> [reason]")
962
+ .description("Fail task")
963
+ .action(async (id, reason) => {
964
+ console.log(
965
+ JSON.stringify((await L()).failRtgovTaskV2(id, reason), null, 2),
966
+ );
967
+ });
968
+ parent
969
+ .command("rtgov-cancel-task-v2 <id> [reason]")
970
+ .description("Cancel task")
971
+ .action(async (id, reason) => {
972
+ console.log(
973
+ JSON.stringify((await L()).cancelRtgovTaskV2(id, reason), null, 2),
974
+ );
975
+ });
976
+ parent
977
+ .command("rtgov-get-task-v2 <id>")
978
+ .description("Get task")
979
+ .action(async (id) => {
980
+ console.log(JSON.stringify((await L()).getRtgovTaskV2(id), null, 2));
981
+ });
982
+ parent
983
+ .command("rtgov-list-tasks-v2")
984
+ .description("List tasks")
985
+ .action(async () => {
986
+ console.log(JSON.stringify((await L()).listRtgovTasksV2(), null, 2));
987
+ });
988
+ parent
989
+ .command("rtgov-auto-degrade-idle-v2")
990
+ .description("Auto-degrade idle")
991
+ .action(async () => {
992
+ console.log(
993
+ JSON.stringify((await L()).autoDegradeIdleRtgovProfilesV2(), null, 2),
994
+ );
995
+ });
996
+ parent
997
+ .command("rtgov-auto-fail-stuck-v2")
998
+ .description("Auto-fail stuck tasks")
999
+ .action(async () => {
1000
+ console.log(
1001
+ JSON.stringify((await L()).autoFailStuckRtgovTasksV2(), null, 2),
1002
+ );
1003
+ });
1004
+ parent
1005
+ .command("rtgov-gov-stats-v2")
1006
+ .description("V2 gov stats")
1007
+ .action(async () => {
1008
+ console.log(
1009
+ JSON.stringify((await L()).getUniversalRuntimeGovStatsV2(), null, 2),
1010
+ );
1011
+ });
1012
+ }
@@ -478,3 +478,212 @@ export function registerScimCommand(program) {
478
478
  console.log(JSON.stringify(flipped, null, 2));
479
479
  });
480
480
  }
481
+
482
+ // === Iter19 V2 governance overlay ===
483
+ export function registerScimgovV2Commands(program) {
484
+ const parent = program.commands.find((c) => c.name() === "scim");
485
+ if (!parent) return;
486
+ const L = async () => await import("../lib/scim-manager.js");
487
+ parent
488
+ .command("scimgov-enums-v2")
489
+ .description("Show V2 enums")
490
+ .action(async () => {
491
+ const m = await L();
492
+ console.log(
493
+ JSON.stringify(
494
+ {
495
+ profileMaturity: m.SCIMGOV_PROFILE_MATURITY_V2,
496
+ syncLifecycle: m.SCIMGOV_SYNC_LIFECYCLE_V2,
497
+ },
498
+ null,
499
+ 2,
500
+ ),
501
+ );
502
+ });
503
+ parent
504
+ .command("scimgov-config-v2")
505
+ .description("Show V2 config")
506
+ .action(async () => {
507
+ const m = await L();
508
+ console.log(
509
+ JSON.stringify(
510
+ {
511
+ maxActive: m.getMaxActiveScimgovProfilesPerOwnerV2(),
512
+ maxPending: m.getMaxPendingScimgovSyncsPerProfileV2(),
513
+ idleMs: m.getScimgovProfileIdleMsV2(),
514
+ stuckMs: m.getScimgovSyncStuckMsV2(),
515
+ },
516
+ null,
517
+ 2,
518
+ ),
519
+ );
520
+ });
521
+ parent
522
+ .command("scimgov-set-max-active-v2 <n>")
523
+ .description("Set max active")
524
+ .action(async (n) => {
525
+ (await L()).setMaxActiveScimgovProfilesPerOwnerV2(Number(n));
526
+ console.log("ok");
527
+ });
528
+ parent
529
+ .command("scimgov-set-max-pending-v2 <n>")
530
+ .description("Set max pending")
531
+ .action(async (n) => {
532
+ (await L()).setMaxPendingScimgovSyncsPerProfileV2(Number(n));
533
+ console.log("ok");
534
+ });
535
+ parent
536
+ .command("scimgov-set-idle-ms-v2 <n>")
537
+ .description("Set idle threshold ms")
538
+ .action(async (n) => {
539
+ (await L()).setScimgovProfileIdleMsV2(Number(n));
540
+ console.log("ok");
541
+ });
542
+ parent
543
+ .command("scimgov-set-stuck-ms-v2 <n>")
544
+ .description("Set stuck threshold ms")
545
+ .action(async (n) => {
546
+ (await L()).setScimgovSyncStuckMsV2(Number(n));
547
+ console.log("ok");
548
+ });
549
+ parent
550
+ .command("scimgov-register-v2 <id> <owner>")
551
+ .description("Register V2 profile")
552
+ .option("--resource <v>", "resource")
553
+ .action(async (id, owner, o) => {
554
+ const m = await L();
555
+ console.log(
556
+ JSON.stringify(
557
+ m.registerScimgovProfileV2({ id, owner, resource: o.resource }),
558
+ null,
559
+ 2,
560
+ ),
561
+ );
562
+ });
563
+ parent
564
+ .command("scimgov-activate-v2 <id>")
565
+ .description("Activate profile")
566
+ .action(async (id) => {
567
+ console.log(
568
+ JSON.stringify((await L()).activateScimgovProfileV2(id), null, 2),
569
+ );
570
+ });
571
+ parent
572
+ .command("scimgov-stale-v2 <id>")
573
+ .description("Stale profile")
574
+ .action(async (id) => {
575
+ console.log(
576
+ JSON.stringify((await L()).staleScimgovProfileV2(id), null, 2),
577
+ );
578
+ });
579
+ parent
580
+ .command("scimgov-archive-v2 <id>")
581
+ .description("Archive profile")
582
+ .action(async (id) => {
583
+ console.log(
584
+ JSON.stringify((await L()).archiveScimgovProfileV2(id), null, 2),
585
+ );
586
+ });
587
+ parent
588
+ .command("scimgov-touch-v2 <id>")
589
+ .description("Touch profile")
590
+ .action(async (id) => {
591
+ console.log(
592
+ JSON.stringify((await L()).touchScimgovProfileV2(id), null, 2),
593
+ );
594
+ });
595
+ parent
596
+ .command("scimgov-get-v2 <id>")
597
+ .description("Get profile")
598
+ .action(async (id) => {
599
+ console.log(JSON.stringify((await L()).getScimgovProfileV2(id), null, 2));
600
+ });
601
+ parent
602
+ .command("scimgov-list-v2")
603
+ .description("List profiles")
604
+ .action(async () => {
605
+ console.log(JSON.stringify((await L()).listScimgovProfilesV2(), null, 2));
606
+ });
607
+ parent
608
+ .command("scimgov-create-sync-v2 <id> <profileId>")
609
+ .description("Create sync")
610
+ .option("--endpoint <v>", "endpoint")
611
+ .action(async (id, profileId, o) => {
612
+ const m = await L();
613
+ console.log(
614
+ JSON.stringify(
615
+ m.createScimgovSyncV2({ id, profileId, endpoint: o.endpoint }),
616
+ null,
617
+ 2,
618
+ ),
619
+ );
620
+ });
621
+ parent
622
+ .command("scimgov-syncing-sync-v2 <id>")
623
+ .description("Mark sync as syncing")
624
+ .action(async (id) => {
625
+ console.log(
626
+ JSON.stringify((await L()).syncingScimgovSyncV2(id), null, 2),
627
+ );
628
+ });
629
+ parent
630
+ .command("scimgov-complete-sync-v2 <id>")
631
+ .description("Complete sync")
632
+ .action(async (id) => {
633
+ console.log(
634
+ JSON.stringify((await L()).completeSyncScimgovV2(id), null, 2),
635
+ );
636
+ });
637
+ parent
638
+ .command("scimgov-fail-sync-v2 <id> [reason]")
639
+ .description("Fail sync")
640
+ .action(async (id, reason) => {
641
+ console.log(
642
+ JSON.stringify((await L()).failScimgovSyncV2(id, reason), null, 2),
643
+ );
644
+ });
645
+ parent
646
+ .command("scimgov-cancel-sync-v2 <id> [reason]")
647
+ .description("Cancel sync")
648
+ .action(async (id, reason) => {
649
+ console.log(
650
+ JSON.stringify((await L()).cancelScimgovSyncV2(id, reason), null, 2),
651
+ );
652
+ });
653
+ parent
654
+ .command("scimgov-get-sync-v2 <id>")
655
+ .description("Get sync")
656
+ .action(async (id) => {
657
+ console.log(JSON.stringify((await L()).getScimgovSyncV2(id), null, 2));
658
+ });
659
+ parent
660
+ .command("scimgov-list-syncs-v2")
661
+ .description("List syncs")
662
+ .action(async () => {
663
+ console.log(JSON.stringify((await L()).listScimgovSyncsV2(), null, 2));
664
+ });
665
+ parent
666
+ .command("scimgov-auto-stale-idle-v2")
667
+ .description("Auto-stale idle")
668
+ .action(async () => {
669
+ console.log(
670
+ JSON.stringify((await L()).autoStaleIdleScimgovProfilesV2(), null, 2),
671
+ );
672
+ });
673
+ parent
674
+ .command("scimgov-auto-fail-stuck-v2")
675
+ .description("Auto-fail stuck syncs")
676
+ .action(async () => {
677
+ console.log(
678
+ JSON.stringify((await L()).autoFailStuckScimgovSyncsV2(), null, 2),
679
+ );
680
+ });
681
+ parent
682
+ .command("scimgov-gov-stats-v2")
683
+ .description("V2 gov stats")
684
+ .action(async () => {
685
+ console.log(
686
+ JSON.stringify((await L()).getScimManagerGovStatsV2(), null, 2),
687
+ );
688
+ });
689
+ }
@@ -92,3 +92,210 @@ async function withCompose(fn) {
92
92
  process.exit(1);
93
93
  }
94
94
  }
95
+
96
+ // === Iter27 V2 governance overlay ===
97
+ export function registerSmgrgovV2Commands(program) {
98
+ const parent = program.commands.find((c) => c.name() === "services");
99
+ if (!parent) return;
100
+ const L = async () => await import("../lib/service-manager.js");
101
+ parent
102
+ .command("smgrgov-enums-v2")
103
+ .description("Show V2 enums")
104
+ .action(async () => {
105
+ const m = await L();
106
+ console.log(
107
+ JSON.stringify(
108
+ {
109
+ profileMaturity: m.SMGRGOV_PROFILE_MATURITY_V2,
110
+ opLifecycle: m.SMGRGOV_OP_LIFECYCLE_V2,
111
+ },
112
+ null,
113
+ 2,
114
+ ),
115
+ );
116
+ });
117
+ parent
118
+ .command("smgrgov-config-v2")
119
+ .description("Show V2 config")
120
+ .action(async () => {
121
+ const m = await L();
122
+ console.log(
123
+ JSON.stringify(
124
+ {
125
+ maxActive: m.getMaxActiveSmgrgovProfilesPerOwnerV2(),
126
+ maxPending: m.getMaxPendingSmgrgovOpsPerProfileV2(),
127
+ idleMs: m.getSmgrgovProfileIdleMsV2(),
128
+ stuckMs: m.getSmgrgovOpStuckMsV2(),
129
+ },
130
+ null,
131
+ 2,
132
+ ),
133
+ );
134
+ });
135
+ parent
136
+ .command("smgrgov-set-max-active-v2 <n>")
137
+ .description("Set max active")
138
+ .action(async (n) => {
139
+ (await L()).setMaxActiveSmgrgovProfilesPerOwnerV2(Number(n));
140
+ console.log("ok");
141
+ });
142
+ parent
143
+ .command("smgrgov-set-max-pending-v2 <n>")
144
+ .description("Set max pending")
145
+ .action(async (n) => {
146
+ (await L()).setMaxPendingSmgrgovOpsPerProfileV2(Number(n));
147
+ console.log("ok");
148
+ });
149
+ parent
150
+ .command("smgrgov-set-idle-ms-v2 <n>")
151
+ .description("Set idle threshold ms")
152
+ .action(async (n) => {
153
+ (await L()).setSmgrgovProfileIdleMsV2(Number(n));
154
+ console.log("ok");
155
+ });
156
+ parent
157
+ .command("smgrgov-set-stuck-ms-v2 <n>")
158
+ .description("Set stuck threshold ms")
159
+ .action(async (n) => {
160
+ (await L()).setSmgrgovOpStuckMsV2(Number(n));
161
+ console.log("ok");
162
+ });
163
+ parent
164
+ .command("smgrgov-register-v2 <id> <owner>")
165
+ .description("Register V2 profile")
166
+ .option("--service <v>", "service")
167
+ .action(async (id, owner, o) => {
168
+ const m = await L();
169
+ console.log(
170
+ JSON.stringify(
171
+ m.registerSmgrgovProfileV2({ id, owner, service: o.service }),
172
+ null,
173
+ 2,
174
+ ),
175
+ );
176
+ });
177
+ parent
178
+ .command("smgrgov-activate-v2 <id>")
179
+ .description("Activate profile")
180
+ .action(async (id) => {
181
+ console.log(
182
+ JSON.stringify((await L()).activateSmgrgovProfileV2(id), null, 2),
183
+ );
184
+ });
185
+ parent
186
+ .command("smgrgov-degrade-v2 <id>")
187
+ .description("Degrade profile")
188
+ .action(async (id) => {
189
+ console.log(
190
+ JSON.stringify((await L()).degradeSmgrgovProfileV2(id), null, 2),
191
+ );
192
+ });
193
+ parent
194
+ .command("smgrgov-archive-v2 <id>")
195
+ .description("Archive profile")
196
+ .action(async (id) => {
197
+ console.log(
198
+ JSON.stringify((await L()).archiveSmgrgovProfileV2(id), null, 2),
199
+ );
200
+ });
201
+ parent
202
+ .command("smgrgov-touch-v2 <id>")
203
+ .description("Touch profile")
204
+ .action(async (id) => {
205
+ console.log(
206
+ JSON.stringify((await L()).touchSmgrgovProfileV2(id), null, 2),
207
+ );
208
+ });
209
+ parent
210
+ .command("smgrgov-get-v2 <id>")
211
+ .description("Get profile")
212
+ .action(async (id) => {
213
+ console.log(JSON.stringify((await L()).getSmgrgovProfileV2(id), null, 2));
214
+ });
215
+ parent
216
+ .command("smgrgov-list-v2")
217
+ .description("List profiles")
218
+ .action(async () => {
219
+ console.log(JSON.stringify((await L()).listSmgrgovProfilesV2(), null, 2));
220
+ });
221
+ parent
222
+ .command("smgrgov-create-op-v2 <id> <profileId>")
223
+ .description("Create op")
224
+ .option("--action <v>", "action")
225
+ .action(async (id, profileId, o) => {
226
+ const m = await L();
227
+ console.log(
228
+ JSON.stringify(
229
+ m.createSmgrgovOpV2({ id, profileId, action: o.action }),
230
+ null,
231
+ 2,
232
+ ),
233
+ );
234
+ });
235
+ parent
236
+ .command("smgrgov-operating-op-v2 <id>")
237
+ .description("Mark op as operating")
238
+ .action(async (id) => {
239
+ console.log(
240
+ JSON.stringify((await L()).operatingSmgrgovOpV2(id), null, 2),
241
+ );
242
+ });
243
+ parent
244
+ .command("smgrgov-complete-op-v2 <id>")
245
+ .description("Complete op")
246
+ .action(async (id) => {
247
+ console.log(JSON.stringify((await L()).completeOpSmgrgovV2(id), null, 2));
248
+ });
249
+ parent
250
+ .command("smgrgov-fail-op-v2 <id> [reason]")
251
+ .description("Fail op")
252
+ .action(async (id, reason) => {
253
+ console.log(
254
+ JSON.stringify((await L()).failSmgrgovOpV2(id, reason), null, 2),
255
+ );
256
+ });
257
+ parent
258
+ .command("smgrgov-cancel-op-v2 <id> [reason]")
259
+ .description("Cancel op")
260
+ .action(async (id, reason) => {
261
+ console.log(
262
+ JSON.stringify((await L()).cancelSmgrgovOpV2(id, reason), null, 2),
263
+ );
264
+ });
265
+ parent
266
+ .command("smgrgov-get-op-v2 <id>")
267
+ .description("Get op")
268
+ .action(async (id) => {
269
+ console.log(JSON.stringify((await L()).getSmgrgovOpV2(id), null, 2));
270
+ });
271
+ parent
272
+ .command("smgrgov-list-ops-v2")
273
+ .description("List ops")
274
+ .action(async () => {
275
+ console.log(JSON.stringify((await L()).listSmgrgovOpsV2(), null, 2));
276
+ });
277
+ parent
278
+ .command("smgrgov-auto-degrade-idle-v2")
279
+ .description("Auto-degrade idle")
280
+ .action(async () => {
281
+ console.log(
282
+ JSON.stringify((await L()).autoDegradeIdleSmgrgovProfilesV2(), null, 2),
283
+ );
284
+ });
285
+ parent
286
+ .command("smgrgov-auto-fail-stuck-v2")
287
+ .description("Auto-fail stuck ops")
288
+ .action(async () => {
289
+ console.log(
290
+ JSON.stringify((await L()).autoFailStuckSmgrgovOpsV2(), null, 2),
291
+ );
292
+ });
293
+ parent
294
+ .command("smgrgov-gov-stats-v2")
295
+ .description("V2 gov stats")
296
+ .action(async () => {
297
+ console.log(
298
+ JSON.stringify((await L()).getServiceManagerGovStatsV2(), null, 2),
299
+ );
300
+ });
301
+ }