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/sync-manager.js
CHANGED
|
@@ -671,3 +671,339 @@ export function _resetStateSyncManagerV2() {
|
|
|
671
671
|
_resourceIdleMsV2 = SYNC_DEFAULT_RESOURCE_IDLE_MS;
|
|
672
672
|
_runStuckMsV2 = SYNC_DEFAULT_RUN_STUCK_MS;
|
|
673
673
|
}
|
|
674
|
+
|
|
675
|
+
// =====================================================================
|
|
676
|
+
// sync-manager V2 governance overlay (iter19)
|
|
677
|
+
// =====================================================================
|
|
678
|
+
export const SYNCGOV_PROFILE_MATURITY_V2 = Object.freeze({
|
|
679
|
+
PENDING: "pending",
|
|
680
|
+
ACTIVE: "active",
|
|
681
|
+
STALE: "stale",
|
|
682
|
+
ARCHIVED: "archived",
|
|
683
|
+
});
|
|
684
|
+
export const SYNCGOV_BATCH_LIFECYCLE_V2 = Object.freeze({
|
|
685
|
+
QUEUED: "queued",
|
|
686
|
+
REPLICATING: "replicating",
|
|
687
|
+
REPLICATED: "replicated",
|
|
688
|
+
FAILED: "failed",
|
|
689
|
+
CANCELLED: "cancelled",
|
|
690
|
+
});
|
|
691
|
+
const _syncgovPTrans = new Map([
|
|
692
|
+
[
|
|
693
|
+
SYNCGOV_PROFILE_MATURITY_V2.PENDING,
|
|
694
|
+
new Set([
|
|
695
|
+
SYNCGOV_PROFILE_MATURITY_V2.ACTIVE,
|
|
696
|
+
SYNCGOV_PROFILE_MATURITY_V2.ARCHIVED,
|
|
697
|
+
]),
|
|
698
|
+
],
|
|
699
|
+
[
|
|
700
|
+
SYNCGOV_PROFILE_MATURITY_V2.ACTIVE,
|
|
701
|
+
new Set([
|
|
702
|
+
SYNCGOV_PROFILE_MATURITY_V2.STALE,
|
|
703
|
+
SYNCGOV_PROFILE_MATURITY_V2.ARCHIVED,
|
|
704
|
+
]),
|
|
705
|
+
],
|
|
706
|
+
[
|
|
707
|
+
SYNCGOV_PROFILE_MATURITY_V2.STALE,
|
|
708
|
+
new Set([
|
|
709
|
+
SYNCGOV_PROFILE_MATURITY_V2.ACTIVE,
|
|
710
|
+
SYNCGOV_PROFILE_MATURITY_V2.ARCHIVED,
|
|
711
|
+
]),
|
|
712
|
+
],
|
|
713
|
+
[SYNCGOV_PROFILE_MATURITY_V2.ARCHIVED, new Set()],
|
|
714
|
+
]);
|
|
715
|
+
const _syncgovPTerminal = new Set([SYNCGOV_PROFILE_MATURITY_V2.ARCHIVED]);
|
|
716
|
+
const _syncgovJTrans = new Map([
|
|
717
|
+
[
|
|
718
|
+
SYNCGOV_BATCH_LIFECYCLE_V2.QUEUED,
|
|
719
|
+
new Set([
|
|
720
|
+
SYNCGOV_BATCH_LIFECYCLE_V2.REPLICATING,
|
|
721
|
+
SYNCGOV_BATCH_LIFECYCLE_V2.CANCELLED,
|
|
722
|
+
]),
|
|
723
|
+
],
|
|
724
|
+
[
|
|
725
|
+
SYNCGOV_BATCH_LIFECYCLE_V2.REPLICATING,
|
|
726
|
+
new Set([
|
|
727
|
+
SYNCGOV_BATCH_LIFECYCLE_V2.REPLICATED,
|
|
728
|
+
SYNCGOV_BATCH_LIFECYCLE_V2.FAILED,
|
|
729
|
+
SYNCGOV_BATCH_LIFECYCLE_V2.CANCELLED,
|
|
730
|
+
]),
|
|
731
|
+
],
|
|
732
|
+
[SYNCGOV_BATCH_LIFECYCLE_V2.REPLICATED, new Set()],
|
|
733
|
+
[SYNCGOV_BATCH_LIFECYCLE_V2.FAILED, new Set()],
|
|
734
|
+
[SYNCGOV_BATCH_LIFECYCLE_V2.CANCELLED, new Set()],
|
|
735
|
+
]);
|
|
736
|
+
const _syncgovPsV2 = new Map();
|
|
737
|
+
const _syncgovJsV2 = new Map();
|
|
738
|
+
let _syncgovMaxActive = 8,
|
|
739
|
+
_syncgovMaxPending = 20,
|
|
740
|
+
_syncgovIdleMs = 30 * 24 * 60 * 60 * 1000,
|
|
741
|
+
_syncgovStuckMs = 60 * 1000;
|
|
742
|
+
function _syncgovPos(n, label) {
|
|
743
|
+
const v = Math.floor(Number(n));
|
|
744
|
+
if (!Number.isFinite(v) || v <= 0)
|
|
745
|
+
throw new Error(`${label} must be positive integer`);
|
|
746
|
+
return v;
|
|
747
|
+
}
|
|
748
|
+
function _syncgovCheckP(from, to) {
|
|
749
|
+
const a = _syncgovPTrans.get(from);
|
|
750
|
+
if (!a || !a.has(to))
|
|
751
|
+
throw new Error(`invalid syncgov profile transition ${from} → ${to}`);
|
|
752
|
+
}
|
|
753
|
+
function _syncgovCheckJ(from, to) {
|
|
754
|
+
const a = _syncgovJTrans.get(from);
|
|
755
|
+
if (!a || !a.has(to))
|
|
756
|
+
throw new Error(`invalid syncgov batch transition ${from} → ${to}`);
|
|
757
|
+
}
|
|
758
|
+
function _syncgovCountActive(owner) {
|
|
759
|
+
let c = 0;
|
|
760
|
+
for (const p of _syncgovPsV2.values())
|
|
761
|
+
if (p.owner === owner && p.status === SYNCGOV_PROFILE_MATURITY_V2.ACTIVE)
|
|
762
|
+
c++;
|
|
763
|
+
return c;
|
|
764
|
+
}
|
|
765
|
+
function _syncgovCountPending(profileId) {
|
|
766
|
+
let c = 0;
|
|
767
|
+
for (const j of _syncgovJsV2.values())
|
|
768
|
+
if (
|
|
769
|
+
j.profileId === profileId &&
|
|
770
|
+
(j.status === SYNCGOV_BATCH_LIFECYCLE_V2.QUEUED ||
|
|
771
|
+
j.status === SYNCGOV_BATCH_LIFECYCLE_V2.REPLICATING)
|
|
772
|
+
)
|
|
773
|
+
c++;
|
|
774
|
+
return c;
|
|
775
|
+
}
|
|
776
|
+
export function setMaxActiveSyncgovProfilesPerOwnerV2(n) {
|
|
777
|
+
_syncgovMaxActive = _syncgovPos(n, "maxActiveSyncgovProfilesPerOwner");
|
|
778
|
+
}
|
|
779
|
+
export function getMaxActiveSyncgovProfilesPerOwnerV2() {
|
|
780
|
+
return _syncgovMaxActive;
|
|
781
|
+
}
|
|
782
|
+
export function setMaxPendingSyncgovBatchsPerProfileV2(n) {
|
|
783
|
+
_syncgovMaxPending = _syncgovPos(n, "maxPendingSyncgovBatchsPerProfile");
|
|
784
|
+
}
|
|
785
|
+
export function getMaxPendingSyncgovBatchsPerProfileV2() {
|
|
786
|
+
return _syncgovMaxPending;
|
|
787
|
+
}
|
|
788
|
+
export function setSyncgovProfileIdleMsV2(n) {
|
|
789
|
+
_syncgovIdleMs = _syncgovPos(n, "syncgovProfileIdleMs");
|
|
790
|
+
}
|
|
791
|
+
export function getSyncgovProfileIdleMsV2() {
|
|
792
|
+
return _syncgovIdleMs;
|
|
793
|
+
}
|
|
794
|
+
export function setSyncgovBatchStuckMsV2(n) {
|
|
795
|
+
_syncgovStuckMs = _syncgovPos(n, "syncgovBatchStuckMs");
|
|
796
|
+
}
|
|
797
|
+
export function getSyncgovBatchStuckMsV2() {
|
|
798
|
+
return _syncgovStuckMs;
|
|
799
|
+
}
|
|
800
|
+
export function _resetStateSyncManagerGovV2() {
|
|
801
|
+
_syncgovPsV2.clear();
|
|
802
|
+
_syncgovJsV2.clear();
|
|
803
|
+
_syncgovMaxActive = 8;
|
|
804
|
+
_syncgovMaxPending = 20;
|
|
805
|
+
_syncgovIdleMs = 30 * 24 * 60 * 60 * 1000;
|
|
806
|
+
_syncgovStuckMs = 60 * 1000;
|
|
807
|
+
}
|
|
808
|
+
export function registerSyncgovProfileV2({ id, owner, target, metadata } = {}) {
|
|
809
|
+
if (!id || !owner) throw new Error("id and owner required");
|
|
810
|
+
if (_syncgovPsV2.has(id))
|
|
811
|
+
throw new Error(`syncgov profile ${id} already exists`);
|
|
812
|
+
const now = Date.now();
|
|
813
|
+
const p = {
|
|
814
|
+
id,
|
|
815
|
+
owner,
|
|
816
|
+
target: target || "primary",
|
|
817
|
+
status: SYNCGOV_PROFILE_MATURITY_V2.PENDING,
|
|
818
|
+
createdAt: now,
|
|
819
|
+
updatedAt: now,
|
|
820
|
+
lastTouchedAt: now,
|
|
821
|
+
activatedAt: null,
|
|
822
|
+
archivedAt: null,
|
|
823
|
+
metadata: { ...(metadata || {}) },
|
|
824
|
+
};
|
|
825
|
+
_syncgovPsV2.set(id, p);
|
|
826
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
827
|
+
}
|
|
828
|
+
export function activateSyncgovProfileV2(id) {
|
|
829
|
+
const p = _syncgovPsV2.get(id);
|
|
830
|
+
if (!p) throw new Error(`syncgov profile ${id} not found`);
|
|
831
|
+
const isInitial = p.status === SYNCGOV_PROFILE_MATURITY_V2.PENDING;
|
|
832
|
+
_syncgovCheckP(p.status, SYNCGOV_PROFILE_MATURITY_V2.ACTIVE);
|
|
833
|
+
if (isInitial && _syncgovCountActive(p.owner) >= _syncgovMaxActive)
|
|
834
|
+
throw new Error(`max active syncgov profiles for owner ${p.owner} reached`);
|
|
835
|
+
const now = Date.now();
|
|
836
|
+
p.status = SYNCGOV_PROFILE_MATURITY_V2.ACTIVE;
|
|
837
|
+
p.updatedAt = now;
|
|
838
|
+
p.lastTouchedAt = now;
|
|
839
|
+
if (!p.activatedAt) p.activatedAt = now;
|
|
840
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
841
|
+
}
|
|
842
|
+
export function staleSyncgovProfileV2(id) {
|
|
843
|
+
const p = _syncgovPsV2.get(id);
|
|
844
|
+
if (!p) throw new Error(`syncgov profile ${id} not found`);
|
|
845
|
+
_syncgovCheckP(p.status, SYNCGOV_PROFILE_MATURITY_V2.STALE);
|
|
846
|
+
p.status = SYNCGOV_PROFILE_MATURITY_V2.STALE;
|
|
847
|
+
p.updatedAt = Date.now();
|
|
848
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
849
|
+
}
|
|
850
|
+
export function archiveSyncgovProfileV2(id) {
|
|
851
|
+
const p = _syncgovPsV2.get(id);
|
|
852
|
+
if (!p) throw new Error(`syncgov profile ${id} not found`);
|
|
853
|
+
_syncgovCheckP(p.status, SYNCGOV_PROFILE_MATURITY_V2.ARCHIVED);
|
|
854
|
+
const now = Date.now();
|
|
855
|
+
p.status = SYNCGOV_PROFILE_MATURITY_V2.ARCHIVED;
|
|
856
|
+
p.updatedAt = now;
|
|
857
|
+
if (!p.archivedAt) p.archivedAt = now;
|
|
858
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
859
|
+
}
|
|
860
|
+
export function touchSyncgovProfileV2(id) {
|
|
861
|
+
const p = _syncgovPsV2.get(id);
|
|
862
|
+
if (!p) throw new Error(`syncgov profile ${id} not found`);
|
|
863
|
+
if (_syncgovPTerminal.has(p.status))
|
|
864
|
+
throw new Error(`cannot touch terminal syncgov profile ${id}`);
|
|
865
|
+
const now = Date.now();
|
|
866
|
+
p.lastTouchedAt = now;
|
|
867
|
+
p.updatedAt = now;
|
|
868
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
869
|
+
}
|
|
870
|
+
export function getSyncgovProfileV2(id) {
|
|
871
|
+
const p = _syncgovPsV2.get(id);
|
|
872
|
+
if (!p) return null;
|
|
873
|
+
return { ...p, metadata: { ...p.metadata } };
|
|
874
|
+
}
|
|
875
|
+
export function listSyncgovProfilesV2() {
|
|
876
|
+
return [..._syncgovPsV2.values()].map((p) => ({
|
|
877
|
+
...p,
|
|
878
|
+
metadata: { ...p.metadata },
|
|
879
|
+
}));
|
|
880
|
+
}
|
|
881
|
+
export function createSyncgovBatchV2({ id, profileId, scope, metadata } = {}) {
|
|
882
|
+
if (!id || !profileId) throw new Error("id and profileId required");
|
|
883
|
+
if (_syncgovJsV2.has(id))
|
|
884
|
+
throw new Error(`syncgov batch ${id} already exists`);
|
|
885
|
+
if (!_syncgovPsV2.has(profileId))
|
|
886
|
+
throw new Error(`syncgov profile ${profileId} not found`);
|
|
887
|
+
if (_syncgovCountPending(profileId) >= _syncgovMaxPending)
|
|
888
|
+
throw new Error(
|
|
889
|
+
`max pending syncgov batchs for profile ${profileId} reached`,
|
|
890
|
+
);
|
|
891
|
+
const now = Date.now();
|
|
892
|
+
const j = {
|
|
893
|
+
id,
|
|
894
|
+
profileId,
|
|
895
|
+
scope: scope || "",
|
|
896
|
+
status: SYNCGOV_BATCH_LIFECYCLE_V2.QUEUED,
|
|
897
|
+
createdAt: now,
|
|
898
|
+
updatedAt: now,
|
|
899
|
+
startedAt: null,
|
|
900
|
+
settledAt: null,
|
|
901
|
+
metadata: { ...(metadata || {}) },
|
|
902
|
+
};
|
|
903
|
+
_syncgovJsV2.set(id, j);
|
|
904
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
905
|
+
}
|
|
906
|
+
export function replicatingSyncgovBatchV2(id) {
|
|
907
|
+
const j = _syncgovJsV2.get(id);
|
|
908
|
+
if (!j) throw new Error(`syncgov batch ${id} not found`);
|
|
909
|
+
_syncgovCheckJ(j.status, SYNCGOV_BATCH_LIFECYCLE_V2.REPLICATING);
|
|
910
|
+
const now = Date.now();
|
|
911
|
+
j.status = SYNCGOV_BATCH_LIFECYCLE_V2.REPLICATING;
|
|
912
|
+
j.updatedAt = now;
|
|
913
|
+
if (!j.startedAt) j.startedAt = now;
|
|
914
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
915
|
+
}
|
|
916
|
+
export function completeBatchSyncgovV2(id) {
|
|
917
|
+
const j = _syncgovJsV2.get(id);
|
|
918
|
+
if (!j) throw new Error(`syncgov batch ${id} not found`);
|
|
919
|
+
_syncgovCheckJ(j.status, SYNCGOV_BATCH_LIFECYCLE_V2.REPLICATED);
|
|
920
|
+
const now = Date.now();
|
|
921
|
+
j.status = SYNCGOV_BATCH_LIFECYCLE_V2.REPLICATED;
|
|
922
|
+
j.updatedAt = now;
|
|
923
|
+
if (!j.settledAt) j.settledAt = now;
|
|
924
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
925
|
+
}
|
|
926
|
+
export function failSyncgovBatchV2(id, reason) {
|
|
927
|
+
const j = _syncgovJsV2.get(id);
|
|
928
|
+
if (!j) throw new Error(`syncgov batch ${id} not found`);
|
|
929
|
+
_syncgovCheckJ(j.status, SYNCGOV_BATCH_LIFECYCLE_V2.FAILED);
|
|
930
|
+
const now = Date.now();
|
|
931
|
+
j.status = SYNCGOV_BATCH_LIFECYCLE_V2.FAILED;
|
|
932
|
+
j.updatedAt = now;
|
|
933
|
+
if (!j.settledAt) j.settledAt = now;
|
|
934
|
+
if (reason) j.metadata.failReason = String(reason);
|
|
935
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
936
|
+
}
|
|
937
|
+
export function cancelSyncgovBatchV2(id, reason) {
|
|
938
|
+
const j = _syncgovJsV2.get(id);
|
|
939
|
+
if (!j) throw new Error(`syncgov batch ${id} not found`);
|
|
940
|
+
_syncgovCheckJ(j.status, SYNCGOV_BATCH_LIFECYCLE_V2.CANCELLED);
|
|
941
|
+
const now = Date.now();
|
|
942
|
+
j.status = SYNCGOV_BATCH_LIFECYCLE_V2.CANCELLED;
|
|
943
|
+
j.updatedAt = now;
|
|
944
|
+
if (!j.settledAt) j.settledAt = now;
|
|
945
|
+
if (reason) j.metadata.cancelReason = String(reason);
|
|
946
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
947
|
+
}
|
|
948
|
+
export function getSyncgovBatchV2(id) {
|
|
949
|
+
const j = _syncgovJsV2.get(id);
|
|
950
|
+
if (!j) return null;
|
|
951
|
+
return { ...j, metadata: { ...j.metadata } };
|
|
952
|
+
}
|
|
953
|
+
export function listSyncgovBatchsV2() {
|
|
954
|
+
return [..._syncgovJsV2.values()].map((j) => ({
|
|
955
|
+
...j,
|
|
956
|
+
metadata: { ...j.metadata },
|
|
957
|
+
}));
|
|
958
|
+
}
|
|
959
|
+
export function autoStaleIdleSyncgovProfilesV2({ now } = {}) {
|
|
960
|
+
const t = now ?? Date.now();
|
|
961
|
+
const flipped = [];
|
|
962
|
+
for (const p of _syncgovPsV2.values())
|
|
963
|
+
if (
|
|
964
|
+
p.status === SYNCGOV_PROFILE_MATURITY_V2.ACTIVE &&
|
|
965
|
+
t - p.lastTouchedAt >= _syncgovIdleMs
|
|
966
|
+
) {
|
|
967
|
+
p.status = SYNCGOV_PROFILE_MATURITY_V2.STALE;
|
|
968
|
+
p.updatedAt = t;
|
|
969
|
+
flipped.push(p.id);
|
|
970
|
+
}
|
|
971
|
+
return { flipped, count: flipped.length };
|
|
972
|
+
}
|
|
973
|
+
export function autoFailStuckSyncgovBatchsV2({ now } = {}) {
|
|
974
|
+
const t = now ?? Date.now();
|
|
975
|
+
const flipped = [];
|
|
976
|
+
for (const j of _syncgovJsV2.values())
|
|
977
|
+
if (
|
|
978
|
+
j.status === SYNCGOV_BATCH_LIFECYCLE_V2.REPLICATING &&
|
|
979
|
+
j.startedAt != null &&
|
|
980
|
+
t - j.startedAt >= _syncgovStuckMs
|
|
981
|
+
) {
|
|
982
|
+
j.status = SYNCGOV_BATCH_LIFECYCLE_V2.FAILED;
|
|
983
|
+
j.updatedAt = t;
|
|
984
|
+
if (!j.settledAt) j.settledAt = t;
|
|
985
|
+
j.metadata.failReason = "auto-fail-stuck";
|
|
986
|
+
flipped.push(j.id);
|
|
987
|
+
}
|
|
988
|
+
return { flipped, count: flipped.length };
|
|
989
|
+
}
|
|
990
|
+
export function getSyncManagerGovStatsV2() {
|
|
991
|
+
const profilesByStatus = {};
|
|
992
|
+
for (const v of Object.values(SYNCGOV_PROFILE_MATURITY_V2))
|
|
993
|
+
profilesByStatus[v] = 0;
|
|
994
|
+
for (const p of _syncgovPsV2.values()) profilesByStatus[p.status]++;
|
|
995
|
+
const batchsByStatus = {};
|
|
996
|
+
for (const v of Object.values(SYNCGOV_BATCH_LIFECYCLE_V2))
|
|
997
|
+
batchsByStatus[v] = 0;
|
|
998
|
+
for (const j of _syncgovJsV2.values()) batchsByStatus[j.status]++;
|
|
999
|
+
return {
|
|
1000
|
+
totalSyncgovProfilesV2: _syncgovPsV2.size,
|
|
1001
|
+
totalSyncgovBatchsV2: _syncgovJsV2.size,
|
|
1002
|
+
maxActiveSyncgovProfilesPerOwner: _syncgovMaxActive,
|
|
1003
|
+
maxPendingSyncgovBatchsPerProfile: _syncgovMaxPending,
|
|
1004
|
+
syncgovProfileIdleMs: _syncgovIdleMs,
|
|
1005
|
+
syncgovBatchStuckMs: _syncgovStuckMs,
|
|
1006
|
+
profilesByStatus,
|
|
1007
|
+
batchsByStatus,
|
|
1008
|
+
};
|
|
1009
|
+
}
|