@lesliechan721/aw 0.1.0-beta.63 → 0.1.0-beta.65
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/dist/authoring/assets/aw-runtime-config.mjs +3 -3
- package/dist/authoring/assets/aw-runtime-config.mjs.map +1 -1
- package/dist/authoring/scripts/add-skill.mjs +3 -17
- package/dist/authoring/scripts/add-skill.mjs.map +1 -1
- package/dist/authoring/scripts/init-plugin.mjs +1 -0
- package/dist/authoring/scripts/init-plugin.mjs.map +1 -1
- package/dist/authoring/scripts/lib/plugin-version-check.mjs +1 -1
- package/dist/authoring/scripts/lib/skill-scaffold.d.mts +2 -0
- package/dist/authoring/scripts/lib/skill-scaffold.mjs +2 -0
- package/dist/authoring/scripts/lib/skill-scaffold.mjs.map +1 -1
- package/dist/authoring/scripts/validate-plugin.mjs +95 -698
- package/dist/authoring/scripts/validate-plugin.mjs.map +1 -1
- package/dist/scripts/aw-skill-eval-materializer.d.ts +2 -0
- package/dist/scripts/aw-skill-eval-materializer.js +74 -44
- package/dist/scripts/aw-skill-eval-materializer.js.map +1 -1
- package/dist/scripts/bundle-plugins.js +10 -2
- package/dist/scripts/bundle-plugins.js.map +1 -1
- package/dist/scripts/plugin-staging.d.ts +1 -1
- package/dist/scripts/plugin-staging.js +1 -1
- package/dist/scripts/plugin-staging.js.map +1 -1
- package/dist/scripts/test-plugin-scripts.js +31 -31
- package/dist/scripts/test-plugin-scripts.js.map +1 -1
- package/dist/src/commands/aw-capabilities.d.ts +1 -1
- package/dist/src/commands/aw-capabilities.js +2 -0
- package/dist/src/commands/aw-capabilities.js.map +1 -1
- package/dist/src/commands/console.js +4 -3
- package/dist/src/commands/console.js.map +1 -1
- package/dist/src/commands/intent-command.d.ts +30 -0
- package/dist/src/commands/intent-command.js +164 -0
- package/dist/src/commands/intent-command.js.map +1 -0
- package/dist/src/commands/operation-plan.d.ts +2 -0
- package/dist/src/commands/operation-plan.js +2 -1
- package/dist/src/commands/operation-plan.js.map +1 -1
- package/dist/src/commands/options.d.ts +3 -11
- package/dist/src/commands/options.js +11 -17
- package/dist/src/commands/options.js.map +1 -1
- package/dist/src/commands/plugin-capabilities.js +27 -33
- package/dist/src/commands/plugin-capabilities.js.map +1 -1
- package/dist/src/commands/rebuild-command.d.ts +108 -6
- package/dist/src/commands/rebuild-command.js +617 -1549
- package/dist/src/commands/rebuild-command.js.map +1 -1
- package/dist/src/commands/rebuild-integration.d.ts +19 -3
- package/dist/src/commands/rebuild-integration.js +500 -459
- package/dist/src/commands/rebuild-integration.js.map +1 -1
- package/dist/src/commands/rebuild-operations.js +1 -2
- package/dist/src/commands/rebuild-operations.js.map +1 -1
- package/dist/src/commands/review-inspection.d.ts +2 -2
- package/dist/src/commands/review-inspection.js +30 -86
- package/dist/src/commands/review-inspection.js.map +1 -1
- package/dist/src/commands/review-preparation.js +16 -7
- package/dist/src/commands/review-preparation.js.map +1 -1
- package/dist/src/commands/skill-eval.d.ts +2 -0
- package/dist/src/commands/skill-eval.js +15 -9
- package/dist/src/commands/skill-eval.js.map +1 -1
- package/dist/src/commands/status-v6.d.ts +38 -5
- package/dist/src/commands/status-v6.js +269 -102
- package/dist/src/commands/status-v6.js.map +1 -1
- package/dist/src/commands/targets-command.d.ts +27 -0
- package/dist/src/commands/targets-command.js +77 -0
- package/dist/src/commands/targets-command.js.map +1 -0
- package/dist/src/commands/write-commands.js +5 -5
- package/dist/src/commands/write-commands.js.map +1 -1
- package/dist/src/eval/manifest-v1.d.ts +2 -0
- package/dist/src/eval/manifest-v1.js +7 -2
- package/dist/src/eval/manifest-v1.js.map +1 -1
- package/dist/src/generators/local-plugin.d.ts +2 -1
- package/dist/src/generators/local-plugin.js +111 -108
- package/dist/src/generators/local-plugin.js.map +1 -1
- package/dist/src/index.d.ts +10 -17
- package/dist/src/index.js +585 -1349
- package/dist/src/index.js.map +1 -1
- package/dist/src/intent/deployment-preferences.d.ts +63 -0
- package/dist/src/intent/deployment-preferences.js +170 -0
- package/dist/src/intent/deployment-preferences.js.map +1 -0
- package/dist/src/intent/diagnostics.d.ts +11 -0
- package/dist/src/intent/diagnostics.js +14 -0
- package/dist/src/intent/diagnostics.js.map +1 -0
- package/dist/src/intent/intent-codec.d.ts +19 -0
- package/dist/src/intent/intent-codec.js +117 -0
- package/dist/src/intent/intent-codec.js.map +1 -0
- package/dist/src/intent/intent-store.d.ts +43 -0
- package/dist/src/intent/intent-store.js +118 -0
- package/dist/src/intent/intent-store.js.map +1 -0
- package/dist/src/intent/scope-context.d.ts +33 -0
- package/dist/src/intent/scope-context.js +145 -0
- package/dist/src/intent/scope-context.js.map +1 -0
- package/dist/src/intent/work-context.d.ts +13 -0
- package/dist/src/intent/work-context.js +22 -0
- package/dist/src/intent/work-context.js.map +1 -0
- package/dist/src/output/command-receipt.js +16 -9
- package/dist/src/output/command-receipt.js.map +1 -1
- package/dist/src/portable/commands.d.ts +18 -8
- package/dist/src/portable/commands.js +46 -562
- package/dist/src/portable/commands.js.map +1 -1
- package/dist/src/portable/historical-materialization.d.ts +22 -0
- package/dist/src/portable/historical-materialization.js +124 -0
- package/dist/src/portable/historical-materialization.js.map +1 -0
- package/dist/src/portable/materializer.d.ts +8 -0
- package/dist/src/portable/materializer.js +75 -44
- package/dist/src/portable/materializer.js.map +1 -1
- package/dist/src/portable/recovery-layout.d.ts +17 -0
- package/dist/src/portable/recovery-layout.js +55 -0
- package/dist/src/portable/recovery-layout.js.map +1 -0
- package/dist/src/portable/recovery.d.ts +143 -0
- package/dist/src/portable/recovery.js +339 -0
- package/dist/src/portable/recovery.js.map +1 -0
- package/dist/src/portable/writer.d.ts +64 -0
- package/dist/src/portable/writer.js +316 -0
- package/dist/src/portable/writer.js.map +1 -0
- package/dist/src/recovery/coordinator.d.ts +137 -0
- package/dist/src/recovery/coordinator.js +1198 -0
- package/dist/src/recovery/coordinator.js.map +1 -0
- package/dist/src/recovery/demand.d.ts +44 -0
- package/dist/src/recovery/demand.js +178 -0
- package/dist/src/recovery/demand.js.map +1 -0
- package/dist/src/recovery/joint-coordinator.d.ts +24 -0
- package/dist/src/recovery/joint-coordinator.js +770 -0
- package/dist/src/recovery/joint-coordinator.js.map +1 -0
- package/dist/src/recovery/joint-demand.d.ts +68 -0
- package/dist/src/recovery/joint-demand.js +166 -0
- package/dist/src/recovery/joint-demand.js.map +1 -0
- package/dist/src/recovery/receipt.d.ts +81 -0
- package/dist/src/recovery/receipt.js +2 -0
- package/dist/src/recovery/receipt.js.map +1 -0
- package/dist/src/recovery/retirement.d.ts +45 -0
- package/dist/src/recovery/retirement.js +366 -0
- package/dist/src/recovery/retirement.js.map +1 -0
- package/dist/src/recovery/status.d.ts +108 -0
- package/dist/src/recovery/status.js +417 -0
- package/dist/src/recovery/status.js.map +1 -0
- package/dist/src/recovery/types.d.ts +86 -0
- package/dist/src/recovery/types.js +2 -0
- package/dist/src/recovery/types.js.map +1 -0
- package/dist/src/review/review-profile.d.ts +2 -1
- package/dist/src/review/review-profile.js +15 -15
- package/dist/src/review/review-profile.js.map +1 -1
- package/dist/src/review/review-selection.d.ts +1 -2
- package/dist/src/review/review-selection.js +40 -114
- package/dist/src/review/review-selection.js.map +1 -1
- package/dist/src/review/review-types.d.ts +4 -4
- package/dist/src/review/review-types.js.map +1 -1
- package/dist/src/review/skill-materialization.js +15 -6
- package/dist/src/review/skill-materialization.js.map +1 -1
- package/dist/src/review/source-binding.d.ts +14 -4
- package/dist/src/review/source-binding.js +62 -117
- package/dist/src/review/source-binding.js.map +1 -1
- package/dist/src/tui/agent-management.d.ts +23 -0
- package/dist/src/tui/agent-management.js +217 -0
- package/dist/src/tui/agent-management.js.map +1 -0
- package/dist/src/tui/agent-settings.d.ts +44 -0
- package/dist/src/tui/agent-settings.js +98 -0
- package/dist/src/tui/agent-settings.js.map +1 -0
- package/dist/src/tui/components.d.ts +3 -0
- package/dist/src/tui/components.js +10 -1
- package/dist/src/tui/components.js.map +1 -1
- package/dist/src/tui/config-references.d.ts +6 -3
- package/dist/src/tui/config-references.js +17 -12
- package/dist/src/tui/config-references.js.map +1 -1
- package/dist/src/tui/console-app-v4.d.ts +1 -2
- package/dist/src/tui/console-app-v4.js +1533 -1047
- package/dist/src/tui/console-app-v4.js.map +1 -1
- package/dist/src/tui/controller-runtime.d.ts +2 -1
- package/dist/src/tui/controller-runtime.js +457 -1634
- package/dist/src/tui/controller-runtime.js.map +1 -1
- package/dist/src/tui/controller.d.ts +131 -81
- package/dist/src/tui/controller.js +307 -227
- package/dist/src/tui/controller.js.map +1 -1
- package/dist/src/tui/entity-cards.d.ts +2 -2
- package/dist/src/tui/entity-cards.js +98 -20
- package/dist/src/tui/entity-cards.js.map +1 -1
- package/dist/src/tui/glossary.d.ts +2 -0
- package/dist/src/tui/glossary.js +20 -0
- package/dist/src/tui/glossary.js.map +1 -1
- package/dist/src/tui/model.d.ts +28 -10
- package/dist/src/tui/model.js +41 -41
- package/dist/src/tui/model.js.map +1 -1
- package/dist/src/tui/operation-review-planner.d.ts +2 -0
- package/dist/src/tui/operation-review-planner.js +58 -122
- package/dist/src/tui/operation-review-planner.js.map +1 -1
- package/dist/src/tui/plugin-content.js +7 -4
- package/dist/src/tui/plugin-content.js.map +1 -1
- package/dist/src/tui/plugin-detail.d.ts +22 -3
- package/dist/src/tui/plugin-detail.js +113 -26
- package/dist/src/tui/plugin-detail.js.map +1 -1
- package/dist/src/tui/reader.d.ts +1 -0
- package/dist/src/tui/reader.js +3 -1
- package/dist/src/tui/reader.js.map +1 -1
- package/dist/src/tui/router.d.ts +23 -33
- package/dist/src/tui/router.js.map +1 -1
- package/dist/src/tui/scoped-flow.d.ts +45 -0
- package/dist/src/tui/scoped-flow.js +96 -0
- package/dist/src/tui/scoped-flow.js.map +1 -0
- package/dist/src/tui/scoped-inventory.d.ts +122 -0
- package/dist/src/tui/scoped-inventory.js +225 -0
- package/dist/src/tui/scoped-inventory.js.map +1 -0
- package/dist/src/tui/screen-registry.d.ts +25 -25
- package/dist/src/tui/screen-registry.js +3 -7
- package/dist/src/tui/screen-registry.js.map +1 -1
- package/dist/src/tui/session-console-app.js +1 -1
- package/dist/src/tui/session-console-app.js.map +1 -1
- package/dist/src/tui/session-host.js +12 -2
- package/dist/src/tui/session-host.js.map +1 -1
- package/dist/src/types.d.ts +15 -12
- package/dist/src/types.js.map +1 -1
- package/dist/src/utils/agent-version.js +2 -0
- package/dist/src/utils/agent-version.js.map +1 -1
- package/dist/src/utils/artifact-plan.js +13 -6
- package/dist/src/utils/artifact-plan.js.map +1 -1
- package/dist/src/utils/artifact-renderer.d.ts +6 -3
- package/dist/src/utils/artifact-renderer.js +27 -32
- package/dist/src/utils/artifact-renderer.js.map +1 -1
- package/dist/src/utils/artifact-request.d.ts +1 -0
- package/dist/src/utils/artifact-request.js +22 -12
- package/dist/src/utils/artifact-request.js.map +1 -1
- package/dist/src/utils/artifact-sources.d.ts +2 -2
- package/dist/src/utils/bundle-layout.js +18 -16
- package/dist/src/utils/bundle-layout.js.map +1 -1
- package/dist/src/utils/catalog-digests.js +2 -0
- package/dist/src/utils/catalog-digests.js.map +1 -1
- package/dist/src/utils/catalog-runtime-projection.d.ts +4 -3
- package/dist/src/utils/catalog-runtime-projection.js.map +1 -1
- package/dist/src/utils/catalog-source-references.d.ts +5 -0
- package/dist/src/utils/catalog-source-references.js +42 -57
- package/dist/src/utils/catalog-source-references.js.map +1 -1
- package/dist/src/utils/claude-native-render-receipt.d.ts +14 -0
- package/dist/src/utils/claude-native-render-receipt.js +26 -0
- package/dist/src/utils/claude-native-render-receipt.js.map +1 -0
- package/dist/src/utils/claude-skills-root.js +14 -3
- package/dist/src/utils/claude-skills-root.js.map +1 -1
- package/dist/src/utils/codex-manager.js +6 -12
- package/dist/src/utils/codex-manager.js.map +1 -1
- package/dist/src/utils/codex-native-observation.js +29 -13
- package/dist/src/utils/codex-native-observation.js.map +1 -1
- package/dist/src/utils/codex-reconciler.d.ts +2 -5
- package/dist/src/utils/codex-reconciler.js +25 -1
- package/dist/src/utils/codex-reconciler.js.map +1 -1
- package/dist/src/utils/codex-surface-analysis.js +5 -3
- package/dist/src/utils/codex-surface-analysis.js.map +1 -1
- package/dist/src/utils/local-marketplace.d.ts +14 -2
- package/dist/src/utils/local-marketplace.js +209 -42
- package/dist/src/utils/local-marketplace.js.map +1 -1
- package/dist/src/utils/managed-command-evidence.js +1 -1
- package/dist/src/utils/managed-command-evidence.js.map +1 -1
- package/dist/src/utils/managed-command-materialization.d.ts +4 -0
- package/dist/src/utils/managed-command-materialization.js +15 -6
- package/dist/src/utils/managed-command-materialization.js.map +1 -1
- package/dist/src/utils/managed-command-store.d.ts +15 -0
- package/dist/src/utils/managed-command-store.js +73 -8
- package/dist/src/utils/managed-command-store.js.map +1 -1
- package/dist/src/utils/native-cli.d.ts +2 -0
- package/dist/src/utils/native-cli.js +22 -0
- package/dist/src/utils/native-cli.js.map +1 -1
- package/dist/src/utils/native-demand.d.ts +10 -0
- package/dist/src/utils/native-demand.js +4 -0
- package/dist/src/utils/native-demand.js.map +1 -0
- package/dist/src/utils/ownership.js +2 -0
- package/dist/src/utils/ownership.js.map +1 -1
- package/dist/src/utils/paths.js +1 -1
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/src/utils/platform-support.d.ts +1 -1
- package/dist/src/utils/platform-support.js +1 -1
- package/dist/src/utils/platform-support.js.map +1 -1
- package/dist/src/utils/plugin-config-impact.d.ts +3 -0
- package/dist/src/utils/plugin-config-impact.js +115 -273
- package/dist/src/utils/plugin-config-impact.js.map +1 -1
- package/dist/src/utils/plugin-config-references.d.ts +11 -2
- package/dist/src/utils/plugin-config-references.js +85 -90
- package/dist/src/utils/plugin-config-references.js.map +1 -1
- package/dist/src/utils/plugin-config-write.d.ts +58 -1
- package/dist/src/utils/plugin-config-write.js +756 -809
- package/dist/src/utils/plugin-config-write.js.map +1 -1
- package/dist/src/utils/plugin-config.d.ts +47 -46
- package/dist/src/utils/plugin-config.js +292 -833
- package/dist/src/utils/plugin-config.js.map +1 -1
- package/dist/src/utils/plugin-scripts.d.ts +11 -6
- package/dist/src/utils/plugin-scripts.js +52 -35
- package/dist/src/utils/plugin-scripts.js.map +1 -1
- package/dist/src/utils/runtime-config.js +5 -4
- package/dist/src/utils/runtime-config.js.map +1 -1
- package/dist/src/utils/runtime-skill-closure.d.ts +2 -2
- package/dist/src/utils/runtime-skill-closure.js.map +1 -1
- package/dist/src/utils/state-paths.d.ts +8 -3
- package/dist/src/utils/state-paths.js +53 -16
- package/dist/src/utils/state-paths.js.map +1 -1
- package/dist/src/utils/windows-npm-shim.d.ts +2 -0
- package/dist/src/utils/windows-npm-shim.js +5 -7
- package/dist/src/utils/windows-npm-shim.js.map +1 -1
- package/dist/vitest.config.js +1 -0
- package/dist/vitest.config.js.map +1 -1
- package/package.json +3 -3
- package/dist/src/commands/sync-command.d.ts +0 -40
- package/dist/src/commands/sync-command.js +0 -254
- package/dist/src/commands/sync-command.js.map +0 -1
- package/dist/src/portable/skills-cli.d.ts +0 -51
- package/dist/src/portable/skills-cli.js +0 -202
- package/dist/src/portable/skills-cli.js.map +0 -1
- package/dist/src/tui/project-inventory.d.ts +0 -68
- package/dist/src/tui/project-inventory.js +0 -203
- package/dist/src/tui/project-inventory.js.map +0 -1
- package/dist/src/utils/plugin-intent-state.d.ts +0 -49
- package/dist/src/utils/plugin-intent-state.js +0 -320
- package/dist/src/utils/plugin-intent-state.js.map +0 -1
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { addRequirements, intentAdd, intentRemove } from '../commands/intent-command.js';
|
|
2
|
+
import { calculateIntentDigest } from '../intent/intent-codec.js';
|
|
3
|
+
import { observeIntent, resolveIntentPath } from '../intent/intent-store.js';
|
|
4
|
+
import { normalizeAgents, observePreferences, resetTargets, setAgents, resolvePreferencesPath } from '../intent/deployment-preferences.js';
|
|
5
|
+
import { withAwHomeMutationLock } from '../utils/aw-home-mutation-lock.js';
|
|
6
|
+
import { canonicalizePathThroughExistingAncestor } from '../utils/state-paths.js';
|
|
7
|
+
const intentPath = async (location) => canonicalizePathThroughExistingAncestor(await resolveIntentPath(location));
|
|
8
|
+
const preferencesPath = async (location) => canonicalizePathThroughExistingAncestor(await resolvePreferencesPath(location));
|
|
9
|
+
export async function prepareIntentPlan(location, action, selector) {
|
|
10
|
+
const canonicalPath = await intentPath(location);
|
|
11
|
+
const expected = await observeIntent(location);
|
|
12
|
+
if (expected.state !== 'valid' && expected.state !== 'absent')
|
|
13
|
+
throw new Error('pluginIntentStateInvalid');
|
|
14
|
+
if (action === 'remove' && (expected.state === 'absent'
|
|
15
|
+
|| !expected.value.roots.some((root) => root.pluginId === selector))) {
|
|
16
|
+
throw new Error('pluginIntentRootMissing');
|
|
17
|
+
}
|
|
18
|
+
const proposed = action === 'add'
|
|
19
|
+
? await addRequirements({ ...location, selectors: [selector], dryRun: true }) : undefined;
|
|
20
|
+
if (proposed?.errors.length || action === 'add' && !proposed?.state) {
|
|
21
|
+
throw new Error(proposed?.errors[0]?.code ?? 'pluginIntentAddUnavailable');
|
|
22
|
+
}
|
|
23
|
+
if (await intentPath(location) !== canonicalPath)
|
|
24
|
+
throw new Error('operationReviewStale');
|
|
25
|
+
return { kind: 'intent', scope: location.scope, action, selector, expected, canonicalPath,
|
|
26
|
+
...(proposed?.state ? { proposedDigest: calculateIntentDigest(proposed.state) } : {}),
|
|
27
|
+
changes: [action === 'add' ? `声明插件需求:${selector}` : `移除插件需求:${selector}`],
|
|
28
|
+
warnings: action === 'remove' ? ['只修改需求声明;已有安装内容会保留。'] : ['只修改需求声明;不会安装插件。'],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export async function executeIntentPlan(location, plan) {
|
|
32
|
+
if (location.scope !== plan.scope)
|
|
33
|
+
throw new Error('operationReviewStale');
|
|
34
|
+
return withAwHomeMutationLock({ env: location.env, action: async (token) => {
|
|
35
|
+
if (await intentPath(location) !== plan.canonicalPath)
|
|
36
|
+
throw new Error('operationReviewStale');
|
|
37
|
+
const current = await observeIntent(location);
|
|
38
|
+
if (current.state !== plan.expected.state || ('rawDigest' in current ? current.rawDigest : undefined)
|
|
39
|
+
!== ('rawDigest' in plan.expected ? plan.expected.rawDigest : undefined)
|
|
40
|
+
|| await intentPath(location) !== plan.canonicalPath) {
|
|
41
|
+
throw new Error('operationReviewStale');
|
|
42
|
+
}
|
|
43
|
+
if (plan.action === 'add') {
|
|
44
|
+
const proposed = await addRequirements({ ...location, token, selectors: [plan.selector], dryRun: true });
|
|
45
|
+
if (proposed.errors.length || !proposed.state
|
|
46
|
+
|| calculateIntentDigest(proposed.state) !== plan.proposedDigest
|
|
47
|
+
|| await intentPath(location) !== plan.canonicalPath) {
|
|
48
|
+
throw new Error('operationReviewStale');
|
|
49
|
+
}
|
|
50
|
+
return intentAdd({ ...location, token, selectors: [plan.selector] });
|
|
51
|
+
}
|
|
52
|
+
return intentRemove({ ...location, token, selector: plan.selector });
|
|
53
|
+
} });
|
|
54
|
+
}
|
|
55
|
+
function sameObservation(left, right) {
|
|
56
|
+
return left.state === right.state && ('rawDigest' in left ? left.rawDigest : undefined)
|
|
57
|
+
=== ('rawDigest' in right ? right.rawDigest : undefined);
|
|
58
|
+
}
|
|
59
|
+
export async function prepareTargetsPlan(location, action, agents) {
|
|
60
|
+
const canonicalPath = await preferencesPath(location);
|
|
61
|
+
const expected = await observePreferences(location);
|
|
62
|
+
if (expected.state === 'unreadable' || action === 'set' && expected.state === 'invalid') {
|
|
63
|
+
throw new Error('deploymentPreferencesUnavailable');
|
|
64
|
+
}
|
|
65
|
+
const previousAgents = expected.state === 'valid' ? expected.value.targets : [];
|
|
66
|
+
const overrideCount = expected.state === 'valid' ? expected.value.exclusions.length : 0;
|
|
67
|
+
const nextAgents = action === 'reset' ? [] : normalizeAgents(agents);
|
|
68
|
+
if (await preferencesPath(location) !== canonicalPath)
|
|
69
|
+
throw new Error('operationReviewStale');
|
|
70
|
+
return {
|
|
71
|
+
kind: 'targets', scope: location.scope, action, agents: nextAgents, previousAgents,
|
|
72
|
+
overrideCount, expected, canonicalPath,
|
|
73
|
+
changes: action === 'reset'
|
|
74
|
+
? ['清空本机工具选择', `清空 ${overrideCount} 项插件排除`]
|
|
75
|
+
: [`本机工具:${previousAgents.join('、') || '未选择'} → ${nextAgents.join('、') || '未选择'}`,
|
|
76
|
+
'保留已有插件排除'],
|
|
77
|
+
warnings: [],
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export async function executeTargetsPlan(location, plan) {
|
|
81
|
+
if (location.scope !== plan.scope)
|
|
82
|
+
throw new Error('operationReviewStale');
|
|
83
|
+
return withAwHomeMutationLock({ env: location.env, action: async (token) => {
|
|
84
|
+
if (await preferencesPath(location) !== plan.canonicalPath)
|
|
85
|
+
throw new Error('operationReviewStale');
|
|
86
|
+
const current = await observePreferences(location);
|
|
87
|
+
if (!sameObservation(plan.expected, current)
|
|
88
|
+
|| await preferencesPath(location) !== plan.canonicalPath)
|
|
89
|
+
throw new Error('operationReviewStale');
|
|
90
|
+
const saved = plan.action === 'reset'
|
|
91
|
+
? await resetTargets({ ...location, token })
|
|
92
|
+
: await setAgents({ ...location, token }, plan.agents);
|
|
93
|
+
return { changed: saved.changed, agents: saved.value.targets };
|
|
94
|
+
} });
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=scoped-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoped-flow.js","sourceRoot":"","sources":["../../../src/tui/scoped-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import type { PlatformName, Scope } from '../types.js';
|
|
2
|
+
import type { AgentId } from '../intent/deployment-preferences.js';
|
|
3
|
+
import { type StatusScopedTarget, type StatusTargetRevision, type StatusV8Payload, type StatusV8PluginSummary } from '../commands/status-v6.js';
|
|
4
|
+
import type { RecoveryTarget } from '../recovery/receipt.js';
|
|
5
|
+
import { type PluginDependencyOverviewViewModel } from './model.js';
|
|
6
|
+
export type InventoryState = 'blocked' | 'unknown' | 'pending' | 'ready';
|
|
7
|
+
export interface InventoryTarget {
|
|
8
|
+
platform?: PlatformName;
|
|
9
|
+
scope: Scope;
|
|
10
|
+
location: 'scope' | 'sharedUser';
|
|
11
|
+
state: InventoryState;
|
|
12
|
+
expectedVersion?: string;
|
|
13
|
+
installedVersion?: string;
|
|
14
|
+
reasonCodes: string[];
|
|
15
|
+
agent?: AgentId;
|
|
16
|
+
delivery?: 'native' | 'agent-skills';
|
|
17
|
+
observation?: 'known' | 'unknown';
|
|
18
|
+
actual?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface InventoryDependency {
|
|
21
|
+
pluginId: string;
|
|
22
|
+
displayName: string;
|
|
23
|
+
targets: InventoryTarget[];
|
|
24
|
+
}
|
|
25
|
+
export interface InventoryRoot {
|
|
26
|
+
scope?: Scope;
|
|
27
|
+
pluginId: string;
|
|
28
|
+
sourceId: string;
|
|
29
|
+
displayName: string;
|
|
30
|
+
section: 'declared' | 'extraInstalled';
|
|
31
|
+
state: InventoryState;
|
|
32
|
+
targets: InventoryTarget[];
|
|
33
|
+
dependencies: InventoryDependency[];
|
|
34
|
+
agentResults?: Array<Pick<RecoveryTarget, 'agent' | 'delivery' | 'blockers' | 'reasons' | 'satisfaction' | 'observation' | 'content'>>;
|
|
35
|
+
blockers?: Array<{
|
|
36
|
+
code: string;
|
|
37
|
+
message: string;
|
|
38
|
+
}>;
|
|
39
|
+
sourceState?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface ScopedInventoryViewModel {
|
|
42
|
+
scope: Scope;
|
|
43
|
+
projectRoot?: string;
|
|
44
|
+
projectName?: string;
|
|
45
|
+
declarationState: 'ready' | 'absent' | 'invalid' | 'unavailable' | 'notProject';
|
|
46
|
+
preferenceState: string;
|
|
47
|
+
selectedAgents: AgentId[];
|
|
48
|
+
declaredRoots: InventoryRoot[];
|
|
49
|
+
extraInstalledRoots: InventoryRoot[];
|
|
50
|
+
syncTargets: Array<{
|
|
51
|
+
pluginId: string;
|
|
52
|
+
agent: AgentId;
|
|
53
|
+
scope: Scope;
|
|
54
|
+
}>;
|
|
55
|
+
counts: Record<InventoryState, number>;
|
|
56
|
+
errors: Array<{
|
|
57
|
+
code: string;
|
|
58
|
+
message: string;
|
|
59
|
+
}>;
|
|
60
|
+
allSatisfied: boolean | null;
|
|
61
|
+
coverage?: {
|
|
62
|
+
native: boolean;
|
|
63
|
+
portable: boolean;
|
|
64
|
+
scopes?: Scope[];
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export interface RecoveryInventoryInput {
|
|
68
|
+
scope: Scope;
|
|
69
|
+
intent: {
|
|
70
|
+
state: string;
|
|
71
|
+
};
|
|
72
|
+
selection: {
|
|
73
|
+
agents: AgentId[];
|
|
74
|
+
preferences: string;
|
|
75
|
+
};
|
|
76
|
+
inventory: Array<{
|
|
77
|
+
pluginId: string;
|
|
78
|
+
source: string;
|
|
79
|
+
sourceState: string;
|
|
80
|
+
blockers: Array<{
|
|
81
|
+
code: string;
|
|
82
|
+
message: string;
|
|
83
|
+
}>;
|
|
84
|
+
targetResults: RecoveryTarget[];
|
|
85
|
+
}> | null;
|
|
86
|
+
errors: Array<{
|
|
87
|
+
code: string;
|
|
88
|
+
message: string;
|
|
89
|
+
}>;
|
|
90
|
+
allSatisfied: boolean | null;
|
|
91
|
+
coverage?: {
|
|
92
|
+
native: boolean;
|
|
93
|
+
portable: boolean;
|
|
94
|
+
scopes?: Scope[];
|
|
95
|
+
};
|
|
96
|
+
extraObserved?: Array<{
|
|
97
|
+
pluginId: string;
|
|
98
|
+
agent: AgentId | null;
|
|
99
|
+
scope: Scope;
|
|
100
|
+
delivery: RecoveryTarget['delivery'];
|
|
101
|
+
observation: RecoveryTarget['observation'];
|
|
102
|
+
content?: RecoveryTarget['content'];
|
|
103
|
+
backend?: unknown;
|
|
104
|
+
}>;
|
|
105
|
+
}
|
|
106
|
+
export interface ScopedInventoryLoadResult extends RecoveryInventoryInput {
|
|
107
|
+
nativeSnapshot: {
|
|
108
|
+
payload: StatusV8Payload;
|
|
109
|
+
pluginSummaries: readonly (Pick<StatusV8PluginSummary, 'pluginId'> & Partial<StatusV8PluginSummary>)[];
|
|
110
|
+
targetRevisions: readonly StatusTargetRevision[];
|
|
111
|
+
dependencyOverviews: readonly PluginDependencyOverviewViewModel[];
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
export declare function hasStatusInstallationEvidence(target: StatusScopedTarget): boolean;
|
|
115
|
+
export declare function buildScopedInventory(options: {
|
|
116
|
+
recovery: RecoveryInventoryInput;
|
|
117
|
+
status: StatusV8Payload;
|
|
118
|
+
pluginSummaries: readonly Pick<StatusV8PluginSummary, 'pluginId' | 'displayName'>[];
|
|
119
|
+
targetRevisions?: readonly StatusTargetRevision[];
|
|
120
|
+
dependencyOverviews?: readonly PluginDependencyOverviewViewModel[];
|
|
121
|
+
projectRoot?: string;
|
|
122
|
+
}): ScopedInventoryViewModel;
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { flattenStatusTargets, statusTargetActivation, statusTargetIntent, statusTargetOwnershipState, statusTargetSharedNative } from '../commands/status-v6.js';
|
|
3
|
+
import { hasActualScopeEvidence } from './model.js';
|
|
4
|
+
const stateOrder = {
|
|
5
|
+
blocked: 0, unknown: 1, pending: 2, ready: 3,
|
|
6
|
+
};
|
|
7
|
+
function agentForPlatform(platform) {
|
|
8
|
+
return platform === 'claude' ? 'claude' : 'codex';
|
|
9
|
+
}
|
|
10
|
+
function targetIdentity(target) {
|
|
11
|
+
return [target.agent ?? '', target.delivery ?? '', target.platform ?? '', target.scope].join('\0');
|
|
12
|
+
}
|
|
13
|
+
export function hasStatusInstallationEvidence(target) {
|
|
14
|
+
return hasActualScopeEvidence(target)
|
|
15
|
+
|| target.reasons.some((reason) => reason.code === 'sourceMissing'
|
|
16
|
+
|| reason.code === 'catalogSourceUnavailable' || reason.code === 'bundleUnavailable');
|
|
17
|
+
}
|
|
18
|
+
function targetState(target) {
|
|
19
|
+
if (target.blockers.length)
|
|
20
|
+
return canPreparePortable(target) ? 'pending' : 'blocked';
|
|
21
|
+
if (target.content === 'conflict')
|
|
22
|
+
return 'blocked';
|
|
23
|
+
if (target.observation === 'missing' || target.content === 'absent'
|
|
24
|
+
|| target.content === 'drifted')
|
|
25
|
+
return 'pending';
|
|
26
|
+
if (target.observation === 'unknown' || target.content === 'unknown')
|
|
27
|
+
return 'unknown';
|
|
28
|
+
return 'ready';
|
|
29
|
+
}
|
|
30
|
+
function canPreparePortable(target) {
|
|
31
|
+
return target.delivery?.kind === 'agent-skills'
|
|
32
|
+
&& target.blockers.length > 0
|
|
33
|
+
&& target.blockers.every((blocker) => blocker.code === 'needs-preparation');
|
|
34
|
+
}
|
|
35
|
+
function rootState(root) {
|
|
36
|
+
if (root.blockers.length)
|
|
37
|
+
return 'blocked';
|
|
38
|
+
const states = root.targetResults.map(targetState);
|
|
39
|
+
return ['blocked', 'unknown', 'pending', 'ready']
|
|
40
|
+
.find((state) => states.includes(state)) ?? 'unknown';
|
|
41
|
+
}
|
|
42
|
+
function sortedRoots(roots) {
|
|
43
|
+
return roots.sort((a, b) => stateOrder[a.state] - stateOrder[b.state]
|
|
44
|
+
|| a.displayName.localeCompare(b.displayName, 'en') || a.pluginId.localeCompare(b.pluginId, 'en'));
|
|
45
|
+
}
|
|
46
|
+
function statusState(target) {
|
|
47
|
+
const reasons = [...target.reasons, ...(target.sharedReasons ?? [])];
|
|
48
|
+
if (target.state === 'blocked' || reasons.some((reason) => reason.severity === 'blocking'))
|
|
49
|
+
return 'blocked';
|
|
50
|
+
if (statusTargetSharedNative(target)?.state === 'unobserved'
|
|
51
|
+
|| statusTargetActivation(target)?.evidence === 'unobserved'
|
|
52
|
+
|| statusTargetOwnershipState(target) === 'error'
|
|
53
|
+
|| reasons.some((reason) => reason.code.includes('Unobserved')
|
|
54
|
+
|| reason.code.includes('ObservationFailed') || reason.code === 'nativeStateUnreadable'))
|
|
55
|
+
return 'unknown';
|
|
56
|
+
if (target.state === 'ready')
|
|
57
|
+
return 'ready';
|
|
58
|
+
if (target.state === 'needsSync' && (hasActualScopeEvidence(target)
|
|
59
|
+
|| statusTargetOwnershipState(target) === 'absent'
|
|
60
|
+
|| statusTargetOwnershipState(target) === 'partial'))
|
|
61
|
+
return 'pending';
|
|
62
|
+
return 'unknown';
|
|
63
|
+
}
|
|
64
|
+
export function buildScopedInventory(options) {
|
|
65
|
+
const { recovery } = options;
|
|
66
|
+
const statusTargets = flattenStatusTargets(options.status.targets);
|
|
67
|
+
const targetsById = new Map();
|
|
68
|
+
for (const target of statusTargets)
|
|
69
|
+
targetsById.set(target.pluginId, [...(targetsById.get(target.pluginId) ?? []), target]);
|
|
70
|
+
const revisions = new Map((options.targetRevisions ?? []).map((entry) => [
|
|
71
|
+
`${entry.pluginId}\0${entry.platform}\0${entry.scope}`, entry.revision,
|
|
72
|
+
]));
|
|
73
|
+
const targetView = (target, location) => {
|
|
74
|
+
const revision = revisions.get(`${target.pluginId}\0${target.platform}\0${target.scope}`);
|
|
75
|
+
return {
|
|
76
|
+
platform: target.platform, scope: target.scope, location, state: statusState(target),
|
|
77
|
+
agent: agentForPlatform(target.platform), delivery: 'native',
|
|
78
|
+
...(revision?.availableVersion ?? target.version
|
|
79
|
+
? { expectedVersion: revision?.availableVersion ?? target.version } : {}),
|
|
80
|
+
...(revision?.installedVersion ? { installedVersion: revision.installedVersion } : {}),
|
|
81
|
+
reasonCodes: [...new Set([...target.reasons, ...(target.sharedReasons ?? [])]
|
|
82
|
+
.flatMap((reason) => [reason.code, ...(reason.rootIssueCode ? [reason.rootIssueCode] : [])]))],
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
const names = new Map(options.pluginSummaries.map((plugin) => [plugin.pluginId, plugin.displayName]));
|
|
86
|
+
const nameFor = (pluginId) => names.get(pluginId) ?? pluginId.split('/').at(-1) ?? pluginId;
|
|
87
|
+
const dependencyIds = new Set();
|
|
88
|
+
const declaredRoots = (recovery.inventory ?? []).map((root) => {
|
|
89
|
+
const nativeTargets = (targetsById.get(root.pluginId) ?? [])
|
|
90
|
+
.filter((target) => target.scope === recovery.scope
|
|
91
|
+
&& (statusTargetIntent(target).scopes.includes(recovery.scope) || hasActualScopeEvidence(target)));
|
|
92
|
+
const recoveryTargets = root.targetResults.flatMap((target) => target.delivery ? [{
|
|
93
|
+
...(target.delivery.kind === 'native' ? { platform: target.delivery.platform } : {}),
|
|
94
|
+
scope: target.scope, location: 'scope', state: targetState(target),
|
|
95
|
+
reasonCodes: target.blockers.map((blocker) => blocker.code),
|
|
96
|
+
agent: target.agent, delivery: target.delivery.kind,
|
|
97
|
+
...(target.delivery.kind === 'agent-skills' ? {
|
|
98
|
+
observation: target.content === 'drifted' || target.observation === 'verified' || target.observation === 'missing'
|
|
99
|
+
? 'known' : 'unknown',
|
|
100
|
+
actual: target.content === 'satisfied' || target.content === 'drifted',
|
|
101
|
+
} : {}),
|
|
102
|
+
}] : []);
|
|
103
|
+
const observedTargets = nativeTargets.map((target) => targetView(target, 'scope'));
|
|
104
|
+
for (const target of recoveryTargets) {
|
|
105
|
+
const current = observedTargets.find((entry) => targetIdentity(entry) === targetIdentity(target));
|
|
106
|
+
if (current) {
|
|
107
|
+
current.state = target.state;
|
|
108
|
+
current.reasonCodes = [...new Set([...current.reasonCodes, ...target.reasonCodes])];
|
|
109
|
+
current.agent = target.agent;
|
|
110
|
+
current.delivery = target.delivery;
|
|
111
|
+
}
|
|
112
|
+
else
|
|
113
|
+
observedTargets.push(target);
|
|
114
|
+
}
|
|
115
|
+
const overview = options.dependencyOverviews?.find((entry) => entry.pluginId === root.pluginId);
|
|
116
|
+
const dependencies = (overview?.dependencies ?? []).map((dependency) => {
|
|
117
|
+
dependencyIds.add(dependency.pluginId);
|
|
118
|
+
const linkedUser = new Set(nativeTargets.flatMap((consumer) => consumer.components
|
|
119
|
+
.filter((component) => component.kind === 'dependency' && component.key === dependency.pluginId
|
|
120
|
+
&& component.metadata?.scope === 'user' && component.state === 'ready')
|
|
121
|
+
.map(() => consumer.platform)));
|
|
122
|
+
const targets = (targetsById.get(dependency.pluginId) ?? []).filter((target) => target.scope === recovery.scope
|
|
123
|
+
&& (statusTargetIntent(target).scopes.includes(recovery.scope) || hasActualScopeEvidence(target))
|
|
124
|
+
|| recovery.scope === 'project' && target.scope === 'user'
|
|
125
|
+
&& linkedUser.has(target.platform) && hasActualScopeEvidence(target))
|
|
126
|
+
.map((target) => targetView(target, target.scope === recovery.scope ? 'scope' : 'sharedUser'));
|
|
127
|
+
if (recovery.scope === 'project') {
|
|
128
|
+
for (const consumer of nativeTargets) {
|
|
129
|
+
for (const component of consumer.components) {
|
|
130
|
+
if (component.kind !== 'dependency' || component.key !== dependency.pluginId
|
|
131
|
+
|| component.metadata?.scope !== 'user'
|
|
132
|
+
|| targets.some((target) => target.platform === consumer.platform && target.scope === 'user'))
|
|
133
|
+
continue;
|
|
134
|
+
targets.push({ platform: consumer.platform, scope: 'user', location: 'sharedUser',
|
|
135
|
+
state: component.state === 'ready' ? 'ready'
|
|
136
|
+
: component.state === 'absent' || component.state === 'incomplete' ? 'pending'
|
|
137
|
+
: component.state === 'error' ? 'unknown' : 'blocked',
|
|
138
|
+
reasonCodes: typeof component.metadata.rootIssueCode === 'string'
|
|
139
|
+
? [component.metadata.rootIssueCode] : [],
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return { pluginId: dependency.pluginId, displayName: dependency.displayName, targets };
|
|
145
|
+
});
|
|
146
|
+
return {
|
|
147
|
+
scope: recovery.scope,
|
|
148
|
+
pluginId: root.pluginId,
|
|
149
|
+
sourceId: root.source,
|
|
150
|
+
displayName: nameFor(root.pluginId),
|
|
151
|
+
section: 'declared',
|
|
152
|
+
state: rootState(root),
|
|
153
|
+
targets: observedTargets,
|
|
154
|
+
dependencies,
|
|
155
|
+
agentResults: root.targetResults,
|
|
156
|
+
blockers: root.blockers,
|
|
157
|
+
sourceState: root.sourceState,
|
|
158
|
+
};
|
|
159
|
+
});
|
|
160
|
+
const declaredIds = new Set(declaredRoots.map((root) => root.pluginId));
|
|
161
|
+
const extras = new Map();
|
|
162
|
+
for (const target of recovery.extraObserved ?? []) {
|
|
163
|
+
if (target.scope !== recovery.scope || declaredIds.has(target.pluginId))
|
|
164
|
+
continue;
|
|
165
|
+
if (!target.delivery && !target.agent) {
|
|
166
|
+
if (!extras.has(target.pluginId))
|
|
167
|
+
extras.set(target.pluginId, []);
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
const state = target.content === 'conflict' ? 'blocked'
|
|
171
|
+
: target.observation === 'missing' || target.content === 'absent' || target.content === 'drifted' ? 'pending'
|
|
172
|
+
: target.observation === 'unknown' || target.content === 'unknown' ? 'unknown' : 'ready';
|
|
173
|
+
extras.set(target.pluginId, [...(extras.get(target.pluginId) ?? []), {
|
|
174
|
+
...(target.delivery?.kind === 'native' ? { platform: target.delivery.platform } : {}),
|
|
175
|
+
scope: recovery.scope, location: 'scope', state, reasonCodes: [],
|
|
176
|
+
...(target.agent ? { agent: target.agent } : {}),
|
|
177
|
+
...(target.delivery ? { delivery: target.delivery.kind } : {}),
|
|
178
|
+
...(target.delivery?.kind === 'agent-skills' ? {
|
|
179
|
+
observation: target.content === 'drifted' || target.observation === 'verified' || target.observation === 'missing'
|
|
180
|
+
? 'known' : 'unknown',
|
|
181
|
+
actual: target.content === 'satisfied' || target.content === 'drifted',
|
|
182
|
+
} : {}),
|
|
183
|
+
}]);
|
|
184
|
+
}
|
|
185
|
+
for (const target of statusTargets) {
|
|
186
|
+
if (target.scope !== recovery.scope || !hasActualScopeEvidence(target)
|
|
187
|
+
|| declaredIds.has(target.pluginId) || dependencyIds.has(target.pluginId)
|
|
188
|
+
|| statusTargetIntent(target).relation === 'dependency')
|
|
189
|
+
continue;
|
|
190
|
+
const observed = targetView(target, 'scope');
|
|
191
|
+
const current = extras.get(target.pluginId) ?? [];
|
|
192
|
+
const index = current.findIndex((entry) => targetIdentity(entry) === targetIdentity(observed));
|
|
193
|
+
if (index < 0)
|
|
194
|
+
extras.set(target.pluginId, [...current, observed]);
|
|
195
|
+
else
|
|
196
|
+
extras.set(target.pluginId, current.map((entry, entryIndex) => entryIndex === index
|
|
197
|
+
? { ...entry, ...observed, state: stateOrder[entry.state] < stateOrder[observed.state] ? entry.state : observed.state,
|
|
198
|
+
reasonCodes: [...new Set([...entry.reasonCodes, ...observed.reasonCodes])] } : entry));
|
|
199
|
+
}
|
|
200
|
+
const extraInstalledRoots = [...extras].map(([pluginId, targets]) => ({
|
|
201
|
+
scope: recovery.scope,
|
|
202
|
+
pluginId, sourceId: pluginId.split('/')[0] ?? pluginId, displayName: nameFor(pluginId),
|
|
203
|
+
section: 'extraInstalled', state: ['blocked', 'unknown', 'pending', 'ready']
|
|
204
|
+
.find((state) => targets.some((target) => target.state === state)) ?? 'unknown',
|
|
205
|
+
targets, dependencies: [],
|
|
206
|
+
}));
|
|
207
|
+
const counts = { blocked: 0, unknown: 0, pending: 0, ready: 0 };
|
|
208
|
+
for (const root of declaredRoots)
|
|
209
|
+
counts[root.state] += 1;
|
|
210
|
+
const syncTargets = (recovery.intent.state === 'valid' ? recovery.inventory ?? [] : [])
|
|
211
|
+
.flatMap((root) => root.blockers.length ? [] : root.targetResults.filter((target) => (!target.blockers.length || canPreparePortable(target)) && targetState(target) === 'pending')
|
|
212
|
+
.map((target) => ({ pluginId: target.pluginId, agent: target.agent, scope: recovery.scope })));
|
|
213
|
+
return {
|
|
214
|
+
scope: recovery.scope,
|
|
215
|
+
...(options.projectRoot ? { projectRoot: options.projectRoot, projectName: path.basename(options.projectRoot) } : {}),
|
|
216
|
+
declarationState: recovery.intent.state === 'valid' ? 'ready'
|
|
217
|
+
: recovery.intent.state === 'absent' ? 'absent' : 'invalid',
|
|
218
|
+
preferenceState: recovery.selection.preferences,
|
|
219
|
+
selectedAgents: recovery.selection.agents,
|
|
220
|
+
declaredRoots: sortedRoots(declaredRoots), extraInstalledRoots: sortedRoots(extraInstalledRoots),
|
|
221
|
+
syncTargets, counts, errors: recovery.errors, allSatisfied: recovery.allSatisfied,
|
|
222
|
+
...(recovery.coverage ? { coverage: recovery.coverage } : {}),
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=scoped-inventory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoped-inventory.js","sourceRoot":"","sources":["../../../src/tui/scoped-inventory.ts"],"names":[],"mappings":"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"}
|