akm-cli 0.9.0-beta.6 → 0.9.0-rc.0
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 +663 -0
- package/README.md +12 -4
- package/dist/akm +38 -0
- package/dist/akm-migrate-storage +38 -0
- package/dist/assets/help/help-improve.md +9 -6
- package/dist/assets/hints/cli-hints-full.md +6 -5
- package/dist/assets/profiles/default.json +9 -4
- package/dist/assets/profiles/frequent.json +1 -1
- package/dist/assets/profiles/memory-focus.json +1 -1
- package/dist/assets/profiles/proactive-maintenance.json +25 -0
- package/dist/assets/profiles/quick.json +1 -1
- package/dist/assets/profiles/recombine-only.json +21 -0
- package/dist/assets/profiles/reflect-distill.json +30 -0
- package/dist/assets/profiles/synthesize.json +15 -0
- package/dist/assets/profiles/thorough.json +1 -1
- package/dist/assets/prompts/consolidate-system.md +23 -0
- package/dist/assets/prompts/contradiction-judge.md +33 -0
- package/dist/assets/prompts/distill-knowledge-system.md +22 -0
- package/dist/assets/prompts/distill-lesson-system.md +36 -0
- package/dist/assets/prompts/extract-session.md +11 -3
- package/dist/assets/prompts/graph-extract-system.md +1 -0
- package/dist/assets/prompts/graph-extract-user-prompt.md +1 -1
- package/dist/assets/prompts/memory-infer-system.md +1 -0
- package/dist/assets/prompts/memory-infer-user.md +5 -0
- package/dist/assets/prompts/metadata-enhance-system.md +1 -0
- package/dist/assets/prompts/procedural-system.md +44 -0
- package/dist/assets/prompts/recombine-system.md +40 -0
- package/dist/assets/prompts/staleness-detect-system.md +6 -0
- package/dist/assets/prompts/validate-summary-judge.md +1 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +38 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/command.md +38 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +39 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +40 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +43 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +38 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +43 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +40 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +43 -0
- package/dist/assets/templates/html/health.html +281 -111
- package/dist/assets/wiki/ingest-workflow-template.md +45 -16
- package/dist/assets/wiki/schema-template.md +4 -4
- package/dist/cli/clack.js +56 -0
- package/dist/cli/config-migrate.js +7 -1
- package/dist/cli/confirm.js +1 -1
- package/dist/cli/parse-args.js +46 -1
- package/dist/cli/shared.js +28 -0
- package/dist/cli.js +25 -14
- package/dist/commands/agent/agent-dispatch.js +3 -2
- package/dist/commands/agent/agent-support.js +0 -7
- package/dist/commands/agent/contribute-cli.js +26 -7
- package/dist/commands/config-cli.js +26 -13
- package/dist/commands/env/child-env.js +47 -0
- package/dist/commands/env/env-cli.js +220 -227
- package/dist/commands/env/env.js +14 -67
- package/dist/commands/env/secret-cli.js +140 -138
- package/dist/commands/feedback-cli.js +153 -147
- package/dist/commands/graph/graph-cli.js +5 -13
- package/dist/commands/graph/graph.js +76 -72
- package/dist/commands/health/advisories.js +151 -0
- package/dist/commands/health/checks.js +103 -16
- package/dist/commands/health/html-report.js +447 -81
- package/dist/commands/health/improve-metrics.js +771 -0
- package/dist/commands/health/llm-usage.js +65 -0
- package/dist/commands/health/md-report.js +103 -0
- package/dist/commands/health/metrics.js +278 -0
- package/dist/commands/health/stash-exposure.js +46 -0
- package/dist/commands/health/surfaces.js +216 -0
- package/dist/commands/health/task-runs.js +135 -0
- package/dist/commands/health/types.js +26 -0
- package/dist/commands/health/windows.js +195 -0
- package/dist/commands/health.js +91 -1083
- package/dist/commands/improve/anti-collapse.js +170 -0
- package/dist/commands/improve/calibration.js +161 -0
- package/dist/commands/improve/collapse-detector.js +421 -0
- package/dist/commands/improve/consolidate/chunking.js +141 -0
- package/dist/commands/improve/consolidate/eligibility.js +64 -0
- package/dist/commands/improve/consolidate/merge.js +145 -0
- package/dist/commands/improve/consolidate/sanitize.js +231 -0
- package/dist/commands/{lint.js → improve/consolidate/types.js} +1 -1
- package/dist/commands/improve/consolidate.js +1313 -1278
- package/dist/commands/improve/dedup.js +482 -0
- package/dist/commands/improve/distill/content-repair.js +202 -0
- package/dist/commands/improve/distill/promote-memory.js +229 -0
- package/dist/commands/improve/distill/quality-gate.js +236 -0
- package/dist/commands/improve/distill-guards.js +127 -0
- package/dist/commands/improve/distill-promotion-policy.js +826 -167
- package/dist/commands/improve/distill.js +243 -599
- package/dist/commands/improve/eligibility.js +434 -0
- package/dist/commands/improve/encoding-salience.js +205 -0
- package/dist/commands/improve/extract-cli.js +179 -59
- package/dist/commands/improve/extract-prompt.js +55 -4
- package/dist/commands/improve/extract-watch.js +140 -0
- package/dist/commands/improve/extract.js +409 -43
- package/dist/commands/improve/feedback-valence.js +54 -0
- package/dist/commands/improve/hot-probation.js +45 -0
- package/dist/commands/improve/improve-auto-accept.js +160 -7
- package/dist/commands/improve/improve-cli.js +115 -73
- package/dist/commands/improve/improve-profiles.js +32 -8
- package/dist/commands/improve/improve-result-file.js +15 -25
- package/dist/commands/improve/improve-session.js +58 -0
- package/dist/commands/improve/improve.js +510 -2537
- package/dist/commands/improve/locks.js +154 -0
- package/dist/commands/improve/loop-stages.js +1100 -0
- package/dist/commands/improve/memory/memory-belief.js +14 -15
- package/dist/commands/improve/memory/memory-contradiction-detect.js +83 -60
- package/dist/commands/improve/memory/memory-improve.js +27 -27
- package/dist/commands/improve/outcome-loop.js +270 -0
- package/dist/commands/improve/preparation.js +2002 -0
- package/dist/commands/improve/proactive-maintenance.js +115 -0
- package/dist/commands/improve/procedural.js +398 -0
- package/dist/commands/improve/recombine.js +818 -0
- package/dist/commands/improve/reflect-noise.js +0 -0
- package/dist/commands/improve/reflect.js +212 -45
- package/dist/commands/improve/salience.js +455 -0
- package/dist/commands/improve/schema-similarity-gate.js +168 -0
- package/dist/commands/improve/shared.js +51 -0
- package/dist/commands/improve/triage.js +93 -0
- package/dist/commands/lint/agent-linter.js +19 -24
- package/dist/commands/lint/base-linter.js +173 -60
- package/dist/commands/lint/command-linter.js +19 -24
- package/dist/commands/lint/env-key-rules.js +38 -1
- package/dist/commands/lint/fact-linter.js +39 -0
- package/dist/commands/lint/index.js +31 -13
- package/dist/commands/lint/memory-linter.js +1 -1
- package/dist/commands/lint/registry.js +7 -2
- package/dist/commands/lint/task-linter.js +3 -3
- package/dist/commands/lint/workflow-linter.js +26 -1
- package/dist/commands/observability-cli.js +4 -4
- package/dist/commands/proposal/drain-policies.js +13 -4
- package/dist/commands/proposal/drain.js +45 -51
- package/dist/commands/proposal/legacy-import.js +115 -0
- package/dist/commands/proposal/proposal-cli.js +24 -34
- package/dist/commands/proposal/proposal.js +7 -1
- package/dist/commands/proposal/propose.js +8 -3
- package/dist/commands/proposal/repository.js +829 -0
- package/dist/commands/proposal/validators/proposal-quality-validators.js +9 -8
- package/dist/commands/proposal/validators/proposals.js +93 -882
- package/dist/commands/read/curate.js +419 -103
- package/dist/commands/read/knowledge.js +10 -3
- package/dist/commands/read/remember-cli.js +133 -138
- package/dist/commands/read/search-cli.js +15 -8
- package/dist/commands/read/search.js +22 -11
- package/dist/commands/read/show.js +106 -14
- package/dist/commands/registry-cli.js +76 -87
- package/dist/commands/remember.js +11 -12
- package/dist/commands/sources/add-cli.js +91 -95
- package/dist/commands/sources/history.js +1 -1
- package/dist/commands/sources/init.js +66 -18
- package/dist/commands/sources/installed-stashes.js +11 -3
- package/dist/commands/sources/schema-repair.js +44 -46
- package/dist/commands/sources/self-update.js +2 -2
- package/dist/commands/sources/source-add.js +7 -3
- package/dist/commands/sources/sources-cli.js +3 -3
- package/dist/commands/sources/stash-cli.js +29 -41
- package/dist/commands/sources/stash-skeleton.js +57 -8
- package/dist/commands/tasks/default-tasks.js +15 -2
- package/dist/commands/tasks/tasks-cli.js +20 -29
- package/dist/commands/tasks/tasks.js +39 -11
- package/dist/commands/wiki-cli.js +23 -38
- package/dist/commands/workflow-cli.js +15 -1
- package/dist/core/asset/asset-registry.js +3 -1
- package/dist/core/asset/asset-spec.js +21 -4
- package/dist/core/asset/frontmatter.js +188 -167
- package/dist/core/asset/markdown.js +8 -0
- package/dist/core/authoring-rules.js +92 -0
- package/dist/core/common.js +4 -23
- package/dist/core/concurrent.js +10 -1
- package/dist/core/config/config-io.js +10 -1
- package/dist/core/config/config-migration.js +18 -40
- package/dist/core/config/config-schema.js +389 -58
- package/dist/core/config/config-types.js +3 -3
- package/dist/core/config/config.js +67 -22
- package/dist/core/deep-merge.js +38 -0
- package/dist/core/errors.js +1 -0
- package/dist/core/eval/rank-metrics.js +113 -0
- package/dist/core/events.js +4 -7
- package/dist/core/improve-types.js +47 -8
- package/dist/core/logs-db.js +14 -75
- package/dist/core/parse.js +36 -16
- package/dist/core/paths.js +21 -18
- package/dist/core/standards/resolve-standards-context.js +87 -0
- package/dist/core/standards/resolve-stash-standards.js +99 -0
- package/dist/core/standards/resolve-type-conventions.js +66 -0
- package/dist/core/state/migrations.js +770 -0
- package/dist/core/state-db.js +142 -1091
- package/dist/core/structured.js +69 -0
- package/dist/core/time.js +53 -0
- package/dist/core/warn.js +21 -0
- package/dist/core/write-source.js +37 -0
- package/dist/indexer/db/db.js +356 -780
- package/dist/indexer/db/entry-mapper.js +41 -0
- package/dist/indexer/db/graph-db.js +129 -86
- package/dist/indexer/db/llm-cache.js +2 -2
- package/dist/indexer/db/schema.js +516 -0
- package/dist/indexer/ensure-index.js +103 -24
- package/dist/indexer/feedback/utility-policy.js +75 -0
- package/dist/indexer/graph/graph-boost.js +51 -41
- package/dist/indexer/graph/graph-extraction.js +207 -4
- package/dist/indexer/index-writer-lock.js +106 -0
- package/dist/indexer/index-written-assets.js +105 -0
- package/dist/indexer/indexer.js +291 -310
- package/dist/indexer/passes/dir-staleness.js +114 -0
- package/dist/indexer/passes/memory-inference.js +13 -5
- package/dist/indexer/passes/metadata.js +20 -0
- package/dist/indexer/read-preflight.js +23 -0
- package/dist/indexer/search/db-search.js +89 -13
- package/dist/indexer/search/fts-query.js +51 -0
- package/dist/indexer/search/ranking-contributors.js +95 -9
- package/dist/indexer/search/ranking.js +79 -3
- package/dist/indexer/search/search-fields.js +6 -0
- package/dist/indexer/search/search-source.js +32 -21
- package/dist/indexer/search/semantic-status.js +4 -0
- package/dist/indexer/walk/matchers.js +9 -0
- package/dist/indexer/walk/walker.js +21 -13
- package/dist/integrations/agent/builders.js +39 -13
- package/dist/integrations/agent/config.js +20 -59
- package/dist/integrations/agent/detect.js +9 -0
- package/dist/integrations/agent/index.js +3 -19
- package/dist/integrations/agent/model-aliases.js +7 -2
- package/dist/integrations/agent/profiles.js +7 -1
- package/dist/integrations/agent/prompts.js +75 -9
- package/dist/integrations/agent/runner-dispatch.js +59 -0
- package/dist/integrations/agent/runner.js +13 -9
- package/dist/integrations/agent/spawn.js +69 -67
- package/dist/integrations/harnesses/claude/agent-builder.js +1 -1
- package/dist/integrations/harnesses/claude/index.js +2 -0
- package/dist/integrations/harnesses/claude/session-log.js +11 -1
- package/dist/integrations/harnesses/index.js +2 -3
- package/dist/integrations/harnesses/opencode/agent-builder.js +1 -1
- package/dist/integrations/harnesses/opencode/index.js +2 -0
- package/dist/integrations/harnesses/opencode/session-log.js +173 -3
- package/dist/integrations/harnesses/opencode-sdk/index.js +2 -2
- package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +98 -17
- package/dist/integrations/harnesses/types.js +1 -0
- package/dist/integrations/session-logs/index.js +16 -0
- package/dist/llm/call-ai.js +2 -2
- package/dist/llm/client.js +57 -15
- package/dist/llm/embedder.js +67 -4
- package/dist/llm/embedders/cache.js +3 -1
- package/dist/llm/embedders/deterministic.js +66 -0
- package/dist/llm/embedders/local.js +73 -3
- package/dist/llm/feature-gate.js +16 -15
- package/dist/llm/graph-extract.js +67 -44
- package/dist/llm/memory-infer-impl.js +138 -0
- package/dist/llm/memory-infer.js +1 -127
- package/dist/llm/metadata-enhance.js +44 -31
- package/dist/llm/structured-call.js +49 -0
- package/dist/migrate-storage-node.mjs +8 -0
- package/dist/output/context.js +5 -5
- package/dist/output/renderers.js +85 -14
- package/dist/output/shapes/curate.js +14 -2
- package/dist/output/shapes/helpers.js +0 -3
- package/dist/output/shapes/passthrough.js +2 -1
- package/dist/output/text/helpers.js +29 -1
- package/dist/output/text/workflow.js +1 -0
- package/dist/registry/providers/skills-sh.js +21 -147
- package/dist/registry/providers/static-index.js +15 -157
- package/dist/registry/resolve.js +27 -9
- package/dist/runtime.js +25 -1
- package/dist/scripts/migrate-storage.js +2718 -2354
- package/dist/scripts/migrations/import-fs-improve-runs-to-db.js +891 -597
- package/dist/setup/detect.js +9 -0
- package/dist/setup/legacy-config.js +106 -0
- package/dist/setup/prompt.js +57 -0
- package/dist/setup/providers.js +14 -0
- package/dist/setup/registry-stash-loader.js +12 -0
- package/dist/setup/semantic-assets.js +124 -0
- package/dist/setup/setup.js +52 -1614
- package/dist/setup/steps/connection.js +734 -0
- package/dist/setup/steps/output.js +31 -0
- package/dist/setup/steps/platforms.js +124 -0
- package/dist/setup/steps/semantic.js +27 -0
- package/dist/setup/steps/sources.js +222 -0
- package/dist/setup/steps/stashdir.js +42 -0
- package/dist/setup/steps/tasks.js +152 -0
- package/dist/sources/include.js +6 -2
- package/dist/sources/providers/filesystem.js +0 -1
- package/dist/sources/providers/git-install.js +210 -0
- package/dist/sources/providers/git-provider.js +234 -0
- package/dist/sources/providers/git-stash.js +248 -0
- package/dist/sources/providers/git.js +10 -661
- package/dist/sources/providers/npm.js +2 -6
- package/dist/sources/providers/provider-utils.js +13 -7
- package/dist/sources/providers/sync-from-ref.js +9 -1
- package/dist/sources/providers/tar-utils.js +16 -8
- package/dist/sources/providers/website.js +9 -5
- package/dist/sources/website-ingest.js +187 -29
- package/dist/sources/wiki-fetchers/registry.js +53 -0
- package/dist/sources/wiki-fetchers/youtube.js +239 -0
- package/dist/storage/database.js +45 -10
- package/dist/storage/managed-db.js +82 -0
- package/dist/storage/repositories/canaries-repository.js +107 -0
- package/dist/storage/repositories/consolidation-repository.js +38 -0
- package/dist/storage/repositories/embeddings-repository.js +72 -0
- package/dist/storage/repositories/events-repository.js +187 -0
- package/dist/storage/repositories/extract-sessions-repository.js +96 -0
- package/dist/storage/repositories/improve-runs-repository.js +146 -0
- package/dist/storage/repositories/index-db.js +14 -8
- package/dist/storage/repositories/proposals-repository.js +220 -0
- package/dist/storage/repositories/recombine-repository.js +213 -0
- package/dist/storage/repositories/registry-cache.js +93 -0
- package/dist/storage/repositories/registry-index-cache-repository.js +46 -0
- package/dist/storage/repositories/task-history-repository.js +93 -0
- package/dist/storage/sqlite-pragmas.js +146 -0
- package/dist/tasks/backends/cron.js +1 -1
- package/dist/tasks/backends/index.js +9 -0
- package/dist/tasks/backends/launchd.js +1 -1
- package/dist/tasks/backends/schtasks.js +1 -1
- package/dist/tasks/{resolveAkmBin.js → resolve-akm-bin.js} +2 -2
- package/dist/tasks/runner.js +15 -13
- package/dist/text-import-hook.mjs +0 -0
- package/dist/wiki/wiki.js +52 -11
- package/dist/workflows/cli.js +1 -0
- package/dist/workflows/db.js +3 -4
- package/dist/workflows/runtime/runs.js +43 -118
- package/dist/workflows/runtime/workflow-asset-loader.js +125 -0
- package/dist/workflows/validate-summary.js +2 -7
- package/docs/README.md +69 -18
- package/docs/data-and-telemetry.md +5 -4
- package/docs/migration/release-notes/0.7.0.md +1 -1
- package/docs/migration/release-notes/0.9.0.md +39 -0
- package/package.json +10 -10
- package/dist/assets/tasks/core/update-stashes.yml +0 -4
- package/dist/commands/db-cli.js +0 -23
- package/dist/indexer/db/db-backup.js +0 -376
- package/dist/indexer/passes/staleness-detect.js +0 -488
|
@@ -7,10 +7,14 @@ import profileDefault from "../../assets/profiles/default.json" with { type: "js
|
|
|
7
7
|
import profileFrequent from "../../assets/profiles/frequent.json" with { type: "json" };
|
|
8
8
|
import profileGraphRefresh from "../../assets/profiles/graph-refresh.json" with { type: "json" };
|
|
9
9
|
import profileMemoryFocus from "../../assets/profiles/memory-focus.json" with { type: "json" };
|
|
10
|
+
import profileProactiveMaintenance from "../../assets/profiles/proactive-maintenance.json" with { type: "json" };
|
|
10
11
|
import profileQuick from "../../assets/profiles/quick.json" with { type: "json" };
|
|
12
|
+
import profileRecombineOnly from "../../assets/profiles/recombine-only.json" with { type: "json" };
|
|
13
|
+
import profileReflectDistill from "../../assets/profiles/reflect-distill.json" with { type: "json" };
|
|
14
|
+
import profileSynthesize from "../../assets/profiles/synthesize.json" with { type: "json" };
|
|
11
15
|
import profileThorough from "../../assets/profiles/thorough.json" with { type: "json" };
|
|
12
16
|
import { parseAssetRef } from "../../core/asset/asset-ref.js";
|
|
13
|
-
import {
|
|
17
|
+
import { ConfigError } from "../../core/errors.js";
|
|
14
18
|
/** Profile name used as the final fallback when nothing else resolves. */
|
|
15
19
|
const FALLBACK_PROFILE_NAME = "default";
|
|
16
20
|
// Built-in default allowed types per process
|
|
@@ -31,6 +35,10 @@ const BUILTIN_PROFILES = {
|
|
|
31
35
|
frequent: profileFrequent,
|
|
32
36
|
consolidate: profileConsolidate,
|
|
33
37
|
catchup: profileCatchup,
|
|
38
|
+
synthesize: profileSynthesize,
|
|
39
|
+
"reflect-distill": profileReflectDistill,
|
|
40
|
+
"proactive-maintenance": profileProactiveMaintenance,
|
|
41
|
+
"recombine-only": profileRecombineOnly,
|
|
34
42
|
};
|
|
35
43
|
/**
|
|
36
44
|
* Default enabled-state for known improve processes when neither the user
|
|
@@ -54,6 +62,18 @@ const IMPROVE_PROCESS_DEFAULTS = {
|
|
|
54
62
|
// proposal-queue triage drains the standing backlog. Opt-in (default off),
|
|
55
63
|
// like `validation` — needs an explicit `enabled: true`.
|
|
56
64
|
triage: false,
|
|
65
|
+
// Layer 2 proactive-maintenance selector. Opt-in (default off) — surfaces
|
|
66
|
+
// stale high-value assets on a schedule. Enable per-profile with an explicit
|
|
67
|
+
// `processes.proactiveMaintenance.enabled: true`.
|
|
68
|
+
proactiveMaintenance: false,
|
|
69
|
+
// #609 recombine / synthesize pass — whole-corpus cross-episodic
|
|
70
|
+
// generalization. Opt-in (default off); enable per-profile with an explicit
|
|
71
|
+
// `processes.recombine.enabled: true`.
|
|
72
|
+
recombine: false,
|
|
73
|
+
// #615 procedural-compilation pass — detects recurring successful ordered
|
|
74
|
+
// action sequences and compiles them into workflow proposals. Opt-in (default
|
|
75
|
+
// off); enable per-profile with an explicit `processes.procedural.enabled: true`.
|
|
76
|
+
procedural: false,
|
|
57
77
|
};
|
|
58
78
|
/**
|
|
59
79
|
* Compute the effective enabled-state for a named improve process.
|
|
@@ -96,14 +116,18 @@ export function resolveImproveProfile(name, config) {
|
|
|
96
116
|
FALLBACK_PROFILE_NAME;
|
|
97
117
|
const hasBuiltin = requestedName in BUILTIN_PROFILES;
|
|
98
118
|
const hasUserDefined = !!config.profiles?.improve?.[requestedName];
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
119
|
+
// An unknown profile name is a HARD error. Silently falling back to the
|
|
120
|
+
// default (proactive-off) profile is the −96% incident class: a cron pinned
|
|
121
|
+
// to `--profile reflect-distill` ran the default for weeks because the name
|
|
122
|
+
// only existed in one host's config and the resolver swallowed the miss.
|
|
123
|
+
if (!hasBuiltin && !hasUserDefined) {
|
|
124
|
+
const valid = [
|
|
125
|
+
...new Set([...Object.keys(BUILTIN_PROFILES), ...Object.keys(config.profiles?.improve ?? {})]),
|
|
126
|
+
].sort();
|
|
127
|
+
throw new ConfigError(`Improve profile "${requestedName}" not found. Valid profiles: ${valid.join(", ")}.`, "UNKNOWN_IMPROVE_PROFILE");
|
|
104
128
|
}
|
|
105
|
-
const builtin = BUILTIN_PROFILES[
|
|
106
|
-
const userOverride = config.profiles?.improve?.[
|
|
129
|
+
const builtin = BUILTIN_PROFILES[requestedName] ?? BUILTIN_PROFILES[FALLBACK_PROFILE_NAME];
|
|
130
|
+
const userOverride = config.profiles?.improve?.[requestedName] ?? {};
|
|
107
131
|
return deepMerge(builtin, userOverride);
|
|
108
132
|
}
|
|
109
133
|
export function shouldSkipRef(ref, processName, profile) {
|
|
@@ -27,7 +27,8 @@
|
|
|
27
27
|
*/
|
|
28
28
|
import crypto from "node:crypto";
|
|
29
29
|
import path from "node:path";
|
|
30
|
-
import {
|
|
30
|
+
import { withStateDb } from "../../core/state-db.js";
|
|
31
|
+
import { recordImproveRun } from "../../storage/repositories/improve-runs-repository.js";
|
|
31
32
|
/**
|
|
32
33
|
* Build a stable run-id for a single improve invocation.
|
|
33
34
|
*
|
|
@@ -72,10 +73,16 @@ export function relativeImproveResultPath(runId) {
|
|
|
72
73
|
* dry-run column is indexed so productivity audits can filter cleanly
|
|
73
74
|
* (closes the dry-run/real-run artifact-trap recorded in MEMORY.md
|
|
74
75
|
* `feedback_akm_dryrun_artifact_trap`).
|
|
76
|
+
*
|
|
77
|
+
* @param profile - The `--profile` value passed to this invocation (e.g.
|
|
78
|
+
* `quick`, `reflect-distill`), or `null`/`undefined` when no profile was
|
|
79
|
+
* given. Mirrors {@link recordTerminatedImproveRun}'s `ctx.profile`
|
|
80
|
+
* convention so successful and terminated runs are equally queryable by
|
|
81
|
+
* profile. Previously hardcoded to `null` here, which meant only
|
|
82
|
+
* abnormally-terminated runs recorded their profile in state.db.
|
|
75
83
|
*/
|
|
76
|
-
export function writeImproveResultFile(stashDir, runId, result, startedAt) {
|
|
77
|
-
|
|
78
|
-
try {
|
|
84
|
+
export function writeImproveResultFile(stashDir, runId, result, startedAt, profile) {
|
|
85
|
+
withStateDb((db) => {
|
|
79
86
|
const completedAt = new Date().toISOString();
|
|
80
87
|
// startedAt is the ISO timestamp captured at process launch (passed from the
|
|
81
88
|
// CLI entry point). If omitted, fall back to the run-id's embedded timestamp
|
|
@@ -88,22 +95,14 @@ export function writeImproveResultFile(stashDir, runId, result, startedAt) {
|
|
|
88
95
|
completedAt,
|
|
89
96
|
stashDir,
|
|
90
97
|
dryRun: Boolean(result.dryRun),
|
|
91
|
-
profile: null,
|
|
98
|
+
profile: profile ?? null,
|
|
92
99
|
scopeMode: result.scope?.mode ?? "all",
|
|
93
100
|
scopeValue: result.scope?.value ?? null,
|
|
94
101
|
guidance: result.guidance ?? null,
|
|
95
102
|
ok: Boolean(result.ok),
|
|
96
103
|
result,
|
|
97
104
|
});
|
|
98
|
-
}
|
|
99
|
-
finally {
|
|
100
|
-
try {
|
|
101
|
-
db.close();
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
// best-effort
|
|
105
|
-
}
|
|
106
|
-
}
|
|
105
|
+
});
|
|
107
106
|
return relativeImproveResultPath(runId);
|
|
108
107
|
}
|
|
109
108
|
/**
|
|
@@ -138,8 +137,7 @@ export function recordTerminatedImproveRun(stashDir, runId, startedAt, reason, c
|
|
|
138
137
|
...(ctx?.errorMessage ? { errorMessage: ctx.errorMessage } : {}),
|
|
139
138
|
},
|
|
140
139
|
};
|
|
141
|
-
|
|
142
|
-
try {
|
|
140
|
+
withStateDb((db) => {
|
|
143
141
|
recordImproveRun(db, {
|
|
144
142
|
id: runId,
|
|
145
143
|
startedAt,
|
|
@@ -160,13 +158,5 @@ export function recordTerminatedImproveRun(stashDir, runId, startedAt, reason, c
|
|
|
160
158
|
},
|
|
161
159
|
},
|
|
162
160
|
});
|
|
163
|
-
}
|
|
164
|
-
finally {
|
|
165
|
-
try {
|
|
166
|
-
db.close();
|
|
167
|
-
}
|
|
168
|
-
catch {
|
|
169
|
-
// best-effort
|
|
170
|
-
}
|
|
171
|
-
}
|
|
161
|
+
});
|
|
172
162
|
}
|
|
@@ -0,0 +1,58 @@
|
|
|
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
|
+
/** Signal -> {exit code, reason, ack message}. */
|
|
5
|
+
export const SIGNAL_TABLE = {
|
|
6
|
+
SIGTERM: { code: 143, reason: "SIGTERM", ack: true },
|
|
7
|
+
SIGINT: { code: 130, reason: "SIGINT", ack: true },
|
|
8
|
+
SIGHUP: { code: 129, reason: "SIGHUP", ack: false },
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Drive the improve-run lifecycle: register signal handlers, await `runWork`,
|
|
12
|
+
* and on clean completion remove the handlers and resolve with the result. The
|
|
13
|
+
* caller (improve-cli.ts) owns success-path result persistence + the final
|
|
14
|
+
* `exit(0)`; this function returns the work result so that choreography stays
|
|
15
|
+
* in the CLI exactly as before.
|
|
16
|
+
*
|
|
17
|
+
* Abnormal paths:
|
|
18
|
+
* - A registered signal fires -> persist terminated row (watchdog-guarded) ->
|
|
19
|
+
* optional ack -> `exit(code)`.
|
|
20
|
+
* - `runWork` rejects -> handlers are removed and the rejection propagates so
|
|
21
|
+
* the CLI's existing catch can persist `"exception"` and rethrow.
|
|
22
|
+
*/
|
|
23
|
+
export async function runImproveSession(opts, deps) {
|
|
24
|
+
const { signalSource, exit, onTerminate, ack } = deps;
|
|
25
|
+
const makeSignalHandler = (sig) => () => {
|
|
26
|
+
const { code, reason, ack: shouldAck } = SIGNAL_TABLE[sig];
|
|
27
|
+
// Hard-exit fallback: if the synchronous persist ever hangs (e.g. a stuck
|
|
28
|
+
// sqlite lock under contention), the watchdog still exits with the correct
|
|
29
|
+
// code instead of leaving a zombie process. .unref() keeps the timer from
|
|
30
|
+
// holding the loop open on the normal (fast) path.
|
|
31
|
+
const watchdog = setTimeout(() => exit(code), 2000);
|
|
32
|
+
if (typeof watchdog.unref === "function")
|
|
33
|
+
watchdog.unref();
|
|
34
|
+
try {
|
|
35
|
+
onTerminate(reason);
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
clearTimeout(watchdog);
|
|
39
|
+
}
|
|
40
|
+
if (shouldAck)
|
|
41
|
+
ack?.(`received ${sig}`);
|
|
42
|
+
exit(code);
|
|
43
|
+
};
|
|
44
|
+
const sigtermHandler = makeSignalHandler("SIGTERM");
|
|
45
|
+
const sigintHandler = makeSignalHandler("SIGINT");
|
|
46
|
+
const sighupHandler = makeSignalHandler("SIGHUP");
|
|
47
|
+
signalSource.once("SIGTERM", sigtermHandler);
|
|
48
|
+
signalSource.once("SIGINT", sigintHandler);
|
|
49
|
+
signalSource.once("SIGHUP", sighupHandler);
|
|
50
|
+
try {
|
|
51
|
+
return await opts.runWork();
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
signalSource.removeListener("SIGTERM", sigtermHandler);
|
|
55
|
+
signalSource.removeListener("SIGINT", sigintHandler);
|
|
56
|
+
signalSource.removeListener("SIGHUP", sighupHandler);
|
|
57
|
+
}
|
|
58
|
+
}
|