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
package/src/lib/perception.js
CHANGED
|
@@ -844,3 +844,349 @@ export function _resetStateV2() {
|
|
|
844
844
|
_sensorsV2.clear();
|
|
845
845
|
_capturesV2.clear();
|
|
846
846
|
}
|
|
847
|
+
|
|
848
|
+
// =====================================================================
|
|
849
|
+
// perception V2 governance overlay (iter18)
|
|
850
|
+
// =====================================================================
|
|
851
|
+
export const PERCGOV_PROFILE_MATURITY_V2 = Object.freeze({
|
|
852
|
+
PENDING: "pending",
|
|
853
|
+
ACTIVE: "active",
|
|
854
|
+
STALE: "stale",
|
|
855
|
+
ARCHIVED: "archived",
|
|
856
|
+
});
|
|
857
|
+
export const PERCGOV_SIGNAL_LIFECYCLE_V2 = Object.freeze({
|
|
858
|
+
QUEUED: "queued",
|
|
859
|
+
ANALYZING: "analyzing",
|
|
860
|
+
ANALYZED: "analyzed",
|
|
861
|
+
FAILED: "failed",
|
|
862
|
+
CANCELLED: "cancelled",
|
|
863
|
+
});
|
|
864
|
+
const _percgovPTrans = new Map([
|
|
865
|
+
[
|
|
866
|
+
PERCGOV_PROFILE_MATURITY_V2.PENDING,
|
|
867
|
+
new Set([
|
|
868
|
+
PERCGOV_PROFILE_MATURITY_V2.ACTIVE,
|
|
869
|
+
PERCGOV_PROFILE_MATURITY_V2.ARCHIVED,
|
|
870
|
+
]),
|
|
871
|
+
],
|
|
872
|
+
[
|
|
873
|
+
PERCGOV_PROFILE_MATURITY_V2.ACTIVE,
|
|
874
|
+
new Set([
|
|
875
|
+
PERCGOV_PROFILE_MATURITY_V2.STALE,
|
|
876
|
+
PERCGOV_PROFILE_MATURITY_V2.ARCHIVED,
|
|
877
|
+
]),
|
|
878
|
+
],
|
|
879
|
+
[
|
|
880
|
+
PERCGOV_PROFILE_MATURITY_V2.STALE,
|
|
881
|
+
new Set([
|
|
882
|
+
PERCGOV_PROFILE_MATURITY_V2.ACTIVE,
|
|
883
|
+
PERCGOV_PROFILE_MATURITY_V2.ARCHIVED,
|
|
884
|
+
]),
|
|
885
|
+
],
|
|
886
|
+
[PERCGOV_PROFILE_MATURITY_V2.ARCHIVED, new Set()],
|
|
887
|
+
]);
|
|
888
|
+
const _percgovPTerminal = new Set([PERCGOV_PROFILE_MATURITY_V2.ARCHIVED]);
|
|
889
|
+
const _percgovJTrans = new Map([
|
|
890
|
+
[
|
|
891
|
+
PERCGOV_SIGNAL_LIFECYCLE_V2.QUEUED,
|
|
892
|
+
new Set([
|
|
893
|
+
PERCGOV_SIGNAL_LIFECYCLE_V2.ANALYZING,
|
|
894
|
+
PERCGOV_SIGNAL_LIFECYCLE_V2.CANCELLED,
|
|
895
|
+
]),
|
|
896
|
+
],
|
|
897
|
+
[
|
|
898
|
+
PERCGOV_SIGNAL_LIFECYCLE_V2.ANALYZING,
|
|
899
|
+
new Set([
|
|
900
|
+
PERCGOV_SIGNAL_LIFECYCLE_V2.ANALYZED,
|
|
901
|
+
PERCGOV_SIGNAL_LIFECYCLE_V2.FAILED,
|
|
902
|
+
PERCGOV_SIGNAL_LIFECYCLE_V2.CANCELLED,
|
|
903
|
+
]),
|
|
904
|
+
],
|
|
905
|
+
[PERCGOV_SIGNAL_LIFECYCLE_V2.ANALYZED, new Set()],
|
|
906
|
+
[PERCGOV_SIGNAL_LIFECYCLE_V2.FAILED, new Set()],
|
|
907
|
+
[PERCGOV_SIGNAL_LIFECYCLE_V2.CANCELLED, new Set()],
|
|
908
|
+
]);
|
|
909
|
+
const _percgovPsV2 = new Map();
|
|
910
|
+
const _percgovJsV2 = new Map();
|
|
911
|
+
let _percgovMaxActive = 6,
|
|
912
|
+
_percgovMaxPending = 12,
|
|
913
|
+
_percgovIdleMs = 30 * 24 * 60 * 60 * 1000,
|
|
914
|
+
_percgovStuckMs = 60 * 1000;
|
|
915
|
+
function _percgovPos(n, label) {
|
|
916
|
+
const v = Math.floor(Number(n));
|
|
917
|
+
if (!Number.isFinite(v) || v <= 0)
|
|
918
|
+
throw new Error(`${label} must be positive integer`);
|
|
919
|
+
return v;
|
|
920
|
+
}
|
|
921
|
+
function _percgovCheckP(from, to) {
|
|
922
|
+
const a = _percgovPTrans.get(from);
|
|
923
|
+
if (!a || !a.has(to))
|
|
924
|
+
throw new Error(`invalid percgov profile transition ${from} → ${to}`);
|
|
925
|
+
}
|
|
926
|
+
function _percgovCheckJ(from, to) {
|
|
927
|
+
const a = _percgovJTrans.get(from);
|
|
928
|
+
if (!a || !a.has(to))
|
|
929
|
+
throw new Error(`invalid percgov signal transition ${from} → ${to}`);
|
|
930
|
+
}
|
|
931
|
+
function _percgovCountActive(owner) {
|
|
932
|
+
let c = 0;
|
|
933
|
+
for (const p of _percgovPsV2.values())
|
|
934
|
+
if (p.owner === owner && p.status === PERCGOV_PROFILE_MATURITY_V2.ACTIVE)
|
|
935
|
+
c++;
|
|
936
|
+
return c;
|
|
937
|
+
}
|
|
938
|
+
function _percgovCountPending(profileId) {
|
|
939
|
+
let c = 0;
|
|
940
|
+
for (const j of _percgovJsV2.values())
|
|
941
|
+
if (
|
|
942
|
+
j.profileId === profileId &&
|
|
943
|
+
(j.status === PERCGOV_SIGNAL_LIFECYCLE_V2.QUEUED ||
|
|
944
|
+
j.status === PERCGOV_SIGNAL_LIFECYCLE_V2.ANALYZING)
|
|
945
|
+
)
|
|
946
|
+
c++;
|
|
947
|
+
return c;
|
|
948
|
+
}
|
|
949
|
+
export function setMaxActivePercgovProfilesPerOwnerV2(n) {
|
|
950
|
+
_percgovMaxActive = _percgovPos(n, "maxActivePercgovProfilesPerOwner");
|
|
951
|
+
}
|
|
952
|
+
export function getMaxActivePercgovProfilesPerOwnerV2() {
|
|
953
|
+
return _percgovMaxActive;
|
|
954
|
+
}
|
|
955
|
+
export function setMaxPendingPercgovSignalsPerProfileV2(n) {
|
|
956
|
+
_percgovMaxPending = _percgovPos(n, "maxPendingPercgovSignalsPerProfile");
|
|
957
|
+
}
|
|
958
|
+
export function getMaxPendingPercgovSignalsPerProfileV2() {
|
|
959
|
+
return _percgovMaxPending;
|
|
960
|
+
}
|
|
961
|
+
export function setPercgovProfileIdleMsV2(n) {
|
|
962
|
+
_percgovIdleMs = _percgovPos(n, "percgovProfileIdleMs");
|
|
963
|
+
}
|
|
964
|
+
export function getPercgovProfileIdleMsV2() {
|
|
965
|
+
return _percgovIdleMs;
|
|
966
|
+
}
|
|
967
|
+
export function setPercgovSignalStuckMsV2(n) {
|
|
968
|
+
_percgovStuckMs = _percgovPos(n, "percgovSignalStuckMs");
|
|
969
|
+
}
|
|
970
|
+
export function getPercgovSignalStuckMsV2() {
|
|
971
|
+
return _percgovStuckMs;
|
|
972
|
+
}
|
|
973
|
+
export function _resetStatePerceptionGovV2() {
|
|
974
|
+
_percgovPsV2.clear();
|
|
975
|
+
_percgovJsV2.clear();
|
|
976
|
+
_percgovMaxActive = 6;
|
|
977
|
+
_percgovMaxPending = 12;
|
|
978
|
+
_percgovIdleMs = 30 * 24 * 60 * 60 * 1000;
|
|
979
|
+
_percgovStuckMs = 60 * 1000;
|
|
980
|
+
}
|
|
981
|
+
export function registerPercgovProfileV2({
|
|
982
|
+
id,
|
|
983
|
+
owner,
|
|
984
|
+
modality,
|
|
985
|
+
metadata,
|
|
986
|
+
} = {}) {
|
|
987
|
+
if (!id || !owner) throw new Error("id and owner required");
|
|
988
|
+
if (_percgovPsV2.has(id))
|
|
989
|
+
throw new Error(`percgov profile ${id} already exists`);
|
|
990
|
+
const now = Date.now();
|
|
991
|
+
const p = {
|
|
992
|
+
id,
|
|
993
|
+
owner,
|
|
994
|
+
modality: modality || "vision",
|
|
995
|
+
status: PERCGOV_PROFILE_MATURITY_V2.PENDING,
|
|
996
|
+
createdAt: now,
|
|
997
|
+
updatedAt: now,
|
|
998
|
+
lastTouchedAt: now,
|
|
999
|
+
activatedAt: null,
|
|
1000
|
+
archivedAt: null,
|
|
1001
|
+
metadata: { ...(metadata || {}) },
|
|
1002
|
+
};
|
|
1003
|
+
_percgovPsV2.set(id, p);
|
|
1004
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
1005
|
+
}
|
|
1006
|
+
export function activatePercgovProfileV2(id) {
|
|
1007
|
+
const p = _percgovPsV2.get(id);
|
|
1008
|
+
if (!p) throw new Error(`percgov profile ${id} not found`);
|
|
1009
|
+
const isInitial = p.status === PERCGOV_PROFILE_MATURITY_V2.PENDING;
|
|
1010
|
+
_percgovCheckP(p.status, PERCGOV_PROFILE_MATURITY_V2.ACTIVE);
|
|
1011
|
+
if (isInitial && _percgovCountActive(p.owner) >= _percgovMaxActive)
|
|
1012
|
+
throw new Error(`max active percgov profiles for owner ${p.owner} reached`);
|
|
1013
|
+
const now = Date.now();
|
|
1014
|
+
p.status = PERCGOV_PROFILE_MATURITY_V2.ACTIVE;
|
|
1015
|
+
p.updatedAt = now;
|
|
1016
|
+
p.lastTouchedAt = now;
|
|
1017
|
+
if (!p.activatedAt) p.activatedAt = now;
|
|
1018
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
1019
|
+
}
|
|
1020
|
+
export function stalePercgovProfileV2(id) {
|
|
1021
|
+
const p = _percgovPsV2.get(id);
|
|
1022
|
+
if (!p) throw new Error(`percgov profile ${id} not found`);
|
|
1023
|
+
_percgovCheckP(p.status, PERCGOV_PROFILE_MATURITY_V2.STALE);
|
|
1024
|
+
p.status = PERCGOV_PROFILE_MATURITY_V2.STALE;
|
|
1025
|
+
p.updatedAt = Date.now();
|
|
1026
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
1027
|
+
}
|
|
1028
|
+
export function archivePercgovProfileV2(id) {
|
|
1029
|
+
const p = _percgovPsV2.get(id);
|
|
1030
|
+
if (!p) throw new Error(`percgov profile ${id} not found`);
|
|
1031
|
+
_percgovCheckP(p.status, PERCGOV_PROFILE_MATURITY_V2.ARCHIVED);
|
|
1032
|
+
const now = Date.now();
|
|
1033
|
+
p.status = PERCGOV_PROFILE_MATURITY_V2.ARCHIVED;
|
|
1034
|
+
p.updatedAt = now;
|
|
1035
|
+
if (!p.archivedAt) p.archivedAt = now;
|
|
1036
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
1037
|
+
}
|
|
1038
|
+
export function touchPercgovProfileV2(id) {
|
|
1039
|
+
const p = _percgovPsV2.get(id);
|
|
1040
|
+
if (!p) throw new Error(`percgov profile ${id} not found`);
|
|
1041
|
+
if (_percgovPTerminal.has(p.status))
|
|
1042
|
+
throw new Error(`cannot touch terminal percgov profile ${id}`);
|
|
1043
|
+
const now = Date.now();
|
|
1044
|
+
p.lastTouchedAt = now;
|
|
1045
|
+
p.updatedAt = now;
|
|
1046
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
1047
|
+
}
|
|
1048
|
+
export function getPercgovProfileV2(id) {
|
|
1049
|
+
const p = _percgovPsV2.get(id);
|
|
1050
|
+
if (!p) return null;
|
|
1051
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
1052
|
+
}
|
|
1053
|
+
export function listPercgovProfilesV2() {
|
|
1054
|
+
return [..._percgovPsV2.values()].map((p) => ({
|
|
1055
|
+
...p,
|
|
1056
|
+
metadata: { ...p.metadata },
|
|
1057
|
+
}));
|
|
1058
|
+
}
|
|
1059
|
+
export function createPercgovSignalV2({
|
|
1060
|
+
id,
|
|
1061
|
+
profileId,
|
|
1062
|
+
source,
|
|
1063
|
+
metadata,
|
|
1064
|
+
} = {}) {
|
|
1065
|
+
if (!id || !profileId) throw new Error("id and profileId required");
|
|
1066
|
+
if (_percgovJsV2.has(id))
|
|
1067
|
+
throw new Error(`percgov signal ${id} already exists`);
|
|
1068
|
+
if (!_percgovPsV2.has(profileId))
|
|
1069
|
+
throw new Error(`percgov profile ${profileId} not found`);
|
|
1070
|
+
if (_percgovCountPending(profileId) >= _percgovMaxPending)
|
|
1071
|
+
throw new Error(
|
|
1072
|
+
`max pending percgov signals for profile ${profileId} reached`,
|
|
1073
|
+
);
|
|
1074
|
+
const now = Date.now();
|
|
1075
|
+
const j = {
|
|
1076
|
+
id,
|
|
1077
|
+
profileId,
|
|
1078
|
+
source: source || "",
|
|
1079
|
+
status: PERCGOV_SIGNAL_LIFECYCLE_V2.QUEUED,
|
|
1080
|
+
createdAt: now,
|
|
1081
|
+
updatedAt: now,
|
|
1082
|
+
startedAt: null,
|
|
1083
|
+
settledAt: null,
|
|
1084
|
+
metadata: { ...(metadata || {}) },
|
|
1085
|
+
};
|
|
1086
|
+
_percgovJsV2.set(id, j);
|
|
1087
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
1088
|
+
}
|
|
1089
|
+
export function analyzingPercgovSignalV2(id) {
|
|
1090
|
+
const j = _percgovJsV2.get(id);
|
|
1091
|
+
if (!j) throw new Error(`percgov signal ${id} not found`);
|
|
1092
|
+
_percgovCheckJ(j.status, PERCGOV_SIGNAL_LIFECYCLE_V2.ANALYZING);
|
|
1093
|
+
const now = Date.now();
|
|
1094
|
+
j.status = PERCGOV_SIGNAL_LIFECYCLE_V2.ANALYZING;
|
|
1095
|
+
j.updatedAt = now;
|
|
1096
|
+
if (!j.startedAt) j.startedAt = now;
|
|
1097
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
1098
|
+
}
|
|
1099
|
+
export function completeSignalPercgovV2(id) {
|
|
1100
|
+
const j = _percgovJsV2.get(id);
|
|
1101
|
+
if (!j) throw new Error(`percgov signal ${id} not found`);
|
|
1102
|
+
_percgovCheckJ(j.status, PERCGOV_SIGNAL_LIFECYCLE_V2.ANALYZED);
|
|
1103
|
+
const now = Date.now();
|
|
1104
|
+
j.status = PERCGOV_SIGNAL_LIFECYCLE_V2.ANALYZED;
|
|
1105
|
+
j.updatedAt = now;
|
|
1106
|
+
if (!j.settledAt) j.settledAt = now;
|
|
1107
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
1108
|
+
}
|
|
1109
|
+
export function failPercgovSignalV2(id, reason) {
|
|
1110
|
+
const j = _percgovJsV2.get(id);
|
|
1111
|
+
if (!j) throw new Error(`percgov signal ${id} not found`);
|
|
1112
|
+
_percgovCheckJ(j.status, PERCGOV_SIGNAL_LIFECYCLE_V2.FAILED);
|
|
1113
|
+
const now = Date.now();
|
|
1114
|
+
j.status = PERCGOV_SIGNAL_LIFECYCLE_V2.FAILED;
|
|
1115
|
+
j.updatedAt = now;
|
|
1116
|
+
if (!j.settledAt) j.settledAt = now;
|
|
1117
|
+
if (reason) j.metadata.failReason = String(reason);
|
|
1118
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
1119
|
+
}
|
|
1120
|
+
export function cancelPercgovSignalV2(id, reason) {
|
|
1121
|
+
const j = _percgovJsV2.get(id);
|
|
1122
|
+
if (!j) throw new Error(`percgov signal ${id} not found`);
|
|
1123
|
+
_percgovCheckJ(j.status, PERCGOV_SIGNAL_LIFECYCLE_V2.CANCELLED);
|
|
1124
|
+
const now = Date.now();
|
|
1125
|
+
j.status = PERCGOV_SIGNAL_LIFECYCLE_V2.CANCELLED;
|
|
1126
|
+
j.updatedAt = now;
|
|
1127
|
+
if (!j.settledAt) j.settledAt = now;
|
|
1128
|
+
if (reason) j.metadata.cancelReason = String(reason);
|
|
1129
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
1130
|
+
}
|
|
1131
|
+
export function getPercgovSignalV2(id) {
|
|
1132
|
+
const j = _percgovJsV2.get(id);
|
|
1133
|
+
if (!j) return null;
|
|
1134
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
1135
|
+
}
|
|
1136
|
+
export function listPercgovSignalsV2() {
|
|
1137
|
+
return [..._percgovJsV2.values()].map((j) => ({
|
|
1138
|
+
...j,
|
|
1139
|
+
metadata: { ...j.metadata },
|
|
1140
|
+
}));
|
|
1141
|
+
}
|
|
1142
|
+
export function autoStaleIdlePercgovProfilesV2({ now } = {}) {
|
|
1143
|
+
const t = now ?? Date.now();
|
|
1144
|
+
const flipped = [];
|
|
1145
|
+
for (const p of _percgovPsV2.values())
|
|
1146
|
+
if (
|
|
1147
|
+
p.status === PERCGOV_PROFILE_MATURITY_V2.ACTIVE &&
|
|
1148
|
+
t - p.lastTouchedAt >= _percgovIdleMs
|
|
1149
|
+
) {
|
|
1150
|
+
p.status = PERCGOV_PROFILE_MATURITY_V2.STALE;
|
|
1151
|
+
p.updatedAt = t;
|
|
1152
|
+
flipped.push(p.id);
|
|
1153
|
+
}
|
|
1154
|
+
return { flipped, count: flipped.length };
|
|
1155
|
+
}
|
|
1156
|
+
export function autoFailStuckPercgovSignalsV2({ now } = {}) {
|
|
1157
|
+
const t = now ?? Date.now();
|
|
1158
|
+
const flipped = [];
|
|
1159
|
+
for (const j of _percgovJsV2.values())
|
|
1160
|
+
if (
|
|
1161
|
+
j.status === PERCGOV_SIGNAL_LIFECYCLE_V2.ANALYZING &&
|
|
1162
|
+
j.startedAt != null &&
|
|
1163
|
+
t - j.startedAt >= _percgovStuckMs
|
|
1164
|
+
) {
|
|
1165
|
+
j.status = PERCGOV_SIGNAL_LIFECYCLE_V2.FAILED;
|
|
1166
|
+
j.updatedAt = t;
|
|
1167
|
+
if (!j.settledAt) j.settledAt = t;
|
|
1168
|
+
j.metadata.failReason = "auto-fail-stuck";
|
|
1169
|
+
flipped.push(j.id);
|
|
1170
|
+
}
|
|
1171
|
+
return { flipped, count: flipped.length };
|
|
1172
|
+
}
|
|
1173
|
+
export function getPerceptionGovStatsV2() {
|
|
1174
|
+
const profilesByStatus = {};
|
|
1175
|
+
for (const v of Object.values(PERCGOV_PROFILE_MATURITY_V2))
|
|
1176
|
+
profilesByStatus[v] = 0;
|
|
1177
|
+
for (const p of _percgovPsV2.values()) profilesByStatus[p.status]++;
|
|
1178
|
+
const signalsByStatus = {};
|
|
1179
|
+
for (const v of Object.values(PERCGOV_SIGNAL_LIFECYCLE_V2))
|
|
1180
|
+
signalsByStatus[v] = 0;
|
|
1181
|
+
for (const j of _percgovJsV2.values()) signalsByStatus[j.status]++;
|
|
1182
|
+
return {
|
|
1183
|
+
totalPercgovProfilesV2: _percgovPsV2.size,
|
|
1184
|
+
totalPercgovSignalsV2: _percgovJsV2.size,
|
|
1185
|
+
maxActivePercgovProfilesPerOwner: _percgovMaxActive,
|
|
1186
|
+
maxPendingPercgovSignalsPerProfile: _percgovMaxPending,
|
|
1187
|
+
percgovProfileIdleMs: _percgovIdleMs,
|
|
1188
|
+
percgovSignalStuckMs: _percgovStuckMs,
|
|
1189
|
+
profilesByStatus,
|
|
1190
|
+
signalsByStatus,
|
|
1191
|
+
};
|
|
1192
|
+
}
|