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.
- package/package.json +1 -1
- package/src/commands/a2a.js +196 -28
- package/src/commands/activitypub.js +364 -27
- package/src/commands/agent-network.js +217 -0
- package/src/commands/agent.js +587 -103
- package/src/commands/audit.js +206 -0
- package/src/commands/automation.js +201 -0
- package/src/commands/bi.js +355 -27
- package/src/commands/bm25.js +111 -27
- package/src/commands/browse.js +403 -29
- package/src/commands/ccron.js +128 -28
- package/src/commands/chat.js +207 -0
- package/src/commands/codegen.js +207 -0
- package/src/commands/collab.js +211 -0
- package/src/commands/compliance.js +824 -34
- package/src/commands/compt.js +127 -29
- package/src/commands/consol.js +8 -2
- package/src/commands/cowork.js +783 -34
- package/src/commands/crosschain.js +182 -28
- package/src/commands/dao.js +182 -28
- package/src/commands/dbevo.js +227 -0
- package/src/commands/dev.js +207 -0
- package/src/commands/did-v2.js +217 -0
- package/src/commands/did.js +221 -0
- package/src/commands/dlp.js +385 -27
- package/src/commands/economy.js +205 -50
- package/src/commands/evolution.js +203 -50
- package/src/commands/evomap.js +387 -27
- package/src/commands/export.js +213 -0
- package/src/commands/federation.js +209 -0
- package/src/commands/fflag.js +74 -22
- package/src/commands/fusion.js +205 -0
- package/src/commands/git.js +177 -37
- package/src/commands/governance.js +209 -0
- package/src/commands/hardening.js +209 -0
- package/src/commands/hmemory.js +204 -50
- package/src/commands/hook.js +209 -0
- package/src/commands/import.js +209 -0
- package/src/commands/incentive.js +209 -0
- package/src/commands/inference.js +170 -34
- package/src/commands/infra.js +203 -0
- package/src/commands/instinct.js +209 -0
- package/src/commands/ipfs.js +207 -0
- package/src/commands/itbudget.js +149 -33
- package/src/commands/kg.js +206 -0
- package/src/commands/llm.js +217 -0
- package/src/commands/lowcode.js +195 -38
- package/src/commands/marketplace.js +206 -0
- package/src/commands/matrix.js +386 -27
- package/src/commands/mcp.js +217 -0
- package/src/commands/mcpscaf.js +145 -33
- package/src/commands/meminj.js +145 -33
- package/src/commands/memory.js +209 -0
- package/src/commands/multimodal.js +203 -0
- package/src/commands/nlprog.js +225 -0
- package/src/commands/nostr.js +387 -27
- package/src/commands/note.js +205 -0
- package/src/commands/ops.js +219 -0
- package/src/commands/orchestrate.js +217 -0
- package/src/commands/orchgov.js +144 -33
- package/src/commands/org.js +209 -0
- package/src/commands/p2p.js +209 -0
- package/src/commands/pdfp.js +109 -27
- package/src/commands/perception.js +209 -0
- package/src/commands/perf.js +169 -32
- package/src/commands/perm.js +144 -33
- package/src/commands/permmem.js +203 -0
- package/src/commands/pipeline.js +207 -52
- package/src/commands/planmode.js +141 -32
- package/src/commands/plugin-ecosystem.js +209 -0
- package/src/commands/pqc.js +213 -0
- package/src/commands/privacy.js +203 -0
- package/src/commands/promcomp.js +111 -27
- package/src/commands/quantization.js +207 -0
- package/src/commands/rcache.js +205 -0
- package/src/commands/recommend.js +410 -34
- package/src/commands/reputation.js +208 -0
- package/src/commands/runtime.js +205 -0
- package/src/commands/sandbox.js +206 -0
- package/src/commands/scim.js +209 -0
- package/src/commands/seshhook.js +145 -33
- package/src/commands/seshsearch.js +141 -33
- package/src/commands/seshtail.js +144 -33
- package/src/commands/seshu.js +152 -33
- package/src/commands/session.js +209 -0
- package/src/commands/sganal.js +123 -29
- package/src/commands/siem.js +201 -34
- package/src/commands/skill.js +207 -0
- package/src/commands/sla.js +212 -0
- package/src/commands/slotfill.js +146 -33
- package/src/commands/social.js +358 -32
- package/src/commands/sso.js +209 -0
- package/src/commands/stress.js +206 -0
- package/src/commands/svccont.js +145 -33
- package/src/commands/sync.js +209 -0
- package/src/commands/tech.js +209 -0
- package/src/commands/tenant.js +217 -0
- package/src/commands/terraform.js +206 -0
- package/src/commands/tms.js +171 -33
- package/src/commands/tokens.js +209 -0
- package/src/commands/topiccls.js +146 -33
- package/src/commands/trust.js +217 -0
- package/src/commands/uprof.js +141 -32
- package/src/commands/vcheck.js +122 -28
- package/src/commands/wallet.js +209 -0
- package/src/commands/webfetch.js +141 -32
- package/src/commands/workflow.js +203 -0
- package/src/commands/zkp.js +184 -28
- package/src/index.js +180 -0
- package/src/lib/a2a-protocol.js +319 -51
- package/src/lib/activitypub-bridge.js +622 -50
- package/src/lib/agent-economy.js +304 -51
- package/src/lib/agent-network.js +341 -0
- package/src/lib/aiops.js +346 -0
- package/src/lib/app-builder.js +279 -46
- package/src/lib/audit-logger.js +321 -0
- package/src/lib/automation-engine.js +335 -0
- package/src/lib/autonomous-agent.js +284 -48
- package/src/lib/autonomous-developer.js +332 -0
- package/src/lib/bi-engine.js +616 -49
- package/src/lib/bm25-search.js +301 -49
- package/src/lib/browser-automation.js +630 -49
- package/src/lib/chat-core.js +336 -0
- package/src/lib/claude-code-bridge.js +341 -0
- package/src/lib/code-agent.js +339 -0
- package/src/lib/collaboration-governance.js +334 -0
- package/src/lib/community-governance.js +346 -0
- package/src/lib/compliance-framework-reporter.js +305 -51
- package/src/lib/compliance-manager.js +330 -0
- package/src/lib/compression-telemetry.js +301 -49
- package/src/lib/content-recommendation.js +351 -0
- package/src/lib/content-recommender.js +317 -52
- package/src/lib/cowork-cron.js +298 -49
- package/src/lib/cowork-learning.js +333 -0
- package/src/lib/cowork-share.js +338 -0
- package/src/lib/cowork-task-runner.js +308 -51
- package/src/lib/cowork-workflow.js +327 -0
- package/src/lib/cross-chain.js +311 -51
- package/src/lib/dao-governance.js +280 -46
- package/src/lib/dbevo.js +351 -0
- package/src/lib/decentral-infra.js +330 -0
- package/src/lib/did-manager.js +341 -0
- package/src/lib/did-v2-manager.js +341 -0
- package/src/lib/dlp-engine.js +626 -49
- package/src/lib/evolution-system.js +278 -47
- package/src/lib/evomap-governance.js +334 -0
- package/src/lib/evomap-manager.js +280 -46
- package/src/lib/execution-backend.js +294 -48
- package/src/lib/feature-flags.js +294 -49
- package/src/lib/federation-hardening.js +340 -0
- package/src/lib/git-integration.js +285 -47
- package/src/lib/hardening-manager.js +341 -0
- package/src/lib/hierarchical-memory.js +284 -48
- package/src/lib/hook-manager.js +341 -0
- package/src/lib/inference-network.js +308 -51
- package/src/lib/instinct-manager.js +346 -0
- package/src/lib/ipfs-storage.js +334 -0
- package/src/lib/iteration-budget.js +302 -50
- package/src/lib/knowledge-exporter.js +341 -0
- package/src/lib/knowledge-graph.js +333 -0
- package/src/lib/knowledge-importer.js +341 -0
- package/src/lib/llm-providers.js +346 -0
- package/src/lib/matrix-bridge.js +620 -47
- package/src/lib/mcp-registry.js +346 -0
- package/src/lib/mcp-scaffold.js +318 -54
- package/src/lib/memory-injection.js +288 -49
- package/src/lib/memory-manager.js +336 -0
- package/src/lib/multimodal.js +330 -0
- package/src/lib/nl-programming.js +341 -0
- package/src/lib/nostr-bridge.js +622 -49
- package/src/lib/note-versioning.js +339 -0
- package/src/lib/orchestrator.js +293 -48
- package/src/lib/org-manager.js +336 -0
- package/src/lib/p2p-manager.js +341 -0
- package/src/lib/pdf-parser.js +298 -49
- package/src/lib/perception.js +346 -0
- package/src/lib/perf-tuning.js +309 -50
- package/src/lib/permanent-memory.js +327 -0
- package/src/lib/permission-engine.js +287 -49
- package/src/lib/pipeline-orchestrator.js +289 -49
- package/src/lib/plan-mode.js +298 -51
- package/src/lib/plugin-ecosystem.js +346 -0
- package/src/lib/pqc-manager.js +346 -0
- package/src/lib/privacy-computing.js +335 -0
- package/src/lib/protocol-fusion.js +338 -0
- package/src/lib/quantization.js +337 -0
- package/src/lib/reputation-optimizer.js +340 -0
- package/src/lib/response-cache.js +333 -0
- package/src/lib/sandbox-v2.js +327 -0
- package/src/lib/scim-manager.js +346 -0
- package/src/lib/service-container.js +313 -52
- package/src/lib/session-consolidator.js +296 -49
- package/src/lib/session-hooks.js +312 -53
- package/src/lib/session-manager.js +334 -0
- package/src/lib/session-search.js +304 -51
- package/src/lib/session-tail.js +288 -49
- package/src/lib/session-usage.js +298 -52
- package/src/lib/siem-exporter.js +298 -51
- package/src/lib/skill-loader.js +334 -0
- package/src/lib/skill-marketplace.js +345 -0
- package/src/lib/sla-manager.js +341 -0
- package/src/lib/slot-filler.js +303 -51
- package/src/lib/social-graph-analytics.js +295 -49
- package/src/lib/social-graph.js +272 -49
- package/src/lib/social-manager.js +330 -0
- package/src/lib/sso-manager.js +340 -0
- package/src/lib/stress-tester.js +342 -0
- package/src/lib/sub-agent-registry.js +302 -53
- package/src/lib/sync-manager.js +336 -0
- package/src/lib/task-model-selector.js +302 -50
- package/src/lib/tech-learning-engine.js +341 -0
- package/src/lib/tenant-saas.js +341 -0
- package/src/lib/terraform-manager.js +333 -0
- package/src/lib/threat-intel.js +330 -0
- package/src/lib/todo-manager.js +281 -47
- package/src/lib/token-incentive.js +341 -0
- package/src/lib/token-tracker.js +336 -0
- package/src/lib/topic-classifier.js +297 -49
- package/src/lib/trust-security.js +343 -0
- package/src/lib/ueba.js +340 -0
- package/src/lib/universal-runtime.js +330 -0
- package/src/lib/user-profile.js +294 -50
- package/src/lib/version-checker.js +304 -50
- package/src/lib/wallet-manager.js +336 -0
- package/src/lib/web-fetch.js +292 -51
- package/src/lib/workflow-engine.js +330 -0
- package/src/lib/zkp-engine.js +286 -49
|
@@ -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
|
+
}
|