akm-cli 0.9.0-rc.4 → 0.9.0-rc.6
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 +122 -26
- package/README.md +7 -7
- package/SECURITY.md +11 -10
- package/dist/akm +2 -2
- package/dist/akm-migrate-storage +2 -2
- package/dist/assets/hints/cli-hints-full.md +60 -73
- package/dist/assets/hints/cli-hints-short.md +8 -12
- package/dist/assets/improve-strategies/default.json +5 -7
- package/dist/assets/improve-strategies/frequent.json +2 -2
- package/dist/assets/improve-strategies/proactive-maintenance.json +2 -2
- package/dist/assets/improve-strategies/quick.json +1 -1
- package/dist/assets/improve-strategies/reflect-distill.json +3 -3
- package/dist/assets/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/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 +10 -11
- package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +1 -1
- package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +1 -1
- package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +1 -1
- package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +2 -2
- package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +2 -2
- package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +1 -1
- package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +2 -2
- package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +1 -1
- package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +18 -18
- package/dist/assets/stash-skeleton/facts/conventions/domains.md +8 -9
- package/dist/assets/stash-skeleton/facts/conventions/organization.md +13 -15
- package/dist/assets/tasks/core/extract.yml +2 -2
- package/dist/assets/tasks/core/improve.yml +1 -1
- package/dist/assets/templates/html/health.html +2 -3
- package/dist/cli/config-migrate.js +1328 -101
- package/dist/cli/invocation.js +255 -0
- package/dist/cli/parse-args.js +20 -83
- package/dist/cli/shared.js +15 -37
- package/dist/cli.js +18 -49
- package/dist/commands/agent/agent-dispatch.js +2 -2
- package/dist/commands/agent/contribute-cli.js +5 -4
- package/dist/commands/bundle/bundle-cli.js +68 -0
- package/dist/commands/bundle/bundle.js +219 -0
- package/dist/commands/completions.js +2 -2
- package/dist/commands/config-cli.js +6 -3
- package/dist/commands/env/env-binding.js +13 -9
- package/dist/commands/env/env-cli.js +49 -48
- package/dist/commands/env/secret-cli.js +24 -10
- package/dist/commands/events.js +2 -2
- package/dist/commands/feedback-cli.js +59 -33
- package/dist/commands/graph/graph.js +6 -4
- package/dist/commands/health/advisories.js +4 -4
- package/dist/commands/health/html-report.js +190 -593
- package/dist/commands/health/improve-metrics.js +240 -188
- package/dist/commands/health/metrics.js +9 -17
- package/dist/commands/health/report-view-model.js +509 -0
- package/dist/commands/health/surfaces.js +6 -3
- package/dist/commands/health/types-checks.js +4 -0
- package/dist/commands/health/types-improve.js +22 -0
- package/dist/commands/health/types-metrics.js +4 -0
- 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 +1 -2
- package/dist/commands/health.js +219 -161
- package/dist/commands/improve/collapse-detector.js +25 -14
- package/dist/commands/improve/consolidate/chunking.js +7 -5
- package/dist/commands/improve/consolidate.js +640 -740
- 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 +79 -49
- package/dist/commands/improve/distill/quality-gate.js +113 -35
- package/dist/commands/improve/distill-promotion-policy.js +24 -885
- package/dist/commands/improve/distill.js +565 -337
- package/dist/commands/improve/eligibility.js +75 -36
- package/dist/commands/improve/extract-cli.js +6 -6
- package/dist/commands/improve/extract-prompt.js +5 -34
- package/dist/commands/improve/extract.js +526 -357
- package/dist/commands/improve/feedback-valence.js +2 -12
- package/dist/commands/improve/improve-cli.js +11 -20
- package/dist/commands/improve/improve-result-file.js +7 -6
- package/dist/commands/improve/improve-run-types.js +4 -0
- package/dist/commands/improve/improve-strategies.js +3 -9
- package/dist/commands/improve/improve.js +822 -727
- package/dist/commands/improve/locks.js +27 -95
- package/dist/commands/improve/loop-stages.js +941 -963
- package/dist/commands/improve/memory/derived-ref.js +122 -0
- package/dist/commands/improve/memory/memory-contradiction-detect.js +35 -38
- package/dist/commands/improve/memory/memory-improve.js +24 -37
- package/dist/commands/improve/outcome-loop.js +13 -33
- package/dist/commands/improve/preparation.js +889 -691
- package/dist/commands/improve/proactive-maintenance.js +37 -9
- package/dist/commands/improve/proposal-envelope.js +31 -0
- package/dist/commands/improve/reflect.js +974 -588
- package/dist/commands/improve/run-context.js +119 -0
- package/dist/commands/improve/salience.js +8 -4
- package/dist/commands/improve/session-asset.js +7 -3
- package/dist/commands/improve/shared.js +14 -40
- package/dist/commands/improve/source-identity.js +39 -26
- package/dist/commands/improve/triage.js +20 -17
- package/dist/commands/lint/base-linter.js +288 -295
- package/dist/commands/lint/index.js +132 -19
- package/dist/commands/mv-cli.js +257 -234
- package/dist/commands/observability-cli.js +2 -1
- package/dist/commands/proposal/diff-format.js +50 -0
- package/dist/commands/proposal/drain-policies.js +0 -6
- package/dist/commands/proposal/drain.js +17 -16
- package/dist/commands/proposal/proposal-cli.js +40 -77
- package/dist/commands/proposal/proposal-types.js +56 -0
- package/dist/commands/proposal/proposal.js +39 -1
- package/dist/commands/proposal/propose.js +41 -19
- package/dist/commands/proposal/repository.js +566 -486
- package/dist/commands/proposal/validators/proposal-quality-validators.js +22 -6
- package/dist/commands/proposal/validators/proposal-validators.js +6 -5
- package/dist/commands/proposal/validators/proposals.js +5 -4
- package/dist/commands/read/curate.js +50 -28
- package/dist/commands/read/knowledge.js +25 -16
- package/dist/commands/read/remember-cli.js +12 -4
- package/dist/commands/read/search-cli.js +33 -33
- package/dist/commands/read/search.js +68 -55
- package/dist/commands/read/show.js +54 -135
- package/dist/commands/remember.js +7 -5
- package/dist/commands/sources/add-cli.js +10 -24
- package/dist/commands/sources/bundle-config-ops.js +58 -0
- package/dist/commands/sources/history.js +13 -8
- package/dist/commands/sources/info.js +10 -11
- package/dist/commands/sources/init.js +12 -21
- package/dist/commands/sources/installed-stashes.js +151 -138
- package/dist/commands/sources/schema-repair.js +5 -3
- package/dist/commands/sources/self-update.js +9 -7
- package/dist/commands/sources/source-add.js +116 -154
- package/dist/commands/sources/source-clone.js +33 -14
- package/dist/commands/sources/source-manage.js +43 -32
- package/dist/commands/sources/sources-cli.js +12 -7
- package/dist/commands/sources/stash-cli.js +12 -5
- package/dist/commands/sources/stash-skeleton.js +1 -1
- package/dist/commands/tasks/default-tasks.js +13 -13
- package/dist/commands/tasks/tasks-cli.js +3 -3
- package/dist/commands/tasks/tasks.js +71 -31
- package/dist/commands/workflow-cli.js +22 -26
- 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 +509 -0
- package/dist/core/adapter/adapters/akm-lint.js +381 -0
- package/dist/core/adapter/adapters/akm-metadata.js +416 -0
- package/dist/core/adapter/adapters/akm-task-adapter.js +150 -0
- package/dist/core/adapter/adapters/akm-workflow-adapter.js +196 -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 +117 -0
- package/dist/core/adapter/adapters/index.js +80 -0
- package/dist/core/adapter/adapters/llm-wiki-adapter.js +413 -0
- package/dist/core/adapter/adapters/okf-adapter.js +223 -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 +212 -0
- package/dist/core/adapter/adapters/website-snapshot-adapter.js +154 -0
- package/dist/core/adapter/bundle-adapter.js +4 -0
- package/dist/core/adapter/recognize-match.js +42 -0
- package/dist/core/adapter/registry.js +56 -0
- package/dist/core/adapter/types.js +4 -0
- package/dist/core/asset/asset-placement.js +229 -0
- package/dist/core/asset/asset-ref.js +107 -78
- package/dist/core/asset/asset-serialize.js +20 -0
- package/dist/core/asset/frontmatter.js +1 -1
- package/dist/core/asset/resolve-ref.js +223 -0
- package/dist/core/asset/stash-meta.js +1 -1
- package/dist/core/common.js +141 -49
- package/dist/core/config/config-io.js +0 -108
- package/dist/core/config/config-schema.js +94 -1039
- package/dist/core/config/config-sources.js +115 -36
- package/dist/core/config/config-types.js +16 -11
- package/dist/core/config/config-walker.js +4 -2
- package/dist/core/config/config.js +21 -26
- package/dist/core/config/engine-semantics.js +0 -4
- package/dist/core/config/schema/embedding.js +38 -0
- package/dist/core/config/schema/engines.js +116 -0
- package/dist/core/config/schema/feedback.js +31 -0
- package/dist/core/config/schema/improve-processes.js +395 -0
- package/dist/core/config/schema/improve.js +76 -0
- package/dist/core/config/schema/index-config.js +183 -0
- package/dist/core/config/schema/output.js +15 -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 +27 -0
- package/dist/core/config/schema/sources-bundles.js +164 -0
- package/dist/core/config/schema/workflow.js +29 -0
- package/dist/core/env-secret-ref.js +113 -8
- package/dist/core/errors.js +1 -1
- package/dist/core/events-types.js +4 -0
- package/dist/core/extra-params.js +1 -0
- package/dist/core/file-change.js +16 -0
- package/dist/core/fs-txn.js +316 -0
- package/dist/core/git-message.js +59 -0
- package/dist/core/improve-result.js +9 -1
- package/dist/core/logs-db.js +1 -1
- package/dist/core/maintenance-barrier.js +16 -0
- package/dist/core/migration-backup.js +332 -160
- package/dist/core/paths.js +3 -6
- package/dist/core/platform.js +10 -0
- package/dist/core/recognition-util.js +130 -0
- package/dist/core/redaction.js +2 -2
- package/dist/core/standards/resolve-standards-context.js +47 -64
- package/dist/core/standards/resolve-type-conventions.js +3 -3
- package/dist/core/state/migrations.js +201 -8
- package/dist/core/state-db.js +38 -2
- package/dist/core/subprocess.js +303 -0
- package/dist/core/time.js +20 -0
- package/dist/core/type-presentation.js +130 -0
- package/dist/core/write-source.js +39 -67
- package/dist/indexer/bundle-identity-guard.js +91 -0
- package/dist/indexer/db/graph-db.js +1 -1
- package/dist/indexer/db/llm-cache.js +1 -1
- package/dist/indexer/ensure-index.js +29 -9
- package/dist/indexer/graph/graph-boost.js +28 -24
- package/dist/indexer/graph/graph-extraction.js +5 -6
- package/dist/indexer/graph/graph-types.js +4 -0
- package/dist/indexer/index-written-assets.js +44 -17
- package/dist/indexer/indexer.js +289 -153
- package/dist/indexer/init.js +18 -25
- package/dist/indexer/installations.js +224 -0
- package/dist/indexer/passes/dir-staleness.js +2 -1
- package/dist/indexer/passes/memory-inference.js +8 -4
- package/dist/indexer/passes/metadata.js +96 -243
- package/dist/indexer/scan/doc-to-entry.js +123 -0
- package/dist/indexer/scan/drain-dir.js +144 -0
- package/dist/indexer/search/db-search.js +171 -99
- package/dist/indexer/search/fts-query.js +1 -1
- package/dist/indexer/search/ranking-contributors.js +57 -7
- package/dist/indexer/search/ranking-types.js +4 -0
- package/dist/indexer/search/ranking.js +31 -6
- package/dist/indexer/search/search-attribution.js +67 -0
- package/dist/indexer/search/search-hit-enrichers.js +30 -40
- package/dist/indexer/search/search-source.js +109 -52
- package/dist/indexer/search/semantic-status.js +4 -1
- package/dist/indexer/usage/unmigrated-vaults-guard.js +2 -1
- package/dist/indexer/usage/usage-events.js +72 -9
- package/dist/indexer/walk/file-context.js +1 -44
- package/dist/indexer/walk/matchers.js +16 -32
- package/dist/indexer/walk/path-resolver.js +6 -5
- package/dist/indexer/walk/walker.js +4 -2
- package/dist/integrations/agent/engine-resolution.js +22 -0
- package/dist/integrations/agent/model-aliases.js +1 -1
- package/dist/integrations/agent/prompts.js +35 -11
- package/dist/integrations/agent/spawn.js +41 -270
- package/dist/integrations/harnesses/aider/agent-builder.js +2 -2
- package/dist/integrations/harnesses/aider/index.js +2 -11
- package/dist/integrations/harnesses/amazonq/agent-builder.js +1 -9
- package/dist/integrations/harnesses/amazonq/index.js +3 -16
- package/dist/integrations/harnesses/claude/config-import.js +1 -3
- package/dist/integrations/harnesses/claude/index.js +1 -12
- package/dist/integrations/harnesses/claude/session-log.js +27 -65
- package/dist/integrations/harnesses/codex/agent-builder.js +1 -2
- package/dist/integrations/harnesses/codex/index.js +2 -12
- package/dist/integrations/harnesses/copilot/agent-builder.js +2 -3
- package/dist/integrations/harnesses/copilot/index.js +1 -12
- package/dist/integrations/harnesses/gemini/agent-builder.js +1 -3
- package/dist/integrations/harnesses/gemini/index.js +1 -12
- package/dist/integrations/harnesses/ids.js +24 -0
- package/dist/integrations/harnesses/index.js +27 -2
- package/dist/integrations/harnesses/opencode/config-import.js +1 -3
- package/dist/integrations/harnesses/opencode/index.js +1 -12
- package/dist/integrations/harnesses/opencode/session-log.js +67 -110
- package/dist/integrations/harnesses/opencode-sdk/harness.js +2 -11
- package/dist/integrations/harnesses/openhands/agent-builder.js +3 -3
- package/dist/integrations/harnesses/openhands/index.js +2 -11
- package/dist/integrations/harnesses/pi/agent-builder.js +3 -11
- package/dist/integrations/harnesses/pi/index.js +3 -15
- package/dist/integrations/harnesses/shared.js +17 -0
- package/dist/integrations/harnesses/types.js +37 -2
- package/dist/integrations/lockfile.js +36 -0
- package/dist/integrations/session-logs/index.js +21 -12
- package/dist/integrations/session-logs/provider-base.js +113 -0
- package/dist/llm/client.js +7 -5
- package/dist/llm/embedders/deterministic.js +2 -2
- package/dist/llm/embedders/remote.js +8 -4
- package/dist/llm/graph-extract.js +7 -2
- package/dist/llm/metadata-enhance.js +43 -26
- package/dist/llm/structured-call.js +15 -7
- package/dist/migrate/legacy/config-source-migration.js +223 -0
- package/dist/migrate/legacy/content-migration.js +305 -0
- package/dist/migrate/legacy/legacy-layout.js +779 -0
- package/dist/migrate/legacy/legacy-paths.js +25 -0
- package/dist/migrate/legacy/legacy-stash-json.js +72 -0
- package/dist/migrate/legacy/proposal-fs-import.js +168 -0
- package/dist/migrate/legacy/task-target-ref-migration.js +272 -0
- package/dist/migrate/legacy/three-db-cutover.js +840 -0
- package/dist/migrate/legacy/workflow-migrations-bodies.js +52 -0
- package/dist/migrate/legacy/workflow-migrations-frozen.js +21 -0
- package/dist/migrate/legacy-ref-grammar.js +209 -0
- package/dist/output/command-registry.js +27 -0
- package/dist/output/html-render.js +11 -16
- package/dist/output/renderers.js +32 -276
- package/dist/output/shapes/passthrough.js +3 -9
- package/dist/output/shapes/registry.js +12 -6
- package/dist/output/text/command-format.js +547 -0
- package/dist/output/text/helpers.js +15 -1377
- package/dist/output/text/proposal-format.js +230 -0
- package/dist/output/text/registry.js +12 -6
- package/dist/output/text/show-directives.js +107 -0
- package/dist/output/text/show-format.js +103 -0
- package/dist/output/text/workflow-format.js +345 -0
- package/dist/output/text.js +1 -3
- package/dist/registry/build-index.js +13 -17
- package/dist/registry/providers/static-index.js +2 -2
- package/dist/registry/resolve.js +4 -90
- package/dist/registry/semver.js +93 -0
- package/dist/runtime.js +90 -0
- package/dist/schemas/akm-config.json +2956 -14890
- package/dist/schemas/akm-task.json +2 -2
- package/dist/schemas/akm-workflow.json +2 -2
- package/dist/scripts/migrate-storage.js +2312 -19642
- package/dist/setup/detect.js +5 -7
- package/dist/setup/engine-config.js +2 -1
- package/dist/setup/registry-stash-loader.js +1 -1
- package/dist/setup/semantic-assets.js +12 -9
- package/dist/setup/setup.js +109 -39
- package/dist/setup/steps/connection-shared.js +120 -0
- package/dist/setup/steps/connection.js +50 -274
- package/dist/setup/steps/platforms.js +1 -0
- package/dist/setup/steps/sources.js +13 -6
- package/dist/setup/steps/stashdir.js +5 -2
- package/dist/sources/freshness.js +39 -0
- package/dist/sources/providers/git-provider.js +29 -33
- package/dist/sources/providers/git-stash.js +10 -5
- package/dist/sources/providers/provider-utils.js +40 -18
- package/dist/sources/providers/website.js +1 -1
- package/dist/sources/resolve.js +5 -5
- package/dist/sources/snapshot-fetchers/types.js +4 -0
- package/dist/sources/{website-ingest.js → snapshot-fetchers/website-ingest.js} +105 -39
- package/dist/storage/database.js +47 -3
- package/dist/storage/engines/sqlite-migrations.js +34 -16
- package/dist/storage/locations.js +1 -2
- package/dist/storage/repositories/improve-runs-repository.js +0 -20
- package/dist/storage/repositories/index-connection.js +80 -0
- package/dist/storage/repositories/index-db.js +4 -3
- package/dist/storage/repositories/index-entries-repository.js +952 -0
- package/dist/{indexer/db/entry-mapper.js → storage/repositories/index-entry-mapper.js} +15 -2
- package/dist/storage/repositories/index-entry-types.js +4 -0
- package/dist/storage/repositories/index-fts-repository.js +164 -0
- package/dist/storage/repositories/index-llm-cache-repository.js +109 -0
- package/dist/storage/repositories/index-meta-repository.js +50 -0
- package/dist/{indexer/db/schema.js → storage/repositories/index-schema.js} +241 -100
- package/dist/storage/repositories/index-sql.js +12 -0
- package/dist/storage/repositories/index-utility-repository.js +369 -0
- package/dist/storage/repositories/index-vec-repository.js +245 -0
- package/dist/storage/repositories/proposals-repository.js +41 -50
- package/dist/storage/repositories/registry-cache.js +1 -1
- package/dist/storage/repositories/workflow-runs-repository.js +17 -11
- package/dist/tasks/backends/cron.js +5 -5
- package/dist/tasks/backends/exec-utils.js +21 -0
- package/dist/tasks/backends/index.js +6 -9
- package/dist/tasks/backends/launchd.js +16 -17
- package/dist/tasks/backends/schtasks.js +33 -41
- package/dist/tasks/backends/types.js +4 -0
- package/dist/tasks/parser.js +25 -5
- package/dist/tasks/runner.js +33 -39
- package/dist/tasks/validator.js +5 -6
- package/dist/workflows/authoring/authoring.js +8 -11
- package/dist/workflows/exec/brief.js +10 -7
- package/dist/workflows/exec/report.js +261 -156
- package/dist/workflows/exec/run-workflow.js +2 -1
- package/dist/workflows/exec/step-work.js +3 -9
- package/dist/workflows/program/parser.js +4 -60
- package/dist/workflows/renderer.js +11 -60
- package/dist/workflows/runtime/checkin.js +1 -1
- package/dist/workflows/runtime/plan-classifier.js +7 -4
- package/dist/workflows/runtime/runs.js +11 -10
- 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 +27 -16
- package/dist/workflows/validate-summary.js +2 -2
- package/dist/workflows/validator.js +18 -2
- package/docs/migration/release-notes/0.9.0.md +45 -3
- package/docs/migration/v0.8-to-v0.9.md +466 -262
- package/docs/{data-and-telemetry.md → reference/data-and-telemetry.md} +61 -17
- package/package.json +10 -9
- package/schemas/akm-config.json +2956 -14890
- package/schemas/akm-task.json +2 -2
- package/schemas/akm-workflow.json +2 -2
- 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/improve-strategies/recombine-only.json +0 -23
- package/dist/assets/improve-strategies/synthesize.json +0 -17
- 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/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/commands/improve/calibration.js +0 -161
- package/dist/commands/improve/dedup.js +0 -482
- package/dist/commands/improve/hot-probation.js +0 -45
- package/dist/commands/improve/improve-auto-accept.js +0 -262
- package/dist/commands/improve/procedural.js +0 -403
- package/dist/commands/improve/recombine.js +0 -843
- 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/wiki-cli.js +0 -291
- package/dist/core/asset/asset-registry.js +0 -76
- package/dist/core/asset/asset-spec.js +0 -316
- 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 -1585
- package/dist/indexer/manifest.js +0 -170
- package/dist/indexer/passes/metadata-contributors.js +0 -31
- package/dist/integrations/harnesses/opencode-sdk/index.js +0 -25
- package/dist/output/text/wiki.js +0 -16
- package/dist/scripts/migrations/import-fs-improve-runs-to-db.js +0 -18228
- package/dist/scripts/migrations/v16-to-v17.js +0 -141
- 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 -1013
- package/dist/workflows/db.js +0 -413
- package/docs/README.md +0 -103
- 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
package/dist/tasks/runner.js
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* • prompt → `executeRunner(engine, prompt, { stdio: "captured" })`
|
|
20
20
|
* 5. Capture stdout / stderr as structured rows in logs.db (task_logs) and,
|
|
21
21
|
* transitionally, as a flat text tail at `<cacheDir>/tasks/logs/<id>/<ts>.log`
|
|
22
|
-
* (
|
|
22
|
+
* (per the #579 logs audit).
|
|
23
23
|
* 6. Write a history row to state.db task_history table.
|
|
24
24
|
*
|
|
25
25
|
* Returns a structured result so the CLI handler can shape it for `output()`
|
|
@@ -28,19 +28,19 @@
|
|
|
28
28
|
import fs from "node:fs";
|
|
29
29
|
import os from "node:os";
|
|
30
30
|
import path from "node:path";
|
|
31
|
+
import { shouldSkipUnactivatedTask } from "../core/activation-policy.js";
|
|
31
32
|
import { assertNever } from "../core/assert.js";
|
|
32
|
-
import {
|
|
33
|
-
import { resolveStashDir } from "../core/common.js";
|
|
33
|
+
import { parseRefInput } from "../core/asset/resolve-ref.js";
|
|
34
34
|
import { loadConfig } from "../core/config/config.js";
|
|
35
35
|
import { AkmError, NotFoundError, rethrowIfTestIsolationError } from "../core/errors.js";
|
|
36
36
|
import { buildTaskRunId, insertTaskLogLines, openLogsDatabase, } from "../core/logs-db.js";
|
|
37
37
|
import { getTaskLogDir } from "../core/paths.js";
|
|
38
38
|
import { withStateDb } from "../core/state-db.js";
|
|
39
|
+
import { runManagedSubprocess } from "../core/subprocess.js";
|
|
39
40
|
import { resolveEngine, resolveLlmEngineUse } from "../integrations/agent/engine-resolution.js";
|
|
40
41
|
import { resolveModel } from "../integrations/agent/model-aliases.js";
|
|
41
42
|
import { executeRunner } from "../integrations/agent/runner-dispatch.js";
|
|
42
43
|
import { chatCompletion } from "../llm/client.js";
|
|
43
|
-
import { spawn } from "../runtime.js";
|
|
44
44
|
import { resolveAssetPath } from "../sources/resolve.js";
|
|
45
45
|
import { decodeTaskHistoryMetadata, finalizeTaskHistoryAttempt, getTaskHistory, queryTaskHistory, reserveTaskHistoryAttempt, upsertTaskHistory, } from "../storage/repositories/task-history-repository.js";
|
|
46
46
|
import { startWorkflowRun } from "../workflows/runtime/runs.js";
|
|
@@ -49,7 +49,7 @@ import { parseTaskDocument } from "./parser.js";
|
|
|
49
49
|
import { resolveAkmInvocation } from "./resolve-akm-bin.js";
|
|
50
50
|
import { validateTaskId } from "./task-id.js";
|
|
51
51
|
export const INVALID_TASK_ATTEMPT_ID = "_invalid-task-id";
|
|
52
|
-
export async function runTask(id, options
|
|
52
|
+
export async function runTask(id, options) {
|
|
53
53
|
const runAgentImpl = options.runAgentImpl;
|
|
54
54
|
const startWorkflowRunImpl = options.startWorkflowRunImpl ?? startWorkflowRun;
|
|
55
55
|
const now = options.now ?? (() => new Date());
|
|
@@ -74,7 +74,7 @@ export async function runTask(id, options = {}) {
|
|
|
74
74
|
const startedAt = attempt.startedAt;
|
|
75
75
|
let failureReason = "task_load_failed";
|
|
76
76
|
try {
|
|
77
|
-
const stashDir = options.stashDir
|
|
77
|
+
const stashDir = options.stashDir;
|
|
78
78
|
const filePath = await resolveAssetPath(stashDir, "task", id);
|
|
79
79
|
const yaml = fs.readFileSync(filePath, "utf8");
|
|
80
80
|
failureReason = "task_parse_failed";
|
|
@@ -82,7 +82,7 @@ export async function runTask(id, options = {}) {
|
|
|
82
82
|
failureReason = "task_dispatch_failed";
|
|
83
83
|
const startedIso = startedAt.toISOString();
|
|
84
84
|
const logPath = resolveTaskLogPath(options.logDir, id, startedIso);
|
|
85
|
-
if (
|
|
85
|
+
if (shouldSkipUnactivatedTask({ enabled: task.enabled, scheduled: options.scheduled === true })) {
|
|
86
86
|
const finishedAt = finishAttempt(startedAt, now());
|
|
87
87
|
const disabledTarget = task.target.kind === "workflow"
|
|
88
88
|
? { kind: "workflow", ref: task.target.ref }
|
|
@@ -121,7 +121,16 @@ export async function runTask(id, options = {}) {
|
|
|
121
121
|
});
|
|
122
122
|
}
|
|
123
123
|
if (task.target.kind === "command") {
|
|
124
|
-
return await runCommandTask({
|
|
124
|
+
return await runCommandTask({
|
|
125
|
+
task,
|
|
126
|
+
logPath,
|
|
127
|
+
startedAt,
|
|
128
|
+
now,
|
|
129
|
+
historyReserved: attempt.historyReserved,
|
|
130
|
+
...(options.spawnFn ? { spawnFn: options.spawnFn } : {}),
|
|
131
|
+
...(options.setTimeoutFn ? { setTimeoutFn: options.setTimeoutFn } : {}),
|
|
132
|
+
...(options.clearTimeoutFn ? { clearTimeoutFn: options.clearTimeoutFn } : {}),
|
|
133
|
+
});
|
|
125
134
|
}
|
|
126
135
|
return await runPromptTask({
|
|
127
136
|
task,
|
|
@@ -159,44 +168,29 @@ async function runCommandTask(input) {
|
|
|
159
168
|
const header = `[akm tasks] task=${task.id} kind=command cmd=${cmd.join(" ")}`;
|
|
160
169
|
const logLines = [header];
|
|
161
170
|
const dbLines = [{ line: header }];
|
|
162
|
-
let stdout = "";
|
|
163
|
-
let stderr = "";
|
|
164
171
|
let exitCode = null;
|
|
165
172
|
try {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
173
|
+
// Managed spawn (src/core/subprocess.ts): process-GROUP kill so a timeout
|
|
174
|
+
// reaps the whole command tree (no orphans), and a SIGTERM→SIGKILL ladder
|
|
175
|
+
// so a child that ignores SIGTERM can't wedge the run forever.
|
|
176
|
+
const result = await runManagedSubprocess(spawnCmd, {
|
|
177
|
+
capture: true,
|
|
170
178
|
cwd: process.env.HOME ?? os.tmpdir(),
|
|
171
179
|
// Stamp task-runner provenance so any akm invocation in the command tree
|
|
172
180
|
// records usage events as machine traffic, not user demand (DRIFT-6).
|
|
173
181
|
// A more specific stamp already in the environment (e.g. improve's
|
|
174
182
|
// AKM_EVENT_SOURCE=improve on its child spawns) still wins in children.
|
|
175
183
|
env: { ...process.env, AKM_EVENT_SOURCE: process.env.AKM_EVENT_SOURCE ?? "task" },
|
|
184
|
+
timeoutMs,
|
|
185
|
+
...(input.spawnFn ? { spawnFn: input.spawnFn } : {}),
|
|
186
|
+
...(input.setTimeoutFn ? { setTimeoutFn: input.setTimeoutFn } : {}),
|
|
187
|
+
...(input.clearTimeoutFn ? { clearTimeoutFn: input.clearTimeoutFn } : {}),
|
|
176
188
|
});
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
try {
|
|
183
|
-
proc.kill("SIGTERM");
|
|
184
|
-
}
|
|
185
|
-
catch {
|
|
186
|
-
/* ignore */
|
|
187
|
-
}
|
|
188
|
-
}, timeoutMs);
|
|
189
|
-
}
|
|
190
|
-
const [stdoutBuf, stderrBuf] = await Promise.all([
|
|
191
|
-
new Response(proc.stdout).text(),
|
|
192
|
-
new Response(proc.stderr).text(),
|
|
193
|
-
]);
|
|
194
|
-
await proc.exited;
|
|
195
|
-
if (timer !== undefined)
|
|
196
|
-
clearTimeout(timer);
|
|
197
|
-
stdout = stdoutBuf;
|
|
198
|
-
stderr = stderrBuf;
|
|
199
|
-
exitCode = proc.exitCode ?? (timedOut ? 143 : 1);
|
|
189
|
+
// A synchronous spawn throw / exit rejection surfaces as spawn_error below.
|
|
190
|
+
if (result.spawnError)
|
|
191
|
+
throw result.spawnError;
|
|
192
|
+
const { stdout, stderr, timedOut } = result;
|
|
193
|
+
exitCode = result.exitCode ?? (timedOut ? 143 : 1);
|
|
200
194
|
if (timedOut) {
|
|
201
195
|
logLines.push(`timed_out=true timeout_ms=${timeoutMs}`);
|
|
202
196
|
dbLines.push({ level: "error", line: `timed_out=true timeout_ms=${timeoutMs}` });
|
|
@@ -255,7 +249,7 @@ async function runWorkflowTask(input) {
|
|
|
255
249
|
const { task, logPath, startedAt, now, startWorkflowRunImpl, historyReserved } = input;
|
|
256
250
|
if (task.target.kind !== "workflow")
|
|
257
251
|
throw new Error("invariant: workflow target");
|
|
258
|
-
const ref =
|
|
252
|
+
const ref = parseRefInput(task.target.ref);
|
|
259
253
|
if (ref.type !== "workflow") {
|
|
260
254
|
throw new NotFoundError(`Task "${task.id}" workflow target must be a workflow ref (got "${task.target.ref}").`, "WORKFLOW_NOT_FOUND");
|
|
261
255
|
}
|
|
@@ -448,7 +442,7 @@ async function resolvePromptText(task, stashDir) {
|
|
|
448
442
|
return fs.readFileSync(filePath, "utf8");
|
|
449
443
|
}
|
|
450
444
|
// asset
|
|
451
|
-
const ref =
|
|
445
|
+
const ref = parseRefInput(src.ref);
|
|
452
446
|
const assetPath = await resolveAssetPath(stashDir, ref.type, ref.name);
|
|
453
447
|
return fs.readFileSync(assetPath, "utf8");
|
|
454
448
|
}
|
package/dist/tasks/validator.js
CHANGED
|
@@ -16,8 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import fs from "node:fs";
|
|
18
18
|
import path from "node:path";
|
|
19
|
-
import {
|
|
20
|
-
import { resolveStashDir } from "../core/common.js";
|
|
19
|
+
import { parseRefInput } from "../core/asset/resolve-ref.js";
|
|
21
20
|
import { loadConfig } from "../core/config/config.js";
|
|
22
21
|
import { NotFoundError } from "../core/errors.js";
|
|
23
22
|
import { resolveEngine } from "../integrations/agent/engine-resolution.js";
|
|
@@ -27,8 +26,8 @@ export async function validateTaskDocument(task, options) {
|
|
|
27
26
|
// Schedule must parse and translate.
|
|
28
27
|
parseSchedule(task.schedule, options.backend);
|
|
29
28
|
if (task.target.kind === "workflow") {
|
|
30
|
-
const stashDir = options.stashDir
|
|
31
|
-
const ref =
|
|
29
|
+
const stashDir = options.stashDir;
|
|
30
|
+
const ref = parseRefInput(task.target.ref);
|
|
32
31
|
if (ref.type !== "workflow") {
|
|
33
32
|
throw new NotFoundError(`Task "${task.id}" workflow target must be a workflow ref (got "${task.target.ref}").`, "WORKFLOW_NOT_FOUND");
|
|
34
33
|
}
|
|
@@ -52,8 +51,8 @@ export async function validateTaskDocument(task, options) {
|
|
|
52
51
|
}
|
|
53
52
|
const src = task.target.source;
|
|
54
53
|
if (src.kind === "asset") {
|
|
55
|
-
const stashDir = options.stashDir
|
|
56
|
-
const ref =
|
|
54
|
+
const stashDir = options.stashDir;
|
|
55
|
+
const ref = parseRefInput(src.ref);
|
|
57
56
|
await resolveAssetPath(stashDir, ref.type, ref.name);
|
|
58
57
|
}
|
|
59
58
|
else if (src.kind === "file") {
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
import fs from "node:fs";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import workflowTemplate from "../../assets/workflows/workflow-template.md" with { type: "text" };
|
|
7
|
-
import { canonicalizeWorkflowName, WORKFLOW_EXTENSIONS } from "../../core/asset/asset-spec.js";
|
|
8
7
|
import { isWithin, resolveStashDir } from "../../core/common.js";
|
|
9
8
|
import { UsageError } from "../../core/errors.js";
|
|
9
|
+
import { canonicalizeWorkflowName, WORKFLOW_EXTENSIONS } from "../../core/recognition-util.js";
|
|
10
10
|
import { warn } from "../../core/warn.js";
|
|
11
11
|
import { compileWorkflowProgram } from "../ir/compile.js";
|
|
12
12
|
import { parseWorkflow } from "../parser.js";
|
|
@@ -83,7 +83,7 @@ export function createWorkflowAsset(input) {
|
|
|
83
83
|
const normalizedName = normalizeWorkflowName(input.name);
|
|
84
84
|
// The write target is DEFINITIVE — the canonical name plus the chosen format's
|
|
85
85
|
// extension (`.yaml`/`.yml` for a program, `.md` for markdown). We deliberately
|
|
86
|
-
// do NOT go through `
|
|
86
|
+
// do NOT go through `assetPathForName`, which PROBES existing files and
|
|
87
87
|
// would redirect a markdown create onto an existing `foo.yaml` (writing
|
|
88
88
|
// markdown into a `.yaml`). Computing the target directly makes a markdown
|
|
89
89
|
// create always write `.md`, so the finding-C cross-extension check below sees
|
|
@@ -93,10 +93,10 @@ export function createWorkflowAsset(input) {
|
|
|
93
93
|
if (!isWithin(assetPath, typeRoot)) {
|
|
94
94
|
throw new UsageError(`Resolved workflow path escapes the stash: "${normalizedName}"`, "PATH_ESCAPE_VIOLATION");
|
|
95
95
|
}
|
|
96
|
-
// Codex round-3 finding C: a `
|
|
96
|
+
// Codex round-3 finding C: a `workflows/<name>` ref is canonical across every
|
|
97
97
|
// recognized extension (`.md`/`.yaml`/`.yml`) and resolves `.md` BEFORE
|
|
98
98
|
// `.yaml`. So creating `foo.yaml` while `foo.md` exists would return the ref
|
|
99
|
-
// `
|
|
99
|
+
// `workflows/foo` that still starts the OLD markdown workflow — a silently
|
|
100
100
|
// shadowed asset. Reject creation when ANY recognized extension already holds
|
|
101
101
|
// the same canonical name, naming the existing file. A same-extension collision
|
|
102
102
|
// (the target path itself exists) keeps the classic `--force` overwrite escape;
|
|
@@ -106,7 +106,7 @@ export function createWorkflowAsset(input) {
|
|
|
106
106
|
const conflicting = existingPaths.find((p) => p !== assetPath);
|
|
107
107
|
if (conflicting !== undefined) {
|
|
108
108
|
throw new UsageError(`Workflow "${normalizedName}" already exists as ${path.relative(stashDir, conflicting)} — the ` +
|
|
109
|
-
`\`
|
|
109
|
+
`\`workflows/${normalizedName}\` ref resolves to that file, so creating this one would shadow it. ` +
|
|
110
110
|
`Remove or rename the existing file first, or create the workflow under a different name.`, "RESOURCE_ALREADY_EXISTS");
|
|
111
111
|
}
|
|
112
112
|
if (fs.existsSync(assetPath) && !input.force) {
|
|
@@ -140,7 +140,7 @@ export function createWorkflowAsset(input) {
|
|
|
140
140
|
fs.mkdirSync(path.dirname(assetPath), { recursive: true });
|
|
141
141
|
fs.writeFileSync(assetPath, content.endsWith("\n") ? content : `${content}\n`, "utf8");
|
|
142
142
|
return {
|
|
143
|
-
ref: `
|
|
143
|
+
ref: `workflows/${normalizedName}`,
|
|
144
144
|
path: assetPath,
|
|
145
145
|
stashDir,
|
|
146
146
|
};
|
|
@@ -168,7 +168,7 @@ function readWorkflowSource(source, stashDir) {
|
|
|
168
168
|
}
|
|
169
169
|
function normalizeWorkflowName(name) {
|
|
170
170
|
// Strip any recognized workflow extension (.md/.yaml/.yml) so the canonical
|
|
171
|
-
// name — and thus the `
|
|
171
|
+
// name — and thus the `workflows/<name>` ref — is extension-free regardless of
|
|
172
172
|
// how the user spelled it. The chosen format is recovered from the raw suffix
|
|
173
173
|
// by the caller (createWorkflowAsset).
|
|
174
174
|
const normalized = canonicalizeWorkflowName(name
|
|
@@ -206,7 +206,7 @@ export function formatWorkflowErrors(path, errors) {
|
|
|
206
206
|
return [heading, ...lines].join("\n");
|
|
207
207
|
}
|
|
208
208
|
/**
|
|
209
|
-
* Validate a workflow
|
|
209
|
+
* Validate a workflow filesystem path.
|
|
210
210
|
*
|
|
211
211
|
* Returns the parse result plus the source-relative path used. Throws
|
|
212
212
|
* `UsageError` only when the target cannot be located on disk; parse
|
|
@@ -214,9 +214,6 @@ export function formatWorkflowErrors(path, errors) {
|
|
|
214
214
|
* format them however they like.
|
|
215
215
|
*/
|
|
216
216
|
export function validateWorkflowSource(target) {
|
|
217
|
-
if (target.startsWith("workflow:")) {
|
|
218
|
-
throw new UsageError(`validateWorkflowSource expects a filesystem path; resolve refs to paths in the caller before invoking.`);
|
|
219
|
-
}
|
|
220
217
|
const resolved = path.resolve(target);
|
|
221
218
|
if (!fs.existsSync(resolved)) {
|
|
222
219
|
throw new UsageError(`Workflow file not found: "${target}".`);
|
|
@@ -29,17 +29,19 @@
|
|
|
29
29
|
* driven run of the same frozen plan produce byte-identical unit graphs — the
|
|
30
30
|
* invariant R4 asserts.
|
|
31
31
|
*/
|
|
32
|
-
import {
|
|
33
|
-
import { canonicalizeWorkflowName } from "../../core/asset/asset-spec.js";
|
|
32
|
+
import { parseRefInput } from "../../core/asset/resolve-ref.js";
|
|
34
33
|
import { NotFoundError, UsageError } from "../../core/errors.js";
|
|
34
|
+
import { canonicalizeWorkflowName } from "../../core/recognition-util.js";
|
|
35
35
|
import { withWorkflowRunsRepo } from "../../storage/repositories/workflow-runs-repository.js";
|
|
36
36
|
import { getCurrentWorkflowScopeKey } from "../authoring/scope-key.js";
|
|
37
37
|
import { assertRunParamsSatisfyPlan } from "../ir/params.js";
|
|
38
38
|
import { frozenStepRows, requireExecutableWorkflowPlan } from "../runtime/plan-classifier.js";
|
|
39
39
|
import { snapshotRunForDriver } from "../runtime/runs.js";
|
|
40
40
|
import { evaluateStaleUnits } from "../runtime/unit-checkin.js";
|
|
41
|
+
import { GATE_EVALUATION_PHASE } from "../runtime/unit-phases.js";
|
|
42
|
+
import { canonicalWorkflowRunRef } from "../runtime/workflow-asset-loader.js";
|
|
41
43
|
import { detectSecretShapedParams } from "./param-secrets.js";
|
|
42
|
-
import { activeGateLoop, assertJournaledRouteSelectionsValid, computeStepWorkList, evaluateRoute,
|
|
44
|
+
import { activeGateLoop, assertJournaledRouteSelectionsValid, computeStepWorkList, evaluateRoute, isWorkListFullyTerminal, recoverGateFeedback, selectUnitAttemptRow, stepOutputsFromEvidence, } from "./step-work.js";
|
|
43
45
|
const EMPTY_WORK_LIST = { isFanOut: false, reducer: null, itemCount: 0, units: [] };
|
|
44
46
|
// ── Entry point ──────────────────────────────────────────────────────────────
|
|
45
47
|
/**
|
|
@@ -460,14 +462,15 @@ export async function resolveRunId(target) {
|
|
|
460
462
|
const byId = repo.getRunById(target);
|
|
461
463
|
if (byId)
|
|
462
464
|
return byId.id;
|
|
463
|
-
|
|
465
|
+
// Run-id vs workflow-ref: a run id has no `/`; canonical workflow refs do.
|
|
466
|
+
if (!target.includes(":") && !target.includes("/")) {
|
|
464
467
|
throw new NotFoundError(`Workflow run "${target}" not found.`, "WORKFLOW_NOT_FOUND");
|
|
465
468
|
}
|
|
466
|
-
const parsed =
|
|
469
|
+
const parsed = parseRefInput(target);
|
|
467
470
|
if (parsed.type !== "workflow") {
|
|
468
|
-
throw new UsageError(`Expected a workflow run id or workflow ref (
|
|
471
|
+
throw new UsageError(`Expected a workflow run id or workflow ref (workflows/<name>), got "${target}".`);
|
|
469
472
|
}
|
|
470
|
-
const ref =
|
|
473
|
+
const ref = canonicalWorkflowRunRef(parsed.origin, canonicalizeWorkflowName(parsed.name));
|
|
471
474
|
const active = repo.getActiveRunRowForScope(ref, getCurrentWorkflowScopeKey());
|
|
472
475
|
if (!active) {
|
|
473
476
|
throw new NotFoundError(`No active workflow run for ${ref} in this scope. \`akm workflow brief\` describes an existing run and never ` +
|