akm-cli 0.9.0-rc.0 → 0.9.0-rc.13
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/CHANGELOG.md +1283 -22
- package/README.md +62 -37
- package/SECURITY.md +46 -31
- package/dist/akm +162 -38
- package/dist/akm-migrate +44 -0
- package/dist/assets/backends/schtasks-template.xml +2 -1
- package/dist/assets/hints/cli-hints-full.md +268 -118
- package/dist/assets/hints/cli-hints-short.md +87 -24
- package/dist/assets/{profiles → improve-strategies}/catchup.json +3 -1
- package/dist/assets/{profiles → improve-strategies}/consolidate.json +3 -1
- package/dist/assets/{profiles → improve-strategies}/default.json +6 -7
- package/dist/assets/improve-strategies/frequent.json +15 -0
- package/dist/assets/{profiles → improve-strategies}/graph-refresh.json +4 -2
- package/dist/assets/{profiles → improve-strategies}/memory-focus.json +4 -1
- package/dist/assets/{profiles → improve-strategies}/proactive-maintenance.json +5 -5
- package/dist/assets/{profiles → improve-strategies}/quick.json +4 -2
- package/dist/assets/improve-strategies/reflect-distill.json +30 -0
- package/dist/assets/{profiles → improve-strategies}/thorough.json +1 -1
- package/dist/assets/prompts/consolidate-system.md +5 -5
- package/dist/assets/prompts/extract-session.md +2 -6
- package/dist/assets/prompts/memory-infer-user.md +2 -3
- package/dist/assets/prompts/reflect-llm-framed-contract.md +11 -0
- package/dist/assets/prompts/reflect-llm-schema-contract.md +3 -0
- package/dist/assets/prompts/reflect-output-repair.md +3 -0
- package/dist/assets/prompts/workflow-unit-preamble.md +26 -0
- package/dist/assets/stash-skeleton/README.md +38 -10
- package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +8 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/command.md +8 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +14 -1
- package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +13 -1
- package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +9 -1
- package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +11 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +9 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +9 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +8 -0
- package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +100 -0
- package/dist/assets/stash-skeleton/facts/conventions/domains.md +64 -0
- package/dist/assets/stash-skeleton/facts/conventions/organization.md +136 -0
- package/dist/assets/tasks/core/extract.yml +3 -2
- package/dist/assets/tasks/core/improve.yml +2 -1
- package/dist/assets/tasks/core/index-refresh.yml +1 -0
- package/dist/assets/tasks/core/sync.yml +1 -0
- package/dist/assets/tasks/core/version-check.yml +2 -1
- package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-catchup.yml +8 -0
- package/dist/assets/tasks/improve/akm-improve-consolidate.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-frequent.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-nightly.yml +5 -0
- package/dist/assets/templates/html/health.html +5 -4
- package/dist/assets/workflows/workflow-template.md +31 -15
- package/dist/cli/invocation.js +279 -0
- package/dist/cli/parse-args.js +5 -90
- package/dist/cli/retired-commands.js +78 -0
- package/dist/cli/shared.js +158 -48
- package/dist/cli-node.mjs +2 -1
- package/dist/cli.js +747 -293
- package/dist/commands/agent/agent-dispatch.js +19 -18
- package/dist/commands/agent/agent-support.js +0 -24
- package/dist/commands/agent/contribute-cli.js +43 -97
- package/dist/commands/completions.js +80 -23
- package/dist/commands/config-cli.js +44 -281
- package/dist/commands/env/env-binding.js +99 -0
- package/dist/commands/env/env-cli.js +84 -224
- package/dist/commands/env/env.js +12 -163
- package/dist/commands/env/marker-path.js +6 -0
- package/dist/commands/env/secret-cli.js +45 -61
- package/dist/commands/env/secret.js +32 -62
- package/dist/commands/feedback-cli.js +179 -85
- package/dist/commands/health/accept-rate.js +58 -0
- package/dist/commands/health/advisories.js +7 -8
- package/dist/commands/health/checks.js +279 -94
- package/dist/commands/health/html-report.js +197 -578
- package/dist/commands/health/improve-metrics.js +277 -246
- package/dist/commands/health/llm-usage.js +19 -19
- package/dist/commands/health/md-report.js +16 -7
- package/dist/commands/health/metrics.js +67 -32
- package/dist/commands/health/renderers.js +47 -0
- package/dist/commands/health/report-view-model.js +508 -0
- package/dist/commands/health/stash-exposure.js +1 -1
- package/dist/commands/health/surfaces.js +16 -56
- package/dist/commands/health/task-runs.js +3 -67
- package/dist/{migrate-storage-node.mjs → commands/health/types-checks.js} +1 -5
- package/dist/commands/health/types-improve.js +29 -0
- package/dist/{output/text/save.js → commands/health/types-metrics.js} +1 -2
- package/dist/commands/health/types-result.js +7 -0
- package/dist/commands/health/types-runs.js +4 -0
- package/dist/commands/health/types-session-log.js +4 -0
- package/dist/commands/health/types-windows.js +4 -0
- package/dist/commands/health/types.js +26 -21
- package/dist/commands/health/windows.js +2 -3
- package/dist/commands/health.js +296 -167
- package/dist/commands/improve/anti-collapse.js +5 -5
- package/dist/commands/improve/autonomy-gate.js +68 -0
- package/dist/commands/improve/collapse-detector.js +65 -52
- package/dist/commands/improve/consolidate/chunking.js +9 -7
- package/dist/commands/improve/consolidate/eligibility.js +1 -23
- package/dist/commands/improve/consolidate/merge.js +4 -0
- package/dist/commands/improve/consolidate.js +454 -1354
- package/dist/commands/improve/content-hash.js +39 -0
- package/dist/commands/improve/distill/content-repair.js +4 -10
- package/dist/commands/improve/distill/promote-memory.js +89 -64
- package/dist/commands/improve/distill/quality-gate.js +118 -42
- package/dist/commands/improve/distill-guards.js +1 -1
- package/dist/commands/improve/distill-promotion-policy.js +33 -888
- package/dist/commands/improve/distill.js +607 -363
- package/dist/commands/improve/eligibility.js +165 -79
- package/dist/commands/improve/extract-cli.js +35 -126
- package/dist/commands/improve/extract-prompt.js +6 -35
- package/dist/commands/improve/extract.js +640 -391
- package/dist/commands/improve/feedback-valence.js +2 -12
- package/dist/commands/improve/improve-cli.js +134 -135
- package/dist/commands/improve/improve-result-file.js +30 -50
- package/dist/commands/improve/improve-run-types.js +4 -0
- package/dist/commands/improve/improve-strategies.js +135 -0
- package/dist/commands/improve/improve.js +904 -701
- package/dist/commands/improve/locks.js +64 -111
- package/dist/commands/improve/loop-stages.js +1110 -923
- package/dist/commands/improve/memory/derived-ref.js +124 -0
- package/dist/commands/improve/memory/memory-belief.js +79 -7
- package/dist/commands/improve/memory/memory-contradiction-detect.js +49 -52
- package/dist/commands/improve/memory/memory-improve.js +25 -37
- package/dist/commands/improve/outcome-loop.js +25 -88
- package/dist/commands/improve/preparation.js +1034 -813
- package/dist/commands/improve/proactive-maintenance.js +34 -9
- package/dist/commands/improve/proposal-envelope.js +31 -0
- package/dist/commands/improve/reflect.js +983 -794
- package/dist/commands/improve/run-context.js +119 -0
- package/dist/commands/improve/salience.js +24 -127
- package/dist/commands/improve/session-asset.js +7 -3
- package/dist/commands/improve/shared.js +14 -34
- package/dist/commands/improve/source-identity.js +28 -0
- package/dist/commands/improve/triage.js +20 -17
- package/dist/commands/lint/base-linter.js +340 -313
- package/dist/commands/lint/env-key-rules.js +31 -47
- package/dist/commands/lint/index.js +185 -30
- package/dist/commands/{events.js → log.js} +28 -38
- package/dist/commands/migrate-cli.js +54 -0
- package/dist/commands/migration-tool.js +55 -0
- package/dist/commands/observability-cli.js +70 -208
- package/dist/commands/proposal/diff-format.js +50 -0
- package/dist/commands/proposal/drain-policies.js +0 -6
- package/dist/commands/proposal/drain.js +91 -40
- package/dist/commands/proposal/proposal-cli.js +134 -132
- package/dist/commands/proposal/proposal-types.js +56 -0
- package/dist/commands/proposal/proposal.js +83 -65
- package/dist/commands/proposal/propose-cli.js +88 -0
- package/dist/commands/proposal/propose.js +105 -88
- package/dist/commands/proposal/repository.js +1303 -278
- package/dist/commands/proposal/validators/proposal-quality-validators.js +16 -6
- package/dist/commands/proposal/validators/proposal-validators.js +61 -12
- package/dist/commands/proposal/validators/proposals.js +6 -8
- package/dist/commands/read/curate.js +78 -73
- package/dist/commands/read/knowledge.js +510 -13
- package/dist/commands/read/registry-search.js +2 -2
- package/dist/commands/read/remember-cli.js +84 -15
- package/dist/commands/read/search-cli.js +203 -96
- package/dist/commands/read/search.js +126 -94
- package/dist/commands/read/show.js +226 -250
- package/dist/commands/registry-cli.js +34 -60
- package/dist/commands/remember.js +18 -57
- package/dist/commands/sources/add-cli.js +104 -49
- package/dist/commands/sources/bundle-cli.js +166 -0
- package/dist/commands/sources/bundle-config-ops.js +63 -0
- package/dist/commands/sources/info.js +27 -15
- package/dist/commands/sources/init.js +30 -40
- package/dist/commands/sources/installed-stashes.js +469 -172
- package/dist/commands/sources/migration-help.js +7 -4
- package/dist/commands/sources/schema-repair.js +10 -9
- package/dist/commands/sources/self-update.js +182 -121
- package/dist/commands/sources/source-add.js +169 -178
- package/dist/commands/sources/source-clone.js +144 -41
- package/dist/commands/sources/source-manage.js +94 -59
- package/dist/commands/sources/sources-cli.js +64 -205
- package/dist/commands/sources/stash-cli.js +91 -54
- package/dist/commands/sources/stash-skeleton.js +1 -1
- package/dist/commands/tasks/tasks-cli.js +106 -104
- package/dist/commands/tasks/tasks.js +445 -262
- package/dist/commands/workflow-cli.js +232 -121
- package/dist/core/action-contributors.js +1 -1
- package/dist/core/activation-policy.js +49 -0
- package/dist/core/adapter/adapters/agent-skills-adapter.js +181 -0
- package/dist/core/adapter/adapters/akm-adapter.js +528 -0
- package/dist/core/adapter/adapters/akm-lint.js +392 -0
- package/dist/core/adapter/adapters/akm-metadata.js +387 -0
- package/dist/core/adapter/adapters/akm-task-adapter.js +149 -0
- package/dist/core/adapter/adapters/akm-workflow-adapter.js +180 -0
- package/dist/core/adapter/adapters/claude-adapter.js +61 -0
- package/dist/core/adapter/adapters/dotenv-adapter.js +187 -0
- package/dist/core/adapter/adapters/generic-files-adapter.js +119 -0
- package/dist/core/adapter/adapters/index.js +80 -0
- package/dist/core/adapter/adapters/llm-wiki-adapter.js +419 -0
- package/dist/core/adapter/adapters/okf-adapter.js +391 -0
- package/dist/core/adapter/adapters/opencode-adapter.js +68 -0
- package/dist/core/adapter/adapters/shared.js +286 -0
- package/dist/core/adapter/adapters/tool-dir-shared.js +217 -0
- package/dist/core/adapter/adapters/website-snapshot-adapter.js +155 -0
- package/dist/core/adapter/bundle-adapter.js +4 -0
- package/dist/core/adapter/detect-adapter.js +17 -0
- package/dist/core/adapter/recognize-match.js +44 -0
- package/dist/core/adapter/registry.js +56 -0
- package/dist/core/adapter/types.js +4 -0
- package/dist/core/asset/akm-markdown.js +30 -0
- package/dist/core/asset/asset-placement.js +243 -0
- package/dist/core/asset/asset-ref.js +110 -79
- package/dist/core/asset/asset-serialize.js +20 -0
- package/dist/core/asset/frontmatter.js +28 -12
- package/dist/core/asset/markdown.js +40 -51
- package/dist/core/asset/resolve-ref.js +274 -0
- package/dist/core/asset/stash-meta.js +2 -2
- package/dist/core/bundle-id.js +51 -0
- package/dist/core/common.js +281 -86
- package/dist/core/config/config-io.js +42 -128
- package/dist/core/config/config-schema.js +233 -834
- package/dist/core/config/config-sources.js +162 -39
- package/dist/core/config/config-types.js +16 -11
- package/dist/core/config/config-version.js +29 -0
- package/dist/core/config/config-walker.js +126 -37
- package/dist/core/config/config.js +154 -331
- package/dist/core/config/deep-merge.js +41 -0
- package/dist/core/config/engine-semantics.js +28 -0
- package/dist/core/config/experimental.js +21 -0
- package/dist/core/config/schema/embedding.js +38 -0
- package/dist/core/config/schema/engines.js +116 -0
- package/dist/core/config/schema/experimental.js +47 -0
- package/dist/core/config/schema/feedback.js +31 -0
- package/dist/core/config/schema/improve-processes.js +389 -0
- package/dist/core/config/schema/improve.js +94 -0
- package/dist/core/config/schema/index-config.js +176 -0
- package/dist/core/config/schema/output.js +18 -0
- package/dist/core/config/schema/primitives.js +94 -0
- package/dist/core/config/schema/search.js +30 -0
- package/dist/core/config/schema/setup.js +18 -0
- package/dist/core/config/schema/sources-bundles.js +169 -0
- package/dist/core/config/schema/workflow.js +29 -0
- package/dist/core/env-secret-ref.js +155 -20
- package/dist/core/errors.js +17 -15
- package/dist/core/events-types.js +4 -0
- package/dist/core/events.js +46 -128
- package/dist/core/extra-params.js +62 -0
- package/dist/core/file-change.js +17 -0
- package/dist/core/file-lock.js +202 -57
- package/dist/core/fs-txn.js +392 -0
- package/dist/core/git-message.js +59 -0
- package/dist/core/improve-result.js +167 -0
- package/dist/core/json-schema.js +142 -0
- package/dist/core/lesson-lint.js +1 -17
- package/dist/core/logs-db.js +1 -1
- package/dist/core/maintenance-barrier.js +135 -0
- package/dist/core/migration-operation.js +44 -0
- package/dist/core/mutation-target.js +78 -0
- package/dist/core/paths.js +22 -25
- package/dist/core/platform.js +10 -0
- package/dist/core/recognition-util.js +128 -0
- package/dist/core/redaction.js +392 -0
- package/dist/core/standards/resolve-standards-context.js +36 -65
- package/dist/core/standards/resolve-stash-standards.js +2 -2
- package/dist/core/standards/resolve-type-conventions.js +5 -5
- package/dist/core/state/migrations.js +242 -11
- package/dist/core/state-db.js +98 -10
- package/dist/core/structured.js +1 -1
- package/dist/core/subprocess.js +303 -0
- package/dist/core/text-truncation.js +9 -5
- package/dist/core/time.js +20 -0
- package/dist/core/type-presentation.js +130 -0
- package/dist/core/warn.js +0 -3
- package/dist/core/write-source.js +834 -118
- package/dist/indexer/bundle-identity-guard.js +92 -0
- package/dist/indexer/db/graph-db.js +1 -25
- package/dist/indexer/db/llm-cache.js +1 -1
- package/dist/indexer/ensure-index.js +30 -9
- package/dist/indexer/graph/graph-boost.js +9 -30
- package/dist/indexer/graph/graph-extraction.js +41 -27
- package/dist/indexer/graph/graph-types.js +4 -0
- package/dist/indexer/index-writer-lock.js +93 -49
- package/dist/indexer/index-written-assets.js +100 -53
- package/dist/indexer/indexer.js +746 -329
- package/dist/indexer/init.js +18 -25
- package/dist/indexer/installations.js +142 -0
- package/dist/indexer/passes/dir-staleness.js +18 -10
- package/dist/indexer/passes/memory-inference.js +25 -15
- package/dist/indexer/passes/metadata.js +412 -243
- package/dist/indexer/scan/doc-to-entry.js +160 -0
- package/dist/indexer/scan/drain-dir.js +134 -0
- package/dist/indexer/search/db-search.js +292 -108
- package/dist/indexer/search/fts-query.js +64 -0
- package/dist/indexer/search/ranking-contributors.js +145 -25
- package/dist/indexer/search/ranking-types.js +4 -0
- package/dist/indexer/search/ranking.js +28 -71
- package/dist/indexer/search/search-attribution.js +67 -0
- package/dist/indexer/search/search-fields.js +18 -3
- package/dist/indexer/search/search-hit-enrichers.js +30 -40
- package/dist/indexer/search/search-source.js +157 -111
- package/dist/indexer/search/semantic-status.js +4 -1
- package/dist/indexer/usage/usage-events.js +10 -30
- package/dist/indexer/walk/file-context.js +3 -45
- package/dist/indexer/walk/matchers.js +42 -34
- package/dist/indexer/walk/path-resolver.js +11 -5
- package/dist/indexer/walk/walker.js +42 -14
- package/dist/integrations/agent/builder-shared.js +7 -0
- package/dist/integrations/agent/builders.js +5 -56
- package/dist/integrations/agent/config.js +3 -143
- package/dist/integrations/agent/detect.js +17 -2
- package/dist/integrations/agent/engine-resolution.js +231 -0
- package/dist/integrations/agent/index.js +1 -2
- package/dist/integrations/agent/model-aliases.js +16 -2
- package/dist/integrations/agent/profiles.js +36 -62
- package/dist/integrations/agent/prompts.js +46 -18
- package/dist/integrations/agent/runner-dispatch.js +93 -4
- package/dist/integrations/agent/runner.js +76 -208
- package/dist/integrations/agent/spawn.js +88 -196
- package/dist/integrations/harnesses/aider/agent-builder.js +114 -0
- package/dist/integrations/harnesses/aider/index.js +48 -0
- package/dist/integrations/harnesses/aider/result-extractor.js +53 -0
- package/dist/integrations/harnesses/amazonq/agent-builder.js +147 -0
- package/dist/integrations/harnesses/amazonq/index.js +45 -0
- package/dist/integrations/harnesses/amazonq/result-extractor.js +48 -0
- package/dist/integrations/harnesses/claude/agent-builder.js +46 -8
- package/dist/integrations/harnesses/claude/config-import.js +1 -3
- package/dist/integrations/harnesses/claude/index.js +24 -35
- package/dist/integrations/harnesses/claude/result-extractor.js +52 -0
- package/dist/integrations/harnesses/claude/session-log.js +27 -75
- package/dist/integrations/harnesses/codex/agent-builder.js +138 -0
- package/dist/integrations/harnesses/codex/index.js +52 -0
- package/dist/integrations/harnesses/codex/result-extractor.js +73 -0
- package/dist/integrations/harnesses/copilot/agent-builder.js +122 -0
- package/dist/integrations/harnesses/copilot/index.js +48 -0
- package/dist/integrations/harnesses/copilot/result-extractor.js +151 -0
- package/dist/integrations/harnesses/gemini/agent-builder.js +120 -0
- package/dist/integrations/harnesses/gemini/index.js +48 -0
- package/dist/integrations/harnesses/gemini/result-extractor.js +121 -0
- package/dist/integrations/harnesses/ids.js +24 -0
- package/dist/integrations/harnesses/index.js +54 -34
- package/dist/integrations/harnesses/opencode/agent-builder.js +23 -5
- package/dist/integrations/harnesses/opencode/config-import.js +1 -3
- package/dist/integrations/harnesses/opencode/index.js +14 -32
- package/dist/integrations/harnesses/opencode/session-log.js +67 -125
- package/dist/integrations/harnesses/opencode-sdk/harness.js +51 -0
- package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +681 -108
- package/dist/integrations/harnesses/openhands/agent-builder.js +128 -0
- package/dist/integrations/harnesses/openhands/index.js +48 -0
- package/dist/integrations/harnesses/openhands/result-extractor.js +103 -0
- package/dist/integrations/harnesses/pi/agent-builder.js +97 -0
- package/dist/integrations/harnesses/pi/index.js +45 -0
- package/dist/integrations/harnesses/pi/result-extractor.js +135 -0
- package/dist/integrations/harnesses/shared.js +17 -0
- package/dist/integrations/harnesses/types.js +43 -32
- package/dist/integrations/lockfile.js +211 -24
- package/dist/integrations/session-logs/index.js +36 -39
- package/dist/integrations/session-logs/provider-base.js +113 -0
- package/dist/llm/client.js +182 -110
- package/dist/llm/embedders/deterministic.js +2 -2
- package/dist/llm/embedders/remote.js +21 -9
- package/dist/llm/feature-gate.js +17 -57
- package/dist/llm/graph-extract.js +12 -13
- package/dist/llm/index-passes.js +8 -42
- package/dist/llm/memory-infer.js +144 -1
- package/dist/llm/metadata-enhance.js +45 -30
- package/dist/llm/structured-call.js +16 -8
- package/dist/llm/usage-persist.js +30 -5
- package/dist/llm/usage-telemetry.js +59 -6
- package/dist/output/cli-hints.js +1 -2
- package/dist/output/command-registry.js +27 -0
- package/dist/output/context.js +22 -7
- package/dist/output/format-exempt.js +80 -0
- package/dist/output/generic-render.js +251 -0
- package/dist/output/html-render.js +11 -16
- package/dist/output/render-registry.js +57 -0
- package/dist/output/renderers.js +14 -279
- package/dist/output/shapes/curate.js +10 -1
- package/dist/output/shapes/events.js +12 -7
- package/dist/output/shapes/helpers.js +58 -84
- package/dist/output/shapes/passthrough.js +11 -39
- package/dist/output/shapes/proposal/producer.js +15 -7
- package/dist/output/shapes/registry.js +12 -6
- package/dist/output/shapes.js +0 -9
- package/dist/output/text/{init.js → bundle-create.js} +3 -1
- package/dist/output/text/bundle-show.js +7 -0
- package/dist/output/text/command-format.js +562 -0
- package/dist/output/text/env.js +1 -3
- package/dist/output/text/events.js +8 -7
- package/dist/output/text/helpers.js +15 -1164
- package/dist/output/text/proposal/producer.js +4 -2
- package/dist/output/text/proposal-format.js +202 -0
- package/dist/output/text/registry-commands.js +1 -2
- package/dist/output/text/registry.js +12 -6
- package/dist/output/text/show-directives.js +117 -0
- package/dist/output/text/show-format.js +103 -0
- package/dist/output/text/sync.js +5 -0
- package/dist/output/text/workflow-format.js +332 -0
- package/dist/output/text/workflow.js +3 -2
- package/dist/output/text.js +10 -19
- package/dist/registry/factory.js +4 -6
- package/dist/registry/origin-resolve.js +16 -27
- package/dist/registry/providers/skills-sh.js +3 -3
- package/dist/registry/providers/static-index.js +15 -25
- package/dist/registry/resolve.js +43 -94
- package/dist/registry/semver.js +43 -0
- package/dist/runtime.js +81 -12
- package/dist/scripts/akm-migrate.js +35529 -0
- package/dist/setup/detect.js +5 -7
- package/dist/setup/detected-engines.js +136 -0
- package/dist/setup/engine-config.js +100 -0
- package/dist/setup/registry-stash-loader.js +3 -3
- package/dist/setup/semantic-assets.js +12 -9
- package/dist/setup/setup.js +444 -208
- package/dist/setup/steps/connection-shared.js +120 -0
- package/dist/setup/steps/connection.js +108 -305
- package/dist/setup/steps/platforms.js +13 -12
- package/dist/setup/steps/semantic.js +15 -3
- package/dist/setup/steps/sources.js +21 -15
- package/dist/setup/steps/stashdir.js +6 -4
- package/dist/setup/steps/tasks.js +236 -119
- package/dist/setup/steps.js +3 -2
- package/dist/sources/freshness.js +39 -0
- package/dist/sources/provider-factory.js +11 -17
- package/dist/sources/providers/filesystem.js +2 -3
- package/dist/sources/providers/git-install.js +278 -34
- package/dist/sources/providers/git-provider.js +54 -56
- package/dist/sources/providers/git-stash.js +420 -91
- package/dist/sources/providers/git.js +2 -2
- package/dist/sources/providers/npm.js +16 -19
- package/dist/sources/providers/provider-utils.js +47 -22
- package/dist/sources/providers/sync-from-ref.js +3 -9
- package/dist/sources/providers/website.js +2 -2
- package/dist/sources/resolve.js +11 -10
- package/dist/sources/snapshot-fetchers/types.js +4 -0
- package/dist/sources/{website-ingest.js → snapshot-fetchers/website-ingest.js} +110 -41
- package/dist/storage/database.js +60 -4
- package/dist/storage/engines/sqlite-migrations.js +156 -5
- package/dist/storage/locations.js +1 -2
- package/dist/storage/repositories/canaries-repository.js +1 -1
- package/dist/storage/repositories/events-repository.js +51 -11
- package/dist/storage/repositories/improve-runs-repository.js +6 -32
- package/dist/storage/repositories/index-connection.js +79 -0
- package/dist/storage/repositories/index-db.js +4 -3
- package/dist/storage/repositories/index-entries-repository.js +863 -0
- package/dist/{indexer/db/entry-mapper.js → storage/repositories/index-entry-mapper.js} +19 -2
- package/dist/storage/repositories/index-entry-types.js +4 -0
- package/dist/storage/repositories/index-fts-repository.js +167 -0
- package/dist/storage/repositories/index-llm-cache-repository.js +108 -0
- package/dist/storage/repositories/index-meta-repository.js +49 -0
- package/dist/{indexer/db/schema.js → storage/repositories/index-schema.js} +226 -100
- package/dist/storage/repositories/index-sql.js +12 -0
- package/dist/storage/repositories/index-utility-repository.js +356 -0
- package/dist/storage/repositories/index-vec-repository.js +250 -0
- package/dist/storage/repositories/outcome-repository.js +119 -0
- package/dist/storage/repositories/proposals-repository.js +317 -75
- package/dist/storage/repositories/registry-cache.js +1 -1
- package/dist/storage/repositories/salience-repository.js +172 -0
- package/dist/storage/repositories/task-history-repository.js +110 -3
- package/dist/storage/repositories/workflow-runs-repository.js +240 -19
- package/dist/tasks/backends/cron.js +169 -46
- package/dist/tasks/backends/exec-utils.js +76 -3
- package/dist/tasks/backends/index.js +6 -9
- package/dist/tasks/backends/launchd.js +292 -55
- package/dist/tasks/backends/schtasks.js +557 -70
- package/dist/tasks/backends/types.js +4 -0
- package/dist/tasks/command-executable.js +93 -0
- package/dist/tasks/embedded.js +56 -38
- package/dist/tasks/parser.js +156 -64
- package/dist/tasks/resolve-akm-bin.js +144 -51
- package/dist/tasks/runner.js +377 -209
- package/dist/tasks/schedule.js +108 -19
- package/dist/tasks/scheduler-invocation.js +296 -0
- package/dist/tasks/schema.js +1 -1
- package/dist/tasks/task-id.js +35 -0
- package/dist/tasks/validator.js +30 -16
- package/dist/text-import-hook.mjs +1 -1
- package/dist/workflows/authoring/authoring.js +104 -43
- package/dist/workflows/authoring/scope-key.js +1 -1
- package/dist/workflows/cli.js +0 -16
- package/dist/workflows/concurrency-policy.js +15 -0
- package/dist/workflows/exec/brief.js +450 -0
- package/dist/workflows/exec/frozen-judge.js +47 -0
- package/dist/workflows/exec/native-executor.js +1038 -0
- package/dist/workflows/exec/param-secrets.js +115 -0
- package/dist/workflows/exec/report.js +1460 -0
- package/dist/workflows/exec/run-workflow.js +602 -0
- package/dist/workflows/exec/scheduler.js +71 -0
- package/dist/workflows/exec/step-work.js +1190 -0
- package/dist/workflows/exec/unit-writer.js +23 -0
- package/dist/workflows/exec/workflow-engine-gate.js +67 -0
- package/dist/workflows/exec/worktree.js +171 -0
- package/dist/workflows/ir/compile.js +246 -0
- package/dist/workflows/ir/freeze.js +233 -0
- package/dist/workflows/ir/params.js +54 -0
- package/dist/workflows/ir/plan-hash.js +68 -0
- package/dist/workflows/ir/schema.js +540 -0
- package/dist/workflows/parser.js +878 -304
- package/dist/workflows/program/expressions.js +181 -0
- package/dist/workflows/program/schema.js +51 -0
- package/dist/workflows/renderer.js +100 -45
- package/dist/workflows/resource-limits.js +22 -0
- package/dist/workflows/runtime/agent-identity.js +59 -14
- package/dist/workflows/runtime/checkin.js +1 -1
- package/dist/workflows/runtime/plan-classifier.js +131 -0
- package/dist/workflows/runtime/runs.js +376 -119
- package/dist/workflows/runtime/unit-checkin.js +45 -0
- package/dist/workflows/runtime/unit-phases.js +20 -0
- package/dist/workflows/runtime/workflow-asset-loader.js +241 -40
- package/dist/workflows/schema.js +1 -11
- package/dist/workflows/validate-summary.js +2 -3
- package/dist/workflows/validator.js +52 -30
- package/docs/README.md +42 -78
- package/docs/migration/README.md +8 -0
- package/docs/migration/release-notes/0.6.0.md +1 -1
- package/docs/migration/release-notes/0.7.0.md +9 -8
- package/docs/migration/release-notes/0.9.0.md +158 -14
- package/docs/migration/v0.7-to-v0.8.md +46 -47
- package/docs/migration/v0.8-to-v0.9.md +844 -0
- package/docs/reference/README.md +12 -0
- package/docs/reference/data-and-telemetry.md +333 -0
- package/package.json +21 -17
- package/schemas/akm-asset-envelope.json +93 -0
- package/schemas/akm-config.json +4636 -0
- package/schemas/akm-task.json +87 -0
- package/schemas/akm-workflow.json +373 -0
- package/dist/akm-migrate-storage +0 -38
- package/dist/assets/help/help-accept.md +0 -12
- package/dist/assets/help/help-improve.md +0 -84
- package/dist/assets/help/help-proposals.md +0 -17
- package/dist/assets/help/help-propose.md +0 -17
- package/dist/assets/help/help-reject.md +0 -11
- package/dist/assets/profiles/frequent.json +0 -13
- package/dist/assets/profiles/recombine-only.json +0 -21
- package/dist/assets/profiles/reflect-distill.json +0 -30
- package/dist/assets/profiles/synthesize.json +0 -15
- package/dist/assets/prompts/procedural-system.md +0 -44
- package/dist/assets/prompts/recombine-system.md +0 -40
- package/dist/assets/prompts/staleness-detect-system.md +0 -6
- package/dist/assets/tasks/core/backup.yml +0 -4
- package/dist/assets/tasks/graph-refresh-weekly.yml +0 -10
- package/dist/assets/templates/html/default.html +0 -78
- package/dist/assets/templates/html/vendor/echarts.min.js +0 -45
- package/dist/assets/wiki/index-template.md +0 -12
- package/dist/assets/wiki/ingest-workflow-template.md +0 -83
- package/dist/assets/wiki/log-template.md +0 -8
- package/dist/assets/wiki/schema-template.md +0 -61
- package/dist/cli/config-migrate.js +0 -150
- package/dist/cli/config-validate.js +0 -39
- package/dist/commands/graph/graph-cli.js +0 -124
- package/dist/commands/graph/graph.js +0 -487
- package/dist/commands/improve/calibration.js +0 -161
- package/dist/commands/improve/dedup.js +0 -482
- package/dist/commands/improve/extract-watch.js +0 -140
- package/dist/commands/improve/hot-probation.js +0 -45
- package/dist/commands/improve/improve-auto-accept.js +0 -276
- package/dist/commands/improve/improve-profiles.js +0 -168
- package/dist/commands/improve/procedural.js +0 -398
- package/dist/commands/improve/recombine.js +0 -818
- package/dist/commands/improve/schema-similarity-gate.js +0 -168
- package/dist/commands/lint/agent-linter.js +0 -44
- package/dist/commands/lint/command-linter.js +0 -44
- package/dist/commands/lint/default-linter.js +0 -16
- package/dist/commands/lint/fact-linter.js +0 -39
- package/dist/commands/lint/knowledge-linter.js +0 -16
- package/dist/commands/lint/memory-linter.js +0 -61
- package/dist/commands/lint/registry.js +0 -41
- package/dist/commands/lint/skill-linter.js +0 -45
- package/dist/commands/lint/task-linter.js +0 -50
- package/dist/commands/lint/workflow-linter.js +0 -81
- package/dist/commands/proposal/legacy-import.js +0 -115
- package/dist/commands/sources/history.js +0 -196
- package/dist/commands/tasks/default-tasks.js +0 -186
- package/dist/commands/wiki-cli.js +0 -292
- package/dist/core/asset/asset-registry.js +0 -76
- package/dist/core/asset/asset-spec.js +0 -259
- package/dist/core/config/config-migration.js +0 -602
- package/dist/core/deep-merge.js +0 -38
- package/dist/core/eval/rank-metrics.js +0 -113
- package/dist/core/ripgrep/install.js +0 -163
- package/dist/core/ripgrep/resolve.js +0 -81
- package/dist/indexer/db/db.js +0 -1413
- package/dist/indexer/manifest.js +0 -170
- package/dist/indexer/passes/metadata-contributors.js +0 -31
- package/dist/indexer/usage/unmigrated-vaults-guard.js +0 -94
- package/dist/integrations/harnesses/opencode-sdk/index.js +0 -49
- package/dist/llm/call-ai.js +0 -62
- package/dist/llm/memory-infer-impl.js +0 -138
- package/dist/output/shapes/distill.js +0 -14
- package/dist/output/shapes/history.js +0 -11
- package/dist/output/text/distill.js +0 -6
- package/dist/output/text/enable-disable.js +0 -8
- package/dist/output/text/history.js +0 -6
- package/dist/output/text/wiki.js +0 -16
- package/dist/registry/build-index.js +0 -386
- package/dist/scripts/migrate-storage.js +0 -19108
- package/dist/scripts/migrations/import-fs-improve-runs-to-db.js +0 -9411
- package/dist/scripts/migrations/v16-to-v17.js +0 -141
- package/dist/setup/legacy-config.js +0 -106
- package/dist/storage/repositories/consolidation-repository.js +0 -38
- package/dist/storage/repositories/recombine-repository.js +0 -213
- package/dist/wiki/wiki-templates.js +0 -15
- package/dist/wiki/wiki.js +0 -1012
- package/dist/workflows/db.js +0 -215
- package/docs/data-and-telemetry.md +0 -226
- /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/registry.js +0 -0
- /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/youtube.js +0 -0
package/dist/indexer/init.js
CHANGED
|
@@ -4,35 +4,32 @@
|
|
|
4
4
|
/**
|
|
5
5
|
* Explicit composition root for the indexer's built-in registrations.
|
|
6
6
|
*
|
|
7
|
-
* Historically
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* `docs/technical/code-health-brittleness-audit.md`.
|
|
7
|
+
* Historically a lazy gate (`ensureBuiltinsRegistered` in `walk/file-context.ts`)
|
|
8
|
+
* registered the built-in renderer set on first use. That implicit,
|
|
9
|
+
* order-dependent wiring is the M1/M2 finding in
|
|
10
|
+
* the 2026-06 code-health brittleness audit.
|
|
12
11
|
*
|
|
13
|
-
* `initIndexer()` folds
|
|
14
|
-
* point. It registers, exactly once:
|
|
12
|
+
* `initIndexer()` folds the renderer registration into a single deterministic,
|
|
13
|
+
* idempotent entry point. It registers, exactly once:
|
|
15
14
|
*
|
|
16
|
-
* 1. Built-in
|
|
17
|
-
*
|
|
18
|
-
* 3. Metadata contributors — top-level registration side-effects that run when
|
|
19
|
-
* `output/renderers.ts` and `workflows/renderer.ts` are imported.
|
|
15
|
+
* 1. Built-in renderers — `registerBuiltinRenderers()` (`output/renderers.ts`),
|
|
16
|
+
* which value-imports the workflow renderers from `workflows/renderer.ts`.
|
|
20
17
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
18
|
+
* Recognition is no longer registry-driven: the chunk-3 cutover replaced the
|
|
19
|
+
* `registerBuiltinMatchers()`/`runMatchers()` competition with the akm adapter's
|
|
20
|
+
* synchronous `recognizeMatch()` (`core/adapter/adapters/akm-adapter.ts`), so no
|
|
21
|
+
* matcher registration happens here. Index-time metadata is likewise no longer
|
|
22
|
+
* registry-driven: the `akm` adapter's synchronous `foldRecognizedMetadata`
|
|
23
|
+
* (`core/adapter/adapters/akm-metadata.ts`) computes it inline during recognize.
|
|
26
24
|
*
|
|
27
25
|
* Timing is preserved: this stays a *lazy* gate. It is awaited from the same
|
|
28
|
-
* accessor call sites the old
|
|
26
|
+
* accessor call sites the old gate was awaited from, so no startup work is
|
|
29
27
|
* forced eagerly. The shared promise makes concurrent and repeat calls safe —
|
|
30
28
|
* the registrations run at most once per process.
|
|
31
29
|
*/
|
|
32
30
|
let initPromise;
|
|
33
31
|
/**
|
|
34
|
-
* Idempotently register every built-in indexer
|
|
35
|
-
* renderers, and metadata contributors).
|
|
32
|
+
* Idempotently register every built-in indexer renderer.
|
|
36
33
|
*
|
|
37
34
|
* Safe to call repeatedly and concurrently: the registration work runs at most
|
|
38
35
|
* once; subsequent calls await the same resolved promise.
|
|
@@ -40,13 +37,9 @@ let initPromise;
|
|
|
40
37
|
export function initIndexer() {
|
|
41
38
|
if (!initPromise) {
|
|
42
39
|
initPromise = (async () => {
|
|
43
|
-
|
|
44
|
-
//
|
|
45
|
-
// load-time side-effect and exposes registerBuiltinRenderers().
|
|
40
|
+
// Importing renderers exposes registerBuiltinRenderers(); it value-imports
|
|
41
|
+
// the workflow renderers, so no separate workflows/renderer import is needed.
|
|
46
42
|
const { registerBuiltinRenderers } = await import("../output/renderers.js");
|
|
47
|
-
// Imported for the workflow metadata contributor's load-time side-effect.
|
|
48
|
-
await import("../workflows/renderer.js");
|
|
49
|
-
registerBuiltinMatchers();
|
|
50
43
|
registerBuiltinRenderers();
|
|
51
44
|
})();
|
|
52
45
|
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
+
/**
|
|
5
|
+
* `deriveInstallations` — akm 0.9.0 Chunk 5, milestone M-a.
|
|
6
|
+
*
|
|
7
|
+
* Bridges the `SearchSource[]` model (the live indexer's source list,
|
|
8
|
+
* `search-source.ts`) onto the durable `BundleInstallation[]` /
|
|
9
|
+
* `BundleComponent[]` model (spec §1.1). LIVE: called from the indexer
|
|
10
|
+
* (provenance derivation), the proposal repository, and written-asset
|
|
11
|
+
* indexing. The originally-planned full "Step-3" `scanComponent`-driven scan
|
|
12
|
+
* swap was superseded by the narrower Chunk-5 F4a drain-dir engine swap; the
|
|
13
|
+
* shadow-parity scaffolding module (`scan/scan-installations.ts`) was deleted
|
|
14
|
+
* as dead in the 0.9.0 close-out.
|
|
15
|
+
*
|
|
16
|
+
* Per source → one installation:
|
|
17
|
+
* - `id` = `source.registryId` ?? a deterministic slug of `source.path`
|
|
18
|
+
* (the `<bundle>` prefix of every ref this installation emits,
|
|
19
|
+
* spec §1.3). Slugs are made unique WITHIN a derivation batch
|
|
20
|
+
* by appending a short path-hash suffix on collision, so two
|
|
21
|
+
* sources sharing a basename never mint the same bundle id.
|
|
22
|
+
* - `trusted` = `source.writable === true`. 0.9.0 ships no first-class trust
|
|
23
|
+
* record (spec §1.3 — "no new trust machinery"); the writable
|
|
24
|
+
* primary/config stashes are the user's own and count as
|
|
25
|
+
* trusted, read-only registry caches do not. Nothing consumes
|
|
26
|
+
* `trusted` in the live path yet (installation grants nothing,
|
|
27
|
+
* History D8) — this is the Tier-A placeholder mapping.
|
|
28
|
+
* - components = ONE component for the current single-root akm layout
|
|
29
|
+
* (spec §1.2 rule 5): `{ id, root: source.path, adapter }`. The
|
|
30
|
+
* akm layout's type dirs (`knowledge/`, `skills/`, …) are NOT
|
|
31
|
+
* separate components — they are type-derived leading path
|
|
32
|
+
* segments of the conceptId within the one component.
|
|
33
|
+
*
|
|
34
|
+
* ── The component id == the bundle id (transitional coupling) ──
|
|
35
|
+
*
|
|
36
|
+
* The `akm` adapter's `recognize` derives an item's ref prefix from the
|
|
37
|
+
* component it is handed (`ref = ${c.id}//${conceptId}`, `akm-adapter.ts`), so
|
|
38
|
+
* for the single-component akm layout the component id MUST equal the
|
|
39
|
+
* installation/bundle id for refs to be `bundle//conceptId`. This mirrors the
|
|
40
|
+
* `akm-adapter.test.ts` convention (`component({ id: BUNDLE_ID })`). Splitting
|
|
41
|
+
* component-provenance from the bundle prefix (recognize learning the bundle
|
|
42
|
+
* from the installation) is a downstream contract refinement — nothing in the
|
|
43
|
+
* live path reads `IndexDocument.component` as distinct from `bundle` today.
|
|
44
|
+
*
|
|
45
|
+
* ── Adapter selection (spec §1.2 ordered probe) ──
|
|
46
|
+
*
|
|
47
|
+
* The adapter is chosen by the ordered `looksLikeRoot` probe over the built-in
|
|
48
|
+
* adapters (`getAdapters()`), first match wins. The registry is now a STATIC
|
|
49
|
+
* FROZEN map (normative §12.6) populated at module load, so this probe runs in
|
|
50
|
+
* production with the full 11-family set — no registration call is required
|
|
51
|
+
* first. Array order (`BUILTIN_ADAPTERS`) is the probe precedence, most-specific
|
|
52
|
+
* first, so a `.claude`/dotenv/wiki root is claimed by its tight probe before
|
|
53
|
+
* the loose `akm` stash-shape probe.
|
|
54
|
+
*
|
|
55
|
+
* When NO adapter's probe fires (an empty or not-yet-materialized root), the
|
|
56
|
+
* fallback is **`akm`** (see {@link FALLBACK_ADAPTER_ID}), preserving workspace
|
|
57
|
+
* root behavior. Explicit configured ownership always wins over probing.
|
|
58
|
+
*/
|
|
59
|
+
import { isSourceWriteActivated } from "../core/activation-policy.js";
|
|
60
|
+
import { detectAdapterId } from "../core/adapter/detect-adapter.js";
|
|
61
|
+
import { stashDirFor } from "../core/asset/asset-placement.js";
|
|
62
|
+
import { deriveBundleId, deriveBundleIds, slugForPath } from "../core/bundle-id.js";
|
|
63
|
+
export { deriveBundleId, deriveBundleIds, slugForPath };
|
|
64
|
+
/**
|
|
65
|
+
* The no-probe-match fallback adapter id.
|
|
66
|
+
*
|
|
67
|
+
* The status-quo-preserving default from spec §1.2(3):
|
|
68
|
+
*
|
|
69
|
+
* - Behavior discipline (spec line 267): the AKM workspace root's own indexing
|
|
70
|
+
* MUST stay classified `akm`. In this transitional model there is no
|
|
71
|
+
* depends on either explicit adapter configuration, `akm.looksLikeRoot`
|
|
72
|
+
* firing (type dirs / `.stash` present), or this fallback. A genuinely empty
|
|
73
|
+
* root fires no probe; `akm` keeps the implicit workspace root correct.
|
|
74
|
+
* - Status quo: before the registry was wired, `getAdapters()` was empty in
|
|
75
|
+
* production so EVERY source fell back here — this preserves that exact
|
|
76
|
+
* fallback value while the probe now genuinely classifies the non-akm shapes.
|
|
77
|
+
*/
|
|
78
|
+
const FALLBACK_ADAPTER_ID = "akm";
|
|
79
|
+
/**
|
|
80
|
+
* Resolve the adapter id for a component root via the ordered `looksLikeRoot`
|
|
81
|
+
* probe (spec §1.2), first match wins; falls back to `akm` when no probe fires.
|
|
82
|
+
*/
|
|
83
|
+
export { detectAdapterId } from "../core/adapter/detect-adapter.js";
|
|
84
|
+
/**
|
|
85
|
+
* Derive the durable `BundleInstallation[]` from the transitional
|
|
86
|
+
* `SearchSource[]`. Order is preserved (source priority = installation
|
|
87
|
+
* priority). Bundle ids are unique within the returned batch.
|
|
88
|
+
*/
|
|
89
|
+
export function deriveInstallations(sources) {
|
|
90
|
+
const ids = deriveBundleIds(sources);
|
|
91
|
+
const installations = [];
|
|
92
|
+
for (const [index, source] of sources.entries()) {
|
|
93
|
+
// D-R5 rule 1: when the source carries its config bundle key (a slug-legal
|
|
94
|
+
// registryId), that key IS the installation id — equal by construction to
|
|
95
|
+
// this derivation. A non-slug-legal registryId slugs from the path instead.
|
|
96
|
+
const id = ids[index];
|
|
97
|
+
const writable = isSourceWriteActivated(source);
|
|
98
|
+
const adapter = source.adapterId ?? detectAdapterId(source.path, FALLBACK_ADAPTER_ID);
|
|
99
|
+
installations.push({
|
|
100
|
+
id,
|
|
101
|
+
trusted: writable,
|
|
102
|
+
components: [
|
|
103
|
+
{
|
|
104
|
+
// Single-component akm layout: the component id == the bundle id so
|
|
105
|
+
// the adapter's `ref = ${c.id}//${conceptId}` yields `bundle//…`.
|
|
106
|
+
id,
|
|
107
|
+
adapter,
|
|
108
|
+
root: source.path,
|
|
109
|
+
writable,
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
return installations;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Derive the durable `EntryProvenance` for an indexed entry (Chunk-5 flip
|
|
118
|
+
* §14.4): `conceptId` is the D-R2 qualified `<stash-subdir>/<name>` spelling
|
|
119
|
+
* (`stashDirFor(type)` prefix; a foreign type with no placement stash-subdir
|
|
120
|
+
* keeps the bare name), and `item_ref` is `<bundle>//<conceptId>` — the exact
|
|
121
|
+
* spelling `recognize` emits as `IndexDocument.ref`. Shared by the full-index
|
|
122
|
+
* diff-persist writer and the write-path `indexWrittenAssets` fast path so both
|
|
123
|
+
* populate item_ref identically (F4a M-core-2 item 5 — no NULL-item_ref rows).
|
|
124
|
+
*/
|
|
125
|
+
export function deriveEntryProvenance(bundle, type, name,
|
|
126
|
+
/**
|
|
127
|
+
* The OWNING adapter's `doc.conceptId`, when the caller has it. Preferred
|
|
128
|
+
* verbatim over the akm `stashDirFor` re-derivation so a non-akm adapter's
|
|
129
|
+
* identity (`pages/foo`, snapshot paths, ...) survives into `item_ref`
|
|
130
|
+
* (D-R3: identity comes from the resolved entry, not a re-derivation).
|
|
131
|
+
*/
|
|
132
|
+
adapterConceptId) {
|
|
133
|
+
const typeStashDir = stashDirFor(type);
|
|
134
|
+
const conceptId = adapterConceptId ?? (typeStashDir !== undefined ? `${typeStashDir}/${name}` : name);
|
|
135
|
+
return {
|
|
136
|
+
itemRef: `${bundle.bundleId}//${conceptId}`,
|
|
137
|
+
bundleId: bundle.bundleId,
|
|
138
|
+
componentId: bundle.componentId,
|
|
139
|
+
conceptId,
|
|
140
|
+
adapterId: bundle.adapterId,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
@@ -19,16 +19,24 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import fs from "node:fs";
|
|
21
21
|
import path from "node:path";
|
|
22
|
-
import { getEntriesByDir
|
|
23
|
-
|
|
22
|
+
import { getEntriesByDir } from "../../storage/repositories/index-entries-repository.js";
|
|
23
|
+
import { getIndexDirState } from "../../storage/repositories/index-meta-repository.js";
|
|
24
|
+
export function getDirIndexState(db, dirPath, files, builtAtMs, indexVariant = "") {
|
|
24
25
|
const prevEntries = getEntriesByDir(db, dirPath);
|
|
25
|
-
const fingerprint = computeDirFingerprint(dirPath, files);
|
|
26
|
+
const fingerprint = computeDirFingerprint(dirPath, files, indexVariant);
|
|
26
27
|
if (prevEntries.length > 0) {
|
|
27
28
|
const staleReason = getDirStaleReason(dirPath, files, prevEntries, builtAtMs);
|
|
28
|
-
if (
|
|
29
|
-
return { stale:
|
|
29
|
+
if (staleReason)
|
|
30
|
+
return { stale: true, reason: staleReason, persistedRowCount: prevEntries.length };
|
|
31
|
+
const cachedState = getIndexDirState(db, dirPath);
|
|
32
|
+
if (!cachedState || cachedState.fileSetHash !== fingerprint.fileSetHash) {
|
|
33
|
+
return {
|
|
34
|
+
stale: true,
|
|
35
|
+
reason: { kind: "index-context-changed", detail: indexVariant },
|
|
36
|
+
persistedRowCount: prevEntries.length,
|
|
37
|
+
};
|
|
30
38
|
}
|
|
31
|
-
return { stale:
|
|
39
|
+
return { stale: false, reason: { kind: "unchanged" }, persistedRowCount: prevEntries.length };
|
|
32
40
|
}
|
|
33
41
|
const cachedState = getIndexDirState(db, dirPath);
|
|
34
42
|
if (cachedState &&
|
|
@@ -46,8 +54,8 @@ export function getDirIndexState(db, dirPath, files, builtAtMs) {
|
|
|
46
54
|
persistedRowCount: 0,
|
|
47
55
|
};
|
|
48
56
|
}
|
|
49
|
-
export function getCachedZeroRowDirState(db, dirPath, files, builtAtMs, priorDirsChanged) {
|
|
50
|
-
const state = getDirIndexState(db, dirPath, files, builtAtMs);
|
|
57
|
+
export function getCachedZeroRowDirState(db, dirPath, files, builtAtMs, priorDirsChanged, indexVariant = "") {
|
|
58
|
+
const state = getDirIndexState(db, dirPath, files, builtAtMs, indexVariant);
|
|
51
59
|
if (state.stale || state.reason.kind !== "cached-zero-row-state")
|
|
52
60
|
return undefined;
|
|
53
61
|
if (!canUseIncrementalSkip(state, priorDirsChanged))
|
|
@@ -59,7 +67,7 @@ export function canUseIncrementalSkip(state, priorDirsChanged) {
|
|
|
59
67
|
state.reason.kind === "cached-zero-row-state" &&
|
|
60
68
|
state.reason.detail === "deduped-zero-row");
|
|
61
69
|
}
|
|
62
|
-
export function computeDirFingerprint(_dirPath, files) {
|
|
70
|
+
export function computeDirFingerprint(_dirPath, files, indexVariant = "") {
|
|
63
71
|
const normalizedFiles = [...new Set(files.map((file) => path.basename(file)))].sort();
|
|
64
72
|
let fileMtimeMaxMs = 0;
|
|
65
73
|
for (const file of files) {
|
|
@@ -72,7 +80,7 @@ export function computeDirFingerprint(_dirPath, files) {
|
|
|
72
80
|
}
|
|
73
81
|
}
|
|
74
82
|
return {
|
|
75
|
-
fileSetHash: normalizedFiles.join("\0"),
|
|
83
|
+
fileSetHash: [indexVariant, ...normalizedFiles].join("\0"),
|
|
76
84
|
fileMtimeMaxMs,
|
|
77
85
|
};
|
|
78
86
|
}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* the parent without re-running the LLM.
|
|
20
20
|
*
|
|
21
21
|
* Disabling — two orthogonal gates:
|
|
22
|
-
* 1. `
|
|
22
|
+
* 1. The selected strategy sets `processes.memoryInference.enabled = false`
|
|
23
23
|
* blocks the pass at the feature-flag layer (no network call may ever
|
|
24
24
|
* issue). Historically the v1 spec §14 gate, superseded by the 0.8.0
|
|
25
25
|
* profile shape.
|
|
@@ -36,9 +36,11 @@
|
|
|
36
36
|
*/
|
|
37
37
|
import fs from "node:fs";
|
|
38
38
|
import path from "node:path";
|
|
39
|
-
import {
|
|
39
|
+
import { detectAdapterId } from "../../core/adapter/detect-adapter.js";
|
|
40
40
|
import { assembleAsset } from "../../core/asset/asset-serialize.js";
|
|
41
41
|
import { parseFrontmatter, parseFrontmatterBlock } from "../../core/asset/frontmatter.js";
|
|
42
|
+
import { conceptIdFromTypeName, parseRefInput } from "../../core/asset/resolve-ref.js";
|
|
43
|
+
import { todayIso } from "../../core/common.js";
|
|
42
44
|
import { concurrentMap } from "../../core/concurrent.js";
|
|
43
45
|
import { warn } from "../../core/warn.js";
|
|
44
46
|
import { writeAssetToSource } from "../../core/write-source.js";
|
|
@@ -60,7 +62,7 @@ const FM_CAPTURE_MODE = "captureMode";
|
|
|
60
62
|
*
|
|
61
63
|
* Two orthogonal gates:
|
|
62
64
|
*
|
|
63
|
-
* 1. **Feature gate** — `
|
|
65
|
+
* 1. **Feature gate** — the selected strategy's `processes.memoryInference.enabled`
|
|
64
66
|
* (defaults to `true`). When `false`, no network call may issue regardless
|
|
65
67
|
* of per-pass settings.
|
|
66
68
|
* 2. **Per-pass gate** — `resolveIndexPassLLM("memory", config)` (which
|
|
@@ -72,6 +74,7 @@ const FM_CAPTURE_MODE = "captureMode";
|
|
|
72
74
|
*/
|
|
73
75
|
export async function runMemoryInferencePass(ctx) {
|
|
74
76
|
const { config, sources, signal, db, reEnrich, onProgress, options = {} } = ctx;
|
|
77
|
+
const invocationOwnsConnection = Object.hasOwn(ctx, "llmConfig");
|
|
75
78
|
const compressMemoryToDerivedMemory = options.compressMemoryToDerivedMemory ?? memoryInfer.compressMemoryToDerivedMemory;
|
|
76
79
|
const result = {
|
|
77
80
|
considered: 0,
|
|
@@ -90,20 +93,23 @@ export async function runMemoryInferencePass(ctx) {
|
|
|
90
93
|
// gate) bubbles up into the pass result.
|
|
91
94
|
const inferTelemetry = {};
|
|
92
95
|
// Gate 1 — feature gate via isProcessEnabled, which reads the 0.8.0 path
|
|
93
|
-
// (
|
|
96
|
+
// (selected strategy's processes.memoryInference.enabled). Defaults to
|
|
94
97
|
// enabled when the key is absent.
|
|
95
|
-
if (!isProcessEnabled("index", "memory_inference", config))
|
|
98
|
+
if (!invocationOwnsConnection && !isProcessEnabled("index", "memory_inference", config))
|
|
96
99
|
return result;
|
|
97
100
|
// Gate 2 — per-pass opt-out (#208). Returns the resolved llm config or
|
|
98
101
|
// `undefined` when the pass should not run.
|
|
99
|
-
const llmConfig = resolveIndexPassLLM("memory", config);
|
|
102
|
+
const llmConfig = Object.hasOwn(ctx, "llmConfig") ? ctx.llmConfig : resolveIndexPassLLM("memory", config);
|
|
100
103
|
if (!llmConfig)
|
|
101
104
|
return result;
|
|
105
|
+
const featureConfig = invocationOwnsConnection
|
|
106
|
+
? { ...config, index: { ...config.index, memory: { ...config.index?.memory, enabled: true } } }
|
|
107
|
+
: config;
|
|
102
108
|
// The pass only writes to the primary (working) stash. Read-only caches
|
|
103
109
|
// (git, npm, website) are deliberately untouched — writing inferred
|
|
104
110
|
// children there would be clobbered by the next sync().
|
|
105
111
|
const primary = sources[0];
|
|
106
|
-
if (!primary)
|
|
112
|
+
if (!primary || (primary.adapterId ?? detectAdapterId(primary.path)) !== "akm")
|
|
107
113
|
return result;
|
|
108
114
|
const pending = collectPendingMemories(primary.path).filter((record) => !options.candidateRefs || options.candidateRefs.has(record.ref));
|
|
109
115
|
result.considered = pending.length;
|
|
@@ -173,9 +179,9 @@ export async function runMemoryInferencePass(ctx) {
|
|
|
173
179
|
retryAttempts += 1;
|
|
174
180
|
};
|
|
175
181
|
const derived = db
|
|
176
|
-
? await withLlmCache(db, record.filePath, record.body, reEnrich ?? false, () => compressMemoryToDerivedMemory(llmConfig, record.body, signal,
|
|
182
|
+
? await withLlmCache(db, record.filePath, record.body, reEnrich ?? false, () => compressMemoryToDerivedMemory(llmConfig, record.body, signal, featureConfig, (evt) => {
|
|
177
183
|
warn(`[akm] LLM fallback for ${evt.feature}: ${evt.reason}`);
|
|
178
|
-
}, inferTelemetry, onRetryAttempt), validate, undefined, "", {
|
|
184
|
+
}, inferTelemetry, onRetryAttempt), validate, undefined, "memory-inference-v2", {
|
|
179
185
|
onCacheHit: () => {
|
|
180
186
|
fromCache = true;
|
|
181
187
|
},
|
|
@@ -217,8 +223,8 @@ export async function runMemoryInferencePass(ctx) {
|
|
|
217
223
|
precheck: false,
|
|
218
224
|
};
|
|
219
225
|
},
|
|
220
|
-
//
|
|
221
|
-
//
|
|
226
|
+
// Caller-set connection concurrency or 1: `resolveLlmEngineUse` does
|
|
227
|
+
// not forward `engines.<name>.concurrency`, so config cannot raise this.
|
|
222
228
|
llmConfig.concurrency ?? 1);
|
|
223
229
|
for (let i = 0; i < perRecordResults.length; i++) {
|
|
224
230
|
const res = perRecordResults[i];
|
|
@@ -310,7 +316,7 @@ export function collectPendingMemories(stashRoot) {
|
|
|
310
316
|
out.push({
|
|
311
317
|
filePath,
|
|
312
318
|
stashRoot,
|
|
313
|
-
ref:
|
|
319
|
+
ref: conceptIdFromTypeName("memory", relName),
|
|
314
320
|
data: parsed.data,
|
|
315
321
|
body: parsed.content,
|
|
316
322
|
name: relName,
|
|
@@ -370,6 +376,7 @@ async function writeDerivedMemory(parent, derived) {
|
|
|
370
376
|
kind: "filesystem",
|
|
371
377
|
name: "stash",
|
|
372
378
|
path: parent.stashRoot,
|
|
379
|
+
adapterId: "akm",
|
|
373
380
|
};
|
|
374
381
|
const writeConfig = {
|
|
375
382
|
type: "filesystem",
|
|
@@ -378,7 +385,7 @@ async function writeDerivedMemory(parent, derived) {
|
|
|
378
385
|
writable: true,
|
|
379
386
|
};
|
|
380
387
|
const childName = `${parent.name}.derived`;
|
|
381
|
-
const childRefStr = `
|
|
388
|
+
const childRefStr = `memories/${childName}`;
|
|
382
389
|
if (fs.existsSync(derivedChildPath(parent))) {
|
|
383
390
|
// The derived child appeared on disk after the caller's pre-check (#588)
|
|
384
391
|
// — a rare mid-flight race. Report `childExists` so the caller marks the
|
|
@@ -387,7 +394,7 @@ async function writeDerivedMemory(parent, derived) {
|
|
|
387
394
|
}
|
|
388
395
|
try {
|
|
389
396
|
const content = renderDerivedMemory(parent, derived);
|
|
390
|
-
const childRef =
|
|
397
|
+
const childRef = parseRefInput(childRefStr);
|
|
391
398
|
await writeAssetToSource(writeTarget, writeConfig, childRef, content);
|
|
392
399
|
return { written: 1, childExists: false };
|
|
393
400
|
}
|
|
@@ -403,12 +410,15 @@ function renderDerivedMemory(parent, derived) {
|
|
|
403
410
|
const fm = {
|
|
404
411
|
[FM_INFERRED]: true,
|
|
405
412
|
[FM_CAPTURE_MODE]: "background",
|
|
406
|
-
|
|
413
|
+
// The `source:` backref and internal candidate identity use the same current
|
|
414
|
+
// `memories/<name>` conceptId spelling.
|
|
415
|
+
[FM_SOURCE]: conceptIdFromTypeName("memory", parent.name),
|
|
407
416
|
description: derived.description,
|
|
408
417
|
tags: derived.tags,
|
|
409
418
|
searchHints: derived.searchHints,
|
|
410
419
|
title: derived.title,
|
|
411
420
|
derivedFrom: parent.name,
|
|
421
|
+
updated: todayIso(),
|
|
412
422
|
};
|
|
413
423
|
return assembleAsset(fm, `# ${derived.title.trim()}\n\n${derived.content.trim()}\n`);
|
|
414
424
|
}
|