chainlesschain 0.145.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.
Files changed (113) hide show
  1. package/package.json +1 -1
  2. package/src/commands/activitypub.js +207 -0
  3. package/src/commands/agent-network.js +217 -0
  4. package/src/commands/automation.js +201 -0
  5. package/src/commands/bi.js +203 -0
  6. package/src/commands/browse.js +213 -0
  7. package/src/commands/codegen.js +207 -0
  8. package/src/commands/collab.js +211 -0
  9. package/src/commands/compliance.js +410 -0
  10. package/src/commands/cowork.js +203 -0
  11. package/src/commands/dbevo.js +227 -0
  12. package/src/commands/dev.js +207 -0
  13. package/src/commands/did-v2.js +217 -0
  14. package/src/commands/did.js +221 -0
  15. package/src/commands/dlp.js +213 -0
  16. package/src/commands/evomap.js +205 -0
  17. package/src/commands/export.js +213 -0
  18. package/src/commands/federation.js +209 -0
  19. package/src/commands/fusion.js +205 -0
  20. package/src/commands/governance.js +209 -0
  21. package/src/commands/hook.js +209 -0
  22. package/src/commands/import.js +209 -0
  23. package/src/commands/infra.js +203 -0
  24. package/src/commands/instinct.js +209 -0
  25. package/src/commands/ipfs.js +207 -0
  26. package/src/commands/llm.js +217 -0
  27. package/src/commands/matrix.js +207 -0
  28. package/src/commands/mcp.js +217 -0
  29. package/src/commands/memory.js +209 -0
  30. package/src/commands/multimodal.js +203 -0
  31. package/src/commands/nlprog.js +225 -0
  32. package/src/commands/nostr.js +209 -0
  33. package/src/commands/note.js +205 -0
  34. package/src/commands/ops.js +219 -0
  35. package/src/commands/org.js +209 -0
  36. package/src/commands/p2p.js +209 -0
  37. package/src/commands/perception.js +209 -0
  38. package/src/commands/permmem.js +203 -0
  39. package/src/commands/plugin-ecosystem.js +209 -0
  40. package/src/commands/pqc.js +213 -0
  41. package/src/commands/quantization.js +207 -0
  42. package/src/commands/rcache.js +205 -0
  43. package/src/commands/recommend.js +233 -0
  44. package/src/commands/runtime.js +205 -0
  45. package/src/commands/scim.js +209 -0
  46. package/src/commands/session.js +209 -0
  47. package/src/commands/skill.js +207 -0
  48. package/src/commands/social.js +201 -0
  49. package/src/commands/sso.js +209 -0
  50. package/src/commands/sync.js +209 -0
  51. package/src/commands/tech.js +209 -0
  52. package/src/commands/tenant.js +217 -0
  53. package/src/commands/tokens.js +209 -0
  54. package/src/commands/trust.js +217 -0
  55. package/src/commands/wallet.js +209 -0
  56. package/src/commands/workflow.js +203 -0
  57. package/src/index.js +140 -0
  58. package/src/lib/activitypub-bridge.js +334 -0
  59. package/src/lib/agent-network.js +341 -0
  60. package/src/lib/aiops.js +346 -0
  61. package/src/lib/automation-engine.js +335 -0
  62. package/src/lib/autonomous-developer.js +332 -0
  63. package/src/lib/bi-engine.js +333 -0
  64. package/src/lib/browser-automation.js +334 -0
  65. package/src/lib/code-agent.js +339 -0
  66. package/src/lib/collaboration-governance.js +334 -0
  67. package/src/lib/community-governance.js +346 -0
  68. package/src/lib/content-recommendation.js +351 -0
  69. package/src/lib/cowork-share.js +338 -0
  70. package/src/lib/dbevo.js +351 -0
  71. package/src/lib/decentral-infra.js +330 -0
  72. package/src/lib/did-manager.js +341 -0
  73. package/src/lib/did-v2-manager.js +341 -0
  74. package/src/lib/dlp-engine.js +339 -0
  75. package/src/lib/evomap-governance.js +334 -0
  76. package/src/lib/federation-hardening.js +340 -0
  77. package/src/lib/hook-manager.js +341 -0
  78. package/src/lib/instinct-manager.js +346 -0
  79. package/src/lib/ipfs-storage.js +334 -0
  80. package/src/lib/knowledge-exporter.js +341 -0
  81. package/src/lib/knowledge-importer.js +341 -0
  82. package/src/lib/llm-providers.js +346 -0
  83. package/src/lib/matrix-bridge.js +339 -0
  84. package/src/lib/mcp-registry.js +346 -0
  85. package/src/lib/memory-manager.js +336 -0
  86. package/src/lib/multimodal.js +330 -0
  87. package/src/lib/nl-programming.js +341 -0
  88. package/src/lib/nostr-bridge.js +336 -0
  89. package/src/lib/note-versioning.js +339 -0
  90. package/src/lib/org-manager.js +336 -0
  91. package/src/lib/p2p-manager.js +341 -0
  92. package/src/lib/perception.js +346 -0
  93. package/src/lib/permanent-memory.js +327 -0
  94. package/src/lib/plugin-ecosystem.js +346 -0
  95. package/src/lib/pqc-manager.js +346 -0
  96. package/src/lib/protocol-fusion.js +338 -0
  97. package/src/lib/quantization.js +337 -0
  98. package/src/lib/response-cache.js +333 -0
  99. package/src/lib/scim-manager.js +346 -0
  100. package/src/lib/session-manager.js +334 -0
  101. package/src/lib/skill-loader.js +334 -0
  102. package/src/lib/social-manager.js +330 -0
  103. package/src/lib/sso-manager.js +340 -0
  104. package/src/lib/sync-manager.js +336 -0
  105. package/src/lib/tech-learning-engine.js +341 -0
  106. package/src/lib/tenant-saas.js +341 -0
  107. package/src/lib/threat-intel.js +330 -0
  108. package/src/lib/token-tracker.js +336 -0
  109. package/src/lib/trust-security.js +343 -0
  110. package/src/lib/ueba.js +340 -0
  111. package/src/lib/universal-runtime.js +330 -0
  112. package/src/lib/wallet-manager.js +336 -0
  113. package/src/lib/workflow-engine.js +330 -0
