akm-cli 0.8.0-rc2 → 0.8.1
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/{.github/CHANGELOG.md → CHANGELOG.md} +238 -3
- package/README.md +22 -6
- package/SECURITY.md +93 -0
- package/dist/assets/help/help-accept.md +12 -0
- package/dist/assets/help/help-improve.md +81 -0
- package/dist/{commands → assets}/help/help-proposals.md +7 -4
- package/dist/assets/help/help-reject.md +11 -0
- package/dist/{output → assets/hints}/cli-hints-full.md +60 -32
- package/dist/{output → assets/hints}/cli-hints-short.md +10 -7
- package/dist/assets/profiles/default.json +15 -0
- package/dist/assets/profiles/graph-refresh.json +13 -0
- package/dist/assets/profiles/memory-focus.json +12 -0
- package/dist/assets/profiles/quick.json +15 -0
- package/dist/assets/profiles/thorough.json +15 -0
- package/dist/assets/prompts/extract-session.md +80 -0
- package/dist/assets/prompts/graph-extract-user-prompt.md +35 -0
- package/dist/assets/tasks/graph-refresh-weekly.yml +10 -0
- package/dist/cli/config-migrate.js +144 -0
- package/dist/cli/config-validate.js +39 -0
- package/dist/cli/confirm.js +73 -0
- package/dist/cli/parse-args.js +93 -3
- package/dist/cli/shared.js +129 -0
- package/dist/cli.js +2141 -1268
- package/dist/commands/add-cli.js +279 -0
- package/dist/commands/agent-dispatch.js +20 -12
- package/dist/commands/agent-support.js +11 -5
- package/dist/commands/completions.js +3 -0
- package/dist/commands/config-cli.js +129 -517
- package/dist/commands/consolidate.js +1557 -147
- package/dist/commands/curate.js +44 -3
- package/dist/commands/db-cli.js +23 -0
- package/dist/commands/distill-promotion-policy.js +5 -3
- package/dist/commands/distill.js +906 -100
- package/dist/commands/env.js +213 -0
- package/dist/commands/eval-cases.js +3 -0
- package/dist/commands/events.js +3 -0
- package/dist/commands/extract-cli.js +127 -0
- package/dist/commands/extract-prompt.js +217 -0
- package/dist/commands/extract.js +477 -0
- package/dist/commands/feedback-cli.js +331 -0
- package/dist/commands/graph.js +260 -5
- package/dist/commands/health.js +1042 -55
- package/dist/commands/history.js +51 -16
- package/dist/commands/improve-auto-accept.js +97 -0
- package/dist/commands/improve-cli.js +236 -0
- package/dist/commands/improve-profiles.js +138 -0
- package/dist/commands/improve-result-file.js +167 -0
- package/dist/commands/improve.js +1736 -346
- package/dist/commands/info.js +26 -28
- package/dist/commands/init.js +49 -1
- package/dist/commands/installed-stashes.js +6 -23
- package/dist/commands/knowledge.js +3 -0
- package/dist/commands/lint/agent-linter.js +3 -0
- package/dist/commands/lint/base-linter.js +199 -5
- package/dist/commands/lint/command-linter.js +3 -0
- package/dist/commands/lint/default-linter.js +3 -0
- package/dist/commands/lint/env-key-rules.js +154 -0
- package/dist/commands/lint/index.js +92 -3
- package/dist/commands/lint/knowledge-linter.js +3 -0
- package/dist/commands/lint/markdown-insertion.js +343 -0
- package/dist/commands/lint/memory-linter.js +3 -0
- package/dist/commands/lint/registry.js +3 -0
- package/dist/commands/lint/skill-linter.js +3 -0
- package/dist/commands/lint/task-linter.js +15 -12
- package/dist/commands/lint/types.js +3 -0
- package/dist/commands/lint/workflow-linter.js +3 -0
- package/dist/commands/lint.js +3 -0
- package/dist/commands/migration-help.js +5 -2
- package/dist/commands/proposal-drain-policies.js +128 -0
- package/dist/commands/proposal-drain.js +477 -0
- package/dist/commands/proposal.js +60 -6
- package/dist/commands/propose.js +24 -19
- package/dist/commands/reflect.js +1004 -94
- package/dist/commands/registry-cli.js +150 -0
- package/dist/commands/registry-search.js +3 -0
- package/dist/commands/remember-cli.js +257 -0
- package/dist/commands/remember.js +15 -6
- package/dist/commands/schema-repair.js +88 -15
- package/dist/commands/search.js +99 -14
- package/dist/commands/secret.js +173 -0
- package/dist/commands/self-update.js +3 -0
- package/dist/commands/show.js +32 -13
- package/dist/commands/source-add.js +7 -35
- package/dist/commands/source-clone.js +3 -0
- package/dist/commands/source-manage.js +3 -0
- package/dist/commands/tasks.js +161 -95
- package/dist/commands/url-checker.js +3 -0
- package/dist/core/action-contributors.js +3 -0
- package/dist/core/asset-ref.js +13 -2
- package/dist/core/asset-registry.js +9 -2
- package/dist/core/asset-serialize.js +88 -0
- package/dist/core/asset-spec.js +61 -5
- package/dist/core/common.js +93 -5
- package/dist/core/concurrent.js +3 -0
- package/dist/core/config-io.js +347 -0
- package/dist/core/config-migration.js +622 -0
- package/dist/core/config-schema.js +558 -0
- package/dist/core/config-sources.js +108 -0
- package/dist/core/config-types.js +4 -0
- package/dist/core/config-walker.js +337 -0
- package/dist/core/config.js +366 -1077
- package/dist/core/errors.js +42 -20
- package/dist/core/events.js +31 -25
- package/dist/core/file-lock.js +104 -0
- package/dist/core/frontmatter.js +75 -10
- package/dist/core/lesson-lint.js +3 -0
- package/dist/core/markdown.js +3 -0
- package/dist/core/memory-belief.js +62 -0
- package/dist/core/memory-contradiction-detect.js +274 -0
- package/dist/core/memory-improve.js +142 -14
- package/dist/core/parse.js +3 -0
- package/dist/core/paths.js +218 -50
- package/dist/core/proposal-quality-validators.js +380 -0
- package/dist/core/proposal-validators.js +11 -3
- package/dist/core/proposals.js +464 -5
- package/dist/core/state-db.js +349 -56
- package/dist/core/text-truncation.js +107 -0
- package/dist/core/time.js +3 -0
- package/dist/core/tty.js +59 -0
- package/dist/core/warn.js +7 -2
- package/dist/core/write-source.js +12 -0
- package/dist/indexer/db-backup.js +391 -0
- package/dist/indexer/db-search.js +136 -28
- package/dist/indexer/db.js +661 -166
- package/dist/indexer/ensure-index.js +3 -0
- package/dist/indexer/file-context.js +3 -0
- package/dist/indexer/graph-boost.js +162 -40
- package/dist/indexer/graph-db.js +241 -51
- package/dist/indexer/graph-dedup.js +3 -7
- package/dist/indexer/graph-extraction.js +242 -149
- package/dist/indexer/index-context.js +3 -9
- package/dist/indexer/indexer.js +86 -16
- package/dist/indexer/llm-cache.js +24 -19
- package/dist/indexer/manifest.js +3 -0
- package/dist/indexer/matchers.js +184 -11
- package/dist/indexer/memory-inference.js +94 -50
- package/dist/indexer/metadata-contributors.js +3 -0
- package/dist/indexer/metadata.js +110 -50
- package/dist/indexer/path-resolver.js +3 -0
- package/dist/indexer/project-context.js +192 -0
- package/dist/indexer/ranking-contributors.js +134 -7
- package/dist/indexer/ranking.js +8 -1
- package/dist/indexer/search-fields.js +5 -9
- package/dist/indexer/search-hit-enrichers.js +91 -2
- package/dist/indexer/search-source.js +20 -1
- package/dist/indexer/semantic-status.js +4 -1
- package/dist/indexer/staleness-detect.js +447 -0
- package/dist/indexer/usage-events.js +12 -9
- package/dist/indexer/walker.js +3 -0
- package/dist/integrations/agent/builders.js +135 -0
- package/dist/integrations/agent/config.js +121 -401
- package/dist/integrations/agent/detect.js +3 -0
- package/dist/integrations/agent/index.js +6 -14
- package/dist/integrations/agent/model-aliases.js +55 -0
- package/dist/integrations/agent/profiles.js +3 -0
- package/dist/integrations/agent/prompts.js +137 -8
- package/dist/integrations/agent/runner.js +208 -0
- package/dist/integrations/agent/sdk-runner.js +8 -2
- package/dist/integrations/agent/spawn.js +54 -14
- package/dist/integrations/github.js +3 -0
- package/dist/integrations/lockfile.js +22 -51
- package/dist/integrations/session-logs/index.js +4 -0
- package/dist/integrations/session-logs/inline-refs.js +35 -0
- package/dist/integrations/session-logs/pre-filter.js +152 -0
- package/dist/integrations/session-logs/providers/claude-code.js +226 -0
- package/dist/integrations/session-logs/providers/opencode.js +231 -25
- package/dist/integrations/session-logs/types.js +3 -0
- package/dist/llm/call-ai.js +14 -26
- package/dist/llm/client.js +16 -2
- package/dist/llm/embedder.js +20 -29
- package/dist/llm/embedders/cache.js +3 -7
- package/dist/llm/embedders/local.js +42 -1
- package/dist/llm/embedders/remote.js +20 -8
- package/dist/llm/embedders/types.js +3 -7
- package/dist/llm/feature-gate.js +92 -56
- package/dist/llm/graph-extract.js +402 -31
- package/dist/llm/index-passes.js +44 -29
- package/dist/llm/memory-infer.js +30 -2
- package/dist/llm/metadata-enhance.js +3 -7
- package/dist/output/cli-hints.js +7 -4
- package/dist/output/context.js +60 -8
- package/dist/output/renderers.js +170 -194
- package/dist/output/shapes/curate.js +56 -0
- package/dist/output/shapes/distill.js +10 -0
- package/dist/output/shapes/env-list.js +19 -0
- package/dist/output/shapes/events.js +11 -0
- package/dist/output/shapes/helpers.js +424 -0
- package/dist/output/shapes/history.js +7 -0
- package/dist/output/shapes/passthrough.js +105 -0
- package/dist/output/shapes/proposal-accept.js +7 -0
- package/dist/output/shapes/proposal-diff.js +7 -0
- package/dist/output/shapes/proposal-list.js +7 -0
- package/dist/output/shapes/proposal-producer.js +11 -0
- package/dist/output/shapes/proposal-reject.js +7 -0
- package/dist/output/shapes/proposal-show.js +7 -0
- package/dist/output/shapes/registry-search.js +6 -0
- package/dist/output/shapes/registry.js +30 -0
- package/dist/output/shapes/search.js +6 -0
- package/dist/output/shapes/secret-list.js +19 -0
- package/dist/output/shapes/show.js +6 -0
- package/dist/output/shapes/vault-list.js +19 -0
- package/dist/output/shapes.js +51 -549
- package/dist/output/text/add.js +6 -0
- package/dist/output/text/clone.js +6 -0
- package/dist/output/text/config.js +6 -0
- package/dist/output/text/curate.js +6 -0
- package/dist/output/text/distill.js +7 -0
- package/dist/output/text/enable-disable.js +7 -0
- package/dist/output/text/events.js +10 -0
- package/dist/output/text/feedback.js +6 -0
- package/dist/output/text/helpers.js +1059 -0
- package/dist/output/text/history.js +7 -0
- package/dist/output/text/import.js +6 -0
- package/dist/output/text/index.js +6 -0
- package/dist/output/text/info.js +6 -0
- package/dist/output/text/init.js +6 -0
- package/dist/output/text/list.js +6 -0
- package/dist/output/text/proposal-producer.js +8 -0
- package/dist/output/text/proposal.js +12 -0
- package/dist/output/text/registry-commands.js +11 -0
- package/dist/output/text/registry.js +30 -0
- package/dist/output/text/remember.js +6 -0
- package/dist/output/text/remove.js +6 -0
- package/dist/output/text/save.js +6 -0
- package/dist/output/text/search.js +6 -0
- package/dist/output/text/show.js +6 -0
- package/dist/output/text/update.js +6 -0
- package/dist/output/text/upgrade.js +6 -0
- package/dist/output/text/vault.js +16 -0
- package/dist/output/text/wiki.js +15 -0
- package/dist/output/text/workflow.js +14 -0
- package/dist/output/text.js +44 -1329
- package/dist/registry/build-index.js +3 -0
- package/dist/registry/create-provider-registry.js +3 -0
- package/dist/registry/factory.js +4 -1
- package/dist/registry/origin-resolve.js +3 -0
- package/dist/registry/providers/index.js +3 -0
- package/dist/registry/providers/skills-sh.js +11 -2
- package/dist/registry/providers/static-index.js +10 -1
- package/dist/registry/providers/types.js +3 -24
- package/dist/registry/resolve.js +11 -16
- package/dist/registry/types.js +3 -0
- package/dist/scripts/migrate-storage.js +17767 -0
- package/dist/scripts/migrations/import-fs-improve-runs-to-db.js +9031 -0
- package/dist/scripts/migrations/v16-to-v17.js +141 -0
- package/dist/setup/detect.js +3 -0
- package/dist/setup/ripgrep-install.js +3 -0
- package/dist/setup/ripgrep-resolve.js +3 -0
- package/dist/setup/setup.js +306 -67
- package/dist/setup/steps.js +3 -15
- package/dist/sources/include.js +3 -0
- package/dist/sources/provider-factory.js +3 -11
- package/dist/sources/provider.js +3 -20
- package/dist/sources/providers/filesystem.js +19 -23
- package/dist/sources/providers/git.js +171 -21
- package/dist/sources/providers/index.js +3 -0
- package/dist/sources/providers/install-types.js +3 -13
- package/dist/sources/providers/npm.js +3 -4
- package/dist/sources/providers/provider-utils.js +3 -0
- package/dist/sources/providers/sync-from-ref.js +3 -11
- package/dist/sources/providers/tar-utils.js +3 -0
- package/dist/sources/providers/website.js +18 -22
- package/dist/sources/resolve.js +3 -0
- package/dist/sources/types.js +3 -0
- package/dist/sources/website-ingest.js +3 -0
- package/dist/tasks/backends/cron.js +3 -0
- package/dist/tasks/backends/exec-utils.js +3 -0
- package/dist/tasks/backends/index.js +3 -11
- package/dist/tasks/backends/launchd.js +4 -1
- package/dist/tasks/backends/schtasks.js +4 -1
- package/dist/tasks/parser.js +51 -38
- package/dist/tasks/resolveAkmBin.js +3 -0
- package/dist/tasks/runner.js +35 -9
- package/dist/tasks/schedule.js +20 -1
- package/dist/tasks/schema.js +5 -3
- package/dist/tasks/validator.js +6 -3
- package/dist/version.js +3 -0
- package/dist/wiki/wiki-templates.js +6 -3
- package/dist/wiki/wiki.js +4 -1
- package/dist/workflows/authoring.js +4 -1
- package/dist/workflows/cli.js +3 -0
- package/dist/workflows/db.js +140 -10
- package/dist/workflows/document-cache.js +3 -10
- package/dist/workflows/parser.js +3 -0
- package/dist/workflows/renderer.js +3 -0
- package/dist/workflows/runs.js +18 -1
- package/dist/workflows/schema.js +3 -0
- package/dist/workflows/scope-key.js +3 -0
- package/dist/workflows/validator.js +5 -9
- package/docs/README.md +7 -2
- package/docs/data-and-telemetry.md +225 -0
- package/docs/migration/release-notes/0.7.5.md +2 -2
- package/docs/migration/release-notes/0.8.0.md +57 -5
- package/docs/migration/v0.7-to-v0.8.md +1378 -0
- package/package.json +28 -11
- package/.github/LICENSE +0 -374
- package/dist/commands/help/help-accept.md +0 -9
- package/dist/commands/help/help-improve.md +0 -53
- package/dist/commands/help/help-reject.md +0 -8
- package/dist/commands/install-audit.js +0 -385
- package/dist/commands/vault.js +0 -310
- package/dist/indexer/match-contributors.js +0 -141
- package/dist/integrations/agent/pipeline.js +0 -39
- package/dist/integrations/agent/runners.js +0 -31
- package/dist/llm/prompts/graph-extract-user-prompt.md +0 -12
- /package/dist/{tasks → assets}/backends/launchd-template.xml +0 -0
- /package/dist/{tasks → assets}/backends/schtasks-template.xml +0 -0
- /package/dist/{commands → assets}/help/help-propose.md +0 -0
- /package/dist/{wiki → assets/wiki}/index-template.md +0 -0
- /package/dist/{wiki → assets/wiki}/ingest-workflow-template.md +0 -0
- /package/dist/{wiki → assets/wiki}/log-template.md +0 -0
- /package/dist/{wiki → assets/wiki}/schema-template.md +0 -0
- /package/dist/{workflows → assets/workflows}/workflow-template.md +0 -0
package/dist/llm/index-passes.js
CHANGED
|
@@ -1,35 +1,50 @@
|
|
|
1
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
+
import { getDefaultLlmConfig, getIndexPassConfig } from "../core/config";
|
|
1
5
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* - Every LLM-using pass inside `akm index` defaults to that block.
|
|
7
|
-
* - A pass can be opted out individually with `index.<passName>.llm = false`.
|
|
8
|
-
* - Any attempt to supply provider/model fields under `index.<passName>` is
|
|
9
|
-
* rejected at config-load time by `parseIndexConfig` in
|
|
10
|
-
* {@link ../core/config.ts} (`ConfigError("INVALID_CONFIG_FILE")`).
|
|
11
|
-
*
|
|
12
|
-
* Passes plug in by calling {@link resolveIndexPassLLM} with their pass
|
|
13
|
-
* name (e.g. `"memory"` for #201's memory-inference pass, `"graph"` for
|
|
14
|
-
* #207's graph-extraction pass). They do not read `config.llm` directly.
|
|
15
|
-
* This keeps the config surface small and the wiring uniform.
|
|
16
|
-
*/
|
|
17
|
-
/**
|
|
18
|
-
* Resolve the {@link LlmConnectionConfig} a single index pass should use, or
|
|
19
|
-
* `undefined` when the pass should run without an LLM.
|
|
20
|
-
*
|
|
21
|
-
* Returns `undefined` if any of:
|
|
22
|
-
* - No top-level `akm.llm` block is configured.
|
|
23
|
-
* - The pass is explicitly opted out (`index.<passName>.llm === false`).
|
|
24
|
-
*
|
|
25
|
-
* Otherwise returns the shared `akm.llm` config. There is no per-pass
|
|
26
|
-
* provider override; that decision is locked by §9 of the v1 spec.
|
|
6
|
+
* Map a pass name (as used by callers — "memory", "graph", etc.) to the
|
|
7
|
+
* matching key under `profiles.improve.default.processes`. Pass names with
|
|
8
|
+
* no improve-profile counterpart return undefined and resolve via the
|
|
9
|
+
* default LLM only.
|
|
27
10
|
*/
|
|
11
|
+
function improveProcessKeyForPass(passName) {
|
|
12
|
+
switch (passName) {
|
|
13
|
+
case "memory":
|
|
14
|
+
return "memoryInference";
|
|
15
|
+
case "graph":
|
|
16
|
+
return "graphExtraction";
|
|
17
|
+
default:
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
28
21
|
export function resolveIndexPassLLM(passName, config) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const passConfig = config.index?.[passName];
|
|
22
|
+
// Gate 1 — explicit opt-out via the index-config block stays authoritative.
|
|
23
|
+
const passConfig = getIndexPassConfig(config.index, passName);
|
|
32
24
|
if (passConfig?.llm === false)
|
|
33
25
|
return undefined;
|
|
34
|
-
|
|
26
|
+
// Gate 2 — per-process profile from the improve profile, when present.
|
|
27
|
+
// This is the path that lets
|
|
28
|
+
// profiles.improve.default.processes.graphExtraction.profile = "ministral-3b"
|
|
29
|
+
// actually take effect on the graph pass instead of being silently
|
|
30
|
+
// ignored.
|
|
31
|
+
const processKey = improveProcessKeyForPass(passName);
|
|
32
|
+
if (processKey) {
|
|
33
|
+
const processConfig = config.profiles?.improve?.default?.processes?.[processKey];
|
|
34
|
+
// Honor enabled === false here too — an explicit disable wins.
|
|
35
|
+
if (processConfig?.enabled === false)
|
|
36
|
+
return undefined;
|
|
37
|
+
const profileName = processConfig?.profile;
|
|
38
|
+
if (profileName) {
|
|
39
|
+
const profile = config.profiles?.llm?.[profileName];
|
|
40
|
+
if (profile)
|
|
41
|
+
return profile;
|
|
42
|
+
// A named-but-missing profile is a configuration error in spirit, but
|
|
43
|
+
// we fall through to default rather than throwing — callers gracefully
|
|
44
|
+
// treat `undefined` as "pass disabled" and emitting a hard throw here
|
|
45
|
+
// would take the whole improve run down on a typo.
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Gate 3 — fall back to the default LLM profile.
|
|
49
|
+
return getDefaultLlmConfig(config);
|
|
35
50
|
}
|
package/dist/llm/memory-infer.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
1
4
|
/**
|
|
2
5
|
* LLM helper for the `akm index` memory-inference pass (#201).
|
|
3
6
|
*
|
|
@@ -24,11 +27,35 @@ const MAX_BODY_CHARS = 4000;
|
|
|
24
27
|
const SYSTEM_PROMPT = "You compress a developer memory into one high-signal derived memory for later retrieval. " +
|
|
25
28
|
"Return only valid JSON. No prose outside the JSON object. No markdown fences.";
|
|
26
29
|
const USER_PROMPT_PREFIX = `Compress the memory below into one derived memory. Output ONLY JSON:
|
|
27
|
-
{"title":"string","description":"string","tags":["
|
|
28
|
-
Rules: be specific, no vague generalizations, preserve key facts (names/versions/paths/config keys verbatim), merge related points,
|
|
30
|
+
{"title":"short title string","description":"one sentence summary string","tags":["tag1","tag2"],"searchHints":["search phrase 1","search phrase 2"],"content":"2-3 sentence compressed body preserving key facts verbatim"}
|
|
31
|
+
Rules: be specific, no vague generalizations, preserve key facts (names/versions/paths/config keys verbatim), merge related points, 3-8 tags, 3-6 searchHints. The content field must be a plain string with 2-3 sentences.
|
|
29
32
|
|
|
30
33
|
Memory:
|
|
31
34
|
`;
|
|
35
|
+
/**
|
|
36
|
+
* Strict JSON Schema for the derived-memory payload. Sent to providers that
|
|
37
|
+
* opt in via `LlmConnectionConfig.supportsJsonSchema = true`; the client
|
|
38
|
+
* silently drops the schema for providers that don't.
|
|
39
|
+
*
|
|
40
|
+
* Extends the responseSchema lift (PR 1, asset-writers-investigation §5) to
|
|
41
|
+
* the memory-inference path. Mirrors the validation gate below
|
|
42
|
+
* (title/description/content + non-empty tags/searchHints) so a
|
|
43
|
+
* schema-compliant response is guaranteed to pass the downstream check
|
|
44
|
+
* — no more "incomplete derived memory payload from LLM; skipping memory"
|
|
45
|
+
* for shape-only failures.
|
|
46
|
+
*/
|
|
47
|
+
const DERIVED_MEMORY_JSON_SCHEMA = {
|
|
48
|
+
type: "object",
|
|
49
|
+
properties: {
|
|
50
|
+
title: { type: "string", minLength: 1 },
|
|
51
|
+
description: { type: "string", minLength: 1 },
|
|
52
|
+
content: { type: "string", minLength: 1 },
|
|
53
|
+
tags: { type: "array", items: { type: "string" }, minItems: 1, maxItems: 8 },
|
|
54
|
+
searchHints: { type: "array", items: { type: "string" }, minItems: 1, maxItems: 6 },
|
|
55
|
+
},
|
|
56
|
+
required: ["title", "description", "content", "tags", "searchHints"],
|
|
57
|
+
additionalProperties: false,
|
|
58
|
+
};
|
|
32
59
|
/**
|
|
33
60
|
* Compress a single memory body into one derived memory via the configured LLM.
|
|
34
61
|
*
|
|
@@ -53,6 +80,7 @@ export async function compressMemoryToDerivedMemory(llmConfig, body, signal, akm
|
|
|
53
80
|
temperature: 0.1,
|
|
54
81
|
timeoutMs: llmConfig.timeoutMs,
|
|
55
82
|
signal,
|
|
83
|
+
responseSchema: DERIVED_MEMORY_JSON_SCHEMA,
|
|
56
84
|
});
|
|
57
85
|
if (!raw)
|
|
58
86
|
return undefined;
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* Split out of `llm.ts` so the higher-level workflow (prompting the LLM to
|
|
5
|
-
* improve descriptions/tags/searchHints) lives separately from the low-level
|
|
6
|
-
* transport client in `client.ts`.
|
|
7
|
-
*/
|
|
1
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
8
4
|
import { chatCompletion, parseJsonResponse } from "./client";
|
|
9
5
|
import { tryLlmFeature } from "./feature-gate";
|
|
10
6
|
const SYSTEM_PROMPT = `You are a metadata generator for a developer asset registry. Given a script/skill/command/agent entry, generate improved metadata. Respond with ONLY valid JSON, no markdown fencing.`;
|
package/dist/output/cli-hints.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
1
4
|
/**
|
|
2
5
|
* Embedded "agent CLI hints" rendered by `akm hints` when no other source
|
|
3
6
|
* is available.
|
|
4
7
|
*
|
|
5
8
|
* Extracted from `src/cli.ts` so it does not bloat the CLI module and so
|
|
6
9
|
* docs/CI tooling can re-use the same constants. Two flavors:
|
|
7
|
-
* `EMBEDDED_HINTS` (
|
|
8
|
-
* `EMBEDDED_HINTS_FULL` (`--detail full`, ~250 lines).
|
|
10
|
+
* `EMBEDDED_HINTS` (`--detail brief`, short reference, ~40 lines) and
|
|
11
|
+
* `EMBEDDED_HINTS_FULL` (`--detail normal|full`, ~250 lines).
|
|
9
12
|
*/
|
|
10
|
-
import EMBEDDED_HINTS_FULL from "
|
|
11
|
-
import EMBEDDED_HINTS from "
|
|
13
|
+
import EMBEDDED_HINTS_FULL from "../assets/hints/cli-hints-full.md" with { type: "text" };
|
|
14
|
+
import EMBEDDED_HINTS from "../assets/hints/cli-hints-short.md" with { type: "text" };
|
|
12
15
|
export { EMBEDDED_HINTS, EMBEDDED_HINTS_FULL };
|
package/dist/output/context.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
1
4
|
/**
|
|
2
5
|
* Process-level output mode singleton.
|
|
3
6
|
*
|
|
4
|
-
* Output mode (format + detail +
|
|
7
|
+
* Output mode (format + detail + shape) is parsed once at startup from
|
|
5
8
|
* `process.argv` and the persisted user config. All subsequent `output()`
|
|
6
9
|
* calls read from this in-memory singleton instead of re-scanning argv and
|
|
7
10
|
* re-loading config on every call.
|
|
@@ -9,8 +12,9 @@
|
|
|
9
12
|
* Initialized from `cli.ts` before `runMain`.
|
|
10
13
|
*/
|
|
11
14
|
import { UsageError } from "../core/errors";
|
|
12
|
-
export const OUTPUT_FORMATS = ["json", "yaml", "text", "jsonl"];
|
|
13
|
-
export const DETAIL_LEVELS = ["brief", "normal", "full"
|
|
15
|
+
export const OUTPUT_FORMATS = ["json", "yaml", "text", "jsonl", "md"];
|
|
16
|
+
export const DETAIL_LEVELS = ["brief", "normal", "full"];
|
|
17
|
+
export const SHAPE_MODES = ["human", "agent", "summary"];
|
|
14
18
|
export function parseOutputFormat(value) {
|
|
15
19
|
if (!value)
|
|
16
20
|
return undefined;
|
|
@@ -25,6 +29,13 @@ export function parseDetailLevel(value) {
|
|
|
25
29
|
return value;
|
|
26
30
|
throw new UsageError(`Invalid value for --detail: ${value}. Expected one of: ${DETAIL_LEVELS.join("|")}`, "INVALID_DETAIL_VALUE");
|
|
27
31
|
}
|
|
32
|
+
export function parseShapeMode(value) {
|
|
33
|
+
if (!value)
|
|
34
|
+
return undefined;
|
|
35
|
+
if (SHAPE_MODES.includes(value))
|
|
36
|
+
return value;
|
|
37
|
+
throw new UsageError(`Invalid value for --shape: ${value}. Expected one of: ${SHAPE_MODES.join("|")}`, "INVALID_SHAPE_VALUE");
|
|
38
|
+
}
|
|
28
39
|
export function parseFlagValue(argv, flag) {
|
|
29
40
|
for (let i = 0; i < argv.length; i++) {
|
|
30
41
|
const arg = argv[i];
|
|
@@ -62,11 +73,52 @@ export function getHyphenatedBoolean(args, key) {
|
|
|
62
73
|
*/
|
|
63
74
|
export function resolveOutputMode(argv, defaults = {}) {
|
|
64
75
|
const format = parseOutputFormat(parseFlagValue(argv, "--format")) ?? defaults?.format ?? "json";
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
76
|
+
const rawDetail = parseFlagValue(argv, "--detail");
|
|
77
|
+
const rawShape = parseFlagValue(argv, "--shape");
|
|
78
|
+
const usedForAgent = hasBooleanFlag(argv, "--for-agent");
|
|
79
|
+
// Back-compat: the projection presets `summary`/`agent` used to live on
|
|
80
|
+
// `--detail`. They moved to `--shape` in 0.8 (removed from `--detail` in
|
|
81
|
+
// 0.9.0). Map the legacy spellings onto `--shape` + warn, and treat the
|
|
82
|
+
// verbosity axis as `normal` (the prior effective behaviour).
|
|
83
|
+
let detailForVerbosity = rawDetail;
|
|
84
|
+
let shapeFromLegacyDetail;
|
|
85
|
+
if (rawDetail === "summary" || rawDetail === "agent") {
|
|
86
|
+
// Only nudge toward `--shape` when the caller did not already pass an
|
|
87
|
+
// explicit `--shape` (which wins below). Otherwise the "use --shape <x>"
|
|
88
|
+
// advice would name a projection the caller did not request.
|
|
89
|
+
if (rawShape === undefined)
|
|
90
|
+
emitDetailShapeDeprecation(rawDetail);
|
|
91
|
+
shapeFromLegacyDetail = rawDetail;
|
|
92
|
+
detailForVerbosity = "normal";
|
|
93
|
+
}
|
|
94
|
+
else if (rawDetail === "per-run") {
|
|
95
|
+
// Legacy `akm health --detail per-run` (→ `--group-by run`). The health
|
|
96
|
+
// command owns the back-compat warning + mapping; the global singleton must
|
|
97
|
+
// not reject the value here, so fall through to the default verbosity.
|
|
98
|
+
detailForVerbosity = undefined;
|
|
99
|
+
}
|
|
100
|
+
if (usedForAgent) {
|
|
101
|
+
emitForAgentDeprecation();
|
|
102
|
+
}
|
|
103
|
+
const detail = parseDetailLevel(detailForVerbosity) ?? defaults?.detail ?? "brief";
|
|
104
|
+
// Precedence: explicit `--shape` wins; then legacy `--detail summary|agent`;
|
|
105
|
+
// then legacy `--for-agent`; default `human`.
|
|
106
|
+
const shape = parseShapeMode(rawShape) ?? shapeFromLegacyDetail ?? (usedForAgent ? "agent" : "human");
|
|
107
|
+
return { format, detail, shape, forAgent: shape === "agent" };
|
|
108
|
+
}
|
|
109
|
+
/** Suppress deprecation warnings under `--quiet` (mirrors the rest of the CLI). */
|
|
110
|
+
function isQuietArgv() {
|
|
111
|
+
return process.argv.includes("--quiet") || process.argv.includes("-q");
|
|
112
|
+
}
|
|
113
|
+
function emitDetailShapeDeprecation(value) {
|
|
114
|
+
if (isQuietArgv())
|
|
115
|
+
return;
|
|
116
|
+
process.stderr.write(`warning: '--detail ${value}' is deprecated; use '--shape ${value}'. Removed in 0.9.0.\n`);
|
|
117
|
+
}
|
|
118
|
+
function emitForAgentDeprecation() {
|
|
119
|
+
if (isQuietArgv())
|
|
120
|
+
return;
|
|
121
|
+
process.stderr.write("warning: '--for-agent' is deprecated; use '--shape agent'. Removed in 0.9.0.\n");
|
|
70
122
|
}
|
|
71
123
|
let _mode;
|
|
72
124
|
/**
|