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
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* Pulled out of `embedder.ts` so concrete implementations (`local.ts`,
|
|
5
|
-
* `remote.ts`) and the cache layer can depend on a small, stable types
|
|
6
|
-
* module without dragging in the facade or a sibling implementation.
|
|
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
|
/**
|
|
9
5
|
* Cosine similarity between two embedding vectors.
|
|
10
6
|
*
|
package/dist/llm/feature-gate.js
CHANGED
|
@@ -1,74 +1,62 @@
|
|
|
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
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Every bounded in-tree LLM call site in akm is addressed by exactly one
|
|
5
|
-
* feature key under `llm.features.*`. This module is the single seam call
|
|
6
|
-
* sites use to ask "should I run?" and "if I run and fail, what do I return?"
|
|
7
|
-
*
|
|
8
|
-
* The seam is intentionally tiny:
|
|
9
|
-
*
|
|
10
|
-
* - `isLlmFeatureEnabled(config, feature)` — pure predicate, no side
|
|
11
|
-
* effects, no I/O. Returns `true` when the feature flag is explicitly
|
|
12
|
-
* `true`, or when the feature has a non-false default (currently
|
|
13
|
-
* `graph_extraction`).
|
|
14
|
-
* - `tryLlmFeature(feature, config, fn, fallback, opts?)` — single-call
|
|
15
|
-
* wrapper that runs `fn()` only when the gate is open, enforces a hard
|
|
16
|
-
* timeout (default 600s — overridable per call via `opts.timeoutMs`),
|
|
17
|
-
* and returns `fallback` on disablement, throw, or timeout. The wrapper
|
|
18
|
-
* is referentially transparent for any given (gate-state, fn-result)
|
|
19
|
-
* pair: no module state is mutated.
|
|
20
|
-
*
|
|
21
|
-
* Statelessness invariant (v1 spec §14.4): nothing in this module holds
|
|
22
|
-
* state across calls. There are no caches, no module-level singletons, no
|
|
23
|
-
* persistent connections. The architecture seam test
|
|
24
|
-
* (`tests/architecture/llm-stateless-seam.test.ts`) does not currently
|
|
25
|
-
* inspect this file but the same rule applies — keep all exports as pure
|
|
26
|
-
* functions.
|
|
5
|
+
* For each feature key, return the effective enabled state by reading the
|
|
6
|
+
* new 0.8.0 config shape. Defaults match the legacy `LlmFeatureFlags` docstrings.
|
|
27
7
|
*/
|
|
8
|
+
// Defaults below mirror the legacy LlmFeatureFlags docstrings so existing
|
|
9
|
+
// behaviour is preserved when a config is silent on a flag.
|
|
10
|
+
const FEATURE_LOCATION = {
|
|
11
|
+
// Legacy default: false → memory_consolidation only runs when explicitly enabled
|
|
12
|
+
// (either via the user's improve profile or the built-in `default` profile).
|
|
13
|
+
memory_consolidation: (cfg) => cfg.profiles?.improve?.default?.processes?.consolidate?.enabled ?? false,
|
|
14
|
+
// 0.8.0 unified gate: replaces the legacy `feedback_distillation` key.
|
|
15
|
+
// The orchestration gate (planner) and the LLM-call gate now share the same
|
|
16
|
+
// source of truth: `processes.distill.enabled`. Default: true (matches the
|
|
17
|
+
// built-in `default` profile).
|
|
18
|
+
distill: (cfg) => cfg.profiles?.improve?.default?.processes?.distill?.enabled ?? true,
|
|
19
|
+
// Legacy default: true
|
|
20
|
+
memory_inference: (cfg) => cfg.profiles?.improve?.default?.processes?.memoryInference?.enabled ?? true,
|
|
21
|
+
// Legacy default: true
|
|
22
|
+
graph_extraction: (cfg) => cfg.profiles?.improve?.default?.processes?.graphExtraction?.enabled ?? true,
|
|
23
|
+
// Legacy default: false
|
|
24
|
+
metadata_enhance: (cfg) => cfg.index?.metadataEnhance?.enabled ?? false,
|
|
25
|
+
// Legacy default: false
|
|
26
|
+
curate_rerank: (cfg) => cfg.search?.curateRerank?.enabled ?? false,
|
|
27
|
+
// Legacy default: false
|
|
28
|
+
lesson_quality_gate: (cfg) => cfg.profiles?.improve?.default?.processes?.distill?.qualityGate?.enabled ?? false,
|
|
29
|
+
// Legacy default: false
|
|
30
|
+
proposal_quality_gate: (cfg) => cfg.profiles?.improve?.default?.processes?.reflect?.qualityGate?.enabled ?? false,
|
|
31
|
+
// Legacy default: false
|
|
32
|
+
memory_contradiction_detection: (cfg) => cfg.profiles?.improve?.default?.processes?.consolidate?.contradictionDetection?.enabled ?? false,
|
|
33
|
+
// Default: true. Session extraction replaces the akm-plugin checkpoint hook
|
|
34
|
+
// and is the primary path for capturing durable signal from real sessions.
|
|
35
|
+
// Opt out via `profiles.improve.default.processes.extract.enabled: false`.
|
|
36
|
+
session_extraction: (cfg) => cfg.profiles?.improve?.default?.processes?.extract?.enabled ?? true,
|
|
37
|
+
};
|
|
28
38
|
/**
|
|
29
|
-
* Pure predicate: is the named feature gate
|
|
39
|
+
* Pure predicate: is the named feature gate enabled in `config`?
|
|
30
40
|
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
41
|
+
* Reads from the unified 0.8.0 config shape. Defaults follow the legacy
|
|
42
|
+
* `LlmFeatureFlags` docstring defaults.
|
|
33
43
|
*/
|
|
34
|
-
const FEATURE_DEFAULTS = {
|
|
35
|
-
memory_inference: true,
|
|
36
|
-
graph_extraction: true,
|
|
37
|
-
};
|
|
38
44
|
export function isLlmFeatureEnabled(config, feature) {
|
|
39
|
-
|
|
40
|
-
if (configured === true)
|
|
41
|
-
return true;
|
|
42
|
-
if (configured === false)
|
|
45
|
+
if (!config)
|
|
43
46
|
return false;
|
|
44
|
-
|
|
47
|
+
const resolver = FEATURE_LOCATION[feature];
|
|
48
|
+
if (!resolver)
|
|
49
|
+
return false;
|
|
50
|
+
return resolver(config);
|
|
45
51
|
}
|
|
46
52
|
/**
|
|
47
|
-
* Default hard timeout for every bounded in-tree LLM call.
|
|
48
|
-
* (600 000 ms) — generous enough for a slow local model on a single-threaded
|
|
49
|
-
* server. Override per-call via `TryLlmFeatureOptions.timeoutMs`.
|
|
50
|
-
*
|
|
51
|
-
* Do NOT reduce this default without a documented user-facing reason — local
|
|
52
|
-
* model users need the headroom.
|
|
53
|
+
* Default hard timeout for every bounded in-tree LLM call.
|
|
53
54
|
*/
|
|
54
55
|
const DEFAULT_TIMEOUT_MS = 600_000;
|
|
55
56
|
/**
|
|
56
57
|
* Run `fn()` only if `isLlmFeatureEnabled(config, feature)` is `true`. On
|
|
57
58
|
* disablement, throw, or timeout, return `fallback` (or — if it is a
|
|
58
59
|
* thunk — the value produced by calling it).
|
|
59
|
-
*
|
|
60
|
-
* The fallback may be a value or a synchronous/async function returning a
|
|
61
|
-
* value. The thunk form lets call sites encode "run the deterministic
|
|
62
|
-
* pipeline" without paying for it in the success path:
|
|
63
|
-
*
|
|
64
|
-
* ```ts
|
|
65
|
-
* const ranked = await tryLlmFeature(
|
|
66
|
-
* "curate_rerank",
|
|
67
|
-
* config,
|
|
68
|
-
* () => llmRerank(candidates),
|
|
69
|
-
* () => deterministicRerank(candidates),
|
|
70
|
-
* );
|
|
71
|
-
* ```
|
|
72
60
|
*/
|
|
73
61
|
export async function tryLlmFeature(feature, config, fn, fallback, opts) {
|
|
74
62
|
const resolveFallback = async () => typeof fallback === "function" ? await fallback() : fallback;
|
|
@@ -90,6 +78,54 @@ export async function tryLlmFeature(feature, config, fn, fallback, opts) {
|
|
|
90
78
|
return resolveFallback();
|
|
91
79
|
}
|
|
92
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Section-agnostic process gate. After the 0.8.0 migration, the canonical
|
|
83
|
+
* accessor is the `FEATURE_LOCATION` map above; this helper exists so older
|
|
84
|
+
* call sites that knew the (section, processName) pair don't all need to
|
|
85
|
+
* relearn the new mapping.
|
|
86
|
+
*
|
|
87
|
+
* For unknown (section, processName) pairs the result is `false`.
|
|
88
|
+
*/
|
|
89
|
+
export function isProcessEnabled(section, processName, config) {
|
|
90
|
+
if (!config)
|
|
91
|
+
return false;
|
|
92
|
+
// index.metadataEnhance / index.stalenessDetection are first-class new-shape entries.
|
|
93
|
+
if (section === "index") {
|
|
94
|
+
if (processName === "metadata_enhance" || processName === "metadataEnhance") {
|
|
95
|
+
return config.index?.metadataEnhance?.enabled ?? true;
|
|
96
|
+
}
|
|
97
|
+
if (processName === "staleness_detection" || processName === "stalenessDetection") {
|
|
98
|
+
return config.index?.stalenessDetection?.enabled ?? false;
|
|
99
|
+
}
|
|
100
|
+
if (processName === "memory_inference" || processName === "memoryInference") {
|
|
101
|
+
return isLlmFeatureEnabled(config, "memory_inference");
|
|
102
|
+
}
|
|
103
|
+
if (processName === "graph_extraction" || processName === "graphExtraction") {
|
|
104
|
+
return isLlmFeatureEnabled(config, "graph_extraction");
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (section === "search" && (processName === "curate_rerank" || processName === "curateRerank")) {
|
|
108
|
+
return config.search?.curateRerank?.enabled ?? false;
|
|
109
|
+
}
|
|
110
|
+
if (section === "improve") {
|
|
111
|
+
const processes = config.profiles?.improve?.default?.processes;
|
|
112
|
+
const entry = processes?.[processName];
|
|
113
|
+
if (entry && typeof entry.enabled === "boolean")
|
|
114
|
+
return entry.enabled;
|
|
115
|
+
// Fallback to default-enabled state for known processes.
|
|
116
|
+
switch (processName) {
|
|
117
|
+
case "reflect":
|
|
118
|
+
case "distill":
|
|
119
|
+
case "consolidate":
|
|
120
|
+
case "memoryInference":
|
|
121
|
+
case "graphExtraction":
|
|
122
|
+
return true;
|
|
123
|
+
default:
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
93
129
|
/** Specific error class so call sites and the wrapper can tell timeouts apart from generic throws. */
|
|
94
130
|
export class LlmFeatureTimeoutError extends Error {
|
|
95
131
|
feature;
|