@@ -681,3 +681,344 @@ export function _resetStateKnowledgeExporterV2() {
681
681
  _stateV2.targetIdleMs = EXPORTER_DEFAULT_TARGET_IDLE_MS;
682
682
  _stateV2.jobStuckMs = EXPORTER_DEFAULT_JOB_STUCK_MS;
683
683
  }
684
+
685
+ // =====================================================================
686
+ // knowledge-exporter V2 governance overlay (iter22)
687
+ // =====================================================================
688
+ export const KEXPGOV_PROFILE_MATURITY_V2 = Object.freeze({
689
+ PENDING: "pending",
690
+ ACTIVE: "active",
691
+ STALE: "stale",
692
+ ARCHIVED: "archived",
693
+ });
694
+ export const KEXPGOV_EXPORT_LIFECYCLE_V2 = Object.freeze({
695
+ QUEUED: "queued",
696
+ EXPORTING: "exporting",
697
+ EXPORTED: "exported",
698
+ FAILED: "failed",
699
+ CANCELLED: "cancelled",
700
+ });
701
+ const _kexpgovPTrans = new Map([
702
+ [
703
+ KEXPGOV_PROFILE_MATURITY_V2.PENDING,
704
+ new Set([
705
+ KEXPGOV_PROFILE_MATURITY_V2.ACTIVE,
706
+ KEXPGOV_PROFILE_MATURITY_V2.ARCHIVED,
707
+ ]),
708
+ ],
709
+ [
710
+ KEXPGOV_PROFILE_MATURITY_V2.ACTIVE,
711
+ new Set([
712
+ KEXPGOV_PROFILE_MATURITY_V2.STALE,
713
+ KEXPGOV_PROFILE_MATURITY_V2.ARCHIVED,
714
+ ]),
715
+ ],
716
+ [
717
+ KEXPGOV_PROFILE_MATURITY_V2.STALE,
718
+ new Set([
719
+ KEXPGOV_PROFILE_MATURITY_V2.ACTIVE,
720
+ KEXPGOV_PROFILE_MATURITY_V2.ARCHIVED,
721
+ ]),
722
+ ],
723
+ [KEXPGOV_PROFILE_MATURITY_V2.ARCHIVED, new Set()],
724
+ ]);
725
+ const _kexpgovPTerminal = new Set([KEXPGOV_PROFILE_MATURITY_V2.ARCHIVED]);
726
+ const _kexpgovJTrans = new Map([
727
+ [
728
+ KEXPGOV_EXPORT_LIFECYCLE_V2.QUEUED,
729
+ new Set([
730
+ KEXPGOV_EXPORT_LIFECYCLE_V2.EXPORTING,
731
+ KEXPGOV_EXPORT_LIFECYCLE_V2.CANCELLED,
732
+ ]),
733
+ ],
734
+ [
735
+ KEXPGOV_EXPORT_LIFECYCLE_V2.EXPORTING,
736
+ new Set([
737
+ KEXPGOV_EXPORT_LIFECYCLE_V2.EXPORTED,
738
+ KEXPGOV_EXPORT_LIFECYCLE_V2.FAILED,
739
+ KEXPGOV_EXPORT_LIFECYCLE_V2.CANCELLED,
740
+ ]),
741
+ ],
742
+ [KEXPGOV_EXPORT_LIFECYCLE_V2.EXPORTED, new Set()],
743
+ [KEXPGOV_EXPORT_LIFECYCLE_V2.FAILED, new Set()],
744
+ [KEXPGOV_EXPORT_LIFECYCLE_V2.CANCELLED, new Set()],
745
+ ]);
746
+ const _kexpgovPsV2 = new Map();
747
+ const _kexpgovJsV2 = new Map();
748
+ let _kexpgovMaxActive = 6,
749
+ _kexpgovMaxPending = 15,
750
+ _kexpgovIdleMs = 30 * 24 * 60 * 60 * 1000,
751
+ _kexpgovStuckMs = 60 * 1000;
752
+ function _kexpgovPos(n, label) {
753
+ const v = Math.floor(Number(n));
754
+ if (!Number.isFinite(v) || v <= 0)
755
+ throw new Error(`${label} must be positive integer`);
756
+ return v;
757
+ }
758
+ function _kexpgovCheckP(from, to) {
759
+ const a = _kexpgovPTrans.get(from);
760
+ if (!a || !a.has(to))
761
+ throw new Error(`invalid kexpgov profile transition ${from} → ${to}`);
762
+ }
763
+ function _kexpgovCheckJ(from, to) {
764
+ const a = _kexpgovJTrans.get(from);
765
+ if (!a || !a.has(to))
766
+ throw new Error(`invalid kexpgov export transition ${from} → ${to}`);
767
+ }
768
+ function _kexpgovCountActive(owner) {
769
+ let c = 0;
770
+ for (const p of _kexpgovPsV2.values())
771
+ if (p.owner === owner && p.status === KEXPGOV_PROFILE_MATURITY_V2.ACTIVE)
772
+ c++;
773
+ return c;
774
+ }
775
+ function _kexpgovCountPending(profileId) {
776
+ let c = 0;
777
+ for (const j of _kexpgovJsV2.values())
778
+ if (
779
+ j.profileId === profileId &&
780
+ (j.status === KEXPGOV_EXPORT_LIFECYCLE_V2.QUEUED ||
781
+ j.status === KEXPGOV_EXPORT_LIFECYCLE_V2.EXPORTING)
782
+ )
783
+ c++;
784
+ return c;
785
+ }
786
+ export function setMaxActiveKexpgovProfilesPerOwnerV2(n) {
787
+ _kexpgovMaxActive = _kexpgovPos(n, "maxActiveKexpgovProfilesPerOwner");
788
+ }
789
+ export function getMaxActiveKexpgovProfilesPerOwnerV2() {
790
+ return _kexpgovMaxActive;
791
+ }
792
+ export function setMaxPendingKexpgovExportsPerProfileV2(n) {
793
+ _kexpgovMaxPending = _kexpgovPos(n, "maxPendingKexpgovExportsPerProfile");
794
+ }
795
+ export function getMaxPendingKexpgovExportsPerProfileV2() {
796
+ return _kexpgovMaxPending;
797
+ }
798
+ export function setKexpgovProfileIdleMsV2(n) {
799
+ _kexpgovIdleMs = _kexpgovPos(n, "kexpgovProfileIdleMs");
800
+ }
801
+ export function getKexpgovProfileIdleMsV2() {
802
+ return _kexpgovIdleMs;
803
+ }
804
+ export function setKexpgovExportStuckMsV2(n) {
805
+ _kexpgovStuckMs = _kexpgovPos(n, "kexpgovExportStuckMs");
806
+ }
807
+ export function getKexpgovExportStuckMsV2() {
808
+ return _kexpgovStuckMs;
809
+ }
810
+ export function _resetStateKnowledgeExporterGovV2() {
811
+ _kexpgovPsV2.clear();
812
+ _kexpgovJsV2.clear();
813
+ _kexpgovMaxActive = 6;
814
+ _kexpgovMaxPending = 15;
815
+ _kexpgovIdleMs = 30 * 24 * 60 * 60 * 1000;
816
+ _kexpgovStuckMs = 60 * 1000;
817
+ }
818
+ export function registerKexpgovProfileV2({ id, owner, format, metadata } = {}) {
819
+ if (!id || !owner) throw new Error("id and owner required");
820
+ if (_kexpgovPsV2.has(id))
821
+ throw new Error(`kexpgov profile ${id} already exists`);
822
+ const now = Date.now();
823
+ const p = {
824
+ id,
825
+ owner,
826
+ format: format || "json",
827
+ status: KEXPGOV_PROFILE_MATURITY_V2.PENDING,
828
+ createdAt: now,
829
+ updatedAt: now,
830
+ lastTouchedAt: now,
831
+ activatedAt: null,
832
+ archivedAt: null,
833
+ metadata: { ...(metadata || {}) },
834
+ };
835
+ _kexpgovPsV2.set(id, p);
836
+ return { ...p, metadata: { ...p.metadata } };
837
+ }
838
+ export function activateKexpgovProfileV2(id) {
839
+ const p = _kexpgovPsV2.get(id);
840
+ if (!p) throw new Error(`kexpgov profile ${id} not found`);
841
+ const isInitial = p.status === KEXPGOV_PROFILE_MATURITY_V2.PENDING;
842
+ _kexpgovCheckP(p.status, KEXPGOV_PROFILE_MATURITY_V2.ACTIVE);
843
+ if (isInitial && _kexpgovCountActive(p.owner) >= _kexpgovMaxActive)
844
+ throw new Error(`max active kexpgov profiles for owner ${p.owner} reached`);
845
+ const now = Date.now();
846
+ p.status = KEXPGOV_PROFILE_MATURITY_V2.ACTIVE;
847
+ p.updatedAt = now;
848
+ p.lastTouchedAt = now;
849
+ if (!p.activatedAt) p.activatedAt = now;
850
+ return { ...p, metadata: { ...p.metadata } };
851
+ }
852
+ export function staleKexpgovProfileV2(id) {
853
+ const p = _kexpgovPsV2.get(id);
854
+ if (!p) throw new Error(`kexpgov profile ${id} not found`);
855
+ _kexpgovCheckP(p.status, KEXPGOV_PROFILE_MATURITY_V2.STALE);
856
+ p.status = KEXPGOV_PROFILE_MATURITY_V2.STALE;
857
+ p.updatedAt = Date.now();
858
+ return { ...p, metadata: { ...p.metadata } };
859
+ }
860
+ export function archiveKexpgovProfileV2(id) {
861
+ const p = _kexpgovPsV2.get(id);
862
+ if (!p) throw new Error(`kexpgov profile ${id} not found`);
863
+ _kexpgovCheckP(p.status, KEXPGOV_PROFILE_MATURITY_V2.ARCHIVED);
864
+ const now = Date.now();
865
+ p.status = KEXPGOV_PROFILE_MATURITY_V2.ARCHIVED;
866
+ p.updatedAt = now;
867
+ if (!p.archivedAt) p.archivedAt = now;
868
+ return { ...p, metadata: { ...p.metadata } };
869
+ }
870
+ export function touchKexpgovProfileV2(id) {
871
+ const p = _kexpgovPsV2.get(id);
872
+ if (!p) throw new Error(`kexpgov profile ${id} not found`);
873
+ if (_kexpgovPTerminal.has(p.status))
874
+ throw new Error(`cannot touch terminal kexpgov profile ${id}`);
875
+ const now = Date.now();
876
+ p.lastTouchedAt = now;
877
+ p.updatedAt = now;
878
+ return { ...p, metadata: { ...p.metadata } };
879
+ }
880
+ export function getKexpgovProfileV2(id) {
881
+ const p = _kexpgovPsV2.get(id);
882
+ if (!p) return null;
883
+ return { ...p, metadata: { ...p.metadata } };
884
+ }
885
+ export function listKexpgovProfilesV2() {
886
+ return [..._kexpgovPsV2.values()].map((p) => ({
887
+ ...p,
888
+ metadata: { ...p.metadata },
889
+ }));
890
+ }
891
+ export function createKexpgovExportV2({
892
+ id,
893
+ profileId,
894
+ destination,
895
+ metadata,
896
+ } = {}) {
897
+ if (!id || !profileId) throw new Error("id and profileId required");
898
+ if (_kexpgovJsV2.has(id))
899
+ throw new Error(`kexpgov export ${id} already exists`);
900
+ if (!_kexpgovPsV2.has(profileId))
901
+ throw new Error(`kexpgov profile ${profileId} not found`);
902
+ if (_kexpgovCountPending(profileId) >= _kexpgovMaxPending)
903
+ throw new Error(
904
+ `max pending kexpgov exports for profile ${profileId} reached`,
905
+ );
906
+ const now = Date.now();
907
+ const j = {
908
+ id,
909
+ profileId,
910
+ destination: destination || "",
911
+ status: KEXPGOV_EXPORT_LIFECYCLE_V2.QUEUED,
912
+ createdAt: now,
913
+ updatedAt: now,
914
+ startedAt: null,
915
+ settledAt: null,
916
+ metadata: { ...(metadata || {}) },
917
+ };
918
+ _kexpgovJsV2.set(id, j);
919
+ return { ...j, metadata: { ...j.metadata } };
920
+ }
921
+ export function exportingKexpgovExportV2(id) {
922
+ const j = _kexpgovJsV2.get(id);
923
+ if (!j) throw new Error(`kexpgov export ${id} not found`);
924
+ _kexpgovCheckJ(j.status, KEXPGOV_EXPORT_LIFECYCLE_V2.EXPORTING);
925
+ const now = Date.now();
926
+ j.status = KEXPGOV_EXPORT_LIFECYCLE_V2.EXPORTING;
927
+ j.updatedAt = now;
928
+ if (!j.startedAt) j.startedAt = now;
929
+ return { ...j, metadata: { ...j.metadata } };
930
+ }
931
+ export function completeExportKexpgovV2(id) {
932
+ const j = _kexpgovJsV2.get(id);
933
+ if (!j) throw new Error(`kexpgov export ${id} not found`);
934
+ _kexpgovCheckJ(j.status, KEXPGOV_EXPORT_LIFECYCLE_V2.EXPORTED);
935
+ const now = Date.now();
936
+ j.status = KEXPGOV_EXPORT_LIFECYCLE_V2.EXPORTED;
937
+ j.updatedAt = now;
938
+ if (!j.settledAt) j.settledAt = now;
939
+ return { ...j, metadata: { ...j.metadata } };
940
+ }
941
+ export function failKexpgovExportV2(id, reason) {
942
+ const j = _kexpgovJsV2.get(id);
943
+ if (!j) throw new Error(`kexpgov export ${id} not found`);
944
+ _kexpgovCheckJ(j.status, KEXPGOV_EXPORT_LIFECYCLE_V2.FAILED);
945
+ const now = Date.now();
946
+ j.status = KEXPGOV_EXPORT_LIFECYCLE_V2.FAILED;
947
+ j.updatedAt = now;
948
+ if (!j.settledAt) j.settledAt = now;
949
+ if (reason) j.metadata.failReason = String(reason);
950
+ return { ...j, metadata: { ...j.metadata } };
951
+ }
952
+ export function cancelKexpgovExportV2(id, reason) {
953
+ const j = _kexpgovJsV2.get(id);
954
+ if (!j) throw new Error(`kexpgov export ${id} not found`);
955
+ _kexpgovCheckJ(j.status, KEXPGOV_EXPORT_LIFECYCLE_V2.CANCELLED);
956
+ const now = Date.now();
957
+ j.status = KEXPGOV_EXPORT_LIFECYCLE_V2.CANCELLED;
958
+ j.updatedAt = now;
959
+ if (!j.settledAt) j.settledAt = now;
960
+ if (reason) j.metadata.cancelReason = String(reason);
961
+ return { ...j, metadata: { ...j.metadata } };
962
+ }
963
+ export function getKexpgovExportV2(id) {
964
+ const j = _kexpgovJsV2.get(id);
965
+ if (!j) return null;
966
+ return { ...j, metadata: { ...j.metadata } };
967
+ }
968
+ export function listKexpgovExportsV2() {
969
+ return [..._kexpgovJsV2.values()].map((j) => ({
970
+ ...j,
971
+ metadata: { ...j.metadata },
972
+ }));
973
+ }
974
+ export function autoStaleIdleKexpgovProfilesV2({ now } = {}) {
975
+ const t = now ?? Date.now();
976
+ const flipped = [];
977
+ for (const p of _kexpgovPsV2.values())
978
+ if (
979
+ p.status === KEXPGOV_PROFILE_MATURITY_V2.ACTIVE &&
980
+ t - p.lastTouchedAt >= _kexpgovIdleMs
981
+ ) {
982
+ p.status = KEXPGOV_PROFILE_MATURITY_V2.STALE;
983
+ p.updatedAt = t;
984
+ flipped.push(p.id);
985
+ }
986
+ return { flipped, count: flipped.length };
987
+ }
988
+ export function autoFailStuckKexpgovExportsV2({ now } = {}) {
989
+ const t = now ?? Date.now();
990
+ const flipped = [];
991
+ for (const j of _kexpgovJsV2.values())
992
+ if (
993
+ j.status === KEXPGOV_EXPORT_LIFECYCLE_V2.EXPORTING &&
994
+ j.startedAt != null &&
995
+ t - j.startedAt >= _kexpgovStuckMs
996
+ ) {
997
+ j.status = KEXPGOV_EXPORT_LIFECYCLE_V2.FAILED;
998
+ j.updatedAt = t;
999
+ if (!j.settledAt) j.settledAt = t;
1000
+ j.metadata.failReason = "auto-fail-stuck";
1001
+ flipped.push(j.id);
1002
+ }
1003
+ return { flipped, count: flipped.length };
1004
+ }
1005
+ export function getKnowledgeExporterGovStatsV2() {
1006
+ const profilesByStatus = {};
1007
+ for (const v of Object.values(KEXPGOV_PROFILE_MATURITY_V2))
1008
+ profilesByStatus[v] = 0;
1009
+ for (const p of _kexpgovPsV2.values()) profilesByStatus[p.status]++;
1010
+ const exportsByStatus = {};
1011
+ for (const v of Object.values(KEXPGOV_EXPORT_LIFECYCLE_V2))
1012
+ exportsByStatus[v] = 0;
1013
+ for (const j of _kexpgovJsV2.values()) exportsByStatus[j.status]++;
1014
+ return {
1015
+ totalKexpgovProfilesV2: _kexpgovPsV2.size,
1016
+ totalKexpgovExportsV2: _kexpgovJsV2.size,
1017
+ maxActiveKexpgovProfilesPerOwner: _kexpgovMaxActive,
1018
+ maxPendingKexpgovExportsPerProfile: _kexpgovMaxPending,
1019
+ kexpgovProfileIdleMs: _kexpgovIdleMs,
1020
+ kexpgovExportStuckMs: _kexpgovStuckMs,
1021
+ profilesByStatus,
1022
+ exportsByStatus,
1023
+ };
1024
+ }
@@ -670,3 +670,344 @@ export function _resetStateKnowledgeImporterV2() {
670
670
  _stateV2.sourceIdleMs = IMPORTER_DEFAULT_SOURCE_IDLE_MS;
671
671
  _stateV2.jobStuckMs = IMPORTER_DEFAULT_JOB_STUCK_MS;
672
672
  }
