@co-engram/core 0.1.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/LICENSE +21 -0
- package/README.md +167 -0
- package/dist/config/defaults.d.ts +45 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +70 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +84 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +230 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +145 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +14 -0
- package/dist/config/types.js.map +1 -0
- package/dist/contradiction/arbiter.d.ts +51 -0
- package/dist/contradiction/arbiter.d.ts.map +1 -0
- package/dist/contradiction/arbiter.js +112 -0
- package/dist/contradiction/arbiter.js.map +1 -0
- package/dist/contradiction/auto-degrade.d.ts +53 -0
- package/dist/contradiction/auto-degrade.d.ts.map +1 -0
- package/dist/contradiction/auto-degrade.js +79 -0
- package/dist/contradiction/auto-degrade.js.map +1 -0
- package/dist/contradiction/detector.d.ts +33 -0
- package/dist/contradiction/detector.d.ts.map +1 -0
- package/dist/contradiction/detector.js +76 -0
- package/dist/contradiction/detector.js.map +1 -0
- package/dist/contradiction/index.d.ts +11 -0
- package/dist/contradiction/index.d.ts.map +1 -0
- package/dist/contradiction/index.js +11 -0
- package/dist/contradiction/index.js.map +1 -0
- package/dist/contradiction/resolver.d.ts +45 -0
- package/dist/contradiction/resolver.d.ts.map +1 -0
- package/dist/contradiction/resolver.js +196 -0
- package/dist/contradiction/resolver.js.map +1 -0
- package/dist/contradiction/types.d.ts +73 -0
- package/dist/contradiction/types.d.ts.map +1 -0
- package/dist/contradiction/types.js +7 -0
- package/dist/contradiction/types.js.map +1 -0
- package/dist/dedup/dedupe.d.ts +49 -0
- package/dist/dedup/dedupe.d.ts.map +1 -0
- package/dist/dedup/dedupe.js +111 -0
- package/dist/dedup/dedupe.js.map +1 -0
- package/dist/dedup/hash.d.ts +27 -0
- package/dist/dedup/hash.d.ts.map +1 -0
- package/dist/dedup/hash.js +43 -0
- package/dist/dedup/hash.js.map +1 -0
- package/dist/dedup/index.d.ts +12 -0
- package/dist/dedup/index.d.ts.map +1 -0
- package/dist/dedup/index.js +12 -0
- package/dist/dedup/index.js.map +1 -0
- package/dist/dedup/llm-triage.d.ts +48 -0
- package/dist/dedup/llm-triage.d.ts.map +1 -0
- package/dist/dedup/llm-triage.js +100 -0
- package/dist/dedup/llm-triage.js.map +1 -0
- package/dist/dedup/merge.d.ts +41 -0
- package/dist/dedup/merge.d.ts.map +1 -0
- package/dist/dedup/merge.js +55 -0
- package/dist/dedup/merge.js.map +1 -0
- package/dist/dedup/similar.d.ts +45 -0
- package/dist/dedup/similar.d.ts.map +1 -0
- package/dist/dedup/similar.js +103 -0
- package/dist/dedup/similar.js.map +1 -0
- package/dist/dedup/types.d.ts +72 -0
- package/dist/dedup/types.d.ts.map +1 -0
- package/dist/dedup/types.js +18 -0
- package/dist/dedup/types.js.map +1 -0
- package/dist/disclosure/adaptive.d.ts +86 -0
- package/dist/disclosure/adaptive.d.ts.map +1 -0
- package/dist/disclosure/adaptive.js +196 -0
- package/dist/disclosure/adaptive.js.map +1 -0
- package/dist/disclosure/budget.d.ts +51 -0
- package/dist/disclosure/budget.d.ts.map +1 -0
- package/dist/disclosure/budget.js +91 -0
- package/dist/disclosure/budget.js.map +1 -0
- package/dist/disclosure/index.d.ts +11 -0
- package/dist/disclosure/index.d.ts.map +1 -0
- package/dist/disclosure/index.js +11 -0
- package/dist/disclosure/index.js.map +1 -0
- package/dist/disclosure/tier-loader.d.ts +58 -0
- package/dist/disclosure/tier-loader.d.ts.map +1 -0
- package/dist/disclosure/tier-loader.js +205 -0
- package/dist/disclosure/tier-loader.js.map +1 -0
- package/dist/dreaming/decay.d.ts +46 -0
- package/dist/dreaming/decay.d.ts.map +1 -0
- package/dist/dreaming/decay.js +69 -0
- package/dist/dreaming/decay.js.map +1 -0
- package/dist/dreaming/deep.d.ts +48 -0
- package/dist/dreaming/deep.d.ts.map +1 -0
- package/dist/dreaming/deep.js +41 -0
- package/dist/dreaming/deep.js.map +1 -0
- package/dist/dreaming/index.d.ts +12 -0
- package/dist/dreaming/index.d.ts.map +1 -0
- package/dist/dreaming/index.js +12 -0
- package/dist/dreaming/index.js.map +1 -0
- package/dist/dreaming/light.d.ts +54 -0
- package/dist/dreaming/light.d.ts.map +1 -0
- package/dist/dreaming/light.js +114 -0
- package/dist/dreaming/light.js.map +1 -0
- package/dist/dreaming/rem.d.ts +128 -0
- package/dist/dreaming/rem.d.ts.map +1 -0
- package/dist/dreaming/rem.js +228 -0
- package/dist/dreaming/rem.js.map +1 -0
- package/dist/dreaming/scheduler.d.ts +75 -0
- package/dist/dreaming/scheduler.d.ts.map +1 -0
- package/dist/dreaming/scheduler.js +138 -0
- package/dist/dreaming/scheduler.js.map +1 -0
- package/dist/dreaming/trash.d.ts +174 -0
- package/dist/dreaming/trash.d.ts.map +1 -0
- package/dist/dreaming/trash.js +466 -0
- package/dist/dreaming/trash.js.map +1 -0
- package/dist/evolution/category.d.ts +127 -0
- package/dist/evolution/category.d.ts.map +1 -0
- package/dist/evolution/category.js +271 -0
- package/dist/evolution/category.js.map +1 -0
- package/dist/evolution/index.d.ts +8 -0
- package/dist/evolution/index.d.ts.map +1 -0
- package/dist/evolution/index.js +8 -0
- package/dist/evolution/index.js.map +1 -0
- package/dist/evolution/triggered.d.ts +107 -0
- package/dist/evolution/triggered.d.ts.map +1 -0
- package/dist/evolution/triggered.js +278 -0
- package/dist/evolution/triggered.js.map +1 -0
- package/dist/generative/cross-pollinate.d.ts +144 -0
- package/dist/generative/cross-pollinate.d.ts.map +1 -0
- package/dist/generative/cross-pollinate.js +390 -0
- package/dist/generative/cross-pollinate.js.map +1 -0
- package/dist/generative/gap-detector.d.ts +80 -0
- package/dist/generative/gap-detector.d.ts.map +1 -0
- package/dist/generative/gap-detector.js +250 -0
- package/dist/generative/gap-detector.js.map +1 -0
- package/dist/generative/hypothesis.d.ts +161 -0
- package/dist/generative/hypothesis.d.ts.map +1 -0
- package/dist/generative/hypothesis.js +356 -0
- package/dist/generative/hypothesis.js.map +1 -0
- package/dist/generative/index.d.ts +9 -0
- package/dist/generative/index.d.ts.map +1 -0
- package/dist/generative/index.js +9 -0
- package/dist/generative/index.js.map +1 -0
- package/dist/graph/clustering.d.ts +117 -0
- package/dist/graph/clustering.d.ts.map +1 -0
- package/dist/graph/clustering.js +196 -0
- package/dist/graph/clustering.js.map +1 -0
- package/dist/graph/index.d.ts +13 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +13 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/layout.d.ts +46 -0
- package/dist/graph/layout.d.ts.map +1 -0
- package/dist/graph/layout.js +269 -0
- package/dist/graph/layout.js.map +1 -0
- package/dist/graph/presets.d.ts +134 -0
- package/dist/graph/presets.d.ts.map +1 -0
- package/dist/graph/presets.js +190 -0
- package/dist/graph/presets.js.map +1 -0
- package/dist/graph/registry.d.ts +42 -0
- package/dist/graph/registry.d.ts.map +1 -0
- package/dist/graph/registry.js +158 -0
- package/dist/graph/registry.js.map +1 -0
- package/dist/graph/snapshot.d.ts +113 -0
- package/dist/graph/snapshot.d.ts.map +1 -0
- package/dist/graph/snapshot.js +194 -0
- package/dist/graph/snapshot.js.map +1 -0
- package/dist/graph/traverse.d.ts +84 -0
- package/dist/graph/traverse.d.ts.map +1 -0
- package/dist/graph/traverse.js +190 -0
- package/dist/graph/traverse.js.map +1 -0
- package/dist/graph/view-config.d.ts +99 -0
- package/dist/graph/view-config.d.ts.map +1 -0
- package/dist/graph/view-config.js +208 -0
- package/dist/graph/view-config.js.map +1 -0
- package/dist/host/detect-git-author.d.ts +26 -0
- package/dist/host/detect-git-author.d.ts.map +1 -0
- package/dist/host/detect-git-author.js +53 -0
- package/dist/host/detect-git-author.js.map +1 -0
- package/dist/host/index.d.ts +7 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +7 -0
- package/dist/host/index.js.map +1 -0
- package/dist/i18n/en.d.ts +8 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +211 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/field-names.d.ts +95 -0
- package/dist/i18n/field-names.d.ts.map +1 -0
- package/dist/i18n/field-names.js +329 -0
- package/dist/i18n/field-names.js.map +1 -0
- package/dist/i18n/index.d.ts +92 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +135 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/types.d.ts +92 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +7 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/i18n/zh.d.ts +197 -0
- package/dist/i18n/zh.d.ts.map +1 -0
- package/dist/i18n/zh.js +216 -0
- package/dist/i18n/zh.js.map +1 -0
- package/dist/importance/index.d.ts +7 -0
- package/dist/importance/index.d.ts.map +1 -0
- package/dist/importance/index.js +7 -0
- package/dist/importance/index.js.map +1 -0
- package/dist/importance/vector.d.ts +113 -0
- package/dist/importance/vector.d.ts.map +1 -0
- package/dist/importance/vector.js +202 -0
- package/dist/importance/vector.js.map +1 -0
- package/dist/index/digest-builder.d.ts +59 -0
- package/dist/index/digest-builder.d.ts.map +1 -0
- package/dist/index/digest-builder.js +195 -0
- package/dist/index/digest-builder.js.map +1 -0
- package/dist/index/graph-builder.d.ts +32 -0
- package/dist/index/graph-builder.d.ts.map +1 -0
- package/dist/index/graph-builder.js +104 -0
- package/dist/index/graph-builder.js.map +1 -0
- package/dist/index/incremental.d.ts +31 -0
- package/dist/index/incremental.d.ts.map +1 -0
- package/dist/index/incremental.js +47 -0
- package/dist/index/incremental.js.map +1 -0
- package/dist/index/index.d.ts +11 -0
- package/dist/index/index.d.ts.map +1 -0
- package/dist/index/index.js +11 -0
- package/dist/index/index.js.map +1 -0
- package/dist/index/orchestrator.d.ts +60 -0
- package/dist/index/orchestrator.d.ts.map +1 -0
- package/dist/index/orchestrator.js +99 -0
- package/dist/index/orchestrator.js.map +1 -0
- package/dist/index/types.d.ts +116 -0
- package/dist/index/types.d.ts.map +1 -0
- package/dist/index/types.js +10 -0
- package/dist/index/types.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/learning/index.d.ts +7 -0
- package/dist/learning/index.d.ts.map +1 -0
- package/dist/learning/index.js +7 -0
- package/dist/learning/index.js.map +1 -0
- package/dist/learning/loop.d.ts +79 -0
- package/dist/learning/loop.d.ts.map +1 -0
- package/dist/learning/loop.js +116 -0
- package/dist/learning/loop.js.map +1 -0
- package/dist/lifecycle/freshness.d.ts +35 -0
- package/dist/lifecycle/freshness.d.ts.map +1 -0
- package/dist/lifecycle/freshness.js +60 -0
- package/dist/lifecycle/freshness.js.map +1 -0
- package/dist/lifecycle/index.d.ts +7 -0
- package/dist/lifecycle/index.d.ts.map +1 -0
- package/dist/lifecycle/index.js +7 -0
- package/dist/lifecycle/index.js.map +1 -0
- package/dist/lineage/index.d.ts +10 -0
- package/dist/lineage/index.d.ts.map +1 -0
- package/dist/lineage/index.js +10 -0
- package/dist/lineage/index.js.map +1 -0
- package/dist/lineage/trace.d.ts +142 -0
- package/dist/lineage/trace.d.ts.map +1 -0
- package/dist/lineage/trace.js +316 -0
- package/dist/lineage/trace.js.map +1 -0
- package/dist/maintenance/engine.d.ts +78 -0
- package/dist/maintenance/engine.d.ts.map +1 -0
- package/dist/maintenance/engine.js +291 -0
- package/dist/maintenance/engine.js.map +1 -0
- package/dist/maintenance/index.d.ts +8 -0
- package/dist/maintenance/index.d.ts.map +1 -0
- package/dist/maintenance/index.js +8 -0
- package/dist/maintenance/index.js.map +1 -0
- package/dist/maintenance/types.d.ts +111 -0
- package/dist/maintenance/types.d.ts.map +1 -0
- package/dist/maintenance/types.js +24 -0
- package/dist/maintenance/types.js.map +1 -0
- package/dist/observability/audit-log.d.ts +77 -0
- package/dist/observability/audit-log.d.ts.map +1 -0
- package/dist/observability/audit-log.js +101 -0
- package/dist/observability/audit-log.js.map +1 -0
- package/dist/observability/effectiveness-tracker.d.ts +162 -0
- package/dist/observability/effectiveness-tracker.d.ts.map +1 -0
- package/dist/observability/effectiveness-tracker.js +251 -0
- package/dist/observability/effectiveness-tracker.js.map +1 -0
- package/dist/observability/index.d.ts +16 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +16 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/necessity-evaluator.d.ts +116 -0
- package/dist/observability/necessity-evaluator.d.ts.map +1 -0
- package/dist/observability/necessity-evaluator.js +487 -0
- package/dist/observability/necessity-evaluator.js.map +1 -0
- package/dist/observability/proposal-engine.d.ts +224 -0
- package/dist/observability/proposal-engine.d.ts.map +1 -0
- package/dist/observability/proposal-engine.js +651 -0
- package/dist/observability/proposal-engine.js.map +1 -0
- package/dist/perspectives/index.d.ts +7 -0
- package/dist/perspectives/index.d.ts.map +1 -0
- package/dist/perspectives/index.js +7 -0
- package/dist/perspectives/index.js.map +1 -0
- package/dist/perspectives/multi-view.d.ts +81 -0
- package/dist/perspectives/multi-view.d.ts.map +1 -0
- package/dist/perspectives/multi-view.js +221 -0
- package/dist/perspectives/multi-view.js.map +1 -0
- package/dist/prompt-builder/builder.d.ts +47 -0
- package/dist/prompt-builder/builder.d.ts.map +1 -0
- package/dist/prompt-builder/builder.js +136 -0
- package/dist/prompt-builder/builder.js.map +1 -0
- package/dist/prompt-builder/index.d.ts +8 -0
- package/dist/prompt-builder/index.d.ts.map +1 -0
- package/dist/prompt-builder/index.js +8 -0
- package/dist/prompt-builder/index.js.map +1 -0
- package/dist/prompt-builder/types.d.ts +42 -0
- package/dist/prompt-builder/types.d.ts.map +1 -0
- package/dist/prompt-builder/types.js +10 -0
- package/dist/prompt-builder/types.js.map +1 -0
- package/dist/prompt-signals/cache.d.ts +36 -0
- package/dist/prompt-signals/cache.d.ts.map +1 -0
- package/dist/prompt-signals/cache.js +70 -0
- package/dist/prompt-signals/cache.js.map +1 -0
- package/dist/prompt-signals/index.d.ts +12 -0
- package/dist/prompt-signals/index.d.ts.map +1 -0
- package/dist/prompt-signals/index.js +11 -0
- package/dist/prompt-signals/index.js.map +1 -0
- package/dist/prompt-signals/stats.d.ts +45 -0
- package/dist/prompt-signals/stats.d.ts.map +1 -0
- package/dist/prompt-signals/stats.js +119 -0
- package/dist/prompt-signals/stats.js.map +1 -0
- package/dist/prompt-signals/types.d.ts +53 -0
- package/dist/prompt-signals/types.d.ts.map +1 -0
- package/dist/prompt-signals/types.js +34 -0
- package/dist/prompt-signals/types.js.map +1 -0
- package/dist/provenance/index.d.ts +7 -0
- package/dist/provenance/index.d.ts.map +1 -0
- package/dist/provenance/index.js +7 -0
- package/dist/provenance/index.js.map +1 -0
- package/dist/provenance/reliability.d.ts +133 -0
- package/dist/provenance/reliability.d.ts.map +1 -0
- package/dist/provenance/reliability.js +213 -0
- package/dist/provenance/reliability.js.map +1 -0
- package/dist/reinforcement/config.d.ts +34 -0
- package/dist/reinforcement/config.d.ts.map +1 -0
- package/dist/reinforcement/config.js +43 -0
- package/dist/reinforcement/config.js.map +1 -0
- package/dist/reinforcement/index.d.ts +12 -0
- package/dist/reinforcement/index.d.ts.map +1 -0
- package/dist/reinforcement/index.js +12 -0
- package/dist/reinforcement/index.js.map +1 -0
- package/dist/reinforcement/ltd.d.ts +59 -0
- package/dist/reinforcement/ltd.d.ts.map +1 -0
- package/dist/reinforcement/ltd.js +90 -0
- package/dist/reinforcement/ltd.js.map +1 -0
- package/dist/reinforcement/ltp.d.ts +63 -0
- package/dist/reinforcement/ltp.d.ts.map +1 -0
- package/dist/reinforcement/ltp.js +99 -0
- package/dist/reinforcement/ltp.js.map +1 -0
- package/dist/reinforcement/related.d.ts +39 -0
- package/dist/reinforcement/related.d.ts.map +1 -0
- package/dist/reinforcement/related.js +92 -0
- package/dist/reinforcement/related.js.map +1 -0
- package/dist/retrieval/filter.d.ts +18 -0
- package/dist/retrieval/filter.d.ts.map +1 -0
- package/dist/retrieval/filter.js +68 -0
- package/dist/retrieval/filter.js.map +1 -0
- package/dist/retrieval/fts.d.ts +44 -0
- package/dist/retrieval/fts.d.ts.map +1 -0
- package/dist/retrieval/fts.js +120 -0
- package/dist/retrieval/fts.js.map +1 -0
- package/dist/retrieval/index.d.ts +10 -0
- package/dist/retrieval/index.d.ts.map +1 -0
- package/dist/retrieval/index.js +10 -0
- package/dist/retrieval/index.js.map +1 -0
- package/dist/retrieval/orchestrator.d.ts +78 -0
- package/dist/retrieval/orchestrator.d.ts.map +1 -0
- package/dist/retrieval/orchestrator.js +156 -0
- package/dist/retrieval/orchestrator.js.map +1 -0
- package/dist/retrieval/scoring.d.ts +105 -0
- package/dist/retrieval/scoring.d.ts.map +1 -0
- package/dist/retrieval/scoring.js +165 -0
- package/dist/retrieval/scoring.js.map +1 -0
- package/dist/signals/extract.d.ts +98 -0
- package/dist/signals/extract.d.ts.map +1 -0
- package/dist/signals/extract.js +388 -0
- package/dist/signals/extract.js.map +1 -0
- package/dist/signals/file-sink.d.ts +81 -0
- package/dist/signals/file-sink.d.ts.map +1 -0
- package/dist/signals/file-sink.js +227 -0
- package/dist/signals/file-sink.js.map +1 -0
- package/dist/signals/index.d.ts +12 -0
- package/dist/signals/index.d.ts.map +1 -0
- package/dist/signals/index.js +12 -0
- package/dist/signals/index.js.map +1 -0
- package/dist/signals/rpe.d.ts +60 -0
- package/dist/signals/rpe.d.ts.map +1 -0
- package/dist/signals/rpe.js +68 -0
- package/dist/signals/rpe.js.map +1 -0
- package/dist/signals/types.d.ts +80 -0
- package/dist/signals/types.d.ts.map +1 -0
- package/dist/signals/types.js +14 -0
- package/dist/signals/types.js.map +1 -0
- package/dist/storage/engram-index.d.ts +73 -0
- package/dist/storage/engram-index.d.ts.map +1 -0
- package/dist/storage/engram-index.js +215 -0
- package/dist/storage/engram-index.js.map +1 -0
- package/dist/storage/engram-store.d.ts +147 -0
- package/dist/storage/engram-store.d.ts.map +1 -0
- package/dist/storage/engram-store.js +221 -0
- package/dist/storage/engram-store.js.map +1 -0
- package/dist/storage/git-stage.d.ts +56 -0
- package/dist/storage/git-stage.d.ts.map +1 -0
- package/dist/storage/git-stage.js +147 -0
- package/dist/storage/git-stage.js.map +1 -0
- package/dist/storage/git.d.ts +57 -0
- package/dist/storage/git.d.ts.map +1 -0
- package/dist/storage/git.js +156 -0
- package/dist/storage/git.js.map +1 -0
- package/dist/storage/hash.d.ts +23 -0
- package/dist/storage/hash.d.ts.map +1 -0
- package/dist/storage/hash.js +31 -0
- package/dist/storage/hash.js.map +1 -0
- package/dist/storage/index.d.ts +14 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +14 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/path.d.ts +51 -0
- package/dist/storage/path.d.ts.map +1 -0
- package/dist/storage/path.js +72 -0
- package/dist/storage/path.js.map +1 -0
- package/dist/storage/repository.d.ts +342 -0
- package/dist/storage/repository.d.ts.map +1 -0
- package/dist/storage/repository.js +1221 -0
- package/dist/storage/repository.js.map +1 -0
- package/dist/storage/synapse-store.d.ts +113 -0
- package/dist/storage/synapse-store.d.ts.map +1 -0
- package/dist/storage/synapse-store.js +279 -0
- package/dist/storage/synapse-store.js.map +1 -0
- package/dist/tools/doctor-tools.d.ts +53 -0
- package/dist/tools/doctor-tools.d.ts.map +1 -0
- package/dist/tools/doctor-tools.js +97 -0
- package/dist/tools/doctor-tools.js.map +1 -0
- package/dist/tools/engram-tools.d.ts +166 -0
- package/dist/tools/engram-tools.d.ts.map +1 -0
- package/dist/tools/engram-tools.js +834 -0
- package/dist/tools/engram-tools.js.map +1 -0
- package/dist/tools/index.d.ts +16 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +16 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/llm-descriptions.d.ts +61 -0
- package/dist/tools/llm-descriptions.d.ts.map +1 -0
- package/dist/tools/llm-descriptions.js +556 -0
- package/dist/tools/llm-descriptions.js.map +1 -0
- package/dist/tools/proposal-tools.d.ts +40 -0
- package/dist/tools/proposal-tools.d.ts.map +1 -0
- package/dist/tools/proposal-tools.js +99 -0
- package/dist/tools/proposal-tools.js.map +1 -0
- package/dist/tools/registry.d.ts +30 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +43 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/schemas.d.ts +715 -0
- package/dist/tools/schemas.d.ts.map +1 -0
- package/dist/tools/schemas.js +383 -0
- package/dist/tools/schemas.js.map +1 -0
- package/dist/tools/skill-tools.d.ts +26 -0
- package/dist/tools/skill-tools.d.ts.map +1 -0
- package/dist/tools/skill-tools.js +84 -0
- package/dist/tools/skill-tools.js.map +1 -0
- package/dist/tools/synapse-tools.d.ts +28 -0
- package/dist/tools/synapse-tools.d.ts.map +1 -0
- package/dist/tools/synapse-tools.js +177 -0
- package/dist/tools/synapse-tools.js.map +1 -0
- package/dist/tools/tool.d.ts +84 -0
- package/dist/tools/tool.d.ts.map +1 -0
- package/dist/tools/tool.js +22 -0
- package/dist/tools/tool.js.map +1 -0
- package/dist/tools/wrapped.d.ts +28 -0
- package/dist/tools/wrapped.d.ts.map +1 -0
- package/dist/tools/wrapped.js +172 -0
- package/dist/tools/wrapped.js.map +1 -0
- package/dist/types/disclosure.d.ts +70 -0
- package/dist/types/disclosure.d.ts.map +1 -0
- package/dist/types/disclosure.js +9 -0
- package/dist/types/disclosure.js.map +1 -0
- package/dist/types/engram.d.ts +203 -0
- package/dist/types/engram.d.ts.map +1 -0
- package/dist/types/engram.js +7 -0
- package/dist/types/engram.js.map +1 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +15 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/intention.d.ts +91 -0
- package/dist/types/intention.d.ts.map +1 -0
- package/dist/types/intention.js +9 -0
- package/dist/types/intention.js.map +1 -0
- package/dist/types/repository-types.d.ts +113 -0
- package/dist/types/repository-types.d.ts.map +1 -0
- package/dist/types/repository-types.js +18 -0
- package/dist/types/repository-types.js.map +1 -0
- package/dist/types/scene.d.ts +52 -0
- package/dist/types/scene.d.ts.map +1 -0
- package/dist/types/scene.js +12 -0
- package/dist/types/scene.js.map +1 -0
- package/dist/types/skill.d.ts +107 -0
- package/dist/types/skill.d.ts.map +1 -0
- package/dist/types/skill.js +10 -0
- package/dist/types/skill.js.map +1 -0
- package/dist/types/slugify.d.ts +34 -0
- package/dist/types/slugify.d.ts.map +1 -0
- package/dist/types/slugify.js +55 -0
- package/dist/types/slugify.js.map +1 -0
- package/dist/types/synapse-id.d.ts +22 -0
- package/dist/types/synapse-id.d.ts.map +1 -0
- package/dist/types/synapse-id.js +34 -0
- package/dist/types/synapse-id.js.map +1 -0
- package/dist/types/synapse.d.ts +99 -0
- package/dist/types/synapse.d.ts.map +1 -0
- package/dist/types/synapse.js +9 -0
- package/dist/types/synapse.js.map +1 -0
- package/dist/verification/index.d.ts +11 -0
- package/dist/verification/index.d.ts.map +1 -0
- package/dist/verification/index.js +11 -0
- package/dist/verification/index.js.map +1 -0
- package/dist/verification/metacognition.d.ts +102 -0
- package/dist/verification/metacognition.d.ts.map +1 -0
- package/dist/verification/metacognition.js +284 -0
- package/dist/verification/metacognition.js.map +1 -0
- package/dist/verification/state-machine.d.ts +77 -0
- package/dist/verification/state-machine.d.ts.map +1 -0
- package/dist/verification/state-machine.js +126 -0
- package/dist/verification/state-machine.js.map +1 -0
- package/dist/verification/upgrade.d.ts +133 -0
- package/dist/verification/upgrade.d.ts.map +1 -0
- package/dist/verification/upgrade.js +364 -0
- package/dist/verification/upgrade.js.map +1 -0
- package/package.json +70 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Yang Yang
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# Co-Engram
|
|
2
|
+
|
|
3
|
+
**Team memory with neuroscience-inspired plasticity.**
|
|
4
|
+
English | [中文](./README.zh-CN.md)
|
|
5
|
+
|
|
6
|
+
Co-Engram is a self-evolving memory system for AI agents and teams. Unlike traditional vector stores that only retrieve, Co-Engram models memory after the brain: engrams strengthen with use, weaken when they fail, consolidate during sleep, and verify themselves through metacognition.
|
|
7
|
+
|
|
8
|
+
Works with **Claude Code** (via MCP) and **OpenClaw** (via plugin SDK), with a host-agnostic TypeScript core you can embed anywhere.
|
|
9
|
+
|
|
10
|
+
## Why Co-Engram
|
|
11
|
+
|
|
12
|
+
| Differentiator | What it means |
|
|
13
|
+
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
14
|
+
| **Three-file separation** | Every memory is split into `content.md` / `meta.yaml` / `synapses.yaml` so content diffs stay clean in Git while metadata evolves independently. |
|
|
15
|
+
| **Self-maintaining** | A maintenance engine runs `light` (RPE-based reinforcement), `deep` (consolidation), and `rem` (metacognition upgrade/refute) stages automatically — no manual tagging required. |
|
|
16
|
+
| **Host-agnostic core** | `@co-engram/core` has zero host dependencies. Same memory, same tools, whether you use Claude Code, OpenClaw, or your own agent. |
|
|
17
|
+
|
|
18
|
+
## Quickstart
|
|
19
|
+
|
|
20
|
+
Three commands to get Co-Engram working inside Claude Code:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# 1. Install the MCP server globally
|
|
24
|
+
npm install -g @co-engram/claude-code
|
|
25
|
+
|
|
26
|
+
# 2. Initialize the data repo (a separate Git repo, not inside this project)
|
|
27
|
+
mkdir -p ~/team-memory && cd ~/team-memory && git init
|
|
28
|
+
|
|
29
|
+
# 3. Wire into Claude Code
|
|
30
|
+
claude mcp add co-engram \
|
|
31
|
+
-e CO_ENGRAM_DATA_ROOT=$HOME/team-memory \
|
|
32
|
+
-e CO_ENGRAM_MAINTENANCE=1 \
|
|
33
|
+
--scope user \
|
|
34
|
+
-- co-engram-mcp
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Restart Claude Code, run `/mcp` in a new session, and you should see 25 `co-engram` tools loaded.
|
|
38
|
+
|
|
39
|
+
**Zero-install alternative** (skip step 1): replace `co-engram-mcp` in step 3 with `npx -y @co-engram/claude-code`.
|
|
40
|
+
|
|
41
|
+
For OpenClaw integration, see [docs/host-openclaw.md](./docs/host-openclaw.md).
|
|
42
|
+
|
|
43
|
+
## Architecture
|
|
44
|
+
|
|
45
|
+
```mermaid
|
|
46
|
+
flowchart TB
|
|
47
|
+
subgraph Host["Host layer"]
|
|
48
|
+
CC["Claude Code"]
|
|
49
|
+
OC["OpenClaw"]
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
subgraph Adapter["Adapter layer"]
|
|
53
|
+
A1["@co-engram/claude-code<br/>(MCP server, stdio)"]
|
|
54
|
+
A2["@co-engram/openclaw<br/>(plugin SDK)"]
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
subgraph Core["@co-engram/core<br/>(host-agnostic)"]
|
|
58
|
+
Tools["25 tools<br/>engrams · synapses · skills"]
|
|
59
|
+
Engine["Maintenance engine<br/>light · deep · rem"]
|
|
60
|
+
Retrieval["FTS + graph retrieval"]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
subgraph Data["Data layer (separate Git repo)"]
|
|
64
|
+
Engrams["engrams/{content,meta,synapses}"]
|
|
65
|
+
Skills["skills/"]
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
subgraph Cache["Cache layer (gitignored)"]
|
|
69
|
+
Derived[".co-engram/<br/>FTS index · vectors"]
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
CC --> A1
|
|
73
|
+
OC --> A2
|
|
74
|
+
A1 --> Tools
|
|
75
|
+
A2 --> Tools
|
|
76
|
+
Tools --> Engine
|
|
77
|
+
Tools --> Retrieval
|
|
78
|
+
Retrieval --> Derived
|
|
79
|
+
Engine --> Data
|
|
80
|
+
Tools --> Data
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Packages
|
|
84
|
+
|
|
85
|
+
| Package | What it does | Install |
|
|
86
|
+
| ------------------------------------------------------ | ----------------------------------------------------------- | ------------------------------------ |
|
|
87
|
+
| [`@co-engram/core`](./packages/core) | Host-agnostic memory engine + 25 tools + maintenance engine | `npm install @co-engram/core` |
|
|
88
|
+
| [`@co-engram/claude-code`](./packages/claude-code-mcp) | MCP server adapter for Claude Code | `npm install @co-engram/claude-code` |
|
|
89
|
+
| [`@co-engram/openclaw`](./packages/openclaw-plugin) | Plugin SDK adapter for OpenClaw | `npm install @co-engram/openclaw` |
|
|
90
|
+
| [`@co-engram/e2e`](./packages/e2e) | Cross-host end-to-end tests (private, not published) | workspace only |
|
|
91
|
+
|
|
92
|
+
## Tool Catalog
|
|
93
|
+
|
|
94
|
+
Co-Engram exposes **25 native tools** grouped into five concerns, plus 2 OpenClaw-compatible `memory_*` wrappers (registered only under `@co-engram/openclaw`).
|
|
95
|
+
|
|
96
|
+
**Engrams** (12) — the core memory units
|
|
97
|
+
`engram_create` · `engram_get` · `engram_update` · `engram_delete` · `engram_search` · `engram_list` · `engram_reinforce` · `engram_report_failure` · `engram_archive` · `engram_restore` · `engram_forget` · `engram_recompute_importance`
|
|
98
|
+
|
|
99
|
+
**Synapses** (4) — typed connections between engrams
|
|
100
|
+
`synapse_create` · `synapse_get` · `synapse_list` · `synapse_delete`
|
|
101
|
+
|
|
102
|
+
**Skills** (2) — procedural memory
|
|
103
|
+
`skill_get` · `skill_invoke`
|
|
104
|
+
|
|
105
|
+
**Learning loop** (4) — verification, contradiction, evolution
|
|
106
|
+
`close_learning_loop` · `contradiction_resolve` · `upgrade_verification` · `get_evolution_lineage`
|
|
107
|
+
|
|
108
|
+
**Memory proposals** (3) — implicit capture from conversations
|
|
109
|
+
`engram_list_proposals` · `engram_accept_proposal` · `engram_dismiss_proposal`
|
|
110
|
+
|
|
111
|
+
**OpenClaw memory protocol** (2) — host-compatible wrappers, registered only under `@co-engram/openclaw`
|
|
112
|
+
`memory_search` · `memory_get`
|
|
113
|
+
|
|
114
|
+
> The `memory_*` tools declare `kind: "memory"` in `openclaw.plugin.json` so OpenClaw treats Co-Engram as the primary memory plugin (mutually exclusive with `memory-core`). They are thin adapters over `engram_search` / `engram_get` that hide Co-Engram internal terminology and inject a self-evolving prompt section via `registerMemoryCapability.promptBuilder`.
|
|
115
|
+
|
|
116
|
+
For full signatures, inputs, and examples, see [docs/tool-reference.md](./docs/tool-reference.md).
|
|
117
|
+
|
|
118
|
+
## Configuration
|
|
119
|
+
|
|
120
|
+
### Environment variables (Claude Code MCP server)
|
|
121
|
+
|
|
122
|
+
All optional. Set them in `claude mcp add -e KEY=value` or your shell.
|
|
123
|
+
|
|
124
|
+
| Variable | Default | Purpose |
|
|
125
|
+
| ----------------------------------------- | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
|
|
126
|
+
| `CO_ENGRAM_DATA_ROOT` | `$HOME/team-memory` | Absolute path to the data Git repo |
|
|
127
|
+
| `CO_ENGRAM_DEFAULT_CREATED_BY` | `unknown` | Default author for new engrams |
|
|
128
|
+
| `CO_ENGRAM_LANGUAGE` | `en` | Language for tool descriptions / viewer UI / prompts (`en` \| `zh`). Falls back to `~/team-memory/.co-engram/config.json` if unset. |
|
|
129
|
+
| `CO_ENGRAM_MAINTENANCE` | `0` | Set to `1` to start the maintenance engine |
|
|
130
|
+
| `CO_ENGRAM_MAINTENANCE_ENABLED_STAGES` | `light,deep,rem` | Comma-separated stage list |
|
|
131
|
+
| `CO_ENGRAM_MAINTENANCE_LIGHT_INTERVAL_MS` | `300000` (5 min) | Light stage interval |
|
|
132
|
+
| `CO_ENGRAM_MAINTENANCE_DEEP_INTERVAL_MS` | `3600000` (1 hour) | Deep stage interval |
|
|
133
|
+
| `CO_ENGRAM_MAINTENANCE_REM_INTERVAL_MS` | `604800000` (7 days) | REM stage interval |
|
|
134
|
+
| `CO_ENGRAM_MAINTENANCE_LEARNING_RATE` | `0.1` | RPE learning rate |
|
|
135
|
+
|
|
136
|
+
### OpenClaw manifest config
|
|
137
|
+
|
|
138
|
+
For OpenClaw, configuration goes in the plugin manifest. See [docs/host-openclaw.md](./docs/host-openclaw.md) for the full schema.
|
|
139
|
+
|
|
140
|
+
## Comparisons
|
|
141
|
+
|
|
142
|
+
| Feature | Co-Engram | mem0 | Letta | LangChain Memory |
|
|
143
|
+
| -------------------- | ------------------------- | ------------------ | ---------------- | ------------------ |
|
|
144
|
+
| Storage model | 3-file Git-friendly | Vector + graph | Vector + state | Vector / key-value |
|
|
145
|
+
| Plasticity (LTP/LTD) | Yes (RPE-driven) | Manual API | Manual API | Manual API |
|
|
146
|
+
| Auto maintenance | Yes (light/deep/rem) | No | No | No |
|
|
147
|
+
| Metacognition | Yes (5-dim truth score) | No | No | No |
|
|
148
|
+
| Host coupling | None (host-agnostic core) | Tight (Python SDK) | Tight (REST API) | Tight (Python SDK) |
|
|
149
|
+
| License | MIT | Apache-2.0 | Apache-2.0 | MIT |
|
|
150
|
+
|
|
151
|
+
## Roadmap
|
|
152
|
+
|
|
153
|
+
See [GitHub Issues](https://github.com/co-engram/co-engram/issues) for the live roadmap. Highlights:
|
|
154
|
+
|
|
155
|
+
- **TypeDoc-generated tool reference** — replace hand-written `docs/tool-reference.md` with auto-generated API docs
|
|
156
|
+
- **Provider-backed abstraction layer** — LLM-driven REM stage for narrative abstraction
|
|
157
|
+
- **Web UI** — browse engrams, inspect synapse graph, trigger maintenance manually
|
|
158
|
+
- **More host adapters** — Continue.dev, Cursor, Aider
|
|
159
|
+
- **1.0 release** — once API is stable and we have real production users
|
|
160
|
+
|
|
161
|
+
## Contributing
|
|
162
|
+
|
|
163
|
+
Contributions are welcome. See [CONTRIBUTING.md](./CONTRIBUTING.md) for development setup, test commands, and PR conventions. For security reports, see [SECURITY.md](./SECURITY.md).
|
|
164
|
+
|
|
165
|
+
## License
|
|
166
|
+
|
|
167
|
+
[MIT](./LICENSE) — © 2026 Yang Yang
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 配置默认值
|
|
3
|
+
*
|
|
4
|
+
* @module @co-engram/core/config
|
|
5
|
+
*/
|
|
6
|
+
import type { AuditSectionConfig, EffectivenessSectionConfig, MaintenanceSectionConfig, ProposalsSectionConfig, ServerSectionConfig, ViewerSectionConfig } from "./types.js";
|
|
7
|
+
import type { TrashMaintenanceConfig } from "../maintenance/types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Maintenance 默认值
|
|
10
|
+
*
|
|
11
|
+
* 间隔对齐 dreaming scheduler 的三阶段:light=5min, deep=1h, rem=7d。
|
|
12
|
+
* 学习率 0.1 来自 RPE 经验值。
|
|
13
|
+
*
|
|
14
|
+
* `enabled` 默认 true:遵循 low-friction-defaults(开箱即用)。
|
|
15
|
+
* - 新仓库或 maintenance 段完全缺失时,自动启用。
|
|
16
|
+
* - 老仓库若 config.json 已显式写 `enabled: false`,normalize 阶段尊重不动。
|
|
17
|
+
* - 想禁用:在 config.json 写 `maintenance.enabled: false`。
|
|
18
|
+
*/
|
|
19
|
+
export declare const DEFAULT_MAINTENANCE_CONFIG: Readonly<Required<Omit<MaintenanceSectionConfig, "enabled" | "enabledStages" | "rules" | "trash">>> & {
|
|
20
|
+
readonly enabled: boolean;
|
|
21
|
+
readonly enabledStages: readonly ("light" | "deep" | "rem")[];
|
|
22
|
+
};
|
|
23
|
+
/** Proposals 默认值 */
|
|
24
|
+
export declare const DEFAULT_PROPOSALS_CONFIG: Readonly<Required<ProposalsSectionConfig>>;
|
|
25
|
+
/** Audit 默认值 */
|
|
26
|
+
export declare const DEFAULT_AUDIT_CONFIG: Readonly<Required<AuditSectionConfig>>;
|
|
27
|
+
/** Effectiveness 默认值 */
|
|
28
|
+
export declare const DEFAULT_EFFECTIVENESS_CONFIG: Readonly<Required<EffectivenessSectionConfig>>;
|
|
29
|
+
/** Viewer 默认值 */
|
|
30
|
+
export declare const DEFAULT_VIEWER_CONFIG: Readonly<Required<Omit<ViewerSectionConfig, "url">>>;
|
|
31
|
+
/** Server 默认值 */
|
|
32
|
+
export declare const DEFAULT_SERVER_CONFIG: Readonly<Required<ServerSectionConfig>>;
|
|
33
|
+
/**
|
|
34
|
+
* Trash 默认值
|
|
35
|
+
*
|
|
36
|
+
* `enabled` 默认 true:遵循 low-friction-defaults。
|
|
37
|
+
* - 新仓库或 trash 段缺失时,自动启用 trash sweep。
|
|
38
|
+
* - 老仓库若 config.json 已显式写 `trash.enabled: false`,normalize 阶段尊重不动。
|
|
39
|
+
* - 想禁用:在 config.json 写 `maintenance.trash.enabled: false`。
|
|
40
|
+
*
|
|
41
|
+
* trash sweep 是非破坏:遗忘后 30 天才进 trash,365 天后才物理删除,
|
|
42
|
+
* 期间可 restore,安全边界足够默认开启。
|
|
43
|
+
*/
|
|
44
|
+
export declare const DEFAULT_TRASH_CONFIG: Readonly<Required<TrashMaintenanceConfig>>;
|
|
45
|
+
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,0BAA0B,EAC1B,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEtE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAC/C,QAAQ,CACN,IAAI,CACF,wBAAwB,EACxB,SAAS,GAAG,eAAe,GAAG,OAAO,GAAG,OAAO,CAChD,CACF,CACF,GAAG;IACF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC;CAU/D,CAAC;AAEF,oBAAoB;AACpB,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAC7C,QAAQ,CAAC,sBAAsB,CAAC,CAQjC,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAEvE,CAAC;AAEF,wBAAwB;AACxB,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CACjD,QAAQ,CAAC,0BAA0B,CAAC,CAGrC,CAAC;AAEF,iBAAiB;AACjB,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAC1C,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,CAI3C,CAAC;AAEF,iBAAiB;AACjB,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAGzE,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAKzE,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 配置默认值
|
|
3
|
+
*
|
|
4
|
+
* @module @co-engram/core/config
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Maintenance 默认值
|
|
8
|
+
*
|
|
9
|
+
* 间隔对齐 dreaming scheduler 的三阶段:light=5min, deep=1h, rem=7d。
|
|
10
|
+
* 学习率 0.1 来自 RPE 经验值。
|
|
11
|
+
*
|
|
12
|
+
* `enabled` 默认 true:遵循 low-friction-defaults(开箱即用)。
|
|
13
|
+
* - 新仓库或 maintenance 段完全缺失时,自动启用。
|
|
14
|
+
* - 老仓库若 config.json 已显式写 `enabled: false`,normalize 阶段尊重不动。
|
|
15
|
+
* - 想禁用:在 config.json 写 `maintenance.enabled: false`。
|
|
16
|
+
*/
|
|
17
|
+
export const DEFAULT_MAINTENANCE_CONFIG = {
|
|
18
|
+
enabled: true,
|
|
19
|
+
enabledStages: ["light", "deep", "rem"],
|
|
20
|
+
lightIntervalMs: 5 * 60 * 1000,
|
|
21
|
+
deepIntervalMs: 60 * 60 * 1000,
|
|
22
|
+
remIntervalMs: 7 * 24 * 60 * 60 * 1000,
|
|
23
|
+
signalPruneAgeMs: 7 * 24 * 60 * 60 * 1000,
|
|
24
|
+
learningRate: 0.1,
|
|
25
|
+
windowSize: 10,
|
|
26
|
+
};
|
|
27
|
+
/** Proposals 默认值 */
|
|
28
|
+
export const DEFAULT_PROPOSALS_CONFIG = {
|
|
29
|
+
enabled: true,
|
|
30
|
+
threshold: 3,
|
|
31
|
+
similarityThreshold: 0.65,
|
|
32
|
+
maxSamples: 8,
|
|
33
|
+
minMessageLength: 16,
|
|
34
|
+
defaultDismissDays: 7,
|
|
35
|
+
};
|
|
36
|
+
/** Audit 默认值 */
|
|
37
|
+
export const DEFAULT_AUDIT_CONFIG = {
|
|
38
|
+
enabled: true,
|
|
39
|
+
};
|
|
40
|
+
/** Effectiveness 默认值 */
|
|
41
|
+
export const DEFAULT_EFFECTIVENESS_CONFIG = {
|
|
42
|
+
enabled: true,
|
|
43
|
+
};
|
|
44
|
+
/** Viewer 默认值 */
|
|
45
|
+
export const DEFAULT_VIEWER_CONFIG = {
|
|
46
|
+
enabled: true,
|
|
47
|
+
port: 18799,
|
|
48
|
+
};
|
|
49
|
+
/** Server 默认值 */
|
|
50
|
+
export const DEFAULT_SERVER_CONFIG = {
|
|
51
|
+
name: "co-engram",
|
|
52
|
+
version: "0.0.0",
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Trash 默认值
|
|
56
|
+
*
|
|
57
|
+
* `enabled` 默认 true:遵循 low-friction-defaults。
|
|
58
|
+
* - 新仓库或 trash 段缺失时,自动启用 trash sweep。
|
|
59
|
+
* - 老仓库若 config.json 已显式写 `trash.enabled: false`,normalize 阶段尊重不动。
|
|
60
|
+
* - 想禁用:在 config.json 写 `maintenance.trash.enabled: false`。
|
|
61
|
+
*
|
|
62
|
+
* trash sweep 是非破坏:遗忘后 30 天才进 trash,365 天后才物理删除,
|
|
63
|
+
* 期间可 restore,安全边界足够默认开启。
|
|
64
|
+
*/
|
|
65
|
+
export const DEFAULT_TRASH_CONFIG = {
|
|
66
|
+
enabled: true,
|
|
67
|
+
afterDays: 30,
|
|
68
|
+
purgeAfterDays: 365,
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAUnC;IACF,OAAO,EAAE,IAAI;IACb,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC;IACvC,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;IAC9B,cAAc,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;IAC9B,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IACtC,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IACzC,YAAY,EAAE,GAAG;IACjB,UAAU,EAAE,EAAE;CACf,CAAC;AAEF,oBAAoB;AACpB,MAAM,CAAC,MAAM,wBAAwB,GAEjC;IACF,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,CAAC;IACZ,mBAAmB,EAAE,IAAI;IACzB,UAAU,EAAE,CAAC;IACb,gBAAgB,EAAE,EAAE;IACpB,kBAAkB,EAAE,CAAC;CACtB,CAAC;AAEF,gBAAgB;AAChB,MAAM,CAAC,MAAM,oBAAoB,GAA2C;IAC1E,OAAO,EAAE,IAAI;CACd,CAAC;AAEF,wBAAwB;AACxB,MAAM,CAAC,MAAM,4BAA4B,GAErC;IACF,OAAO,EAAE,IAAI;CACd,CAAC;AAEF,iBAAiB;AACjB,MAAM,CAAC,MAAM,qBAAqB,GAE9B;IACF,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,KAAK;CACZ,CAAC;AAEF,iBAAiB;AACjB,MAAM,CAAC,MAAM,qBAAqB,GAA4C;IAC5E,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,OAAO;CACjB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAC/B;IACE,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,EAAE;IACb,cAAc,EAAE,GAAG;CACpB,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 配置加载与自愈
|
|
3
|
+
*
|
|
4
|
+
* 本模块是 co-engram 配置的**单一权威入口**。
|
|
5
|
+
*
|
|
6
|
+
* 设计:
|
|
7
|
+
* - dataRoot 内 `.co-engram/config.json` 是配置的权威来源
|
|
8
|
+
* - env 仅保留 `CO_ENGRAM_DATA_ROOT`(bootstrap 引导,无法自举)和 `CO_ENGRAM_VIEWER_TOKEN`(敏感)
|
|
9
|
+
* - 字段缺失时用默认值补齐并立即写回(自愈)
|
|
10
|
+
* - 旧字段(`desiredAuditEnabled` 等)在加载时迁移到嵌套字段
|
|
11
|
+
* - JSON 损坏时备份原文件后写默认配置,绝不静默覆盖用户数据
|
|
12
|
+
*
|
|
13
|
+
* @module @co-engram/core/config
|
|
14
|
+
*/
|
|
15
|
+
import type { TeamMemoryConfig } from "./types.js";
|
|
16
|
+
export type { TeamMemoryConfig, MaintenanceSectionConfig, ProposalsSectionConfig, AuditSectionConfig, EffectivenessSectionConfig, ViewerSectionConfig, ServerSectionConfig, } from "./types.js";
|
|
17
|
+
export type { MaintenanceConfig, MaintenanceStage, TrashMaintenanceConfig, } from "../maintenance/types.js";
|
|
18
|
+
export type { ProposalEngineConfig } from "../observability/proposal-engine.js";
|
|
19
|
+
/** config 文件名(放在 dataRoot/.co-engram/ 下) */
|
|
20
|
+
export declare const TEAM_MEMORY_CONFIG_FILENAME = "config.json";
|
|
21
|
+
/**
|
|
22
|
+
* 自愈默认 config(用于首次创建 / 文件损坏时重建)
|
|
23
|
+
*
|
|
24
|
+
* 注意:`createdAt` 留空,由调用方按当前时间填入。
|
|
25
|
+
*/
|
|
26
|
+
export declare function createDefaultConfig(): TeamMemoryConfig;
|
|
27
|
+
/**
|
|
28
|
+
* 规范化 config:补默认值
|
|
29
|
+
*
|
|
30
|
+
* 输入是 readTeamMemoryConfig 的原始解析结果(可能缺字段),
|
|
31
|
+
* 输出保证完整:所有子系统字段齐全。
|
|
32
|
+
*
|
|
33
|
+
* 幂等:对已规范化的 config 调用此函数,返回值结构等价。
|
|
34
|
+
*/
|
|
35
|
+
export declare function normalizeConfig(raw: Readonly<TeamMemoryConfig> | undefined): TeamMemoryConfig;
|
|
36
|
+
/**
|
|
37
|
+
* config.json 在 dataRoot 内的完整路径
|
|
38
|
+
*/
|
|
39
|
+
export declare function resolveConfigPath(dataRoot: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* 读取 config(原始,不做迁移)
|
|
42
|
+
*
|
|
43
|
+
* 文件不存在或 JSON 解析失败时返回 undefined。
|
|
44
|
+
* 想要"自愈 + 完整 config"请用 {@link loadAndSelfHealConfig}。
|
|
45
|
+
*/
|
|
46
|
+
export declare function readTeamMemoryConfig(dataRoot: string, fsRead?: (path: string) => Promise<string>): Promise<TeamMemoryConfig | undefined>;
|
|
47
|
+
/**
|
|
48
|
+
* 写入 config(完整覆盖)
|
|
49
|
+
*/
|
|
50
|
+
export declare function writeTeamMemoryConfig(dataRoot: string, config: TeamMemoryConfig, fsWrite?: (path: string, content: string) => Promise<void>): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* 加载结果:包含最终 config 以及加载过程中发生的事件(供调用方决策日志)
|
|
53
|
+
*/
|
|
54
|
+
export interface LoadResult {
|
|
55
|
+
/** 规范化后的完整 config(子系统字段齐全) */
|
|
56
|
+
readonly config: TeamMemoryConfig;
|
|
57
|
+
/**
|
|
58
|
+
* 加载事件:
|
|
59
|
+
* - `created`:文件不存在,新建了默认 config
|
|
60
|
+
* - `normalized`:文件存在但字段缺失或有旧字段,迁移后写回
|
|
61
|
+
* - `repaired`:文件存在但 JSON 损坏,备份后重建默认 config
|
|
62
|
+
* - `loaded`:文件存在且完整,未触发写回
|
|
63
|
+
*/
|
|
64
|
+
readonly event: "created" | "normalized" | "repaired" | "loaded";
|
|
65
|
+
/** 损坏时的备份路径(仅 event='repaired' 时存在) */
|
|
66
|
+
readonly backupPath?: string;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 加载 config 并自愈
|
|
70
|
+
*
|
|
71
|
+
* 行为:
|
|
72
|
+
* 1. 文件不存在 → 写入默认 config,返回 `{ event: 'created' }`
|
|
73
|
+
* 2. 文件存在但 JSON 损坏 → 备份为 `config.json.broken.<ts>` 后写默认,返回 `{ event: 'repaired', backupPath }`
|
|
74
|
+
* 3. 文件存在且合法但字段缺失/有旧字段 → 规范化后写回,返回 `{ event: 'normalized' }`
|
|
75
|
+
* 4. 文件存在且完整 → 直接返回,返回 `{ event: 'loaded' }`
|
|
76
|
+
*/
|
|
77
|
+
export declare function loadAndSelfHealConfig(dataRoot: string): Promise<LoadResult>;
|
|
78
|
+
/**
|
|
79
|
+
* 仅把 `desiredDataRoot` 一个字段写入 config.json(用于 viewer redirect hint)
|
|
80
|
+
*
|
|
81
|
+
* 不修改其他字段(viewer 切 dataRoot 时不破坏现有 config)。
|
|
82
|
+
*/
|
|
83
|
+
export declare function setDesiredDataRoot(dataRoot: string, desiredDataRoot: string | undefined): Promise<void>;
|
|
84
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAWnD,YAAY,EACV,gBAAgB,EAChB,wBAAwB,EACxB,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAEhF,4CAA4C;AAC5C,eAAO,MAAM,2BAA2B,gBAAgB,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CActD;AA2CD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,SAAS,GAC1C,gBAAgB,CAGlB;AAsCD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GACzC,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAYvC;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,gBAAgB,EACxB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACzD,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,QAAQ,CAAC;IACjE,uCAAuC;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CA4CrB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GAAG,SAAS,GAClC,OAAO,CAAC,IAAI,CAAC,CAWf"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 配置加载与自愈
|
|
3
|
+
*
|
|
4
|
+
* 本模块是 co-engram 配置的**单一权威入口**。
|
|
5
|
+
*
|
|
6
|
+
* 设计:
|
|
7
|
+
* - dataRoot 内 `.co-engram/config.json` 是配置的权威来源
|
|
8
|
+
* - env 仅保留 `CO_ENGRAM_DATA_ROOT`(bootstrap 引导,无法自举)和 `CO_ENGRAM_VIEWER_TOKEN`(敏感)
|
|
9
|
+
* - 字段缺失时用默认值补齐并立即写回(自愈)
|
|
10
|
+
* - 旧字段(`desiredAuditEnabled` 等)在加载时迁移到嵌套字段
|
|
11
|
+
* - JSON 损坏时备份原文件后写默认配置,绝不静默覆盖用户数据
|
|
12
|
+
*
|
|
13
|
+
* @module @co-engram/core/config
|
|
14
|
+
*/
|
|
15
|
+
import { DEFAULT_AUDIT_CONFIG, DEFAULT_EFFECTIVENESS_CONFIG, DEFAULT_MAINTENANCE_CONFIG, DEFAULT_PROPOSALS_CONFIG, DEFAULT_SERVER_CONFIG, DEFAULT_TRASH_CONFIG, DEFAULT_VIEWER_CONFIG, } from "./defaults.js";
|
|
16
|
+
/** config 文件名(放在 dataRoot/.co-engram/ 下) */
|
|
17
|
+
export const TEAM_MEMORY_CONFIG_FILENAME = "config.json";
|
|
18
|
+
/**
|
|
19
|
+
* 自愈默认 config(用于首次创建 / 文件损坏时重建)
|
|
20
|
+
*
|
|
21
|
+
* 注意:`createdAt` 留空,由调用方按当前时间填入。
|
|
22
|
+
*/
|
|
23
|
+
export function createDefaultConfig() {
|
|
24
|
+
return {
|
|
25
|
+
version: 1,
|
|
26
|
+
language: "zh",
|
|
27
|
+
maintenance: {
|
|
28
|
+
...DEFAULT_MAINTENANCE_CONFIG,
|
|
29
|
+
trash: { ...DEFAULT_TRASH_CONFIG },
|
|
30
|
+
},
|
|
31
|
+
proposals: { ...DEFAULT_PROPOSALS_CONFIG },
|
|
32
|
+
audit: { ...DEFAULT_AUDIT_CONFIG },
|
|
33
|
+
effectiveness: { ...DEFAULT_EFFECTIVENESS_CONFIG },
|
|
34
|
+
viewer: { ...DEFAULT_VIEWER_CONFIG },
|
|
35
|
+
server: { ...DEFAULT_SERVER_CONFIG },
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 用默认值补齐缺失的子系统字段
|
|
40
|
+
*/
|
|
41
|
+
function fillDefaults(raw) {
|
|
42
|
+
const maintenance = {
|
|
43
|
+
...DEFAULT_MAINTENANCE_CONFIG,
|
|
44
|
+
...(raw.maintenance ?? {}),
|
|
45
|
+
trash: {
|
|
46
|
+
...DEFAULT_TRASH_CONFIG,
|
|
47
|
+
...(raw.maintenance?.trash ?? {}),
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
return {
|
|
51
|
+
...raw,
|
|
52
|
+
maintenance,
|
|
53
|
+
audit: { ...DEFAULT_AUDIT_CONFIG, ...(raw.audit ?? {}) },
|
|
54
|
+
proposals: { ...DEFAULT_PROPOSALS_CONFIG, ...(raw.proposals ?? {}) },
|
|
55
|
+
effectiveness: {
|
|
56
|
+
...DEFAULT_EFFECTIVENESS_CONFIG,
|
|
57
|
+
...(raw.effectiveness ?? {}),
|
|
58
|
+
},
|
|
59
|
+
viewer: { ...DEFAULT_VIEWER_CONFIG, ...(raw.viewer ?? {}) },
|
|
60
|
+
server: { ...DEFAULT_SERVER_CONFIG, ...(raw.server ?? {}) },
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* 检测 raw config 是否需要规范化(字段缺失)
|
|
65
|
+
*/
|
|
66
|
+
function needsNormalize(raw) {
|
|
67
|
+
if (raw.maintenance === undefined)
|
|
68
|
+
return true;
|
|
69
|
+
if (raw.proposals === undefined)
|
|
70
|
+
return true;
|
|
71
|
+
if (raw.audit === undefined)
|
|
72
|
+
return true;
|
|
73
|
+
if (raw.effectiveness === undefined)
|
|
74
|
+
return true;
|
|
75
|
+
if (raw.viewer === undefined)
|
|
76
|
+
return true;
|
|
77
|
+
if (raw.server === undefined)
|
|
78
|
+
return true;
|
|
79
|
+
if (raw.maintenance?.trash === undefined)
|
|
80
|
+
return true;
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 规范化 config:补默认值
|
|
85
|
+
*
|
|
86
|
+
* 输入是 readTeamMemoryConfig 的原始解析结果(可能缺字段),
|
|
87
|
+
* 输出保证完整:所有子系统字段齐全。
|
|
88
|
+
*
|
|
89
|
+
* 幂等:对已规范化的 config 调用此函数,返回值结构等价。
|
|
90
|
+
*/
|
|
91
|
+
export function normalizeConfig(raw) {
|
|
92
|
+
const base = raw ?? createDefaultConfig();
|
|
93
|
+
return fillDefaults(base);
|
|
94
|
+
}
|
|
95
|
+
// --- 读写原语 ---
|
|
96
|
+
async function defaultReadFile(path) {
|
|
97
|
+
const { readFile } = await import("node:fs/promises");
|
|
98
|
+
return await readFile(path, "utf-8");
|
|
99
|
+
}
|
|
100
|
+
async function defaultWriteFile(path, content) {
|
|
101
|
+
const { writeFile, mkdir } = await import("node:fs/promises");
|
|
102
|
+
const { dirname } = await import("node:path");
|
|
103
|
+
await mkdir(dirname(path), { recursive: true });
|
|
104
|
+
await writeFile(path, content, "utf-8");
|
|
105
|
+
}
|
|
106
|
+
async function defaultBackupFile(path, backupPath) {
|
|
107
|
+
const { rename } = await import("node:fs/promises");
|
|
108
|
+
await rename(path, backupPath);
|
|
109
|
+
}
|
|
110
|
+
async function fileExists(path) {
|
|
111
|
+
const { stat } = await import("node:fs/promises");
|
|
112
|
+
try {
|
|
113
|
+
await stat(path);
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function joinPath(...segments) {
|
|
121
|
+
return segments.filter(Boolean).join("/").replace(/\/+/g, "/");
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* config.json 在 dataRoot 内的完整路径
|
|
125
|
+
*/
|
|
126
|
+
export function resolveConfigPath(dataRoot) {
|
|
127
|
+
return joinPath(dataRoot, ".co-engram", TEAM_MEMORY_CONFIG_FILENAME);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* 读取 config(原始,不做迁移)
|
|
131
|
+
*
|
|
132
|
+
* 文件不存在或 JSON 解析失败时返回 undefined。
|
|
133
|
+
* 想要"自愈 + 完整 config"请用 {@link loadAndSelfHealConfig}。
|
|
134
|
+
*/
|
|
135
|
+
export async function readTeamMemoryConfig(dataRoot, fsRead) {
|
|
136
|
+
const path = resolveConfigPath(dataRoot);
|
|
137
|
+
try {
|
|
138
|
+
const content = fsRead ? await fsRead(path) : await defaultReadFile(path);
|
|
139
|
+
const parsed = JSON.parse(content);
|
|
140
|
+
if (parsed && typeof parsed === "object" && parsed.version === 1) {
|
|
141
|
+
return parsed;
|
|
142
|
+
}
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* 写入 config(完整覆盖)
|
|
151
|
+
*/
|
|
152
|
+
export async function writeTeamMemoryConfig(dataRoot, config, fsWrite) {
|
|
153
|
+
const path = resolveConfigPath(dataRoot);
|
|
154
|
+
const content = JSON.stringify(config, null, 2) + "\n";
|
|
155
|
+
if (fsWrite) {
|
|
156
|
+
await fsWrite(path, content);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
await defaultWriteFile(path, content);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* 加载 config 并自愈
|
|
163
|
+
*
|
|
164
|
+
* 行为:
|
|
165
|
+
* 1. 文件不存在 → 写入默认 config,返回 `{ event: 'created' }`
|
|
166
|
+
* 2. 文件存在但 JSON 损坏 → 备份为 `config.json.broken.<ts>` 后写默认,返回 `{ event: 'repaired', backupPath }`
|
|
167
|
+
* 3. 文件存在且合法但字段缺失/有旧字段 → 规范化后写回,返回 `{ event: 'normalized' }`
|
|
168
|
+
* 4. 文件存在且完整 → 直接返回,返回 `{ event: 'loaded' }`
|
|
169
|
+
*/
|
|
170
|
+
export async function loadAndSelfHealConfig(dataRoot) {
|
|
171
|
+
const path = resolveConfigPath(dataRoot);
|
|
172
|
+
const exists = await fileExists(path);
|
|
173
|
+
if (!exists) {
|
|
174
|
+
const config = createDefaultConfig();
|
|
175
|
+
await writeTeamMemoryConfig(dataRoot, config);
|
|
176
|
+
return { config, event: "created" };
|
|
177
|
+
}
|
|
178
|
+
let raw;
|
|
179
|
+
let parseFailed = false;
|
|
180
|
+
try {
|
|
181
|
+
const content = await defaultReadFile(path);
|
|
182
|
+
const parsed = JSON.parse(content);
|
|
183
|
+
if (parsed && typeof parsed === "object" && parsed.version === 1) {
|
|
184
|
+
raw = parsed;
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
parseFailed = true;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
parseFailed = true;
|
|
192
|
+
}
|
|
193
|
+
if (parseFailed || raw === undefined) {
|
|
194
|
+
const ts = new Date().toISOString().replace(/[:.]/g, "-");
|
|
195
|
+
const backupPath = `${path}.broken.${ts}`;
|
|
196
|
+
try {
|
|
197
|
+
await defaultBackupFile(path, backupPath);
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
// 备份失败不阻塞,继续写默认
|
|
201
|
+
}
|
|
202
|
+
const config = createDefaultConfig();
|
|
203
|
+
await writeTeamMemoryConfig(dataRoot, config);
|
|
204
|
+
return { config, event: "repaired", backupPath };
|
|
205
|
+
}
|
|
206
|
+
if (!needsNormalize(raw)) {
|
|
207
|
+
return { config: raw, event: "loaded" };
|
|
208
|
+
}
|
|
209
|
+
const normalized = normalizeConfig(raw);
|
|
210
|
+
await writeTeamMemoryConfig(dataRoot, normalized);
|
|
211
|
+
return { config: normalized, event: "normalized" };
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* 仅把 `desiredDataRoot` 一个字段写入 config.json(用于 viewer redirect hint)
|
|
215
|
+
*
|
|
216
|
+
* 不修改其他字段(viewer 切 dataRoot 时不破坏现有 config)。
|
|
217
|
+
*/
|
|
218
|
+
export async function setDesiredDataRoot(dataRoot, desiredDataRoot) {
|
|
219
|
+
const current = await readTeamMemoryConfig(dataRoot);
|
|
220
|
+
const base = current ?? createDefaultConfig();
|
|
221
|
+
const next = desiredDataRoot
|
|
222
|
+
? { ...base, desiredDataRoot }
|
|
223
|
+
: (() => {
|
|
224
|
+
const { desiredDataRoot: _drop, ...rest } = base;
|
|
225
|
+
void _drop;
|
|
226
|
+
return rest;
|
|
227
|
+
})();
|
|
228
|
+
await writeTeamMemoryConfig(dataRoot, next);
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
|