@aexol/opencode-wizard 0.3.3 → 0.3.4
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/graphql-operations.d.ts +4 -0
- package/dist/graphql-operations.js +225 -0
- package/dist/graphql-operations.js.map +1 -0
- package/dist/plugin-tools.d.ts +64 -0
- package/dist/plugin-tools.js +57 -0
- package/dist/plugin-tools.js.map +1 -0
- package/dist/published-skills-system-note.d.ts +9 -0
- package/dist/published-skills-system-note.js +34 -0
- package/dist/published-skills-system-note.js.map +1 -0
- package/dist/published-skills-transform.d.ts +161 -0
- package/dist/published-skills-transform.js +238 -0
- package/dist/published-skills-transform.js.map +1 -0
- package/dist/server/auth-flow.d.ts +10 -0
- package/dist/server/auth-flow.js +215 -0
- package/dist/server/auth-flow.js.map +1 -0
- package/dist/server/auth-store.d.ts +19 -0
- package/dist/server/auth-store.js +177 -0
- package/dist/server/auth-store.js.map +1 -0
- package/dist/server/client.d.ts +51 -0
- package/dist/server/client.js +244 -0
- package/dist/server/client.js.map +1 -0
- package/dist/server/config.d.ts +2 -0
- package/dist/server/config.js +82 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/constants.d.ts +26 -0
- package/dist/server/constants.js +32 -0
- package/dist/server/constants.js.map +1 -0
- package/dist/server/path-utils.d.ts +2 -0
- package/dist/server/path-utils.js +8 -0
- package/dist/server/path-utils.js.map +1 -0
- package/dist/server/presence.d.ts +14 -0
- package/dist/server/presence.js +68 -0
- package/dist/server/presence.js.map +1 -0
- package/dist/server/runtime.d.ts +32 -0
- package/dist/server/runtime.js +1110 -0
- package/dist/server/runtime.js.map +1 -0
- package/dist/server/status.d.ts +27 -0
- package/dist/server/status.js +224 -0
- package/dist/server/status.js.map +1 -0
- package/dist/server/types.d.ts +321 -0
- package/dist/server/types.js +2 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server/workspace.d.ts +15 -0
- package/dist/server/workspace.js +126 -0
- package/dist/server/workspace.js.map +1 -0
- package/dist/server.d.ts +4 -309
- package/dist/server.js +4 -2611
- package/dist/server.js.map +1 -1
- package/dist/smoke-published-skills.js +11 -9
- package/dist/smoke-published-skills.js.map +1 -1
- package/dist/tui/components/common.d.ts +15 -0
- package/dist/tui/components/common.js +81 -0
- package/dist/tui/components/common.js.map +1 -0
- package/dist/tui/components/preference-action-notice-row.d.ts +5 -0
- package/dist/tui/components/preference-action-notice-row.js +17 -0
- package/dist/tui/components/preference-action-notice-row.js.map +1 -0
- package/dist/tui/components/skill-catalog-row.d.ts +8 -0
- package/dist/tui/components/skill-catalog-row.js +124 -0
- package/dist/tui/components/skill-catalog-row.js.map +1 -0
- package/dist/tui/components/status-content.d.ts +14 -0
- package/dist/tui/components/status-content.js +131 -0
- package/dist/tui/components/status-content.js.map +1 -0
- package/dist/tui/components/wizard-skills-dialog-content.d.ts +9 -0
- package/dist/tui/components/wizard-skills-dialog-content.js +219 -0
- package/dist/tui/components/wizard-skills-dialog-content.js.map +1 -0
- package/dist/tui/components/wizard-skills-dialog.d.ts +7 -0
- package/dist/tui/components/wizard-skills-dialog.js +156 -0
- package/dist/tui/components/wizard-skills-dialog.js.map +1 -0
- package/dist/tui/constants.d.ts +8 -0
- package/dist/tui/constants.js +9 -0
- package/dist/tui/constants.js.map +1 -0
- package/dist/tui/formatting.d.ts +8 -0
- package/dist/tui/formatting.js +45 -0
- package/dist/tui/formatting.js.map +1 -0
- package/dist/tui/plugin.d.ts +2 -0
- package/dist/tui/plugin.js +26 -0
- package/dist/tui/plugin.js.map +1 -0
- package/dist/tui/rendering.d.ts +2 -0
- package/dist/tui/rendering.js +8 -0
- package/dist/tui/rendering.js.map +1 -0
- package/dist/tui/skill-helpers.d.ts +13 -0
- package/dist/tui/skill-helpers.js +49 -0
- package/dist/tui/skill-helpers.js.map +1 -0
- package/dist/tui/slots.d.ts +2 -0
- package/dist/tui/slots.js +56 -0
- package/dist/tui/slots.js.map +1 -0
- package/dist/tui/status.d.ts +2 -0
- package/dist/tui/status.js +21 -0
- package/dist/tui/status.js.map +1 -0
- package/dist/tui/types.d.ts +75 -0
- package/dist/tui/types.js +2 -0
- package/dist/tui/types.js.map +1 -0
- package/dist/tui.d.ts +1 -44
- package/dist/tui.js +2 -870
- package/dist/tui.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { createComponent as _$createComponent } from "@opentui/solid";
|
|
2
|
+
import { insert as _$insert } from "@opentui/solid";
|
|
3
|
+
import { effect as _$effect } from "@opentui/solid";
|
|
4
|
+
import { createTextNode as _$createTextNode } from "@opentui/solid";
|
|
5
|
+
import { insertNode as _$insertNode } from "@opentui/solid";
|
|
6
|
+
import { setProp as _$setProp } from "@opentui/solid";
|
|
7
|
+
import { createElement as _$createElement } from "@opentui/solid";
|
|
8
|
+
import { createSignal } from 'solid-js';
|
|
9
|
+
import { SKILLS_PAGE_SIZE } from '../constants.js';
|
|
10
|
+
import { compactStatusMessage, formatSkillsCatalogUnavailableMessage } from '../formatting.js';
|
|
11
|
+
import { getInstallableNotInstalledSkills, getSkillRowState } from '../skill-helpers.js';
|
|
12
|
+
import { PreferenceActionNoticeRow } from './preference-action-notice-row.js';
|
|
13
|
+
import { SkillCatalogRow } from './skill-catalog-row.js';
|
|
14
|
+
export const WizardSkillsDialogContent = props => {
|
|
15
|
+
const [page, setPage] = createSignal(0);
|
|
16
|
+
const content = () => {
|
|
17
|
+
const currentStatus = props.status();
|
|
18
|
+
if (currentStatus.kind === 'loading') {
|
|
19
|
+
return (() => {
|
|
20
|
+
var _el$ = _$createElement("text");
|
|
21
|
+
_$insertNode(_el$, _$createTextNode(`Refreshing published skills…`));
|
|
22
|
+
_$setProp(_el$, "wrapMode", "none");
|
|
23
|
+
_$setProp(_el$, "overflow", "hidden");
|
|
24
|
+
_$effect(_$p => _$setProp(_el$, "fg", props.theme.textMuted, _$p));
|
|
25
|
+
return _el$;
|
|
26
|
+
})();
|
|
27
|
+
}
|
|
28
|
+
if (currentStatus.kind === 'error') {
|
|
29
|
+
return (() => {
|
|
30
|
+
var _el$3 = _$createElement("text"),
|
|
31
|
+
_el$4 = _$createTextNode(`unavailable: `);
|
|
32
|
+
_$insertNode(_el$3, _el$4);
|
|
33
|
+
_$setProp(_el$3, "wrapMode", "none");
|
|
34
|
+
_$setProp(_el$3, "overflow", "hidden");
|
|
35
|
+
_$insert(_el$3, () => compactStatusMessage(currentStatus.message), null);
|
|
36
|
+
_$effect(_$p => _$setProp(_el$3, "fg", props.theme.warning, _$p));
|
|
37
|
+
return _el$3;
|
|
38
|
+
})();
|
|
39
|
+
}
|
|
40
|
+
if (!currentStatus.snapshot.catalog) {
|
|
41
|
+
return (() => {
|
|
42
|
+
var _el$5 = _$createElement("text"),
|
|
43
|
+
_el$6 = _$createTextNode(`catalog `);
|
|
44
|
+
_$insertNode(_el$5, _el$6);
|
|
45
|
+
_$setProp(_el$5, "wrapMode", "none");
|
|
46
|
+
_$setProp(_el$5, "overflow", "hidden");
|
|
47
|
+
_$insert(_el$5, () => formatSkillsCatalogUnavailableMessage(currentStatus.snapshot), null);
|
|
48
|
+
_$effect(_$p => _$setProp(_el$5, "fg", props.theme.textMuted, _$p));
|
|
49
|
+
return _el$5;
|
|
50
|
+
})();
|
|
51
|
+
}
|
|
52
|
+
const {
|
|
53
|
+
catalog
|
|
54
|
+
} = currentStatus.snapshot;
|
|
55
|
+
const installableNotInstalledSkills = getInstallableNotInstalledSkills(currentStatus.snapshot);
|
|
56
|
+
const rows = [...catalog.skills.map(skill => ({
|
|
57
|
+
skill,
|
|
58
|
+
ignored: false,
|
|
59
|
+
state: getSkillRowState(skill)
|
|
60
|
+
})), ...currentStatus.snapshot.ignoredPublishedSkills.skills.map(skill => ({
|
|
61
|
+
skill,
|
|
62
|
+
ignored: true,
|
|
63
|
+
state: getSkillRowState(skill)
|
|
64
|
+
})), ...installableNotInstalledSkills.map(skill => ({
|
|
65
|
+
skill,
|
|
66
|
+
ignored: false,
|
|
67
|
+
state: 'installable'
|
|
68
|
+
}))];
|
|
69
|
+
const totalPages = Math.max(1, Math.ceil(rows.length / SKILLS_PAGE_SIZE));
|
|
70
|
+
const currentPage = Math.min(page(), totalPages - 1);
|
|
71
|
+
const startIndex = currentPage * SKILLS_PAGE_SIZE;
|
|
72
|
+
const endIndex = Math.min(startIndex + SKILLS_PAGE_SIZE, rows.length);
|
|
73
|
+
const visibleRows = rows.slice(startIndex, endIndex);
|
|
74
|
+
const canGoBack = currentPage > 0;
|
|
75
|
+
const canGoForward = currentPage < totalPages - 1;
|
|
76
|
+
const goBack = () => {
|
|
77
|
+
if (!canGoBack) return;
|
|
78
|
+
setPage(currentPage - 1);
|
|
79
|
+
};
|
|
80
|
+
const goForward = () => {
|
|
81
|
+
if (!canGoForward) return;
|
|
82
|
+
setPage(currentPage + 1);
|
|
83
|
+
};
|
|
84
|
+
return (() => {
|
|
85
|
+
var _el$7 = _$createElement("box"),
|
|
86
|
+
_el$8 = _$createElement("box"),
|
|
87
|
+
_el$9 = _$createElement("text"),
|
|
88
|
+
_el$0 = _$createElement("b"),
|
|
89
|
+
_el$1 = _$createTextNode(` skills`),
|
|
90
|
+
_el$10 = _$createTextNode(` · `),
|
|
91
|
+
_el$11 = _$createTextNode(` GLOBAL SCOPE · `),
|
|
92
|
+
_el$12 = _$createTextNode(` PROJECT SCOPE · `),
|
|
93
|
+
_el$13 = _$createTextNode(` USER SCOPE · `),
|
|
94
|
+
_el$14 = _$createTextNode(` ignored · `),
|
|
95
|
+
_el$15 = _$createTextNode(` installable/not installed`),
|
|
96
|
+
_el$16 = _$createElement("text"),
|
|
97
|
+
_el$17 = _$createTextNode(`page `),
|
|
98
|
+
_el$18 = _$createTextNode(`/`),
|
|
99
|
+
_el$19 = _$createElement("box"),
|
|
100
|
+
_el$20 = _$createElement("box"),
|
|
101
|
+
_el$21 = _$createElement("box"),
|
|
102
|
+
_el$22 = _$createElement("text"),
|
|
103
|
+
_el$24 = _$createElement("text"),
|
|
104
|
+
_el$25 = _$createTextNode(` shown`),
|
|
105
|
+
_el$26 = _$createElement("box"),
|
|
106
|
+
_el$27 = _$createElement("text");
|
|
107
|
+
_$insertNode(_el$7, _el$8);
|
|
108
|
+
_$insertNode(_el$7, _el$19);
|
|
109
|
+
_$insertNode(_el$7, _el$20);
|
|
110
|
+
_$setProp(_el$7, "width", "100%");
|
|
111
|
+
_$setProp(_el$7, "flexDirection", "column");
|
|
112
|
+
_$setProp(_el$7, "overflow", "hidden");
|
|
113
|
+
_$insertNode(_el$8, _el$9);
|
|
114
|
+
_$insertNode(_el$8, _el$16);
|
|
115
|
+
_$setProp(_el$8, "width", "100%");
|
|
116
|
+
_$setProp(_el$8, "flexDirection", "row");
|
|
117
|
+
_$setProp(_el$8, "justifyContent", "space-between");
|
|
118
|
+
_$setProp(_el$8, "overflow", "hidden");
|
|
119
|
+
_$insertNode(_el$9, _el$0);
|
|
120
|
+
_$insertNode(_el$9, _el$10);
|
|
121
|
+
_$insertNode(_el$9, _el$11);
|
|
122
|
+
_$insertNode(_el$9, _el$12);
|
|
123
|
+
_$insertNode(_el$9, _el$13);
|
|
124
|
+
_$insertNode(_el$9, _el$14);
|
|
125
|
+
_$insertNode(_el$9, _el$15);
|
|
126
|
+
_$setProp(_el$9, "wrapMode", "none");
|
|
127
|
+
_$setProp(_el$9, "overflow", "hidden");
|
|
128
|
+
_$insertNode(_el$0, _el$1);
|
|
129
|
+
_$insert(_el$0, () => catalog.publishedSkillCount, _el$1);
|
|
130
|
+
_$insert(_el$9, () => catalog.assignmentCounts.global, _el$11);
|
|
131
|
+
_$insert(_el$9, () => catalog.assignmentCounts.project, _el$12);
|
|
132
|
+
_$insert(_el$9, () => catalog.assignmentCounts.user, _el$13);
|
|
133
|
+
_$insert(_el$9, () => currentStatus.snapshot.ignoredPublishedSkills.count, _el$14);
|
|
134
|
+
_$insert(_el$9, () => installableNotInstalledSkills.length, _el$15);
|
|
135
|
+
_$insertNode(_el$16, _el$17);
|
|
136
|
+
_$insertNode(_el$16, _el$18);
|
|
137
|
+
_$setProp(_el$16, "wrapMode", "none");
|
|
138
|
+
_$insert(_el$16, currentPage + 1, _el$18);
|
|
139
|
+
_$insert(_el$16, totalPages, null);
|
|
140
|
+
_$setProp(_el$19, "width", "100%");
|
|
141
|
+
_$setProp(_el$19, "flexDirection", "column");
|
|
142
|
+
_$setProp(_el$19, "marginTop", 1);
|
|
143
|
+
_$setProp(_el$19, "overflow", "hidden");
|
|
144
|
+
_$insert(_el$19, () => visibleRows.map(row => _$createComponent(SkillCatalogRow, {
|
|
145
|
+
row: row,
|
|
146
|
+
get theme() {
|
|
147
|
+
return props.theme;
|
|
148
|
+
},
|
|
149
|
+
get onIgnore() {
|
|
150
|
+
return props.onIgnoreSkill;
|
|
151
|
+
},
|
|
152
|
+
get onInstall() {
|
|
153
|
+
return props.onInstallSkill;
|
|
154
|
+
},
|
|
155
|
+
get onUninstall() {
|
|
156
|
+
return props.onUninstallSkill;
|
|
157
|
+
}
|
|
158
|
+
})));
|
|
159
|
+
_$insertNode(_el$20, _el$21);
|
|
160
|
+
_$insertNode(_el$20, _el$24);
|
|
161
|
+
_$insertNode(_el$20, _el$26);
|
|
162
|
+
_$setProp(_el$20, "width", "100%");
|
|
163
|
+
_$setProp(_el$20, "flexDirection", "row");
|
|
164
|
+
_$setProp(_el$20, "justifyContent", "space-between");
|
|
165
|
+
_$setProp(_el$20, "overflow", "hidden");
|
|
166
|
+
_$insertNode(_el$21, _el$22);
|
|
167
|
+
_$setProp(_el$21, "onMouseUp", goBack);
|
|
168
|
+
_$setProp(_el$21, "flexShrink", 0);
|
|
169
|
+
_$insertNode(_el$22, _$createTextNode(`← Prev`));
|
|
170
|
+
_$setProp(_el$22, "wrapMode", "none");
|
|
171
|
+
_$insertNode(_el$24, _el$25);
|
|
172
|
+
_$setProp(_el$24, "wrapMode", "none");
|
|
173
|
+
_$setProp(_el$24, "overflow", "hidden");
|
|
174
|
+
_$insert(_el$24, () => visibleRows.length, _el$25);
|
|
175
|
+
_$insertNode(_el$26, _el$27);
|
|
176
|
+
_$setProp(_el$26, "onMouseUp", goForward);
|
|
177
|
+
_$setProp(_el$26, "flexShrink", 0);
|
|
178
|
+
_$insertNode(_el$27, _$createTextNode(`Next →`));
|
|
179
|
+
_$setProp(_el$27, "wrapMode", "none");
|
|
180
|
+
_$effect(_p$ => {
|
|
181
|
+
var _v$ = props.theme.text,
|
|
182
|
+
_v$2 = props.theme.textMuted,
|
|
183
|
+
_v$3 = canGoBack ? props.theme.text : props.theme.textMuted,
|
|
184
|
+
_v$4 = props.theme.textMuted,
|
|
185
|
+
_v$5 = canGoForward ? props.theme.text : props.theme.textMuted;
|
|
186
|
+
_v$ !== _p$.e && (_p$.e = _$setProp(_el$9, "fg", _v$, _p$.e));
|
|
187
|
+
_v$2 !== _p$.t && (_p$.t = _$setProp(_el$16, "fg", _v$2, _p$.t));
|
|
188
|
+
_v$3 !== _p$.a && (_p$.a = _$setProp(_el$22, "fg", _v$3, _p$.a));
|
|
189
|
+
_v$4 !== _p$.o && (_p$.o = _$setProp(_el$24, "fg", _v$4, _p$.o));
|
|
190
|
+
_v$5 !== _p$.i && (_p$.i = _$setProp(_el$27, "fg", _v$5, _p$.i));
|
|
191
|
+
return _p$;
|
|
192
|
+
}, {
|
|
193
|
+
e: undefined,
|
|
194
|
+
t: undefined,
|
|
195
|
+
a: undefined,
|
|
196
|
+
o: undefined,
|
|
197
|
+
i: undefined
|
|
198
|
+
});
|
|
199
|
+
return _el$7;
|
|
200
|
+
})();
|
|
201
|
+
};
|
|
202
|
+
return (() => {
|
|
203
|
+
var _el$29 = _$createElement("box");
|
|
204
|
+
_$setProp(_el$29, "width", "100%");
|
|
205
|
+
_$setProp(_el$29, "flexDirection", "column");
|
|
206
|
+
_$setProp(_el$29, "overflow", "hidden");
|
|
207
|
+
_$insert(_el$29, _$createComponent(PreferenceActionNoticeRow, {
|
|
208
|
+
get notice() {
|
|
209
|
+
return props.actionNotice();
|
|
210
|
+
},
|
|
211
|
+
get theme() {
|
|
212
|
+
return props.theme;
|
|
213
|
+
}
|
|
214
|
+
}), null);
|
|
215
|
+
_$insert(_el$29, content, null);
|
|
216
|
+
return _el$29;
|
|
217
|
+
})();
|
|
218
|
+
};
|
|
219
|
+
//# sourceMappingURL=wizard-skills-dialog-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createSignal","SKILLS_PAGE_SIZE","compactStatusMessage","formatSkillsCatalogUnavailableMessage","getInstallableNotInstalledSkills","getSkillRowState","PreferenceActionNoticeRow","SkillCatalogRow","WizardSkillsDialogContent","props","page","setPage","content","currentStatus","status","kind","_el$","_$createElement","_$insertNode","_$createTextNode","_$setProp","_$effect","_$p","theme","textMuted","_el$3","_el$4","_$insert","message","warning","snapshot","catalog","_el$5","_el$6","installableNotInstalledSkills","rows","skills","map","skill","ignored","state","ignoredPublishedSkills","totalPages","Math","max","ceil","length","currentPage","min","startIndex","endIndex","visibleRows","slice","canGoBack","canGoForward","goBack","goForward","_el$7","_el$8","_el$9","_el$0","_el$1","_el$10","_el$11","_el$12","_el$13","_el$14","_el$15","_el$16","_el$17","_el$18","_el$19","_el$20","_el$21","_el$22","_el$24","_el$25","_el$26","_el$27","publishedSkillCount","assignmentCounts","global","project","user","count","row","_$createComponent","onIgnore","onIgnoreSkill","onInstall","onInstallSkill","onUninstall","onUninstallSkill","_p$","_v$","text","_v$2","_v$3","_v$4","_v$5","e","t","a","o","i","undefined","_el$29","notice","actionNotice"],"sources":["../../../src/tui/components/wizard-skills-dialog-content.tsx"],"sourcesContent":["import { createSignal } from 'solid-js';\nimport { SKILLS_PAGE_SIZE } from '../constants.js';\nimport { compactStatusMessage, formatSkillsCatalogUnavailableMessage } from '../formatting.js';\nimport { getInstallableNotInstalledSkills, getSkillRowState } from '../skill-helpers.js';\nimport type { PreferenceActionNotice, PreferenceScope, SkillDialogRow, StatusState, TuiPluginApi } from '../types.js';\nimport { PreferenceActionNoticeRow } from './preference-action-notice-row.js';\nimport { SkillCatalogRow } from './skill-catalog-row.js';\n\nexport const WizardSkillsDialogContent = (props: {\n status: () => StatusState;\n actionNotice: () => PreferenceActionNotice;\n theme: TuiPluginApi['theme']['current'];\n onIgnoreSkill: (row: SkillDialogRow) => void;\n onInstallSkill: (row: SkillDialogRow, preferenceScope: PreferenceScope) => void;\n onUninstallSkill: (row: SkillDialogRow) => void;\n}) => {\n const [page, setPage] = createSignal(0);\n const content = () => {\n const currentStatus = props.status();\n\n if (currentStatus.kind === 'loading') {\n return (\n <text fg={props.theme.textMuted} wrapMode=\"none\" overflow=\"hidden\">\n Refreshing published skills…\n </text>\n );\n }\n\n if (currentStatus.kind === 'error') {\n return (\n <text fg={props.theme.warning} wrapMode=\"none\" overflow=\"hidden\">\n unavailable: {compactStatusMessage(currentStatus.message)}\n </text>\n );\n }\n\n if (!currentStatus.snapshot.catalog) {\n return (\n <text fg={props.theme.textMuted} wrapMode=\"none\" overflow=\"hidden\">\n catalog {formatSkillsCatalogUnavailableMessage(currentStatus.snapshot)}\n </text>\n );\n }\n\n const { catalog } = currentStatus.snapshot;\n const installableNotInstalledSkills = getInstallableNotInstalledSkills(currentStatus.snapshot);\n const rows: SkillDialogRow[] = [\n ...catalog.skills.map((skill) => ({\n skill,\n ignored: false,\n state: getSkillRowState(skill),\n })),\n ...currentStatus.snapshot.ignoredPublishedSkills.skills.map((skill) => ({\n skill,\n ignored: true,\n state: getSkillRowState(skill),\n })),\n ...installableNotInstalledSkills.map((skill) => ({ skill, ignored: false, state: 'installable' as const })),\n ];\n const totalPages = Math.max(1, Math.ceil(rows.length / SKILLS_PAGE_SIZE));\n const currentPage = Math.min(page(), totalPages - 1);\n const startIndex = currentPage * SKILLS_PAGE_SIZE;\n const endIndex = Math.min(startIndex + SKILLS_PAGE_SIZE, rows.length);\n const visibleRows = rows.slice(startIndex, endIndex);\n const canGoBack = currentPage > 0;\n const canGoForward = currentPage < totalPages - 1;\n const goBack = () => {\n if (!canGoBack) return;\n\n setPage(currentPage - 1);\n };\n const goForward = () => {\n if (!canGoForward) return;\n\n setPage(currentPage + 1);\n };\n\n return (\n <box width=\"100%\" flexDirection=\"column\" overflow=\"hidden\">\n <box width=\"100%\" flexDirection=\"row\" justifyContent=\"space-between\" overflow=\"hidden\">\n <text fg={props.theme.text} wrapMode=\"none\" overflow=\"hidden\">\n <b>{catalog.publishedSkillCount} skills</b>\n · {catalog.assignmentCounts.global} GLOBAL SCOPE · {catalog.assignmentCounts.project} PROJECT SCOPE\n · {catalog.assignmentCounts.user} USER SCOPE\n · {currentStatus.snapshot.ignoredPublishedSkills.count} ignored\n · {installableNotInstalledSkills.length} installable/not installed\n </text>\n <text fg={props.theme.textMuted} wrapMode=\"none\">\n page {currentPage + 1}/{totalPages}\n </text>\n </box>\n <box width=\"100%\" flexDirection=\"column\" marginTop={1} overflow=\"hidden\">\n {visibleRows.map((row) => (\n <SkillCatalogRow\n row={row}\n theme={props.theme}\n onIgnore={props.onIgnoreSkill}\n onInstall={props.onInstallSkill}\n onUninstall={props.onUninstallSkill}\n />\n ))}\n </box>\n <box width=\"100%\" flexDirection=\"row\" justifyContent=\"space-between\" overflow=\"hidden\">\n <box onMouseUp={goBack} flexShrink={0}>\n <text fg={canGoBack ? props.theme.text : props.theme.textMuted} wrapMode=\"none\">\n ← Prev\n </text>\n </box>\n <text fg={props.theme.textMuted} wrapMode=\"none\" overflow=\"hidden\">\n {visibleRows.length} shown\n </text>\n <box onMouseUp={goForward} flexShrink={0}>\n <text fg={canGoForward ? props.theme.text : props.theme.textMuted} wrapMode=\"none\">\n Next →\n </text>\n </box>\n </box>\n </box>\n );\n };\n\n return (\n <box width=\"100%\" flexDirection=\"column\" overflow=\"hidden\">\n <PreferenceActionNoticeRow notice={props.actionNotice()} theme={props.theme} />\n {content()}\n </box>\n );\n};\n"],"mappings":";;;;;;;AAAA,SAASA,YAAY,QAAQ,UAAU;AACvC,SAASC,gBAAgB,QAAQ,iBAAiB;AAClD,SAASC,oBAAoB,EAAEC,qCAAqC,QAAQ,kBAAkB;AAC9F,SAASC,gCAAgC,EAAEC,gBAAgB,QAAQ,qBAAqB;AAExF,SAASC,yBAAyB,QAAQ,mCAAmC;AAC7E,SAASC,eAAe,QAAQ,wBAAwB;AAExD,OAAO,MAAMC,yBAAyB,GAAIC,KAOzC,IAAK;EACJ,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC,GAAGX,YAAY,CAAC,CAAC,CAAC;EACvC,MAAMY,OAAO,GAAGA,CAAA,KAAM;IACpB,MAAMC,aAAa,GAAGJ,KAAK,CAACK,MAAM,CAAC,CAAC;IAEpC,IAAID,aAAa,CAACE,IAAI,KAAK,SAAS,EAAE;MACpC;QAAA,IAAAC,IAAA,GAAAC,eAAA;QAAAC,YAAA,CAAAF,IAAA,EAAAG,gBAAA;QAAAC,SAAA,CAAAJ,IAAA,cAC4C,MAAM;QAAAI,SAAA,CAAAJ,IAAA,cAAU,QAAQ;QAAAK,QAAA,CAAAC,GAAA,IAAAF,SAAA,CAAAJ,IAAA,QAAxDP,KAAK,CAACc,KAAK,CAACC,SAAS,EAAAF,GAAA;QAAA,OAAAN,IAAA;MAAA;IAInC;IAEA,IAAIH,aAAa,CAACE,IAAI,KAAK,OAAO,EAAE;MAClC;QAAA,IAAAU,KAAA,GAAAR,eAAA;UAAAS,KAAA,GAAAP,gBAAA;QAAAD,YAAA,CAAAO,KAAA,EAAAC,KAAA;QAAAN,SAAA,CAAAK,KAAA,cAC0C,MAAM;QAAAL,SAAA,CAAAK,KAAA,cAAU,QAAQ;QAAAE,QAAA,CAAAF,KAAA,QAChDvB,oBAAoB,CAACW,aAAa,CAACe,OAAO,CAAC;QAAAP,QAAA,CAAAC,GAAA,IAAAF,SAAA,CAAAK,KAAA,QADjDhB,KAAK,CAACc,KAAK,CAACM,OAAO,EAAAP,GAAA;QAAA,OAAAG,KAAA;MAAA;IAIjC;IAEA,IAAI,CAACZ,aAAa,CAACiB,QAAQ,CAACC,OAAO,EAAE;MACnC;QAAA,IAAAC,KAAA,GAAAf,eAAA;UAAAgB,KAAA,GAAAd,gBAAA;QAAAD,YAAA,CAAAc,KAAA,EAAAC,KAAA;QAAAb,SAAA,CAAAY,KAAA,cAC4C,MAAM;QAAAZ,SAAA,CAAAY,KAAA,cAAU,QAAQ;QAAAL,QAAA,CAAAK,KAAA,QACvD7B,qCAAqC,CAACU,aAAa,CAACiB,QAAQ,CAAC;QAAAT,QAAA,CAAAC,GAAA,IAAAF,SAAA,CAAAY,KAAA,QAD9DvB,KAAK,CAACc,KAAK,CAACC,SAAS,EAAAF,GAAA;QAAA,OAAAU,KAAA;MAAA;IAInC;IAEA,MAAM;MAAED;IAAQ,CAAC,GAAGlB,aAAa,CAACiB,QAAQ;IAC1C,MAAMI,6BAA6B,GAAG9B,gCAAgC,CAACS,aAAa,CAACiB,QAAQ,CAAC;IAC9F,MAAMK,IAAsB,GAAG,CAC7B,GAAGJ,OAAO,CAACK,MAAM,CAACC,GAAG,CAAEC,KAAK,KAAM;MAChCA,KAAK;MACLC,OAAO,EAAE,KAAK;MACdC,KAAK,EAAEnC,gBAAgB,CAACiC,KAAK;IAC/B,CAAC,CAAC,CAAC,EACH,GAAGzB,aAAa,CAACiB,QAAQ,CAACW,sBAAsB,CAACL,MAAM,CAACC,GAAG,CAAEC,KAAK,KAAM;MACtEA,KAAK;MACLC,OAAO,EAAE,IAAI;MACbC,KAAK,EAAEnC,gBAAgB,CAACiC,KAAK;IAC/B,CAAC,CAAC,CAAC,EACH,GAAGJ,6BAA6B,CAACG,GAAG,CAAEC,KAAK,KAAM;MAAEA,KAAK;MAAEC,OAAO,EAAE,KAAK;MAAEC,KAAK,EAAE;IAAuB,CAAC,CAAC,CAAC,CAC5G;IACD,MAAME,UAAU,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,IAAI,CAACV,IAAI,CAACW,MAAM,GAAG7C,gBAAgB,CAAC,CAAC;IACzE,MAAM8C,WAAW,GAAGJ,IAAI,CAACK,GAAG,CAACtC,IAAI,CAAC,CAAC,EAAEgC,UAAU,GAAG,CAAC,CAAC;IACpD,MAAMO,UAAU,GAAGF,WAAW,GAAG9C,gBAAgB;IACjD,MAAMiD,QAAQ,GAAGP,IAAI,CAACK,GAAG,CAACC,UAAU,GAAGhD,gBAAgB,EAAEkC,IAAI,CAACW,MAAM,CAAC;IACrE,MAAMK,WAAW,GAAGhB,IAAI,CAACiB,KAAK,CAACH,UAAU,EAAEC,QAAQ,CAAC;IACpD,MAAMG,SAAS,GAAGN,WAAW,GAAG,CAAC;IACjC,MAAMO,YAAY,GAAGP,WAAW,GAAGL,UAAU,GAAG,CAAC;IACjD,MAAMa,MAAM,GAAGA,CAAA,KAAM;MACnB,IAAI,CAACF,SAAS,EAAE;MAEhB1C,OAAO,CAACoC,WAAW,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,MAAMS,SAAS,GAAGA,CAAA,KAAM;MACtB,IAAI,CAACF,YAAY,EAAE;MAEnB3C,OAAO,CAACoC,WAAW,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED;MAAA,IAAAU,KAAA,GAAAxC,eAAA;QAAAyC,KAAA,GAAAzC,eAAA;QAAA0C,KAAA,GAAA1C,eAAA;QAAA2C,KAAA,GAAA3C,eAAA;QAAA4C,KAAA,GAAA1C,gBAAA;QAAA2C,MAAA,GAAA3C,gBAAA;QAAA4C,MAAA,GAAA5C,gBAAA;QAAA6C,MAAA,GAAA7C,gBAAA;QAAA8C,MAAA,GAAA9C,gBAAA;QAAA+C,MAAA,GAAA/C,gBAAA;QAAAgD,MAAA,GAAAhD,gBAAA;QAAAiD,MAAA,GAAAnD,eAAA;QAAAoD,MAAA,GAAAlD,gBAAA;QAAAmD,MAAA,GAAAnD,gBAAA;QAAAoD,MAAA,GAAAtD,eAAA;QAAAuD,MAAA,GAAAvD,eAAA;QAAAwD,MAAA,GAAAxD,eAAA;QAAAyD,MAAA,GAAAzD,eAAA;QAAA0D,MAAA,GAAA1D,eAAA;QAAA2D,MAAA,GAAAzD,gBAAA;QAAA0D,MAAA,GAAA5D,eAAA;QAAA6D,MAAA,GAAA7D,eAAA;MAAAC,YAAA,CAAAuC,KAAA,EAAAC,KAAA;MAAAxC,YAAA,CAAAuC,KAAA,EAAAc,MAAA;MAAArD,YAAA,CAAAuC,KAAA,EAAAe,MAAA;MAAApD,SAAA,CAAAqC,KAAA,WACa,MAAM;MAAArC,SAAA,CAAAqC,KAAA,mBAAe,QAAQ;MAAArC,SAAA,CAAAqC,KAAA,cAAU,QAAQ;MAAAvC,YAAA,CAAAwC,KAAA,EAAAC,KAAA;MAAAzC,YAAA,CAAAwC,KAAA,EAAAU,MAAA;MAAAhD,SAAA,CAAAsC,KAAA,WAC7C,MAAM;MAAAtC,SAAA,CAAAsC,KAAA,mBAAe,KAAK;MAAAtC,SAAA,CAAAsC,KAAA,oBAAgB,eAAe;MAAAtC,SAAA,CAAAsC,KAAA,cAAU,QAAQ;MAAAxC,YAAA,CAAAyC,KAAA,EAAAC,KAAA;MAAA1C,YAAA,CAAAyC,KAAA,EAAAG,MAAA;MAAA5C,YAAA,CAAAyC,KAAA,EAAAI,MAAA;MAAA7C,YAAA,CAAAyC,KAAA,EAAAK,MAAA;MAAA9C,YAAA,CAAAyC,KAAA,EAAAM,MAAA;MAAA/C,YAAA,CAAAyC,KAAA,EAAAO,MAAA;MAAAhD,YAAA,CAAAyC,KAAA,EAAAQ,MAAA;MAAA/C,SAAA,CAAAuC,KAAA,cAC/C,MAAM;MAAAvC,SAAA,CAAAuC,KAAA,cAAU,QAAQ;MAAAzC,YAAA,CAAA0C,KAAA,EAAAC,KAAA;MAAAlC,QAAA,CAAAiC,KAAA,QACvD7B,OAAO,CAACgD,mBAAmB,EAAAlB,KAAA;MAAAlC,QAAA,CAAAgC,KAAA,QACtB5B,OAAO,CAACiD,gBAAgB,CAACC,MAAM,EAAAlB,MAAA;MAAApC,QAAA,CAAAgC,KAAA,QAAkB5B,OAAO,CAACiD,gBAAgB,CAACE,OAAO,EAAAlB,MAAA;MAAArC,QAAA,CAAAgC,KAAA,QACjF5B,OAAO,CAACiD,gBAAgB,CAACG,IAAI,EAAAlB,MAAA;MAAAtC,QAAA,CAAAgC,KAAA,QAC7B9C,aAAa,CAACiB,QAAQ,CAACW,sBAAsB,CAAC2C,KAAK,EAAAlB,MAAA;MAAAvC,QAAA,CAAAgC,KAAA,QACnDzB,6BAA6B,CAACY,MAAM,EAAAqB,MAAA;MAAAjD,YAAA,CAAAkD,MAAA,EAAAC,MAAA;MAAAnD,YAAA,CAAAkD,MAAA,EAAAE,MAAA;MAAAlD,SAAA,CAAAgD,MAAA,cAEL,MAAM;MAAAzC,QAAA,CAAAyC,MAAA,EACxCrB,WAAW,GAAG,CAAC,EAAAuB,MAAA;MAAA3C,QAAA,CAAAyC,MAAA,EAAG1B,UAAU;MAAAtB,SAAA,CAAAmD,MAAA,WAG3B,MAAM;MAAAnD,SAAA,CAAAmD,MAAA,mBAAe,QAAQ;MAAAnD,SAAA,CAAAmD,MAAA,eAAY,CAAC;MAAAnD,SAAA,CAAAmD,MAAA,cAAW,QAAQ;MAAA5C,QAAA,CAAA4C,MAAA,QACrEpB,WAAW,CAACd,GAAG,CAAEgD,GAAG,IAAAC,iBAAA,CAClB/E,eAAe;QACd8E,GAAG,EAAEA,GAAG;QAAA,IACR9D,KAAKA,CAAA;UAAA,OAAEd,KAAK,CAACc,KAAK;QAAA;QAAA,IAClBgE,QAAQA,CAAA;UAAA,OAAE9E,KAAK,CAAC+E,aAAa;QAAA;QAAA,IAC7BC,SAASA,CAAA;UAAA,OAAEhF,KAAK,CAACiF,cAAc;QAAA;QAAA,IAC/BC,WAAWA,CAAA;UAAA,OAAElF,KAAK,CAACmF,gBAAgB;QAAA;MAAA,EAEtC,CAAC;MAAA1E,YAAA,CAAAsD,MAAA,EAAAC,MAAA;MAAAvD,YAAA,CAAAsD,MAAA,EAAAG,MAAA;MAAAzD,YAAA,CAAAsD,MAAA,EAAAK,MAAA;MAAAzD,SAAA,CAAAoD,MAAA,WAEO,MAAM;MAAApD,SAAA,CAAAoD,MAAA,mBAAe,KAAK;MAAApD,SAAA,CAAAoD,MAAA,oBAAgB,eAAe;MAAApD,SAAA,CAAAoD,MAAA,cAAU,QAAQ;MAAAtD,YAAA,CAAAuD,MAAA,EAAAC,MAAA;MAAAtD,SAAA,CAAAqD,MAAA,eACpElB,MAAM;MAAAnC,SAAA,CAAAqD,MAAA,gBAAc,CAAC;MAAAvD,YAAA,CAAAwD,MAAA,EAAAvD,gBAAA;MAAAC,SAAA,CAAAsD,MAAA,cACsC,MAAM;MAAAxD,YAAA,CAAAyD,MAAA,EAAAC,MAAA;MAAAxD,SAAA,CAAAuD,MAAA,cAIvC,MAAM;MAAAvD,SAAA,CAAAuD,MAAA,cAAU,QAAQ;MAAAhD,QAAA,CAAAgD,MAAA,QAC/DxB,WAAW,CAACL,MAAM,EAAA8B,MAAA;MAAA1D,YAAA,CAAA2D,MAAA,EAAAC,MAAA;MAAA1D,SAAA,CAAAyD,MAAA,eAELrB,SAAS;MAAApC,SAAA,CAAAyD,MAAA,gBAAc,CAAC;MAAA3D,YAAA,CAAA4D,MAAA,EAAA3D,gBAAA;MAAAC,SAAA,CAAA0D,MAAA,cACsC,MAAM;MAAAzD,QAAA,CAAAwE,GAAA;QAAA,IAAAC,GAAA,GAhC1ErF,KAAK,CAACc,KAAK,CAACwE,IAAI;UAAAC,IAAA,GAOhBvF,KAAK,CAACc,KAAK,CAACC,SAAS;UAAAyE,IAAA,GAiBnB5C,SAAS,GAAG5C,KAAK,CAACc,KAAK,CAACwE,IAAI,GAAGtF,KAAK,CAACc,KAAK,CAACC,SAAS;UAAA0E,IAAA,GAItDzF,KAAK,CAACc,KAAK,CAACC,SAAS;UAAA2E,IAAA,GAInB7C,YAAY,GAAG7C,KAAK,CAACc,KAAK,CAACwE,IAAI,GAAGtF,KAAK,CAACc,KAAK,CAACC,SAAS;QAAAsE,GAAA,KAAAD,GAAA,CAAAO,CAAA,KAAAP,GAAA,CAAAO,CAAA,GAAAhF,SAAA,CAAAuC,KAAA,QAAAmC,GAAA,EAAAD,GAAA,CAAAO,CAAA;QAAAJ,IAAA,KAAAH,GAAA,CAAAQ,CAAA,KAAAR,GAAA,CAAAQ,CAAA,GAAAjF,SAAA,CAAAgD,MAAA,QAAA4B,IAAA,EAAAH,GAAA,CAAAQ,CAAA;QAAAJ,IAAA,KAAAJ,GAAA,CAAAS,CAAA,KAAAT,GAAA,CAAAS,CAAA,GAAAlF,SAAA,CAAAsD,MAAA,QAAAuB,IAAA,EAAAJ,GAAA,CAAAS,CAAA;QAAAJ,IAAA,KAAAL,GAAA,CAAAU,CAAA,KAAAV,GAAA,CAAAU,CAAA,GAAAnF,SAAA,CAAAuD,MAAA,QAAAuB,IAAA,EAAAL,GAAA,CAAAU,CAAA;QAAAJ,IAAA,KAAAN,GAAA,CAAAW,CAAA,KAAAX,GAAA,CAAAW,CAAA,GAAApF,SAAA,CAAA0D,MAAA,QAAAqB,IAAA,EAAAN,GAAA,CAAAW,CAAA;QAAA,OAAAX,GAAA;MAAA;QAAAO,CAAA,EAAAK,SAAA;QAAAJ,CAAA,EAAAI,SAAA;QAAAH,CAAA,EAAAG,SAAA;QAAAF,CAAA,EAAAE,SAAA;QAAAD,CAAA,EAAAC;MAAA;MAAA,OAAAhD,KAAA;IAAA;EAO3E,CAAC;EAED;IAAA,IAAAiD,MAAA,GAAAzF,eAAA;IAAAG,SAAA,CAAAsF,MAAA,WACa,MAAM;IAAAtF,SAAA,CAAAsF,MAAA,mBAAe,QAAQ;IAAAtF,SAAA,CAAAsF,MAAA,cAAU,QAAQ;IAAA/E,QAAA,CAAA+E,MAAA,EAAApB,iBAAA,CACvDhF,yBAAyB;MAAA,IAACqG,MAAMA,CAAA;QAAA,OAAElG,KAAK,CAACmG,YAAY,CAAC,CAAC;MAAA;MAAA,IAAErF,KAAKA,CAAA;QAAA,OAAEd,KAAK,CAACc,KAAK;MAAA;IAAA;IAAAI,QAAA,CAAA+E,MAAA,EAC1E9F,OAAO;IAAA,OAAA8F,MAAA;EAAA;AAGd,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { effect as _$effect } from "@opentui/solid";
|
|
2
|
+
import { insert as _$insert } from "@opentui/solid";
|
|
3
|
+
import { createComponent as _$createComponent } from "@opentui/solid";
|
|
4
|
+
import { createTextNode as _$createTextNode } from "@opentui/solid";
|
|
5
|
+
import { insertNode as _$insertNode } from "@opentui/solid";
|
|
6
|
+
import { setProp as _$setProp } from "@opentui/solid";
|
|
7
|
+
import { createElement as _$createElement } from "@opentui/solid";
|
|
8
|
+
import { createEffect, createMemo, createSignal } from 'solid-js';
|
|
9
|
+
import { setPublishedSkillIgnored, setPublishedSkillInstalled } from '../../server.js';
|
|
10
|
+
import { requestRender } from '../rendering.js';
|
|
11
|
+
import { getErrorMessage, getSkillPreferenceScope } from '../skill-helpers.js';
|
|
12
|
+
import { WizardSkillsDialogContent } from './wizard-skills-dialog-content.js';
|
|
13
|
+
export const WizardSkillsDialog = props => {
|
|
14
|
+
const theme = createMemo(() => props.api.theme.current);
|
|
15
|
+
const [actionNotice, setActionNotice] = createSignal({
|
|
16
|
+
kind: 'idle'
|
|
17
|
+
});
|
|
18
|
+
const refreshAfterPreferenceChange = message => {
|
|
19
|
+
setActionNotice({
|
|
20
|
+
kind: 'success',
|
|
21
|
+
message
|
|
22
|
+
});
|
|
23
|
+
props.refreshStatus({
|
|
24
|
+
showLoading: false
|
|
25
|
+
});
|
|
26
|
+
requestRender(props.api);
|
|
27
|
+
};
|
|
28
|
+
const showPreferenceFailure = error => {
|
|
29
|
+
setActionNotice({
|
|
30
|
+
kind: 'error',
|
|
31
|
+
message: getErrorMessage(error)
|
|
32
|
+
});
|
|
33
|
+
props.refreshStatus({
|
|
34
|
+
showLoading: false
|
|
35
|
+
});
|
|
36
|
+
requestRender(props.api);
|
|
37
|
+
};
|
|
38
|
+
const ignoreSkill = row => {
|
|
39
|
+
const currentStatus = props.status();
|
|
40
|
+
if (currentStatus.kind !== 'ready') return;
|
|
41
|
+
const scopeKey = currentStatus.snapshot.ignoredPublishedSkills.scopeKey;
|
|
42
|
+
setActionNotice({
|
|
43
|
+
kind: 'pending',
|
|
44
|
+
message: row.ignored ? 'Removing ignore preference…' : 'Ignoring skill…'
|
|
45
|
+
});
|
|
46
|
+
requestRender(props.api);
|
|
47
|
+
void setPublishedSkillIgnored({
|
|
48
|
+
worktree: props.api.state.path.worktree,
|
|
49
|
+
directory: props.api.state.path.directory,
|
|
50
|
+
scopeKey,
|
|
51
|
+
skillSlug: row.skill.skillSlug,
|
|
52
|
+
ignored: !row.ignored,
|
|
53
|
+
preferenceScope: getSkillPreferenceScope(row.skill)
|
|
54
|
+
}).then(() => refreshAfterPreferenceChange(row.ignored ? 'Skill is no longer ignored.' : 'Skill ignored.')).catch(showPreferenceFailure);
|
|
55
|
+
};
|
|
56
|
+
const installSkill = (row, preferenceScope) => {
|
|
57
|
+
const currentStatus = props.status();
|
|
58
|
+
if (currentStatus.kind !== 'ready') return;
|
|
59
|
+
const scopeKey = currentStatus.snapshot.ignoredPublishedSkills.scopeKey;
|
|
60
|
+
setActionNotice({
|
|
61
|
+
kind: 'pending',
|
|
62
|
+
message: `Installing skill for ${preferenceScope.toUpperCase()} SCOPE…`
|
|
63
|
+
});
|
|
64
|
+
requestRender(props.api);
|
|
65
|
+
void setPublishedSkillInstalled({
|
|
66
|
+
worktree: props.api.state.path.worktree,
|
|
67
|
+
directory: props.api.state.path.directory,
|
|
68
|
+
scopeKey,
|
|
69
|
+
skillSlug: row.skill.skillSlug,
|
|
70
|
+
installed: true,
|
|
71
|
+
preferenceScope
|
|
72
|
+
}).then(() => refreshAfterPreferenceChange(`Skill installed for ${preferenceScope.toUpperCase()} SCOPE.`)).catch(showPreferenceFailure);
|
|
73
|
+
};
|
|
74
|
+
const uninstallSkill = row => {
|
|
75
|
+
const currentStatus = props.status();
|
|
76
|
+
if (currentStatus.kind !== 'ready') return;
|
|
77
|
+
const scopeKey = currentStatus.snapshot.ignoredPublishedSkills.scopeKey;
|
|
78
|
+
setActionNotice({
|
|
79
|
+
kind: 'pending',
|
|
80
|
+
message: 'Uninstalling skill…'
|
|
81
|
+
});
|
|
82
|
+
requestRender(props.api);
|
|
83
|
+
void setPublishedSkillInstalled({
|
|
84
|
+
worktree: props.api.state.path.worktree,
|
|
85
|
+
directory: props.api.state.path.directory,
|
|
86
|
+
scopeKey,
|
|
87
|
+
skillSlug: row.skill.skillSlug,
|
|
88
|
+
installed: false,
|
|
89
|
+
preferenceScope: getSkillPreferenceScope(row.skill)
|
|
90
|
+
}).then(() => refreshAfterPreferenceChange('Skill uninstalled.')).catch(showPreferenceFailure);
|
|
91
|
+
};
|
|
92
|
+
createEffect(() => {
|
|
93
|
+
props.api.ui?.dialog?.setSize?.('xlarge');
|
|
94
|
+
});
|
|
95
|
+
return (() => {
|
|
96
|
+
var _el$ = _$createElement("box"),
|
|
97
|
+
_el$2 = _$createElement("box"),
|
|
98
|
+
_el$3 = _$createElement("text"),
|
|
99
|
+
_el$4 = _$createElement("b"),
|
|
100
|
+
_el$6 = _$createElement("box"),
|
|
101
|
+
_el$7 = _$createElement("text"),
|
|
102
|
+
_el$9 = _$createElement("box");
|
|
103
|
+
_$insertNode(_el$, _el$2);
|
|
104
|
+
_$insertNode(_el$, _el$9);
|
|
105
|
+
_$setProp(_el$, "width", "100%");
|
|
106
|
+
_$setProp(_el$, "flexDirection", "column");
|
|
107
|
+
_$setProp(_el$, "paddingLeft", 1);
|
|
108
|
+
_$setProp(_el$, "paddingRight", 1);
|
|
109
|
+
_$setProp(_el$, "paddingBottom", 1);
|
|
110
|
+
_$insertNode(_el$2, _el$3);
|
|
111
|
+
_$insertNode(_el$2, _el$6);
|
|
112
|
+
_$setProp(_el$2, "width", "100%");
|
|
113
|
+
_$setProp(_el$2, "flexDirection", "row");
|
|
114
|
+
_$setProp(_el$2, "justifyContent", "space-between");
|
|
115
|
+
_$setProp(_el$2, "overflow", "hidden");
|
|
116
|
+
_$insertNode(_el$3, _el$4);
|
|
117
|
+
_$setProp(_el$3, "wrapMode", "none");
|
|
118
|
+
_$setProp(_el$3, "overflow", "hidden");
|
|
119
|
+
_$insertNode(_el$4, _$createTextNode(`Wizard Skills`));
|
|
120
|
+
_$insertNode(_el$6, _el$7);
|
|
121
|
+
_$setProp(_el$6, "flexShrink", 0);
|
|
122
|
+
_$insertNode(_el$7, _$createTextNode(`Close`));
|
|
123
|
+
_$setProp(_el$7, "wrapMode", "none");
|
|
124
|
+
_$setProp(_el$9, "width", "100%");
|
|
125
|
+
_$setProp(_el$9, "flexDirection", "column");
|
|
126
|
+
_$setProp(_el$9, "marginTop", 1);
|
|
127
|
+
_$setProp(_el$9, "overflow", "hidden");
|
|
128
|
+
_$insert(_el$9, _$createComponent(WizardSkillsDialogContent, {
|
|
129
|
+
get status() {
|
|
130
|
+
return props.status;
|
|
131
|
+
},
|
|
132
|
+
actionNotice: actionNotice,
|
|
133
|
+
get theme() {
|
|
134
|
+
return theme();
|
|
135
|
+
},
|
|
136
|
+
onIgnoreSkill: ignoreSkill,
|
|
137
|
+
onInstallSkill: installSkill,
|
|
138
|
+
onUninstallSkill: uninstallSkill
|
|
139
|
+
}));
|
|
140
|
+
_$effect(_p$ => {
|
|
141
|
+
var _v$ = theme().text,
|
|
142
|
+
_v$2 = props.onClose,
|
|
143
|
+
_v$3 = theme().textMuted;
|
|
144
|
+
_v$ !== _p$.e && (_p$.e = _$setProp(_el$3, "fg", _v$, _p$.e));
|
|
145
|
+
_v$2 !== _p$.t && (_p$.t = _$setProp(_el$6, "onMouseUp", _v$2, _p$.t));
|
|
146
|
+
_v$3 !== _p$.a && (_p$.a = _$setProp(_el$7, "fg", _v$3, _p$.a));
|
|
147
|
+
return _p$;
|
|
148
|
+
}, {
|
|
149
|
+
e: undefined,
|
|
150
|
+
t: undefined,
|
|
151
|
+
a: undefined
|
|
152
|
+
});
|
|
153
|
+
return _el$;
|
|
154
|
+
})();
|
|
155
|
+
};
|
|
156
|
+
//# sourceMappingURL=wizard-skills-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createEffect","createMemo","createSignal","setPublishedSkillIgnored","setPublishedSkillInstalled","requestRender","getErrorMessage","getSkillPreferenceScope","WizardSkillsDialogContent","WizardSkillsDialog","props","theme","api","current","actionNotice","setActionNotice","kind","refreshAfterPreferenceChange","message","refreshStatus","showLoading","showPreferenceFailure","error","ignoreSkill","row","currentStatus","status","scopeKey","snapshot","ignoredPublishedSkills","ignored","worktree","state","path","directory","skillSlug","skill","preferenceScope","then","catch","installSkill","toUpperCase","installed","uninstallSkill","ui","dialog","setSize","_el$","_$createElement","_el$2","_el$3","_el$4","_el$6","_el$7","_el$9","_$insertNode","_$setProp","_$createTextNode","_$insert","_$createComponent","onIgnoreSkill","onInstallSkill","onUninstallSkill","_$effect","_p$","_v$","text","_v$2","onClose","_v$3","textMuted","e","t","a","undefined"],"sources":["../../../src/tui/components/wizard-skills-dialog.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal } from 'solid-js';\nimport { setPublishedSkillIgnored, setPublishedSkillInstalled } from '../../server.js';\nimport { requestRender } from '../rendering.js';\nimport { getErrorMessage, getSkillPreferenceScope } from '../skill-helpers.js';\nimport type { PreferenceActionNotice, PreferenceScope, RefreshStatus, SkillDialogRow, StatusState, TuiPluginApi } from '../types.js';\nimport { WizardSkillsDialogContent } from './wizard-skills-dialog-content.js';\n\nexport const WizardSkillsDialog = (props: {\n api: TuiPluginApi;\n status: () => StatusState;\n refreshStatus: RefreshStatus;\n onClose: () => void;\n}) => {\n const theme = createMemo(() => props.api.theme.current);\n const [actionNotice, setActionNotice] = createSignal<PreferenceActionNotice>({ kind: 'idle' });\n\n const refreshAfterPreferenceChange = (message: string): void => {\n setActionNotice({ kind: 'success', message });\n props.refreshStatus({ showLoading: false });\n requestRender(props.api);\n };\n\n const showPreferenceFailure = (error: unknown): void => {\n setActionNotice({ kind: 'error', message: getErrorMessage(error) });\n props.refreshStatus({ showLoading: false });\n requestRender(props.api);\n };\n\n const ignoreSkill = (row: SkillDialogRow): void => {\n const currentStatus = props.status();\n if (currentStatus.kind !== 'ready') return;\n\n const scopeKey = currentStatus.snapshot.ignoredPublishedSkills.scopeKey;\n setActionNotice({ kind: 'pending', message: row.ignored ? 'Removing ignore preference…' : 'Ignoring skill…' });\n requestRender(props.api);\n void setPublishedSkillIgnored({\n worktree: props.api.state.path.worktree,\n directory: props.api.state.path.directory,\n scopeKey,\n skillSlug: row.skill.skillSlug,\n ignored: !row.ignored,\n preferenceScope: getSkillPreferenceScope(row.skill),\n })\n .then(() => refreshAfterPreferenceChange(row.ignored ? 'Skill is no longer ignored.' : 'Skill ignored.'))\n .catch(showPreferenceFailure);\n };\n\n const installSkill = (row: SkillDialogRow, preferenceScope: PreferenceScope): void => {\n const currentStatus = props.status();\n if (currentStatus.kind !== 'ready') return;\n\n const scopeKey = currentStatus.snapshot.ignoredPublishedSkills.scopeKey;\n setActionNotice({ kind: 'pending', message: `Installing skill for ${preferenceScope.toUpperCase()} SCOPE…` });\n requestRender(props.api);\n void setPublishedSkillInstalled({\n worktree: props.api.state.path.worktree,\n directory: props.api.state.path.directory,\n scopeKey,\n skillSlug: row.skill.skillSlug,\n installed: true,\n preferenceScope,\n })\n .then(() => refreshAfterPreferenceChange(`Skill installed for ${preferenceScope.toUpperCase()} SCOPE.`))\n .catch(showPreferenceFailure);\n };\n\n const uninstallSkill = (row: SkillDialogRow): void => {\n const currentStatus = props.status();\n if (currentStatus.kind !== 'ready') return;\n\n const scopeKey = currentStatus.snapshot.ignoredPublishedSkills.scopeKey;\n setActionNotice({ kind: 'pending', message: 'Uninstalling skill…' });\n requestRender(props.api);\n void setPublishedSkillInstalled({\n worktree: props.api.state.path.worktree,\n directory: props.api.state.path.directory,\n scopeKey,\n skillSlug: row.skill.skillSlug,\n installed: false,\n preferenceScope: getSkillPreferenceScope(row.skill),\n })\n .then(() => refreshAfterPreferenceChange('Skill uninstalled.'))\n .catch(showPreferenceFailure);\n };\n\n createEffect(() => {\n props.api.ui?.dialog?.setSize?.('xlarge');\n });\n\n return (\n <box width=\"100%\" flexDirection=\"column\" paddingLeft={1} paddingRight={1} paddingBottom={1}>\n <box width=\"100%\" flexDirection=\"row\" justifyContent=\"space-between\" overflow=\"hidden\">\n <text fg={theme().text} wrapMode=\"none\" overflow=\"hidden\">\n <b>Wizard Skills</b>\n </text>\n <box onMouseUp={props.onClose} flexShrink={0}>\n <text fg={theme().textMuted} wrapMode=\"none\">\n Close\n </text>\n </box>\n </box>\n <box width=\"100%\" flexDirection=\"column\" marginTop={1} overflow=\"hidden\">\n <WizardSkillsDialogContent\n status={props.status}\n actionNotice={actionNotice}\n theme={theme()}\n onIgnoreSkill={ignoreSkill}\n onInstallSkill={installSkill}\n onUninstallSkill={uninstallSkill}\n />\n </box>\n </box>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const STATUS_TIMEOUT_MS = 5000;
|
|
2
|
+
export declare const STATUS_REFRESH_INTERVAL_MS = 5000;
|
|
3
|
+
export declare const MAX_STATUS_MESSAGE_LENGTH = 80;
|
|
4
|
+
export declare const MAX_SKILL_DESCRIPTION_LENGTH = 96;
|
|
5
|
+
export declare const MAX_SKILL_NAME_LENGTH = 48;
|
|
6
|
+
export declare const MAX_SKILL_META_LENGTH = 72;
|
|
7
|
+
export declare const MAX_SKILL_TAGS = 4;
|
|
8
|
+
export declare const SKILLS_PAGE_SIZE = 5;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const STATUS_TIMEOUT_MS = 5_000;
|
|
2
|
+
export const STATUS_REFRESH_INTERVAL_MS = 5_000;
|
|
3
|
+
export const MAX_STATUS_MESSAGE_LENGTH = 80;
|
|
4
|
+
export const MAX_SKILL_DESCRIPTION_LENGTH = 96;
|
|
5
|
+
export const MAX_SKILL_NAME_LENGTH = 48;
|
|
6
|
+
export const MAX_SKILL_META_LENGTH = 72;
|
|
7
|
+
export const MAX_SKILL_TAGS = 4;
|
|
8
|
+
export const SKILLS_PAGE_SIZE = 5;
|
|
9
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["STATUS_TIMEOUT_MS","STATUS_REFRESH_INTERVAL_MS","MAX_STATUS_MESSAGE_LENGTH","MAX_SKILL_DESCRIPTION_LENGTH","MAX_SKILL_NAME_LENGTH","MAX_SKILL_META_LENGTH","MAX_SKILL_TAGS","SKILLS_PAGE_SIZE"],"sources":["../../src/tui/constants.ts"],"sourcesContent":["export const STATUS_TIMEOUT_MS = 5_000;\nexport const STATUS_REFRESH_INTERVAL_MS = 5_000;\nexport const MAX_STATUS_MESSAGE_LENGTH = 80;\nexport const MAX_SKILL_DESCRIPTION_LENGTH = 96;\nexport const MAX_SKILL_NAME_LENGTH = 48;\nexport const MAX_SKILL_META_LENGTH = 72;\nexport const MAX_SKILL_TAGS = 4;\nexport const SKILLS_PAGE_SIZE = 5;\n"],"mappings":"AAAA,OAAO,MAAMA,iBAAiB,GAAG,KAAK;AACtC,OAAO,MAAMC,0BAA0B,GAAG,KAAK;AAC/C,OAAO,MAAMC,yBAAyB,GAAG,EAAE;AAC3C,OAAO,MAAMC,4BAA4B,GAAG,EAAE;AAC9C,OAAO,MAAMC,qBAAqB,GAAG,EAAE;AACvC,OAAO,MAAMC,qBAAqB,GAAG,EAAE;AACvC,OAAO,MAAMC,cAAc,GAAG,CAAC;AAC/B,OAAO,MAAMC,gBAAgB,GAAG,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PluginStatusSnapshot } from '../server.js';
|
|
2
|
+
export declare const compactStatusMessage: (message: string) => string;
|
|
3
|
+
export declare const compactSkillDescription: (message: string) => string;
|
|
4
|
+
export declare const compactSkillName: (name: string) => string;
|
|
5
|
+
export declare const compactSkillMeta: (meta: string) => string;
|
|
6
|
+
export declare const formatSkillsCatalogUnavailableMessage: (snapshot: PluginStatusSnapshot) => string;
|
|
7
|
+
export declare const formatAuthStatus: (snapshot: PluginStatusSnapshot) => string;
|
|
8
|
+
export declare const formatBackendOriginLabel: (backendOrigin: string) => string;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { MAX_SKILL_DESCRIPTION_LENGTH, MAX_SKILL_META_LENGTH, MAX_SKILL_NAME_LENGTH, MAX_STATUS_MESSAGE_LENGTH } from './constants.js';
|
|
2
|
+
export const compactStatusMessage = message => {
|
|
3
|
+
if (message.length <= MAX_STATUS_MESSAGE_LENGTH) return message;
|
|
4
|
+
return `${message.slice(0, MAX_STATUS_MESSAGE_LENGTH - 1)}…`;
|
|
5
|
+
};
|
|
6
|
+
export const compactSkillDescription = message => {
|
|
7
|
+
if (message.length <= MAX_SKILL_DESCRIPTION_LENGTH) return message;
|
|
8
|
+
return `${message.slice(0, MAX_SKILL_DESCRIPTION_LENGTH - 1)}…`;
|
|
9
|
+
};
|
|
10
|
+
export const compactSkillName = name => {
|
|
11
|
+
if (name.length <= MAX_SKILL_NAME_LENGTH) return name;
|
|
12
|
+
return `${name.slice(0, MAX_SKILL_NAME_LENGTH - 1)}…`;
|
|
13
|
+
};
|
|
14
|
+
export const compactSkillMeta = meta => {
|
|
15
|
+
if (meta.length <= MAX_SKILL_META_LENGTH) return meta;
|
|
16
|
+
return `${meta.slice(0, MAX_SKILL_META_LENGTH - 1)}…`;
|
|
17
|
+
};
|
|
18
|
+
export const formatSkillsCatalogUnavailableMessage = snapshot => {
|
|
19
|
+
if (!snapshot.catalog && snapshot.status === 'missing_auth') {
|
|
20
|
+
if (snapshot.message) return compactStatusMessage(snapshot.message);
|
|
21
|
+
return 'locked (browser auth pending)';
|
|
22
|
+
}
|
|
23
|
+
if (!snapshot.catalog && snapshot.message) return compactStatusMessage(snapshot.message);
|
|
24
|
+
if (!snapshot.catalog) return `unavailable (${snapshot.status})`;
|
|
25
|
+
return 'unavailable';
|
|
26
|
+
};
|
|
27
|
+
export const formatAuthStatus = snapshot => {
|
|
28
|
+
const roleLabel = snapshot.authState.role ? ` [${snapshot.authState.role}]` : '';
|
|
29
|
+
if (snapshot.authState.status !== 'authenticated') return `${snapshot.authState.status}${roleLabel}`;
|
|
30
|
+
if (!snapshot.authState.email) return `authenticated${roleLabel}`;
|
|
31
|
+
return `${snapshot.authState.email}${roleLabel}`;
|
|
32
|
+
};
|
|
33
|
+
export const formatBackendOriginLabel = backendOrigin => {
|
|
34
|
+
try {
|
|
35
|
+
const {
|
|
36
|
+
hostname
|
|
37
|
+
} = new URL(backendOrigin);
|
|
38
|
+
if (hostname === 'localhost' || hostname === '127.0.0.1') return 'localhost';
|
|
39
|
+
return 'opencode-wizard';
|
|
40
|
+
} catch {
|
|
41
|
+
if (backendOrigin.includes('localhost') || backendOrigin.includes('127.0.0.1')) return 'localhost';
|
|
42
|
+
return 'opencode-wizard';
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=formatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MAX_SKILL_DESCRIPTION_LENGTH","MAX_SKILL_META_LENGTH","MAX_SKILL_NAME_LENGTH","MAX_STATUS_MESSAGE_LENGTH","compactStatusMessage","message","length","slice","compactSkillDescription","compactSkillName","name","compactSkillMeta","meta","formatSkillsCatalogUnavailableMessage","snapshot","catalog","status","formatAuthStatus","roleLabel","authState","role","email","formatBackendOriginLabel","backendOrigin","hostname","URL","includes"],"sources":["../../src/tui/formatting.ts"],"sourcesContent":["import type { PluginStatusSnapshot } from '../server.js';\nimport {\n MAX_SKILL_DESCRIPTION_LENGTH,\n MAX_SKILL_META_LENGTH,\n MAX_SKILL_NAME_LENGTH,\n MAX_STATUS_MESSAGE_LENGTH,\n} from './constants.js';\n\nexport const compactStatusMessage = (message: string): string => {\n if (message.length <= MAX_STATUS_MESSAGE_LENGTH) return message;\n\n return `${message.slice(0, MAX_STATUS_MESSAGE_LENGTH - 1)}…`;\n};\n\nexport const compactSkillDescription = (message: string): string => {\n if (message.length <= MAX_SKILL_DESCRIPTION_LENGTH) return message;\n\n return `${message.slice(0, MAX_SKILL_DESCRIPTION_LENGTH - 1)}…`;\n};\n\nexport const compactSkillName = (name: string): string => {\n if (name.length <= MAX_SKILL_NAME_LENGTH) return name;\n\n return `${name.slice(0, MAX_SKILL_NAME_LENGTH - 1)}…`;\n};\n\nexport const compactSkillMeta = (meta: string): string => {\n if (meta.length <= MAX_SKILL_META_LENGTH) return meta;\n\n return `${meta.slice(0, MAX_SKILL_META_LENGTH - 1)}…`;\n};\n\nexport const formatSkillsCatalogUnavailableMessage = (snapshot: PluginStatusSnapshot): string => {\n if (!snapshot.catalog && snapshot.status === 'missing_auth') {\n if (snapshot.message) return compactStatusMessage(snapshot.message);\n\n return 'locked (browser auth pending)';\n }\n\n if (!snapshot.catalog && snapshot.message) return compactStatusMessage(snapshot.message);\n if (!snapshot.catalog) return `unavailable (${snapshot.status})`;\n\n return 'unavailable';\n};\n\nexport const formatAuthStatus = (snapshot: PluginStatusSnapshot): string => {\n const roleLabel = snapshot.authState.role ? ` [${snapshot.authState.role}]` : '';\n if (snapshot.authState.status !== 'authenticated') return `${snapshot.authState.status}${roleLabel}`;\n if (!snapshot.authState.email) return `authenticated${roleLabel}`;\n\n return `${snapshot.authState.email}${roleLabel}`;\n};\n\nexport const formatBackendOriginLabel = (backendOrigin: string): string => {\n try {\n const { hostname } = new URL(backendOrigin);\n if (hostname === 'localhost' || hostname === '127.0.0.1') return 'localhost';\n\n return 'opencode-wizard';\n } catch {\n if (backendOrigin.includes('localhost') || backendOrigin.includes('127.0.0.1')) return 'localhost';\n\n return 'opencode-wizard';\n }\n};\n"],"mappings":"AACA,SACEA,4BAA4B,EAC5BC,qBAAqB,EACrBC,qBAAqB,EACrBC,yBAAyB,QACpB,gBAAgB;AAEvB,OAAO,MAAMC,oBAAoB,GAAIC,OAAe,IAAa;EAC/D,IAAIA,OAAO,CAACC,MAAM,IAAIH,yBAAyB,EAAE,OAAOE,OAAO;EAE/D,OAAO,GAAGA,OAAO,CAACE,KAAK,CAAC,CAAC,EAAEJ,yBAAyB,GAAG,CAAC,CAAC,GAAG;AAC9D,CAAC;AAED,OAAO,MAAMK,uBAAuB,GAAIH,OAAe,IAAa;EAClE,IAAIA,OAAO,CAACC,MAAM,IAAIN,4BAA4B,EAAE,OAAOK,OAAO;EAElE,OAAO,GAAGA,OAAO,CAACE,KAAK,CAAC,CAAC,EAAEP,4BAA4B,GAAG,CAAC,CAAC,GAAG;AACjE,CAAC;AAED,OAAO,MAAMS,gBAAgB,GAAIC,IAAY,IAAa;EACxD,IAAIA,IAAI,CAACJ,MAAM,IAAIJ,qBAAqB,EAAE,OAAOQ,IAAI;EAErD,OAAO,GAAGA,IAAI,CAACH,KAAK,CAAC,CAAC,EAAEL,qBAAqB,GAAG,CAAC,CAAC,GAAG;AACvD,CAAC;AAED,OAAO,MAAMS,gBAAgB,GAAIC,IAAY,IAAa;EACxD,IAAIA,IAAI,CAACN,MAAM,IAAIL,qBAAqB,EAAE,OAAOW,IAAI;EAErD,OAAO,GAAGA,IAAI,CAACL,KAAK,CAAC,CAAC,EAAEN,qBAAqB,GAAG,CAAC,CAAC,GAAG;AACvD,CAAC;AAED,OAAO,MAAMY,qCAAqC,GAAIC,QAA8B,IAAa;EAC/F,IAAI,CAACA,QAAQ,CAACC,OAAO,IAAID,QAAQ,CAACE,MAAM,KAAK,cAAc,EAAE;IAC3D,IAAIF,QAAQ,CAACT,OAAO,EAAE,OAAOD,oBAAoB,CAACU,QAAQ,CAACT,OAAO,CAAC;IAEnE,OAAO,+BAA+B;EACxC;EAEA,IAAI,CAACS,QAAQ,CAACC,OAAO,IAAID,QAAQ,CAACT,OAAO,EAAE,OAAOD,oBAAoB,CAACU,QAAQ,CAACT,OAAO,CAAC;EACxF,IAAI,CAACS,QAAQ,CAACC,OAAO,EAAE,OAAO,gBAAgBD,QAAQ,CAACE,MAAM,GAAG;EAEhE,OAAO,aAAa;AACtB,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAIH,QAA8B,IAAa;EAC1E,MAAMI,SAAS,GAAGJ,QAAQ,CAACK,SAAS,CAACC,IAAI,GAAG,KAAKN,QAAQ,CAACK,SAAS,CAACC,IAAI,GAAG,GAAG,EAAE;EAChF,IAAIN,QAAQ,CAACK,SAAS,CAACH,MAAM,KAAK,eAAe,EAAE,OAAO,GAAGF,QAAQ,CAACK,SAAS,CAACH,MAAM,GAAGE,SAAS,EAAE;EACpG,IAAI,CAACJ,QAAQ,CAACK,SAAS,CAACE,KAAK,EAAE,OAAO,gBAAgBH,SAAS,EAAE;EAEjE,OAAO,GAAGJ,QAAQ,CAACK,SAAS,CAACE,KAAK,GAAGH,SAAS,EAAE;AAClD,CAAC;AAED,OAAO,MAAMI,wBAAwB,GAAIC,aAAqB,IAAa;EACzE,IAAI;IACF,MAAM;MAAEC;IAAS,CAAC,GAAG,IAAIC,GAAG,CAACF,aAAa,CAAC;IAC3C,IAAIC,QAAQ,KAAK,WAAW,IAAIA,QAAQ,KAAK,WAAW,EAAE,OAAO,WAAW;IAE5E,OAAO,iBAAiB;EAC1B,CAAC,CAAC,MAAM;IACN,IAAID,aAAa,CAACG,QAAQ,CAAC,WAAW,CAAC,IAAIH,aAAa,CAACG,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,WAAW;IAElG,OAAO,iBAAiB;EAC1B;AACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createSignal } from 'solid-js';
|
|
2
|
+
import { STATUS_REFRESH_INTERVAL_MS } from './constants.js';
|
|
3
|
+
import { requestRender } from './rendering.js';
|
|
4
|
+
import { createWizardStatusSlot } from './slots.js';
|
|
5
|
+
import { loadStatus } from './status.js';
|
|
6
|
+
export const tui = async api => {
|
|
7
|
+
const [status, setStatus] = createSignal({
|
|
8
|
+
kind: 'loading'
|
|
9
|
+
});
|
|
10
|
+
const refreshStatus = options => {
|
|
11
|
+
if (options?.showLoading) {
|
|
12
|
+
setStatus({
|
|
13
|
+
kind: 'loading'
|
|
14
|
+
});
|
|
15
|
+
requestRender(api);
|
|
16
|
+
}
|
|
17
|
+
void loadStatus(api).then(nextStatus => {
|
|
18
|
+
setStatus(nextStatus);
|
|
19
|
+
requestRender(api);
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
api.slots.register(createWizardStatusSlot(api, status, refreshStatus));
|
|
23
|
+
refreshStatus();
|
|
24
|
+
setInterval(refreshStatus, STATUS_REFRESH_INTERVAL_MS);
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createSignal","STATUS_REFRESH_INTERVAL_MS","requestRender","createWizardStatusSlot","loadStatus","tui","api","status","setStatus","kind","refreshStatus","options","showLoading","then","nextStatus","slots","register","setInterval"],"sources":["../../src/tui/plugin.ts"],"sourcesContent":["import { createSignal } from 'solid-js';\nimport { STATUS_REFRESH_INTERVAL_MS } from './constants.js';\nimport { requestRender } from './rendering.js';\nimport { createWizardStatusSlot } from './slots.js';\nimport { loadStatus } from './status.js';\nimport type { RefreshStatus, StatusState, TuiPlugin } from './types.js';\n\nexport const tui: TuiPlugin = async (api) => {\n const [status, setStatus] = createSignal<StatusState>({ kind: 'loading' });\n const refreshStatus: RefreshStatus = (options) => {\n if (options?.showLoading) {\n setStatus({ kind: 'loading' });\n requestRender(api);\n }\n\n void loadStatus(api).then((nextStatus) => {\n setStatus(nextStatus);\n requestRender(api);\n });\n };\n\n api.slots.register(createWizardStatusSlot(api, status, refreshStatus));\n refreshStatus();\n setInterval(refreshStatus, STATUS_REFRESH_INTERVAL_MS);\n};\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,UAAU;AACvC,SAASC,0BAA0B,QAAQ,gBAAgB;AAC3D,SAASC,aAAa,QAAQ,gBAAgB;AAC9C,SAASC,sBAAsB,QAAQ,YAAY;AACnD,SAASC,UAAU,QAAQ,aAAa;AAGxC,OAAO,MAAMC,GAAc,GAAG,MAAOC,GAAG,IAAK;EAC3C,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGR,YAAY,CAAc;IAAES,IAAI,EAAE;EAAU,CAAC,CAAC;EAC1E,MAAMC,aAA4B,GAAIC,OAAO,IAAK;IAChD,IAAIA,OAAO,EAAEC,WAAW,EAAE;MACxBJ,SAAS,CAAC;QAAEC,IAAI,EAAE;MAAU,CAAC,CAAC;MAC9BP,aAAa,CAACI,GAAG,CAAC;IACpB;IAEA,KAAKF,UAAU,CAACE,GAAG,CAAC,CAACO,IAAI,CAAEC,UAAU,IAAK;MACxCN,SAAS,CAACM,UAAU,CAAC;MACrBZ,aAAa,CAACI,GAAG,CAAC;IACpB,CAAC,CAAC;EACJ,CAAC;EAEDA,GAAG,CAACS,KAAK,CAACC,QAAQ,CAACb,sBAAsB,CAACG,GAAG,EAAEC,MAAM,EAAEG,aAAa,CAAC,CAAC;EACtEA,aAAa,CAAC,CAAC;EACfO,WAAW,CAACP,aAAa,EAAET,0BAA0B,CAAC;AACxD,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["requestRender","api","renderer"],"sources":["../../src/tui/rendering.ts"],"sourcesContent":["import type { TuiPluginApi } from './types.js';\n\nexport const requestRender = (api: TuiPluginApi): void => {\n try {\n api.renderer?.requestRender?.();\n } catch {\n // Ignore render request failures; state is still updated.\n }\n};\n"],"mappings":"AAEA,OAAO,MAAMA,aAAa,GAAIC,GAAiB,IAAW;EACxD,IAAI;IACFA,GAAG,CAACC,QAAQ,EAAEF,aAAa,GAAG,CAAC;EACjC,CAAC,CAAC,MAAM;IACN;EAAA;AAEJ,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { PluginStatusSnapshot } from '../server.js';
|
|
2
|
+
import type { PreferenceScope, PublishedSkillSummary, SkillDialogRow, SkillRowState } from './types.js';
|
|
3
|
+
export declare const getSkillDisplayName: (skill: PublishedSkillSummary) => string;
|
|
4
|
+
export declare const getSkillDescription: (skill: PublishedSkillSummary) => string | null;
|
|
5
|
+
export declare const getSkillTags: (skill: PublishedSkillSummary) => string;
|
|
6
|
+
export declare const isUserScopeAssignment: (assignmentSource: string) => boolean;
|
|
7
|
+
export declare const getSkillScopeLabel: (skill: PublishedSkillSummary, state: SkillRowState) => string;
|
|
8
|
+
export declare const getSkillPreferenceScope: (skill: PublishedSkillSummary) => PreferenceScope;
|
|
9
|
+
export declare const getSkillMeta: (skill: PublishedSkillSummary, state: SkillRowState) => string;
|
|
10
|
+
export declare const getRowStateLabel: (row: SkillDialogRow) => string;
|
|
11
|
+
export declare const getSkillRowState: (skill: PublishedSkillSummary) => SkillRowState;
|
|
12
|
+
export declare const getInstallableNotInstalledSkills: (snapshot: PluginStatusSnapshot) => PublishedSkillSummary[];
|
|
13
|
+
export declare const getErrorMessage: (error: unknown) => string;
|