@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
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Triage(三态裁决)
|
|
3
|
+
*
|
|
4
|
+
* 接口:LlmTriageProvider(由宿主实现,绑定具体 LLM provider)
|
|
5
|
+
* 默认实现:LocalHeuristicTriage(启发式规则,无需 LLM)
|
|
6
|
+
*
|
|
7
|
+
* 启发式规则(P1 默认):
|
|
8
|
+
* 1. contentHash 完全匹配(sha256)→ DUPLICATE(confidence=1.0)
|
|
9
|
+
* 2. title 完全相同 + similarity ≥ titleMatchUpdateThreshold → UPDATE
|
|
10
|
+
* 3. similarity ≥ highSimilarityUpdateThreshold(无论 title)→ UPDATE
|
|
11
|
+
* 4. similarity ≥ newRelatedThreshold → NEW(标记可能相关,但不合并)
|
|
12
|
+
* 5. 其他 → NEW
|
|
13
|
+
*
|
|
14
|
+
* similarity 字段由 SimilarityEngine 给出(如 TokenJaccardSimilarityEngine),
|
|
15
|
+
* triage 信任引擎结果,不重新计算。
|
|
16
|
+
*
|
|
17
|
+
* 启发式适合 P1 测试和小规模数据;生产环境用 LlmTriageProvider
|
|
18
|
+
* 调用真正的 LLM 做语义判断。
|
|
19
|
+
*
|
|
20
|
+
* @module @co-engram/core/dedup
|
|
21
|
+
*/
|
|
22
|
+
import type { LlmTriageProvider, TriageInput, TriageResult } from "./types.js";
|
|
23
|
+
/** 启发式 triage 阈值(可配置) */
|
|
24
|
+
export interface HeuristicThresholds {
|
|
25
|
+
/** title 完全相同 + similarity ≥ 此值 → UPDATE */
|
|
26
|
+
readonly titleMatchUpdateThreshold: number;
|
|
27
|
+
/** similarity ≥ 此值(无论 title)→ UPDATE */
|
|
28
|
+
readonly highSimilarityUpdateThreshold: number;
|
|
29
|
+
/** similarity ≥ 此值 → 至少考虑为 NEW(不合并) */
|
|
30
|
+
readonly newRelatedThreshold: number;
|
|
31
|
+
}
|
|
32
|
+
export declare const DEFAULT_THRESHOLDS: HeuristicThresholds;
|
|
33
|
+
/**
|
|
34
|
+
* 启发式 triage(不调用 LLM)
|
|
35
|
+
*
|
|
36
|
+
* 适合 P1 阶段测试和小规模数据;
|
|
37
|
+
* 当候选 < 5 且规则明确时,与 LLM 结果接近。
|
|
38
|
+
*/
|
|
39
|
+
export declare class LocalHeuristicTriage implements LlmTriageProvider {
|
|
40
|
+
private readonly thresholds;
|
|
41
|
+
constructor(thresholds?: HeuristicThresholds);
|
|
42
|
+
triage(input: TriageInput): Promise<TriageResult>;
|
|
43
|
+
/**
|
|
44
|
+
* 同步版本:用于 engram_create 自动 dedupe
|
|
45
|
+
*/
|
|
46
|
+
triageSync(input: TriageInput): TriageResult;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=llm-triage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-triage.d.ts","sourceRoot":"","sources":["../../src/dedup/llm-triage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAEV,iBAAiB,EACjB,WAAW,EACX,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,yBAAyB;AACzB,MAAM,WAAW,mBAAmB;IAClC,4CAA4C;IAC5C,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAC3C,wCAAwC;IACxC,QAAQ,CAAC,6BAA6B,EAAE,MAAM,CAAC;IAC/C,uCAAuC;IACvC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED,eAAO,MAAM,kBAAkB,EAAE,mBAIhC,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,oBAAqB,YAAW,iBAAiB;IAE1D,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,GAAE,mBAAwC;IAGjE,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAIvD;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY;CAkE7C"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Triage(三态裁决)
|
|
3
|
+
*
|
|
4
|
+
* 接口:LlmTriageProvider(由宿主实现,绑定具体 LLM provider)
|
|
5
|
+
* 默认实现:LocalHeuristicTriage(启发式规则,无需 LLM)
|
|
6
|
+
*
|
|
7
|
+
* 启发式规则(P1 默认):
|
|
8
|
+
* 1. contentHash 完全匹配(sha256)→ DUPLICATE(confidence=1.0)
|
|
9
|
+
* 2. title 完全相同 + similarity ≥ titleMatchUpdateThreshold → UPDATE
|
|
10
|
+
* 3. similarity ≥ highSimilarityUpdateThreshold(无论 title)→ UPDATE
|
|
11
|
+
* 4. similarity ≥ newRelatedThreshold → NEW(标记可能相关,但不合并)
|
|
12
|
+
* 5. 其他 → NEW
|
|
13
|
+
*
|
|
14
|
+
* similarity 字段由 SimilarityEngine 给出(如 TokenJaccardSimilarityEngine),
|
|
15
|
+
* triage 信任引擎结果,不重新计算。
|
|
16
|
+
*
|
|
17
|
+
* 启发式适合 P1 测试和小规模数据;生产环境用 LlmTriageProvider
|
|
18
|
+
* 调用真正的 LLM 做语义判断。
|
|
19
|
+
*
|
|
20
|
+
* @module @co-engram/core/dedup
|
|
21
|
+
*/
|
|
22
|
+
import { computeContentHash } from "../storage/hash.js";
|
|
23
|
+
export const DEFAULT_THRESHOLDS = {
|
|
24
|
+
titleMatchUpdateThreshold: 0.7,
|
|
25
|
+
highSimilarityUpdateThreshold: 0.85,
|
|
26
|
+
newRelatedThreshold: 0.5,
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* 启发式 triage(不调用 LLM)
|
|
30
|
+
*
|
|
31
|
+
* 适合 P1 阶段测试和小规模数据;
|
|
32
|
+
* 当候选 < 5 且规则明确时,与 LLM 结果接近。
|
|
33
|
+
*/
|
|
34
|
+
export class LocalHeuristicTriage {
|
|
35
|
+
thresholds;
|
|
36
|
+
constructor(thresholds = DEFAULT_THRESHOLDS) {
|
|
37
|
+
this.thresholds = thresholds;
|
|
38
|
+
}
|
|
39
|
+
async triage(input) {
|
|
40
|
+
return this.triageSync(input);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 同步版本:用于 engram_create 自动 dedupe
|
|
44
|
+
*/
|
|
45
|
+
triageSync(input) {
|
|
46
|
+
if (input.candidates.length === 0) {
|
|
47
|
+
return {
|
|
48
|
+
verdict: "NEW",
|
|
49
|
+
reason: "no candidates",
|
|
50
|
+
confidence: 1,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const newHash = computeContentHash(input.newContent);
|
|
54
|
+
let bestUpdate = null;
|
|
55
|
+
let bestRelated = null;
|
|
56
|
+
for (const candidate of input.candidates) {
|
|
57
|
+
// 1. hash 完全匹配 → DUPLICATE
|
|
58
|
+
if (newHash === candidate.contentHash) {
|
|
59
|
+
return {
|
|
60
|
+
verdict: "DUPLICATE",
|
|
61
|
+
duplicateOf: candidate.id,
|
|
62
|
+
reason: `exact contentHash match: ${candidate.contentHash}`,
|
|
63
|
+
confidence: 1,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
const similarity = candidate.similarity;
|
|
67
|
+
const titleMatch = candidate.title === input.newTitle;
|
|
68
|
+
// 2/3. 判断 UPDATE 条件(信任引擎给出的 similarity)
|
|
69
|
+
const shouldUpdate = (titleMatch &&
|
|
70
|
+
similarity >= this.thresholds.titleMatchUpdateThreshold) ||
|
|
71
|
+
similarity >= this.thresholds.highSimilarityUpdateThreshold;
|
|
72
|
+
if (shouldUpdate && (!bestUpdate || similarity > bestUpdate.similarity)) {
|
|
73
|
+
bestUpdate = { candidate, similarity };
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
// 4. 记录可能相关(但不合并)
|
|
77
|
+
if (similarity >= this.thresholds.newRelatedThreshold) {
|
|
78
|
+
if (!bestRelated || similarity > bestRelated.similarity) {
|
|
79
|
+
bestRelated = { candidate, similarity };
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (bestUpdate) {
|
|
84
|
+
return {
|
|
85
|
+
verdict: "UPDATE",
|
|
86
|
+
updateTarget: bestUpdate.candidate.id,
|
|
87
|
+
reason: `similarity=${bestUpdate.similarity.toFixed(3)} title=${bestUpdate.candidate.title === input.newTitle ? "match" : "diff"}`,
|
|
88
|
+
confidence: bestUpdate.similarity,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
verdict: "NEW",
|
|
93
|
+
reason: bestRelated
|
|
94
|
+
? `best related similarity=${bestRelated.similarity.toFixed(3)} below update threshold`
|
|
95
|
+
: "no candidate above update threshold",
|
|
96
|
+
confidence: 0.9,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=llm-triage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-triage.js","sourceRoot":"","sources":["../../src/dedup/llm-triage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 合并路径(UPDATE)
|
|
3
|
+
*
|
|
4
|
+
* 当 triage 裁决 UPDATE 时,调用本模块合并新旧内容:
|
|
5
|
+
* - 用新内容覆盖旧 content
|
|
6
|
+
* - 保留旧 meta 中不可变字段(createdBy/createdAt)
|
|
7
|
+
* - version += 1
|
|
8
|
+
* - mergeHistory 追加一条记录
|
|
9
|
+
* - 更新 updatedAt / updatedBy
|
|
10
|
+
*
|
|
11
|
+
* 注意:本模块只做合并语义;具体落盘通过 repository.updateEngram。
|
|
12
|
+
*
|
|
13
|
+
* @module @co-engram/core/dedup
|
|
14
|
+
*/
|
|
15
|
+
import type { EngramRepository } from "../storage/repository.js";
|
|
16
|
+
import type { MergeHistoryEntry } from "./types.js";
|
|
17
|
+
export interface MergeInput {
|
|
18
|
+
readonly id: string;
|
|
19
|
+
readonly newTitle?: string;
|
|
20
|
+
readonly newContent?: string;
|
|
21
|
+
readonly newSummary?: string;
|
|
22
|
+
readonly newImportance?: number;
|
|
23
|
+
readonly mergedBy: string;
|
|
24
|
+
readonly reason: string;
|
|
25
|
+
}
|
|
26
|
+
export interface MergeResult {
|
|
27
|
+
readonly id: string;
|
|
28
|
+
readonly version: number;
|
|
29
|
+
readonly mergeHistoryEntry: MergeHistoryEntry;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 合并 engram(UPDATE 路径)
|
|
33
|
+
*
|
|
34
|
+
* 流程:
|
|
35
|
+
* 1. 读旧 engram
|
|
36
|
+
* 2. 计算 fromHash / toHash
|
|
37
|
+
* 3. 用 updateEngram 写入新字段(version 自动 +1)
|
|
38
|
+
* 4. 在 meta.yaml 追加 mergeHistory(通过 updateMeta 单独写入)
|
|
39
|
+
*/
|
|
40
|
+
export declare function mergeEngram(repo: EngramRepository, input: MergeInput): MergeResult;
|
|
41
|
+
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/dedup/merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;CAC/C;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,UAAU,GAChB,WAAW,CAkCb"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 合并路径(UPDATE)
|
|
3
|
+
*
|
|
4
|
+
* 当 triage 裁决 UPDATE 时,调用本模块合并新旧内容:
|
|
5
|
+
* - 用新内容覆盖旧 content
|
|
6
|
+
* - 保留旧 meta 中不可变字段(createdBy/createdAt)
|
|
7
|
+
* - version += 1
|
|
8
|
+
* - mergeHistory 追加一条记录
|
|
9
|
+
* - 更新 updatedAt / updatedBy
|
|
10
|
+
*
|
|
11
|
+
* 注意:本模块只做合并语义;具体落盘通过 repository.updateEngram。
|
|
12
|
+
*
|
|
13
|
+
* @module @co-engram/core/dedup
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* 合并 engram(UPDATE 路径)
|
|
17
|
+
*
|
|
18
|
+
* 流程:
|
|
19
|
+
* 1. 读旧 engram
|
|
20
|
+
* 2. 计算 fromHash / toHash
|
|
21
|
+
* 3. 用 updateEngram 写入新字段(version 自动 +1)
|
|
22
|
+
* 4. 在 meta.yaml 追加 mergeHistory(通过 updateMeta 单独写入)
|
|
23
|
+
*/
|
|
24
|
+
export function mergeEngram(repo, input) {
|
|
25
|
+
if (!repo.exists(input.id)) {
|
|
26
|
+
throw new Error(`Engram not found: ${input.id}`);
|
|
27
|
+
}
|
|
28
|
+
const old = repo.readEngram(input.id);
|
|
29
|
+
const newContent = input.newContent ?? old.content;
|
|
30
|
+
// 1. 触发 updateEngram(version+1 + 字段更新)
|
|
31
|
+
const updated = repo.updateEngram(input.id, {
|
|
32
|
+
title: input.newTitle,
|
|
33
|
+
content: input.newContent,
|
|
34
|
+
summary: input.newSummary,
|
|
35
|
+
importance: input.newImportance,
|
|
36
|
+
updatedBy: input.mergedBy,
|
|
37
|
+
});
|
|
38
|
+
// 2. 构造 merge history entry
|
|
39
|
+
const entry = {
|
|
40
|
+
at: updated.updatedAt,
|
|
41
|
+
fromHash: old.contentHash,
|
|
42
|
+
toHash: updated.contentHash,
|
|
43
|
+
reason: input.reason,
|
|
44
|
+
mergedBy: input.mergedBy,
|
|
45
|
+
};
|
|
46
|
+
// 3. P1:mergeHistory 暂存在内存(不落盘)
|
|
47
|
+
// P2 会扩展 meta schema 加 mergeHistory 数组字段
|
|
48
|
+
// 目前通过 mergeEngram 返回值暴露给调用方,由上层决定如何持久化
|
|
49
|
+
return {
|
|
50
|
+
id: input.id,
|
|
51
|
+
version: updated.version,
|
|
52
|
+
mergeHistoryEntry: entry,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/dedup/merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAqBH;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CACzB,IAAsB,EACtB,KAAiB;IAEjB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC,OAAO,CAAC;IAEnD,uCAAuC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE;QAC1C,KAAK,EAAE,KAAK,CAAC,QAAQ;QACrB,OAAO,EAAE,KAAK,CAAC,UAAU;QACzB,OAAO,EAAE,KAAK,CAAC,UAAU;QACzB,UAAU,EAAE,KAAK,CAAC,aAAa;QAC/B,SAAS,EAAE,KAAK,CAAC,QAAQ;KAC1B,CAAC,CAAC;IAEH,4BAA4B;IAC5B,MAAM,KAAK,GAAsB;QAC/B,EAAE,EAAE,OAAO,CAAC,SAAS;QACrB,QAAQ,EAAE,GAAG,CAAC,WAAW;QACzB,MAAM,EAAE,OAAO,CAAC,WAAW;QAC3B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC;IAEF,gCAAgC;IAChC,4CAA4C;IAC5C,wCAAwC;IAExC,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,iBAAiB,EAAE,KAAK;KACzB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 相似度候选查找
|
|
3
|
+
*
|
|
4
|
+
* P1 实现:Token Jaccard 相似度(中英混合分词)
|
|
5
|
+
* P2 升级:向量余弦相似度(embedding model)
|
|
6
|
+
*
|
|
7
|
+
* 接口稳定:SimilarityEngine 抽象,P2 替换底层实现即可。
|
|
8
|
+
*
|
|
9
|
+
* @module @co-engram/core/dedup
|
|
10
|
+
*/
|
|
11
|
+
import type { EngramRepository } from "../storage/repository.js";
|
|
12
|
+
import type { DedupCandidate, SimilarityEngine } from "./types.js";
|
|
13
|
+
/**
|
|
14
|
+
* Token 化(与 retrieval/fts.ts 保持一致的策略)
|
|
15
|
+
*
|
|
16
|
+
* - 中文:单字 + bigram
|
|
17
|
+
* - 英文:word boundary
|
|
18
|
+
* - 小写化
|
|
19
|
+
*/
|
|
20
|
+
export declare function tokenizeForDedup(text: string): Set<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Jaccard 相似度:|A ∩ B| / |A ∪ B|
|
|
23
|
+
*
|
|
24
|
+
* 返回 [0,1],越大越相似。
|
|
25
|
+
*/
|
|
26
|
+
export declare function jaccardSimilarity(a: Set<string>, b: Set<string>): number;
|
|
27
|
+
/**
|
|
28
|
+
* Token Jaccard 相似度引擎(P1 默认实现)
|
|
29
|
+
*/
|
|
30
|
+
export declare class TokenJaccardSimilarityEngine implements SimilarityEngine {
|
|
31
|
+
private readonly repo;
|
|
32
|
+
constructor(repo: EngramRepository);
|
|
33
|
+
findCandidates(text: string, options: {
|
|
34
|
+
topK: number;
|
|
35
|
+
minSimilarity: number;
|
|
36
|
+
}): Promise<readonly DedupCandidate[]>;
|
|
37
|
+
/**
|
|
38
|
+
* 同步版本:用于 engram_create 自动 dedupe(无 IO 等待)
|
|
39
|
+
*/
|
|
40
|
+
findCandidatesSync(text: string, options: {
|
|
41
|
+
topK: number;
|
|
42
|
+
minSimilarity: number;
|
|
43
|
+
}): readonly DedupCandidate[];
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=similar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"similar.d.ts","sourceRoot":"","sources":["../../src/dedup/similar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnE;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAwB1D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAQxE;AAED;;GAEG;AACH,qBAAa,4BAA6B,YAAW,gBAAgB;IACvD,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,gBAAgB;IAE7C,cAAc,CAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAC/C,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC;IAIrC;;OAEG;IACH,kBAAkB,CAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAC/C,SAAS,cAAc,EAAE;CA6B7B"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 相似度候选查找
|
|
3
|
+
*
|
|
4
|
+
* P1 实现:Token Jaccard 相似度(中英混合分词)
|
|
5
|
+
* P2 升级:向量余弦相似度(embedding model)
|
|
6
|
+
*
|
|
7
|
+
* 接口稳定:SimilarityEngine 抽象,P2 替换底层实现即可。
|
|
8
|
+
*
|
|
9
|
+
* @module @co-engram/core/dedup
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Token 化(与 retrieval/fts.ts 保持一致的策略)
|
|
13
|
+
*
|
|
14
|
+
* - 中文:单字 + bigram
|
|
15
|
+
* - 英文:word boundary
|
|
16
|
+
* - 小写化
|
|
17
|
+
*/
|
|
18
|
+
export function tokenizeForDedup(text) {
|
|
19
|
+
if (!text)
|
|
20
|
+
return new Set();
|
|
21
|
+
const lower = text.toLowerCase();
|
|
22
|
+
const tokens = new Set();
|
|
23
|
+
const englishWords = lower.match(/[a-z][a-z0-9_-]{1,}/g) ?? [];
|
|
24
|
+
for (const w of englishWords)
|
|
25
|
+
tokens.add(w);
|
|
26
|
+
const chineseSegments = lower.match(/[一-龥]+/g) ?? [];
|
|
27
|
+
for (const seg of chineseSegments) {
|
|
28
|
+
if (seg.length === 1) {
|
|
29
|
+
tokens.add(seg);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
for (let i = 0; i < seg.length - 1; i++) {
|
|
33
|
+
tokens.add(seg.slice(i, i + 2));
|
|
34
|
+
}
|
|
35
|
+
for (const ch of seg)
|
|
36
|
+
tokens.add(ch);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const numbers = lower.match(/\d+/g) ?? [];
|
|
40
|
+
for (const n of numbers)
|
|
41
|
+
tokens.add(n);
|
|
42
|
+
return tokens;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Jaccard 相似度:|A ∩ B| / |A ∪ B|
|
|
46
|
+
*
|
|
47
|
+
* 返回 [0,1],越大越相似。
|
|
48
|
+
*/
|
|
49
|
+
export function jaccardSimilarity(a, b) {
|
|
50
|
+
if (a.size === 0 && b.size === 0)
|
|
51
|
+
return 0;
|
|
52
|
+
let intersection = 0;
|
|
53
|
+
for (const t of a) {
|
|
54
|
+
if (b.has(t))
|
|
55
|
+
intersection += 1;
|
|
56
|
+
}
|
|
57
|
+
const union = a.size + b.size - intersection;
|
|
58
|
+
return union === 0 ? 0 : intersection / union;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Token Jaccard 相似度引擎(P1 默认实现)
|
|
62
|
+
*/
|
|
63
|
+
export class TokenJaccardSimilarityEngine {
|
|
64
|
+
repo;
|
|
65
|
+
constructor(repo) {
|
|
66
|
+
this.repo = repo;
|
|
67
|
+
}
|
|
68
|
+
async findCandidates(text, options) {
|
|
69
|
+
return this.findCandidatesSync(text, options);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 同步版本:用于 engram_create 自动 dedupe(无 IO 等待)
|
|
73
|
+
*/
|
|
74
|
+
findCandidatesSync(text, options) {
|
|
75
|
+
const queryTokens = tokenizeForDedup(text);
|
|
76
|
+
if (queryTokens.size === 0)
|
|
77
|
+
return [];
|
|
78
|
+
const candidates = [];
|
|
79
|
+
for (const entry of this.repo.listEngrams()) {
|
|
80
|
+
const engram = this.repo.readEngram(entry.id);
|
|
81
|
+
const engramTokens = tokenizeForDedup(`${engram.title} ${engram.summary} ${engram.content}`);
|
|
82
|
+
const similarity = jaccardSimilarity(queryTokens, engramTokens);
|
|
83
|
+
if (similarity < options.minSimilarity)
|
|
84
|
+
continue;
|
|
85
|
+
candidates.push({
|
|
86
|
+
id: engram.id,
|
|
87
|
+
title: engram.title,
|
|
88
|
+
summary: engram.summary,
|
|
89
|
+
content: engram.content,
|
|
90
|
+
contentHash: engram.contentHash,
|
|
91
|
+
similarity,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return candidates
|
|
95
|
+
.sort((a, b) => {
|
|
96
|
+
if (a.similarity !== b.similarity)
|
|
97
|
+
return b.similarity - a.similarity;
|
|
98
|
+
return a.id < b.id ? -1 : 1; // 稳定排序
|
|
99
|
+
})
|
|
100
|
+
.slice(0, options.topK);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=similar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"similar.js","sourceRoot":"","sources":["../../src/dedup/similar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 智能去重类型定义
|
|
3
|
+
*
|
|
4
|
+
* FlexMem 风格的三态判断(DUPLICATE / UPDATE / NEW)。
|
|
5
|
+
*
|
|
6
|
+
* 流程:
|
|
7
|
+
* 1. 精确匹配:contentHash 是否已存在 → DUPLICATE
|
|
8
|
+
* 2. 相似度召回:Top-K 候选(token Jaccard 或向量余弦)
|
|
9
|
+
* 3. LLM/启发式 triage:在候选中裁决 → DUPLICATE / UPDATE / NEW
|
|
10
|
+
* 4. 处理:
|
|
11
|
+
* - DUPLICATE:跳过创建,强化原 engram(LTP)
|
|
12
|
+
* - UPDATE:合并 + version+1 + mergeHistory 记录
|
|
13
|
+
* - NEW:正常创建
|
|
14
|
+
*
|
|
15
|
+
* @module @co-engram/core/dedup
|
|
16
|
+
*/
|
|
17
|
+
import type { EngramId } from "../types/engram.js";
|
|
18
|
+
/** 三态裁决 */
|
|
19
|
+
export type DedupVerdict = "DUPLICATE" | "UPDATE" | "NEW";
|
|
20
|
+
/** 去重候选 */
|
|
21
|
+
export interface DedupCandidate {
|
|
22
|
+
readonly id: EngramId;
|
|
23
|
+
readonly title: string;
|
|
24
|
+
readonly summary: string;
|
|
25
|
+
readonly content: string;
|
|
26
|
+
readonly contentHash: string;
|
|
27
|
+
readonly similarity: number;
|
|
28
|
+
}
|
|
29
|
+
/** triage 输入(候选 + 新内容) */
|
|
30
|
+
export interface TriageInput {
|
|
31
|
+
readonly newTitle: string;
|
|
32
|
+
readonly newContent: string;
|
|
33
|
+
readonly candidates: readonly DedupCandidate[];
|
|
34
|
+
}
|
|
35
|
+
/** triage 输出 */
|
|
36
|
+
export interface TriageResult {
|
|
37
|
+
readonly verdict: DedupVerdict;
|
|
38
|
+
/** verdict=DUPLICATE 时指向被复制的 engram */
|
|
39
|
+
readonly duplicateOf?: EngramId;
|
|
40
|
+
/** verdict=UPDATE 时指向被更新的 engram */
|
|
41
|
+
readonly updateTarget?: EngramId;
|
|
42
|
+
readonly reason: string;
|
|
43
|
+
readonly confidence: number;
|
|
44
|
+
}
|
|
45
|
+
/** 去重总结果 */
|
|
46
|
+
export interface DedupResult {
|
|
47
|
+
readonly verdict: DedupVerdict;
|
|
48
|
+
readonly targetId?: EngramId;
|
|
49
|
+
readonly reason: string;
|
|
50
|
+
readonly confidence: number;
|
|
51
|
+
readonly candidatesConsidered: number;
|
|
52
|
+
}
|
|
53
|
+
/** 相似度引擎接口(P1: token Jaccard;P2: 向量余弦) */
|
|
54
|
+
export interface SimilarityEngine {
|
|
55
|
+
findCandidates(text: string, options: {
|
|
56
|
+
topK: number;
|
|
57
|
+
minSimilarity: number;
|
|
58
|
+
}): Promise<readonly DedupCandidate[]>;
|
|
59
|
+
}
|
|
60
|
+
/** LLM triage 接口(宿主提供,core 不绑定 provider) */
|
|
61
|
+
export interface LlmTriageProvider {
|
|
62
|
+
triage(input: TriageInput): Promise<TriageResult>;
|
|
63
|
+
}
|
|
64
|
+
/** 合并记录(写入 meta.mergeHistory) */
|
|
65
|
+
export interface MergeHistoryEntry {
|
|
66
|
+
readonly at: string;
|
|
67
|
+
readonly fromHash: string;
|
|
68
|
+
readonly toHash: string;
|
|
69
|
+
readonly reason: string;
|
|
70
|
+
readonly mergedBy: string;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dedup/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,WAAW;AACX,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE1D,WAAW;AACX,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,0BAA0B;AAC1B,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,CAAC;CAChD;AAED,gBAAgB;AAChB,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,uCAAuC;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC;IAChC,oCAAoC;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,YAAY;AACZ,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC;AAED,0CAA0C;AAC1C,MAAM,WAAW,gBAAgB;IAC/B,cAAc,CACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAC/C,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;CACvC;AAED,4CAA4C;AAC5C,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACnD;AAED,iCAAiC;AACjC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 智能去重类型定义
|
|
3
|
+
*
|
|
4
|
+
* FlexMem 风格的三态判断(DUPLICATE / UPDATE / NEW)。
|
|
5
|
+
*
|
|
6
|
+
* 流程:
|
|
7
|
+
* 1. 精确匹配:contentHash 是否已存在 → DUPLICATE
|
|
8
|
+
* 2. 相似度召回:Top-K 候选(token Jaccard 或向量余弦)
|
|
9
|
+
* 3. LLM/启发式 triage:在候选中裁决 → DUPLICATE / UPDATE / NEW
|
|
10
|
+
* 4. 处理:
|
|
11
|
+
* - DUPLICATE:跳过创建,强化原 engram(LTP)
|
|
12
|
+
* - UPDATE:合并 + version+1 + mergeHistory 记录
|
|
13
|
+
* - NEW:正常创建
|
|
14
|
+
*
|
|
15
|
+
* @module @co-engram/core/dedup
|
|
16
|
+
*/
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/dedup/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adaptive Disclosure:按预算自动选择 tier
|
|
3
|
+
*
|
|
4
|
+
* 实现 spec 3.2 的 adaptiveDisclosure 伪代码:
|
|
5
|
+
*
|
|
6
|
+
* candidates = semanticSearch(query)
|
|
7
|
+
* loaded = { c.id: c.toCatalogEntry() for c in candidates } // 阶段 1
|
|
8
|
+
* for c in sortByScore(candidates): // 阶段 2
|
|
9
|
+
* if budget.remaining > c.digestSize:
|
|
10
|
+
* upgrade(c, 'digest')
|
|
11
|
+
* for c in topK(candidates, k=adaptive): // 阶段 3
|
|
12
|
+
* if budget.remaining > c.contentSize:
|
|
13
|
+
* upgrade(c, 'content')
|
|
14
|
+
* // 阶段 4:meta/synapse 由 agent 显式请求
|
|
15
|
+
*
|
|
16
|
+
* 关键特性:
|
|
17
|
+
* - 每个 engram 独立决定 tier(不是全量分层)
|
|
18
|
+
* - budget 不可用时(remaining ≤ 0)停止升级
|
|
19
|
+
* - 相同输入产生相同输出(prompt cache 友好)
|
|
20
|
+
*
|
|
21
|
+
* @module @co-engram/core/disclosure
|
|
22
|
+
*/
|
|
23
|
+
import type { EngramId } from "../types/engram.js";
|
|
24
|
+
import type { ContextBudget, DisclosureTier, EngramView } from "../types/disclosure.js";
|
|
25
|
+
import type { EngramRepository } from "../storage/repository.js";
|
|
26
|
+
import type { DigestLine } from "../index/types.js";
|
|
27
|
+
/** 自适应披露输入 */
|
|
28
|
+
export interface AdaptiveDisclosureInput {
|
|
29
|
+
/** 仓库(用于按需加载 tier) */
|
|
30
|
+
readonly repository: EngramRepository;
|
|
31
|
+
/** 候选集(含 score;通常来自 SearchOrchestrator) */
|
|
32
|
+
readonly candidates: ReadonlyArray<{
|
|
33
|
+
id: EngramId;
|
|
34
|
+
score: number;
|
|
35
|
+
}>;
|
|
36
|
+
/** 候选的 DigestLine(用于预估大小) */
|
|
37
|
+
readonly digestLines: Readonly<Record<EngramId, DigestLine>>;
|
|
38
|
+
/** Token 预算(会被消耗,返回剩余) */
|
|
39
|
+
readonly budget: ContextBudget;
|
|
40
|
+
/** Top-K 升级到 content 的 K 值(默认 min(5, candidates.length)) */
|
|
41
|
+
readonly topK?: number;
|
|
42
|
+
/** 摘要层(阶段 2 升级上限;默认全升级) */
|
|
43
|
+
readonly maxDigestUpgrades?: number;
|
|
44
|
+
}
|
|
45
|
+
/** 单条加载结果 */
|
|
46
|
+
export interface LoadedEntry {
|
|
47
|
+
readonly id: EngramId;
|
|
48
|
+
readonly score: number;
|
|
49
|
+
readonly view: EngramView;
|
|
50
|
+
}
|
|
51
|
+
/** 自适应披露输出 */
|
|
52
|
+
export interface AdaptiveDisclosureResult {
|
|
53
|
+
/** 加载的视图(按原 candidates 顺序) */
|
|
54
|
+
readonly loaded: readonly LoadedEntry[];
|
|
55
|
+
/** 实际消耗的 token 数(所有视图累加) */
|
|
56
|
+
readonly tokensUsed: number;
|
|
57
|
+
/** 剩余预算 */
|
|
58
|
+
readonly budgetRemaining: number;
|
|
59
|
+
/** 各 tier 分布:tier → count */
|
|
60
|
+
readonly tierBreakdown: Readonly<Record<DisclosureTier, number>>;
|
|
61
|
+
/** 触发的阶段(1=catalog、2=digest、3=content) */
|
|
62
|
+
readonly reachedStage: 1 | 2 | 3;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 执行自适应披露
|
|
66
|
+
*
|
|
67
|
+
* 算法(严格按 spec 顺序):
|
|
68
|
+
* 1. 所有候选加载为 catalog
|
|
69
|
+
* 2. 按 score 倒序,逐个升级到 digest(若预算够)
|
|
70
|
+
* 3. Top-K(默认 min(5, len))升级到 content(若预算够)
|
|
71
|
+
* 4. meta/synapse 留给 agent 显式请求
|
|
72
|
+
*
|
|
73
|
+
* 顺序稳定性:同 score 的 candidates 保持原数组顺序(稳定排序)。
|
|
74
|
+
*/
|
|
75
|
+
export declare function adaptiveDisclosure(input: AdaptiveDisclosureInput): AdaptiveDisclosureResult;
|
|
76
|
+
/**
|
|
77
|
+
* 在自适应结果之上,按 agent 请求升级单个 engram 到指定 tier
|
|
78
|
+
*
|
|
79
|
+
* 用于阶段 4(meta / synapse)的按需请求。
|
|
80
|
+
*/
|
|
81
|
+
export declare function upgradeSingle(repository: EngramRepository, current: EngramView, target: DisclosureTier, budget: ContextBudget): {
|
|
82
|
+
view: EngramView;
|
|
83
|
+
budget: ContextBudget;
|
|
84
|
+
tierChanged: boolean;
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=adaptive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptive.d.ts","sourceRoot":"","sources":["../../src/disclosure/adaptive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,UAAU,EACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD,cAAc;AACd,MAAM,WAAW,uBAAuB;IACtC,sBAAsB;IACtB,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,2CAA2C;IAC3C,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,QAAQ,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,6BAA6B;IAC7B,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAC7D,0BAA0B;IAC1B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,2BAA2B;IAC3B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED,aAAa;AACb,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AAED,cAAc;AACd,MAAM,WAAW,wBAAwB;IACvC,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,4BAA4B;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,WAAW;IACX,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,6BAA6B;IAC7B,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;IACjE,0CAA0C;IAC1C,QAAQ,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAClC;AAUD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,uBAAuB,GAC7B,wBAAwB,CAqG1B;AAoDD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,gBAAgB,EAC5B,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,aAAa,GACpB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAenE"}
|