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
@@ -1000,3 +1000,338 @@ export function getPrivacyStatsV2() {
1000
1000
  avgComputationTimeMs: timeCount > 0 ? Math.round(timeSum / timeCount) : 0,
1001
1001
  };
1002
1002
  }
1003
+
1004
+ // =====================================================================
1005
+ // privacy-computing V2 governance overlay (iter17)
1006
+ // =====================================================================
1007
+ export const PCGOV_PROFILE_MATURITY_V2 = Object.freeze({
1008
+ PENDING: "pending",
1009
+ ACTIVE: "active",
1010
+ SUSPENDED: "suspended",
1011
+ ARCHIVED: "archived",
1012
+ });
1013
+ export const PCGOV_JOB_LIFECYCLE_V2 = Object.freeze({
1014
+ QUEUED: "queued",
1015
+ COMPUTING: "computing",
1016
+ COMPUTED: "computed",
1017
+ FAILED: "failed",
1018
+ CANCELLED: "cancelled",
1019
+ });
1020
+ const _pcgovPTrans = new Map([
1021
+ [
1022
+ PCGOV_PROFILE_MATURITY_V2.PENDING,
1023
+ new Set([
1024
+ PCGOV_PROFILE_MATURITY_V2.ACTIVE,
1025
+ PCGOV_PROFILE_MATURITY_V2.ARCHIVED,
1026
+ ]),
1027
+ ],
1028
+ [
1029
+ PCGOV_PROFILE_MATURITY_V2.ACTIVE,
1030
+ new Set([
1031
+ PCGOV_PROFILE_MATURITY_V2.SUSPENDED,
1032
+ PCGOV_PROFILE_MATURITY_V2.ARCHIVED,
1033
+ ]),
1034
+ ],
1035
+ [
1036
+ PCGOV_PROFILE_MATURITY_V2.SUSPENDED,
1037
+ new Set([
1038
+ PCGOV_PROFILE_MATURITY_V2.ACTIVE,
1039
+ PCGOV_PROFILE_MATURITY_V2.ARCHIVED,
1040
+ ]),
1041
+ ],
1042
+ [PCGOV_PROFILE_MATURITY_V2.ARCHIVED, new Set()],
1043
+ ]);
1044
+ const _pcgovPTerminal = new Set([PCGOV_PROFILE_MATURITY_V2.ARCHIVED]);
1045
+ const _pcgovJTrans = new Map([
1046
+ [
1047
+ PCGOV_JOB_LIFECYCLE_V2.QUEUED,
1048
+ new Set([
1049
+ PCGOV_JOB_LIFECYCLE_V2.COMPUTING,
1050
+ PCGOV_JOB_LIFECYCLE_V2.CANCELLED,
1051
+ ]),
1052
+ ],
1053
+ [
1054
+ PCGOV_JOB_LIFECYCLE_V2.COMPUTING,
1055
+ new Set([
1056
+ PCGOV_JOB_LIFECYCLE_V2.COMPUTED,
1057
+ PCGOV_JOB_LIFECYCLE_V2.FAILED,
1058
+ PCGOV_JOB_LIFECYCLE_V2.CANCELLED,
1059
+ ]),
1060
+ ],
1061
+ [PCGOV_JOB_LIFECYCLE_V2.COMPUTED, new Set()],
1062
+ [PCGOV_JOB_LIFECYCLE_V2.FAILED, new Set()],
1063
+ [PCGOV_JOB_LIFECYCLE_V2.CANCELLED, new Set()],
1064
+ ]);
1065
+ const _pcgovPsV2 = new Map();
1066
+ const _pcgovJsV2 = new Map();
1067
+ let _pcgovMaxActive = 6,
1068
+ _pcgovMaxPending = 15,
1069
+ _pcgovIdleMs = 30 * 24 * 60 * 60 * 1000,
1070
+ _pcgovStuckMs = 60 * 1000;
1071
+ function _pcgovPos(n, label) {
1072
+ const v = Math.floor(Number(n));
1073
+ if (!Number.isFinite(v) || v <= 0)
1074
+ throw new Error(`${label} must be positive integer`);
1075
+ return v;
1076
+ }
1077
+ function _pcgovCheckP(from, to) {
1078
+ const a = _pcgovPTrans.get(from);
1079
+ if (!a || !a.has(to))
1080
+ throw new Error(`invalid pcgov profile transition ${from} → ${to}`);
1081
+ }
1082
+ function _pcgovCheckJ(from, to) {
1083
+ const a = _pcgovJTrans.get(from);
1084
+ if (!a || !a.has(to))
1085
+ throw new Error(`invalid pcgov job transition ${from} → ${to}`);
1086
+ }
1087
+ function _pcgovCountActive(owner) {
1088
+ let c = 0;
1089
+ for (const p of _pcgovPsV2.values())
1090
+ if (p.owner === owner && p.status === PCGOV_PROFILE_MATURITY_V2.ACTIVE) c++;
1091
+ return c;
1092
+ }
1093
+ function _pcgovCountPending(profileId) {
1094
+ let c = 0;
1095
+ for (const j of _pcgovJsV2.values())
1096
+ if (
1097
+ j.profileId === profileId &&
1098
+ (j.status === PCGOV_JOB_LIFECYCLE_V2.QUEUED ||
1099
+ j.status === PCGOV_JOB_LIFECYCLE_V2.COMPUTING)
1100
+ )
1101
+ c++;
1102
+ return c;
1103
+ }
1104
+ export function setMaxActivePcgovProfilesPerOwnerV2(n) {
1105
+ _pcgovMaxActive = _pcgovPos(n, "maxActivePcgovProfilesPerOwner");
1106
+ }
1107
+ export function getMaxActivePcgovProfilesPerOwnerV2() {
1108
+ return _pcgovMaxActive;
1109
+ }
1110
+ export function setMaxPendingPcgovJobsPerProfileV2(n) {
1111
+ _pcgovMaxPending = _pcgovPos(n, "maxPendingPcgovJobsPerProfile");
1112
+ }
1113
+ export function getMaxPendingPcgovJobsPerProfileV2() {
1114
+ return _pcgovMaxPending;
1115
+ }
1116
+ export function setPcgovProfileIdleMsV2(n) {
1117
+ _pcgovIdleMs = _pcgovPos(n, "pcgovProfileIdleMs");
1118
+ }
1119
+ export function getPcgovProfileIdleMsV2() {
1120
+ return _pcgovIdleMs;
1121
+ }
1122
+ export function setPcgovJobStuckMsV2(n) {
1123
+ _pcgovStuckMs = _pcgovPos(n, "pcgovJobStuckMs");
1124
+ }
1125
+ export function getPcgovJobStuckMsV2() {
1126
+ return _pcgovStuckMs;
1127
+ }
1128
+ export function _resetStatePrivacyComputingV2() {
1129
+ _pcgovPsV2.clear();
1130
+ _pcgovJsV2.clear();
1131
+ _pcgovMaxActive = 6;
1132
+ _pcgovMaxPending = 15;
1133
+ _pcgovIdleMs = 30 * 24 * 60 * 60 * 1000;
1134
+ _pcgovStuckMs = 60 * 1000;
1135
+ }
1136
+ export function registerPcgovProfileV2({
1137
+ id,
1138
+ owner,
1139
+ technique,
1140
+ metadata,
1141
+ } = {}) {
1142
+ if (!id || !owner) throw new Error("id and owner required");
1143
+ if (_pcgovPsV2.has(id)) throw new Error(`pcgov profile ${id} already exists`);
1144
+ const now = Date.now();
1145
+ const p = {
1146
+ id,
1147
+ owner,
1148
+ technique: technique || "mpc",
1149
+ status: PCGOV_PROFILE_MATURITY_V2.PENDING,
1150
+ createdAt: now,
1151
+ updatedAt: now,
1152
+ lastTouchedAt: now,
1153
+ activatedAt: null,
1154
+ archivedAt: null,
1155
+ metadata: { ...(metadata || {}) },
1156
+ };
1157
+ _pcgovPsV2.set(id, p);
1158
+ return { ...p, metadata: { ...p.metadata } };
1159
+ }
1160
+ export function activatePcgovProfileV2(id) {
1161
+ const p = _pcgovPsV2.get(id);
1162
+ if (!p) throw new Error(`pcgov profile ${id} not found`);
1163
+ const isInitial = p.status === PCGOV_PROFILE_MATURITY_V2.PENDING;
1164
+ _pcgovCheckP(p.status, PCGOV_PROFILE_MATURITY_V2.ACTIVE);
1165
+ if (isInitial && _pcgovCountActive(p.owner) >= _pcgovMaxActive)
1166
+ throw new Error(`max active pcgov profiles for owner ${p.owner} reached`);
1167
+ const now = Date.now();
1168
+ p.status = PCGOV_PROFILE_MATURITY_V2.ACTIVE;
1169
+ p.updatedAt = now;
1170
+ p.lastTouchedAt = now;
1171
+ if (!p.activatedAt) p.activatedAt = now;
1172
+ return { ...p, metadata: { ...p.metadata } };
1173
+ }
1174
+ export function suspendPcgovProfileV2(id) {
1175
+ const p = _pcgovPsV2.get(id);
1176
+ if (!p) throw new Error(`pcgov profile ${id} not found`);
1177
+ _pcgovCheckP(p.status, PCGOV_PROFILE_MATURITY_V2.SUSPENDED);
1178
+ p.status = PCGOV_PROFILE_MATURITY_V2.SUSPENDED;
1179
+ p.updatedAt = Date.now();
1180
+ return { ...p, metadata: { ...p.metadata } };
1181
+ }
1182
+ export function archivePcgovProfileV2(id) {
1183
+ const p = _pcgovPsV2.get(id);
1184
+ if (!p) throw new Error(`pcgov profile ${id} not found`);
1185
+ _pcgovCheckP(p.status, PCGOV_PROFILE_MATURITY_V2.ARCHIVED);
1186
+ const now = Date.now();
1187
+ p.status = PCGOV_PROFILE_MATURITY_V2.ARCHIVED;
1188
+ p.updatedAt = now;
1189
+ if (!p.archivedAt) p.archivedAt = now;
1190
+ return { ...p, metadata: { ...p.metadata } };
1191
+ }
1192
+ export function touchPcgovProfileV2(id) {
1193
+ const p = _pcgovPsV2.get(id);
1194
+ if (!p) throw new Error(`pcgov profile ${id} not found`);
1195
+ if (_pcgovPTerminal.has(p.status))
1196
+ throw new Error(`cannot touch terminal pcgov profile ${id}`);
1197
+ const now = Date.now();
1198
+ p.lastTouchedAt = now;
1199
+ p.updatedAt = now;
1200
+ return { ...p, metadata: { ...p.metadata } };
1201
+ }
1202
+ export function getPcgovProfileV2(id) {
1203
+ const p = _pcgovPsV2.get(id);
1204
+ if (!p) return null;
1205
+ return { ...p, metadata: { ...p.metadata } };
1206
+ }
1207
+ export function listPcgovProfilesV2() {
1208
+ return [..._pcgovPsV2.values()].map((p) => ({
1209
+ ...p,
1210
+ metadata: { ...p.metadata },
1211
+ }));
1212
+ }
1213
+ export function createPcgovJobV2({ id, profileId, dataset, metadata } = {}) {
1214
+ if (!id || !profileId) throw new Error("id and profileId required");
1215
+ if (_pcgovJsV2.has(id)) throw new Error(`pcgov job ${id} already exists`);
1216
+ if (!_pcgovPsV2.has(profileId))
1217
+ throw new Error(`pcgov profile ${profileId} not found`);
1218
+ if (_pcgovCountPending(profileId) >= _pcgovMaxPending)
1219
+ throw new Error(`max pending pcgov jobs for profile ${profileId} reached`);
1220
+ const now = Date.now();
1221
+ const j = {
1222
+ id,
1223
+ profileId,
1224
+ dataset: dataset || "",
1225
+ status: PCGOV_JOB_LIFECYCLE_V2.QUEUED,
1226
+ createdAt: now,
1227
+ updatedAt: now,
1228
+ startedAt: null,
1229
+ settledAt: null,
1230
+ metadata: { ...(metadata || {}) },
1231
+ };
1232
+ _pcgovJsV2.set(id, j);
1233
+ return { ...j, metadata: { ...j.metadata } };
1234
+ }
1235
+ export function computingPcgovJobV2(id) {
1236
+ const j = _pcgovJsV2.get(id);
1237
+ if (!j) throw new Error(`pcgov job ${id} not found`);
1238
+ _pcgovCheckJ(j.status, PCGOV_JOB_LIFECYCLE_V2.COMPUTING);
1239
+ const now = Date.now();
1240
+ j.status = PCGOV_JOB_LIFECYCLE_V2.COMPUTING;
1241
+ j.updatedAt = now;
1242
+ if (!j.startedAt) j.startedAt = now;
1243
+ return { ...j, metadata: { ...j.metadata } };
1244
+ }
1245
+ export function completeJobPcgovV2(id) {
1246
+ const j = _pcgovJsV2.get(id);
1247
+ if (!j) throw new Error(`pcgov job ${id} not found`);
1248
+ _pcgovCheckJ(j.status, PCGOV_JOB_LIFECYCLE_V2.COMPUTED);
1249
+ const now = Date.now();
1250
+ j.status = PCGOV_JOB_LIFECYCLE_V2.COMPUTED;
1251
+ j.updatedAt = now;
1252
+ if (!j.settledAt) j.settledAt = now;
1253
+ return { ...j, metadata: { ...j.metadata } };
1254
+ }
1255
+ export function failPcgovJobV2(id, reason) {
1256
+ const j = _pcgovJsV2.get(id);
1257
+ if (!j) throw new Error(`pcgov job ${id} not found`);
1258
+ _pcgovCheckJ(j.status, PCGOV_JOB_LIFECYCLE_V2.FAILED);
1259
+ const now = Date.now();
1260
+ j.status = PCGOV_JOB_LIFECYCLE_V2.FAILED;
1261
+ j.updatedAt = now;
1262
+ if (!j.settledAt) j.settledAt = now;
1263
+ if (reason) j.metadata.failReason = String(reason);
1264
+ return { ...j, metadata: { ...j.metadata } };
1265
+ }
1266
+ export function cancelPcgovJobV2(id, reason) {
1267
+ const j = _pcgovJsV2.get(id);
1268
+ if (!j) throw new Error(`pcgov job ${id} not found`);
1269
+ _pcgovCheckJ(j.status, PCGOV_JOB_LIFECYCLE_V2.CANCELLED);
1270
+ const now = Date.now();
1271
+ j.status = PCGOV_JOB_LIFECYCLE_V2.CANCELLED;
1272
+ j.updatedAt = now;
1273
+ if (!j.settledAt) j.settledAt = now;
1274
+ if (reason) j.metadata.cancelReason = String(reason);
1275
+ return { ...j, metadata: { ...j.metadata } };
1276
+ }
1277
+ export function getPcgovJobV2(id) {
1278
+ const j = _pcgovJsV2.get(id);
1279
+ if (!j) return null;
1280
+ return { ...j, metadata: { ...j.metadata } };
1281
+ }
1282
+ export function listPcgovJobsV2() {
1283
+ return [..._pcgovJsV2.values()].map((j) => ({
1284
+ ...j,
1285
+ metadata: { ...j.metadata },
1286
+ }));
1287
+ }
1288
+ export function autoSuspendIdlePcgovProfilesV2({ now } = {}) {
1289
+ const t = now ?? Date.now();
1290
+ const flipped = [];
1291
+ for (const p of _pcgovPsV2.values())
1292
+ if (
1293
+ p.status === PCGOV_PROFILE_MATURITY_V2.ACTIVE &&
1294
+ t - p.lastTouchedAt >= _pcgovIdleMs
1295
+ ) {
1296
+ p.status = PCGOV_PROFILE_MATURITY_V2.SUSPENDED;
1297
+ p.updatedAt = t;
1298
+ flipped.push(p.id);
1299
+ }
1300
+ return { flipped, count: flipped.length };
1301
+ }
1302
+ export function autoFailStuckPcgovJobsV2({ now } = {}) {
1303
+ const t = now ?? Date.now();
1304
+ const flipped = [];
1305
+ for (const j of _pcgovJsV2.values())
1306
+ if (
1307
+ j.status === PCGOV_JOB_LIFECYCLE_V2.COMPUTING &&
1308
+ j.startedAt != null &&
1309
+ t - j.startedAt >= _pcgovStuckMs
1310
+ ) {
1311
+ j.status = PCGOV_JOB_LIFECYCLE_V2.FAILED;
1312
+ j.updatedAt = t;
1313
+ if (!j.settledAt) j.settledAt = t;
1314
+ j.metadata.failReason = "auto-fail-stuck";
1315
+ flipped.push(j.id);
1316
+ }
1317
+ return { flipped, count: flipped.length };
1318
+ }
1319
+ export function getPrivacyComputingGovStatsV2() {
1320
+ const profilesByStatus = {};
1321
+ for (const v of Object.values(PCGOV_PROFILE_MATURITY_V2))
1322
+ profilesByStatus[v] = 0;
1323
+ for (const p of _pcgovPsV2.values()) profilesByStatus[p.status]++;
1324
+ const jobsByStatus = {};
1325
+ for (const v of Object.values(PCGOV_JOB_LIFECYCLE_V2)) jobsByStatus[v] = 0;
1326
+ for (const j of _pcgovJsV2.values()) jobsByStatus[j.status]++;
1327
+ return {
1328
+ totalPcgovProfilesV2: _pcgovPsV2.size,
1329
+ totalPcgovJobsV2: _pcgovJsV2.size,
1330
+ maxActivePcgovProfilesPerOwner: _pcgovMaxActive,
1331
+ maxPendingPcgovJobsPerProfile: _pcgovMaxPending,
1332
+ pcgovProfileIdleMs: _pcgovIdleMs,
1333
+ pcgovJobStuckMs: _pcgovStuckMs,
1334
+ profilesByStatus,
1335
+ jobsByStatus,
1336
+ };
1337
+ }
@@ -950,3 +950,341 @@ export function _resetStateV2() {
950
950
  _pfBridgeIdleMs = PF_DEFAULT_BRIDGE_IDLE_MS;
951
951
  _pfTranslationStuckMs = PF_DEFAULT_TRANSLATION_STUCK_MS;
952
952
  }
