@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,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 检索编排器
|
|
3
|
+
*
|
|
4
|
+
* 协调 FTS / 过滤器 / 三因子排序,返回 Catalog Entry 列表
|
|
5
|
+
*
|
|
6
|
+
* P1 阶段实现(2.3):
|
|
7
|
+
* - FTS 相关度(归一化到 [0,1])
|
|
8
|
+
* - 三因子打分:α·relevance + β·recency + γ·importance
|
|
9
|
+
* - 权重可通过 setWeights() 配置
|
|
10
|
+
* - 同输入同输出(prompt cache 友好)
|
|
11
|
+
*
|
|
12
|
+
* P2 阶段会增加:
|
|
13
|
+
* - 向量余弦相似度(RRF 融合)
|
|
14
|
+
* - 动态自适应披露集成
|
|
15
|
+
*
|
|
16
|
+
* @module @co-engram/core/retrieval
|
|
17
|
+
*/
|
|
18
|
+
import { buildFtsIndex, searchFts } from "./fts.js";
|
|
19
|
+
import { applyFilter } from "./filter.js";
|
|
20
|
+
import { computeThreeFactorScore, DEFAULT_WEIGHTS, validateWeights, } from "./scoring.js";
|
|
21
|
+
/**
|
|
22
|
+
* 检索器
|
|
23
|
+
*
|
|
24
|
+
* 需要先调用 `build()` 构建 FTS 索引;后续搜索复用索引
|
|
25
|
+
*/
|
|
26
|
+
export class SearchOrchestrator {
|
|
27
|
+
ftsIndex = null;
|
|
28
|
+
lines = [];
|
|
29
|
+
weights = DEFAULT_WEIGHTS;
|
|
30
|
+
nowFn = () => new Date();
|
|
31
|
+
/**
|
|
32
|
+
* 构建 FTS 索引
|
|
33
|
+
*/
|
|
34
|
+
build(lines) {
|
|
35
|
+
this.lines = lines;
|
|
36
|
+
this.ftsIndex = buildFtsIndex(lines);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 配置三因子权重(默认 α=0.5, β=0.3, γ=0.2)
|
|
40
|
+
*
|
|
41
|
+
* 会校验和为 1。
|
|
42
|
+
*/
|
|
43
|
+
setWeights(weights) {
|
|
44
|
+
validateWeights(weights);
|
|
45
|
+
this.weights = weights;
|
|
46
|
+
}
|
|
47
|
+
/** 读取当前权重 */
|
|
48
|
+
getWeights() {
|
|
49
|
+
return this.weights;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 注入时钟函数(测试用,避免依赖系统时间)
|
|
53
|
+
*/
|
|
54
|
+
setClock(nowFn) {
|
|
55
|
+
this.nowFn = nowFn;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 搜索
|
|
59
|
+
*
|
|
60
|
+
* @param query - 查询字符串
|
|
61
|
+
* @param filter - 过滤器(可选)
|
|
62
|
+
* @param limit - 最大结果数(默认 20)
|
|
63
|
+
*/
|
|
64
|
+
search(query, filter, limit = 20) {
|
|
65
|
+
if (!this.ftsIndex) {
|
|
66
|
+
throw new Error("SearchOrchestrator not built. Call build() first.");
|
|
67
|
+
}
|
|
68
|
+
// 1. FTS 搜索
|
|
69
|
+
const hits = searchFts(query, this.ftsIndex, limit * 3);
|
|
70
|
+
if (hits.length === 0)
|
|
71
|
+
return [];
|
|
72
|
+
// 2. 归一化 FTS score 到 [0,1](除以 max)
|
|
73
|
+
const maxFts = hits[0].score;
|
|
74
|
+
const now = this.nowFn();
|
|
75
|
+
// 3. 应用过滤器 + 三因子打分
|
|
76
|
+
const scored = [];
|
|
77
|
+
for (const hit of hits) {
|
|
78
|
+
const line = this.ftsIndex.docs.get(hit.docId);
|
|
79
|
+
if (!line)
|
|
80
|
+
continue;
|
|
81
|
+
if (!applyFilter([line], filter).includes(line))
|
|
82
|
+
continue;
|
|
83
|
+
const relevance = maxFts > 0 ? hit.score / maxFts : 0;
|
|
84
|
+
const score = computeThreeFactorScore(relevance, line, {
|
|
85
|
+
now,
|
|
86
|
+
weights: this.weights,
|
|
87
|
+
});
|
|
88
|
+
scored.push({ id: line.id, score, line });
|
|
89
|
+
}
|
|
90
|
+
// 4. 稳定排序:按 score 倒序,同分按 id 字典序(prompt cache 友好)
|
|
91
|
+
scored.sort((a, b) => {
|
|
92
|
+
if (a.score !== b.score)
|
|
93
|
+
return b.score - a.score;
|
|
94
|
+
return a.id < b.id ? -1 : 1;
|
|
95
|
+
});
|
|
96
|
+
return scored.slice(0, limit).map((item) => ({
|
|
97
|
+
id: item.id,
|
|
98
|
+
score: item.score,
|
|
99
|
+
entry: {
|
|
100
|
+
id: item.line.id,
|
|
101
|
+
title: item.line.title,
|
|
102
|
+
kind: item.line.kind,
|
|
103
|
+
domainTags: item.line.domainTags,
|
|
104
|
+
},
|
|
105
|
+
}));
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 按过滤器列出(无查询)
|
|
109
|
+
*
|
|
110
|
+
* 不打相关度分(score=0),按原顺序返回。
|
|
111
|
+
* 可通过 listByImportance() 获取按 importance 排序的列表。
|
|
112
|
+
*/
|
|
113
|
+
listByFilter(filter, limit = 100) {
|
|
114
|
+
const filtered = applyFilter(this.lines, filter);
|
|
115
|
+
return filtered.slice(0, limit).map((line) => ({
|
|
116
|
+
id: line.id,
|
|
117
|
+
score: 0,
|
|
118
|
+
entry: {
|
|
119
|
+
id: line.id,
|
|
120
|
+
title: line.title,
|
|
121
|
+
kind: line.kind,
|
|
122
|
+
domainTags: line.domainTags,
|
|
123
|
+
},
|
|
124
|
+
}));
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* 按 importance + recency 排序列出(无 query)
|
|
128
|
+
*
|
|
129
|
+
* 用于"最近有效的最重要 engram"类查询(如首页推荐)。
|
|
130
|
+
*/
|
|
131
|
+
listByImportance(filter, limit = 100) {
|
|
132
|
+
const filtered = applyFilter(this.lines, filter);
|
|
133
|
+
const now = this.nowFn();
|
|
134
|
+
const scored = filtered.map((line) => ({
|
|
135
|
+
id: line.id,
|
|
136
|
+
score: computeThreeFactorScore(0, line, { now, weights: this.weights }),
|
|
137
|
+
line,
|
|
138
|
+
}));
|
|
139
|
+
scored.sort((a, b) => {
|
|
140
|
+
if (a.score !== b.score)
|
|
141
|
+
return b.score - a.score;
|
|
142
|
+
return a.id < b.id ? -1 : 1;
|
|
143
|
+
});
|
|
144
|
+
return scored.slice(0, limit).map((item) => ({
|
|
145
|
+
id: item.id,
|
|
146
|
+
score: item.score,
|
|
147
|
+
entry: {
|
|
148
|
+
id: item.line.id,
|
|
149
|
+
title: item.line.title,
|
|
150
|
+
kind: item.line.kind,
|
|
151
|
+
domainTags: item.line.domainTags,
|
|
152
|
+
},
|
|
153
|
+
}));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/retrieval/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 三因子检索打分
|
|
3
|
+
*
|
|
4
|
+
* 实现 spec 3.7:
|
|
5
|
+
* score = α·relevance + β·recency + γ·importance
|
|
6
|
+
*
|
|
7
|
+
* 其中:
|
|
8
|
+
* - relevance ∈ [0,1]:来自 FTS 归一化分(或向量余弦,P2 引入)
|
|
9
|
+
* - recency ∈ [0,1]:`0.5^(ageDays / decayHalfLifeDays)`(Ebbinghaus 衰退)
|
|
10
|
+
* · decayHalfLifeDays=null → recency=1(永不衰退)
|
|
11
|
+
* · ageDays ≤ 0(未来/刚刚)→ recency=1
|
|
12
|
+
* - importance ∈ [0,1]:`engram.importance × (1 + reinforcementScore)`
|
|
13
|
+
* · reinforcementScore 由 P1 2.1 三信号追踪累积
|
|
14
|
+
* · 用 min 截断到 [0,1],避免上溢
|
|
15
|
+
*
|
|
16
|
+
* 默认权重:α=0.5, β=0.3, γ=0.2(spec 3.7 / 决策 9)
|
|
17
|
+
*
|
|
18
|
+
* 排序稳定性:相同输入产生相同输出(不依赖 Math.random/Date.now)。
|
|
19
|
+
*
|
|
20
|
+
* @module @co-engram/core/retrieval
|
|
21
|
+
*/
|
|
22
|
+
import type { DigestLine } from "../index/types.js";
|
|
23
|
+
/** 三因子权重配置 */
|
|
24
|
+
export interface ThreeFactorWeights {
|
|
25
|
+
/** relevance 权重(语义/关键词匹配) */
|
|
26
|
+
readonly alpha: number;
|
|
27
|
+
/** recency 权重(艾宾浩斯衰退) */
|
|
28
|
+
readonly beta: number;
|
|
29
|
+
/** importance 权重(价值) */
|
|
30
|
+
readonly gamma: number;
|
|
31
|
+
}
|
|
32
|
+
/** 默认权重(spec 3.7:α=0.5, β=0.3, γ=0.2) */
|
|
33
|
+
export declare const DEFAULT_WEIGHTS: ThreeFactorWeights;
|
|
34
|
+
/**
|
|
35
|
+
* 校验权重和为 1(容差 0.001)
|
|
36
|
+
*/
|
|
37
|
+
export declare function validateWeights(w: ThreeFactorWeights): void;
|
|
38
|
+
/**
|
|
39
|
+
* 艾宾浩斯衰退函数
|
|
40
|
+
*
|
|
41
|
+
* `recency = 0.5^(ageDays / decayHalfLifeDays)`
|
|
42
|
+
*
|
|
43
|
+
* - decayHalfLifeDays=null/undefined → 1(永不衰退)
|
|
44
|
+
* - decayHalfLifeDays<=0 → 1(非法半衰期视为不衰退)
|
|
45
|
+
* - ageDays<=0 → 1(未来或刚刚)
|
|
46
|
+
*/
|
|
47
|
+
export declare function recencyDecay(ageDays: number, decayHalfLifeDays: number | null | undefined): number;
|
|
48
|
+
/**
|
|
49
|
+
* 有效重要性
|
|
50
|
+
*
|
|
51
|
+
* `effectiveImportance = importance × (1 + reinforcementScore)`
|
|
52
|
+
*
|
|
53
|
+
* 截断到 [0,1],避免 reinforcement 累积导致 > 1。
|
|
54
|
+
*
|
|
55
|
+
* - reinforcementScore 由 P1 2.1 累积(每次 reinforce 加 effectiveness)
|
|
56
|
+
* - 高 reinforcement → importance 接近原值上限
|
|
57
|
+
*/
|
|
58
|
+
export declare function effectiveImportance(importance: number, reinforcementScore: number): number;
|
|
59
|
+
/**
|
|
60
|
+
* 从 DigestLine + relevance 计算三因子得分
|
|
61
|
+
*
|
|
62
|
+
* @param relevance - 归一化相关度 [0,1]
|
|
63
|
+
* @param line - DigestLine(含 recency/importance 数据)
|
|
64
|
+
* @param lastEffectiveAt - 最后有效检索时间(可选,省略则用 line.lastEffectiveAt)
|
|
65
|
+
* @param now - 当前时间(可选,便于测试;省略则 new Date())
|
|
66
|
+
* @param weights - 权重配置(可选,省略用默认)
|
|
67
|
+
*/
|
|
68
|
+
export declare function computeThreeFactorScore(relevance: number, line: DigestLine, options?: {
|
|
69
|
+
lastEffectiveAt?: string | null;
|
|
70
|
+
now?: Date;
|
|
71
|
+
weights?: ThreeFactorWeights;
|
|
72
|
+
}): number;
|
|
73
|
+
/**
|
|
74
|
+
* 三因子批量打分(保持原数组顺序,稳定排序友好)
|
|
75
|
+
*/
|
|
76
|
+
export declare function computeThreeFactorScores(items: ReadonlyArray<{
|
|
77
|
+
id: string;
|
|
78
|
+
relevance: number;
|
|
79
|
+
line: DigestLine;
|
|
80
|
+
}>, options?: {
|
|
81
|
+
now?: Date;
|
|
82
|
+
weights?: ThreeFactorWeights;
|
|
83
|
+
}): ReadonlyArray<{
|
|
84
|
+
id: string;
|
|
85
|
+
score: number;
|
|
86
|
+
}>;
|
|
87
|
+
/**
|
|
88
|
+
* Reciprocal Rank Fusion (RRF)
|
|
89
|
+
*
|
|
90
|
+
* 将多个 rank list 融合为一个综合 rank。
|
|
91
|
+
* 常用场景:FTS top-K + 向量 top-K → 综合 top-K。
|
|
92
|
+
*
|
|
93
|
+
* 公式:`score(d) = Σ 1 / (k + rank_i(d))`,其中 k 默认 60(业界经验值)。
|
|
94
|
+
*
|
|
95
|
+
* - rank 从 1 开始;未出现在某 list 中的 doc 不贡献分
|
|
96
|
+
* - 输出按融合分倒序
|
|
97
|
+
*
|
|
98
|
+
* @param rankedLists - 多个有序 id 列表(每个 list 已经按相关度从高到低排好)
|
|
99
|
+
* @param k - 平滑常数(默认 60)
|
|
100
|
+
*/
|
|
101
|
+
export declare function reciprocalRankFusion(rankedLists: ReadonlyArray<ReadonlyArray<string>>, k?: number): ReadonlyArray<{
|
|
102
|
+
id: string;
|
|
103
|
+
score: number;
|
|
104
|
+
}>;
|
|
105
|
+
//# sourceMappingURL=scoring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../../src/retrieval/scoring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,cAAc;AACd,MAAM,WAAW,kBAAkB;IACjC,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wBAAwB;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,yCAAyC;AACzC,eAAO,MAAM,eAAe,EAAE,kBAI7B,CAAC;AAEF;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAY3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC3C,MAAM,CAIR;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,MAAM,GACzB,MAAM,CAOR;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE;IACP,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,OAAO,CAAC,EAAE,kBAAkB,CAAC;CACzB,GACL,MAAM,CAmBR;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,EACzE,OAAO,GAAE;IACP,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,OAAO,CAAC,EAAE,kBAAkB,CAAC;CACzB,GACL,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAK9C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EACjD,CAAC,SAAK,GACL,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAoB9C"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 三因子检索打分
|
|
3
|
+
*
|
|
4
|
+
* 实现 spec 3.7:
|
|
5
|
+
* score = α·relevance + β·recency + γ·importance
|
|
6
|
+
*
|
|
7
|
+
* 其中:
|
|
8
|
+
* - relevance ∈ [0,1]:来自 FTS 归一化分(或向量余弦,P2 引入)
|
|
9
|
+
* - recency ∈ [0,1]:`0.5^(ageDays / decayHalfLifeDays)`(Ebbinghaus 衰退)
|
|
10
|
+
* · decayHalfLifeDays=null → recency=1(永不衰退)
|
|
11
|
+
* · ageDays ≤ 0(未来/刚刚)→ recency=1
|
|
12
|
+
* - importance ∈ [0,1]:`engram.importance × (1 + reinforcementScore)`
|
|
13
|
+
* · reinforcementScore 由 P1 2.1 三信号追踪累积
|
|
14
|
+
* · 用 min 截断到 [0,1],避免上溢
|
|
15
|
+
*
|
|
16
|
+
* 默认权重:α=0.5, β=0.3, γ=0.2(spec 3.7 / 决策 9)
|
|
17
|
+
*
|
|
18
|
+
* 排序稳定性:相同输入产生相同输出(不依赖 Math.random/Date.now)。
|
|
19
|
+
*
|
|
20
|
+
* @module @co-engram/core/retrieval
|
|
21
|
+
*/
|
|
22
|
+
/** 默认权重(spec 3.7:α=0.5, β=0.3, γ=0.2) */
|
|
23
|
+
export const DEFAULT_WEIGHTS = {
|
|
24
|
+
alpha: 0.5,
|
|
25
|
+
beta: 0.3,
|
|
26
|
+
gamma: 0.2,
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* 校验权重和为 1(容差 0.001)
|
|
30
|
+
*/
|
|
31
|
+
export function validateWeights(w) {
|
|
32
|
+
const sum = w.alpha + w.beta + w.gamma;
|
|
33
|
+
if (Math.abs(sum - 1) > 0.001) {
|
|
34
|
+
throw new Error(`Weights must sum to 1, got ${sum} (α=${w.alpha} β=${w.beta} γ=${w.gamma})`);
|
|
35
|
+
}
|
|
36
|
+
for (const v of [w.alpha, w.beta, w.gamma]) {
|
|
37
|
+
if (v < 0 || v > 1) {
|
|
38
|
+
throw new Error(`Weight must be in [0,1], got ${v}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 艾宾浩斯衰退函数
|
|
44
|
+
*
|
|
45
|
+
* `recency = 0.5^(ageDays / decayHalfLifeDays)`
|
|
46
|
+
*
|
|
47
|
+
* - decayHalfLifeDays=null/undefined → 1(永不衰退)
|
|
48
|
+
* - decayHalfLifeDays<=0 → 1(非法半衰期视为不衰退)
|
|
49
|
+
* - ageDays<=0 → 1(未来或刚刚)
|
|
50
|
+
*/
|
|
51
|
+
export function recencyDecay(ageDays, decayHalfLifeDays) {
|
|
52
|
+
if (!decayHalfLifeDays || decayHalfLifeDays <= 0)
|
|
53
|
+
return 1;
|
|
54
|
+
if (ageDays <= 0)
|
|
55
|
+
return 1;
|
|
56
|
+
return Math.pow(0.5, ageDays / decayHalfLifeDays);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 有效重要性
|
|
60
|
+
*
|
|
61
|
+
* `effectiveImportance = importance × (1 + reinforcementScore)`
|
|
62
|
+
*
|
|
63
|
+
* 截断到 [0,1],避免 reinforcement 累积导致 > 1。
|
|
64
|
+
*
|
|
65
|
+
* - reinforcementScore 由 P1 2.1 累积(每次 reinforce 加 effectiveness)
|
|
66
|
+
* - 高 reinforcement → importance 接近原值上限
|
|
67
|
+
*/
|
|
68
|
+
export function effectiveImportance(importance, reinforcementScore) {
|
|
69
|
+
if (reinforcementScore <= 0) {
|
|
70
|
+
return clamp01(importance);
|
|
71
|
+
}
|
|
72
|
+
// 衰减式提升:避免 importance × (1+∞) → 1
|
|
73
|
+
// P1 简化:直接 importance × (1 + reinforcementScore),clamp 到 [0,1]
|
|
74
|
+
return clamp01(importance * (1 + reinforcementScore));
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 从 DigestLine + relevance 计算三因子得分
|
|
78
|
+
*
|
|
79
|
+
* @param relevance - 归一化相关度 [0,1]
|
|
80
|
+
* @param line - DigestLine(含 recency/importance 数据)
|
|
81
|
+
* @param lastEffectiveAt - 最后有效检索时间(可选,省略则用 line.lastEffectiveAt)
|
|
82
|
+
* @param now - 当前时间(可选,便于测试;省略则 new Date())
|
|
83
|
+
* @param weights - 权重配置(可选,省略用默认)
|
|
84
|
+
*/
|
|
85
|
+
export function computeThreeFactorScore(relevance, line, options = {}) {
|
|
86
|
+
const weights = options.weights ?? DEFAULT_WEIGHTS;
|
|
87
|
+
validateWeights(weights);
|
|
88
|
+
const now = options.now ?? new Date();
|
|
89
|
+
const lastEffective = options.lastEffectiveAt ?? line.lastEffectiveAt;
|
|
90
|
+
const ageDays = computeAgeDays(lastEffective, now);
|
|
91
|
+
const recency = recencyDecay(ageDays, line.decayHalfLifeDays);
|
|
92
|
+
const importance = effectiveImportance(line.importance, line.reinforcementScore);
|
|
93
|
+
return (weights.alpha * clamp01(relevance) +
|
|
94
|
+
weights.beta * recency +
|
|
95
|
+
weights.gamma * importance);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* 三因子批量打分(保持原数组顺序,稳定排序友好)
|
|
99
|
+
*/
|
|
100
|
+
export function computeThreeFactorScores(items, options = {}) {
|
|
101
|
+
return items.map((item) => ({
|
|
102
|
+
id: item.id,
|
|
103
|
+
score: computeThreeFactorScore(item.relevance, item.line, options),
|
|
104
|
+
}));
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Reciprocal Rank Fusion (RRF)
|
|
108
|
+
*
|
|
109
|
+
* 将多个 rank list 融合为一个综合 rank。
|
|
110
|
+
* 常用场景:FTS top-K + 向量 top-K → 综合 top-K。
|
|
111
|
+
*
|
|
112
|
+
* 公式:`score(d) = Σ 1 / (k + rank_i(d))`,其中 k 默认 60(业界经验值)。
|
|
113
|
+
*
|
|
114
|
+
* - rank 从 1 开始;未出现在某 list 中的 doc 不贡献分
|
|
115
|
+
* - 输出按融合分倒序
|
|
116
|
+
*
|
|
117
|
+
* @param rankedLists - 多个有序 id 列表(每个 list 已经按相关度从高到低排好)
|
|
118
|
+
* @param k - 平滑常数(默认 60)
|
|
119
|
+
*/
|
|
120
|
+
export function reciprocalRankFusion(rankedLists, k = 60) {
|
|
121
|
+
if (k <= 0) {
|
|
122
|
+
throw new Error(`RRF k must be > 0, got ${k}`);
|
|
123
|
+
}
|
|
124
|
+
const scores = new Map();
|
|
125
|
+
for (const list of rankedLists) {
|
|
126
|
+
for (let i = 0; i < list.length; i++) {
|
|
127
|
+
const id = list[i];
|
|
128
|
+
const rank = i + 1;
|
|
129
|
+
const contribution = 1 / (k + rank);
|
|
130
|
+
scores.set(id, (scores.get(id) ?? 0) + contribution);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return Array.from(scores.entries())
|
|
134
|
+
.map(([id, score]) => ({ id, score }))
|
|
135
|
+
.sort((a, b) => {
|
|
136
|
+
if (a.score !== b.score)
|
|
137
|
+
return b.score - a.score;
|
|
138
|
+
// 稳定排序:同分按 id 字典序(保证可重现)
|
|
139
|
+
return a.id < b.id ? -1 : 1;
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
// ============================================================
|
|
143
|
+
// 辅助函数
|
|
144
|
+
// ============================================================
|
|
145
|
+
function clamp01(x) {
|
|
146
|
+
if (Number.isNaN(x))
|
|
147
|
+
return 0;
|
|
148
|
+
if (x < 0)
|
|
149
|
+
return 0;
|
|
150
|
+
if (x > 1)
|
|
151
|
+
return 1;
|
|
152
|
+
return x;
|
|
153
|
+
}
|
|
154
|
+
function computeAgeDays(lastEffectiveAt, now) {
|
|
155
|
+
if (!lastEffectiveAt)
|
|
156
|
+
return Number.POSITIVE_INFINITY; // 从未有效 → age = ∞ → recency → 0
|
|
157
|
+
const ts = new Date(lastEffectiveAt).getTime();
|
|
158
|
+
if (Number.isNaN(ts))
|
|
159
|
+
return Number.POSITIVE_INFINITY;
|
|
160
|
+
const ageMs = now.getTime() - ts;
|
|
161
|
+
if (ageMs < 0)
|
|
162
|
+
return 0; // 时钟偏差/未来
|
|
163
|
+
return ageMs / (1000 * 60 * 60 * 24);
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=scoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoring.js","sourceRoot":"","sources":["../../src/retrieval/scoring.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 行为信号提取规则引擎(P4 A.3)
|
|
3
|
+
*
|
|
4
|
+
* 从 ToolCallEvent 流中推断每条 engram 的"真实效用",不依赖 agent 自律上报。
|
|
5
|
+
*
|
|
6
|
+
* 设计:
|
|
7
|
+
* - 数据驱动:每条规则是 { name, weight, match } 纯函数
|
|
8
|
+
* - 可组合:DEFAULT_RULES 是 6 条内置规则的组合
|
|
9
|
+
* - 可扩展:宿主可以传入自己的 rules
|
|
10
|
+
*
|
|
11
|
+
* 规则说明(按 weight 强弱):
|
|
12
|
+
* 强正(≥ 0.6):repeated_get / get_then_action / contradicts_deleted
|
|
13
|
+
* 弱正(0.2-0.5):get_no_resimilar_search
|
|
14
|
+
* 强负(≤ -0.6):get_then_immediate_search / contradicts_created
|
|
15
|
+
* 弱负(-0.2 - -0.5):user_correction
|
|
16
|
+
*
|
|
17
|
+
* @module @co-engram/core/signals
|
|
18
|
+
*/
|
|
19
|
+
import type { BehavioralSignal, ToolCallEvent } from "./types.js";
|
|
20
|
+
/** 默认 sliding window 大小 */
|
|
21
|
+
export declare const DEFAULT_WINDOW_SIZE = 10;
|
|
22
|
+
/** 单条规则 */
|
|
23
|
+
export interface SignalRule {
|
|
24
|
+
/** 规则名(用于审计) */
|
|
25
|
+
readonly name: string;
|
|
26
|
+
/** 默认权重 [-1, 1] */
|
|
27
|
+
readonly weight: number;
|
|
28
|
+
/** 匹配函数:从事件流提取信号 */
|
|
29
|
+
match(events: readonly ToolCallEvent[], options?: SignalRuleOptions): readonly BehavioralSignal[];
|
|
30
|
+
}
|
|
31
|
+
export interface SignalRuleOptions {
|
|
32
|
+
readonly windowSize?: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 提取所有规则的信号并合并去重
|
|
36
|
+
*
|
|
37
|
+
* 合并策略:同 (engramId, source) 取 weight 绝对值最大的;不同 source 全部保留。
|
|
38
|
+
*/
|
|
39
|
+
export declare function extractSignals(events: readonly ToolCallEvent[], rules?: readonly SignalRule[], options?: SignalRuleOptions): readonly BehavioralSignal[];
|
|
40
|
+
/**
|
|
41
|
+
* 去重:同 (engramId, source) 取绝对值最大
|
|
42
|
+
*/
|
|
43
|
+
export declare function dedupeSignals(signals: readonly BehavioralSignal[]): readonly BehavioralSignal[];
|
|
44
|
+
/**
|
|
45
|
+
* 规则 1:同 sliding window 内同一 engram 被 engram_get ≥ 2 次
|
|
46
|
+
*
|
|
47
|
+
* 神经科学依据:反复访问 = 强化(retrieval + reinforcement)
|
|
48
|
+
* weight: +0.6(强正)
|
|
49
|
+
*/
|
|
50
|
+
export declare const repeatedGetRule: SignalRule;
|
|
51
|
+
/**
|
|
52
|
+
* 规则 2:engram_get 后跟 file_edit / bash / git_commit 等动作
|
|
53
|
+
*
|
|
54
|
+
* 含义:从"读"变成"做",有落地证据
|
|
55
|
+
* weight: +0.8(强正)
|
|
56
|
+
*/
|
|
57
|
+
export declare const getFollowedByActionRule: SignalRule;
|
|
58
|
+
/**
|
|
59
|
+
* 规则 3:engram_get 后 windowSize 内没有 engram_search 同主题
|
|
60
|
+
*
|
|
61
|
+
* 含义:读了一次就够了,问题已解决
|
|
62
|
+
* weight: +0.4(弱正)
|
|
63
|
+
*
|
|
64
|
+
* 注意:这是"沉默的满意"信号,容易误判(可能只是没继续做)。weight 较弱。
|
|
65
|
+
*/
|
|
66
|
+
export declare const getFollowedByNoSearchRule: SignalRule;
|
|
67
|
+
/**
|
|
68
|
+
* 规则 4:engram_get 后 < 3 事件立即 engram_search 同主题
|
|
69
|
+
*
|
|
70
|
+
* 含义:get 没解决问题,要再找
|
|
71
|
+
* weight: -0.7(强负)
|
|
72
|
+
*/
|
|
73
|
+
export declare const getThenImmediateSearchRule: SignalRule;
|
|
74
|
+
/**
|
|
75
|
+
* 规则 5:用户消息包含纠正词
|
|
76
|
+
*
|
|
77
|
+
* 纠正词表:"不对" / "错了" / "should be" / "actually" / "wait" / "不是"
|
|
78
|
+
* 信号来源:tool args 里如果有 message / prompt / reply 字段包含纠正词
|
|
79
|
+
*
|
|
80
|
+
* 注意:这是一个保守的近似——真正的用户消息可能在 transcript 里但不在 tool args 里。
|
|
81
|
+
* 后续 hook 改造后可以从专门的 user_message 事件类型捕获。
|
|
82
|
+
*
|
|
83
|
+
* weight: -0.4(弱负)
|
|
84
|
+
*/
|
|
85
|
+
export declare const userCorrectionRule: SignalRule;
|
|
86
|
+
/**
|
|
87
|
+
* 规则 6:创建 contradicts synapse 指向某 engram
|
|
88
|
+
*
|
|
89
|
+
* 含义:被显式反驳
|
|
90
|
+
* weight: -0.8(强负)
|
|
91
|
+
*
|
|
92
|
+
* 注意:被 contradicts 不等于被 refute(refute 是 verificationStatus 状态机的事)。
|
|
93
|
+
* 这里只记录信号,后续 metacognition 会综合其他维度决定是否 refute。
|
|
94
|
+
*/
|
|
95
|
+
export declare const contradictsCreatedRule: SignalRule;
|
|
96
|
+
/** 默认规则集(按 weight 从强到弱排序,仅影响审计日志可读性,不影响结果) */
|
|
97
|
+
export declare const DEFAULT_RULES: readonly SignalRule[];
|
|
98
|
+
//# sourceMappingURL=extract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/signals/extract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAElE,2BAA2B;AAC3B,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,WAAW;AACX,MAAM,WAAW,UAAU;IACzB,gBAAgB;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mBAAmB;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oBAAoB;IACpB,KAAK,CACH,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,OAAO,CAAC,EAAE,iBAAiB,GAC1B,SAAS,gBAAgB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,KAAK,GAAE,SAAS,UAAU,EAAkB,EAC5C,OAAO,CAAC,EAAE,iBAAiB,GAC1B,SAAS,gBAAgB,EAAE,CAO7B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,gBAAgB,EAAE,GACnC,SAAS,gBAAgB,EAAE,CAU7B;AAMD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,UAgD7B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,EAAE,UA8CrC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,EAAE,UAuCvC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,EAAE,UAyCxC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,EAAE,UAiDhC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,EAAE,UAyBpC,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,aAAa,EAAE,SAAS,UAAU,EAO9C,CAAC"}
|