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
@@ -1067,3 +1067,354 @@ export function _resetStateV2() {
1067
1067
  _profileIdleMsV2 = REC_DEFAULT_PROFILE_IDLE_MS;
1068
1068
  _feedStaleMsV2 = REC_DEFAULT_FEED_STALE_MS;
1069
1069
  }
1070
+
1071
+ // =====================================================================
1072
+ // content-recommendation V2 governance overlay (iter24)
1073
+ // =====================================================================
1074
+ export const RCMDGOV_PROFILE_MATURITY_V2 = Object.freeze({
1075
+ PENDING: "pending",
1076
+ ACTIVE: "active",
1077
+ STALE: "stale",
1078
+ ARCHIVED: "archived",
1079
+ });
1080
+ export const RCMDGOV_RECOMMENDATION_LIFECYCLE_V2 = Object.freeze({
1081
+ QUEUED: "queued",
1082
+ SCORING: "scoring",
1083
+ RECOMMENDED: "recommended",
1084
+ FAILED: "failed",
1085
+ CANCELLED: "cancelled",
1086
+ });
1087
+ const _rcmdgovPTrans = new Map([
1088
+ [
1089
+ RCMDGOV_PROFILE_MATURITY_V2.PENDING,
1090
+ new Set([
1091
+ RCMDGOV_PROFILE_MATURITY_V2.ACTIVE,
1092
+ RCMDGOV_PROFILE_MATURITY_V2.ARCHIVED,
1093
+ ]),
1094
+ ],
1095
+ [
1096
+ RCMDGOV_PROFILE_MATURITY_V2.ACTIVE,
1097
+ new Set([
1098
+ RCMDGOV_PROFILE_MATURITY_V2.STALE,
1099
+ RCMDGOV_PROFILE_MATURITY_V2.ARCHIVED,
1100
+ ]),
1101
+ ],
1102
+ [
1103
+ RCMDGOV_PROFILE_MATURITY_V2.STALE,
1104
+ new Set([
1105
+ RCMDGOV_PROFILE_MATURITY_V2.ACTIVE,
1106
+ RCMDGOV_PROFILE_MATURITY_V2.ARCHIVED,
1107
+ ]),
1108
+ ],
1109
+ [RCMDGOV_PROFILE_MATURITY_V2.ARCHIVED, new Set()],
1110
+ ]);
1111
+ const _rcmdgovPTerminal = new Set([RCMDGOV_PROFILE_MATURITY_V2.ARCHIVED]);
1112
+ const _rcmdgovJTrans = new Map([
1113
+ [
1114
+ RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.QUEUED,
1115
+ new Set([
1116
+ RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.SCORING,
1117
+ RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.CANCELLED,
1118
+ ]),
1119
+ ],
1120
+ [
1121
+ RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.SCORING,
1122
+ new Set([
1123
+ RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.RECOMMENDED,
1124
+ RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.FAILED,
1125
+ RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.CANCELLED,
1126
+ ]),
1127
+ ],
1128
+ [RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.RECOMMENDED, new Set()],
1129
+ [RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.FAILED, new Set()],
1130
+ [RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.CANCELLED, new Set()],
1131
+ ]);
1132
+ const _rcmdgovPsV2 = new Map();
1133
+ const _rcmdgovJsV2 = new Map();
1134
+ let _rcmdgovMaxActive = 8,
1135
+ _rcmdgovMaxPending = 20,
1136
+ _rcmdgovIdleMs = 30 * 24 * 60 * 60 * 1000,
1137
+ _rcmdgovStuckMs = 60 * 1000;
1138
+ function _rcmdgovPos(n, label) {
1139
+ const v = Math.floor(Number(n));
1140
+ if (!Number.isFinite(v) || v <= 0)
1141
+ throw new Error(`${label} must be positive integer`);
1142
+ return v;
1143
+ }
1144
+ function _rcmdgovCheckP(from, to) {
1145
+ const a = _rcmdgovPTrans.get(from);
1146
+ if (!a || !a.has(to))
1147
+ throw new Error(`invalid rcmdgov profile transition ${from} → ${to}`);
1148
+ }
1149
+ function _rcmdgovCheckJ(from, to) {
1150
+ const a = _rcmdgovJTrans.get(from);
1151
+ if (!a || !a.has(to))
1152
+ throw new Error(
1153
+ `invalid rcmdgov recommendation transition ${from} → ${to}`,
1154
+ );
1155
+ }
1156
+ function _rcmdgovCountActive(owner) {
1157
+ let c = 0;
1158
+ for (const p of _rcmdgovPsV2.values())
1159
+ if (p.owner === owner && p.status === RCMDGOV_PROFILE_MATURITY_V2.ACTIVE)
1160
+ c++;
1161
+ return c;
1162
+ }
1163
+ function _rcmdgovCountPending(profileId) {
1164
+ let c = 0;
1165
+ for (const j of _rcmdgovJsV2.values())
1166
+ if (
1167
+ j.profileId === profileId &&
1168
+ (j.status === RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.QUEUED ||
1169
+ j.status === RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.SCORING)
1170
+ )
1171
+ c++;
1172
+ return c;
1173
+ }
1174
+ export function setMaxActiveRcmdgovProfilesPerOwnerV2(n) {
1175
+ _rcmdgovMaxActive = _rcmdgovPos(n, "maxActiveRcmdgovProfilesPerOwner");
1176
+ }
1177
+ export function getMaxActiveRcmdgovProfilesPerOwnerV2() {
1178
+ return _rcmdgovMaxActive;
1179
+ }
1180
+ export function setMaxPendingRcmdgovRecommendationsPerProfileV2(n) {
1181
+ _rcmdgovMaxPending = _rcmdgovPos(
1182
+ n,
1183
+ "maxPendingRcmdgovRecommendationsPerProfile",
1184
+ );
1185
+ }
1186
+ export function getMaxPendingRcmdgovRecommendationsPerProfileV2() {
1187
+ return _rcmdgovMaxPending;
1188
+ }
1189
+ export function setRcmdgovProfileIdleMsV2(n) {
1190
+ _rcmdgovIdleMs = _rcmdgovPos(n, "rcmdgovProfileIdleMs");
1191
+ }
1192
+ export function getRcmdgovProfileIdleMsV2() {
1193
+ return _rcmdgovIdleMs;
1194
+ }
1195
+ export function setRcmdgovRecommendationStuckMsV2(n) {
1196
+ _rcmdgovStuckMs = _rcmdgovPos(n, "rcmdgovRecommendationStuckMs");
1197
+ }
1198
+ export function getRcmdgovRecommendationStuckMsV2() {
1199
+ return _rcmdgovStuckMs;
1200
+ }
1201
+ export function _resetStateContentRecommendationGovV2() {
1202
+ _rcmdgovPsV2.clear();
1203
+ _rcmdgovJsV2.clear();
1204
+ _rcmdgovMaxActive = 8;
1205
+ _rcmdgovMaxPending = 20;
1206
+ _rcmdgovIdleMs = 30 * 24 * 60 * 60 * 1000;
1207
+ _rcmdgovStuckMs = 60 * 1000;
1208
+ }
1209
+ export function registerRcmdgovProfileV2({
1210
+ id,
1211
+ owner,
1212
+ channel,
1213
+ metadata,
1214
+ } = {}) {
1215
+ if (!id || !owner) throw new Error("id and owner required");
1216
+ if (_rcmdgovPsV2.has(id))
1217
+ throw new Error(`rcmdgov profile ${id} already exists`);
1218
+ const now = Date.now();
1219
+ const p = {
1220
+ id,
1221
+ owner,
1222
+ channel: channel || "default",
1223
+ status: RCMDGOV_PROFILE_MATURITY_V2.PENDING,
1224
+ createdAt: now,
1225
+ updatedAt: now,
1226
+ lastTouchedAt: now,
1227
+ activatedAt: null,
1228
+ archivedAt: null,
1229
+ metadata: { ...(metadata || {}) },
1230
+ };
1231
+ _rcmdgovPsV2.set(id, p);
1232
+ return { ...p, metadata: { ...p.metadata } };
1233
+ }
1234
+ export function activateRcmdgovProfileV2(id) {
1235
+ const p = _rcmdgovPsV2.get(id);
1236
+ if (!p) throw new Error(`rcmdgov profile ${id} not found`);
1237
+ const isInitial = p.status === RCMDGOV_PROFILE_MATURITY_V2.PENDING;
1238
+ _rcmdgovCheckP(p.status, RCMDGOV_PROFILE_MATURITY_V2.ACTIVE);
1239
+ if (isInitial && _rcmdgovCountActive(p.owner) >= _rcmdgovMaxActive)
1240
+ throw new Error(`max active rcmdgov profiles for owner ${p.owner} reached`);
1241
+ const now = Date.now();
1242
+ p.status = RCMDGOV_PROFILE_MATURITY_V2.ACTIVE;
1243
+ p.updatedAt = now;
1244
+ p.lastTouchedAt = now;
1245
+ if (!p.activatedAt) p.activatedAt = now;
1246
+ return { ...p, metadata: { ...p.metadata } };
1247
+ }
1248
+ export function staleRcmdgovProfileV2(id) {
1249
+ const p = _rcmdgovPsV2.get(id);
1250
+ if (!p) throw new Error(`rcmdgov profile ${id} not found`);
1251
+ _rcmdgovCheckP(p.status, RCMDGOV_PROFILE_MATURITY_V2.STALE);
1252
+ p.status = RCMDGOV_PROFILE_MATURITY_V2.STALE;
1253
+ p.updatedAt = Date.now();
1254
+ return { ...p, metadata: { ...p.metadata } };
1255
+ }
1256
+ export function archiveRcmdgovProfileV2(id) {
1257
+ const p = _rcmdgovPsV2.get(id);
1258
+ if (!p) throw new Error(`rcmdgov profile ${id} not found`);
1259
+ _rcmdgovCheckP(p.status, RCMDGOV_PROFILE_MATURITY_V2.ARCHIVED);
1260
+ const now = Date.now();
1261
+ p.status = RCMDGOV_PROFILE_MATURITY_V2.ARCHIVED;
1262
+ p.updatedAt = now;
1263
+ if (!p.archivedAt) p.archivedAt = now;
1264
+ return { ...p, metadata: { ...p.metadata } };
1265
+ }
1266
+ export function touchRcmdgovProfileV2(id) {
1267
+ const p = _rcmdgovPsV2.get(id);
1268
+ if (!p) throw new Error(`rcmdgov profile ${id} not found`);
1269
+ if (_rcmdgovPTerminal.has(p.status))
1270
+ throw new Error(`cannot touch terminal rcmdgov profile ${id}`);
1271
+ const now = Date.now();
1272
+ p.lastTouchedAt = now;
1273
+ p.updatedAt = now;
1274
+ return { ...p, metadata: { ...p.metadata } };
1275
+ }
1276
+ export function getRcmdgovProfileV2(id) {
1277
+ const p = _rcmdgovPsV2.get(id);
1278
+ if (!p) return null;
1279
+ return { ...p, metadata: { ...p.metadata } };
1280
+ }
1281
+ export function listRcmdgovProfilesV2() {
1282
+ return [..._rcmdgovPsV2.values()].map((p) => ({
1283
+ ...p,
1284
+ metadata: { ...p.metadata },
1285
+ }));
1286
+ }
1287
+ export function createRcmdgovRecommendationV2({
1288
+ id,
1289
+ profileId,
1290
+ user,
1291
+ metadata,
1292
+ } = {}) {
1293
+ if (!id || !profileId) throw new Error("id and profileId required");
1294
+ if (_rcmdgovJsV2.has(id))
1295
+ throw new Error(`rcmdgov recommendation ${id} already exists`);
1296
+ if (!_rcmdgovPsV2.has(profileId))
1297
+ throw new Error(`rcmdgov profile ${profileId} not found`);
1298
+ if (_rcmdgovCountPending(profileId) >= _rcmdgovMaxPending)
1299
+ throw new Error(
1300
+ `max pending rcmdgov recommendations for profile ${profileId} reached`,
1301
+ );
1302
+ const now = Date.now();
1303
+ const j = {
1304
+ id,
1305
+ profileId,
1306
+ user: user || "",
1307
+ status: RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.QUEUED,
1308
+ createdAt: now,
1309
+ updatedAt: now,
1310
+ startedAt: null,
1311
+ settledAt: null,
1312
+ metadata: { ...(metadata || {}) },
1313
+ };
1314
+ _rcmdgovJsV2.set(id, j);
1315
+ return { ...j, metadata: { ...j.metadata } };
1316
+ }
1317
+ export function scoringRcmdgovRecommendationV2(id) {
1318
+ const j = _rcmdgovJsV2.get(id);
1319
+ if (!j) throw new Error(`rcmdgov recommendation ${id} not found`);
1320
+ _rcmdgovCheckJ(j.status, RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.SCORING);
1321
+ const now = Date.now();
1322
+ j.status = RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.SCORING;
1323
+ j.updatedAt = now;
1324
+ if (!j.startedAt) j.startedAt = now;
1325
+ return { ...j, metadata: { ...j.metadata } };
1326
+ }
1327
+ export function completeRecommendationRcmdgovV2(id) {
1328
+ const j = _rcmdgovJsV2.get(id);
1329
+ if (!j) throw new Error(`rcmdgov recommendation ${id} not found`);
1330
+ _rcmdgovCheckJ(j.status, RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.RECOMMENDED);
1331
+ const now = Date.now();
1332
+ j.status = RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.RECOMMENDED;
1333
+ j.updatedAt = now;
1334
+ if (!j.settledAt) j.settledAt = now;
1335
+ return { ...j, metadata: { ...j.metadata } };
1336
+ }
1337
+ export function failRcmdgovRecommendationV2(id, reason) {
1338
+ const j = _rcmdgovJsV2.get(id);
1339
+ if (!j) throw new Error(`rcmdgov recommendation ${id} not found`);
1340
+ _rcmdgovCheckJ(j.status, RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.FAILED);
1341
+ const now = Date.now();
1342
+ j.status = RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.FAILED;
1343
+ j.updatedAt = now;
1344
+ if (!j.settledAt) j.settledAt = now;
1345
+ if (reason) j.metadata.failReason = String(reason);
1346
+ return { ...j, metadata: { ...j.metadata } };
1347
+ }
1348
+ export function cancelRcmdgovRecommendationV2(id, reason) {
1349
+ const j = _rcmdgovJsV2.get(id);
1350
+ if (!j) throw new Error(`rcmdgov recommendation ${id} not found`);
1351
+ _rcmdgovCheckJ(j.status, RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.CANCELLED);
1352
+ const now = Date.now();
1353
+ j.status = RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.CANCELLED;
1354
+ j.updatedAt = now;
1355
+ if (!j.settledAt) j.settledAt = now;
1356
+ if (reason) j.metadata.cancelReason = String(reason);
1357
+ return { ...j, metadata: { ...j.metadata } };
1358
+ }
1359
+ export function getRcmdgovRecommendationV2(id) {
1360
+ const j = _rcmdgovJsV2.get(id);
1361
+ if (!j) return null;
1362
+ return { ...j, metadata: { ...j.metadata } };
1363
+ }
1364
+ export function listRcmdgovRecommendationsV2() {
1365
+ return [..._rcmdgovJsV2.values()].map((j) => ({
1366
+ ...j,
1367
+ metadata: { ...j.metadata },
1368
+ }));
1369
+ }
1370
+ export function autoStaleIdleRcmdgovProfilesV2({ now } = {}) {
1371
+ const t = now ?? Date.now();
1372
+ const flipped = [];
1373
+ for (const p of _rcmdgovPsV2.values())
1374
+ if (
1375
+ p.status === RCMDGOV_PROFILE_MATURITY_V2.ACTIVE &&
1376
+ t - p.lastTouchedAt >= _rcmdgovIdleMs
1377
+ ) {
1378
+ p.status = RCMDGOV_PROFILE_MATURITY_V2.STALE;
1379
+ p.updatedAt = t;
1380
+ flipped.push(p.id);
1381
+ }
1382
+ return { flipped, count: flipped.length };
1383
+ }
1384
+ export function autoFailStuckRcmdgovRecommendationsV2({ now } = {}) {
1385
+ const t = now ?? Date.now();
1386
+ const flipped = [];
1387
+ for (const j of _rcmdgovJsV2.values())
1388
+ if (
1389
+ j.status === RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.SCORING &&
1390
+ j.startedAt != null &&
1391
+ t - j.startedAt >= _rcmdgovStuckMs
1392
+ ) {
1393
+ j.status = RCMDGOV_RECOMMENDATION_LIFECYCLE_V2.FAILED;
1394
+ j.updatedAt = t;
1395
+ if (!j.settledAt) j.settledAt = t;
1396
+ j.metadata.failReason = "auto-fail-stuck";
1397
+ flipped.push(j.id);
1398
+ }
1399
+ return { flipped, count: flipped.length };
1400
+ }
1401
+ export function getContentRecommendationGovStatsV2() {
1402
+ const profilesByStatus = {};
1403
+ for (const v of Object.values(RCMDGOV_PROFILE_MATURITY_V2))
1404
+ profilesByStatus[v] = 0;
1405
+ for (const p of _rcmdgovPsV2.values()) profilesByStatus[p.status]++;
1406
+ const recommendationsByStatus = {};
1407
+ for (const v of Object.values(RCMDGOV_RECOMMENDATION_LIFECYCLE_V2))
1408
+ recommendationsByStatus[v] = 0;
1409
+ for (const j of _rcmdgovJsV2.values()) recommendationsByStatus[j.status]++;
1410
+ return {
1411
+ totalRcmdgovProfilesV2: _rcmdgovPsV2.size,
1412
+ totalRcmdgovRecommendationsV2: _rcmdgovJsV2.size,
1413
+ maxActiveRcmdgovProfilesPerOwner: _rcmdgovMaxActive,
1414
+ maxPendingRcmdgovRecommendationsPerProfile: _rcmdgovMaxPending,
1415
+ rcmdgovProfileIdleMs: _rcmdgovIdleMs,
1416
+ rcmdgovRecommendationStuckMs: _rcmdgovStuckMs,
1417
+ profilesByStatus,
1418
+ recommendationsByStatus,
1419
+ };
1420
+ }
@@ -104,3 +104,339 @@ export const coworkLogger = {
104
104
  error: (...args) => console.error("[cowork]", ...args),
105
105
  debug: () => {},
106
106
  };
