akm-cli 0.9.17-alpha.3 → 0.9.17-alpha.4
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 +731 -0
- package/dist/akm +94 -196
- package/dist/cli/shared.js +6 -2
- package/dist/cli.js +22 -9
- package/dist/commands/agent/agent-dispatch.js +1 -1
- package/dist/commands/command/command-execution.js +24 -62
- package/dist/commands/feedback-cli.js +0 -1
- package/dist/commands/health/accept-rate.js +2 -2
- package/dist/commands/health/checks.js +30 -75
- package/dist/commands/health/config-skew.js +38 -0
- package/dist/commands/health/egress.js +54 -0
- package/dist/commands/health/html-report.js +0 -38
- package/dist/commands/health/improve-metrics.js +123 -562
- package/dist/commands/health/plugin-staleness.js +53 -3
- package/dist/commands/health/renderers.js +12 -4
- package/dist/commands/health/report-view-model.js +11 -106
- package/dist/commands/health/types-improve.js +4 -19
- package/dist/commands/health/windows.js +64 -73
- package/dist/commands/health.js +122 -143
- package/dist/commands/improve/consolidate/chunking.js +25 -100
- package/dist/commands/improve/consolidate/sanitize.js +54 -149
- package/dist/commands/improve/consolidate.js +538 -1075
- package/dist/commands/improve/content-hash.js +16 -24
- package/dist/commands/improve/distill/content-repair.js +18 -100
- package/dist/commands/improve/distill-guards.js +20 -81
- package/dist/commands/improve/distill-promotion-policy.js +23 -243
- package/dist/commands/improve/distill.js +608 -1075
- package/dist/commands/improve/eligibility.js +126 -400
- package/dist/commands/improve/execution.js +3 -5
- package/dist/commands/improve/extract.js +487 -1046
- package/dist/commands/improve/feedback-valence.js +0 -25
- package/dist/commands/improve/improve-cli.js +29 -166
- package/dist/commands/improve/improve-result-file.js +10 -66
- package/dist/commands/improve/improve-strategies.js +12 -7
- package/dist/commands/improve/improve-usage-report.js +18 -64
- package/dist/commands/improve/improve.js +443 -1063
- package/dist/commands/improve/ledger.js +114 -0
- package/dist/commands/improve/locks.js +2 -8
- package/dist/commands/improve/loop-stages.js +459 -1172
- package/dist/commands/improve/memory/derived-ref.js +12 -77
- package/dist/commands/improve/memory/memory-belief.js +14 -118
- package/dist/commands/improve/memory/memory-improve.js +4 -3
- package/dist/commands/improve/outcome-loop.js +28 -156
- package/dist/commands/improve/planner.js +5 -10
- package/dist/commands/improve/preparation.js +851 -2339
- package/dist/commands/improve/proactive-maintenance.js +34 -101
- package/dist/commands/improve/reflect-noise.js +104 -280
- package/dist/commands/improve/reflect.js +621 -1367
- package/dist/commands/improve/salience.js +46 -232
- package/dist/commands/improve/session-asset.js +19 -100
- package/dist/commands/improve/stage.js +323 -0
- package/dist/commands/proposal/drain.js +251 -644
- package/dist/commands/proposal/proposal-cli.js +3 -18
- package/dist/commands/proposal/proposal-types.js +20 -41
- package/dist/commands/proposal/proposal.js +1 -2
- package/dist/commands/proposal/propose.js +134 -160
- package/dist/commands/proposal/repository.js +502 -1487
- package/dist/commands/proposal/validators/proposal-quality-validators.js +71 -174
- package/dist/commands/proposal/validators/proposal-validators.js +1 -1
- package/dist/commands/proposal/validators/proposals.js +13 -89
- package/dist/commands/read/curate.js +63 -413
- package/dist/commands/read/search-cli.js +16 -33
- package/dist/commands/read/search.js +17 -23
- package/dist/commands/read/show.js +2 -13
- package/dist/commands/sources/bundle-cli.js +25 -2
- package/dist/commands/sources/bundle-config-ops.js +7 -0
- package/dist/commands/sources/dangerous-env-audit.js +1 -2
- package/dist/commands/sources/info.js +2 -11
- package/dist/commands/sources/installed-stashes.js +197 -746
- package/dist/commands/sources/schema-repair.js +98 -129
- package/dist/commands/sources/source-add.js +62 -12
- package/dist/commands/sources/stash-cli.js +1 -1
- package/dist/commands/tasks/explain.js +10 -13
- package/dist/commands/tasks/tasks-cli.js +9 -8
- package/dist/commands/tasks/tasks.js +326 -930
- package/dist/commands/tasks/validate.js +42 -21
- package/dist/commands/workflow/plan.js +22 -29
- package/dist/commands/workflow-cli.js +4 -4
- package/dist/core/adapter/adapters/akm-adapter.js +0 -1
- package/dist/core/adapter/adapters/akm-lint.js +2 -3
- package/dist/core/adapter/adapters/akm-metadata.js +11 -12
- package/dist/core/adapter/adapters/akm-workflow-adapter.js +1 -1
- package/dist/core/adapter/execution-source.js +17 -29
- package/dist/core/asset/resolve-ref.js +1 -1
- package/dist/core/bundle-id.js +42 -5
- package/dist/core/bundle-rename.js +291 -0
- package/dist/core/config/config-io.js +1 -2
- package/dist/core/config/config-schema.js +1 -33
- package/dist/core/config/config-walker.js +1 -1
- package/dist/core/config/config.js +163 -68
- package/dist/core/config/legacy-source-shape-shim.js +38 -9
- package/dist/core/config/schema/embedding.js +20 -5
- package/dist/core/config/schema/engines.js +5 -0
- package/dist/core/config/schema/execution.js +1 -1
- package/dist/core/config/schema/experimental.js +1 -1
- package/dist/core/config/schema/improve-processes.js +21 -95
- package/dist/core/config/schema/improve.js +4 -42
- package/dist/core/config/schema/scheduler.js +12 -12
- package/dist/core/config/schema/search.js +6 -22
- package/dist/core/env-secret-ref.js +0 -1
- package/dist/core/errors.js +8 -9
- package/dist/core/file-lock.js +76 -173
- package/dist/core/logs-db.js +2 -2
- package/dist/core/paths.js +0 -27
- package/dist/core/redaction.js +109 -2
- package/dist/core/run-lock.js +2 -5
- package/dist/core/spawn-env.js +1 -1
- package/dist/core/state/migrations.js +108 -61
- package/dist/core/state-db-scope.js +2 -4
- package/dist/core/state-db.js +126 -692
- package/dist/core/type-presentation.js +1 -9
- package/dist/core/write-source.js +293 -1012
- package/dist/execution/input-contract.js +1 -1
- package/dist/execution/resolved-request.js +135 -689
- package/dist/execution/source.js +63 -257
- package/dist/execution/target-ref.js +1 -1
- package/dist/indexer/bundle-identity-guard.js +2 -2
- package/dist/indexer/db/graph-db.js +106 -46
- package/dist/indexer/ensure-index.js +44 -85
- package/dist/indexer/graph/graph-extraction.js +340 -562
- package/dist/indexer/graph/graph-related.js +130 -0
- package/dist/indexer/index-rebuild-lock.js +3 -11
- package/dist/indexer/index-writer-lock.js +8 -17
- package/dist/indexer/index-written-assets.js +139 -151
- package/dist/indexer/indexer.js +524 -846
- package/dist/indexer/materialize-embeddings.js +60 -397
- package/dist/indexer/passes/memory-inference.js +81 -90
- package/dist/indexer/passes/metadata.js +132 -200
- package/dist/indexer/read-preflight.js +0 -7
- package/dist/indexer/scan/doc-to-entry.js +1 -3
- package/dist/indexer/scan/drain-dir.js +1 -1
- package/dist/indexer/search/db-search.js +181 -590
- package/dist/indexer/search/fts-query.js +30 -41
- package/dist/indexer/search/ranking.js +28 -154
- package/dist/indexer/search/search-attribution.js +12 -32
- package/dist/indexer/search/search-fields.js +11 -15
- package/dist/indexer/search/search-hit-enrichers.js +54 -85
- package/dist/indexer/search/search-source.js +1 -4
- package/dist/indexer/usage/usage-events.js +2 -7
- package/dist/integrations/agent/engine-fallback.js +23 -40
- package/dist/integrations/agent/engine-resolution.js +93 -183
- package/dist/integrations/agent/execution.js +507 -0
- package/dist/integrations/agent/model-map.js +28 -156
- package/dist/integrations/agent/request-lowering.js +66 -141
- package/dist/integrations/agent/runner-dispatch.js +143 -321
- package/dist/integrations/agent/runner.js +54 -14
- package/dist/integrations/lockfile.js +53 -101
- package/dist/llm/embedders/deterministic.js +2 -3
- package/dist/llm/embedders/profile.js +71 -0
- package/dist/llm/embedders/remote.js +10 -15
- package/dist/llm/graph-extract.js +3 -12
- package/dist/llm/index-passes.js +3 -5
- package/dist/llm/memory-infer.js +1 -2
- package/dist/llm/metadata-enhance.js +1 -2
- package/dist/llm/structured-call.js +5 -24
- package/dist/output/generic-render.js +23 -11
- package/dist/output/html-render.js +13 -10
- package/dist/output/render-registry.js +3 -32
- package/dist/output/shapes/helpers.js +2 -34
- package/dist/output/shapes/passthrough.js +1 -9
- package/dist/{indexer/search/ranking-types.js → output/text/bundle-rename.js} +4 -1
- package/dist/output/text/command-format.js +60 -23
- package/dist/output/text/helpers.js +1 -1
- package/dist/output/text/migrate.js +5 -14
- package/dist/output/text/proposal-format.js +1 -2
- package/dist/output/text/workflow-format.js +0 -32
- package/dist/output/text.js +2 -0
- package/dist/registry/factory.js +4 -19
- package/dist/registry/network.js +66 -220
- package/dist/registry/providers/index.js +0 -2
- package/dist/registry/providers/skills-sh.js +3 -14
- package/dist/registry/providers/static-index.js +24 -26
- package/dist/registry/resolve.js +55 -131
- package/dist/scripts/akm-migrate-node.js +43937 -93313
- package/dist/scripts/akm-migrate.js +43697 -93071
- package/dist/setup/registry-stash-loader.js +4 -13
- package/dist/setup/semantic-assets.js +3 -44
- package/dist/setup/setup.js +1 -1
- package/dist/setup/steps/tasks.js +25 -15
- package/dist/sources/provider-factory.js +17 -18
- package/dist/sources/providers/filesystem.js +2 -3
- package/dist/sources/providers/git-install.js +7 -1
- package/dist/sources/providers/git-provider.js +0 -3
- package/dist/sources/providers/git-stash.js +0 -17
- package/dist/sources/providers/npm.js +2 -4
- package/dist/sources/providers/provider-utils.js +5 -10
- package/dist/sources/providers/website.js +0 -2
- package/dist/sources/snapshot-fetchers/website-ingest.js +1 -1
- package/dist/sources/website-url.js +2 -2
- package/dist/storage/database.js +9 -35
- package/dist/storage/repositories/improve-ledger-repository.js +168 -0
- package/dist/storage/repositories/index-connection.js +34 -70
- package/dist/storage/repositories/index-entries-repository.js +69 -111
- package/dist/storage/repositories/index-entry-mapper.js +1 -2
- package/dist/storage/repositories/index-entry-schema.js +83 -269
- package/dist/storage/repositories/index-fts-repository.js +86 -256
- package/dist/storage/repositories/index-llm-cache-repository.js +17 -0
- package/dist/storage/repositories/index-meta-repository.js +6 -4
- package/dist/storage/repositories/index-schema.js +192 -220
- package/dist/storage/repositories/index-utility-repository.js +8 -29
- package/dist/storage/repositories/index-vec-repository.js +133 -414
- package/dist/storage/repositories/outcome-repository.js +2 -1
- package/dist/storage/repositories/proposals-repository.js +35 -0
- package/dist/storage/repositories/registry-index-cache-repository.js +100 -0
- package/dist/storage/repositories/task-history-repository.js +26 -4
- package/dist/storage/repositories/workflow-runs-repository.js +53 -244
- package/dist/storage/sqlite-migrations.js +136 -0
- package/dist/storage/sqlite-pragmas.js +11 -9
- package/dist/storage/sqlite-transaction.js +170 -0
- package/dist/storage/state-db-integrity.js +34 -27
- package/dist/tasks/activation-config.js +134 -62
- package/dist/tasks/backends/cron.js +129 -277
- package/dist/tasks/backends/exec-utils.js +2 -5
- package/dist/tasks/backends/launchd.js +125 -745
- package/dist/tasks/backends/schtasks.js +101 -620
- package/dist/tasks/prepare/prepare-support.js +5 -15
- package/dist/tasks/prepare/prepare.js +0 -2
- package/dist/tasks/resolve-akm-bin.js +20 -79
- package/dist/tasks/run/attempt-lifecycle.js +0 -1
- package/dist/tasks/scheduler-binding.js +18 -238
- package/dist/tasks/scheduler-invocation.js +52 -52
- package/dist/tasks/scheduler-lock.js +53 -0
- package/dist/tasks/scheduler-sync.js +361 -751
- package/dist/tasks/source/parse-task-source.js +160 -10
- package/dist/tasks/source/task-source-v3-frozen.js +3 -4
- package/dist/tasks/source/task-to-v4.js +2 -2
- package/dist/workflows/authoring/authoring.js +3 -12
- package/dist/workflows/compile.js +211 -0
- package/dist/workflows/concurrency-policy.js +13 -74
- package/dist/workflows/exec/child-invocation.js +3 -17
- package/dist/workflows/exec/child-workflow.js +32 -141
- package/dist/workflows/exec/dispatch-redaction.js +13 -53
- package/dist/workflows/exec/environment.js +98 -0
- package/dist/workflows/exec/exec-unit.js +33 -140
- package/dist/workflows/exec/frozen-judge.js +7 -59
- package/dist/workflows/exec/native-executor.js +82 -341
- package/dist/workflows/exec/param-secrets.js +29 -47
- package/dist/workflows/exec/run-workflow.js +154 -387
- package/dist/workflows/exec/scheduler.js +9 -36
- package/dist/workflows/exec/step-work.js +127 -430
- package/dist/workflows/exec/unit-dispatch.js +11 -63
- package/dist/workflows/exec/unit-writer.js +8 -52
- package/dist/workflows/exec/worktree.js +39 -273
- package/dist/workflows/freeze/child-output-references.js +4 -15
- package/dist/workflows/freeze/environment.js +99 -92
- package/dist/workflows/freeze/freeze.js +172 -0
- package/dist/workflows/freeze/step-values.js +19 -21
- package/dist/workflows/freeze/targets/child-workflow.js +23 -92
- package/dist/workflows/freeze/targets/command.js +10 -33
- package/dist/workflows/freeze/targets/script.js +5 -12
- package/dist/workflows/freeze/targets/shell.js +3 -6
- package/dist/workflows/freeze/targets/task.js +25 -80
- package/dist/workflows/freeze/task-bindings.js +20 -67
- package/dist/workflows/{source-ir/github-yaml.js → github-yaml.js} +88 -206
- package/dist/workflows/ir/params.js +6 -51
- package/dist/workflows/ir/plan-hash.js +2 -34
- package/dist/workflows/parser.js +140 -43
- package/dist/{commands/improve/consolidate/types.js → workflows/plan.js} +2 -1
- package/dist/workflows/renderer.js +36 -69
- package/dist/workflows/resource-limits.js +12 -120
- package/dist/workflows/runtime/agent-identity.js +8 -40
- package/dist/workflows/runtime/run-outputs.js +3 -6
- package/dist/workflows/runtime/run-plan.js +316 -0
- package/dist/workflows/runtime/runs.js +48 -200
- package/dist/workflows/runtime/workflow-asset-loader.js +24 -57
- package/dist/workflows/{source-ir/semantics.js → source-semantics.js} +16 -20
- package/dist/workflows/validate-summary.js +2 -7
- package/docs/integration/bundling-akm.md +49 -42
- package/docs/migration/README.md +1 -0
- package/docs/migration/release-notes/0.9.17.md +41 -0
- package/docs/migration/v0.9.1-to-v0.9.2.md +19 -7
- package/docs/reference/cli.md +182 -125
- package/docs/reference/configuration.md +49 -56
- package/docs/reference/data-and-telemetry.md +19 -20
- package/docs/reference/tasks.md +86 -38
- package/docs/reference/workflow-schema.md +14 -18
- package/docs/reference/workflows.md +6 -9
- package/package.json +1 -1
- package/schemas/akm-config.json +87 -406
- package/dist/commands/health/advisories.js +0 -150
- package/dist/commands/health/metrics.js +0 -329
- package/dist/commands/health/surfaces.js +0 -102
- package/dist/commands/improve/anti-collapse.js +0 -83
- package/dist/commands/improve/collapse-detector.js +0 -432
- package/dist/commands/improve/consolidate/eligibility.js +0 -48
- package/dist/commands/improve/consolidate/merge.js +0 -146
- package/dist/commands/improve/distill/promote-memory.js +0 -329
- package/dist/commands/improve/distill/quality-gate.js +0 -500
- package/dist/commands/improve/memory/memory-contradiction-detect.js +0 -291
- package/dist/commands/improve/proposal-envelope.js +0 -31
- package/dist/commands/improve/run-context.js +0 -123
- package/dist/commands/improve/shared.js +0 -21
- package/dist/commands/improve/source-identity.js +0 -28
- package/dist/commands/improve/triage.js +0 -96
- package/dist/commands/proposal/drain-policies.js +0 -151
- package/dist/commands/sources/update-transaction.js +0 -220
- package/dist/core/action-contributors.js +0 -28
- package/dist/core/config/config-version-shim.js +0 -101
- package/dist/core/config/retired-experimental-keys-shim.js +0 -62
- package/dist/core/fs-txn.js +0 -405
- package/dist/core/lexical-score.js +0 -25
- package/dist/core/maintenance-barrier.js +0 -167
- package/dist/execution/executable-identity.js +0 -105
- package/dist/execution/guarded-source.js +0 -441
- package/dist/indexer/graph/graph-boost.js +0 -427
- package/dist/indexer/graph/graph-dedup.js +0 -95
- package/dist/indexer/search/name-match.js +0 -35
- package/dist/indexer/search/ranking-contributors.js +0 -515
- package/dist/indexer/walk/project-context.js +0 -192
- package/dist/integrations/agent/execution-cascade.js +0 -566
- package/dist/integrations/agent/execution-definitions.js +0 -202
- package/dist/integrations/agent/execution-lowering.js +0 -841
- package/dist/integrations/agent/execution-preparation.js +0 -98
- package/dist/integrations/agent/inline-execution.js +0 -74
- package/dist/registry/create-provider-registry.js +0 -29
- package/dist/registry/pinned-request-helper.js +0 -247
- package/dist/registry/pinned-transport.js +0 -717
- package/dist/sources/providers/index.js +0 -14
- package/dist/storage/engines/sqlite-migrations.js +0 -271
- package/dist/storage/repositories/canaries-repository.js +0 -107
- package/dist/storage/repositories/embedding-salvage-repository.js +0 -184
- package/dist/storage/repositories/registry-cache.js +0 -113
- package/dist/tasks/scheduler-sync-preview.js +0 -52
- package/dist/workflows/freeze/resolve-steps.js +0 -86
- package/dist/workflows/freeze/source-freeze.js +0 -64
- package/dist/workflows/ir/compile.js +0 -321
- package/dist/workflows/ir/environment-v4.js +0 -330
- package/dist/workflows/ir/freeze-v4.js +0 -153
- package/dist/workflows/ir/schema-v4.js +0 -745
- package/dist/workflows/ir/schema.js +0 -354
- package/dist/workflows/program/schema.js +0 -78
- package/dist/workflows/runtime/checkin.js +0 -57
- package/dist/workflows/runtime/plan-classifier.js +0 -196
- package/dist/workflows/runtime/unit-checkin.js +0 -45
- package/dist/workflows/runtime/unit-phases.js +0 -20
- package/dist/workflows/schema.js +0 -4
- package/dist/workflows/source-ir/compile.js +0 -200
- package/dist/workflows/source-ir/program.js +0 -50
- package/dist/workflows/source-ir/result.js +0 -26
- package/dist/workflows/source-ir/schema.js +0 -786
- package/dist/workflows/source-ir/triggers.js +0 -79
- package/dist/workflows/source-ir/uses.js +0 -40
- package/dist/workflows/validator.js +0 -60
|
@@ -76,36 +76,24 @@ export const searchCommand = defineJsonCommand({
|
|
|
76
76
|
description: "Memory belief filter: all|current|historical. current keeps active memory beliefs; historical keeps contradicted/superseded/archived memory beliefs.",
|
|
77
77
|
default: "all",
|
|
78
78
|
},
|
|
79
|
-
// Declared as the POSITIVE name with `default: true` so citty's native
|
|
80
|
-
// `--no-<name>` negation (it strips a leading `--no-` from ANY token and
|
|
81
|
-
// negates the remainder BEFORE consulting the declared-args table — see
|
|
82
|
-
// node_modules/citty/dist/index.mjs) does the work, the same pattern
|
|
83
|
-
// `sync --push/--no-push` uses. A flag DECLARED as `no-project-context`
|
|
84
|
-
// can never be negated: `--no-project-context` parses as "negate
|
|
85
|
-
// `project-context`", a name nothing declared, leaving the real key at
|
|
86
|
-
// its default `false` forever (F1/A1).
|
|
87
|
-
"project-context": {
|
|
88
|
-
type: "boolean",
|
|
89
|
-
default: true,
|
|
90
|
-
description: "Automatic project-context ranking boost: assets whose name/tags/aliases match the current working " +
|
|
91
|
-
"directory's project get a small score boost, and this search's usage also feeds the scoped-utility " +
|
|
92
|
-
"ranking signal. Default: on. Use --no-project-context to disable BOTH the project-context boost and " +
|
|
93
|
-
"the scoped-utility signal for this search only.",
|
|
94
|
-
},
|
|
95
79
|
"include-sessions": {
|
|
96
80
|
type: "boolean",
|
|
97
81
|
description: "Include session assets (excluded from default search results via config.search.defaultExcludeTypes).",
|
|
98
82
|
default: false,
|
|
99
83
|
},
|
|
100
|
-
// Declared as the POSITIVE name with `default: true`
|
|
101
|
-
//
|
|
102
|
-
//
|
|
84
|
+
// Declared as the POSITIVE name with `default: true` so citty's native
|
|
85
|
+
// `--no-<name>` negation (it strips a leading `--no-` from ANY token and
|
|
86
|
+
// negates the remainder BEFORE consulting the declared-args table — see
|
|
87
|
+
// node_modules/citty/dist/index.mjs) does the work, the same pattern
|
|
88
|
+
// `sync --push/--no-push` uses. A flag DECLARED as `no-track-usage` could
|
|
89
|
+
// never be negated: `--no-track-usage` parses as "negate `track-usage`",
|
|
90
|
+
// a name nothing declared, leaving the real key at its default forever
|
|
91
|
+
// (F1/A1).
|
|
103
92
|
"track-usage": {
|
|
104
93
|
type: "boolean",
|
|
105
94
|
default: true,
|
|
106
|
-
description: "A successful search
|
|
107
|
-
"
|
|
108
|
-
"does not influence future ranking.",
|
|
95
|
+
description: "A successful search records usage-events telemetry. Default: on. Use --no-track-usage to run a " +
|
|
96
|
+
"search that records nothing.",
|
|
109
97
|
},
|
|
110
98
|
},
|
|
111
99
|
async run({ args }) {
|
|
@@ -120,7 +108,6 @@ export const searchCommand = defineJsonCommand({
|
|
|
120
108
|
const filters = parseScopeFilterFlags(filterTokens, "--filter");
|
|
121
109
|
const includeProposed = args["include-proposed"] === true;
|
|
122
110
|
const belief = parseBeliefFilterMode(typeof args.belief === "string" ? args.belief : undefined);
|
|
123
|
-
const disableProjectContext = args["project-context"] === false;
|
|
124
111
|
const skipLogging = args["track-usage"] === false;
|
|
125
112
|
const includeSessions = args["include-sessions"];
|
|
126
113
|
const assets = args.assets === true;
|
|
@@ -134,8 +121,6 @@ export const searchCommand = defineJsonCommand({
|
|
|
134
121
|
includeProposed,
|
|
135
122
|
belief,
|
|
136
123
|
includeSessions,
|
|
137
|
-
disableProjectContext,
|
|
138
|
-
disableScopedUtility: disableProjectContext,
|
|
139
124
|
skipLogging,
|
|
140
125
|
assets,
|
|
141
126
|
eventSource: resolveUsageEventSource(),
|
|
@@ -170,14 +155,13 @@ export const curateCommand = defineJsonCommand({
|
|
|
170
155
|
"one curate call.",
|
|
171
156
|
},
|
|
172
157
|
// Declared as the POSITIVE name with `default: true` — see the
|
|
173
|
-
// `
|
|
158
|
+
// `track-usage` comment on `searchCommand` above for why a flag NAME
|
|
174
159
|
// must never start with `no-`.
|
|
175
160
|
"track-usage": {
|
|
176
161
|
type: "boolean",
|
|
177
162
|
default: true,
|
|
178
|
-
description: "A successful curate
|
|
179
|
-
"
|
|
180
|
-
"influence future ranking.",
|
|
163
|
+
description: "A successful curate records usage-events telemetry for the curated items. Default: on. Use " +
|
|
164
|
+
"--no-track-usage to run a curate that records nothing.",
|
|
181
165
|
},
|
|
182
166
|
},
|
|
183
167
|
async run({ args }) {
|
|
@@ -302,14 +286,13 @@ export const showCommand = defineJsonCommand({
|
|
|
302
286
|
description: "Exact context budget in characters. Requires --context lead; mutually exclusive with --max-tokens.",
|
|
303
287
|
},
|
|
304
288
|
// Declared as the POSITIVE name with `default: true` — see the
|
|
305
|
-
// `
|
|
289
|
+
// `track-usage` comment on `searchCommand` above for why a flag NAME
|
|
306
290
|
// must never start with `no-`.
|
|
307
291
|
"track-usage": {
|
|
308
292
|
type: "boolean",
|
|
309
293
|
default: true,
|
|
310
|
-
description: "A successful show
|
|
311
|
-
"
|
|
312
|
-
"read-only show that does not influence future ranking.",
|
|
294
|
+
description: "A successful show records usage-events telemetry, including the search-selection linkage when this " +
|
|
295
|
+
"show follows a recent search. Default: on. Use --no-track-usage to run a show that records nothing.",
|
|
313
296
|
},
|
|
314
297
|
},
|
|
315
298
|
async run({ args }) {
|
|
@@ -14,22 +14,20 @@
|
|
|
14
14
|
import { getSources, loadConfig } from "../../core/config/config.js";
|
|
15
15
|
import { rethrowIfTestIsolationError, UsageError } from "../../core/errors.js";
|
|
16
16
|
import { appendEvent } from "../../core/events.js";
|
|
17
|
+
import { redactCredentialPatterns } from "../../core/redaction.js";
|
|
18
|
+
import { withStateDbTelemetry } from "../../core/state-db.js";
|
|
17
19
|
import { resolveReadSources } from "../../indexer/read-preflight.js";
|
|
18
20
|
import { searchLocal } from "../../indexer/search/db-search.js";
|
|
19
21
|
import { getSearchHitAttribution, usageEventAttributionMetadata, } from "../../indexer/search/search-attribution.js";
|
|
20
|
-
import { getEntryIdByFilePath, getItemRefById } from "../../storage/repositories/index-entries-repository.js";
|
|
21
|
-
// Eagerly import source providers to trigger self-registration before the
|
|
22
|
-
// indexer or path-resolution code runs.
|
|
23
|
-
import "../../sources/providers/index.js";
|
|
24
|
-
import { withStateDbTelemetry } from "../../core/state-db.js";
|
|
25
22
|
import { insertUsageEvent } from "../../indexer/usage/usage-events.js";
|
|
26
23
|
import { TELEMETRY_BUSY_TIMEOUT_MS, withIndexDb } from "../../storage/repositories/index-db.js";
|
|
24
|
+
import { getEntryIdByFilePath, getItemRefById } from "../../storage/repositories/index-entries-repository.js";
|
|
27
25
|
import { searchRegistry } from "./registry-search.js";
|
|
28
26
|
const DEFAULT_LIMIT = 20;
|
|
29
27
|
function duplicateConceptWarnings(hits, defaultBundle) {
|
|
30
28
|
const ownersByConcept = new Map();
|
|
31
29
|
for (const hit of hits) {
|
|
32
|
-
const displayRef =
|
|
30
|
+
const displayRef = hit.ref.split("#", 1)[0] ?? hit.ref;
|
|
33
31
|
const boundary = displayRef.indexOf("//");
|
|
34
32
|
const conceptId = boundary >= 0 ? displayRef.slice(boundary + 2) : displayRef;
|
|
35
33
|
const owner = hit.origin ?? defaultBundle ?? "working-bundle";
|
|
@@ -47,7 +45,6 @@ function duplicateConceptWarnings(hits, defaultBundle) {
|
|
|
47
45
|
export async function akmSearch(input) {
|
|
48
46
|
const t0 = Date.now();
|
|
49
47
|
const query = input.query.trim();
|
|
50
|
-
const normalizedQuery = query.toLowerCase();
|
|
51
48
|
const searchType = input.type ?? "any";
|
|
52
49
|
const limit = normalizeLimit(input.limit);
|
|
53
50
|
const parsedSource = parseSearchSource(input.source ?? "local");
|
|
@@ -110,7 +107,7 @@ export async function akmSearch(input) {
|
|
|
110
107
|
const localResult = source === "registry"
|
|
111
108
|
? undefined
|
|
112
109
|
: await searchLocal({
|
|
113
|
-
query
|
|
110
|
+
query,
|
|
114
111
|
searchType,
|
|
115
112
|
limit,
|
|
116
113
|
stashDir,
|
|
@@ -126,8 +123,6 @@ export async function akmSearch(input) {
|
|
|
126
123
|
// would leak hits from sources the caller did not request.
|
|
127
124
|
restrictToSources: namedSourceName !== undefined,
|
|
128
125
|
includeExcludedTypes: input.includeSessions === true,
|
|
129
|
-
disableProjectContext: input.disableProjectContext === true,
|
|
130
|
-
disableScopedUtility: input.disableScopedUtility === true,
|
|
131
126
|
});
|
|
132
127
|
const registryResult = source === "local"
|
|
133
128
|
? undefined
|
|
@@ -249,7 +244,13 @@ function resolveEntryIds(db, hits) {
|
|
|
249
244
|
* Per-entry events are recorded only for stash hits because registry hits
|
|
250
245
|
* have no local entry_id to reference.
|
|
251
246
|
*/
|
|
252
|
-
function logSearchEvent(
|
|
247
|
+
function logSearchEvent(rawQuery, response, mode = "keyword", eventSource = "user", attributionProjection = "full") {
|
|
248
|
+
// Credentials pasted into a query (e.g. by the Claude Code hook that
|
|
249
|
+
// curates every user prompt) must never reach state.db verbatim — see
|
|
250
|
+
// `redactCredentialPatterns`. Redacted once here so every persistence call
|
|
251
|
+
// below (events.metadata_json via appendEvent, usage_events.query via
|
|
252
|
+
// insertUsageEvent) gets the same scrubbed text.
|
|
253
|
+
const query = redactCredentialPatterns(rawQuery);
|
|
253
254
|
// Emit a structured event to events.jsonl so workflow-trace consumers
|
|
254
255
|
// detect akm search invocations without relying on stdout scraping.
|
|
255
256
|
const stashHits = response.hits.filter((h) => h.type !== "registry");
|
|
@@ -296,18 +297,11 @@ function logSearchEvent(query, response, mode = "keyword", eventSource = "user",
|
|
|
296
297
|
source: eventSource,
|
|
297
298
|
});
|
|
298
299
|
}, TELEMETRY_BUSY_TIMEOUT_MS);
|
|
299
|
-
// No live utility_scores
|
|
300
|
-
//
|
|
301
|
-
//
|
|
302
|
-
//
|
|
303
|
-
//
|
|
304
|
-
// on them. Retrieval counts are still recorded above via
|
|
305
|
-
// insertUsageEvent (search_count) and rolled into utility_scores by
|
|
306
|
-
// the offline `recomputeUtilityScores` pass (`akm index`), which uses
|
|
307
|
-
// the show/search *select rate* — a ratio that requires an actual
|
|
308
|
-
// `show`/select event, not raw impressions. Explicit signal comes
|
|
309
|
-
// from `akm feedback` (applyFeedbackToUtilityScore) and from
|
|
310
|
-
// selection (recordShowUsage / the `select` event derived from it).
|
|
300
|
+
// No live utility_scores write here (#862): a search result is an
|
|
301
|
+
// impression, not a signal that the asset was useful. Retrieval
|
|
302
|
+
// counts are recorded above via insertUsageEvent (search_count) and
|
|
303
|
+
// rolled into utility_scores by the offline `recomputeUtilityScores`
|
|
304
|
+
// pass (`akm index`).
|
|
311
305
|
}, { busyTimeoutMs: TELEMETRY_BUSY_TIMEOUT_MS });
|
|
312
306
|
}
|
|
313
307
|
catch (err) {
|
|
@@ -34,8 +34,8 @@ import { SCRIPT_EXTENSIONS } from "../../core/recognition-util.js";
|
|
|
34
34
|
import { presentationFor } from "../../core/type-presentation.js";
|
|
35
35
|
import { warn, warnOnce } from "../../core/warn.js";
|
|
36
36
|
import { hasGraphData } from "../../indexer/db/graph-db.js";
|
|
37
|
-
import { listRelatedPathsForFile } from "../../indexer/graph/graph-boost.js";
|
|
38
37
|
import { extractGraphForSingleFile } from "../../indexer/graph/graph-extraction.js";
|
|
38
|
+
import { listRelatedPathsForFile } from "../../indexer/graph/graph-related.js";
|
|
39
39
|
import { lookupBundleRef, lookupBundleRefWithResolution } from "../../indexer/indexer.js";
|
|
40
40
|
import { projectMarkdownFragmentContent } from "../../indexer/passes/metadata.js";
|
|
41
41
|
import { ensurePrimaryIndexForRead, resolveReadSources } from "../../indexer/read-preflight.js";
|
|
@@ -48,9 +48,6 @@ import { resolveStorageLocations } from "../../storage/locations.js";
|
|
|
48
48
|
import { closeDatabase, openExistingDatabase } from "../../storage/repositories/index-connection.js";
|
|
49
49
|
import { TELEMETRY_BUSY_TIMEOUT_MS, withIndexDb } from "../../storage/repositories/index-db.js";
|
|
50
50
|
import { getIndexedMarkdownFragment } from "../../storage/repositories/index-fts-repository.js";
|
|
51
|
-
import { computeBodyHash } from "../../storage/repositories/index-llm-cache-repository.js";
|
|
52
|
-
// Eagerly import source providers to trigger self-registration.
|
|
53
|
-
import "../../sources/providers/index.js";
|
|
54
51
|
import { getCurrentWorkflowScopeKey } from "../../workflows/authoring/scope-key.js";
|
|
55
52
|
import { buildWorkflowAction } from "../../workflows/renderer.js";
|
|
56
53
|
import { getActiveWorkflowRun } from "../../workflows/runtime/runs.js";
|
|
@@ -503,14 +500,6 @@ async function maybeExtractGraphInline(config, sourceStashDir, assetPath) {
|
|
|
503
500
|
};
|
|
504
501
|
reportNotices(graphExecution.notices);
|
|
505
502
|
let alreadyGraphed = false;
|
|
506
|
-
let bodyHash;
|
|
507
|
-
try {
|
|
508
|
-
const raw = fs.readFileSync(assetPath, "utf8");
|
|
509
|
-
bodyHash = computeBodyHash(parseFrontmatter(raw).content.trim());
|
|
510
|
-
}
|
|
511
|
-
catch {
|
|
512
|
-
return; // file gone/unreadable ⇒ nothing to extract
|
|
513
|
-
}
|
|
514
503
|
withIndexDb((db) => {
|
|
515
504
|
alreadyGraphed = hasGraphData(db, sourceStashDir, assetPath);
|
|
516
505
|
}, { busyTimeoutMs: TELEMETRY_BUSY_TIMEOUT_MS });
|
|
@@ -527,7 +516,7 @@ async function maybeExtractGraphInline(config, sourceStashDir, assetPath) {
|
|
|
527
516
|
});
|
|
528
517
|
try {
|
|
529
518
|
await Promise.race([
|
|
530
|
-
extractGraphForSingleFile(db, sourceStashDir, assetPath,
|
|
519
|
+
extractGraphForSingleFile(db, sourceStashDir, assetPath, {
|
|
531
520
|
config,
|
|
532
521
|
llmRunner: graphExecution.runner,
|
|
533
522
|
onNotices: reportNotices,
|
|
@@ -24,9 +24,11 @@
|
|
|
24
24
|
* `proposal-new` shape). `show` is a new shape, `bundle-show`.
|
|
25
25
|
*/
|
|
26
26
|
import { defineGroupCommand, defineJsonCommand, output } from "../../cli/shared.js";
|
|
27
|
+
import { renameBundle } from "../../core/bundle-rename.js";
|
|
27
28
|
import { NotFoundError, TransientError, UsageError } from "../../core/errors.js";
|
|
28
29
|
import { appendEvent } from "../../core/events.js";
|
|
29
30
|
import { warn } from "../../core/warn.js";
|
|
31
|
+
import { akmTasksSync } from "../tasks/tasks.js";
|
|
30
32
|
import { addCommand } from "./add-cli.js";
|
|
31
33
|
import { akmInit } from "./init.js";
|
|
32
34
|
import { akmListSources, akmRemove, akmUpdate } from "./installed-stashes.js";
|
|
@@ -182,9 +184,29 @@ const updateCommand = defineJsonCommand({
|
|
|
182
184
|
output("update", result);
|
|
183
185
|
},
|
|
184
186
|
});
|
|
187
|
+
const renameCommand = defineJsonCommand({
|
|
188
|
+
meta: {
|
|
189
|
+
name: "rename",
|
|
190
|
+
description: "Rename a configured bundle's key everywhere akm persists it (config, lock, index, and its own proposals/task history). Content inside the bundle that still spells the old ref is reported, not rewritten.",
|
|
191
|
+
},
|
|
192
|
+
args: {
|
|
193
|
+
old: { type: "positional", description: "Current bundle name", required: true },
|
|
194
|
+
new: { type: "positional", description: "New bundle name (must be a legal, unused slug)", required: true },
|
|
195
|
+
"dry-run": {
|
|
196
|
+
type: "boolean",
|
|
197
|
+
description: "Show the rename plan without writing anything",
|
|
198
|
+
default: false,
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
async run({ args }) {
|
|
202
|
+
const result = await renameBundle(args.old, args.new, { dryRun: args["dry-run"] }, {
|
|
203
|
+
syncTasks: (newId, backend) => akmTasksSync({ backend }, newId),
|
|
204
|
+
});
|
|
205
|
+
output("bundle-rename", result);
|
|
206
|
+
},
|
|
207
|
+
});
|
|
185
208
|
export function isSkippableBundleUpdateLock(error) {
|
|
186
|
-
return
|
|
187
|
-
["INDEX_DB_CONTENDED", "STATE_DB_CONTENDED", "MAINTENANCE_BARRIER_BUSY"].includes(error.code));
|
|
209
|
+
return error instanceof TransientError && ["INDEX_DB_CONTENDED", "STATE_DB_CONTENDED"].includes(error.code);
|
|
188
210
|
}
|
|
189
211
|
export const bundleCommand = defineGroupCommand({
|
|
190
212
|
meta: {
|
|
@@ -198,5 +220,6 @@ export const bundleCommand = defineGroupCommand({
|
|
|
198
220
|
show: showCommand,
|
|
199
221
|
remove: removeCommand,
|
|
200
222
|
update: updateCommand,
|
|
223
|
+
rename: renameCommand,
|
|
201
224
|
},
|
|
202
225
|
});
|
|
@@ -92,6 +92,13 @@ export function bundleKeyForUrl(config, url) {
|
|
|
92
92
|
* caller's `preferredName` when it is a legal slug, else slug the seed locator
|
|
93
93
|
* (path/url) — the shared {@link deriveBundleId} rule (D-R5), made unique against
|
|
94
94
|
* the currently-configured bundle keys.
|
|
95
|
+
*
|
|
96
|
+
* This helper stays forgiving (no `--name` contract enforcement): it is also
|
|
97
|
+
* used by `akm source add` (`source-manage.ts`'s `addStash`), which predates
|
|
98
|
+
* and is not in scope for the D6 `--name` contract. A caller that DOES need
|
|
99
|
+
* the D6 contract (an illegal or already-taken explicit name failing loudly)
|
|
100
|
+
* validates with {@link validateExplicitBundleName} itself before calling in,
|
|
101
|
+
* as `source-add.ts`'s local/website/registry add paths do.
|
|
95
102
|
*/
|
|
96
103
|
export function nextBundleKey(bundles, preferredName, seedLocator) {
|
|
97
104
|
return deriveBundleId(preferredName, seedLocator, new Set(Object.keys(bundles)));
|
|
@@ -66,8 +66,7 @@ function collectDangerousKeyFindings(installedStashRoot, checkEnvForDangerousKey
|
|
|
66
66
|
}
|
|
67
67
|
return allFindings;
|
|
68
68
|
}
|
|
69
|
-
|
|
70
|
-
export function scanStashForDangerousKeys(installedStashRoot) {
|
|
69
|
+
function scanStashForDangerousKeys(installedStashRoot) {
|
|
71
70
|
const scanner = scannerOverride ??
|
|
72
71
|
((envPath, relPath) => scanEnvKeyNames(fs.readFileSync(envPath, "utf8"))
|
|
73
72
|
.filter(isDangerousEnvKey)
|
|
@@ -11,7 +11,6 @@ import { error } from "../../core/warn.js";
|
|
|
11
11
|
import { closeDatabase, openExistingDatabase } from "../../storage/repositories/index-connection.js";
|
|
12
12
|
import { getEntryCount, getEntryCountByType } from "../../storage/repositories/index-entries-repository.js";
|
|
13
13
|
import { getMeta } from "../../storage/repositories/index-meta-repository.js";
|
|
14
|
-
import { isVecAvailable } from "../../storage/repositories/index-vec-repository.js";
|
|
15
14
|
import { pkgVersion } from "../../version.js";
|
|
16
15
|
/**
|
|
17
16
|
* Assemble system info describing the current capabilities, configuration,
|
|
@@ -53,15 +52,9 @@ export function assembleInfo(options) {
|
|
|
53
52
|
// Semantic status is read live from the index's own state, not a cached
|
|
54
53
|
// verdict — a failed embed attempt at search time falls back to FTS and
|
|
55
54
|
// reports that in the search response, it never disables the mode here.
|
|
56
|
-
const semanticStatus = config.semanticSearchMode === "off"
|
|
57
|
-
? "disabled"
|
|
58
|
-
: !indexStats.hasEmbeddings
|
|
59
|
-
? "pending"
|
|
60
|
-
: indexStats.vecAvailable
|
|
61
|
-
? "ready-vec"
|
|
62
|
-
: "ready-js";
|
|
55
|
+
const semanticStatus = config.semanticSearchMode === "off" ? "disabled" : indexStats.hasEmbeddings ? "ready-js" : "pending";
|
|
63
56
|
const searchModes = ["fts"];
|
|
64
|
-
if (semanticStatus === "ready-js"
|
|
57
|
+
if (semanticStatus === "ready-js") {
|
|
65
58
|
searchModes.push("semantic", "hybrid");
|
|
66
59
|
}
|
|
67
60
|
return {
|
|
@@ -90,7 +83,6 @@ function readIndexStats(resolvedPath) {
|
|
|
90
83
|
byType: {},
|
|
91
84
|
lastBuiltAt: null,
|
|
92
85
|
hasEmbeddings: false,
|
|
93
|
-
vecAvailable: false,
|
|
94
86
|
};
|
|
95
87
|
// "Absent" is the ordinary first-run state; "inaccessible" is a fault that
|
|
96
88
|
// must not present as an empty index (#791). `akm info` is the command an
|
|
@@ -112,7 +104,6 @@ function readIndexStats(resolvedPath) {
|
|
|
112
104
|
byType: getEntryCountByType(db),
|
|
113
105
|
lastBuiltAt: getMeta(db, "builtAt") ?? null,
|
|
114
106
|
hasEmbeddings: getMeta(db, "hasEmbeddings") === "1",
|
|
115
|
-
vecAvailable: isVecAvailable(db),
|
|
116
107
|
};
|
|
117
108
|
}
|
|
118
109
|
catch (err) {
|