953
+
954
+ // =====================================================================
955
+ // protocol-fusion V2 governance overlay (iter23)
956
+ // =====================================================================
957
+ export const PFGOV_PROFILE_MATURITY_V2 = Object.freeze({
958
+ PENDING: "pending",
959
+ ACTIVE: "active",
960
+ DEGRADED: "degraded",
961
+ ARCHIVED: "archived",
962
+ });
963
+ export const PFGOV_ROUTE_LIFECYCLE_V2 = Object.freeze({
964
+ QUEUED: "queued",
965
+ ROUTING: "routing",
966
+ ROUTED: "routed",
967
+ FAILED: "failed",
968
+ CANCELLED: "cancelled",
969
+ });
970
+ const _pfgovPTrans = new Map([
971
+ [
972
+ PFGOV_PROFILE_MATURITY_V2.PENDING,
973
+ new Set([
974
+ PFGOV_PROFILE_MATURITY_V2.ACTIVE,
975
+ PFGOV_PROFILE_MATURITY_V2.ARCHIVED,
976
+ ]),
977
+ ],
978
+ [
979
+ PFGOV_PROFILE_MATURITY_V2.ACTIVE,
980
+ new Set([
981
+ PFGOV_PROFILE_MATURITY_V2.DEGRADED,
982
+ PFGOV_PROFILE_MATURITY_V2.ARCHIVED,
983
+ ]),
984
+ ],
985
+ [
986
+ PFGOV_PROFILE_MATURITY_V2.DEGRADED,
987
+ new Set([
988
+ PFGOV_PROFILE_MATURITY_V2.ACTIVE,
989
+ PFGOV_PROFILE_MATURITY_V2.ARCHIVED,
990
+ ]),
991
+ ],
992
+ [PFGOV_PROFILE_MATURITY_V2.ARCHIVED, new Set()],
993
+ ]);
994
+ const _pfgovPTerminal = new Set([PFGOV_PROFILE_MATURITY_V2.ARCHIVED]);
995
+ const _pfgovJTrans = new Map([
996
+ [
997
+ PFGOV_ROUTE_LIFECYCLE_V2.QUEUED,
998
+ new Set([
999
+ PFGOV_ROUTE_LIFECYCLE_V2.ROUTING,
1000
+ PFGOV_ROUTE_LIFECYCLE_V2.CANCELLED,
1001
+ ]),
1002
+ ],
1003
+ [
1004
+ PFGOV_ROUTE_LIFECYCLE_V2.ROUTING,
1005
+ new Set([
1006
+ PFGOV_ROUTE_LIFECYCLE_V2.ROUTED,
1007
+ PFGOV_ROUTE_LIFECYCLE_V2.FAILED,
1008
+ PFGOV_ROUTE_LIFECYCLE_V2.CANCELLED,
1009
+ ]),
1010
+ ],
1011
+ [PFGOV_ROUTE_LIFECYCLE_V2.ROUTED, new Set()],
1012
+ [PFGOV_ROUTE_LIFECYCLE_V2.FAILED, new Set()],
1013
+ [PFGOV_ROUTE_LIFECYCLE_V2.CANCELLED, new Set()],
1014
+ ]);
1015
+ const _pfgovPsV2 = new Map();
1016
+ const _pfgovJsV2 = new Map();
1017
+ let _pfgovMaxActive = 6,
1018
+ _pfgovMaxPending = 15,
1019
+ _pfgovIdleMs = 30 * 24 * 60 * 60 * 1000,
1020
+ _pfgovStuckMs = 60 * 1000;
1021
+ function _pfgovPos(n, label) {
1022
+ const v = Math.floor(Number(n));
1023
+ if (!Number.isFinite(v) || v <= 0)
1024
+ throw new Error(`${label} must be positive integer`);
1025
+ return v;
1026
+ }
1027
+ function _pfgovCheckP(from, to) {
1028
+ const a = _pfgovPTrans.get(from);
1029
+ if (!a || !a.has(to))
1030
+ throw new Error(`invalid pfgov profile transition ${from} → ${to}`);
1031
+ }
1032
+ function _pfgovCheckJ(from, to) {
1033
+ const a = _pfgovJTrans.get(from);
1034
+ if (!a || !a.has(to))
1035
+ throw new Error(`invalid pfgov route transition ${from} → ${to}`);
1036
+ }
1037
+ function _pfgovCountActive(owner) {
1038
+ let c = 0;
1039
+ for (const p of _pfgovPsV2.values())
1040
+ if (p.owner === owner && p.status === PFGOV_PROFILE_MATURITY_V2.ACTIVE) c++;
1041
+ return c;
1042
+ }
1043
+ function _pfgovCountPending(profileId) {
1044
+ let c = 0;
1045
+ for (const j of _pfgovJsV2.values())
1046
+ if (
1047
+ j.profileId === profileId &&
1048
+ (j.status === PFGOV_ROUTE_LIFECYCLE_V2.QUEUED ||
1049
+ j.status === PFGOV_ROUTE_LIFECYCLE_V2.ROUTING)
1050
+ )
1051
+ c++;
1052
+ return c;
1053
+ }
1054
+ export function setMaxActivePfgovProfilesPerOwnerV2(n) {
1055
+ _pfgovMaxActive = _pfgovPos(n, "maxActivePfgovProfilesPerOwner");
1056
+ }
1057
+ export function getMaxActivePfgovProfilesPerOwnerV2() {
1058
+ return _pfgovMaxActive;
1059
+ }
1060
+ export function setMaxPendingPfgovRoutesPerProfileV2(n) {
1061
+ _pfgovMaxPending = _pfgovPos(n, "maxPendingPfgovRoutesPerProfile");
1062
+ }
1063
+ export function getMaxPendingPfgovRoutesPerProfileV2() {
1064
+ return _pfgovMaxPending;
1065
+ }
1066
+ export function setPfgovProfileIdleMsV2(n) {
1067
+ _pfgovIdleMs = _pfgovPos(n, "pfgovProfileIdleMs");
1068
+ }
1069
+ export function getPfgovProfileIdleMsV2() {
1070
+ return _pfgovIdleMs;
1071
+ }
1072
+ export function setPfgovRouteStuckMsV2(n) {
1073
+ _pfgovStuckMs = _pfgovPos(n, "pfgovRouteStuckMs");
1074
+ }
1075
+ export function getPfgovRouteStuckMsV2() {
1076
+ return _pfgovStuckMs;
1077
+ }
1078
+ export function _resetStateProtocolFusionGovV2() {
1079
+ _pfgovPsV2.clear();
1080
+ _pfgovJsV2.clear();
1081
+ _pfgovMaxActive = 6;
1082
+ _pfgovMaxPending = 15;
1083
+ _pfgovIdleMs = 30 * 24 * 60 * 60 * 1000;
1084
+ _pfgovStuckMs = 60 * 1000;
1085
+ }
1086
+ export function registerPfgovProfileV2({ id, owner, protocol, metadata } = {}) {
1087
+ if (!id || !owner) throw new Error("id and owner required");
1088
+ if (_pfgovPsV2.has(id)) throw new Error(`pfgov profile ${id} already exists`);
1089
+ const now = Date.now();
1090
+ const p = {
1091
+ id,
1092
+ owner,
1093
+ protocol: protocol || "hybrid",
1094
+ status: PFGOV_PROFILE_MATURITY_V2.PENDING,
1095
+ createdAt: now,
1096
+ updatedAt: now,
1097
+ lastTouchedAt: now,
1098
+ activatedAt: null,
1099
+ archivedAt: null,
1100
+ metadata: { ...(metadata || {}) },
1101
+ };
1102
+ _pfgovPsV2.set(id, p);
1103
+ return { ...p, metadata: { ...p.metadata } };
1104
+ }
1105
+ export function activatePfgovProfileV2(id) {
1106
+ const p = _pfgovPsV2.get(id);
1107
+ if (!p) throw new Error(`pfgov profile ${id} not found`);
1108
+ const isInitial = p.status === PFGOV_PROFILE_MATURITY_V2.PENDING;
1109
+ _pfgovCheckP(p.status, PFGOV_PROFILE_MATURITY_V2.ACTIVE);
1110
+ if (isInitial && _pfgovCountActive(p.owner) >= _pfgovMaxActive)
1111
+ throw new Error(`max active pfgov profiles for owner ${p.owner} reached`);
1112
+ const now = Date.now();
1113
+ p.status = PFGOV_PROFILE_MATURITY_V2.ACTIVE;
1114
+ p.updatedAt = now;
1115
+ p.lastTouchedAt = now;
1116
+ if (!p.activatedAt) p.activatedAt = now;
1117
+ return { ...p, metadata: { ...p.metadata } };
1118
+ }
1119
+ export function degradePfgovProfileV2(id) {
1120
+ const p = _pfgovPsV2.get(id);
1121
+ if (!p) throw new Error(`pfgov profile ${id} not found`);
1122
+ _pfgovCheckP(p.status, PFGOV_PROFILE_MATURITY_V2.DEGRADED);
1123
+ p.status = PFGOV_PROFILE_MATURITY_V2.DEGRADED;
1124
+ p.updatedAt = Date.now();
1125
+ return { ...p, metadata: { ...p.metadata } };
1126
+ }
1127
+ export function archivePfgovProfileV2(id) {
1128
+ const p = _pfgovPsV2.get(id);
1129
+ if (!p) throw new Error(`pfgov profile ${id} not found`);
1130
+ _pfgovCheckP(p.status, PFGOV_PROFILE_MATURITY_V2.ARCHIVED);
1131
+ const now = Date.now();
1132
+ p.status = PFGOV_PROFILE_MATURITY_V2.ARCHIVED;
1133
+ p.updatedAt = now;
1134
+ if (!p.archivedAt) p.archivedAt = now;
1135
+ return { ...p, metadata: { ...p.metadata } };
1136
+ }
1137
+ export function touchPfgovProfileV2(id) {
1138
+ const p = _pfgovPsV2.get(id);
1139
+ if (!p) throw new Error(`pfgov profile ${id} not found`);
1140
+ if (_pfgovPTerminal.has(p.status))
1141
+ throw new Error(`cannot touch terminal pfgov profile ${id}`);
1142
+ const now = Date.now();
1143
+ p.lastTouchedAt = now;
1144
+ p.updatedAt = now;
1145
+ return { ...p, metadata: { ...p.metadata } };
1146
+ }
1147
+ export function getPfgovProfileV2(id) {
1148
+ const p = _pfgovPsV2.get(id);
1149
+ if (!p) return null;
1150
+ return { ...p, metadata: { ...p.metadata } };
1151
+ }
1152
+ export function listPfgovProfilesV2() {
1153
+ return [..._pfgovPsV2.values()].map((p) => ({
1154
+ ...p,
1155
+ metadata: { ...p.metadata },
1156
+ }));
1157
+ }
1158
+ export function createPfgovRouteV2({
1159
+ id,
1160
+ profileId,
1161
+ destination,
1162
+ metadata,
1163
+ } = {}) {
1164
+ if (!id || !profileId) throw new Error("id and profileId required");
1165
+ if (_pfgovJsV2.has(id)) throw new Error(`pfgov route ${id} already exists`);
1166
+ if (!_pfgovPsV2.has(profileId))
1167
+ throw new Error(`pfgov profile ${profileId} not found`);
1168
+ if (_pfgovCountPending(profileId) >= _pfgovMaxPending)
1169
+ throw new Error(
1170
+ `max pending pfgov routes for profile ${profileId} reached`,
1171
+ );
1172
+ const now = Date.now();
1173
+ const j = {
1174
+ id,
1175
+ profileId,
1176
+ destination: destination || "",
1177
+ status: PFGOV_ROUTE_LIFECYCLE_V2.QUEUED,
1178
+ createdAt: now,
1179
+ updatedAt: now,
1180
+ startedAt: null,
1181
+ settledAt: null,
1182
+ metadata: { ...(metadata || {}) },
1183
+ };
1184
+ _pfgovJsV2.set(id, j);
1185
+ return { ...j, metadata: { ...j.metadata } };
1186
+ }
1187
+ export function routingPfgovRouteV2(id) {
1188
+ const j = _pfgovJsV2.get(id);
1189
+ if (!j) throw new Error(`pfgov route ${id} not found`);
1190
+ _pfgovCheckJ(j.status, PFGOV_ROUTE_LIFECYCLE_V2.ROUTING);
1191
+ const now = Date.now();
1192
+ j.status = PFGOV_ROUTE_LIFECYCLE_V2.ROUTING;
1193
+ j.updatedAt = now;
1194
+ if (!j.startedAt) j.startedAt = now;
1195
+ return { ...j, metadata: { ...j.metadata } };
1196
+ }
1197
+ export function completeRoutePfgovV2(id) {
1198
+ const j = _pfgovJsV2.get(id);
1199
+ if (!j) throw new Error(`pfgov route ${id} not found`);
1200
+ _pfgovCheckJ(j.status, PFGOV_ROUTE_LIFECYCLE_V2.ROUTED);
1201
+ const now = Date.now();
1202
+ j.status = PFGOV_ROUTE_LIFECYCLE_V2.ROUTED;
1203
+ j.updatedAt = now;
1204
+ if (!j.settledAt) j.settledAt = now;
1205
+ return { ...j, metadata: { ...j.metadata } };
1206
+ }
1207
+ export function failPfgovRouteV2(id, reason) {
1208
+ const j = _pfgovJsV2.get(id);
1209
+ if (!j) throw new Error(`pfgov route ${id} not found`);
1210
+ _pfgovCheckJ(j.status, PFGOV_ROUTE_LIFECYCLE_V2.FAILED);
1211
+ const now = Date.now();
1212
+ j.status = PFGOV_ROUTE_LIFECYCLE_V2.FAILED;
1213
+ j.updatedAt = now;
1214
+ if (!j.settledAt) j.settledAt = now;
1215
+ if (reason) j.metadata.failReason = String(reason);
1216
+ return { ...j, metadata: { ...j.metadata } };
1217
+ }
1218
+ export function cancelPfgovRouteV2(id, reason) {
1219
+ const j = _pfgovJsV2.get(id);
1220
+ if (!j) throw new Error(`pfgov route ${id} not found`);
1221
+ _pfgovCheckJ(j.status, PFGOV_ROUTE_LIFECYCLE_V2.CANCELLED);
1222
+ const now = Date.now();
1223
+ j.status = PFGOV_ROUTE_LIFECYCLE_V2.CANCELLED;
1224
+ j.updatedAt = now;
1225
+ if (!j.settledAt) j.settledAt = now;
1226
+ if (reason) j.metadata.cancelReason = String(reason);
1227
+ return { ...j, metadata: { ...j.metadata } };
1228
+ }
1229
+ export function getPfgovRouteV2(id) {
1230
+ const j = _pfgovJsV2.get(id);
1231
+ if (!j) return null;
1232
+ return { ...j, metadata: { ...j.metadata } };
1233
+ }
1234
+ export function listPfgovRoutesV2() {
1235
+ return [..._pfgovJsV2.values()].map((j) => ({
1236
+ ...j,
1237
+ metadata: { ...j.metadata },
1238
+ }));
1239
+ }
1240
+ export function autoDegradeIdlePfgovProfilesV2({ now } = {}) {
1241
+ const t = now ?? Date.now();
1242
+ const flipped = [];
1243
+ for (const p of _pfgovPsV2.values())
1244
+ if (
1245
+ p.status === PFGOV_PROFILE_MATURITY_V2.ACTIVE &&
1246
+ t - p.lastTouchedAt >= _pfgovIdleMs
1247
+ ) {
1248
+ p.status = PFGOV_PROFILE_MATURITY_V2.DEGRADED;
1249
+ p.updatedAt = t;
1250
+ flipped.push(p.id);
1251
+ }
1252
+ return { flipped, count: flipped.length };
1253
+ }
1254
+ export function autoFailStuckPfgovRoutesV2({ now } = {}) {
1255
+ const t = now ?? Date.now();
1256
+ const flipped = [];
1257
+ for (const j of _pfgovJsV2.values())
1258
+ if (
1259
+ j.status === PFGOV_ROUTE_LIFECYCLE_V2.ROUTING &&
1260
+ j.startedAt != null &&
1261
+ t - j.startedAt >= _pfgovStuckMs
1262
+ ) {
1263
+ j.status = PFGOV_ROUTE_LIFECYCLE_V2.FAILED;
1264
+ j.updatedAt = t;
1265
+ if (!j.settledAt) j.settledAt = t;
1266
+ j.metadata.failReason = "auto-fail-stuck";
1267
+ flipped.push(j.id);
1268
+ }
1269
+ return { flipped, count: flipped.length };
1270
+ }
1271
+ export function getProtocolFusionGovStatsV2() {
1272
+ const profilesByStatus = {};
1273
+ for (const v of Object.values(PFGOV_PROFILE_MATURITY_V2))
1274
+ profilesByStatus[v] = 0;
1275
+ for (const p of _pfgovPsV2.values()) profilesByStatus[p.status]++;
1276
+ const routesByStatus = {};
1277
+ for (const v of Object.values(PFGOV_ROUTE_LIFECYCLE_V2))
1278
+ routesByStatus[v] = 0;
1279
+ for (const j of _pfgovJsV2.values()) routesByStatus[j.status]++;
1280
+ return {
1281
+ totalPfgovProfilesV2: _pfgovPsV2.size,
1282
+ totalPfgovRoutesV2: _pfgovJsV2.size,
1283
+ maxActivePfgovProfilesPerOwner: _pfgovMaxActive,
1284
+ maxPendingPfgovRoutesPerProfile: _pfgovMaxPending,
1285
+ pfgovProfileIdleMs: _pfgovIdleMs,
1286
+ pfgovRouteStuckMs: _pfgovStuckMs,
1287
+ profilesByStatus,
1288
+ routesByStatus,
1289
+ };
1290
+ }