107
+
108
+ // =====================================================================
109
+ // cowork-adapter V2 governance overlay (iter27)
110
+ // =====================================================================
111
+ export const CADPGOV_PROFILE_MATURITY_V2 = Object.freeze({
112
+ PENDING: "pending",
113
+ ACTIVE: "active",
114
+ STALE: "stale",
115
+ ARCHIVED: "archived",
116
+ });
117
+ export const CADPGOV_ADAPT_LIFECYCLE_V2 = Object.freeze({
118
+ QUEUED: "queued",
119
+ ADAPTING: "adapting",
120
+ ADAPTED: "adapted",
121
+ FAILED: "failed",
122
+ CANCELLED: "cancelled",
123
+ });
124
+ const _cadpgovPTrans = new Map([
125
+ [
126
+ CADPGOV_PROFILE_MATURITY_V2.PENDING,
127
+ new Set([
128
+ CADPGOV_PROFILE_MATURITY_V2.ACTIVE,
129
+ CADPGOV_PROFILE_MATURITY_V2.ARCHIVED,
130
+ ]),
131
+ ],
132
+ [
133
+ CADPGOV_PROFILE_MATURITY_V2.ACTIVE,
134
+ new Set([
135
+ CADPGOV_PROFILE_MATURITY_V2.STALE,
136
+ CADPGOV_PROFILE_MATURITY_V2.ARCHIVED,
137
+ ]),
138
+ ],
139
+ [
140
+ CADPGOV_PROFILE_MATURITY_V2.STALE,
141
+ new Set([
142
+ CADPGOV_PROFILE_MATURITY_V2.ACTIVE,
143
+ CADPGOV_PROFILE_MATURITY_V2.ARCHIVED,
144
+ ]),
145
+ ],
146
+ [CADPGOV_PROFILE_MATURITY_V2.ARCHIVED, new Set()],
147
+ ]);
148
+ const _cadpgovPTerminal = new Set([CADPGOV_PROFILE_MATURITY_V2.ARCHIVED]);
149
+ const _cadpgovJTrans = new Map([
150
+ [
151
+ CADPGOV_ADAPT_LIFECYCLE_V2.QUEUED,
152
+ new Set([
153
+ CADPGOV_ADAPT_LIFECYCLE_V2.ADAPTING,
154
+ CADPGOV_ADAPT_LIFECYCLE_V2.CANCELLED,
155
+ ]),
156
+ ],
157
+ [
158
+ CADPGOV_ADAPT_LIFECYCLE_V2.ADAPTING,
159
+ new Set([
160
+ CADPGOV_ADAPT_LIFECYCLE_V2.ADAPTED,
161
+ CADPGOV_ADAPT_LIFECYCLE_V2.FAILED,
162
+ CADPGOV_ADAPT_LIFECYCLE_V2.CANCELLED,
163
+ ]),
164
+ ],
165
+ [CADPGOV_ADAPT_LIFECYCLE_V2.ADAPTED, new Set()],
166
+ [CADPGOV_ADAPT_LIFECYCLE_V2.FAILED, new Set()],
167
+ [CADPGOV_ADAPT_LIFECYCLE_V2.CANCELLED, new Set()],
168
+ ]);
169
+ const _cadpgovPsV2 = new Map();
170
+ const _cadpgovJsV2 = new Map();
171
+ let _cadpgovMaxActive = 6,
172
+ _cadpgovMaxPending = 15,
173
+ _cadpgovIdleMs = 30 * 24 * 60 * 60 * 1000,
174
+ _cadpgovStuckMs = 60 * 1000;
175
+ function _cadpgovPos(n, label) {
176
+ const v = Math.floor(Number(n));
177
+ if (!Number.isFinite(v) || v <= 0)
178
+ throw new Error(`${label} must be positive integer`);
179
+ return v;
180
+ }
181
+ function _cadpgovCheckP(from, to) {
182
+ const a = _cadpgovPTrans.get(from);
183
+ if (!a || !a.has(to))
184
+ throw new Error(`invalid cadpgov profile transition ${from} → ${to}`);
185
+ }
186
+ function _cadpgovCheckJ(from, to) {
187
+ const a = _cadpgovJTrans.get(from);
188
+ if (!a || !a.has(to))
189
+ throw new Error(`invalid cadpgov adapt transition ${from} → ${to}`);
190
+ }
191
+ function _cadpgovCountActive(owner) {
192
+ let c = 0;
193
+ for (const p of _cadpgovPsV2.values())
194
+ if (p.owner === owner && p.status === CADPGOV_PROFILE_MATURITY_V2.ACTIVE)
195
+ c++;
196
+ return c;
197
+ }
198
+ function _cadpgovCountPending(profileId) {
199
+ let c = 0;
200
+ for (const j of _cadpgovJsV2.values())
201
+ if (
202
+ j.profileId === profileId &&
203
+ (j.status === CADPGOV_ADAPT_LIFECYCLE_V2.QUEUED ||
204
+ j.status === CADPGOV_ADAPT_LIFECYCLE_V2.ADAPTING)
205
+ )
206
+ c++;
207
+ return c;
208
+ }
209
+ export function setMaxActiveCadpgovProfilesPerOwnerV2(n) {
210
+ _cadpgovMaxActive = _cadpgovPos(n, "maxActiveCadpgovProfilesPerOwner");
211
+ }
212
+ export function getMaxActiveCadpgovProfilesPerOwnerV2() {
213
+ return _cadpgovMaxActive;
214
+ }
215
+ export function setMaxPendingCadpgovAdaptsPerProfileV2(n) {
216
+ _cadpgovMaxPending = _cadpgovPos(n, "maxPendingCadpgovAdaptsPerProfile");
217
+ }
218
+ export function getMaxPendingCadpgovAdaptsPerProfileV2() {
219
+ return _cadpgovMaxPending;
220
+ }
221
+ export function setCadpgovProfileIdleMsV2(n) {
222
+ _cadpgovIdleMs = _cadpgovPos(n, "cadpgovProfileIdleMs");
223
+ }
224
+ export function getCadpgovProfileIdleMsV2() {
225
+ return _cadpgovIdleMs;
226
+ }
227
+ export function setCadpgovAdaptStuckMsV2(n) {
228
+ _cadpgovStuckMs = _cadpgovPos(n, "cadpgovAdaptStuckMs");
229
+ }
230
+ export function getCadpgovAdaptStuckMsV2() {
231
+ return _cadpgovStuckMs;
232
+ }
233
+ export function _resetStateCoworkAdapterGovV2() {
234
+ _cadpgovPsV2.clear();
235
+ _cadpgovJsV2.clear();
236
+ _cadpgovMaxActive = 6;
237
+ _cadpgovMaxPending = 15;
238
+ _cadpgovIdleMs = 30 * 24 * 60 * 60 * 1000;
239
+ _cadpgovStuckMs = 60 * 1000;
240
+ }
241
+ export function registerCadpgovProfileV2({ id, owner, target, metadata } = {}) {
242
+ if (!id || !owner) throw new Error("id and owner required");
243
+ if (_cadpgovPsV2.has(id))
244
+ throw new Error(`cadpgov profile ${id} already exists`);
245
+ const now = Date.now();
246
+ const p = {
247
+ id,
248
+ owner,
249
+ target: target || "default",
250
+ status: CADPGOV_PROFILE_MATURITY_V2.PENDING,
251
+ createdAt: now,
252
+ updatedAt: now,
253
+ lastTouchedAt: now,
254
+ activatedAt: null,
255
+ archivedAt: null,
256
+ metadata: { ...(metadata || {}) },
257
+ };
258
+ _cadpgovPsV2.set(id, p);
259
+ return { ...p, metadata: { ...p.metadata } };
260
+ }
261
+ export function activateCadpgovProfileV2(id) {
262
+ const p = _cadpgovPsV2.get(id);
263
+ if (!p) throw new Error(`cadpgov profile ${id} not found`);
264
+ const isInitial = p.status === CADPGOV_PROFILE_MATURITY_V2.PENDING;
265
+ _cadpgovCheckP(p.status, CADPGOV_PROFILE_MATURITY_V2.ACTIVE);
266
+ if (isInitial && _cadpgovCountActive(p.owner) >= _cadpgovMaxActive)
267
+ throw new Error(`max active cadpgov profiles for owner ${p.owner} reached`);
268
+ const now = Date.now();
269
+ p.status = CADPGOV_PROFILE_MATURITY_V2.ACTIVE;
270
+ p.updatedAt = now;
271
+ p.lastTouchedAt = now;
272
+ if (!p.activatedAt) p.activatedAt = now;
273
+ return { ...p, metadata: { ...p.metadata } };
274
+ }
275
+ export function staleCadpgovProfileV2(id) {
276
+ const p = _cadpgovPsV2.get(id);
277
+ if (!p) throw new Error(`cadpgov profile ${id} not found`);
278
+ _cadpgovCheckP(p.status, CADPGOV_PROFILE_MATURITY_V2.STALE);
279
+ p.status = CADPGOV_PROFILE_MATURITY_V2.STALE;
280
+ p.updatedAt = Date.now();
281
+ return { ...p, metadata: { ...p.metadata } };
282
+ }
283
+ export function archiveCadpgovProfileV2(id) {
284
+ const p = _cadpgovPsV2.get(id);
285
+ if (!p) throw new Error(`cadpgov profile ${id} not found`);
286
+ _cadpgovCheckP(p.status, CADPGOV_PROFILE_MATURITY_V2.ARCHIVED);
287
+ const now = Date.now();
288
+ p.status = CADPGOV_PROFILE_MATURITY_V2.ARCHIVED;
289
+ p.updatedAt = now;
290
+ if (!p.archivedAt) p.archivedAt = now;
291
+ return { ...p, metadata: { ...p.metadata } };
292
+ }
293
+ export function touchCadpgovProfileV2(id) {
294
+ const p = _cadpgovPsV2.get(id);
295
+ if (!p) throw new Error(`cadpgov profile ${id} not found`);
296
+ if (_cadpgovPTerminal.has(p.status))
297
+ throw new Error(`cannot touch terminal cadpgov profile ${id}`);
298
+ const now = Date.now();
299
+ p.lastTouchedAt = now;
300
+ p.updatedAt = now;
301
+ return { ...p, metadata: { ...p.metadata } };
302
+ }
303
+ export function getCadpgovProfileV2(id) {
304
+ const p = _cadpgovPsV2.get(id);
305
+ if (!p) return null;
306
+ return { ...p, metadata: { ...p.metadata } };
307
+ }
308
+ export function listCadpgovProfilesV2() {
309
+ return [..._cadpgovPsV2.values()].map((p) => ({
310
+ ...p,
311
+ metadata: { ...p.metadata },
312
+ }));
313
+ }
314
+ export function createCadpgovAdaptV2({ id, profileId, source, metadata } = {}) {
315
+ if (!id || !profileId) throw new Error("id and profileId required");
316
+ if (_cadpgovJsV2.has(id))
317
+ throw new Error(`cadpgov adapt ${id} already exists`);
318
+ if (!_cadpgovPsV2.has(profileId))
319
+ throw new Error(`cadpgov profile ${profileId} not found`);
320
+ if (_cadpgovCountPending(profileId) >= _cadpgovMaxPending)
321
+ throw new Error(
322
+ `max pending cadpgov adapts for profile ${profileId} reached`,
323
+ );
324
+ const now = Date.now();
325
+ const j = {
326
+ id,
327
+ profileId,
328
+ source: source || "",
329
+ status: CADPGOV_ADAPT_LIFECYCLE_V2.QUEUED,
330
+ createdAt: now,
331
+ updatedAt: now,
332
+ startedAt: null,
333
+ settledAt: null,
334
+ metadata: { ...(metadata || {}) },
335
+ };
336
+ _cadpgovJsV2.set(id, j);
337
+ return { ...j, metadata: { ...j.metadata } };
338
+ }
339
+ export function adaptingCadpgovAdaptV2(id) {
340
+ const j = _cadpgovJsV2.get(id);
341
+ if (!j) throw new Error(`cadpgov adapt ${id} not found`);
342
+ _cadpgovCheckJ(j.status, CADPGOV_ADAPT_LIFECYCLE_V2.ADAPTING);
343
+ const now = Date.now();
344
+ j.status = CADPGOV_ADAPT_LIFECYCLE_V2.ADAPTING;
345
+ j.updatedAt = now;
346
+ if (!j.startedAt) j.startedAt = now;
347
+ return { ...j, metadata: { ...j.metadata } };
348
+ }
349
+ export function completeAdaptCadpgovV2(id) {
350
+ const j = _cadpgovJsV2.get(id);
351
+ if (!j) throw new Error(`cadpgov adapt ${id} not found`);
352
+ _cadpgovCheckJ(j.status, CADPGOV_ADAPT_LIFECYCLE_V2.ADAPTED);
353
+ const now = Date.now();
354
+ j.status = CADPGOV_ADAPT_LIFECYCLE_V2.ADAPTED;
355
+ j.updatedAt = now;
356
+ if (!j.settledAt) j.settledAt = now;
357
+ return { ...j, metadata: { ...j.metadata } };
358
+ }
359
+ export function failCadpgovAdaptV2(id, reason) {
360
+ const j = _cadpgovJsV2.get(id);
361
+ if (!j) throw new Error(`cadpgov adapt ${id} not found`);
362
+ _cadpgovCheckJ(j.status, CADPGOV_ADAPT_LIFECYCLE_V2.FAILED);
363
+ const now = Date.now();
364
+ j.status = CADPGOV_ADAPT_LIFECYCLE_V2.FAILED;
365
+ j.updatedAt = now;
366
+ if (!j.settledAt) j.settledAt = now;
367
+ if (reason) j.metadata.failReason = String(reason);
368
+ return { ...j, metadata: { ...j.metadata } };
369
+ }
370
+ export function cancelCadpgovAdaptV2(id, reason) {
371
+ const j = _cadpgovJsV2.get(id);
372
+ if (!j) throw new Error(`cadpgov adapt ${id} not found`);
373
+ _cadpgovCheckJ(j.status, CADPGOV_ADAPT_LIFECYCLE_V2.CANCELLED);
374
+ const now = Date.now();
375
+ j.status = CADPGOV_ADAPT_LIFECYCLE_V2.CANCELLED;
376
+ j.updatedAt = now;
377
+ if (!j.settledAt) j.settledAt = now;
378
+ if (reason) j.metadata.cancelReason = String(reason);
379
+ return { ...j, metadata: { ...j.metadata } };
380
+ }
381
+ export function getCadpgovAdaptV2(id) {
382
+ const j = _cadpgovJsV2.get(id);
383
+ if (!j) return null;
384
+ return { ...j, metadata: { ...j.metadata } };
385
+ }
386
+ export function listCadpgovAdaptsV2() {
387
+ return [..._cadpgovJsV2.values()].map((j) => ({
388
+ ...j,
389
+ metadata: { ...j.metadata },
390
+ }));
391
+ }
392
+ export function autoStaleIdleCadpgovProfilesV2({ now } = {}) {
393
+ const t = now ?? Date.now();
394
+ const flipped = [];
395
+ for (const p of _cadpgovPsV2.values())
396
+ if (
397
+ p.status === CADPGOV_PROFILE_MATURITY_V2.ACTIVE &&
398
+ t - p.lastTouchedAt >= _cadpgovIdleMs
399
+ ) {
400
+ p.status = CADPGOV_PROFILE_MATURITY_V2.STALE;
401
+ p.updatedAt = t;
402
+ flipped.push(p.id);
403
+ }
404
+ return { flipped, count: flipped.length };
405
+ }
406
+ export function autoFailStuckCadpgovAdaptsV2({ now } = {}) {
407
+ const t = now ?? Date.now();
408
+ const flipped = [];
409
+ for (const j of _cadpgovJsV2.values())
410
+ if (
411
+ j.status === CADPGOV_ADAPT_LIFECYCLE_V2.ADAPTING &&
412
+ j.startedAt != null &&
413
+ t - j.startedAt >= _cadpgovStuckMs
414
+ ) {
415
+ j.status = CADPGOV_ADAPT_LIFECYCLE_V2.FAILED;
416
+ j.updatedAt = t;
417
+ if (!j.settledAt) j.settledAt = t;
418
+ j.metadata.failReason = "auto-fail-stuck";
419
+ flipped.push(j.id);
420
+ }
421
+ return { flipped, count: flipped.length };
422
+ }
423
+ export function getCoworkAdapterGovStatsV2() {
424
+ const profilesByStatus = {};
425
+ for (const v of Object.values(CADPGOV_PROFILE_MATURITY_V2))
426
+ profilesByStatus[v] = 0;
427
+ for (const p of _cadpgovPsV2.values()) profilesByStatus[p.status]++;
428
+ const adaptsByStatus = {};
429
+ for (const v of Object.values(CADPGOV_ADAPT_LIFECYCLE_V2))
430
+ adaptsByStatus[v] = 0;
431
+ for (const j of _cadpgovJsV2.values()) adaptsByStatus[j.status]++;
432
+ return {
433
+ totalCadpgovProfilesV2: _cadpgovPsV2.size,
434
+ totalCadpgovAdaptsV2: _cadpgovJsV2.size,
435
+ maxActiveCadpgovProfilesPerOwner: _cadpgovMaxActive,
436
+ maxPendingCadpgovAdaptsPerProfile: _cadpgovMaxPending,
437
+ cadpgovProfileIdleMs: _cadpgovIdleMs,
438
+ cadpgovAdaptStuckMs: _cadpgovStuckMs,
439
+ profilesByStatus,
440
+ adaptsByStatus,
441
+ };
442
+ }