673
+
674
+ // =====================================================================
675
+ // knowledge-importer V2 governance overlay (iter22)
676
+ // =====================================================================
677
+ export const KIMPGOV_PROFILE_MATURITY_V2 = Object.freeze({
678
+ PENDING: "pending",
679
+ ACTIVE: "active",
680
+ STALE: "stale",
681
+ ARCHIVED: "archived",
682
+ });
683
+ export const KIMPGOV_IMPORT_LIFECYCLE_V2 = Object.freeze({
684
+ QUEUED: "queued",
685
+ IMPORTING: "importing",
686
+ IMPORTED: "imported",
687
+ FAILED: "failed",
688
+ CANCELLED: "cancelled",
689
+ });
690
+ const _kimpgovPTrans = new Map([
691
+ [
692
+ KIMPGOV_PROFILE_MATURITY_V2.PENDING,
693
+ new Set([
694
+ KIMPGOV_PROFILE_MATURITY_V2.ACTIVE,
695
+ KIMPGOV_PROFILE_MATURITY_V2.ARCHIVED,
696
+ ]),
697
+ ],
698
+ [
699
+ KIMPGOV_PROFILE_MATURITY_V2.ACTIVE,
700
+ new Set([
701
+ KIMPGOV_PROFILE_MATURITY_V2.STALE,
702
+ KIMPGOV_PROFILE_MATURITY_V2.ARCHIVED,
703
+ ]),
704
+ ],
705
+ [
706
+ KIMPGOV_PROFILE_MATURITY_V2.STALE,
707
+ new Set([
708
+ KIMPGOV_PROFILE_MATURITY_V2.ACTIVE,
709
+ KIMPGOV_PROFILE_MATURITY_V2.ARCHIVED,
710
+ ]),
711
+ ],
712
+ [KIMPGOV_PROFILE_MATURITY_V2.ARCHIVED, new Set()],
713
+ ]);
714
+ const _kimpgovPTerminal = new Set([KIMPGOV_PROFILE_MATURITY_V2.ARCHIVED]);
715
+ const _kimpgovJTrans = new Map([
716
+ [
717
+ KIMPGOV_IMPORT_LIFECYCLE_V2.QUEUED,
718
+ new Set([
719
+ KIMPGOV_IMPORT_LIFECYCLE_V2.IMPORTING,
720
+ KIMPGOV_IMPORT_LIFECYCLE_V2.CANCELLED,
721
+ ]),
722
+ ],
723
+ [
724
+ KIMPGOV_IMPORT_LIFECYCLE_V2.IMPORTING,
725
+ new Set([
726
+ KIMPGOV_IMPORT_LIFECYCLE_V2.IMPORTED,
727
+ KIMPGOV_IMPORT_LIFECYCLE_V2.FAILED,
728
+ KIMPGOV_IMPORT_LIFECYCLE_V2.CANCELLED,
729
+ ]),
730
+ ],
731
+ [KIMPGOV_IMPORT_LIFECYCLE_V2.IMPORTED, new Set()],
732
+ [KIMPGOV_IMPORT_LIFECYCLE_V2.FAILED, new Set()],
733
+ [KIMPGOV_IMPORT_LIFECYCLE_V2.CANCELLED, new Set()],
734
+ ]);
735
+ const _kimpgovPsV2 = new Map();
736
+ const _kimpgovJsV2 = new Map();
737
+ let _kimpgovMaxActive = 6,
738
+ _kimpgovMaxPending = 15,
739
+ _kimpgovIdleMs = 30 * 24 * 60 * 60 * 1000,
740
+ _kimpgovStuckMs = 60 * 1000;
741
+ function _kimpgovPos(n, label) {
742
+ const v = Math.floor(Number(n));
743
+ if (!Number.isFinite(v) || v <= 0)
744
+ throw new Error(`${label} must be positive integer`);
745
+ return v;
746
+ }
747
+ function _kimpgovCheckP(from, to) {
748
+ const a = _kimpgovPTrans.get(from);
749
+ if (!a || !a.has(to))
750
+ throw new Error(`invalid kimpgov profile transition ${from} → ${to}`);
751
+ }
752
+ function _kimpgovCheckJ(from, to) {
753
+ const a = _kimpgovJTrans.get(from);
754
+ if (!a || !a.has(to))
755
+ throw new Error(`invalid kimpgov import transition ${from} → ${to}`);
756
+ }
757
+ function _kimpgovCountActive(owner) {
758
+ let c = 0;
759
+ for (const p of _kimpgovPsV2.values())
760
+ if (p.owner === owner && p.status === KIMPGOV_PROFILE_MATURITY_V2.ACTIVE)
761
+ c++;
762
+ return c;
763
+ }
764
+ function _kimpgovCountPending(profileId) {
765
+ let c = 0;
766
+ for (const j of _kimpgovJsV2.values())
767
+ if (
768
+ j.profileId === profileId &&
769
+ (j.status === KIMPGOV_IMPORT_LIFECYCLE_V2.QUEUED ||
770
+ j.status === KIMPGOV_IMPORT_LIFECYCLE_V2.IMPORTING)
771
+ )
772
+ c++;
773
+ return c;
774
+ }
775
+ export function setMaxActiveKimpgovProfilesPerOwnerV2(n) {
776
+ _kimpgovMaxActive = _kimpgovPos(n, "maxActiveKimpgovProfilesPerOwner");
777
+ }
778
+ export function getMaxActiveKimpgovProfilesPerOwnerV2() {
779
+ return _kimpgovMaxActive;
780
+ }
781
+ export function setMaxPendingKimpgovImportsPerProfileV2(n) {
782
+ _kimpgovMaxPending = _kimpgovPos(n, "maxPendingKimpgovImportsPerProfile");
783
+ }
784
+ export function getMaxPendingKimpgovImportsPerProfileV2() {
785
+ return _kimpgovMaxPending;
786
+ }
787
+ export function setKimpgovProfileIdleMsV2(n) {
788
+ _kimpgovIdleMs = _kimpgovPos(n, "kimpgovProfileIdleMs");
789
+ }
790
+ export function getKimpgovProfileIdleMsV2() {
791
+ return _kimpgovIdleMs;
792
+ }
793
+ export function setKimpgovImportStuckMsV2(n) {
794
+ _kimpgovStuckMs = _kimpgovPos(n, "kimpgovImportStuckMs");
795
+ }
796
+ export function getKimpgovImportStuckMsV2() {
797
+ return _kimpgovStuckMs;
798
+ }
799
+ export function _resetStateKnowledgeImporterGovV2() {
800
+ _kimpgovPsV2.clear();
801
+ _kimpgovJsV2.clear();
802
+ _kimpgovMaxActive = 6;
803
+ _kimpgovMaxPending = 15;
804
+ _kimpgovIdleMs = 30 * 24 * 60 * 60 * 1000;
805
+ _kimpgovStuckMs = 60 * 1000;
806
+ }
807
+ export function registerKimpgovProfileV2({ id, owner, format, metadata } = {}) {
808
+ if (!id || !owner) throw new Error("id and owner required");
809
+ if (_kimpgovPsV2.has(id))
810
+ throw new Error(`kimpgov profile ${id} already exists`);
811
+ const now = Date.now();
812
+ const p = {
813
+ id,
814
+ owner,
815
+ format: format || "json",
816
+ status: KIMPGOV_PROFILE_MATURITY_V2.PENDING,
817
+ createdAt: now,
818
+ updatedAt: now,
819
+ lastTouchedAt: now,
820
+ activatedAt: null,
821
+ archivedAt: null,
822
+ metadata: { ...(metadata || {}) },
823
+ };
824
+ _kimpgovPsV2.set(id, p);
825
+ return { ...p, metadata: { ...p.metadata } };
826
+ }
827
+ export function activateKimpgovProfileV2(id) {
828
+ const p = _kimpgovPsV2.get(id);
829
+ if (!p) throw new Error(`kimpgov profile ${id} not found`);
830
+ const isInitial = p.status === KIMPGOV_PROFILE_MATURITY_V2.PENDING;
831
+ _kimpgovCheckP(p.status, KIMPGOV_PROFILE_MATURITY_V2.ACTIVE);
832
+ if (isInitial && _kimpgovCountActive(p.owner) >= _kimpgovMaxActive)
833
+ throw new Error(`max active kimpgov profiles for owner ${p.owner} reached`);
834
+ const now = Date.now();
835
+ p.status = KIMPGOV_PROFILE_MATURITY_V2.ACTIVE;
836
+ p.updatedAt = now;
837
+ p.lastTouchedAt = now;
838
+ if (!p.activatedAt) p.activatedAt = now;
839
+ return { ...p, metadata: { ...p.metadata } };
840
+ }
841
+ export function staleKimpgovProfileV2(id) {
842
+ const p = _kimpgovPsV2.get(id);
843
+ if (!p) throw new Error(`kimpgov profile ${id} not found`);
844
+ _kimpgovCheckP(p.status, KIMPGOV_PROFILE_MATURITY_V2.STALE);
845
+ p.status = KIMPGOV_PROFILE_MATURITY_V2.STALE;
846
+ p.updatedAt = Date.now();
847
+ return { ...p, metadata: { ...p.metadata } };
848
+ }
849
+ export function archiveKimpgovProfileV2(id) {
850
+ const p = _kimpgovPsV2.get(id);
851
+ if (!p) throw new Error(`kimpgov profile ${id} not found`);
852
+ _kimpgovCheckP(p.status, KIMPGOV_PROFILE_MATURITY_V2.ARCHIVED);
853
+ const now = Date.now();
854
+ p.status = KIMPGOV_PROFILE_MATURITY_V2.ARCHIVED;
855
+ p.updatedAt = now;
856
+ if (!p.archivedAt) p.archivedAt = now;
857
+ return { ...p, metadata: { ...p.metadata } };
858
+ }
859
+ export function touchKimpgovProfileV2(id) {
860
+ const p = _kimpgovPsV2.get(id);
861
+ if (!p) throw new Error(`kimpgov profile ${id} not found`);
862
+ if (_kimpgovPTerminal.has(p.status))
863
+ throw new Error(`cannot touch terminal kimpgov profile ${id}`);
864
+ const now = Date.now();
865
+ p.lastTouchedAt = now;
866
+ p.updatedAt = now;
867
+ return { ...p, metadata: { ...p.metadata } };
868
+ }
869
+ export function getKimpgovProfileV2(id) {
870
+ const p = _kimpgovPsV2.get(id);
871
+ if (!p) return null;
872
+ return { ...p, metadata: { ...p.metadata } };
873
+ }
874
+ export function listKimpgovProfilesV2() {
875
+ return [..._kimpgovPsV2.values()].map((p) => ({
876
+ ...p,
877
+ metadata: { ...p.metadata },
878
+ }));
879
+ }
880
+ export function createKimpgovImportV2({
881
+ id,
882
+ profileId,
883
+ source,
884
+ metadata,
885
+ } = {}) {
886
+ if (!id || !profileId) throw new Error("id and profileId required");
887
+ if (_kimpgovJsV2.has(id))
888
+ throw new Error(`kimpgov import ${id} already exists`);
889
+ if (!_kimpgovPsV2.has(profileId))
890
+ throw new Error(`kimpgov profile ${profileId} not found`);
891
+ if (_kimpgovCountPending(profileId) >= _kimpgovMaxPending)
892
+ throw new Error(
893
+ `max pending kimpgov imports for profile ${profileId} reached`,
894
+ );
895
+ const now = Date.now();
896
+ const j = {
897
+ id,
898
+ profileId,
899
+ source: source || "",
900
+ status: KIMPGOV_IMPORT_LIFECYCLE_V2.QUEUED,
901
+ createdAt: now,
902
+ updatedAt: now,
903
+ startedAt: null,
904
+ settledAt: null,
905
+ metadata: { ...(metadata || {}) },
906
+ };
907
+ _kimpgovJsV2.set(id, j);
908
+ return { ...j, metadata: { ...j.metadata } };
909
+ }
910
+ export function importingKimpgovImportV2(id) {
911
+ const j = _kimpgovJsV2.get(id);
912
+ if (!j) throw new Error(`kimpgov import ${id} not found`);
913
+ _kimpgovCheckJ(j.status, KIMPGOV_IMPORT_LIFECYCLE_V2.IMPORTING);
914
+ const now = Date.now();
915
+ j.status = KIMPGOV_IMPORT_LIFECYCLE_V2.IMPORTING;
916
+ j.updatedAt = now;
917
+ if (!j.startedAt) j.startedAt = now;
918
+ return { ...j, metadata: { ...j.metadata } };
919
+ }
920
+ export function completeImportKimpgovV2(id) {
921
+ const j = _kimpgovJsV2.get(id);
922
+ if (!j) throw new Error(`kimpgov import ${id} not found`);
923
+ _kimpgovCheckJ(j.status, KIMPGOV_IMPORT_LIFECYCLE_V2.IMPORTED);
924
+ const now = Date.now();
925
+ j.status = KIMPGOV_IMPORT_LIFECYCLE_V2.IMPORTED;
926
+ j.updatedAt = now;
927
+ if (!j.settledAt) j.settledAt = now;
928
+ return { ...j, metadata: { ...j.metadata } };
929
+ }
930
+ export function failKimpgovImportV2(id, reason) {
931
+ const j = _kimpgovJsV2.get(id);
932
+ if (!j) throw new Error(`kimpgov import ${id} not found`);
933
+ _kimpgovCheckJ(j.status, KIMPGOV_IMPORT_LIFECYCLE_V2.FAILED);
934
+ const now = Date.now();
935
+ j.status = KIMPGOV_IMPORT_LIFECYCLE_V2.FAILED;
936
+ j.updatedAt = now;
937
+ if (!j.settledAt) j.settledAt = now;
938
+ if (reason) j.metadata.failReason = String(reason);
939
+ return { ...j, metadata: { ...j.metadata } };
940
+ }
941
+ export function cancelKimpgovImportV2(id, reason) {
942
+ const j = _kimpgovJsV2.get(id);
943
+ if (!j) throw new Error(`kimpgov import ${id} not found`);
944
+ _kimpgovCheckJ(j.status, KIMPGOV_IMPORT_LIFECYCLE_V2.CANCELLED);
945
+ const now = Date.now();
946
+ j.status = KIMPGOV_IMPORT_LIFECYCLE_V2.CANCELLED;
947
+ j.updatedAt = now;
948
+ if (!j.settledAt) j.settledAt = now;
949
+ if (reason) j.metadata.cancelReason = String(reason);
950
+ return { ...j, metadata: { ...j.metadata } };
951
+ }
952
+ export function getKimpgovImportV2(id) {
953
+ const j = _kimpgovJsV2.get(id);
954
+ if (!j) return null;
955
+ return { ...j, metadata: { ...j.metadata } };
956
+ }
957
+ export function listKimpgovImportsV2() {
958
+ return [..._kimpgovJsV2.values()].map((j) => ({
959
+ ...j,
960
+ metadata: { ...j.metadata },
961
+ }));
962
+ }
963
+ export function autoStaleIdleKimpgovProfilesV2({ now } = {}) {
964
+ const t = now ?? Date.now();
965
+ const flipped = [];
966
+ for (const p of _kimpgovPsV2.values())
967
+ if (
968
+ p.status === KIMPGOV_PROFILE_MATURITY_V2.ACTIVE &&
969
+ t - p.lastTouchedAt >= _kimpgovIdleMs
970
+ ) {
971
+ p.status = KIMPGOV_PROFILE_MATURITY_V2.STALE;
972
+ p.updatedAt = t;
973
+ flipped.push(p.id);
974
+ }
975
+ return { flipped, count: flipped.length };
976
+ }
977
+ export function autoFailStuckKimpgovImportsV2({ now } = {}) {
978
+ const t = now ?? Date.now();
979
+ const flipped = [];
980
+ for (const j of _kimpgovJsV2.values())
981
+ if (
982
+ j.status === KIMPGOV_IMPORT_LIFECYCLE_V2.IMPORTING &&
983
+ j.startedAt != null &&
984
+ t - j.startedAt >= _kimpgovStuckMs
985
+ ) {
986
+ j.status = KIMPGOV_IMPORT_LIFECYCLE_V2.FAILED;
987
+ j.updatedAt = t;
988
+ if (!j.settledAt) j.settledAt = t;
989
+ j.metadata.failReason = "auto-fail-stuck";
990
+ flipped.push(j.id);
991
+ }
992
+ return { flipped, count: flipped.length };
993
+ }
994
+ export function getKnowledgeImporterGovStatsV2() {
995
+ const profilesByStatus = {};
996
+ for (const v of Object.values(KIMPGOV_PROFILE_MATURITY_V2))
997
+ profilesByStatus[v] = 0;
998
+ for (const p of _kimpgovPsV2.values()) profilesByStatus[p.status]++;
999
+ const importsByStatus = {};
1000
+ for (const v of Object.values(KIMPGOV_IMPORT_LIFECYCLE_V2))
1001
+ importsByStatus[v] = 0;
1002
+ for (const j of _kimpgovJsV2.values()) importsByStatus[j.status]++;
1003
+ return {
1004
+ totalKimpgovProfilesV2: _kimpgovPsV2.size,
1005
+ totalKimpgovImportsV2: _kimpgovJsV2.size,
1006
+ maxActiveKimpgovProfilesPerOwner: _kimpgovMaxActive,
1007
+ maxPendingKimpgovImportsPerProfile: _kimpgovMaxPending,
1008
+ kimpgovProfileIdleMs: _kimpgovIdleMs,
1009
+ kimpgovImportStuckMs: _kimpgovStuckMs,
1010
+ profilesByStatus,
1011
+ importsByStatus,
1012
+ };
1013
+ }