akm-cli 0.10.26101001-alpha → 0.10.26101002-alpha
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 +12 -0
- package/STABILITY.md +1 -1
- package/dist/assets/improve-strategies/default.json +1 -1
- package/dist/commands/improve/eligibility.js +14 -1
- package/dist/commands/improve/improve.js +2 -2
- package/dist/commands/proposal/proposal-cli.js +1 -1
- package/dist/scripts/akm-migrate-node.js +1 -1
- package/dist/scripts/akm-migrate.js +1 -1
- package/docs/architecture/improvement.md +1 -1
- package/docs/reference/cli.md +3 -0
- package/docs/reference/configuration.md +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,18 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.10.26101002] - 2026-10-10
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- **Triage accepts up to 200 proposals per run by default, up from 25.** The consolidate pair pass stages about 90
|
|
14
|
+
pairs a night on a real stash, so a lower cap let the review queue grow every night. `maxAcceptsPerRun` still bounds
|
|
15
|
+
a run, and `akm proposal drain` uses the same default.
|
|
16
|
+
- **`akm improve <scope>` warns when the scope matches no asset.** A type scope that matches nothing in the stash
|
|
17
|
+
(`akm improve typo`, `improve skills`, `improve memorys`) prints one warning on stderr naming the scope and, for a
|
|
18
|
+
near-miss of a real type, the likely intended one. The exit code and the empty plan are unchanged, and a valid scope
|
|
19
|
+
with nothing eligible does not warn.
|
|
20
|
+
|
|
9
21
|
## [0.10.26101001] - 2026-10-10
|
|
10
22
|
|
|
11
23
|
### Added
|
package/STABILITY.md
CHANGED
|
@@ -446,7 +446,7 @@ review-first config correctly shows `queue`.
|
|
|
446
446
|
|
|
447
447
|
A deterministic-only `promote` (triage with judgment off) is **not** a gated
|
|
448
448
|
lane (#1143): the `default` strategy runs it without the opt-in, bounded by
|
|
449
|
-
`maxAcceptsPerRun` (
|
|
449
|
+
`maxAcceptsPerRun` (200), through the same deterministic gates as
|
|
450
450
|
`akm proposal drain --promote`. Only a promote that turns the judgment tier on
|
|
451
451
|
needs `experimental.improveAutonomy`.
|
|
452
452
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"extract": { "enabled": false, "triage": { "enabled": true, "minScore": 2 } },
|
|
13
13
|
"validation": { "enabled": true },
|
|
14
14
|
"proactiveMaintenance": { "enabled": true, "dueDays": 30, "maxPerRun": 15 },
|
|
15
|
-
"triage": { "enabled": true, "applyMode": "promote", "maxAcceptsPerRun":
|
|
15
|
+
"triage": { "enabled": true, "applyMode": "promote", "maxAcceptsPerRun": 200 }
|
|
16
16
|
},
|
|
17
17
|
"sync": { "enabled": true, "push": true }
|
|
18
18
|
}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
/** The refs an improve run may consider, read from the index, and the small predicates over them. */
|
|
5
5
|
import fs from "node:fs";
|
|
6
6
|
import path from "node:path";
|
|
7
|
+
import { closestMatch } from "../../cli/unknown-flags.js";
|
|
7
8
|
import { parseBundleRef } from "../../core/asset/asset-ref.js";
|
|
8
9
|
import { parseFrontmatter } from "../../core/asset/frontmatter.js";
|
|
9
10
|
import { conceptIdFromTypeName, parseRefInput, resolveRef, typeNameFromConceptId } from "../../core/asset/resolve-ref.js";
|
|
@@ -11,6 +12,8 @@ import { loadConfig } from "../../core/config/config.js";
|
|
|
11
12
|
import { ConfigError, NotFoundError, rethrowIfTestIsolationError, UsageError } from "../../core/errors.js";
|
|
12
13
|
import { isPathAbsent } from "../../core/path-access.js";
|
|
13
14
|
import { getDbPath } from "../../core/paths.js";
|
|
15
|
+
import { KNOWN_TYPES } from "../../core/recognition-util.js";
|
|
16
|
+
import { warn } from "../../core/warn.js";
|
|
14
17
|
import { deriveInstallations, deriveWritableBundleIds } from "../../indexer/installations.js";
|
|
15
18
|
import { resolveSourceEntries } from "../../indexer/search/search-source.js";
|
|
16
19
|
import { resolveAssetPath } from "../../indexer/walk/path-resolver.js";
|
|
@@ -210,7 +213,11 @@ async function collectEligibleRefsFromIndex(scope, stashDir, improveProfile, rea
|
|
|
210
213
|
indexSnapshot: ready,
|
|
211
214
|
};
|
|
212
215
|
}
|
|
213
|
-
const
|
|
216
|
+
const scoped = getAllEntries(db, scope.mode === "type" ? scope.value : undefined);
|
|
217
|
+
if (scope.mode === "type" && scope.value && scope.value !== "any" && scoped.length === 0) {
|
|
218
|
+
warnUnmatchedTypeScope(scope.value, getAllEntries(db));
|
|
219
|
+
}
|
|
220
|
+
const entries = scoped.filter((indexed) => isCandidateBundle(indexed.bundleId));
|
|
214
221
|
const planned = new Map();
|
|
215
222
|
const strategyFiltered = new Map();
|
|
216
223
|
let memoryEligible = 0;
|
|
@@ -262,6 +269,12 @@ async function collectEligibleRefsFromIndex(scope, stashDir, improveProfile, rea
|
|
|
262
269
|
closeDatabase(db);
|
|
263
270
|
}
|
|
264
271
|
}
|
|
272
|
+
/** A type scope that matches no indexed asset: warn on stderr, naming the nearest real type. */
|
|
273
|
+
function warnUnmatchedTypeScope(value, indexed) {
|
|
274
|
+
const types = [...new Set([...KNOWN_TYPES, ...indexed.map((entry) => entry.entry.type)])];
|
|
275
|
+
const suggestion = closestMatch(value, types, Math.max(1, Math.floor(value.length / 3)));
|
|
276
|
+
warn(`Scope "${value}" matches no asset in the stash.${suggestion ? ` Did you mean \`${suggestion}\`?` : ""}`);
|
|
277
|
+
}
|
|
265
278
|
/** The parent memory a `--scope <memory ref>` cleanup is restricted to. */
|
|
266
279
|
export function memoryCleanupParentRef(scope, stashDir) {
|
|
267
280
|
if (scope.mode !== "ref" || !scope.value)
|
|
@@ -654,7 +654,7 @@ function buildResultExecutionPlan(run, preparation, collected, dryRun) {
|
|
|
654
654
|
enabled: scope.mode !== "ref" && resolvedPlan.processes.triage.enabled,
|
|
655
655
|
configuredMode: configuredTriage?.applyMode ?? "queue",
|
|
656
656
|
mode: improveProfile.processes?.triage?.applyMode ?? "queue",
|
|
657
|
-
maxAcceptsPerRun: configuredTriage?.maxAcceptsPerRun ??
|
|
657
|
+
maxAcceptsPerRun: configuredTriage?.maxAcceptsPerRun ?? 200,
|
|
658
658
|
},
|
|
659
659
|
});
|
|
660
660
|
}
|
|
@@ -674,7 +674,7 @@ async function runTriagePrePass(run) {
|
|
|
674
674
|
...(options.target ? { target: options.target } : {}),
|
|
675
675
|
config: options.config,
|
|
676
676
|
applyMode: triageConfig?.applyMode ?? "queue",
|
|
677
|
-
maxAccepts: triageConfig?.maxAcceptsPerRun ??
|
|
677
|
+
maxAccepts: triageConfig?.maxAcceptsPerRun ?? 200,
|
|
678
678
|
dryRun: false,
|
|
679
679
|
excludeIds: new Set(),
|
|
680
680
|
judgment: resolvedPlan.triageJudgment,
|
|
@@ -403,7 +403,7 @@ const proposalDrainCommand = defineJsonCommand({
|
|
|
403
403
|
const applyMode = args.promote === true ? "promote" : (triageConfig?.applyMode ?? "queue");
|
|
404
404
|
const maxAccepts = parsePositiveIntFlag(args["max-accepts"], "--max-accepts") ??
|
|
405
405
|
triageConfig?.maxAcceptsPerRun ??
|
|
406
|
-
|
|
406
|
+
200;
|
|
407
407
|
const rawOlderThan = parsePositiveIntFlag(args["older-than"], "--older-than");
|
|
408
408
|
const olderThanMs = rawOlderThan !== undefined ? rawOlderThan * 86_400_000 : undefined;
|
|
409
409
|
// Promotion in promote mode is destructive (commits to git, no batch revert).
|
|
@@ -31467,7 +31467,7 @@ var default_default = {
|
|
|
31467
31467
|
extract: { enabled: false, triage: { enabled: true, minScore: 2 } },
|
|
31468
31468
|
validation: { enabled: true },
|
|
31469
31469
|
proactiveMaintenance: { enabled: true, dueDays: 30, maxPerRun: 15 },
|
|
31470
|
-
triage: { enabled: true, applyMode: "promote", maxAcceptsPerRun:
|
|
31470
|
+
triage: { enabled: true, applyMode: "promote", maxAcceptsPerRun: 200 }
|
|
31471
31471
|
},
|
|
31472
31472
|
sync: { enabled: true, push: true }
|
|
31473
31473
|
};
|
|
@@ -30795,7 +30795,7 @@ var default_default = {
|
|
|
30795
30795
|
extract: { enabled: false, triage: { enabled: true, minScore: 2 } },
|
|
30796
30796
|
validation: { enabled: true },
|
|
30797
30797
|
proactiveMaintenance: { enabled: true, dueDays: 30, maxPerRun: 15 },
|
|
30798
|
-
triage: { enabled: true, applyMode: "promote", maxAcceptsPerRun:
|
|
30798
|
+
triage: { enabled: true, applyMode: "promote", maxAcceptsPerRun: 200 }
|
|
30799
30799
|
},
|
|
30800
30800
|
sync: { enabled: true, push: true }
|
|
30801
30801
|
};
|
|
@@ -373,7 +373,7 @@ lane only when its judgment tier is on; see below):
|
|
|
373
373
|
|
|
374
374
|
A deterministic-only `promote` (triage with judgment off) is not gated (#1143):
|
|
375
375
|
the `default` strategy drains the queue through the deterministic gates, up to
|
|
376
|
-
`maxAcceptsPerRun` (
|
|
376
|
+
`maxAcceptsPerRun` (200) per run, with no opt-in. The nightly eval's baseline is
|
|
377
377
|
exactly this path (`proposal drain --promote` without judgment): 0.91 (terra) and
|
|
378
378
|
0.89 (qwen) of items solved, 0 to 1 harmed.
|
|
379
379
|
|
package/docs/reference/cli.md
CHANGED
|
@@ -2627,6 +2627,9 @@ ref-scoped improvement. It owns the memory-cleanup and lesson-distillation
|
|
|
2627
2627
|
flow. A qualified scope such as `team//skills/code-review` selects that bundle;
|
|
2628
2628
|
a different explicit `--bundle` is a usage error.
|
|
2629
2629
|
|
|
2630
|
+
A type scope that matches no asset in the stash (a misspelt type, say) prints a warning on stderr, with the
|
|
2631
|
+
nearest real type when one is close, and plans nothing; the exit code stays 0.
|
|
2632
|
+
|
|
2630
2633
|
A run improves one bundle, the one it writes to, and plans only that bundle's
|
|
2631
2634
|
assets: an asset that lives in another bundle is left alone even when that
|
|
2632
2635
|
bundle is writable, and a bare ref scope (`akm improve skills/x`) resolves
|
|
@@ -497,7 +497,7 @@ guidance. When enabled, engine selection is judgment → triage → strategy →
|
|
|
497
497
|
`defaults.llmEngine`, and resolution fails closed if none is available.
|
|
498
498
|
|
|
499
499
|
The `default` strategy runs triage in `promote` mode with judgment off and
|
|
500
|
-
`maxAcceptsPerRun:
|
|
500
|
+
`maxAcceptsPerRun: 200` (#1143), so the proposal backlog drains through the
|
|
501
501
|
deterministic gates without `experimental.improveAutonomy`. Turning judgment on
|
|
502
502
|
in a promote strategy is what that opt-in gates.
|
|
503
503
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "akm-cli",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.26101002-alpha",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "akm (Agent Knowledge Manager) — a portable, local-first capability library for AI agents. Discover, load, share, and improve reusable skills, scripts, workflows, and knowledge across any shell-capable coding agent, including Claude Code, OpenCode, and Cursor.",
|
|
6
6
|
"keywords": [
|