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
@@ -763,3 +763,342 @@ export function _resetStateV2() {
763
763
  _agentsV2.clear();
764
764
  _jobsV2.clear();
765
765
  }
766
+
767
+ // =====================================================================
768
+ // code-agent V2 governance overlay (iter19)
769
+ // =====================================================================
770
+ export const CDAGOV_PROFILE_MATURITY_V2 = Object.freeze({
771
+ PENDING: "pending",
772
+ ACTIVE: "active",
773
+ STALE: "stale",
774
+ ARCHIVED: "archived",
775
+ });
776
+ export const CDAGOV_EDIT_LIFECYCLE_V2 = Object.freeze({
777
+ QUEUED: "queued",
778
+ EDITING: "editing",
779
+ EDITED: "edited",
780
+ FAILED: "failed",
781
+ CANCELLED: "cancelled",
782
+ });
783
+ const _cdagovPTrans = new Map([
784
+ [
785
+ CDAGOV_PROFILE_MATURITY_V2.PENDING,
786
+ new Set([
787
+ CDAGOV_PROFILE_MATURITY_V2.ACTIVE,
788
+ CDAGOV_PROFILE_MATURITY_V2.ARCHIVED,
789
+ ]),
790
+ ],
791
+ [
792
+ CDAGOV_PROFILE_MATURITY_V2.ACTIVE,
793
+ new Set([
794
+ CDAGOV_PROFILE_MATURITY_V2.STALE,
795
+ CDAGOV_PROFILE_MATURITY_V2.ARCHIVED,
796
+ ]),
797
+ ],
798
+ [
799
+ CDAGOV_PROFILE_MATURITY_V2.STALE,
800
+ new Set([
801
+ CDAGOV_PROFILE_MATURITY_V2.ACTIVE,
802
+ CDAGOV_PROFILE_MATURITY_V2.ARCHIVED,
803
+ ]),
804
+ ],
805
+ [CDAGOV_PROFILE_MATURITY_V2.ARCHIVED, new Set()],
806
+ ]);
807
+ const _cdagovPTerminal = new Set([CDAGOV_PROFILE_MATURITY_V2.ARCHIVED]);
808
+ const _cdagovJTrans = new Map([
809
+ [
810
+ CDAGOV_EDIT_LIFECYCLE_V2.QUEUED,
811
+ new Set([
812
+ CDAGOV_EDIT_LIFECYCLE_V2.EDITING,
813
+ CDAGOV_EDIT_LIFECYCLE_V2.CANCELLED,
814
+ ]),
815
+ ],
816
+ [
817
+ CDAGOV_EDIT_LIFECYCLE_V2.EDITING,
818
+ new Set([
819
+ CDAGOV_EDIT_LIFECYCLE_V2.EDITED,
820
+ CDAGOV_EDIT_LIFECYCLE_V2.FAILED,
821
+ CDAGOV_EDIT_LIFECYCLE_V2.CANCELLED,
822
+ ]),
823
+ ],
824
+ [CDAGOV_EDIT_LIFECYCLE_V2.EDITED, new Set()],
825
+ [CDAGOV_EDIT_LIFECYCLE_V2.FAILED, new Set()],
826
+ [CDAGOV_EDIT_LIFECYCLE_V2.CANCELLED, new Set()],
827
+ ]);
828
+ const _cdagovPsV2 = new Map();
829
+ const _cdagovJsV2 = new Map();
830
+ let _cdagovMaxActive = 6,
831
+ _cdagovMaxPending = 15,
832
+ _cdagovIdleMs = 30 * 24 * 60 * 60 * 1000,
833
+ _cdagovStuckMs = 60 * 1000;
834
+ function _cdagovPos(n, label) {
835
+ const v = Math.floor(Number(n));
836
+ if (!Number.isFinite(v) || v <= 0)
837
+ throw new Error(`${label} must be positive integer`);
838
+ return v;
839
+ }
840
+ function _cdagovCheckP(from, to) {
841
+ const a = _cdagovPTrans.get(from);
842
+ if (!a || !a.has(to))
843
+ throw new Error(`invalid cdagov profile transition ${from} → ${to}`);
844
+ }
845
+ function _cdagovCheckJ(from, to) {
846
+ const a = _cdagovJTrans.get(from);
847
+ if (!a || !a.has(to))
848
+ throw new Error(`invalid cdagov edit transition ${from} → ${to}`);
849
+ }
850
+ function _cdagovCountActive(owner) {
851
+ let c = 0;
852
+ for (const p of _cdagovPsV2.values())
853
+ if (p.owner === owner && p.status === CDAGOV_PROFILE_MATURITY_V2.ACTIVE)
854
+ c++;
855
+ return c;
856
+ }
857
+ function _cdagovCountPending(profileId) {
858
+ let c = 0;
859
+ for (const j of _cdagovJsV2.values())
860
+ if (
861
+ j.profileId === profileId &&
862
+ (j.status === CDAGOV_EDIT_LIFECYCLE_V2.QUEUED ||
863
+ j.status === CDAGOV_EDIT_LIFECYCLE_V2.EDITING)
864
+ )
865
+ c++;
866
+ return c;
867
+ }
868
+ export function setMaxActiveCdagovProfilesPerOwnerV2(n) {
869
+ _cdagovMaxActive = _cdagovPos(n, "maxActiveCdagovProfilesPerOwner");
870
+ }
871
+ export function getMaxActiveCdagovProfilesPerOwnerV2() {
872
+ return _cdagovMaxActive;
873
+ }
874
+ export function setMaxPendingCdagovEditsPerProfileV2(n) {
875
+ _cdagovMaxPending = _cdagovPos(n, "maxPendingCdagovEditsPerProfile");
876
+ }
877
+ export function getMaxPendingCdagovEditsPerProfileV2() {
878
+ return _cdagovMaxPending;
879
+ }
880
+ export function setCdagovProfileIdleMsV2(n) {
881
+ _cdagovIdleMs = _cdagovPos(n, "cdagovProfileIdleMs");
882
+ }
883
+ export function getCdagovProfileIdleMsV2() {
884
+ return _cdagovIdleMs;
885
+ }
886
+ export function setCdagovEditStuckMsV2(n) {
887
+ _cdagovStuckMs = _cdagovPos(n, "cdagovEditStuckMs");
888
+ }
889
+ export function getCdagovEditStuckMsV2() {
890
+ return _cdagovStuckMs;
891
+ }
892
+ export function _resetStateCodeAgentGovV2() {
893
+ _cdagovPsV2.clear();
894
+ _cdagovJsV2.clear();
895
+ _cdagovMaxActive = 6;
896
+ _cdagovMaxPending = 15;
897
+ _cdagovIdleMs = 30 * 24 * 60 * 60 * 1000;
898
+ _cdagovStuckMs = 60 * 1000;
899
+ }
900
+ export function registerCdagovProfileV2({
901
+ id,
902
+ owner,
903
+ language,
904
+ metadata,
905
+ } = {}) {
906
+ if (!id || !owner) throw new Error("id and owner required");
907
+ if (_cdagovPsV2.has(id))
908
+ throw new Error(`cdagov profile ${id} already exists`);
909
+ const now = Date.now();
910
+ const p = {
911
+ id,
912
+ owner,
913
+ language: language || "javascript",
914
+ status: CDAGOV_PROFILE_MATURITY_V2.PENDING,
915
+ createdAt: now,
916
+ updatedAt: now,
917
+ lastTouchedAt: now,
918
+ activatedAt: null,
919
+ archivedAt: null,
920
+ metadata: { ...(metadata || {}) },
921
+ };
922
+ _cdagovPsV2.set(id, p);
923
+ return { ...p, metadata: { ...p.metadata } };
924
+ }
925
+ export function activateCdagovProfileV2(id) {
926
+ const p = _cdagovPsV2.get(id);
927
+ if (!p) throw new Error(`cdagov profile ${id} not found`);
928
+ const isInitial = p.status === CDAGOV_PROFILE_MATURITY_V2.PENDING;
929
+ _cdagovCheckP(p.status, CDAGOV_PROFILE_MATURITY_V2.ACTIVE);
930
+ if (isInitial && _cdagovCountActive(p.owner) >= _cdagovMaxActive)
931
+ throw new Error(`max active cdagov profiles for owner ${p.owner} reached`);
932
+ const now = Date.now();
933
+ p.status = CDAGOV_PROFILE_MATURITY_V2.ACTIVE;
934
+ p.updatedAt = now;
935
+ p.lastTouchedAt = now;
936
+ if (!p.activatedAt) p.activatedAt = now;
937
+ return { ...p, metadata: { ...p.metadata } };
938
+ }
939
+ export function staleCdagovProfileV2(id) {
940
+ const p = _cdagovPsV2.get(id);
941
+ if (!p) throw new Error(`cdagov profile ${id} not found`);
942
+ _cdagovCheckP(p.status, CDAGOV_PROFILE_MATURITY_V2.STALE);
943
+ p.status = CDAGOV_PROFILE_MATURITY_V2.STALE;
944
+ p.updatedAt = Date.now();
945
+ return { ...p, metadata: { ...p.metadata } };
946
+ }
947
+ export function archiveCdagovProfileV2(id) {
948
+ const p = _cdagovPsV2.get(id);
949
+ if (!p) throw new Error(`cdagov profile ${id} not found`);
950
+ _cdagovCheckP(p.status, CDAGOV_PROFILE_MATURITY_V2.ARCHIVED);
951
+ const now = Date.now();
952
+ p.status = CDAGOV_PROFILE_MATURITY_V2.ARCHIVED;
953
+ p.updatedAt = now;
954
+ if (!p.archivedAt) p.archivedAt = now;
955
+ return { ...p, metadata: { ...p.metadata } };
956
+ }
957
+ export function touchCdagovProfileV2(id) {
958
+ const p = _cdagovPsV2.get(id);
959
+ if (!p) throw new Error(`cdagov profile ${id} not found`);
960
+ if (_cdagovPTerminal.has(p.status))
961
+ throw new Error(`cannot touch terminal cdagov profile ${id}`);
962
+ const now = Date.now();
963
+ p.lastTouchedAt = now;
964
+ p.updatedAt = now;
965
+ return { ...p, metadata: { ...p.metadata } };
966
+ }
967
+ export function getCdagovProfileV2(id) {
968
+ const p = _cdagovPsV2.get(id);
969
+ if (!p) return null;
970
+ return { ...p, metadata: { ...p.metadata } };
971
+ }
972
+ export function listCdagovProfilesV2() {
973
+ return [..._cdagovPsV2.values()].map((p) => ({
974
+ ...p,
975
+ metadata: { ...p.metadata },
976
+ }));
977
+ }
978
+ export function createCdagovEditV2({ id, profileId, target, metadata } = {}) {
979
+ if (!id || !profileId) throw new Error("id and profileId required");
980
+ if (_cdagovJsV2.has(id)) throw new Error(`cdagov edit ${id} already exists`);
981
+ if (!_cdagovPsV2.has(profileId))
982
+ throw new Error(`cdagov profile ${profileId} not found`);
983
+ if (_cdagovCountPending(profileId) >= _cdagovMaxPending)
984
+ throw new Error(
985
+ `max pending cdagov edits for profile ${profileId} reached`,
986
+ );
987
+ const now = Date.now();
988
+ const j = {
989
+ id,
990
+ profileId,
991
+ target: target || "",
992
+ status: CDAGOV_EDIT_LIFECYCLE_V2.QUEUED,
993
+ createdAt: now,
994
+ updatedAt: now,
995
+ startedAt: null,
996
+ settledAt: null,
997
+ metadata: { ...(metadata || {}) },
998
+ };
999
+ _cdagovJsV2.set(id, j);
1000
+ return { ...j, metadata: { ...j.metadata } };
1001
+ }
1002
+ export function editingCdagovEditV2(id) {
1003
+ const j = _cdagovJsV2.get(id);
1004
+ if (!j) throw new Error(`cdagov edit ${id} not found`);
1005
+ _cdagovCheckJ(j.status, CDAGOV_EDIT_LIFECYCLE_V2.EDITING);
1006
+ const now = Date.now();
1007
+ j.status = CDAGOV_EDIT_LIFECYCLE_V2.EDITING;
1008
+ j.updatedAt = now;
1009
+ if (!j.startedAt) j.startedAt = now;
1010
+ return { ...j, metadata: { ...j.metadata } };
1011
+ }
1012
+ export function completeEditCdagovV2(id) {
1013
+ const j = _cdagovJsV2.get(id);
1014
+ if (!j) throw new Error(`cdagov edit ${id} not found`);
1015
+ _cdagovCheckJ(j.status, CDAGOV_EDIT_LIFECYCLE_V2.EDITED);
1016
+ const now = Date.now();
1017
+ j.status = CDAGOV_EDIT_LIFECYCLE_V2.EDITED;
1018
+ j.updatedAt = now;
1019
+ if (!j.settledAt) j.settledAt = now;
1020
+ return { ...j, metadata: { ...j.metadata } };
1021
+ }
1022
+ export function failCdagovEditV2(id, reason) {
1023
+ const j = _cdagovJsV2.get(id);
1024
+ if (!j) throw new Error(`cdagov edit ${id} not found`);
1025
+ _cdagovCheckJ(j.status, CDAGOV_EDIT_LIFECYCLE_V2.FAILED);
1026
+ const now = Date.now();
1027
+ j.status = CDAGOV_EDIT_LIFECYCLE_V2.FAILED;
1028
+ j.updatedAt = now;
1029
+ if (!j.settledAt) j.settledAt = now;
1030
+ if (reason) j.metadata.failReason = String(reason);
1031
+ return { ...j, metadata: { ...j.metadata } };
1032
+ }
1033
+ export function cancelCdagovEditV2(id, reason) {
1034
+ const j = _cdagovJsV2.get(id);
1035
+ if (!j) throw new Error(`cdagov edit ${id} not found`);
1036
+ _cdagovCheckJ(j.status, CDAGOV_EDIT_LIFECYCLE_V2.CANCELLED);
1037
+ const now = Date.now();
1038
+ j.status = CDAGOV_EDIT_LIFECYCLE_V2.CANCELLED;
1039
+ j.updatedAt = now;
1040
+ if (!j.settledAt) j.settledAt = now;
1041
+ if (reason) j.metadata.cancelReason = String(reason);
1042
+ return { ...j, metadata: { ...j.metadata } };
1043
+ }
1044
+ export function getCdagovEditV2(id) {
1045
+ const j = _cdagovJsV2.get(id);
1046
+ if (!j) return null;
1047
+ return { ...j, metadata: { ...j.metadata } };
1048
+ }
1049
+ export function listCdagovEditsV2() {
1050
+ return [..._cdagovJsV2.values()].map((j) => ({
1051
+ ...j,
1052
+ metadata: { ...j.metadata },
1053
+ }));
1054
+ }
1055
+ export function autoStaleIdleCdagovProfilesV2({ now } = {}) {
1056
+ const t = now ?? Date.now();
1057
+ const flipped = [];
1058
+ for (const p of _cdagovPsV2.values())
1059
+ if (
1060
+ p.status === CDAGOV_PROFILE_MATURITY_V2.ACTIVE &&
1061
+ t - p.lastTouchedAt >= _cdagovIdleMs
1062
+ ) {
1063
+ p.status = CDAGOV_PROFILE_MATURITY_V2.STALE;
1064
+ p.updatedAt = t;
1065
+ flipped.push(p.id);
1066
+ }
1067
+ return { flipped, count: flipped.length };
1068
+ }
1069
+ export function autoFailStuckCdagovEditsV2({ now } = {}) {
1070
+ const t = now ?? Date.now();
1071
+ const flipped = [];
1072
+ for (const j of _cdagovJsV2.values())
1073
+ if (
1074
+ j.status === CDAGOV_EDIT_LIFECYCLE_V2.EDITING &&
1075
+ j.startedAt != null &&
1076
+ t - j.startedAt >= _cdagovStuckMs
1077
+ ) {
1078
+ j.status = CDAGOV_EDIT_LIFECYCLE_V2.FAILED;
1079
+ j.updatedAt = t;
1080
+ if (!j.settledAt) j.settledAt = t;
1081
+ j.metadata.failReason = "auto-fail-stuck";
1082
+ flipped.push(j.id);
1083
+ }
1084
+ return { flipped, count: flipped.length };
1085
+ }
1086
+ export function getCodeAgentGovStatsV2() {
1087
+ const profilesByStatus = {};
1088
+ for (const v of Object.values(CDAGOV_PROFILE_MATURITY_V2))
1089
+ profilesByStatus[v] = 0;
1090
+ for (const p of _cdagovPsV2.values()) profilesByStatus[p.status]++;
1091
+ const editsByStatus = {};
1092
+ for (const v of Object.values(CDAGOV_EDIT_LIFECYCLE_V2)) editsByStatus[v] = 0;
1093
+ for (const j of _cdagovJsV2.values()) editsByStatus[j.status]++;
1094
+ return {
1095
+ totalCdagovProfilesV2: _cdagovPsV2.size,
1096
+ totalCdagovEditsV2: _cdagovJsV2.size,
1097
+ maxActiveCdagovProfilesPerOwner: _cdagovMaxActive,
1098
+ maxPendingCdagovEditsPerProfile: _cdagovMaxPending,
1099
+ cdagovProfileIdleMs: _cdagovIdleMs,
1100
+ cdagovEditStuckMs: _cdagovStuckMs,
1101
+ profilesByStatus,
1102
+ editsByStatus,
1103
+ };
1104
+ }
@@ -918,3 +918,337 @@ export function _resetStateCgV2() {
918
918
  _cgAgentIdleMs = CG_DEFAULT_AGENT_IDLE_MS;
919
919
  _cgProposalStuckMs = CG_DEFAULT_PROPOSAL_STUCK_MS;
920
920
  }
