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
|
@@ -688,3 +688,330 @@ export function _resetStatePermanentMemoryV2() {
|
|
|
688
688
|
_pinIdleMsV2 = PERMMEM_DEFAULT_PIN_IDLE_MS;
|
|
689
689
|
_jobStuckMsV2 = PERMMEM_DEFAULT_JOB_STUCK_MS;
|
|
690
690
|
}
|
|
691
|
+
|
|
692
|
+
// =====================================================================
|
|
693
|
+
// permanent-memory V2 governance overlay (iter23)
|
|
694
|
+
// =====================================================================
|
|
695
|
+
export const PMGOV_PROFILE_MATURITY_V2 = Object.freeze({
|
|
696
|
+
PENDING: "pending",
|
|
697
|
+
ACTIVE: "active",
|
|
698
|
+
DORMANT: "dormant",
|
|
699
|
+
ARCHIVED: "archived",
|
|
700
|
+
});
|
|
701
|
+
export const PMGOV_PIN_LIFECYCLE_V2 = Object.freeze({
|
|
702
|
+
QUEUED: "queued",
|
|
703
|
+
PINNING: "pinning",
|
|
704
|
+
PINNED: "pinned",
|
|
705
|
+
FAILED: "failed",
|
|
706
|
+
CANCELLED: "cancelled",
|
|
707
|
+
});
|
|
708
|
+
const _pmgovPTrans = new Map([
|
|
709
|
+
[
|
|
710
|
+
PMGOV_PROFILE_MATURITY_V2.PENDING,
|
|
711
|
+
new Set([
|
|
712
|
+
PMGOV_PROFILE_MATURITY_V2.ACTIVE,
|
|
713
|
+
PMGOV_PROFILE_MATURITY_V2.ARCHIVED,
|
|
714
|
+
]),
|
|
715
|
+
],
|
|
716
|
+
[
|
|
717
|
+
PMGOV_PROFILE_MATURITY_V2.ACTIVE,
|
|
718
|
+
new Set([
|
|
719
|
+
PMGOV_PROFILE_MATURITY_V2.DORMANT,
|
|
720
|
+
PMGOV_PROFILE_MATURITY_V2.ARCHIVED,
|
|
721
|
+
]),
|
|
722
|
+
],
|
|
723
|
+
[
|
|
724
|
+
PMGOV_PROFILE_MATURITY_V2.DORMANT,
|
|
725
|
+
new Set([
|
|
726
|
+
PMGOV_PROFILE_MATURITY_V2.ACTIVE,
|
|
727
|
+
PMGOV_PROFILE_MATURITY_V2.ARCHIVED,
|
|
728
|
+
]),
|
|
729
|
+
],
|
|
730
|
+
[PMGOV_PROFILE_MATURITY_V2.ARCHIVED, new Set()],
|
|
731
|
+
]);
|
|
732
|
+
const _pmgovPTerminal = new Set([PMGOV_PROFILE_MATURITY_V2.ARCHIVED]);
|
|
733
|
+
const _pmgovJTrans = new Map([
|
|
734
|
+
[
|
|
735
|
+
PMGOV_PIN_LIFECYCLE_V2.QUEUED,
|
|
736
|
+
new Set([PMGOV_PIN_LIFECYCLE_V2.PINNING, PMGOV_PIN_LIFECYCLE_V2.CANCELLED]),
|
|
737
|
+
],
|
|
738
|
+
[
|
|
739
|
+
PMGOV_PIN_LIFECYCLE_V2.PINNING,
|
|
740
|
+
new Set([
|
|
741
|
+
PMGOV_PIN_LIFECYCLE_V2.PINNED,
|
|
742
|
+
PMGOV_PIN_LIFECYCLE_V2.FAILED,
|
|
743
|
+
PMGOV_PIN_LIFECYCLE_V2.CANCELLED,
|
|
744
|
+
]),
|
|
745
|
+
],
|
|
746
|
+
[PMGOV_PIN_LIFECYCLE_V2.PINNED, new Set()],
|
|
747
|
+
[PMGOV_PIN_LIFECYCLE_V2.FAILED, new Set()],
|
|
748
|
+
[PMGOV_PIN_LIFECYCLE_V2.CANCELLED, new Set()],
|
|
749
|
+
]);
|
|
750
|
+
const _pmgovPsV2 = new Map();
|
|
751
|
+
const _pmgovJsV2 = new Map();
|
|
752
|
+
let _pmgovMaxActive = 10,
|
|
753
|
+
_pmgovMaxPending = 30,
|
|
754
|
+
_pmgovIdleMs = 30 * 24 * 60 * 60 * 1000,
|
|
755
|
+
_pmgovStuckMs = 60 * 1000;
|
|
756
|
+
function _pmgovPos(n, label) {
|
|
757
|
+
const v = Math.floor(Number(n));
|
|
758
|
+
if (!Number.isFinite(v) || v <= 0)
|
|
759
|
+
throw new Error(`${label} must be positive integer`);
|
|
760
|
+
return v;
|
|
761
|
+
}
|
|
762
|
+
function _pmgovCheckP(from, to) {
|
|
763
|
+
const a = _pmgovPTrans.get(from);
|
|
764
|
+
if (!a || !a.has(to))
|
|
765
|
+
throw new Error(`invalid pmgov profile transition ${from} → ${to}`);
|
|
766
|
+
}
|
|
767
|
+
function _pmgovCheckJ(from, to) {
|
|
768
|
+
const a = _pmgovJTrans.get(from);
|
|
769
|
+
if (!a || !a.has(to))
|
|
770
|
+
throw new Error(`invalid pmgov pin transition ${from} → ${to}`);
|
|
771
|
+
}
|
|
772
|
+
function _pmgovCountActive(owner) {
|
|
773
|
+
let c = 0;
|
|
774
|
+
for (const p of _pmgovPsV2.values())
|
|
775
|
+
if (p.owner === owner && p.status === PMGOV_PROFILE_MATURITY_V2.ACTIVE) c++;
|
|
776
|
+
return c;
|
|
777
|
+
}
|
|
778
|
+
function _pmgovCountPending(profileId) {
|
|
779
|
+
let c = 0;
|
|
780
|
+
for (const j of _pmgovJsV2.values())
|
|
781
|
+
if (
|
|
782
|
+
j.profileId === profileId &&
|
|
783
|
+
(j.status === PMGOV_PIN_LIFECYCLE_V2.QUEUED ||
|
|
784
|
+
j.status === PMGOV_PIN_LIFECYCLE_V2.PINNING)
|
|
785
|
+
)
|
|
786
|
+
c++;
|
|
787
|
+
return c;
|
|
788
|
+
}
|
|
789
|
+
export function setMaxActivePmgovProfilesPerOwnerV2(n) {
|
|
790
|
+
_pmgovMaxActive = _pmgovPos(n, "maxActivePmgovProfilesPerOwner");
|
|
791
|
+
}
|
|
792
|
+
export function getMaxActivePmgovProfilesPerOwnerV2() {
|
|
793
|
+
return _pmgovMaxActive;
|
|
794
|
+
}
|
|
795
|
+
export function setMaxPendingPmgovPinsPerProfileV2(n) {
|
|
796
|
+
_pmgovMaxPending = _pmgovPos(n, "maxPendingPmgovPinsPerProfile");
|
|
797
|
+
}
|
|
798
|
+
export function getMaxPendingPmgovPinsPerProfileV2() {
|
|
799
|
+
return _pmgovMaxPending;
|
|
800
|
+
}
|
|
801
|
+
export function setPmgovProfileIdleMsV2(n) {
|
|
802
|
+
_pmgovIdleMs = _pmgovPos(n, "pmgovProfileIdleMs");
|
|
803
|
+
}
|
|
804
|
+
export function getPmgovProfileIdleMsV2() {
|
|
805
|
+
return _pmgovIdleMs;
|
|
806
|
+
}
|
|
807
|
+
export function setPmgovPinStuckMsV2(n) {
|
|
808
|
+
_pmgovStuckMs = _pmgovPos(n, "pmgovPinStuckMs");
|
|
809
|
+
}
|
|
810
|
+
export function getPmgovPinStuckMsV2() {
|
|
811
|
+
return _pmgovStuckMs;
|
|
812
|
+
}
|
|
813
|
+
export function _resetStatePermanentMemoryGovV2() {
|
|
814
|
+
_pmgovPsV2.clear();
|
|
815
|
+
_pmgovJsV2.clear();
|
|
816
|
+
_pmgovMaxActive = 10;
|
|
817
|
+
_pmgovMaxPending = 30;
|
|
818
|
+
_pmgovIdleMs = 30 * 24 * 60 * 60 * 1000;
|
|
819
|
+
_pmgovStuckMs = 60 * 1000;
|
|
820
|
+
}
|
|
821
|
+
export function registerPmgovProfileV2({ id, owner, bucket, metadata } = {}) {
|
|
822
|
+
if (!id || !owner) throw new Error("id and owner required");
|
|
823
|
+
if (_pmgovPsV2.has(id)) throw new Error(`pmgov profile ${id} already exists`);
|
|
824
|
+
const now = Date.now();
|
|
825
|
+
const p = {
|
|
826
|
+
id,
|
|
827
|
+
owner,
|
|
828
|
+
bucket: bucket || "default",
|
|
829
|
+
status: PMGOV_PROFILE_MATURITY_V2.PENDING,
|
|
830
|
+
createdAt: now,
|
|
831
|
+
updatedAt: now,
|
|
832
|
+
lastTouchedAt: now,
|
|
833
|
+
activatedAt: null,
|
|
834
|
+
archivedAt: null,
|
|
835
|
+
metadata: { ...(metadata || {}) },
|
|
836
|
+
};
|
|
837
|
+
_pmgovPsV2.set(id, p);
|
|
838
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
839
|
+
}
|
|
840
|
+
export function activatePmgovProfileV2(id) {
|
|
841
|
+
const p = _pmgovPsV2.get(id);
|
|
842
|
+
if (!p) throw new Error(`pmgov profile ${id} not found`);
|
|
843
|
+
const isInitial = p.status === PMGOV_PROFILE_MATURITY_V2.PENDING;
|
|
844
|
+
_pmgovCheckP(p.status, PMGOV_PROFILE_MATURITY_V2.ACTIVE);
|
|
845
|
+
if (isInitial && _pmgovCountActive(p.owner) >= _pmgovMaxActive)
|
|
846
|
+
throw new Error(`max active pmgov profiles for owner ${p.owner} reached`);
|
|
847
|
+
const now = Date.now();
|
|
848
|
+
p.status = PMGOV_PROFILE_MATURITY_V2.ACTIVE;
|
|
849
|
+
p.updatedAt = now;
|
|
850
|
+
p.lastTouchedAt = now;
|
|
851
|
+
if (!p.activatedAt) p.activatedAt = now;
|
|
852
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
853
|
+
}
|
|
854
|
+
export function dormantPmgovProfileV2(id) {
|
|
855
|
+
const p = _pmgovPsV2.get(id);
|
|
856
|
+
if (!p) throw new Error(`pmgov profile ${id} not found`);
|
|
857
|
+
_pmgovCheckP(p.status, PMGOV_PROFILE_MATURITY_V2.DORMANT);
|
|
858
|
+
p.status = PMGOV_PROFILE_MATURITY_V2.DORMANT;
|
|
859
|
+
p.updatedAt = Date.now();
|
|
860
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
861
|
+
}
|
|
862
|
+
export function archivePmgovProfileV2(id) {
|
|
863
|
+
const p = _pmgovPsV2.get(id);
|
|
864
|
+
if (!p) throw new Error(`pmgov profile ${id} not found`);
|
|
865
|
+
_pmgovCheckP(p.status, PMGOV_PROFILE_MATURITY_V2.ARCHIVED);
|
|
866
|
+
const now = Date.now();
|
|
867
|
+
p.status = PMGOV_PROFILE_MATURITY_V2.ARCHIVED;
|
|
868
|
+
p.updatedAt = now;
|
|
869
|
+
if (!p.archivedAt) p.archivedAt = now;
|
|
870
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
871
|
+
}
|
|
872
|
+
export function touchPmgovProfileV2(id) {
|
|
873
|
+
const p = _pmgovPsV2.get(id);
|
|
874
|
+
if (!p) throw new Error(`pmgov profile ${id} not found`);
|
|
875
|
+
if (_pmgovPTerminal.has(p.status))
|
|
876
|
+
throw new Error(`cannot touch terminal pmgov profile ${id}`);
|
|
877
|
+
const now = Date.now();
|
|
878
|
+
p.lastTouchedAt = now;
|
|
879
|
+
p.updatedAt = now;
|
|
880
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
881
|
+
}
|
|
882
|
+
export function getPmgovProfileV2(id) {
|
|
883
|
+
const p = _pmgovPsV2.get(id);
|
|
884
|
+
if (!p) return null;
|
|
885
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
886
|
+
}
|
|
887
|
+
export function listPmgovProfilesV2() {
|
|
888
|
+
return [..._pmgovPsV2.values()].map((p) => ({
|
|
889
|
+
...p,
|
|
890
|
+
metadata: { ...p.metadata },
|
|
891
|
+
}));
|
|
892
|
+
}
|
|
893
|
+
export function createPmgovPinV2({ id, profileId, key, metadata } = {}) {
|
|
894
|
+
if (!id || !profileId) throw new Error("id and profileId required");
|
|
895
|
+
if (_pmgovJsV2.has(id)) throw new Error(`pmgov pin ${id} already exists`);
|
|
896
|
+
if (!_pmgovPsV2.has(profileId))
|
|
897
|
+
throw new Error(`pmgov profile ${profileId} not found`);
|
|
898
|
+
if (_pmgovCountPending(profileId) >= _pmgovMaxPending)
|
|
899
|
+
throw new Error(`max pending pmgov pins for profile ${profileId} reached`);
|
|
900
|
+
const now = Date.now();
|
|
901
|
+
const j = {
|
|
902
|
+
id,
|
|
903
|
+
profileId,
|
|
904
|
+
key: key || "",
|
|
905
|
+
status: PMGOV_PIN_LIFECYCLE_V2.QUEUED,
|
|
906
|
+
createdAt: now,
|
|
907
|
+
updatedAt: now,
|
|
908
|
+
startedAt: null,
|
|
909
|
+
settledAt: null,
|
|
910
|
+
metadata: { ...(metadata || {}) },
|
|
911
|
+
};
|
|
912
|
+
_pmgovJsV2.set(id, j);
|
|
913
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
914
|
+
}
|
|
915
|
+
export function pinningPmgovPinV2(id) {
|
|
916
|
+
const j = _pmgovJsV2.get(id);
|
|
917
|
+
if (!j) throw new Error(`pmgov pin ${id} not found`);
|
|
918
|
+
_pmgovCheckJ(j.status, PMGOV_PIN_LIFECYCLE_V2.PINNING);
|
|
919
|
+
const now = Date.now();
|
|
920
|
+
j.status = PMGOV_PIN_LIFECYCLE_V2.PINNING;
|
|
921
|
+
j.updatedAt = now;
|
|
922
|
+
if (!j.startedAt) j.startedAt = now;
|
|
923
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
924
|
+
}
|
|
925
|
+
export function completePinPmgovV2(id) {
|
|
926
|
+
const j = _pmgovJsV2.get(id);
|
|
927
|
+
if (!j) throw new Error(`pmgov pin ${id} not found`);
|
|
928
|
+
_pmgovCheckJ(j.status, PMGOV_PIN_LIFECYCLE_V2.PINNED);
|
|
929
|
+
const now = Date.now();
|
|
930
|
+
j.status = PMGOV_PIN_LIFECYCLE_V2.PINNED;
|
|
931
|
+
j.updatedAt = now;
|
|
932
|
+
if (!j.settledAt) j.settledAt = now;
|
|
933
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
934
|
+
}
|
|
935
|
+
export function failPmgovPinV2(id, reason) {
|
|
936
|
+
const j = _pmgovJsV2.get(id);
|
|
937
|
+
if (!j) throw new Error(`pmgov pin ${id} not found`);
|
|
938
|
+
_pmgovCheckJ(j.status, PMGOV_PIN_LIFECYCLE_V2.FAILED);
|
|
939
|
+
const now = Date.now();
|
|
940
|
+
j.status = PMGOV_PIN_LIFECYCLE_V2.FAILED;
|
|
941
|
+
j.updatedAt = now;
|
|
942
|
+
if (!j.settledAt) j.settledAt = now;
|
|
943
|
+
if (reason) j.metadata.failReason = String(reason);
|
|
944
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
945
|
+
}
|
|
946
|
+
export function cancelPmgovPinV2(id, reason) {
|
|
947
|
+
const j = _pmgovJsV2.get(id);
|
|
948
|
+
if (!j) throw new Error(`pmgov pin ${id} not found`);
|
|
949
|
+
_pmgovCheckJ(j.status, PMGOV_PIN_LIFECYCLE_V2.CANCELLED);
|
|
950
|
+
const now = Date.now();
|
|
951
|
+
j.status = PMGOV_PIN_LIFECYCLE_V2.CANCELLED;
|
|
952
|
+
j.updatedAt = now;
|
|
953
|
+
if (!j.settledAt) j.settledAt = now;
|
|
954
|
+
if (reason) j.metadata.cancelReason = String(reason);
|
|
955
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
956
|
+
}
|
|
957
|
+
export function getPmgovPinV2(id) {
|
|
958
|
+
const j = _pmgovJsV2.get(id);
|
|
959
|
+
if (!j) return null;
|
|
960
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
961
|
+
}
|
|
962
|
+
export function listPmgovPinsV2() {
|
|
963
|
+
return [..._pmgovJsV2.values()].map((j) => ({
|
|
964
|
+
...j,
|
|
965
|
+
metadata: { ...j.metadata },
|
|
966
|
+
}));
|
|
967
|
+
}
|
|
968
|
+
export function autoDormantIdlePmgovProfilesV2({ now } = {}) {
|
|
969
|
+
const t = now ?? Date.now();
|
|
970
|
+
const flipped = [];
|
|
971
|
+
for (const p of _pmgovPsV2.values())
|
|
972
|
+
if (
|
|
973
|
+
p.status === PMGOV_PROFILE_MATURITY_V2.ACTIVE &&
|
|
974
|
+
t - p.lastTouchedAt >= _pmgovIdleMs
|
|
975
|
+
) {
|
|
976
|
+
p.status = PMGOV_PROFILE_MATURITY_V2.DORMANT;
|
|
977
|
+
p.updatedAt = t;
|
|
978
|
+
flipped.push(p.id);
|
|
979
|
+
}
|
|
980
|
+
return { flipped, count: flipped.length };
|
|
981
|
+
}
|
|
982
|
+
export function autoFailStuckPmgovPinsV2({ now } = {}) {
|
|
983
|
+
const t = now ?? Date.now();
|
|
984
|
+
const flipped = [];
|
|
985
|
+
for (const j of _pmgovJsV2.values())
|
|
986
|
+
if (
|
|
987
|
+
j.status === PMGOV_PIN_LIFECYCLE_V2.PINNING &&
|
|
988
|
+
j.startedAt != null &&
|
|
989
|
+
t - j.startedAt >= _pmgovStuckMs
|
|
990
|
+
) {
|
|
991
|
+
j.status = PMGOV_PIN_LIFECYCLE_V2.FAILED;
|
|
992
|
+
j.updatedAt = t;
|
|
993
|
+
if (!j.settledAt) j.settledAt = t;
|
|
994
|
+
j.metadata.failReason = "auto-fail-stuck";
|
|
995
|
+
flipped.push(j.id);
|
|
996
|
+
}
|
|
997
|
+
return { flipped, count: flipped.length };
|
|
998
|
+
}
|
|
999
|
+
export function getPermanentMemoryGovStatsV2() {
|
|
1000
|
+
const profilesByStatus = {};
|
|
1001
|
+
for (const v of Object.values(PMGOV_PROFILE_MATURITY_V2))
|
|
1002
|
+
profilesByStatus[v] = 0;
|
|
1003
|
+
for (const p of _pmgovPsV2.values()) profilesByStatus[p.status]++;
|
|
1004
|
+
const pinsByStatus = {};
|
|
1005
|
+
for (const v of Object.values(PMGOV_PIN_LIFECYCLE_V2)) pinsByStatus[v] = 0;
|
|
1006
|
+
for (const j of _pmgovJsV2.values()) pinsByStatus[j.status]++;
|
|
1007
|
+
return {
|
|
1008
|
+
totalPmgovProfilesV2: _pmgovPsV2.size,
|
|
1009
|
+
totalPmgovPinsV2: _pmgovJsV2.size,
|
|
1010
|
+
maxActivePmgovProfilesPerOwner: _pmgovMaxActive,
|
|
1011
|
+
maxPendingPmgovPinsPerProfile: _pmgovMaxPending,
|
|
1012
|
+
pmgovProfileIdleMs: _pmgovIdleMs,
|
|
1013
|
+
pmgovPinStuckMs: _pmgovStuckMs,
|
|
1014
|
+
profilesByStatus,
|
|
1015
|
+
pinsByStatus,
|
|
1016
|
+
};
|
|
1017
|
+
}
|