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
|
@@ -1,316 +0,0 @@
|
|
|
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
|
-
import fs from "node:fs";
|
|
5
|
-
import path from "node:path";
|
|
6
|
-
import { buildWorkflowAction } from "../../output/renderers.js";
|
|
7
|
-
import { registerActionBuilder, registerTypeRenderer } from "./asset-registry.js";
|
|
8
|
-
function toPosix(input) {
|
|
9
|
-
return input.replace(/\\/g, "/");
|
|
10
|
-
}
|
|
11
|
-
const buildTaskAction = (ref) => `akm tasks show ${ref.replace(/^task:/, "")} -> inspect; akm tasks run <id> -> run now; akm tasks remove <id> -> unschedule`;
|
|
12
|
-
/**
|
|
13
|
-
* Recognized workflow asset extensions, in resolution-priority order.
|
|
14
|
-
* `.md` (classic linear markdown workflows — the stable contract) stays
|
|
15
|
-
* FIRST for back-compat; `.yaml`/`.yml` hold YAML workflow *programs*
|
|
16
|
-
* (redesign addendum, R1). `workflow:<name>` refs resolve against this list.
|
|
17
|
-
*/
|
|
18
|
-
export const WORKFLOW_EXTENSIONS = [".md", ".yaml", ".yml"];
|
|
19
|
-
/**
|
|
20
|
-
* Strip a recognized workflow extension (`.md`/`.yaml`/`.yml`) from a workflow
|
|
21
|
-
* asset *name* so `foo`, `foo.yaml`, `foo.yml`, and `foo.md` collapse to one
|
|
22
|
-
* canonical identity — the same collapse `workflowSpec.toCanonicalName`
|
|
23
|
-
* performs on a resolved file path. Callers that turn a `workflow:<name>` ref
|
|
24
|
-
* into run identity (the active-run guard, list/status filters) MUST route the
|
|
25
|
-
* name through this so an aliased spelling (`workflow:foo.yaml`) and the
|
|
26
|
-
* canonical `workflow:foo` cannot start or hide parallel runs of the same
|
|
27
|
-
* workflow. Names without a recognized workflow extension pass through
|
|
28
|
-
* unchanged.
|
|
29
|
-
*/
|
|
30
|
-
export function canonicalizeWorkflowName(name) {
|
|
31
|
-
const lower = name.toLowerCase();
|
|
32
|
-
for (const ext of WORKFLOW_EXTENSIONS) {
|
|
33
|
-
if (lower.endsWith(ext))
|
|
34
|
-
return name.slice(0, -ext.length);
|
|
35
|
-
}
|
|
36
|
-
return name;
|
|
37
|
-
}
|
|
38
|
-
const workflowSpec = {
|
|
39
|
-
isRelevantFile: (fileName) => WORKFLOW_EXTENSIONS.includes(path.extname(fileName).toLowerCase()),
|
|
40
|
-
toCanonicalName: (typeRoot, filePath) => {
|
|
41
|
-
const rel = toPosix(path.relative(typeRoot, filePath));
|
|
42
|
-
for (const ext of WORKFLOW_EXTENSIONS) {
|
|
43
|
-
if (rel.toLowerCase().endsWith(ext))
|
|
44
|
-
return rel.slice(0, -ext.length);
|
|
45
|
-
}
|
|
46
|
-
return rel;
|
|
47
|
-
},
|
|
48
|
-
toAssetPath: (typeRoot, name) => {
|
|
49
|
-
// Explicit extension wins (accepts refs like "release/ship.yaml").
|
|
50
|
-
const lower = name.toLowerCase();
|
|
51
|
-
for (const ext of WORKFLOW_EXTENSIONS) {
|
|
52
|
-
if (lower.endsWith(ext))
|
|
53
|
-
return path.join(typeRoot, name);
|
|
54
|
-
}
|
|
55
|
-
// Probe in priority order — `.md` first for back-compat — and fall back
|
|
56
|
-
// to the markdown path so error messages keep naming the canonical file.
|
|
57
|
-
for (const ext of WORKFLOW_EXTENSIONS) {
|
|
58
|
-
const candidate = path.join(typeRoot, `${name}${ext}`);
|
|
59
|
-
if (fs.existsSync(candidate))
|
|
60
|
-
return candidate;
|
|
61
|
-
}
|
|
62
|
-
return path.join(typeRoot, `${name}.md`);
|
|
63
|
-
},
|
|
64
|
-
};
|
|
65
|
-
const markdownSpec = {
|
|
66
|
-
isRelevantFile: (fileName) => path.extname(fileName).toLowerCase() === ".md",
|
|
67
|
-
toCanonicalName: (typeRoot, filePath) => {
|
|
68
|
-
const rel = toPosix(path.relative(typeRoot, filePath));
|
|
69
|
-
// Strip .md extension from canonical names (agent:code-reviewer, not agent:code-reviewer.md)
|
|
70
|
-
return rel.endsWith(".md") ? rel.slice(0, -3) : rel;
|
|
71
|
-
},
|
|
72
|
-
toAssetPath: (typeRoot, name) => {
|
|
73
|
-
// Accept both with and without .md extension
|
|
74
|
-
const withExt = name.endsWith(".md") ? name : `${name}.md`;
|
|
75
|
-
return path.join(typeRoot, withExt);
|
|
76
|
-
},
|
|
77
|
-
};
|
|
78
|
-
/** All recognized script extensions for the script asset type */
|
|
79
|
-
export const SCRIPT_EXTENSIONS = new Set([
|
|
80
|
-
".sh",
|
|
81
|
-
".ts",
|
|
82
|
-
".js",
|
|
83
|
-
".ps1",
|
|
84
|
-
".cmd",
|
|
85
|
-
".bat",
|
|
86
|
-
".py",
|
|
87
|
-
".rb",
|
|
88
|
-
".go",
|
|
89
|
-
".pl",
|
|
90
|
-
".php",
|
|
91
|
-
".lua",
|
|
92
|
-
".r",
|
|
93
|
-
".swift",
|
|
94
|
-
".kt",
|
|
95
|
-
".kts",
|
|
96
|
-
]);
|
|
97
|
-
const scriptSpec = {
|
|
98
|
-
isRelevantFile: (fileName) => SCRIPT_EXTENSIONS.has(path.extname(fileName).toLowerCase()),
|
|
99
|
-
toCanonicalName: (typeRoot, filePath) => toPosix(path.relative(typeRoot, filePath)),
|
|
100
|
-
toAssetPath: (typeRoot, name) => path.join(typeRoot, name),
|
|
101
|
-
};
|
|
102
|
-
const ASSET_SPECS_INTERNAL = {
|
|
103
|
-
skill: {
|
|
104
|
-
stashDir: "skills",
|
|
105
|
-
isRelevantFile: (fileName) => fileName === "SKILL.md",
|
|
106
|
-
toCanonicalName: (typeRoot, filePath) => {
|
|
107
|
-
const relDir = toPosix(path.dirname(path.relative(typeRoot, filePath)));
|
|
108
|
-
if (!relDir || relDir === ".")
|
|
109
|
-
return undefined;
|
|
110
|
-
return relDir;
|
|
111
|
-
},
|
|
112
|
-
toAssetPath: (typeRoot, name) => path.join(typeRoot, name, "SKILL.md"),
|
|
113
|
-
},
|
|
114
|
-
command: { stashDir: "commands", ...markdownSpec },
|
|
115
|
-
agent: { stashDir: "agents", ...markdownSpec },
|
|
116
|
-
knowledge: { stashDir: "knowledge", ...markdownSpec },
|
|
117
|
-
workflow: {
|
|
118
|
-
stashDir: "workflows",
|
|
119
|
-
...workflowSpec,
|
|
120
|
-
// Type-level renderer for markdown workflows; YAML programs are claimed by
|
|
121
|
-
// the dedicated `workflowProgramMatcher`, which names the
|
|
122
|
-
// "workflow-program-yaml" renderer directly on its MatchResult.
|
|
123
|
-
rendererName: "workflow-md",
|
|
124
|
-
actionBuilder: (ref) => buildWorkflowAction(ref),
|
|
125
|
-
},
|
|
126
|
-
script: { stashDir: "scripts", ...scriptSpec },
|
|
127
|
-
memory: { stashDir: "memories", ...markdownSpec },
|
|
128
|
-
// Environment assets — whole `.env` files sourced/injected wholesale. Replaced
|
|
129
|
-
// the deprecated `vault` type (removed in 0.9.0). Only key NAMES are surfaced
|
|
130
|
-
// as metadata; values and comment text are never read for indexing (comments
|
|
131
|
-
// routinely contain commented-out credentials).
|
|
132
|
-
env: {
|
|
133
|
-
stashDir: "env",
|
|
134
|
-
isRelevantFile: (fileName) => fileName === ".env" || fileName.endsWith(".env"),
|
|
135
|
-
toCanonicalName: (typeRoot, filePath) => {
|
|
136
|
-
const rel = toPosix(path.relative(typeRoot, filePath));
|
|
137
|
-
const fileName = path.basename(rel);
|
|
138
|
-
// Treat ".env" as the "default" env; "<name>.env" → "<name>"
|
|
139
|
-
if (fileName === ".env") {
|
|
140
|
-
const dir = path.dirname(rel);
|
|
141
|
-
return dir === "." || dir === "" ? "default" : `${dir}/default`;
|
|
142
|
-
}
|
|
143
|
-
const stripped = rel.endsWith(".env") ? rel.slice(0, -4) : rel;
|
|
144
|
-
return stripped;
|
|
145
|
-
},
|
|
146
|
-
toAssetPath: (typeRoot, name) => {
|
|
147
|
-
if (name === "default")
|
|
148
|
-
return path.join(typeRoot, ".env");
|
|
149
|
-
return path.join(typeRoot, name.endsWith(".env") ? name : `${name}.env`);
|
|
150
|
-
},
|
|
151
|
-
rendererName: "env-file",
|
|
152
|
-
actionBuilder: (ref) => `akm show ${ref} -> inspect key names; akm env run ${ref} -- <command> -> run with the whole .env injected (prefer --clean to minimize inherited parent env; child stdout is not redacted); akm env export ${ref} --out <file> -> write a sourceable script to a file`,
|
|
153
|
-
},
|
|
154
|
-
// Secrets — a single sensitive value used on its own for authentication (a
|
|
155
|
-
// PEM key, API token, TLS cert). Unlike `env` (a group of related .env
|
|
156
|
-
// configuration), the ENTIRE file is the one secret value — there is no safe
|
|
157
|
-
// region to parse, so only the filename is ever surfaced as metadata. The
|
|
158
|
-
// value reaches a command only via `akm secret run` (injected into a child
|
|
159
|
-
// env var) or `akm secret path` (Docker `_FILE` convention). A secret is any
|
|
160
|
-
// regular file under `secrets/` except `.lock`/`.sensitive` sidecars; the
|
|
161
|
-
// canonical name preserves the natural filename (e.g. `id_rsa`, `team/deploy.key`).
|
|
162
|
-
secret: {
|
|
163
|
-
stashDir: "secrets",
|
|
164
|
-
isRelevantFile: (fileName) => !fileName.endsWith(".lock") && !fileName.endsWith(".sensitive"),
|
|
165
|
-
toCanonicalName: (typeRoot, filePath) => toPosix(path.relative(typeRoot, filePath)),
|
|
166
|
-
toAssetPath: (typeRoot, name) => path.join(typeRoot, name),
|
|
167
|
-
rendererName: "secret-file",
|
|
168
|
-
actionBuilder: (ref) => `akm show ${ref} -> name only (value never shown); akm secret path ${ref} -> file path; akm secret run ${ref} <VAR> -- <command> -> run with value injected into $VAR`,
|
|
169
|
-
},
|
|
170
|
-
wiki: {
|
|
171
|
-
stashDir: "wikis",
|
|
172
|
-
...markdownSpec,
|
|
173
|
-
rendererName: "wiki-md",
|
|
174
|
-
actionBuilder: (ref) => `akm show ${ref} -> read the wiki page`,
|
|
175
|
-
},
|
|
176
|
-
// v1 spec §13 — `lesson` asset type. Required frontmatter fields are
|
|
177
|
-
// `description` and `when_to_use`; lint enforces both (see
|
|
178
|
-
// `src/core/lesson-lint.ts`). Lessons normally arrive as proposals via
|
|
179
|
-
// `akm distill <ref>` (§14.5) and are promoted via `akm proposal accept`,
|
|
180
|
-
// but they can also be authored directly with `akm import` /
|
|
181
|
-
// `akm remember`-style flows.
|
|
182
|
-
lesson: {
|
|
183
|
-
stashDir: "lessons",
|
|
184
|
-
...markdownSpec,
|
|
185
|
-
rendererName: "lesson-md",
|
|
186
|
-
actionBuilder: (ref) => `akm show ${ref} -> read the lesson and apply when_to_use`,
|
|
187
|
-
},
|
|
188
|
-
// Scheduled tasks. A task file pairs a cron-style schedule with a target
|
|
189
|
-
// (workflow ref, prompt, or command) that `akm tasks` registers with the
|
|
190
|
-
// OS-native scheduler (cron / launchd / schtasks). Stored as pure YAML
|
|
191
|
-
// under <stash>/tasks/<id>.yml.
|
|
192
|
-
task: {
|
|
193
|
-
stashDir: "tasks",
|
|
194
|
-
isRelevantFile: (fileName) => path.extname(fileName).toLowerCase() === ".yml",
|
|
195
|
-
toCanonicalName: (typeRoot, filePath) => {
|
|
196
|
-
const rel = toPosix(path.relative(typeRoot, filePath));
|
|
197
|
-
return rel.endsWith(".yml") ? rel.slice(0, -4) : rel;
|
|
198
|
-
},
|
|
199
|
-
toAssetPath: (typeRoot, name) => {
|
|
200
|
-
const withExt = name.endsWith(".yml") ? name : `${name}.yml`;
|
|
201
|
-
return path.join(typeRoot, withExt);
|
|
202
|
-
},
|
|
203
|
-
rendererName: "task-yaml",
|
|
204
|
-
actionBuilder: buildTaskAction,
|
|
205
|
-
},
|
|
206
|
-
// #561 — agent sessions indexed as a first-class searchable asset type.
|
|
207
|
-
// Generated (derived) markdown written by the `extract` pass to
|
|
208
|
-
// `sessions/<harness>/<session-id>.md`; carries `log_path` + `access`
|
|
209
|
-
// frontmatter so any agent can navigate into the raw session log. A plain
|
|
210
|
-
// markdown spec — the summary body is the searchable surface.
|
|
211
|
-
session: {
|
|
212
|
-
stashDir: "sessions",
|
|
213
|
-
...markdownSpec,
|
|
214
|
-
rendererName: "session-md",
|
|
215
|
-
actionBuilder: (ref) => `akm show ${ref} -> read the session summary; follow the \`access\` frontmatter to open the raw log at \`log_path\``,
|
|
216
|
-
},
|
|
217
|
-
// Durable stash-level semantic knowledge — facts about the user, team, or
|
|
218
|
-
// project (personal details, team tool stacks, coding conventions /
|
|
219
|
-
// "constitution", and stash-meta like naming conventions or the active
|
|
220
|
-
// projects list). Unlike `memory` (episodic, recency-decayed) these are
|
|
221
|
-
// mostly-static declarations meant to be reliably surfaced as context. A
|
|
222
|
-
// plain markdown spec; `category` frontmatter scopes the fact and
|
|
223
|
-
// `pinned: true` marks the small always-injected core. See
|
|
224
|
-
// docs/design/fact-asset-type.md.
|
|
225
|
-
fact: {
|
|
226
|
-
stashDir: "facts",
|
|
227
|
-
...markdownSpec,
|
|
228
|
-
rendererName: "fact-md",
|
|
229
|
-
actionBuilder: (ref) => `akm show ${ref} -> read the stash fact and apply it as durable context`,
|
|
230
|
-
},
|
|
231
|
-
};
|
|
232
|
-
export const ASSET_SPECS = ASSET_SPECS_INTERNAL;
|
|
233
|
-
/**
|
|
234
|
-
* Register a custom asset type with the akm asset system.
|
|
235
|
-
*
|
|
236
|
-
* ## Full extension registration API
|
|
237
|
-
*
|
|
238
|
-
* Providing `rendererName` and/or `actionBuilder` in the spec automatically
|
|
239
|
-
* registers the renderer and action builder so that search results and `show`
|
|
240
|
-
* output work out of the box without additional calls.
|
|
241
|
-
*
|
|
242
|
-
* ### Minimal registration (filesystem layout only)
|
|
243
|
-
* ```ts
|
|
244
|
-
* registerAssetType("widget", {
|
|
245
|
-
* stashDir: "widgets",
|
|
246
|
-
* isRelevantFile: (f) => f.endsWith(".widget"),
|
|
247
|
-
* toCanonicalName: (root, fp) => path.basename(fp, ".widget"),
|
|
248
|
-
* toAssetPath: (root, name) => path.join(root, `${name}.widget`),
|
|
249
|
-
* });
|
|
250
|
-
* ```
|
|
251
|
-
*
|
|
252
|
-
* ### Full registration (filesystem + renderer + action)
|
|
253
|
-
* ```ts
|
|
254
|
-
* registerAssetType("widget", {
|
|
255
|
-
* stashDir: "widgets",
|
|
256
|
-
* isRelevantFile: (f) => f.endsWith(".widget"),
|
|
257
|
-
* toCanonicalName: (root, fp) => path.basename(fp, ".widget"),
|
|
258
|
-
* toAssetPath: (root, name) => path.join(root, `${name}.widget`),
|
|
259
|
-
* rendererName: "widget-md", // registered via registerRenderer() separately
|
|
260
|
-
* actionBuilder: (ref) => `akm show ${ref} -> use widget`,
|
|
261
|
-
* });
|
|
262
|
-
* ```
|
|
263
|
-
*
|
|
264
|
-
* Renderer and action builder registration is handled directly via the
|
|
265
|
-
* `asset-registry` singleton — no deferred hooks or import-order concerns.
|
|
266
|
-
*/
|
|
267
|
-
export function registerAssetType(type, spec) {
|
|
268
|
-
ASSET_SPECS_INTERNAL[type] = spec;
|
|
269
|
-
TYPE_DIRS[type] = spec.stashDir;
|
|
270
|
-
// Auto-register renderer and action builder if provided in spec
|
|
271
|
-
if (spec.rendererName) {
|
|
272
|
-
registerTypeRenderer(type, spec.rendererName);
|
|
273
|
-
}
|
|
274
|
-
if (spec.actionBuilder) {
|
|
275
|
-
registerActionBuilder(type, spec.actionBuilder);
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* Remove a previously-registered asset type.
|
|
280
|
-
*
|
|
281
|
-
* Primarily used by tests for cleanup after `registerAssetType` calls so
|
|
282
|
-
* subsequent tests see a pristine type registry. Built-in types should not
|
|
283
|
-
* normally be deregistered at runtime.
|
|
284
|
-
*/
|
|
285
|
-
export function deregisterAssetType(type) {
|
|
286
|
-
delete ASSET_SPECS_INTERNAL[type];
|
|
287
|
-
delete TYPE_DIRS[type];
|
|
288
|
-
}
|
|
289
|
-
export function getAssetTypes() {
|
|
290
|
-
return Object.keys(ASSET_SPECS_INTERNAL);
|
|
291
|
-
}
|
|
292
|
-
export const TYPE_DIRS = Object.fromEntries(Object.entries(ASSET_SPECS_INTERNAL).map(([type, spec]) => [type, spec.stashDir]));
|
|
293
|
-
export function isRelevantAssetFile(assetType, fileName) {
|
|
294
|
-
return ASSET_SPECS[assetType]?.isRelevantFile(fileName) ?? false;
|
|
295
|
-
}
|
|
296
|
-
export function deriveCanonicalAssetName(assetType, typeRoot, filePath) {
|
|
297
|
-
return ASSET_SPECS[assetType]?.toCanonicalName(typeRoot, filePath);
|
|
298
|
-
}
|
|
299
|
-
export function deriveCanonicalAssetNameFromStashRoot(assetType, stashRoot, filePath) {
|
|
300
|
-
const relPath = toPosix(path.relative(stashRoot, filePath));
|
|
301
|
-
const segments = relPath.split("/").filter(Boolean);
|
|
302
|
-
const firstSegment = segments[0];
|
|
303
|
-
// When the first segment matches the canonical type dir (e.g. "agents"),
|
|
304
|
-
// use it as the type root so canonical names are relative to it.
|
|
305
|
-
// Otherwise fall back to stashRoot — this preserves the full relative path
|
|
306
|
-
// as the canonical name, which is correct for installed stashes that live
|
|
307
|
-
// under custom directories (e.g. "tools/agents/svelte-file-editor").
|
|
308
|
-
const typeRoot = firstSegment === TYPE_DIRS[assetType] ? path.join(stashRoot, firstSegment) : stashRoot;
|
|
309
|
-
return deriveCanonicalAssetName(assetType, typeRoot, filePath);
|
|
310
|
-
}
|
|
311
|
-
export function resolveAssetPathFromName(assetType, typeRoot, name) {
|
|
312
|
-
const spec = ASSET_SPECS[assetType];
|
|
313
|
-
if (!spec)
|
|
314
|
-
throw new Error(`Unknown asset type: "${assetType}"`);
|
|
315
|
-
return spec.toAssetPath(typeRoot, name);
|
|
316
|
-
}
|