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
|
@@ -0,0 +1,160 @@
|
|
|
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
|
+
* `indexDocumentToStashEntry` — the inverse of the `akm` adapter's
|
|
6
|
+
* `indexDocumentFromEntry` (`adapters/akm-adapter.ts`). akm 0.9.0 Chunk 5,
|
|
7
|
+
* milestone F4a (M2 groundwork).
|
|
8
|
+
*
|
|
9
|
+
* The engine swap drains an `IndexDocument` stream (`drainDirDocuments` × the
|
|
10
|
+
* dispatched adapter's `recognize`) in place of the per-dir flat-walk matcher-pass
|
|
11
|
+
* `IndexDocument` stream, then persists it. But the durable `entries.entry_json`
|
|
12
|
+
* column stays a faithful `IndexDocument` — every reader (`rowToIndexedEntry` →
|
|
13
|
+
* `DbIndexedEntry.entry`) consumes it as one, and the byte-for-byte goldens pin
|
|
14
|
+
* it. So the persist path must reconstruct the exact `IndexDocument` the old
|
|
15
|
+
* pipeline stored FROM the `IndexDocument` the new pipeline produces.
|
|
16
|
+
*
|
|
17
|
+
* That reconstruction is lossless by construction: the akm adapter's `recognize`
|
|
18
|
+
* assembles a full `IndexDocument` (P1/P2 → fold → P4) and then maps it onto the
|
|
19
|
+
* `IndexDocument` via `indexDocumentFromEntry` — first-class search/signal fields
|
|
20
|
+
* onto named members, every other search-surface/provenance field onto
|
|
21
|
+
* `documentJson` (the `DOCUMENT_JSON_CARRIED_FIELDS` set). This function reverses
|
|
22
|
+
* that mapping exactly, so `indexDocumentToStashEntry(recognize(file))` deep-
|
|
23
|
+
* equals the entry the legacy flat-walk pass stored for the same file (the
|
|
24
|
+
* `tests/integration/shadow-scan-parity.test.ts` gate pins the persisted index).
|
|
25
|
+
*
|
|
26
|
+
* Two deliberate non-round-trip fields:
|
|
27
|
+
* - `filename` — dropped by `indexDocumentFromEntry` (no IndexDocument home),
|
|
28
|
+
* recovered here as `basename(doc.path)`. The old pipeline set it to
|
|
29
|
+
* `basename(file)` in `applyPostContributorFields`, and `doc.path` IS that
|
|
30
|
+
* file, so the value is identical.
|
|
31
|
+
* - `fileSize` — never set by `recognize` NOR by the legacy flat-walk pass;
|
|
32
|
+
* both pipelines attach it at PERSIST time (`attachFileSize`). It is therefore
|
|
33
|
+
* intentionally absent here and added by the persist layer, exactly as
|
|
34
|
+
* before.
|
|
35
|
+
*
|
|
36
|
+
* Pure, type-only imports (no cycle participation).
|
|
37
|
+
*/
|
|
38
|
+
import path from "node:path";
|
|
39
|
+
/**
|
|
40
|
+
* Reconstruct the `IndexDocument` an `IndexDocument` was mapped from. First-class
|
|
41
|
+
* IndexDocument members and the `documentJson`-carried extras are both restored;
|
|
42
|
+
* every field is set only when present, matching the old pipeline's
|
|
43
|
+
* "assign-only-when-defined" assembly so the reconstruction deep-equals it.
|
|
44
|
+
*/
|
|
45
|
+
export function indexDocumentToStashEntry(doc) {
|
|
46
|
+
const dj = (doc.documentJson ?? {});
|
|
47
|
+
const entry = {
|
|
48
|
+
name: doc.name,
|
|
49
|
+
// `type` is a required member of the merged IndexDocument (M-core-1), so no
|
|
50
|
+
// `?? ""` fallback is needed — `recognize` always sets it.
|
|
51
|
+
type: doc.type,
|
|
52
|
+
// Dropped by indexDocumentFromEntry — recovered from the read path (= the
|
|
53
|
+
// basename the old pipeline stored). Always present on a recognized doc.
|
|
54
|
+
filename: path.basename(doc.path ?? ""),
|
|
55
|
+
};
|
|
56
|
+
// ── First-class IndexDocument members (spec §3) ──
|
|
57
|
+
if (doc.description !== undefined)
|
|
58
|
+
entry.description = doc.description;
|
|
59
|
+
if (doc.tags !== undefined)
|
|
60
|
+
entry.tags = doc.tags;
|
|
61
|
+
if (doc.content !== undefined)
|
|
62
|
+
entry.content = doc.content;
|
|
63
|
+
if (doc.ownsPresentation !== undefined)
|
|
64
|
+
entry.ownsPresentation = doc.ownsPresentation;
|
|
65
|
+
if (doc.updated !== undefined)
|
|
66
|
+
entry.updated = doc.updated;
|
|
67
|
+
if (doc.links !== undefined)
|
|
68
|
+
entry.links = doc.links;
|
|
69
|
+
if (doc.adapterId === "okf") {
|
|
70
|
+
if (doc.documentJson !== undefined)
|
|
71
|
+
entry.documentJson = doc.documentJson;
|
|
72
|
+
// OKF v0.2 trust/provenance/lifecycle family (okf-support.md v0.2 note).
|
|
73
|
+
// These are first-class IndexDocument members the okf adapter sets
|
|
74
|
+
// directly (never routed through documentJson), so — unlike the akm
|
|
75
|
+
// adapter's DOCUMENT_JSON_CARRIED_FIELDS reconstruction below — they need
|
|
76
|
+
// an explicit carry here too, or persistence silently drops them even
|
|
77
|
+
// though `recognize()` itself returns them correctly.
|
|
78
|
+
if (doc.provenance !== undefined)
|
|
79
|
+
entry.provenance = doc.provenance;
|
|
80
|
+
if (doc.lifecycleStatus !== undefined)
|
|
81
|
+
entry.lifecycleStatus = doc.lifecycleStatus;
|
|
82
|
+
if (doc.staleAfter !== undefined)
|
|
83
|
+
entry.staleAfter = doc.staleAfter;
|
|
84
|
+
if (doc.okfVersion !== undefined)
|
|
85
|
+
entry.okfVersion = doc.okfVersion;
|
|
86
|
+
return entry;
|
|
87
|
+
}
|
|
88
|
+
if (doc.aliases !== undefined)
|
|
89
|
+
entry.aliases = doc.aliases;
|
|
90
|
+
if (doc.searchHints !== undefined)
|
|
91
|
+
entry.searchHints = doc.searchHints;
|
|
92
|
+
if (doc.hints !== undefined)
|
|
93
|
+
entry.hints = doc.hints;
|
|
94
|
+
if (doc.quality !== undefined)
|
|
95
|
+
entry.quality = doc.quality;
|
|
96
|
+
if (doc.confidence !== undefined)
|
|
97
|
+
entry.confidence = doc.confidence;
|
|
98
|
+
if (doc.beliefState !== undefined)
|
|
99
|
+
entry.beliefState = doc.beliefState;
|
|
100
|
+
if (doc.currentBeliefRefs !== undefined)
|
|
101
|
+
entry.currentBeliefRefs = doc.currentBeliefRefs;
|
|
102
|
+
if (doc.scope !== undefined)
|
|
103
|
+
entry.scope = doc.scope;
|
|
104
|
+
if (doc.captureMode !== undefined)
|
|
105
|
+
entry.captureMode = doc.captureMode;
|
|
106
|
+
if (doc.lessonStrength !== undefined)
|
|
107
|
+
entry.lessonStrength = doc.lessonStrength;
|
|
108
|
+
if (doc.derivedFrom !== undefined)
|
|
109
|
+
entry.derivedFrom = doc.derivedFrom;
|
|
110
|
+
if (doc.pinned !== undefined)
|
|
111
|
+
entry.pinned = doc.pinned;
|
|
112
|
+
// ── documentJson-carried extras (DOCUMENT_JSON_CARRIED_FIELDS) ──
|
|
113
|
+
// The `renderer` key on documentJson is adapter-internal (WI-C presentation),
|
|
114
|
+
// NOT a IndexDocument field — deliberately not restored.
|
|
115
|
+
assignStringList(entry, "examples", dj.examples);
|
|
116
|
+
assignStringList(entry, "usage", dj.usage);
|
|
117
|
+
if (isIntent(dj.intent))
|
|
118
|
+
entry.intent = dj.intent;
|
|
119
|
+
assignStringList(entry, "xrefs", dj.xrefs);
|
|
120
|
+
assignString(entry, "pageKind", dj.pageKind);
|
|
121
|
+
assignString(entry, "whenToUse", dj.whenToUse);
|
|
122
|
+
if (dj.toc !== undefined)
|
|
123
|
+
entry.toc = dj.toc;
|
|
124
|
+
if (dj.parameters !== undefined)
|
|
125
|
+
entry.parameters = dj.parameters;
|
|
126
|
+
assignString(entry, "bodyOpening", dj.bodyOpening);
|
|
127
|
+
if (dj.source !== undefined)
|
|
128
|
+
entry.source = dj.source;
|
|
129
|
+
assignString(entry, "category", dj.category);
|
|
130
|
+
assignStringList(entry, "supersededBy", dj.supersededBy);
|
|
131
|
+
assignStringList(entry, "contradictedBy", dj.contradictedBy);
|
|
132
|
+
assignString(entry, "run", dj.run);
|
|
133
|
+
assignString(entry, "setup", dj.setup);
|
|
134
|
+
assignString(entry, "cwd", dj.cwd);
|
|
135
|
+
if (dj.wikiRole !== undefined)
|
|
136
|
+
entry.wikiRole = dj.wikiRole;
|
|
137
|
+
assignStringList(entry, "sources", dj.sources);
|
|
138
|
+
if (typeof dj.generation === "number")
|
|
139
|
+
entry.generation = dj.generation;
|
|
140
|
+
assignStringList(entry, "evidenceSources", dj.evidenceSources);
|
|
141
|
+
// D2 (#730): OKF v0.2 provenance promoteProposal stamps onto AKM-native
|
|
142
|
+
// writes, carried via DOCUMENT_JSON_CARRIED_FIELDS (akm-adapter.ts) —
|
|
143
|
+
// unpacked back to a first-class member here exactly like `sources`/
|
|
144
|
+
// `generation`/`evidenceSources` above, so it round-trips to the top level
|
|
145
|
+
// of the persisted entry rather than staying nested under `documentJson`.
|
|
146
|
+
if (dj.provenance !== undefined)
|
|
147
|
+
entry.provenance = dj.provenance;
|
|
148
|
+
return entry;
|
|
149
|
+
}
|
|
150
|
+
function assignStringList(entry, key, value) {
|
|
151
|
+
if (Array.isArray(value))
|
|
152
|
+
entry[key] = value;
|
|
153
|
+
}
|
|
154
|
+
function assignString(entry, key, value) {
|
|
155
|
+
if (typeof value === "string")
|
|
156
|
+
entry[key] = value;
|
|
157
|
+
}
|
|
158
|
+
function isIntent(value) {
|
|
159
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
160
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
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
|
+
* Per-directory document drain — akm 0.9.0 Chunk 5, milestone F4a M-core-2 (the
|
|
6
|
+
* engine swap). Replaces the live indexer's per-dir flat-walk matcher-pass
|
|
7
|
+
* `IndexDocument` stream with the `akm` adapter's `recognize` `IndexDocument`
|
|
8
|
+
* stream, reconstructing the durable `IndexDocument` via {@link
|
|
9
|
+
* indexDocumentToStashEntry} (proven lossless by the shadow-parity gate).
|
|
10
|
+
*
|
|
11
|
+
* Two behaviors the adapter fold does NOT carry, restored here at the drain
|
|
12
|
+
* layer (spec §14.2 "drain the full document stream"):
|
|
13
|
+
*
|
|
14
|
+
* - **Broken-workflow drop (item 3).** The live path dropped a broken workflow
|
|
15
|
+
* via the renderer contributor's throw → metadata-pass skip-with-warning; the
|
|
16
|
+
* `akm` adapter's synchronous `foldRecognizedMetadata` SWALLOWS the parse
|
|
17
|
+
* error, so a broken workflow would otherwise silently index. We re-run
|
|
18
|
+
* `parseWorkflow` on drained workflow docs and DROP
|
|
19
|
+
* the entry with the same `Skipped workflow …` warning
|
|
20
|
+
* ({@link buildMetadataSkipWarning}), so the workflow-skip summary counts it.
|
|
21
|
+
* - **Workflow-document side-table (workflow-md only).** The valid parsed
|
|
22
|
+
* `WorkflowDocument` is handed to the persist layer through the same
|
|
23
|
+
* `document-cache` side channel the live renderer contributor used, keyed by
|
|
24
|
+
* the reconstructed entry — so `takeWorkflowDocument(entry)` in the persist
|
|
25
|
+
* loop writes the `workflow_documents` row exactly as before.
|
|
26
|
+
*
|
|
27
|
+
* `doc.hash` (= sha256 of the file content) is surfaced per recognized file so
|
|
28
|
+
* the persist layer can populate the `content_hash` column (item 2). It is keyed
|
|
29
|
+
* by the file's absolute path rather than by the entry object.
|
|
30
|
+
*
|
|
31
|
+
* Pure of DB/global state beyond the workflow-document side channel; a new leaf
|
|
32
|
+
* (nothing imports it back), so it joins no import cycle.
|
|
33
|
+
*/
|
|
34
|
+
import { akmAdapter } from "../../core/adapter/adapters/akm-adapter.js";
|
|
35
|
+
import { parseWorkflow } from "../../workflows/parser.js";
|
|
36
|
+
import { cacheWorkflowDocument } from "../../workflows/runtime/document-cache.js";
|
|
37
|
+
import { buildMetadataSkipWarning } from "../passes/metadata.js";
|
|
38
|
+
import { buildFileContext } from "../walk/file-context.js";
|
|
39
|
+
import { indexDocumentToStashEntry } from "./doc-to-entry.js";
|
|
40
|
+
/** The markdown-workflow renderer name the `akm` adapter carries on `documentJson.renderer`. */
|
|
41
|
+
const WORKFLOW_MD_RENDERER = "workflow-md";
|
|
42
|
+
/**
|
|
43
|
+
* Drain one directory's recognized documents into durable entries.
|
|
44
|
+
*
|
|
45
|
+
* `fileContexts` are the dir's walked files (the drain no longer pre-filters —
|
|
46
|
+
* adapter-owned filtering, owner ruling 2026-07-21). `adapter.recognize` returns
|
|
47
|
+
* `null` for a file it abstains on (no matcher claims it, an OKF reserved file,
|
|
48
|
+
* or an AKM sensitive/infra file) — silently skipped, the same contract the
|
|
49
|
+
* legacy flat-walk pass's "no matcher claims the file" case had.
|
|
50
|
+
*/
|
|
51
|
+
export function drainDirDocuments(adapter, component, fileContexts) {
|
|
52
|
+
const entries = [];
|
|
53
|
+
const warnings = [];
|
|
54
|
+
const hashByFile = new Map();
|
|
55
|
+
const conceptIdByFile = new Map();
|
|
56
|
+
for (const file of fileContexts) {
|
|
57
|
+
const doc = adapter.recognize(component, file);
|
|
58
|
+
if (doc === null)
|
|
59
|
+
continue;
|
|
60
|
+
if (!doc.conceptId) {
|
|
61
|
+
warnings.push(`Skipped ${file.absPath}: adapter "${adapter.id}" returned no conceptId.`);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const entry = indexDocumentToStashEntry(doc);
|
|
65
|
+
// Workflow docs: drop-with-warning if broken; otherwise cache the parsed
|
|
66
|
+
// markdown document for the persist-time `workflow_documents` write.
|
|
67
|
+
const dropWarning = handleWorkflowDoc(doc, entry, file);
|
|
68
|
+
if (dropWarning !== null) {
|
|
69
|
+
warnings.push(dropWarning);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (doc.hash !== undefined)
|
|
73
|
+
hashByFile.set(file.absPath, doc.hash);
|
|
74
|
+
conceptIdByFile.set(file.absPath, doc.conceptId);
|
|
75
|
+
entries.push(entry);
|
|
76
|
+
}
|
|
77
|
+
return { entries, warnings, hashByFile, conceptIdByFile };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* `(stashRoot, files) → StashFile` drop-in for the deleted flat-walk matcher
|
|
81
|
+
* pass (F4a M-core-3): builds a FileContext per file and drains them through the
|
|
82
|
+
* `akm` adapter's `recognize`. The recognize engine is the proven-equal
|
|
83
|
+
* replacement for the old matcher-pass metadata assembly (shadow-parity gate), so
|
|
84
|
+
* callers that only need the recognized entries (`manifest`'s no-index fallback,
|
|
85
|
+
* the `registry` static-index builder, and the metadata unit tests) get identical
|
|
86
|
+
* entries — plus the D-R6 reserved-file exclusion and the AKM sensitive/infra
|
|
87
|
+
* abstention the adapter now enforces itself. Provenance is not persisted by these
|
|
88
|
+
* callers, so the synthetic component id is immaterial.
|
|
89
|
+
*/
|
|
90
|
+
export function recognizeStashEntries(stashRoot, files) {
|
|
91
|
+
const component = { id: stashRoot, adapter: "akm", root: stashRoot, writable: false };
|
|
92
|
+
// No pre-filter: the `akm` adapter's `recognize` claims/abstains per file
|
|
93
|
+
// (owner ruling 2026-07-21 — adapter-owned filtering).
|
|
94
|
+
const contexts = files.map((file) => buildFileContext(stashRoot, file));
|
|
95
|
+
const drained = drainDirDocuments(akmAdapter, component, contexts);
|
|
96
|
+
return drained.warnings.length > 0
|
|
97
|
+
? { entries: drained.entries, warnings: drained.warnings }
|
|
98
|
+
: { entries: drained.entries };
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* If `doc` is a workflow, re-parse it: return a `Skipped workflow …` drop
|
|
102
|
+
* warning when it is broken, or cache the parsed markdown `WorkflowDocument`
|
|
103
|
+
* (workflow-md only) and return `null` when valid. Non-workflow docs return
|
|
104
|
+
* `null` immediately.
|
|
105
|
+
*/
|
|
106
|
+
function handleWorkflowDoc(doc, entry, file) {
|
|
107
|
+
if (docRenderer(doc) !== WORKFLOW_MD_RENDERER)
|
|
108
|
+
return null;
|
|
109
|
+
const result = parseWorkflow(file.content(), { path: file.relPath });
|
|
110
|
+
if (!result.ok)
|
|
111
|
+
return workflowDropWarning(file, result.errors);
|
|
112
|
+
cacheWorkflowDocument(entry, result.document);
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
/** The winning renderer name the `akm` adapter carries on `documentJson.renderer`, or `undefined`. */
|
|
116
|
+
function docRenderer(doc) {
|
|
117
|
+
const dj = doc.documentJson;
|
|
118
|
+
if (dj !== null && typeof dj === "object" && "renderer" in dj) {
|
|
119
|
+
const renderer = dj.renderer;
|
|
120
|
+
return typeof renderer === "string" ? renderer : undefined;
|
|
121
|
+
}
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Build the `Skipped workflow <path>:\n…` warning byte-for-byte the way the live
|
|
126
|
+
* pipeline did: the workflow parser's `path:line — message` summary wrapped in
|
|
127
|
+
* the `Workflow has errors:` prefix (the string `loadDocument`/`loadProgram`
|
|
128
|
+
* threw), then {@link buildMetadataSkipWarning}'s workflow branch. `startsWith
|
|
129
|
+
* "Skipped workflow "` so `isWorkflowSkipWarning` counts it for the summary.
|
|
130
|
+
*/
|
|
131
|
+
function workflowDropWarning(file, errors) {
|
|
132
|
+
const summary = errors.map((e) => `${file.relPath}:${e.line} — ${e.message}`).join("\n");
|
|
133
|
+
return buildMetadataSkipWarning(file.absPath, "workflow", `Workflow has errors:\n${summary}`);
|
|
134
|
+
}
|