921
+
922
+ // =====================================================================
923
+ // collaboration-governance V2 governance overlay (iter19)
924
+ // =====================================================================
925
+ export const COGOV_PROFILE_MATURITY_V2 = Object.freeze({
926
+ PENDING: "pending",
927
+ ACTIVE: "active",
928
+ SUSPENDED: "suspended",
929
+ ARCHIVED: "archived",
930
+ });
931
+ export const COGOV_DECISION_LIFECYCLE_V2 = Object.freeze({
932
+ QUEUED: "queued",
933
+ DELIBERATING: "deliberating",
934
+ DECIDED: "decided",
935
+ FAILED: "failed",
936
+ CANCELLED: "cancelled",
937
+ });
938
+ const _cogovPTrans = new Map([
939
+ [
940
+ COGOV_PROFILE_MATURITY_V2.PENDING,
941
+ new Set([
942
+ COGOV_PROFILE_MATURITY_V2.ACTIVE,
943
+ COGOV_PROFILE_MATURITY_V2.ARCHIVED,
944
+ ]),
945
+ ],
946
+ [
947
+ COGOV_PROFILE_MATURITY_V2.ACTIVE,
948
+ new Set([
949
+ COGOV_PROFILE_MATURITY_V2.SUSPENDED,
950
+ COGOV_PROFILE_MATURITY_V2.ARCHIVED,
951
+ ]),
952
+ ],
953
+ [
954
+ COGOV_PROFILE_MATURITY_V2.SUSPENDED,
955
+ new Set([
956
+ COGOV_PROFILE_MATURITY_V2.ACTIVE,
957
+ COGOV_PROFILE_MATURITY_V2.ARCHIVED,
958
+ ]),
959
+ ],
960
+ [COGOV_PROFILE_MATURITY_V2.ARCHIVED, new Set()],
961
+ ]);
962
+ const _cogovPTerminal = new Set([COGOV_PROFILE_MATURITY_V2.ARCHIVED]);
963
+ const _cogovJTrans = new Map([
964
+ [
965
+ COGOV_DECISION_LIFECYCLE_V2.QUEUED,
966
+ new Set([
967
+ COGOV_DECISION_LIFECYCLE_V2.DELIBERATING,
968
+ COGOV_DECISION_LIFECYCLE_V2.CANCELLED,
969
+ ]),
970
+ ],
971
+ [
972
+ COGOV_DECISION_LIFECYCLE_V2.DELIBERATING,
973
+ new Set([
974
+ COGOV_DECISION_LIFECYCLE_V2.DECIDED,
975
+ COGOV_DECISION_LIFECYCLE_V2.FAILED,
976
+ COGOV_DECISION_LIFECYCLE_V2.CANCELLED,
977
+ ]),
978
+ ],
979
+ [COGOV_DECISION_LIFECYCLE_V2.DECIDED, new Set()],
980
+ [COGOV_DECISION_LIFECYCLE_V2.FAILED, new Set()],
981
+ [COGOV_DECISION_LIFECYCLE_V2.CANCELLED, new Set()],
982
+ ]);
983
+ const _cogovPsV2 = new Map();
984
+ const _cogovJsV2 = new Map();
985
+ let _cogovMaxActive = 8,
986
+ _cogovMaxPending = 20,
987
+ _cogovIdleMs = 30 * 24 * 60 * 60 * 1000,
988
+ _cogovStuckMs = 60 * 1000;
989
+ function _cogovPos(n, label) {
990
+ const v = Math.floor(Number(n));
991
+ if (!Number.isFinite(v) || v <= 0)
992
+ throw new Error(`${label} must be positive integer`);
993
+ return v;
994
+ }
995
+ function _cogovCheckP(from, to) {
996
+ const a = _cogovPTrans.get(from);
997
+ if (!a || !a.has(to))
998
+ throw new Error(`invalid cogov profile transition ${from} → ${to}`);
999
+ }
1000
+ function _cogovCheckJ(from, to) {
1001
+ const a = _cogovJTrans.get(from);
1002
+ if (!a || !a.has(to))
1003
+ throw new Error(`invalid cogov decision transition ${from} → ${to}`);
1004
+ }
1005
+ function _cogovCountActive(owner) {
1006
+ let c = 0;
1007
+ for (const p of _cogovPsV2.values())
1008
+ if (p.owner === owner && p.status === COGOV_PROFILE_MATURITY_V2.ACTIVE) c++;
1009
+ return c;
1010
+ }
1011
+ function _cogovCountPending(profileId) {
1012
+ let c = 0;
1013
+ for (const j of _cogovJsV2.values())
1014
+ if (
1015
+ j.profileId === profileId &&
1016
+ (j.status === COGOV_DECISION_LIFECYCLE_V2.QUEUED ||
1017
+ j.status === COGOV_DECISION_LIFECYCLE_V2.DELIBERATING)
1018
+ )
1019
+ c++;
1020
+ return c;
1021
+ }
1022
+ export function setMaxActiveCogovProfilesPerOwnerV2(n) {
1023
+ _cogovMaxActive = _cogovPos(n, "maxActiveCogovProfilesPerOwner");
1024
+ }
1025
+ export function getMaxActiveCogovProfilesPerOwnerV2() {
1026
+ return _cogovMaxActive;
1027
+ }
1028
+ export function setMaxPendingCogovDecisionsPerProfileV2(n) {
1029
+ _cogovMaxPending = _cogovPos(n, "maxPendingCogovDecisionsPerProfile");
1030
+ }
1031
+ export function getMaxPendingCogovDecisionsPerProfileV2() {
1032
+ return _cogovMaxPending;
1033
+ }
1034
+ export function setCogovProfileIdleMsV2(n) {
1035
+ _cogovIdleMs = _cogovPos(n, "cogovProfileIdleMs");
1036
+ }
1037
+ export function getCogovProfileIdleMsV2() {
1038
+ return _cogovIdleMs;
1039
+ }
1040
+ export function setCogovDecisionStuckMsV2(n) {
1041
+ _cogovStuckMs = _cogovPos(n, "cogovDecisionStuckMs");
1042
+ }
1043
+ export function getCogovDecisionStuckMsV2() {
1044
+ return _cogovStuckMs;
1045
+ }
1046
+ export function _resetStateCollaborationGovernanceGovV2() {
1047
+ _cogovPsV2.clear();
1048
+ _cogovJsV2.clear();
1049
+ _cogovMaxActive = 8;
1050
+ _cogovMaxPending = 20;
1051
+ _cogovIdleMs = 30 * 24 * 60 * 60 * 1000;
1052
+ _cogovStuckMs = 60 * 1000;
1053
+ }
1054
+ export function registerCogovProfileV2({ id, owner, scope, metadata } = {}) {
1055
+ if (!id || !owner) throw new Error("id and owner required");
1056
+ if (_cogovPsV2.has(id)) throw new Error(`cogov profile ${id} already exists`);
1057
+ const now = Date.now();
1058
+ const p = {
1059
+ id,
1060
+ owner,
1061
+ scope: scope || "team",
1062
+ status: COGOV_PROFILE_MATURITY_V2.PENDING,
1063
+ createdAt: now,
1064
+ updatedAt: now,
1065
+ lastTouchedAt: now,
1066
+ activatedAt: null,
1067
+ archivedAt: null,
1068
+ metadata: { ...(metadata || {}) },
1069
+ };
1070
+ _cogovPsV2.set(id, p);
1071
+ return { ...p, metadata: { ...p.metadata } };
1072
+ }
1073
+ export function activateCogovProfileV2(id) {
1074
+ const p = _cogovPsV2.get(id);
1075
+ if (!p) throw new Error(`cogov profile ${id} not found`);
1076
+ const isInitial = p.status === COGOV_PROFILE_MATURITY_V2.PENDING;
1077
+ _cogovCheckP(p.status, COGOV_PROFILE_MATURITY_V2.ACTIVE);
1078
+ if (isInitial && _cogovCountActive(p.owner) >= _cogovMaxActive)
1079
+ throw new Error(`max active cogov profiles for owner ${p.owner} reached`);
1080
+ const now = Date.now();
1081
+ p.status = COGOV_PROFILE_MATURITY_V2.ACTIVE;
1082
+ p.updatedAt = now;
1083
+ p.lastTouchedAt = now;
1084
+ if (!p.activatedAt) p.activatedAt = now;
1085
+ return { ...p, metadata: { ...p.metadata } };
1086
+ }
1087
+ export function suspendCogovProfileV2(id) {
1088
+ const p = _cogovPsV2.get(id);
1089
+ if (!p) throw new Error(`cogov profile ${id} not found`);
1090
+ _cogovCheckP(p.status, COGOV_PROFILE_MATURITY_V2.SUSPENDED);
1091
+ p.status = COGOV_PROFILE_MATURITY_V2.SUSPENDED;
1092
+ p.updatedAt = Date.now();
1093
+ return { ...p, metadata: { ...p.metadata } };
1094
+ }
1095
+ export function archiveCogovProfileV2(id) {
1096
+ const p = _cogovPsV2.get(id);
1097
+ if (!p) throw new Error(`cogov profile ${id} not found`);
1098
+ _cogovCheckP(p.status, COGOV_PROFILE_MATURITY_V2.ARCHIVED);
1099
+ const now = Date.now();
1100
+ p.status = COGOV_PROFILE_MATURITY_V2.ARCHIVED;
1101
+ p.updatedAt = now;
1102
+ if (!p.archivedAt) p.archivedAt = now;
1103
+ return { ...p, metadata: { ...p.metadata } };
1104
+ }
1105
+ export function touchCogovProfileV2(id) {
1106
+ const p = _cogovPsV2.get(id);
1107
+ if (!p) throw new Error(`cogov profile ${id} not found`);
1108
+ if (_cogovPTerminal.has(p.status))
1109
+ throw new Error(`cannot touch terminal cogov profile ${id}`);
1110
+ const now = Date.now();
1111
+ p.lastTouchedAt = now;
1112
+ p.updatedAt = now;
1113
+ return { ...p, metadata: { ...p.metadata } };
1114
+ }
1115
+ export function getCogovProfileV2(id) {
1116
+ const p = _cogovPsV2.get(id);
1117
+ if (!p) return null;
1118
+ return { ...p, metadata: { ...p.metadata } };
1119
+ }
1120
+ export function listCogovProfilesV2() {
1121
+ return [..._cogovPsV2.values()].map((p) => ({
1122
+ ...p,
1123
+ metadata: { ...p.metadata },
1124
+ }));
1125
+ }
1126
+ export function createCogovDecisionV2({ id, profileId, topic, metadata } = {}) {
1127
+ if (!id || !profileId) throw new Error("id and profileId required");
1128
+ if (_cogovJsV2.has(id))
1129
+ throw new Error(`cogov decision ${id} already exists`);
1130
+ if (!_cogovPsV2.has(profileId))
1131
+ throw new Error(`cogov profile ${profileId} not found`);
1132
+ if (_cogovCountPending(profileId) >= _cogovMaxPending)
1133
+ throw new Error(
1134
+ `max pending cogov decisions for profile ${profileId} reached`,
1135
+ );
1136
+ const now = Date.now();
1137
+ const j = {
1138
+ id,
1139
+ profileId,
1140
+ topic: topic || "",
1141
+ status: COGOV_DECISION_LIFECYCLE_V2.QUEUED,
1142
+ createdAt: now,
1143
+ updatedAt: now,
1144
+ startedAt: null,
1145
+ settledAt: null,
1146
+ metadata: { ...(metadata || {}) },
1147
+ };
1148
+ _cogovJsV2.set(id, j);
1149
+ return { ...j, metadata: { ...j.metadata } };
1150
+ }
1151
+ export function deliberatingCogovDecisionV2(id) {
1152
+ const j = _cogovJsV2.get(id);
1153
+ if (!j) throw new Error(`cogov decision ${id} not found`);
1154
+ _cogovCheckJ(j.status, COGOV_DECISION_LIFECYCLE_V2.DELIBERATING);
1155
+ const now = Date.now();
1156
+ j.status = COGOV_DECISION_LIFECYCLE_V2.DELIBERATING;
1157
+ j.updatedAt = now;
1158
+ if (!j.startedAt) j.startedAt = now;
1159
+ return { ...j, metadata: { ...j.metadata } };
1160
+ }
1161
+ export function completeDecisionCogovV2(id) {
1162
+ const j = _cogovJsV2.get(id);
1163
+ if (!j) throw new Error(`cogov decision ${id} not found`);
1164
+ _cogovCheckJ(j.status, COGOV_DECISION_LIFECYCLE_V2.DECIDED);
1165
+ const now = Date.now();
1166
+ j.status = COGOV_DECISION_LIFECYCLE_V2.DECIDED;
1167
+ j.updatedAt = now;
1168
+ if (!j.settledAt) j.settledAt = now;
1169
+ return { ...j, metadata: { ...j.metadata } };
1170
+ }
1171
+ export function failCogovDecisionV2(id, reason) {
1172
+ const j = _cogovJsV2.get(id);
1173
+ if (!j) throw new Error(`cogov decision ${id} not found`);
1174
+ _cogovCheckJ(j.status, COGOV_DECISION_LIFECYCLE_V2.FAILED);
1175
+ const now = Date.now();
1176
+ j.status = COGOV_DECISION_LIFECYCLE_V2.FAILED;
1177
+ j.updatedAt = now;
1178
+ if (!j.settledAt) j.settledAt = now;
1179
+ if (reason) j.metadata.failReason = String(reason);
1180
+ return { ...j, metadata: { ...j.metadata } };
1181
+ }
1182
+ export function cancelCogovDecisionV2(id, reason) {
1183
+ const j = _cogovJsV2.get(id);
1184
+ if (!j) throw new Error(`cogov decision ${id} not found`);
1185
+ _cogovCheckJ(j.status, COGOV_DECISION_LIFECYCLE_V2.CANCELLED);
1186
+ const now = Date.now();
1187
+ j.status = COGOV_DECISION_LIFECYCLE_V2.CANCELLED;
1188
+ j.updatedAt = now;
1189
+ if (!j.settledAt) j.settledAt = now;
1190
+ if (reason) j.metadata.cancelReason = String(reason);
1191
+ return { ...j, metadata: { ...j.metadata } };
1192
+ }
1193
+ export function getCogovDecisionV2(id) {
1194
+ const j = _cogovJsV2.get(id);
1195
+ if (!j) return null;
1196
+ return { ...j, metadata: { ...j.metadata } };
1197
+ }
1198
+ export function listCogovDecisionsV2() {
1199
+ return [..._cogovJsV2.values()].map((j) => ({
1200
+ ...j,
1201
+ metadata: { ...j.metadata },
1202
+ }));
1203
+ }
1204
+ export function autoSuspendIdleCogovProfilesV2({ now } = {}) {
1205
+ const t = now ?? Date.now();
1206
+ const flipped = [];
1207
+ for (const p of _cogovPsV2.values())
1208
+ if (
1209
+ p.status === COGOV_PROFILE_MATURITY_V2.ACTIVE &&
1210
+ t - p.lastTouchedAt >= _cogovIdleMs
1211
+ ) {
1212
+ p.status = COGOV_PROFILE_MATURITY_V2.SUSPENDED;
1213
+ p.updatedAt = t;
1214
+ flipped.push(p.id);
1215
+ }
1216
+ return { flipped, count: flipped.length };
1217
+ }
1218
+ export function autoFailStuckCogovDecisionsV2({ now } = {}) {
1219
+ const t = now ?? Date.now();
1220
+ const flipped = [];
1221
+ for (const j of _cogovJsV2.values())
1222
+ if (
1223
+ j.status === COGOV_DECISION_LIFECYCLE_V2.DELIBERATING &&
1224
+ j.startedAt != null &&
1225
+ t - j.startedAt >= _cogovStuckMs
1226
+ ) {
1227
+ j.status = COGOV_DECISION_LIFECYCLE_V2.FAILED;
1228
+ j.updatedAt = t;
1229
+ if (!j.settledAt) j.settledAt = t;
1230
+ j.metadata.failReason = "auto-fail-stuck";
1231
+ flipped.push(j.id);
1232
+ }
1233
+ return { flipped, count: flipped.length };
1234
+ }
1235
+ export function getCollaborationGovernanceGovStatsV2() {
1236
+ const profilesByStatus = {};
1237
+ for (const v of Object.values(COGOV_PROFILE_MATURITY_V2))
1238
+ profilesByStatus[v] = 0;
1239
+ for (const p of _cogovPsV2.values()) profilesByStatus[p.status]++;
1240
+ const decisionsByStatus = {};
1241
+ for (const v of Object.values(COGOV_DECISION_LIFECYCLE_V2))
1242
+ decisionsByStatus[v] = 0;
1243
+ for (const j of _cogovJsV2.values()) decisionsByStatus[j.status]++;
1244
+ return {
1245
+ totalCogovProfilesV2: _cogovPsV2.size,
1246
+ totalCogovDecisionsV2: _cogovJsV2.size,
1247
+ maxActiveCogovProfilesPerOwner: _cogovMaxActive,
1248
+ maxPendingCogovDecisionsPerProfile: _cogovMaxPending,
1249
+ cogovProfileIdleMs: _cogovIdleMs,
1250
+ cogovDecisionStuckMs: _cogovStuckMs,
1251
+ profilesByStatus,
1252
+ decisionsByStatus,
1253
+ };
1254
+ }