@aexol/opencode-wizard 0.1.0 → 0.1.3
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/README.md +26 -7
- package/dist/server.d.ts +108 -5
- package/dist/server.js +1561 -1401
- package/dist/server.js.map +1 -0
- package/dist/smoke-published-skills.js +80 -75
- package/dist/smoke-published-skills.js.map +1 -0
- package/dist/tui.d.ts +60 -0
- package/dist/tui.js +288 -0
- package/dist/tui.js.map +1 -0
- package/package.json +17 -6
package/dist/tui.js
ADDED
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import { createComponent as _$createComponent } from "@opentui/solid";
|
|
2
|
+
import { effect as _$effect } from "@opentui/solid";
|
|
3
|
+
import { createTextNode as _$createTextNode } from "@opentui/solid";
|
|
4
|
+
import { insertNode as _$insertNode } from "@opentui/solid";
|
|
5
|
+
import { insert as _$insert } from "@opentui/solid";
|
|
6
|
+
import { setProp as _$setProp } from "@opentui/solid";
|
|
7
|
+
import { createElement as _$createElement } from "@opentui/solid";
|
|
8
|
+
/** @jsxImportSource @opentui/solid */
|
|
9
|
+
|
|
10
|
+
import { createMemo, createSignal } from 'solid-js';
|
|
11
|
+
import { PLUGIN_ID, resolvePluginStatusSnapshot } from './server.js';
|
|
12
|
+
const STATUS_TIMEOUT_MS = 5_000;
|
|
13
|
+
const MAX_SIDEBAR_SKILL_NAMES = 3;
|
|
14
|
+
const getSkillDisplayName = skill => skill.artifactName || skill.skillName || skill.skillSlug;
|
|
15
|
+
const getSkillPolicy = skill => skill.policyLabel || skill.installPolicy;
|
|
16
|
+
const formatSkillTags = skill => {
|
|
17
|
+
const tagNames = skill.tags.map(tag => tag.label || tag.slug).filter(tag => tag.length > 0);
|
|
18
|
+
if (tagNames.length === 0) return 'none';
|
|
19
|
+
return tagNames.join(', ');
|
|
20
|
+
};
|
|
21
|
+
const formatSkillsCatalogSummary = snapshot => {
|
|
22
|
+
if (!snapshot.catalog && snapshot.status === 'missing_auth') {
|
|
23
|
+
return 'skills catalog locked until interactive fetch authenticates';
|
|
24
|
+
}
|
|
25
|
+
if (!snapshot.catalog) return `skills catalog unavailable: ${snapshot.message ?? snapshot.status}`;
|
|
26
|
+
const counts = snapshot.catalog.assignmentCounts;
|
|
27
|
+
return `${snapshot.catalog.publishedSkillCount} loaded · ${counts.global} global · ${counts.project} project`;
|
|
28
|
+
};
|
|
29
|
+
const formatSidebarSkillNames = snapshot => {
|
|
30
|
+
if (!snapshot.catalog) return 'catalog unavailable';
|
|
31
|
+
const skillNames = snapshot.catalog.skills.map(getSkillDisplayName);
|
|
32
|
+
const visibleNames = skillNames.slice(0, MAX_SIDEBAR_SKILL_NAMES).join(', ');
|
|
33
|
+
const remainingCount = Math.max(skillNames.length - MAX_SIDEBAR_SKILL_NAMES, 0);
|
|
34
|
+
const suffix = remainingCount > 0 ? ` +${remainingCount}` : '';
|
|
35
|
+
return `${visibleNames || 'none'}${suffix}`;
|
|
36
|
+
};
|
|
37
|
+
const formatSkillOptionDescription = skill => {
|
|
38
|
+
const description = skill.artifactDescription || skill.skillSlug;
|
|
39
|
+
return `${skill.contextKind.toUpperCase()} · ${getSkillPolicy(skill)} · v${skill.version || 'unknown'} · ${skill.skillName || skill.skillSlug} · ${formatSkillTags(skill)} · ${description}`;
|
|
40
|
+
};
|
|
41
|
+
const Row = props => (() => {
|
|
42
|
+
var _el$ = _$createElement("box"),
|
|
43
|
+
_el$2 = _$createElement("text"),
|
|
44
|
+
_el$3 = _$createTextNode(`: `),
|
|
45
|
+
_el$4 = _$createElement("text");
|
|
46
|
+
_$insertNode(_el$, _el$2);
|
|
47
|
+
_$insertNode(_el$, _el$4);
|
|
48
|
+
_$setProp(_el$, "width", "100%");
|
|
49
|
+
_$setProp(_el$, "flexDirection", "row");
|
|
50
|
+
_$setProp(_el$, "overflow", "hidden");
|
|
51
|
+
_$insertNode(_el$2, _el$3);
|
|
52
|
+
_$setProp(_el$2, "flexShrink", 0);
|
|
53
|
+
_$setProp(_el$2, "wrapMode", "none");
|
|
54
|
+
_$insert(_el$2, () => props.label, _el$3);
|
|
55
|
+
_$setProp(_el$4, "flexGrow", 1);
|
|
56
|
+
_$setProp(_el$4, "overflow", "hidden");
|
|
57
|
+
_$setProp(_el$4, "wrapMode", "none");
|
|
58
|
+
_$insert(_el$4, () => props.value);
|
|
59
|
+
_$effect(_p$ => {
|
|
60
|
+
var _v$ = props.labelColor,
|
|
61
|
+
_v$2 = props.valueColor;
|
|
62
|
+
_v$ !== _p$.e && (_p$.e = _$setProp(_el$2, "fg", _v$, _p$.e));
|
|
63
|
+
_v$2 !== _p$.t && (_p$.t = _$setProp(_el$4, "fg", _v$2, _p$.t));
|
|
64
|
+
return _p$;
|
|
65
|
+
}, {
|
|
66
|
+
e: undefined,
|
|
67
|
+
t: undefined
|
|
68
|
+
});
|
|
69
|
+
return _el$;
|
|
70
|
+
})();
|
|
71
|
+
const Panel = props => (() => {
|
|
72
|
+
var _el$5 = _$createElement("box"),
|
|
73
|
+
_el$6 = _$createElement("text"),
|
|
74
|
+
_el$7 = _$createElement("b");
|
|
75
|
+
_$insertNode(_el$5, _el$6);
|
|
76
|
+
_$setProp(_el$5, "width", "100%");
|
|
77
|
+
_$setProp(_el$5, "flexDirection", "column");
|
|
78
|
+
_$setProp(_el$5, "paddingLeft", 1);
|
|
79
|
+
_$setProp(_el$5, "paddingRight", 1);
|
|
80
|
+
_$insertNode(_el$6, _el$7);
|
|
81
|
+
_$setProp(_el$6, "wrapMode", "none");
|
|
82
|
+
_$setProp(_el$6, "overflow", "hidden");
|
|
83
|
+
_$insert(_el$7, () => props.title);
|
|
84
|
+
_$insert(_el$5, () => props.children, null);
|
|
85
|
+
_$effect(_p$ => {
|
|
86
|
+
var _v$3 = props.onPress,
|
|
87
|
+
_v$4 = props.theme.text;
|
|
88
|
+
_v$3 !== _p$.e && (_p$.e = _$setProp(_el$5, "onMouseUp", _v$3, _p$.e));
|
|
89
|
+
_v$4 !== _p$.t && (_p$.t = _$setProp(_el$6, "fg", _v$4, _p$.t));
|
|
90
|
+
return _p$;
|
|
91
|
+
}, {
|
|
92
|
+
e: undefined,
|
|
93
|
+
t: undefined
|
|
94
|
+
});
|
|
95
|
+
return _el$5;
|
|
96
|
+
})();
|
|
97
|
+
const openSkillsDialog = (api, status) => {
|
|
98
|
+
const theme = api.theme.current;
|
|
99
|
+
if (status.kind === 'ready' && status.snapshot.catalog) {
|
|
100
|
+
const options = status.snapshot.catalog.skills.map(skill => ({
|
|
101
|
+
title: getSkillDisplayName(skill),
|
|
102
|
+
value: skill.skillSlug,
|
|
103
|
+
description: formatSkillOptionDescription(skill)
|
|
104
|
+
}));
|
|
105
|
+
api.ui.dialog.replace(() => _$createComponent(api.ui.DialogSelect, {
|
|
106
|
+
title: "Wizard skills catalog",
|
|
107
|
+
placeholder: "Filter loaded skills",
|
|
108
|
+
options: options,
|
|
109
|
+
onSelect: option => {
|
|
110
|
+
const selectedSkill = status.snapshot.catalog?.skills.find(skill => skill.skillSlug === option.value);
|
|
111
|
+
if (!selectedSkill) return;
|
|
112
|
+
api.ui.dialog.clear();
|
|
113
|
+
}
|
|
114
|
+
}));
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const message = status.kind === 'loading' ? 'Skills catalog is loading. Try again after the catalog event completes.' : status.kind === 'error' ? `Skills catalog unavailable: ${status.message}` : status.snapshot.status === 'missing_auth' ? 'Skills catalog is locked until interactive fetch authenticates.' : status.snapshot.message ?? 'Skills catalog unavailable.';
|
|
118
|
+
api.ui.dialog.replace(() => _$createComponent(api.ui.Dialog, {
|
|
119
|
+
size: "medium",
|
|
120
|
+
onClose: () => {
|
|
121
|
+
api.ui.dialog.clear();
|
|
122
|
+
},
|
|
123
|
+
get children() {
|
|
124
|
+
var _el$8 = _$createElement("box"),
|
|
125
|
+
_el$9 = _$createElement("text"),
|
|
126
|
+
_el$0 = _$createElement("b"),
|
|
127
|
+
_el$10 = _$createElement("text");
|
|
128
|
+
_$insertNode(_el$8, _el$9);
|
|
129
|
+
_$insertNode(_el$8, _el$10);
|
|
130
|
+
_$setProp(_el$8, "width", "100%");
|
|
131
|
+
_$setProp(_el$8, "flexDirection", "column");
|
|
132
|
+
_$setProp(_el$8, "paddingLeft", 1);
|
|
133
|
+
_$setProp(_el$8, "paddingRight", 1);
|
|
134
|
+
_$insertNode(_el$9, _el$0);
|
|
135
|
+
_$setProp(_el$9, "wrapMode", "none");
|
|
136
|
+
_$insertNode(_el$0, _$createTextNode(`Wizard skills catalog`));
|
|
137
|
+
_$setProp(_el$10, "marginTop", 1);
|
|
138
|
+
_$insert(_el$10, message);
|
|
139
|
+
_$effect(_p$ => {
|
|
140
|
+
var _v$5 = theme.text,
|
|
141
|
+
_v$6 = theme.warning;
|
|
142
|
+
_v$5 !== _p$.e && (_p$.e = _$setProp(_el$9, "fg", _v$5, _p$.e));
|
|
143
|
+
_v$6 !== _p$.t && (_p$.t = _$setProp(_el$10, "fg", _v$6, _p$.t));
|
|
144
|
+
return _p$;
|
|
145
|
+
}, {
|
|
146
|
+
e: undefined,
|
|
147
|
+
t: undefined
|
|
148
|
+
});
|
|
149
|
+
return _el$8;
|
|
150
|
+
}
|
|
151
|
+
}));
|
|
152
|
+
};
|
|
153
|
+
const SkillsRows = props => {
|
|
154
|
+
const theme = createMemo(() => props.api.theme.current);
|
|
155
|
+
const statusContent = () => {
|
|
156
|
+
const currentStatus = props.status();
|
|
157
|
+
if (currentStatus.kind === 'loading') {
|
|
158
|
+
return (() => {
|
|
159
|
+
var _el$11 = _$createElement("text");
|
|
160
|
+
_$insertNode(_el$11, _$createTextNode(`loading wizard skills catalog…`));
|
|
161
|
+
_$setProp(_el$11, "wrapMode", "none");
|
|
162
|
+
_$setProp(_el$11, "overflow", "hidden");
|
|
163
|
+
_$effect(_$p => _$setProp(_el$11, "fg", theme().textMuted, _$p));
|
|
164
|
+
return _el$11;
|
|
165
|
+
})();
|
|
166
|
+
}
|
|
167
|
+
if (currentStatus.kind === 'error') {
|
|
168
|
+
return (() => {
|
|
169
|
+
var _el$13 = _$createElement("text"),
|
|
170
|
+
_el$14 = _$createTextNode(`skills catalog unavailable: `);
|
|
171
|
+
_$insertNode(_el$13, _el$14);
|
|
172
|
+
_$setProp(_el$13, "wrapMode", "none");
|
|
173
|
+
_$setProp(_el$13, "overflow", "hidden");
|
|
174
|
+
_$insert(_el$13, () => currentStatus.message, null);
|
|
175
|
+
_$effect(_$p => _$setProp(_el$13, "fg", theme().warning, _$p));
|
|
176
|
+
return _el$13;
|
|
177
|
+
})();
|
|
178
|
+
}
|
|
179
|
+
return _$createComponent(ReadyRows, {
|
|
180
|
+
get snapshot() {
|
|
181
|
+
return currentStatus.snapshot;
|
|
182
|
+
},
|
|
183
|
+
get theme() {
|
|
184
|
+
return theme();
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
};
|
|
188
|
+
return (() => {
|
|
189
|
+
var _el$15 = _$createElement("box");
|
|
190
|
+
_$setProp(_el$15, "width", "100%");
|
|
191
|
+
_$setProp(_el$15, "flexDirection", "column");
|
|
192
|
+
_$setProp(_el$15, "overflow", "hidden");
|
|
193
|
+
_$insert(_el$15, statusContent);
|
|
194
|
+
return _el$15;
|
|
195
|
+
})();
|
|
196
|
+
};
|
|
197
|
+
const ReadyRows = props => (() => {
|
|
198
|
+
var _el$16 = _$createElement("box");
|
|
199
|
+
_$setProp(_el$16, "width", "100%");
|
|
200
|
+
_$setProp(_el$16, "flexDirection", "column");
|
|
201
|
+
_$setProp(_el$16, "overflow", "hidden");
|
|
202
|
+
_$insert(_el$16, _$createComponent(Row, {
|
|
203
|
+
label: "catalog",
|
|
204
|
+
get value() {
|
|
205
|
+
return formatSkillsCatalogSummary(props.snapshot);
|
|
206
|
+
},
|
|
207
|
+
get labelColor() {
|
|
208
|
+
return props.theme.textMuted;
|
|
209
|
+
},
|
|
210
|
+
get valueColor() {
|
|
211
|
+
return props.theme.text;
|
|
212
|
+
}
|
|
213
|
+
}), null);
|
|
214
|
+
_$insert(_el$16, _$createComponent(Row, {
|
|
215
|
+
label: "skills",
|
|
216
|
+
get value() {
|
|
217
|
+
return formatSidebarSkillNames(props.snapshot);
|
|
218
|
+
},
|
|
219
|
+
get labelColor() {
|
|
220
|
+
return props.theme.textMuted;
|
|
221
|
+
},
|
|
222
|
+
get valueColor() {
|
|
223
|
+
return props.theme.text;
|
|
224
|
+
}
|
|
225
|
+
}), null);
|
|
226
|
+
return _el$16;
|
|
227
|
+
})();
|
|
228
|
+
const createWizardStatusSlot = (api, status) => ({
|
|
229
|
+
order: 240,
|
|
230
|
+
slots: {
|
|
231
|
+
home_bottom: () => _$createComponent(Panel, {
|
|
232
|
+
title: "Wizard Skills",
|
|
233
|
+
get theme() {
|
|
234
|
+
return api.theme.current;
|
|
235
|
+
},
|
|
236
|
+
onPress: () => openSkillsDialog(api, status()),
|
|
237
|
+
get children() {
|
|
238
|
+
return _$createComponent(SkillsRows, {
|
|
239
|
+
api: api,
|
|
240
|
+
status: status
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
}),
|
|
244
|
+
sidebar_content: (_ctx, _value) => _$createComponent(Panel, {
|
|
245
|
+
title: "Wizard Skills",
|
|
246
|
+
get theme() {
|
|
247
|
+
return api.theme.current;
|
|
248
|
+
},
|
|
249
|
+
onPress: () => openSkillsDialog(api, status()),
|
|
250
|
+
get children() {
|
|
251
|
+
return _$createComponent(SkillsRows, {
|
|
252
|
+
api: api,
|
|
253
|
+
status: status
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
})
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
const loadStatus = async api => {
|
|
260
|
+
try {
|
|
261
|
+
const snapshot = await resolvePluginStatusSnapshot({
|
|
262
|
+
worktree: api.state.path.worktree,
|
|
263
|
+
directory: api.state.path.directory,
|
|
264
|
+
signal: AbortSignal.timeout(STATUS_TIMEOUT_MS)
|
|
265
|
+
});
|
|
266
|
+
return {
|
|
267
|
+
kind: 'ready',
|
|
268
|
+
snapshot
|
|
269
|
+
};
|
|
270
|
+
} catch (error) {
|
|
271
|
+
return {
|
|
272
|
+
kind: 'error',
|
|
273
|
+
message: error instanceof Error ? error.message : 'Unable to load opencode-wizard status.'
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
const tui = async api => {
|
|
278
|
+
const [status, setStatus] = createSignal({
|
|
279
|
+
kind: 'loading'
|
|
280
|
+
});
|
|
281
|
+
api.slots.register(createWizardStatusSlot(api, status));
|
|
282
|
+
void loadStatus(api).then(setStatus);
|
|
283
|
+
};
|
|
284
|
+
export default {
|
|
285
|
+
id: PLUGIN_ID,
|
|
286
|
+
tui
|
|
287
|
+
};
|
|
288
|
+
//# sourceMappingURL=tui.js.map
|
package/dist/tui.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createMemo","createSignal","PLUGIN_ID","resolvePluginStatusSnapshot","STATUS_TIMEOUT_MS","MAX_SIDEBAR_SKILL_NAMES","getSkillDisplayName","skill","artifactName","skillName","skillSlug","getSkillPolicy","policyLabel","installPolicy","formatSkillTags","tagNames","tags","map","tag","label","slug","filter","length","join","formatSkillsCatalogSummary","snapshot","catalog","status","message","counts","assignmentCounts","publishedSkillCount","global","project","formatSidebarSkillNames","skillNames","skills","visibleNames","slice","remainingCount","Math","max","suffix","formatSkillOptionDescription","description","artifactDescription","contextKind","toUpperCase","version","Row","props","_el$","_$createElement","_el$2","_el$3","_$createTextNode","_el$4","_$insertNode","_$setProp","_$insert","value","_$effect","_p$","_v$","labelColor","_v$2","valueColor","e","t","undefined","Panel","_el$5","_el$6","_el$7","title","children","_v$3","onPress","_v$4","theme","text","openSkillsDialog","api","current","kind","options","ui","dialog","replace","_$createComponent","DialogSelect","placeholder","onSelect","option","selectedSkill","find","clear","Dialog","size","onClose","_el$8","_el$9","_el$0","_el$10","_v$5","_v$6","warning","SkillsRows","statusContent","currentStatus","_el$11","_$p","textMuted","_el$13","_el$14","ReadyRows","_el$15","_el$16","createWizardStatusSlot","order","slots","home_bottom","sidebar_content","_ctx","_value","loadStatus","worktree","state","path","directory","signal","AbortSignal","timeout","error","Error","tui","setStatus","register","then","id"],"sources":["../src/tui.tsx"],"sourcesContent":["/** @jsxImportSource @opentui/solid */\nimport type { RGBA } from '@opentui/core';\nimport { createMemo, createSignal } from 'solid-js';\nimport type { JSX } from 'solid-js';\nimport {\n PLUGIN_ID,\n resolvePluginStatusSnapshot,\n type PluginStatusSnapshot,\n} from './server.js';\n\ntype StatusState =\n | {\n kind: 'loading';\n }\n | {\n kind: 'ready';\n snapshot: PluginStatusSnapshot;\n }\n | {\n kind: 'error';\n message: string;\n };\n\ntype WizardTheme = {\n text: string | RGBA | undefined;\n textMuted: string | RGBA | undefined;\n warning: string | RGBA | undefined;\n};\n\ntype DialogSelectOption = {\n title: string;\n value: string;\n description: string;\n};\n\ntype TuiPluginApi = {\n theme: {\n current: WizardTheme;\n };\n ui: {\n dialog: {\n replace: (render: () => JSX.Element) => void;\n clear: () => void;\n };\n DialogSelect: (props: {\n title: string;\n placeholder: string;\n options: DialogSelectOption[];\n onSelect: (option: DialogSelectOption) => void;\n }) => JSX.Element;\n Dialog: (props: { size: 'medium'; onClose: () => void; children: JSX.Element }) => JSX.Element;\n };\n slots: {\n register: (slot: TuiSlotPlugin) => void;\n };\n state: {\n path: {\n worktree: string;\n directory: string;\n };\n };\n};\n\ntype TuiSlotContext = unknown;\n\ntype TuiSlotPlugin = {\n order: number;\n slots: {\n home_bottom: () => JSX.Element;\n sidebar_content: (ctx: TuiSlotContext, value: { session_id: string }) => JSX.Element;\n };\n};\n\ntype TuiPlugin = (api: TuiPluginApi) => void | Promise<void>;\n\nconst STATUS_TIMEOUT_MS = 5_000;\nconst MAX_SIDEBAR_SKILL_NAMES = 3;\ntype PublishedSkillSummary = NonNullable<PluginStatusSnapshot['catalog']>['skills'][number];\n\nconst getSkillDisplayName = (skill: PublishedSkillSummary): string => skill.artifactName || skill.skillName || skill.skillSlug;\n\nconst getSkillPolicy = (skill: PublishedSkillSummary): string => skill.policyLabel || skill.installPolicy;\n\nconst formatSkillTags = (skill: PublishedSkillSummary): string => {\n const tagNames = skill.tags.map((tag) => tag.label || tag.slug).filter((tag) => tag.length > 0);\n if (tagNames.length === 0) return 'none';\n\n return tagNames.join(', ');\n};\n\nconst formatSkillsCatalogSummary = (snapshot: PluginStatusSnapshot): string => {\n if (!snapshot.catalog && snapshot.status === 'missing_auth') {\n return 'skills catalog locked until interactive fetch authenticates';\n }\n\n if (!snapshot.catalog) return `skills catalog unavailable: ${snapshot.message ?? snapshot.status}`;\n\n const counts = snapshot.catalog.assignmentCounts;\n return `${snapshot.catalog.publishedSkillCount} loaded · ${counts.global} global · ${counts.project} project`;\n};\n\nconst formatSidebarSkillNames = (snapshot: PluginStatusSnapshot): string => {\n if (!snapshot.catalog) return 'catalog unavailable';\n\n const skillNames = snapshot.catalog.skills.map(getSkillDisplayName);\n const visibleNames = skillNames.slice(0, MAX_SIDEBAR_SKILL_NAMES).join(', ');\n const remainingCount = Math.max(skillNames.length - MAX_SIDEBAR_SKILL_NAMES, 0);\n const suffix = remainingCount > 0 ? ` +${remainingCount}` : '';\n\n return `${visibleNames || 'none'}${suffix}`;\n};\n\nconst formatSkillOptionDescription = (skill: PublishedSkillSummary): string => {\n const description = skill.artifactDescription || skill.skillSlug;\n return `${skill.contextKind.toUpperCase()} · ${getSkillPolicy(skill)} · v${skill.version || 'unknown'} · ${skill.skillName || skill.skillSlug} · ${formatSkillTags(skill)} · ${description}`;\n};\n\nconst Row = (props: {\n label: string;\n value: string;\n labelColor: string | RGBA | undefined;\n valueColor: string | RGBA | undefined;\n}) => (\n <box width=\"100%\" flexDirection=\"row\" overflow=\"hidden\">\n <text fg={props.labelColor} flexShrink={0} wrapMode=\"none\">\n {props.label}: \n </text>\n <text fg={props.valueColor} flexGrow={1} overflow=\"hidden\" wrapMode=\"none\">\n {props.value}\n </text>\n </box>\n);\n\nconst Panel = (props: {\n title: string;\n theme: TuiPluginApi['theme']['current'];\n onPress?: () => void;\n children: JSX.Element;\n}) => (\n <box\n width=\"100%\"\n flexDirection=\"column\"\n paddingLeft={1}\n paddingRight={1}\n onMouseUp={props.onPress}\n >\n <text fg={props.theme.text} wrapMode=\"none\" overflow=\"hidden\">\n <b>{props.title}</b>\n </text>\n {props.children}\n </box>\n);\n\nconst openSkillsDialog = (api: TuiPluginApi, status: StatusState) => {\n const theme = api.theme.current;\n\n if (status.kind === 'ready' && status.snapshot.catalog) {\n const options = status.snapshot.catalog.skills.map((skill) => ({\n title: getSkillDisplayName(skill),\n value: skill.skillSlug,\n description: formatSkillOptionDescription(skill),\n }));\n\n api.ui.dialog.replace(() => (\n <api.ui.DialogSelect\n title=\"Wizard skills catalog\"\n placeholder=\"Filter loaded skills\"\n options={options}\n onSelect={(option) => {\n const selectedSkill = status.snapshot.catalog?.skills.find((skill) => skill.skillSlug === option.value);\n if (!selectedSkill) return;\n\n api.ui.dialog.clear();\n }}\n />\n ));\n return;\n }\n\n const message =\n status.kind === 'loading'\n ? 'Skills catalog is loading. Try again after the catalog event completes.'\n : status.kind === 'error'\n ? `Skills catalog unavailable: ${status.message}`\n : status.snapshot.status === 'missing_auth'\n ? 'Skills catalog is locked until interactive fetch authenticates.'\n : (status.snapshot.message ?? 'Skills catalog unavailable.');\n\n api.ui.dialog.replace(() => (\n <api.ui.Dialog\n size=\"medium\"\n onClose={() => {\n api.ui.dialog.clear();\n }}\n >\n <box width=\"100%\" flexDirection=\"column\" paddingLeft={1} paddingRight={1}>\n <text fg={theme.text} wrapMode=\"none\">\n <b>Wizard skills catalog</b>\n </text>\n <text fg={theme.warning} marginTop={1}>\n {message}\n </text>\n </box>\n </api.ui.Dialog>\n ));\n};\n\nconst SkillsRows = (props: { api: TuiPluginApi; status: () => StatusState }) => {\n const theme = createMemo(() => props.api.theme.current);\n const statusContent = () => {\n const currentStatus = props.status();\n\n if (currentStatus.kind === 'loading') {\n return (\n <text fg={theme().textMuted} wrapMode=\"none\" overflow=\"hidden\">\n loading wizard skills catalog…\n </text>\n );\n }\n\n if (currentStatus.kind === 'error') {\n return (\n <text fg={theme().warning} wrapMode=\"none\" overflow=\"hidden\">\n skills catalog unavailable: {currentStatus.message}\n </text>\n );\n }\n\n return <ReadyRows snapshot={currentStatus.snapshot} theme={theme()} />;\n };\n\n return (\n <box width=\"100%\" flexDirection=\"column\" overflow=\"hidden\">\n {statusContent()}\n </box>\n );\n};\n\nconst ReadyRows = (props: { snapshot: PluginStatusSnapshot; theme: TuiPluginApi['theme']['current'] }) => (\n <box width=\"100%\" flexDirection=\"column\" overflow=\"hidden\">\n <Row label=\"catalog\" value={formatSkillsCatalogSummary(props.snapshot)} labelColor={props.theme.textMuted} valueColor={props.theme.text} />\n <Row label=\"skills\" value={formatSidebarSkillNames(props.snapshot)} labelColor={props.theme.textMuted} valueColor={props.theme.text} />\n </box>\n);\n\nconst createWizardStatusSlot = (api: TuiPluginApi, status: () => StatusState): TuiSlotPlugin => ({\n order: 240,\n slots: {\n home_bottom: () => (\n <Panel title=\"Wizard Skills\" theme={api.theme.current} onPress={() => openSkillsDialog(api, status())}>\n <SkillsRows api={api} status={status} />\n </Panel>\n ),\n sidebar_content: (_ctx: TuiSlotContext, _value: { session_id: string }) => (\n <Panel title=\"Wizard Skills\" theme={api.theme.current} onPress={() => openSkillsDialog(api, status())}>\n <SkillsRows api={api} status={status} />\n </Panel>\n ),\n },\n});\n\nconst loadStatus = async (api: TuiPluginApi): Promise<StatusState> => {\n try {\n const snapshot = await resolvePluginStatusSnapshot({\n worktree: api.state.path.worktree,\n directory: api.state.path.directory,\n signal: AbortSignal.timeout(STATUS_TIMEOUT_MS),\n });\n\n return {\n kind: 'ready',\n snapshot,\n };\n } catch (error) {\n return {\n kind: 'error',\n message: error instanceof Error ? error.message : 'Unable to load opencode-wizard status.',\n };\n }\n};\n\nconst tui: TuiPlugin = async (api) => {\n const [status, setStatus] = createSignal<StatusState>({ kind: 'loading' });\n\n api.slots.register(createWizardStatusSlot(api, status));\n void loadStatus(api).then(setStatus);\n};\n\nexport default {\n id: PLUGIN_ID,\n tui,\n};\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aexol/opencode-wizard",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "OpenCode
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"description": "OpenCode plugin for opencode-wizard published skills",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"oc-plugin": [
|
|
7
|
-
"server"
|
|
7
|
+
"server",
|
|
8
|
+
"tui"
|
|
8
9
|
],
|
|
9
10
|
"exports": {
|
|
10
11
|
"./server": {
|
|
11
12
|
"default": "./dist/server.js",
|
|
12
13
|
"types": "./dist/server.d.ts"
|
|
14
|
+
},
|
|
15
|
+
"./tui": {
|
|
16
|
+
"default": "./dist/tui.js",
|
|
17
|
+
"types": "./dist/tui.d.ts"
|
|
13
18
|
}
|
|
14
19
|
},
|
|
15
20
|
"files": [
|
|
@@ -17,7 +22,7 @@
|
|
|
17
22
|
],
|
|
18
23
|
"scripts": {
|
|
19
24
|
"release:check": "npm run typecheck && npm run build",
|
|
20
|
-
"build": "
|
|
25
|
+
"build": "node ./build.mjs",
|
|
21
26
|
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
22
27
|
"smoke:published-skills": "node ./dist/smoke-published-skills.js"
|
|
23
28
|
},
|
|
@@ -27,7 +32,7 @@
|
|
|
27
32
|
"repository": {
|
|
28
33
|
"type": "git",
|
|
29
34
|
"url": "git+https://gitlab.com/aexol/open-source/opencode-wizard.git",
|
|
30
|
-
"directory": "plugin/opencode-wizard
|
|
35
|
+
"directory": "plugin/opencode-wizard"
|
|
31
36
|
},
|
|
32
37
|
"keywords": [
|
|
33
38
|
"opencode",
|
|
@@ -40,10 +45,16 @@
|
|
|
40
45
|
"opencode": ">=1.14.18 <2"
|
|
41
46
|
},
|
|
42
47
|
"dependencies": {
|
|
43
|
-
"@opencode-ai/plugin": "^1.14.18"
|
|
48
|
+
"@opencode-ai/plugin": "^1.14.18",
|
|
49
|
+
"@opentui/core": "0.1.103",
|
|
50
|
+
"@opentui/solid": "0.1.103",
|
|
51
|
+
"solid-js": "1.9.11"
|
|
44
52
|
},
|
|
45
53
|
"devDependencies": {
|
|
54
|
+
"@babel/core": "^7.28.4",
|
|
55
|
+
"@babel/preset-typescript": "^7.27.1",
|
|
46
56
|
"@types/node": "^22.12.0",
|
|
57
|
+
"babel-preset-solid": "1.9.10",
|
|
47
58
|
"typescript": "^5.9.2"
|
|
48
59
|
}
|
|
49
60
|
}
|