akm-cli 0.9.0-rc.1 → 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 +1190 -52
- 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/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 +13 -9
- package/dist/commands/env/env-cli.js +76 -159
- 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/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 +75 -228
- 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 -855
- 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/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 -73
- 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 -58
- 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 +8 -3
- package/dist/integrations/agent/profiles.js +6 -99
- package/dist/integrations/agent/prompts.js +46 -18
- package/dist/integrations/agent/runner-dispatch.js +78 -13
- package/dist/integrations/agent/runner.js +76 -208
- package/dist/integrations/agent/spawn.js +48 -279
- package/dist/integrations/harnesses/aider/agent-builder.js +9 -8
- package/dist/integrations/harnesses/aider/index.js +2 -12
- package/dist/integrations/harnesses/amazonq/agent-builder.js +10 -16
- package/dist/integrations/harnesses/amazonq/index.js +3 -17
- package/dist/integrations/harnesses/claude/agent-builder.js +2 -3
- package/dist/integrations/harnesses/claude/config-import.js +1 -3
- package/dist/integrations/harnesses/claude/index.js +1 -14
- package/dist/integrations/harnesses/claude/session-log.js +27 -75
- package/dist/integrations/harnesses/codex/agent-builder.js +8 -7
- package/dist/integrations/harnesses/codex/index.js +2 -13
- package/dist/integrations/harnesses/copilot/agent-builder.js +9 -9
- package/dist/integrations/harnesses/copilot/index.js +1 -13
- package/dist/integrations/harnesses/gemini/agent-builder.js +8 -9
- package/dist/integrations/harnesses/gemini/index.js +1 -13
- package/dist/integrations/harnesses/ids.js +24 -0
- package/dist/integrations/harnesses/index.js +31 -33
- 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 +1 -18
- package/dist/integrations/harnesses/opencode/session-log.js +67 -125
- package/dist/integrations/harnesses/opencode-sdk/harness.js +3 -17
- package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +274 -191
- package/dist/integrations/harnesses/openhands/agent-builder.js +12 -10
- package/dist/integrations/harnesses/openhands/index.js +2 -12
- package/dist/integrations/harnesses/pi/agent-builder.js +11 -18
- package/dist/integrations/harnesses/pi/index.js +3 -16
- package/dist/integrations/harnesses/shared.js +17 -0
- package/dist/integrations/harnesses/types.js +38 -34
- package/dist/integrations/lockfile.js +211 -24
- package/dist/integrations/session-logs/index.js +24 -40
- 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 +15 -281
- 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 +8 -40
- 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 -1375
- 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 +1 -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 +68 -35
- 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/workflows/authoring/authoring.js +96 -148
- package/dist/workflows/authoring/scope-key.js +1 -1
- package/dist/workflows/cli.js +0 -20
- package/dist/workflows/concurrency-policy.js +15 -0
- package/dist/workflows/exec/brief.js +25 -59
- package/dist/workflows/exec/frozen-judge.js +47 -0
- package/dist/workflows/exec/native-executor.js +157 -94
- package/dist/workflows/exec/report.js +365 -200
- package/dist/workflows/exec/run-workflow.js +46 -40
- package/dist/workflows/exec/scheduler.js +12 -41
- package/dist/workflows/exec/step-work.js +239 -205
- package/dist/workflows/exec/workflow-engine-gate.js +67 -0
- package/dist/workflows/ir/compile.js +141 -283
- package/dist/workflows/ir/freeze.js +233 -0
- package/dist/workflows/ir/plan-hash.js +40 -5
- package/dist/workflows/ir/schema.js +537 -1
- package/dist/workflows/parser.js +878 -306
- package/dist/workflows/program/expressions.js +20 -208
- package/dist/workflows/program/schema.js +7 -10
- package/dist/workflows/renderer.js +99 -121
- package/dist/workflows/resource-limits.js +22 -0
- package/dist/workflows/runtime/checkin.js +1 -1
- package/dist/workflows/runtime/plan-classifier.js +131 -0
- package/dist/workflows/runtime/runs.js +200 -113
- package/dist/workflows/runtime/unit-checkin.js +1 -1
- package/dist/workflows/runtime/unit-phases.js +20 -0
- package/dist/workflows/runtime/workflow-asset-loader.js +235 -97
- package/dist/workflows/schema.js +1 -11
- package/dist/workflows/validate-summary.js +4 -26
- 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/{dist/schemas → schemas}/akm-workflow.json +127 -82
- 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 -316
- 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 -1414
- 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 -25
- 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/schemas/akm-config.json +0 -14225
- package/dist/scripts/migrate-storage.js +0 -13169
- package/dist/scripts/migrations/import-fs-improve-runs-to-db.js +0 -10169
- 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/authoring/workflow-program-template.yaml +0 -31
- package/dist/workflows/db.js +0 -350
- package/dist/workflows/exec/watch.js +0 -116
- package/dist/workflows/program/parser.js +0 -760
- package/dist/workflows/program/project.js +0 -105
- package/docs/data-and-telemetry.md +0 -227
- package/docs/migration/release-notes/0.9.0-beta.60.md +0 -19
- /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/registry.js +0 -0
- /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/youtube.js +0 -0
|
@@ -2,49 +2,78 @@
|
|
|
2
2
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
4
|
/**
|
|
5
|
-
* Observability command cluster — `akm log` (events
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* subcommand's args/output shape are byte-identical.
|
|
5
|
+
* Observability command cluster — `akm log` (append-only events stream).
|
|
6
|
+
* Extracted verbatim from src/cli.ts (WS6) so the God Module shrinks; the
|
|
7
|
+
* `main.subCommands.log` key and its args/output shape are byte-identical.
|
|
9
8
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* coverage` reports tag-coverage gaps from the index, and `hints` prints the
|
|
13
|
-
* embedded AGENTS.md guidance. They share no helpers with any command still
|
|
14
|
-
* inline in cli.ts, so the `loadHints` private helper and the
|
|
15
|
-
* `formatEventLine` / `EMBEDDED_HINTS*` / db-tag-set imports move with them.
|
|
9
|
+
* `log` reads the append-only state.db events stream. It shares no helpers
|
|
10
|
+
* with any command still inline in cli.ts.
|
|
16
11
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* (
|
|
22
|
-
* `
|
|
12
|
+
* 0.9.0 CLI overhaul (S3): `log` was a group with `list`/`tail` subcommands;
|
|
13
|
+
* `tail` (a foreground polling daemon) is dropped and `log` becomes a LEAF
|
|
14
|
+
* command that is today's `list` surface, unchanged (including the
|
|
15
|
+
* `--since @offset:<id>` durable cursor and --ref/--type filters). The
|
|
16
|
+
* `lessons`/`lesson` group (`coverage`, `strength`) is dropped entirely —
|
|
17
|
+
* ranking's `lessonStrength` contributor is untouched, only the CLI read
|
|
18
|
+
* surface for it goes away.
|
|
19
|
+
*
|
|
20
|
+
* The embedded agent-guide surfaces (`akm hints` and `akm help agents`) live
|
|
21
|
+
* in src/cli.ts, so their loading code is intentionally outside this module.
|
|
22
|
+
*
|
|
23
|
+
* The leaf handler's body is a plain `runWithJsonErrors(...) + output(...)`,
|
|
24
|
+
* migrated onto `defineJsonCommand`, which emits the same JSON envelope
|
|
25
|
+
* (stdout/stderr/exit-code) as the inline form.
|
|
23
26
|
*/
|
|
24
|
-
import fs from "node:fs";
|
|
25
|
-
import path from "node:path";
|
|
26
|
-
import { defineCommand } from "citty";
|
|
27
27
|
import { parsePositiveIntFlag } from "../cli/parse-args.js";
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
import { retiredCommandHint } from "../cli/retired-commands.js";
|
|
29
|
+
import { defineJsonCommand, output, parseAllFlagValues } from "../cli/shared.js";
|
|
30
|
+
import { UsageError } from "../core/errors.js";
|
|
31
|
+
import { akmEventsList } from "./log.js";
|
|
32
|
+
/**
|
|
33
|
+
* `log` flattened from a group (`log list`/`log tail`) to a leaf in 0.9 (S3).
|
|
34
|
+
* `log` declares no positional args, so citty leaves any leftover positional
|
|
35
|
+
* token in `args._` uninterpreted rather than rejecting it — meaning
|
|
36
|
+
* `akm log tail` and `akm log list` silently ran today's `log` surface
|
|
37
|
+
* instead of failing like the other removed spellings (`log tail` is the
|
|
38
|
+
* dangerous one: it used to stream/follow, so an unmigrated caller got a
|
|
39
|
+
* silent one-shot snapshot instead of an error).
|
|
40
|
+
*/
|
|
41
|
+
function rejectExtraLogPositionals(positionals) {
|
|
42
|
+
const extra = Array.isArray(positionals) ? positionals.map(String) : [];
|
|
43
|
+
if (extra.length === 0)
|
|
44
|
+
return;
|
|
45
|
+
// A retired subcommand spelling gets its replacement hint (same table the
|
|
46
|
+
// unknown-command path uses), so `akm log tail` teaches the durable-cursor
|
|
47
|
+
// polling pattern instead of a bare "takes no positional arguments".
|
|
48
|
+
const retired = extra[0] === undefined ? undefined : retiredCommandHint(["log"], extra[0]);
|
|
49
|
+
throw new UsageError(`akm log takes no positional arguments, but got ${extra.map((token) => `"${token}"`).join(" ")}. ` +
|
|
50
|
+
'"log list"/"log tail" were removed in 0.9.0 — `akm log` alone is today\'s `log list` surface.', "INVALID_FLAG_VALUE", retired);
|
|
51
|
+
}
|
|
35
52
|
// ── `akm log` ────────────────────────────────────────────────────────────────
|
|
36
|
-
// Append-only events stream surface (#204).
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
|
|
40
|
-
|
|
53
|
+
// Append-only events stream surface (#204). Reads state.db events with
|
|
54
|
+
// optional --since/--type/--ref filters.
|
|
55
|
+
//
|
|
56
|
+
// R-060: the internal output()/shape-registry command name is `log-list`
|
|
57
|
+
// (renamed from the pre-rename `events-list`, back when the command group was
|
|
58
|
+
// still called `akm events`). This string never reaches the wire —
|
|
59
|
+
// `shapeEventsOutput` (src/output/shapes/helpers.ts) builds its own envelope
|
|
60
|
+
// and never stamps a `shape` field — so the rename is a coherence-only
|
|
61
|
+
// change, not a schemaVersion bump. Kept as `log-list` (not renamed to `log`)
|
|
62
|
+
// even though the group flattened to a leaf, to avoid unrelated churn on the
|
|
63
|
+
// internal registry key.
|
|
64
|
+
export const logCommand = defineJsonCommand({
|
|
65
|
+
meta: { name: "log", description: "List events from the append-only state.db events stream" },
|
|
41
66
|
args: {
|
|
42
67
|
since: {
|
|
43
68
|
type: "string",
|
|
44
69
|
description: "ISO timestamp / epoch ms, OR `@offset:<id>` for a durable row-id cursor (resume across processes)",
|
|
45
70
|
},
|
|
46
71
|
type: { type: "string", description: "Filter by event type (add, remove, remember, feedback, ...)" },
|
|
47
|
-
ref: { type: "string", description: "Filter by asset ref (
|
|
72
|
+
ref: { type: "string", description: "Filter by asset ref ([bundle//]conceptId)" },
|
|
73
|
+
run: {
|
|
74
|
+
type: "string",
|
|
75
|
+
description: "Filter to a workflow run's events (metadata.runId), e.g. the id from `akm workflow start`",
|
|
76
|
+
},
|
|
48
77
|
"exclude-tags": {
|
|
49
78
|
type: "string",
|
|
50
79
|
description: "Exclude events matching these tags (repeatable)",
|
|
@@ -53,192 +82,25 @@ const eventsListCommand = defineJsonCommand({
|
|
|
53
82
|
type: "string",
|
|
54
83
|
description: "Only include events with ALL these tags (repeatable)",
|
|
55
84
|
},
|
|
85
|
+
limit: {
|
|
86
|
+
type: "string",
|
|
87
|
+
description: "Return only the most recent N events matching every other filter (default: unlimited)",
|
|
88
|
+
},
|
|
56
89
|
},
|
|
57
90
|
run({ args }) {
|
|
91
|
+
rejectExtraLogPositionals(args._);
|
|
58
92
|
const excludeTags = parseAllFlagValues("--exclude-tags");
|
|
59
93
|
const includeTags = parseAllFlagValues("--include-tags");
|
|
94
|
+
const limit = parsePositiveIntFlag(args.limit);
|
|
60
95
|
const result = akmEventsList({
|
|
61
96
|
since: args.since,
|
|
62
97
|
type: args.type,
|
|
63
98
|
ref: args.ref,
|
|
99
|
+
run: args.run,
|
|
64
100
|
...(excludeTags.length > 0 ? { excludeTags } : {}),
|
|
65
101
|
...(includeTags.length > 0 ? { includeTags } : {}),
|
|
102
|
+
...(limit !== undefined ? { limit } : {}),
|
|
66
103
|
});
|
|
67
|
-
output("
|
|
104
|
+
output("log-list", result);
|
|
68
105
|
},
|
|
69
106
|
});
|
|
70
|
-
const eventsTailCommand = defineCommand({
|
|
71
|
-
meta: { name: "tail", description: "Follow the append-only state.db events stream (polling)" },
|
|
72
|
-
args: {
|
|
73
|
-
since: {
|
|
74
|
-
type: "string",
|
|
75
|
-
description: "ISO timestamp / epoch ms, OR `@offset:<id>` for a durable row-id cursor (resume across processes)",
|
|
76
|
-
},
|
|
77
|
-
type: { type: "string", description: "Filter by event type" },
|
|
78
|
-
ref: { type: "string", description: "Filter by asset ref (type:name)" },
|
|
79
|
-
"interval-ms": { type: "string", description: "Polling interval in ms (default: 75)" },
|
|
80
|
-
"max-duration-ms": { type: "string", description: "Stop after this many ms (default: never)" },
|
|
81
|
-
"max-events": { type: "string", description: "Stop after observing this many events" },
|
|
82
|
-
"exclude-tags": {
|
|
83
|
-
type: "string",
|
|
84
|
-
description: "Exclude events matching these tags (repeatable)",
|
|
85
|
-
},
|
|
86
|
-
"include-tags": {
|
|
87
|
-
type: "string",
|
|
88
|
-
description: "Only include events with ALL these tags (repeatable)",
|
|
89
|
-
},
|
|
90
|
-
},
|
|
91
|
-
async run({ args }) {
|
|
92
|
-
await runWithJsonErrors(async () => {
|
|
93
|
-
const intervalMs = parsePositiveIntFlag(args["interval-ms"], "--interval-ms");
|
|
94
|
-
const maxDurationMs = parsePositiveIntFlag(args["max-duration-ms"], "--max-duration-ms");
|
|
95
|
-
const maxEvents = parsePositiveIntFlag(args["max-events"], "--max-events");
|
|
96
|
-
const mode = getOutputMode();
|
|
97
|
-
// In streaming text mode we want each event to print as soon as it
|
|
98
|
-
// arrives. The polling loop emits via `onEvent`; the final result is
|
|
99
|
-
// also rendered through the standard output() pipeline so JSON
|
|
100
|
-
// consumers always get the canonical envelope.
|
|
101
|
-
const stream = mode.format === "text" || mode.format === "jsonl";
|
|
102
|
-
const excludeTags = parseAllFlagValues("--exclude-tags");
|
|
103
|
-
const includeTags = parseAllFlagValues("--include-tags");
|
|
104
|
-
const result = await akmEventsTail({
|
|
105
|
-
since: args.since,
|
|
106
|
-
type: args.type,
|
|
107
|
-
ref: args.ref,
|
|
108
|
-
intervalMs,
|
|
109
|
-
maxDurationMs,
|
|
110
|
-
maxEvents,
|
|
111
|
-
...(excludeTags.length > 0 ? { excludeTags } : {}),
|
|
112
|
-
...(includeTags.length > 0 ? { includeTags } : {}),
|
|
113
|
-
onEvent: stream
|
|
114
|
-
? (event) => {
|
|
115
|
-
if (mode.format === "jsonl") {
|
|
116
|
-
console.log(JSON.stringify(event));
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
console.log(formatEventLine(event));
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
: undefined,
|
|
123
|
-
});
|
|
124
|
-
// Emit the canonical envelope last (JSON/YAML modes rely on this;
|
|
125
|
-
// streaming modes already printed each event but we still emit a
|
|
126
|
-
// trailer so callers can persist the resumable cursor).
|
|
127
|
-
if (!stream) {
|
|
128
|
-
output("events-tail", result);
|
|
129
|
-
}
|
|
130
|
-
else if (mode.format === "jsonl") {
|
|
131
|
-
// Final discriminated trailer row so jsonl consumers can resume.
|
|
132
|
-
const trailer = {
|
|
133
|
-
_kind: "trailer",
|
|
134
|
-
schemaVersion: 1,
|
|
135
|
-
nextOffset: result.nextOffset,
|
|
136
|
-
totalCount: result.totalCount,
|
|
137
|
-
reason: result.reason,
|
|
138
|
-
};
|
|
139
|
-
console.log(JSON.stringify(trailer));
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
// text mode: keep stdout pristine for line-oriented parsers and
|
|
143
|
-
// emit the trailer on stderr.
|
|
144
|
-
process.stderr.write(`[events-tail] reason=${result.reason} nextOffset=${result.nextOffset} total=${result.totalCount}\n`);
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
},
|
|
148
|
-
});
|
|
149
|
-
export const logCommand = defineCommand({
|
|
150
|
-
meta: {
|
|
151
|
-
name: "log",
|
|
152
|
-
description: "Read or follow the append-only state.db events stream (mutations, feedback, indexing)",
|
|
153
|
-
},
|
|
154
|
-
subCommands: {
|
|
155
|
-
list: eventsListCommand,
|
|
156
|
-
tail: eventsTailCommand,
|
|
157
|
-
},
|
|
158
|
-
});
|
|
159
|
-
// ── lessons subcommands (Phase 7A / Advantage D4c) ──────────────────────────
|
|
160
|
-
const lessonsCoverageCommand = defineJsonCommand({
|
|
161
|
-
meta: {
|
|
162
|
-
name: "coverage",
|
|
163
|
-
description: "Report tags that exist on indexed assets but are NOT yet covered by any lesson.\n\n" +
|
|
164
|
-
"Useful for spotting topics where the stash has skills/commands/scripts but no\n" +
|
|
165
|
-
"crystallized lesson — a signal that the team has tacit knowledge worth distilling.\n\n" +
|
|
166
|
-
"Default output is JSON: { uncoveredTags: string[], lessonTagCount: number, totalTagCount: number }.\n" +
|
|
167
|
-
"Pass --format text for a plain-text bulleted list.",
|
|
168
|
-
},
|
|
169
|
-
args: {},
|
|
170
|
-
run() {
|
|
171
|
-
const db = openExistingDatabase();
|
|
172
|
-
try {
|
|
173
|
-
const allTagSet = collectTagSetFromEntries(db, undefined);
|
|
174
|
-
const lessonTagSet = collectTagSetFromEntries(db, "lesson");
|
|
175
|
-
const uncovered = [];
|
|
176
|
-
for (const tag of allTagSet) {
|
|
177
|
-
if (!lessonTagSet.has(tag))
|
|
178
|
-
uncovered.push(tag);
|
|
179
|
-
}
|
|
180
|
-
uncovered.sort((a, b) => a.localeCompare(b));
|
|
181
|
-
output("lessons-coverage", {
|
|
182
|
-
ok: true,
|
|
183
|
-
uncoveredTags: uncovered,
|
|
184
|
-
lessonTagCount: lessonTagSet.size,
|
|
185
|
-
totalTagCount: allTagSet.size,
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
finally {
|
|
189
|
-
closeDatabase(db);
|
|
190
|
-
}
|
|
191
|
-
},
|
|
192
|
-
});
|
|
193
|
-
export const lessonsCommand = defineCommand({
|
|
194
|
-
meta: {
|
|
195
|
-
name: "lessons",
|
|
196
|
-
alias: "lesson",
|
|
197
|
-
description: "Lesson-asset tooling: tag-coverage gaps, strength queries.",
|
|
198
|
-
},
|
|
199
|
-
subCommands: {
|
|
200
|
-
coverage: lessonsCoverageCommand,
|
|
201
|
-
},
|
|
202
|
-
});
|
|
203
|
-
// ── `akm hints` ──────────────────────────────────────────────────────────────
|
|
204
|
-
export const hintsCommand = defineCommand({
|
|
205
|
-
meta: {
|
|
206
|
-
name: "hints",
|
|
207
|
-
description: "Print agent instructions on how to use akm, use --detail full for a complete guide",
|
|
208
|
-
},
|
|
209
|
-
args: {
|
|
210
|
-
detail: {
|
|
211
|
-
type: "string",
|
|
212
|
-
description: "Hints detail level (brief|normal|full). `brief` prints the short guide; `normal`/`full` print the complete guide.",
|
|
213
|
-
default: "normal",
|
|
214
|
-
},
|
|
215
|
-
},
|
|
216
|
-
run({ args }) {
|
|
217
|
-
return runWithJsonErrors(() => {
|
|
218
|
-
// Let the global parser validate the value so an invalid `--detail`
|
|
219
|
-
// returns the standard JSON error envelope (exit 2) rather than a raw
|
|
220
|
-
// stack trace + exit 1. `brief` → short doc; `normal`/`full` → full doc.
|
|
221
|
-
const detail = parseDetailLevel(args.detail) ?? "normal";
|
|
222
|
-
process.stdout.write(loadHints(detail === "brief" ? "brief" : "full"));
|
|
223
|
-
});
|
|
224
|
-
},
|
|
225
|
-
});
|
|
226
|
-
// ── Hints (embedded AGENTS.md) ──────────────────────────────────────────────
|
|
227
|
-
function loadHints(detail = "normal") {
|
|
228
|
-
// `brief` → the short AGENTS.md guide; `normal`/`full` → the complete guide.
|
|
229
|
-
const wantFull = detail !== "brief";
|
|
230
|
-
const filename = wantFull ? "AGENTS.full.md" : "AGENTS.md";
|
|
231
|
-
const fallback = wantFull ? EMBEDDED_HINTS_FULL : EMBEDDED_HINTS;
|
|
232
|
-
// Try reading from the docs/ directory (works in dev and when installed via npm)
|
|
233
|
-
try {
|
|
234
|
-
const docsPath = path.resolve(getDirname(import.meta.url), `../../docs/agents/${filename}`);
|
|
235
|
-
if (fs.existsSync(docsPath)) {
|
|
236
|
-
return fs.readFileSync(docsPath, "utf8");
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
catch {
|
|
240
|
-
// fall through
|
|
241
|
-
}
|
|
242
|
-
// Fallback for compiled binary — inline content
|
|
243
|
-
return fallback;
|
|
244
|
-
}
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
* Proposal diff renderers — extracted verbatim from `repository.ts`
|
|
6
|
+
* (Chunk 6 WI-6.6 decompose). Pure string functions with no repository
|
|
7
|
+
* dependency; `diffProposal` (repository.ts) is the only production caller.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Minimal unified-diff renderer. We deliberately avoid pulling a runtime
|
|
11
|
+
* dependency just for this — proposals diffs are usually small (a single
|
|
12
|
+
* lesson / skill file), so the LCS-free greedy renderer below is plenty for
|
|
13
|
+
* humans to review. The output mirrors `git diff --no-index` for the first
|
|
14
|
+
* `@@ … @@` hunk: enough to be familiar, not so detailed that we re-implement
|
|
15
|
+
* a full LCS table.
|
|
16
|
+
*/
|
|
17
|
+
export function formatUnifiedDiff(left, right, label) {
|
|
18
|
+
if (left === right)
|
|
19
|
+
return "";
|
|
20
|
+
const leftLines = left.split("\n");
|
|
21
|
+
const rightLines = right.split("\n");
|
|
22
|
+
const lines = [`--- ${label} (existing)`, `+++ ${label} (proposed)`];
|
|
23
|
+
// Pad to the longer side so alignment is one-to-one. Real diff tools use
|
|
24
|
+
// LCS to align matching runs; we don't need that fidelity for a review
|
|
25
|
+
// surface — both halves are visible regardless.
|
|
26
|
+
const max = Math.max(leftLines.length, rightLines.length);
|
|
27
|
+
lines.push(`@@ 1,${leftLines.length} 1,${rightLines.length} @@`);
|
|
28
|
+
for (let i = 0; i < max; i += 1) {
|
|
29
|
+
const l = leftLines[i];
|
|
30
|
+
const r = rightLines[i];
|
|
31
|
+
if (l === r && l !== undefined) {
|
|
32
|
+
lines.push(` ${l}`);
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (l !== undefined)
|
|
36
|
+
lines.push(`-${l}`);
|
|
37
|
+
if (r !== undefined)
|
|
38
|
+
lines.push(`+${r}`);
|
|
39
|
+
}
|
|
40
|
+
return lines.join("\n");
|
|
41
|
+
}
|
|
42
|
+
/** Render the all-additions diff for a proposal targeting a new asset. */
|
|
43
|
+
export function formatNewAssetDiff(ref, content) {
|
|
44
|
+
const lines = [`--- /dev/null`, `+++ ${ref} (proposed, new asset)`];
|
|
45
|
+
lines.push(`@@ 0,0 1,${content.split("\n").length} @@`);
|
|
46
|
+
for (const line of content.split("\n")) {
|
|
47
|
+
lines.push(`+${line}`);
|
|
48
|
+
}
|
|
49
|
+
return lines.join("\n");
|
|
50
|
+
}
|
|
@@ -47,12 +47,6 @@ export const PERSONAL_STASH = {
|
|
|
47
47
|
{ generator: "reflect", maxDiffLines: 80 },
|
|
48
48
|
// Consolidate within the diff band; mid-band lands in `defer` below.
|
|
49
49
|
{ generator: "consolidate", maxDiffLines: 200 },
|
|
50
|
-
// Recombine: accept only confirmed type:lesson proposals (promoted by the
|
|
51
|
-
// recombine confidence gate) within the diff band. type:hypothesis proposals
|
|
52
|
-
// have no matching rule here and stay pending on the audited-autonomous
|
|
53
|
-
// queue until recombine supersedes them or the 90-day TTL sweeps them —
|
|
54
|
-
// there is no manual-review rung (06-M3).
|
|
55
|
-
{ generator: "recombine", requireType: "lesson", maxDiffLines: 200 },
|
|
56
50
|
],
|
|
57
51
|
rejectEmpty: true,
|
|
58
52
|
// Mid-band consolidate, distill duplicates, and contradiction escalations are
|