@astralyn/pi 1.4.5 → 1.4.7
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 +42 -0
- package/dist/bundle/chunks/chunk-FODCTZXW.js +230 -0
- package/dist/bundle/chunks/{chunk-I5S7H7GA.js → chunk-FYKNSJG6.js} +1 -1
- package/dist/bundle/chunks/{chunk-AXFWZIHH.js → chunk-MG5XDTXV.js} +1 -1
- package/dist/bundle/chunks/{chunk-ALHAFUHP.js → chunk-PU2IWWXV.js} +1 -1
- package/dist/bundle/chunks/{chunk-5M3YJ54Z.js → chunk-RO2VH6UZ.js} +1 -1
- package/dist/bundle/chunks/chunk-YJTSOLP2.js +1499 -0
- package/dist/bundle/chunks/{cli-FH77R7JR.js → cli-MEL7SGJD.js} +1 -1
- package/dist/bundle/chunks/{execute-GMFGC27P.js → execute-4CWRNHPO.js} +1 -1
- package/dist/bundle/chunks/{runtime-R5CMHJ5P.js → runtime-R3X67XMR.js} +1 -1
- package/dist/bundle/chunks/{virtual-modules-6FUV7ZDV.js → virtual-modules-PKEOKGYI.js} +1 -1
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/core/agent-session.d.ts +0 -3
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +0 -4
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/isolated-session.d.ts +23 -0
- package/dist/core/isolated-session.d.ts.map +1 -0
- package/dist/core/isolated-session.js +55 -0
- package/dist/core/isolated-session.js.map +1 -0
- package/dist/core/package-manager.d.ts +7 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +72 -1
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/resource-loader.d.ts +1 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +23 -7
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/settings-manager.d.ts +4 -2
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +11 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-schema.d.ts +7 -0
- package/dist/core/settings-schema.d.ts.map +1 -1
- package/dist/core/settings-schema.js +6 -0
- package/dist/core/settings-schema.js.map +1 -1
- package/dist/core/skills.d.ts +10 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +23 -0
- package/dist/core/skills.js.map +1 -1
- package/dist/core/tasks/codec.d.ts +12 -0
- package/dist/core/tasks/codec.d.ts.map +1 -0
- package/dist/core/tasks/codec.js +139 -0
- package/dist/core/tasks/codec.js.map +1 -0
- package/dist/core/tasks/delivery.d.ts +11 -4
- package/dist/core/tasks/delivery.d.ts.map +1 -1
- package/dist/core/tasks/delivery.js +9 -9
- package/dist/core/tasks/delivery.js.map +1 -1
- package/dist/core/tasks/execution.d.ts +71 -0
- package/dist/core/tasks/execution.d.ts.map +1 -0
- package/dist/core/tasks/execution.js +292 -0
- package/dist/core/tasks/execution.js.map +1 -0
- package/dist/core/tasks/format.d.ts +0 -2
- package/dist/core/tasks/format.d.ts.map +1 -1
- package/dist/core/tasks/format.js +1 -16
- package/dist/core/tasks/format.js.map +1 -1
- package/dist/core/tasks/limits.d.ts +12 -1
- package/dist/core/tasks/limits.d.ts.map +1 -1
- package/dist/core/tasks/limits.js +20 -1
- package/dist/core/tasks/limits.js.map +1 -1
- package/dist/core/tasks/output.d.ts +17 -17
- package/dist/core/tasks/output.d.ts.map +1 -1
- package/dist/core/tasks/output.js +72 -69
- package/dist/core/tasks/output.js.map +1 -1
- package/dist/core/tasks/presentation.d.ts +14 -5
- package/dist/core/tasks/presentation.d.ts.map +1 -1
- package/dist/core/tasks/presentation.js +56 -185
- package/dist/core/tasks/presentation.js.map +1 -1
- package/dist/core/tasks/record.d.ts +45 -0
- package/dist/core/tasks/record.d.ts.map +1 -0
- package/dist/core/tasks/record.js +80 -0
- package/dist/core/tasks/record.js.map +1 -0
- package/dist/core/tasks/runtime.d.ts +22 -22
- package/dist/core/tasks/runtime.d.ts.map +1 -1
- package/dist/core/tasks/runtime.js +170 -343
- package/dist/core/tasks/runtime.js.map +1 -1
- package/dist/core/tasks/scheduler.d.ts +16 -0
- package/dist/core/tasks/scheduler.d.ts.map +1 -0
- package/dist/core/tasks/scheduler.js +42 -0
- package/dist/core/tasks/scheduler.js.map +1 -0
- package/dist/core/tasks/session.d.ts +1 -1
- package/dist/core/tasks/session.d.ts.map +1 -1
- package/dist/core/tasks/session.js +22 -35
- package/dist/core/tasks/session.js.map +1 -1
- package/dist/core/tasks/store.d.ts +18 -25
- package/dist/core/tasks/store.d.ts.map +1 -1
- package/dist/core/tasks/store.js +45 -43
- package/dist/core/tasks/store.js.map +1 -1
- package/dist/core/tasks/types.d.ts +159 -70
- package/dist/core/tasks/types.d.ts.map +1 -1
- package/dist/core/tasks/types.js +3 -9
- package/dist/core/tasks/types.js.map +1 -1
- package/dist/core/tools/shell-execution.d.ts +8 -7
- package/dist/core/tools/shell-execution.d.ts.map +1 -1
- package/dist/core/tools/shell-execution.js +19 -27
- package/dist/core/tools/shell-execution.js.map +1 -1
- package/dist/core/tools/shell-tool.d.ts.map +1 -1
- package/dist/core/tools/shell-tool.js +42 -47
- package/dist/core/tools/shell-tool.js.map +1 -1
- package/dist/core/usage-totals.d.ts +4 -3
- package/dist/core/usage-totals.d.ts.map +1 -1
- package/dist/core/usage-totals.js +32 -8
- package/dist/core/usage-totals.js.map +1 -1
- package/dist/extensions/agent/activity.d.ts +4 -4
- package/dist/extensions/agent/activity.d.ts.map +1 -1
- package/dist/extensions/agent/activity.js +15 -24
- package/dist/extensions/agent/activity.js.map +1 -1
- package/dist/extensions/agent/index.d.ts +2 -11
- package/dist/extensions/agent/index.d.ts.map +1 -1
- package/dist/extensions/agent/index.js +3 -88
- package/dist/extensions/agent/index.js.map +1 -1
- package/dist/extensions/agent/progress.d.ts +31 -0
- package/dist/extensions/agent/progress.d.ts.map +1 -0
- package/dist/extensions/agent/progress.js +135 -0
- package/dist/extensions/agent/progress.js.map +1 -0
- package/dist/extensions/agent/render.d.ts.map +1 -1
- package/dist/extensions/agent/render.js +8 -17
- package/dist/extensions/agent/render.js.map +1 -1
- package/dist/extensions/agent/report.d.ts +9 -0
- package/dist/extensions/agent/report.d.ts.map +1 -0
- package/dist/extensions/agent/report.js +40 -0
- package/dist/extensions/agent/report.js.map +1 -0
- package/dist/extensions/agent/settings-panel.d.ts +43 -0
- package/dist/extensions/agent/settings-panel.d.ts.map +1 -0
- package/dist/extensions/agent/settings-panel.js +125 -0
- package/dist/extensions/agent/settings-panel.js.map +1 -0
- package/dist/extensions/agent/settings.d.ts +1 -1
- package/dist/extensions/agent/settings.d.ts.map +1 -1
- package/dist/extensions/agent/settings.js +101 -83
- package/dist/extensions/agent/settings.js.map +1 -1
- package/dist/extensions/agent/tool.d.ts +13 -0
- package/dist/extensions/agent/tool.d.ts.map +1 -0
- package/dist/extensions/agent/tool.js +88 -0
- package/dist/extensions/agent/tool.js.map +1 -0
- package/dist/extensions/agent/types.d.ts +19 -21
- package/dist/extensions/agent/types.d.ts.map +1 -1
- package/dist/extensions/agent/types.js +2 -10
- package/dist/extensions/agent/types.js.map +1 -1
- package/dist/extensions/agent/worker.d.ts +16 -0
- package/dist/extensions/agent/worker.d.ts.map +1 -0
- package/dist/extensions/agent/worker.js +66 -0
- package/dist/extensions/agent/worker.js.map +1 -0
- package/dist/extensions/btw/agent.d.ts +1 -1
- package/dist/extensions/btw/agent.d.ts.map +1 -1
- package/dist/extensions/btw/agent.js +3 -20
- package/dist/extensions/btw/agent.js.map +1 -1
- package/dist/extensions/cached-compaction/index.d.ts.map +1 -1
- package/dist/extensions/cached-compaction/index.js +3 -22
- package/dist/extensions/cached-compaction/index.js.map +1 -1
- package/dist/extensions/cached-compaction/render.d.ts +1 -0
- package/dist/extensions/cached-compaction/render.d.ts.map +1 -1
- package/dist/extensions/cached-compaction/render.js +42 -14
- package/dist/extensions/cached-compaction/render.js.map +1 -1
- package/dist/extensions/deepwiki/client.d.ts.map +1 -1
- package/dist/extensions/deepwiki/client.js +6 -78
- package/dist/extensions/deepwiki/client.js.map +1 -1
- package/dist/extensions/deepwiki/transport.d.ts +3 -0
- package/dist/extensions/deepwiki/transport.d.ts.map +1 -0
- package/dist/extensions/deepwiki/transport.js +96 -0
- package/dist/extensions/deepwiki/transport.js.map +1 -0
- package/dist/extensions/provider/ui/builtin-data.d.ts +3 -3
- package/dist/extensions/provider/ui/builtin-data.d.ts.map +1 -1
- package/dist/extensions/provider/ui/builtin-data.js.map +1 -1
- package/dist/extensions/provider/ui/compat.d.ts +3 -3
- package/dist/extensions/provider/ui/compat.d.ts.map +1 -1
- package/dist/extensions/provider/ui/compat.js.map +1 -1
- package/dist/extensions/provider/ui/controls.d.ts +2 -2
- package/dist/extensions/provider/ui/controls.d.ts.map +1 -1
- package/dist/extensions/provider/ui/controls.js.map +1 -1
- package/dist/extensions/provider/ui/dialogs.d.ts +3 -3
- package/dist/extensions/provider/ui/dialogs.d.ts.map +1 -1
- package/dist/extensions/provider/ui/dialogs.js.map +1 -1
- package/dist/extensions/provider/ui/dictionary.d.ts +2 -2
- package/dist/extensions/provider/ui/dictionary.d.ts.map +1 -1
- package/dist/extensions/provider/ui/dictionary.js.map +1 -1
- package/dist/extensions/provider/ui/editor.d.ts.map +1 -1
- package/dist/extensions/provider/ui/editor.js +1 -3
- package/dist/extensions/provider/ui/editor.js.map +1 -1
- package/dist/extensions/provider/ui/fetch-models.d.ts +2 -2
- package/dist/extensions/provider/ui/fetch-models.d.ts.map +1 -1
- package/dist/extensions/provider/ui/fetch-models.js.map +1 -1
- package/dist/extensions/provider/ui/model-fields.d.ts +2 -2
- package/dist/extensions/provider/ui/model-fields.d.ts.map +1 -1
- package/dist/extensions/provider/ui/model-fields.js.map +1 -1
- package/dist/extensions/provider/ui/model-options.d.ts +6 -6
- package/dist/extensions/provider/ui/model-options.d.ts.map +1 -1
- package/dist/extensions/provider/ui/model-options.js.map +1 -1
- package/dist/extensions/provider/ui/pane.d.ts +21 -12
- package/dist/extensions/provider/ui/pane.d.ts.map +1 -1
- package/dist/extensions/provider/ui/pane.js.map +1 -1
- package/dist/extensions/provider/ui/provider-fields.d.ts +3 -3
- package/dist/extensions/provider/ui/provider-fields.d.ts.map +1 -1
- package/dist/extensions/provider/ui/provider-fields.js.map +1 -1
- package/dist/extensions/provider/ui/thinking-map.d.ts +2 -2
- package/dist/extensions/provider/ui/thinking-map.d.ts.map +1 -1
- package/dist/extensions/provider/ui/thinking-map.js.map +1 -1
- package/dist/extensions/run-summary/format.js +1 -1
- package/dist/extensions/run-summary/format.js.map +1 -1
- package/dist/extensions/statusline/usage.d.ts.map +1 -1
- package/dist/extensions/statusline/usage.js +2 -6
- package/dist/extensions/statusline/usage.js.map +1 -1
- package/dist/extensions/tasks/tool/actions.d.ts +1 -1
- package/dist/extensions/tasks/tool/actions.d.ts.map +1 -1
- package/dist/extensions/tasks/tool/actions.js +50 -115
- package/dist/extensions/tasks/tool/actions.js.map +1 -1
- package/dist/extensions/tasks/tool/constants.d.ts +1 -6
- package/dist/extensions/tasks/tool/constants.d.ts.map +1 -1
- package/dist/extensions/tasks/tool/constants.js +1 -6
- package/dist/extensions/tasks/tool/constants.js.map +1 -1
- package/dist/extensions/tasks/tool/schema.d.ts +0 -3
- package/dist/extensions/tasks/tool/schema.d.ts.map +1 -1
- package/dist/extensions/tasks/tool/schema.js +5 -14
- package/dist/extensions/tasks/tool/schema.js.map +1 -1
- package/dist/extensions/tasks/tool/types.d.ts +2 -8
- package/dist/extensions/tasks/tool/types.d.ts.map +1 -1
- package/dist/extensions/tasks/tool/types.js +0 -2
- package/dist/extensions/tasks/tool/types.js.map +1 -1
- package/dist/extensions/tasks/tool.d.ts.map +1 -1
- package/dist/extensions/tasks/tool.js +2 -2
- package/dist/extensions/tasks/tool.js.map +1 -1
- package/dist/extensions/tasks/ui/completion-render.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/completion-render.js +46 -47
- package/dist/extensions/tasks/ui/completion-render.js.map +1 -1
- package/dist/extensions/tasks/ui/inspector.d.ts +5 -3
- package/dist/extensions/tasks/ui/inspector.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/inspector.js +18 -6
- package/dist/extensions/tasks/ui/inspector.js.map +1 -1
- package/dist/extensions/tasks/ui/layout.d.ts +7 -7
- package/dist/extensions/tasks/ui/layout.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/layout.js +118 -84
- package/dist/extensions/tasks/ui/layout.js.map +1 -1
- package/dist/extensions/tasks/ui/list.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/list.js +45 -31
- package/dist/extensions/tasks/ui/list.js.map +1 -1
- package/dist/extensions/tasks/ui/manager.d.ts +16 -7
- package/dist/extensions/tasks/ui/manager.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/manager.js +167 -129
- package/dist/extensions/tasks/ui/manager.js.map +1 -1
- package/dist/extensions/tasks/ui/model.d.ts +29 -0
- package/dist/extensions/tasks/ui/model.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/model.js +16 -1
- package/dist/extensions/tasks/ui/model.js.map +1 -1
- package/dist/extensions/tasks/ui/render.d.ts +1 -1
- package/dist/extensions/tasks/ui/render.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/render.js +12 -9
- package/dist/extensions/tasks/ui/render.js.map +1 -1
- package/dist/extensions/tasks/ui/status.d.ts +15 -0
- package/dist/extensions/tasks/ui/status.d.ts.map +1 -0
- package/dist/extensions/tasks/ui/status.js +16 -0
- package/dist/extensions/tasks/ui/status.js.map +1 -0
- package/dist/extensions/tasks/ui/tree.js +1 -1
- package/dist/extensions/tasks/ui/tree.js.map +1 -1
- package/dist/extensions/tasks/ui/views.d.ts +10 -5
- package/dist/extensions/tasks/ui/views.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/views.js +61 -36
- package/dist/extensions/tasks/ui/views.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts +14 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +258 -7
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js +2 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +7 -4
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/status-marker.d.ts +2 -1
- package/dist/modes/interactive/components/status-marker.d.ts.map +1 -1
- package/dist/modes/interactive/components/status-marker.js +0 -1
- package/dist/modes/interactive/components/status-marker.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +10 -3
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +7 -1
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/utils/duration.d.ts +3 -0
- package/dist/utils/duration.d.ts.map +1 -0
- package/dist/utils/duration.js +17 -0
- package/dist/utils/duration.js.map +1 -0
- package/dist/utils/number.d.ts +3 -0
- package/dist/utils/number.d.ts.map +1 -0
- package/dist/utils/number.js +5 -0
- package/dist/utils/number.js.map +1 -0
- package/docs/bundled/extensions/agent.md +14 -12
- package/docs/bundled/extensions/cached-compaction.md +13 -4
- package/docs/bundled/extensions/deepwiki.md +3 -1
- package/docs/bundled/extensions/statusline.md +1 -1
- package/docs/bundled/tasks.md +15 -14
- package/docs/extensions.md +26 -10
- package/docs/packages.md +5 -3
- package/docs/sdk.md +3 -3
- package/docs/session-format.md +28 -24
- package/docs/settings.md +11 -0
- package/docs/skills.md +23 -0
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/schemas/settings.schema.json +36 -0
- package/dist/bundle/chunks/chunk-FSJ45CRP.js +0 -229
- package/dist/bundle/chunks/chunk-W3FIUMGM.js +0 -1501
- package/dist/core/tasks/history.d.ts +0 -4
- package/dist/core/tasks/history.d.ts.map +0 -1
- package/dist/core/tasks/history.js +0 -131
- package/dist/core/tasks/history.js.map +0 -1
- package/dist/extensions/agent/runner.d.ts +0 -24
- package/dist/extensions/agent/runner.d.ts.map +0 -1
- package/dist/extensions/agent/runner.js +0 -274
- package/dist/extensions/agent/runner.js.map +0 -1
- package/dist/extensions/deepwiki/http.d.ts +0 -13
- package/dist/extensions/deepwiki/http.d.ts.map +0 -1
- package/dist/extensions/deepwiki/http.js +0 -88
- package/dist/extensions/deepwiki/http.js.map +0 -1
- package/dist/extensions/tasks/ui/task-view.d.ts +0 -13
- package/dist/extensions/tasks/ui/task-view.d.ts.map +0 -1
- package/dist/extensions/tasks/ui/task-view.js +0 -20
- package/dist/extensions/tasks/ui/task-view.js.map +0 -1
|
@@ -5,11 +5,20 @@ import { homedir } from "node:os";
|
|
|
5
5
|
import { basename, dirname, join, relative } from "node:path";
|
|
6
6
|
import { Container, getKeybindings, Input, matchesKey, Spacer, truncateToWidth, visibleWidth, } from "@earendil-works/pi-tui";
|
|
7
7
|
import { CONFIG_DIR_NAME } from "../../../config.js";
|
|
8
|
+
import { readSkillDisableModelInvocation, resolveSkillEffectiveState, } from "../../../core/skills.js";
|
|
8
9
|
import { BUILTIN_PATH_PREFIX } from "../../../core/source-info.js";
|
|
9
10
|
import { canonicalizePath, isLocalPath, resolvePath } from "../../../utils/paths.js";
|
|
10
11
|
import { theme } from "../theme/theme.js";
|
|
11
12
|
import { DynamicBorder } from "./dynamic-border.js";
|
|
12
13
|
import { keyHint, rawKeyHint } from "./keybinding-hints.js";
|
|
14
|
+
function hasResourcePattern(patterns, pattern) {
|
|
15
|
+
const normalized = pattern.replace(/\\/g, "/");
|
|
16
|
+
for (const candidate of patterns) {
|
|
17
|
+
if (candidate.replace(/\\/g, "/") === normalized)
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
13
22
|
const RESOURCE_TYPES = ["extensions", "skills", "prompts", "themes"];
|
|
14
23
|
const RESOURCE_TYPE_LABELS = {
|
|
15
24
|
extensions: "Extensions",
|
|
@@ -101,6 +110,8 @@ function buildGroups(resolved, agentDir) {
|
|
|
101
110
|
displayName,
|
|
102
111
|
groupKey,
|
|
103
112
|
subgroupKey,
|
|
113
|
+
skillInvocationOverride: res.skillInvocationOverride,
|
|
114
|
+
frontmatterDisableModelInvocation: resourceType === "skills" ? readSkillDisableModelInvocation(path) : undefined,
|
|
104
115
|
});
|
|
105
116
|
}
|
|
106
117
|
};
|
|
@@ -142,7 +153,7 @@ class ConfigSelectorHeader {
|
|
|
142
153
|
const title = theme.bold(this.writeScope === "project" ? "Project Local Resources" : "Global Resources");
|
|
143
154
|
const sep = theme.fg("muted", " · ");
|
|
144
155
|
const switchHint = this.projectModeAvailable ? keyHint("tui.input.tab", "switch mode") + sep : "";
|
|
145
|
-
const actionHint =
|
|
156
|
+
const actionHint = rawKeyHint("space", "change");
|
|
146
157
|
const hint = switchHint + actionHint + sep + rawKeyHint("esc", "close");
|
|
147
158
|
const spacing = Math.max(1, width - visibleWidth(title) - visibleWidth(hint));
|
|
148
159
|
const scopeHint = this.writeScope === "project"
|
|
@@ -173,6 +184,7 @@ class ResourceList {
|
|
|
173
184
|
this.agentDir = agentDir;
|
|
174
185
|
this.writeScope = writeScope;
|
|
175
186
|
this.inheritedEnabledByKey = this.buildInheritedEnabledMap(groupsByScope.global);
|
|
187
|
+
this.inheritedSkillStateByKey = this.buildInheritedSkillStateMap(groupsByScope.global);
|
|
176
188
|
this.searchInput = new Input();
|
|
177
189
|
// 8 lines of chrome: top spacer + top border + spacer + header (2 lines) + spacer + bottom spacer + bottom border
|
|
178
190
|
const chrome = 8;
|
|
@@ -199,6 +211,19 @@ class ResourceList {
|
|
|
199
211
|
}
|
|
200
212
|
return result;
|
|
201
213
|
}
|
|
214
|
+
buildInheritedSkillStateMap(groups) {
|
|
215
|
+
const result = new Map();
|
|
216
|
+
for (const group of groups) {
|
|
217
|
+
for (const subgroup of group.subgroups) {
|
|
218
|
+
if (subgroup.type !== "skills")
|
|
219
|
+
continue;
|
|
220
|
+
for (const item of subgroup.items) {
|
|
221
|
+
result.set(this.getResourceItemKey(item), this.getSkillEffectiveState(item));
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return result;
|
|
226
|
+
}
|
|
202
227
|
buildFlatList() {
|
|
203
228
|
this.flatItems = [];
|
|
204
229
|
for (const group of this.groups) {
|
|
@@ -276,6 +301,12 @@ class ResourceList {
|
|
|
276
301
|
}
|
|
277
302
|
updateItem(item, enabled) {
|
|
278
303
|
item.enabled = enabled;
|
|
304
|
+
if (this.writeScope === "global") {
|
|
305
|
+
this.inheritedEnabledByKey.set(this.getResourceItemKey(item), enabled);
|
|
306
|
+
if (item.resourceType === "skills") {
|
|
307
|
+
this.inheritedSkillStateByKey.set(this.getResourceItemKey(item), this.getSkillEffectiveState(item));
|
|
308
|
+
}
|
|
309
|
+
}
|
|
279
310
|
// Update in groups too
|
|
280
311
|
for (const group of this.groups) {
|
|
281
312
|
for (const subgroup of group.subgroups) {
|
|
@@ -323,7 +354,11 @@ class ResourceList {
|
|
|
323
354
|
const dimmed = this.isDimmedItem(item);
|
|
324
355
|
const nameText = isSelected && !dimmed ? theme.bold(item.displayName) : item.displayName;
|
|
325
356
|
const name = dimmed ? theme.fg("dim", nameText) : nameText;
|
|
326
|
-
|
|
357
|
+
const prefix = `${cursor} ${this.renderCheckbox(item)} `;
|
|
358
|
+
const suffix = this.getItemSuffix(item);
|
|
359
|
+
const nameWidth = Math.max(1, width - visibleWidth(prefix) - visibleWidth(suffix));
|
|
360
|
+
const renderedName = truncateToWidth(name, nameWidth, "...");
|
|
361
|
+
lines.push(truncateToWidth(`${prefix}${renderedName}${suffix}`, width, "..."));
|
|
327
362
|
}
|
|
328
363
|
}
|
|
329
364
|
// Scroll indicator
|
|
@@ -394,6 +429,22 @@ class ResourceList {
|
|
|
394
429
|
this.filterItems(this.searchInput.getValue());
|
|
395
430
|
}
|
|
396
431
|
toggleResource(item) {
|
|
432
|
+
if (item.resourceType === "skills") {
|
|
433
|
+
if (this.writeScope === "project") {
|
|
434
|
+
const state = this.getNextProjectSkillOverrideState(item);
|
|
435
|
+
if (!this.setProjectSkillOverride(item, state))
|
|
436
|
+
return undefined;
|
|
437
|
+
item.skillInvocationOverride =
|
|
438
|
+
state === "on" ? "model-and-user" : state === "user-only" ? "user-only" : undefined;
|
|
439
|
+
return state === "inherit" ? this.getInheritedSkillEffectiveState(item) !== "off" : state !== "off";
|
|
440
|
+
}
|
|
441
|
+
const currentState = this.getSkillEffectiveState(item);
|
|
442
|
+
const nextState = currentState === "on" ? "user-only" : currentState === "user-only" ? "off" : "on";
|
|
443
|
+
this.setGlobalSkillEffectiveState(item, nextState);
|
|
444
|
+
item.skillInvocationOverride =
|
|
445
|
+
nextState === "on" ? "model-and-user" : nextState === "user-only" ? "user-only" : undefined;
|
|
446
|
+
return nextState !== "off";
|
|
447
|
+
}
|
|
397
448
|
if (this.writeScope === "project") {
|
|
398
449
|
const state = this.getNextOverrideState(item);
|
|
399
450
|
if (!this.setProjectResourceOverride(item, state))
|
|
@@ -505,7 +556,104 @@ class ResourceList {
|
|
|
505
556
|
this.settingsManager.setPackages(packages);
|
|
506
557
|
}
|
|
507
558
|
}
|
|
559
|
+
setGlobalSkillEffectiveState(item, state) {
|
|
560
|
+
const enabled = state !== "off";
|
|
561
|
+
if (item.metadata.origin === "top-level")
|
|
562
|
+
this.toggleTopLevelResource(item, enabled);
|
|
563
|
+
else
|
|
564
|
+
this.togglePackageResource(item, enabled);
|
|
565
|
+
this.setSkillInvocationOverride(item, "user", state === "on" ? "model-and-user" : state === "user-only" ? "user-only" : undefined);
|
|
566
|
+
}
|
|
567
|
+
setProjectSkillOverride(item, state) {
|
|
568
|
+
const loadState = state === "inherit" ? "inherit" : state === "off" ? "unload" : "load";
|
|
569
|
+
if (!this.setProjectResourceOverride(item, loadState))
|
|
570
|
+
return false;
|
|
571
|
+
this.setSkillInvocationOverride(item, "project", state === "on" ? "model-and-user" : state === "user-only" ? "user-only" : undefined);
|
|
572
|
+
return true;
|
|
573
|
+
}
|
|
574
|
+
setSkillInvocationOverride(item, scope, override) {
|
|
575
|
+
if (item.metadata.origin === "top-level") {
|
|
576
|
+
const settings = scope === "project" ? this.settingsManager.getProjectSettings() : this.settingsManager.getGlobalSettings();
|
|
577
|
+
const updated = { ...settings.skillInvocationOverrides };
|
|
578
|
+
const patterns = this.getTopLevelOverridePatterns(item, scope);
|
|
579
|
+
for (const pattern of Object.keys(updated)) {
|
|
580
|
+
if (hasResourcePattern(patterns, pattern))
|
|
581
|
+
delete updated[pattern];
|
|
582
|
+
}
|
|
583
|
+
if (override) {
|
|
584
|
+
const pattern = scope === "project" && this.isInheritedGlobalItem(item)
|
|
585
|
+
? item.path
|
|
586
|
+
: this.getResourcePatternForScope(item, scope);
|
|
587
|
+
updated[pattern] = override;
|
|
588
|
+
}
|
|
589
|
+
if (scope === "project")
|
|
590
|
+
this.settingsManager.setProjectSkillInvocationOverrides(updated);
|
|
591
|
+
else
|
|
592
|
+
this.settingsManager.setSkillInvocationOverrides(updated);
|
|
593
|
+
return;
|
|
594
|
+
}
|
|
595
|
+
const settings = scope === "project" ? this.settingsManager.getProjectSettings() : this.settingsManager.getGlobalSettings();
|
|
596
|
+
const packages = [...(settings.packages ?? [])];
|
|
597
|
+
const pkgIndex = packages.findIndex((pkg) => this.packageSourceStringMatches(item.metadata.source, this.getItemScope(item), typeof pkg === "string" ? pkg : pkg.source, scope));
|
|
598
|
+
if (pkgIndex === -1)
|
|
599
|
+
return;
|
|
600
|
+
let pkg = packages[pkgIndex];
|
|
601
|
+
if (typeof pkg === "string") {
|
|
602
|
+
if (!override)
|
|
603
|
+
return;
|
|
604
|
+
pkg = { source: pkg };
|
|
605
|
+
packages[pkgIndex] = pkg;
|
|
606
|
+
}
|
|
607
|
+
const updated = { ...pkg.skillInvocationOverrides };
|
|
608
|
+
const patterns = this.getPackageSkillInvocationOverridePatterns(item);
|
|
609
|
+
for (const pattern of Object.keys(updated)) {
|
|
610
|
+
if (hasResourcePattern(patterns, pattern))
|
|
611
|
+
delete updated[pattern];
|
|
612
|
+
}
|
|
613
|
+
const pattern = this.getPackageResourcePattern(item);
|
|
614
|
+
if (override)
|
|
615
|
+
updated[pattern] = override;
|
|
616
|
+
pkg.skillInvocationOverrides = Object.keys(updated).length > 0 ? updated : undefined;
|
|
617
|
+
const hasConfiguration = RESOURCE_TYPES.some((key) => pkg[key] !== undefined) || pkg.skillInvocationOverrides !== undefined;
|
|
618
|
+
if (!hasConfiguration) {
|
|
619
|
+
if (scope === "project" && pkg.autoload === false)
|
|
620
|
+
packages.splice(pkgIndex, 1);
|
|
621
|
+
else
|
|
622
|
+
packages[pkgIndex] = pkg.source;
|
|
623
|
+
}
|
|
624
|
+
if (scope === "project")
|
|
625
|
+
this.settingsManager.setProjectPackages(packages);
|
|
626
|
+
else
|
|
627
|
+
this.settingsManager.setPackages(packages);
|
|
628
|
+
}
|
|
508
629
|
renderCheckbox(item) {
|
|
630
|
+
if (item.resourceType === "skills") {
|
|
631
|
+
if (this.writeScope === "project") {
|
|
632
|
+
const state = this.getProjectSkillOverrideState(item);
|
|
633
|
+
if (state === "on")
|
|
634
|
+
return theme.fg("success", "[+]");
|
|
635
|
+
if (state === "user-only")
|
|
636
|
+
return theme.fg("accent", "[u]");
|
|
637
|
+
if (state === "off")
|
|
638
|
+
return theme.fg("warning", "[-]");
|
|
639
|
+
if (state === "load") {
|
|
640
|
+
const effectiveState = this.getSkillEffectiveState(item);
|
|
641
|
+
if (effectiveState === "user-only")
|
|
642
|
+
return theme.fg("accent", "[u]");
|
|
643
|
+
if (effectiveState === "off")
|
|
644
|
+
return theme.fg("warning", "[-]");
|
|
645
|
+
return theme.fg("success", "[+]");
|
|
646
|
+
}
|
|
647
|
+
const inheritedState = this.getInheritedSkillEffectiveState(item);
|
|
648
|
+
return theme.fg("dim", inheritedState === "on" ? "[x]" : inheritedState === "user-only" ? "[u]" : "[ ]");
|
|
649
|
+
}
|
|
650
|
+
const state = this.getSkillEffectiveState(item);
|
|
651
|
+
if (state === "on")
|
|
652
|
+
return theme.fg("success", "[x]");
|
|
653
|
+
if (state === "user-only")
|
|
654
|
+
return theme.fg("accent", "[u]");
|
|
655
|
+
return theme.fg("dim", "[ ]");
|
|
656
|
+
}
|
|
509
657
|
if (this.writeScope === "project") {
|
|
510
658
|
const state = this.getProjectOverrideState(item);
|
|
511
659
|
if (state === "load")
|
|
@@ -517,6 +665,21 @@ class ResourceList {
|
|
|
517
665
|
return item.enabled ? theme.fg("success", "[x]") : theme.fg("dim", "[ ]");
|
|
518
666
|
}
|
|
519
667
|
getItemSuffix(item) {
|
|
668
|
+
if (item.resourceType === "skills") {
|
|
669
|
+
if (this.writeScope === "project") {
|
|
670
|
+
const state = this.getProjectSkillOverrideState(item);
|
|
671
|
+
if (state === "on")
|
|
672
|
+
return theme.fg("muted", " project on");
|
|
673
|
+
if (state === "user-only")
|
|
674
|
+
return theme.fg("muted", " project user only");
|
|
675
|
+
if (state === "off")
|
|
676
|
+
return theme.fg("muted", " project off");
|
|
677
|
+
if (state === "load")
|
|
678
|
+
return theme.fg("muted", " project load");
|
|
679
|
+
return this.isInheritedGlobalItem(item) ? theme.fg("dim", " inherited global") : "";
|
|
680
|
+
}
|
|
681
|
+
return this.getSkillEffectiveState(item) === "user-only" ? theme.fg("accent", " user only") : "";
|
|
682
|
+
}
|
|
520
683
|
if (this.writeScope !== "project")
|
|
521
684
|
return "";
|
|
522
685
|
const state = this.getProjectOverrideState(item);
|
|
@@ -527,9 +690,80 @@ class ResourceList {
|
|
|
527
690
|
return this.isInheritedGlobalItem(item) ? theme.fg("dim", " inherited global") : "";
|
|
528
691
|
}
|
|
529
692
|
isDimmedItem(item) {
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
693
|
+
if (this.writeScope !== "project" || !this.isInheritedGlobalItem(item))
|
|
694
|
+
return false;
|
|
695
|
+
return item.resourceType === "skills"
|
|
696
|
+
? this.getProjectSkillOverrideState(item) === "inherit"
|
|
697
|
+
: this.getProjectOverrideState(item) === "inherit";
|
|
698
|
+
}
|
|
699
|
+
getSkillEffectiveState(item) {
|
|
700
|
+
return resolveSkillEffectiveState({
|
|
701
|
+
enabled: item.enabled,
|
|
702
|
+
invocationOverride: item.skillInvocationOverride,
|
|
703
|
+
frontmatterDisableModelInvocation: item.frontmatterDisableModelInvocation,
|
|
704
|
+
});
|
|
705
|
+
}
|
|
706
|
+
getInheritedSkillEffectiveState(item) {
|
|
707
|
+
const inherited = this.inheritedSkillStateByKey.get(this.getResourceItemKey(item));
|
|
708
|
+
if (inherited)
|
|
709
|
+
return inherited;
|
|
710
|
+
const userScoped = this.getItemScope(item) === "user";
|
|
711
|
+
return resolveSkillEffectiveState({
|
|
712
|
+
enabled: userScoped ? item.enabled : true,
|
|
713
|
+
invocationOverride: userScoped ? item.skillInvocationOverride : undefined,
|
|
714
|
+
frontmatterDisableModelInvocation: item.frontmatterDisableModelInvocation,
|
|
715
|
+
});
|
|
716
|
+
}
|
|
717
|
+
getNextProjectSkillOverrideState(item) {
|
|
718
|
+
const states = ["on", "user-only", "off"];
|
|
719
|
+
const inheritedIndex = states.indexOf(this.getInheritedSkillEffectiveState(item));
|
|
720
|
+
const sequence = [...states.slice(inheritedIndex + 1), ...states.slice(0, inheritedIndex + 1)];
|
|
721
|
+
const current = this.getProjectSkillOverrideState(item);
|
|
722
|
+
if (current === "inherit")
|
|
723
|
+
return sequence[0];
|
|
724
|
+
if (current === "load")
|
|
725
|
+
return "inherit";
|
|
726
|
+
const currentIndex = sequence.indexOf(current);
|
|
727
|
+
return sequence[currentIndex + 1] ?? "inherit";
|
|
728
|
+
}
|
|
729
|
+
getProjectSkillOverrideState(item) {
|
|
730
|
+
if (this.writeScope !== "project")
|
|
731
|
+
return "inherit";
|
|
732
|
+
let loadState;
|
|
733
|
+
let invocationOverrides;
|
|
734
|
+
let patterns;
|
|
735
|
+
if (item.metadata.origin === "top-level") {
|
|
736
|
+
const settings = this.settingsManager.getProjectSettings();
|
|
737
|
+
loadState = this.getOverrideStateFromEntries((settings.skills ?? []), this.getTopLevelOverridePatterns(item, "project"), false);
|
|
738
|
+
invocationOverrides = settings.skillInvocationOverrides;
|
|
739
|
+
patterns = this.getTopLevelOverridePatterns(item, "project");
|
|
740
|
+
}
|
|
741
|
+
else {
|
|
742
|
+
const pkg = this.findMatchingPackageSource(item, "project");
|
|
743
|
+
if (typeof pkg !== "object")
|
|
744
|
+
return "inherit";
|
|
745
|
+
loadState =
|
|
746
|
+
pkg.skills === undefined
|
|
747
|
+
? "inherit"
|
|
748
|
+
: this.getOverrideStateFromEntries(pkg.skills, this.getPackageSkillInvocationOverridePatterns(item), pkg.autoload !== false);
|
|
749
|
+
invocationOverrides = pkg.skillInvocationOverrides;
|
|
750
|
+
patterns = this.getPackageSkillInvocationOverridePatterns(item);
|
|
751
|
+
}
|
|
752
|
+
if (loadState === "unload")
|
|
753
|
+
return "off";
|
|
754
|
+
const invocation = this.getSkillInvocationOverrideFromMap(invocationOverrides, patterns);
|
|
755
|
+
if (invocation)
|
|
756
|
+
return invocation === "user-only" ? "user-only" : "on";
|
|
757
|
+
return loadState;
|
|
758
|
+
}
|
|
759
|
+
getSkillInvocationOverrideFromMap(overrides, patterns) {
|
|
760
|
+
for (const [pattern, override] of Object.entries(overrides ?? {})) {
|
|
761
|
+
if (!hasResourcePattern(patterns, pattern))
|
|
762
|
+
continue;
|
|
763
|
+
if (override === "model-and-user" || override === "user-only")
|
|
764
|
+
return override;
|
|
765
|
+
}
|
|
766
|
+
return undefined;
|
|
533
767
|
}
|
|
534
768
|
setProjectResourceOverride(item, state) {
|
|
535
769
|
return item.metadata.origin === "top-level"
|
|
@@ -586,7 +820,8 @@ class ResourceList {
|
|
|
586
820
|
if (state !== "inherit")
|
|
587
821
|
updated.push(`${state === "load" ? "+" : "-"}${pattern}`);
|
|
588
822
|
pkg[item.resourceType] = updated.length > 0 ? updated : undefined;
|
|
589
|
-
if (!RESOURCE_TYPES.some((key) => pkg[key] !== undefined)
|
|
823
|
+
if (!RESOURCE_TYPES.some((key) => pkg[key] !== undefined) &&
|
|
824
|
+
pkg.skillInvocationOverrides === undefined) {
|
|
590
825
|
if (pkg.autoload === false)
|
|
591
826
|
packages.splice(pkgIndex, 1);
|
|
592
827
|
else
|
|
@@ -623,7 +858,7 @@ class ResourceList {
|
|
|
623
858
|
return "unload";
|
|
624
859
|
let state = "inherit";
|
|
625
860
|
for (const entry of entries) {
|
|
626
|
-
if (!patterns
|
|
861
|
+
if (!hasResourcePattern(patterns, this.getPatternEntryTarget(entry)))
|
|
627
862
|
continue;
|
|
628
863
|
if (entry.startsWith("!") || entry.startsWith("-"))
|
|
629
864
|
state = "unload";
|
|
@@ -648,6 +883,13 @@ class ResourceList {
|
|
|
648
883
|
]);
|
|
649
884
|
if (item.metadata.baseDir)
|
|
650
885
|
patterns.add(relative(item.metadata.baseDir, item.path));
|
|
886
|
+
if (item.resourceType === "skills" && basename(item.path) === "SKILL.md") {
|
|
887
|
+
const parentDir = dirname(item.path);
|
|
888
|
+
patterns.add(parentDir);
|
|
889
|
+
patterns.add(relative(baseDir, parentDir));
|
|
890
|
+
if (item.metadata.baseDir)
|
|
891
|
+
patterns.add(relative(item.metadata.baseDir, parentDir));
|
|
892
|
+
}
|
|
651
893
|
return patterns;
|
|
652
894
|
}
|
|
653
895
|
getResourcePatternForScope(item, scope) {
|
|
@@ -702,6 +944,15 @@ class ResourceList {
|
|
|
702
944
|
const baseDir = item.metadata.baseDir ?? dirname(item.path);
|
|
703
945
|
return relative(baseDir, item.path);
|
|
704
946
|
}
|
|
947
|
+
getPackageSkillInvocationOverridePatterns(item) {
|
|
948
|
+
const baseDir = item.metadata.baseDir ?? dirname(item.path);
|
|
949
|
+
const patterns = new Set([this.getPackageResourcePattern(item), item.path]);
|
|
950
|
+
if (basename(item.path) === "SKILL.md") {
|
|
951
|
+
patterns.add(relative(baseDir, dirname(item.path)));
|
|
952
|
+
patterns.add(dirname(item.path));
|
|
953
|
+
}
|
|
954
|
+
return patterns;
|
|
955
|
+
}
|
|
705
956
|
}
|
|
706
957
|
export class ConfigSelectorComponent extends Container {
|
|
707
958
|
get focused() {
|