@aexol/opencode-wizard 0.3.2 → 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.
Files changed (97) hide show
  1. package/README.md +4 -0
  2. package/dist/graphql-operations.d.ts +4 -0
  3. package/dist/graphql-operations.js +225 -0
  4. package/dist/graphql-operations.js.map +1 -0
  5. package/dist/plugin-tools.d.ts +64 -0
  6. package/dist/plugin-tools.js +57 -0
  7. package/dist/plugin-tools.js.map +1 -0
  8. package/dist/published-skills-system-note.d.ts +9 -0
  9. package/dist/published-skills-system-note.js +34 -0
  10. package/dist/published-skills-system-note.js.map +1 -0
  11. package/dist/published-skills-transform.d.ts +161 -0
  12. package/dist/published-skills-transform.js +238 -0
  13. package/dist/published-skills-transform.js.map +1 -0
  14. package/dist/server/auth-flow.d.ts +10 -0
  15. package/dist/server/auth-flow.js +215 -0
  16. package/dist/server/auth-flow.js.map +1 -0
  17. package/dist/server/auth-store.d.ts +19 -0
  18. package/dist/server/auth-store.js +177 -0
  19. package/dist/server/auth-store.js.map +1 -0
  20. package/dist/server/client.d.ts +51 -0
  21. package/dist/server/client.js +244 -0
  22. package/dist/server/client.js.map +1 -0
  23. package/dist/server/config.d.ts +2 -0
  24. package/dist/server/config.js +82 -0
  25. package/dist/server/config.js.map +1 -0
  26. package/dist/server/constants.d.ts +26 -0
  27. package/dist/server/constants.js +32 -0
  28. package/dist/server/constants.js.map +1 -0
  29. package/dist/server/path-utils.d.ts +2 -0
  30. package/dist/server/path-utils.js +8 -0
  31. package/dist/server/path-utils.js.map +1 -0
  32. package/dist/server/presence.d.ts +14 -0
  33. package/dist/server/presence.js +68 -0
  34. package/dist/server/presence.js.map +1 -0
  35. package/dist/server/runtime.d.ts +32 -0
  36. package/dist/server/runtime.js +1110 -0
  37. package/dist/server/runtime.js.map +1 -0
  38. package/dist/server/status.d.ts +27 -0
  39. package/dist/server/status.js +224 -0
  40. package/dist/server/status.js.map +1 -0
  41. package/dist/server/types.d.ts +321 -0
  42. package/dist/server/types.js +2 -0
  43. package/dist/server/types.js.map +1 -0
  44. package/dist/server/workspace.d.ts +15 -0
  45. package/dist/server/workspace.js +126 -0
  46. package/dist/server/workspace.js.map +1 -0
  47. package/dist/server.d.ts +4 -304
  48. package/dist/server.js +4 -2489
  49. package/dist/server.js.map +1 -1
  50. package/dist/smoke-published-skills.js +11 -9
  51. package/dist/smoke-published-skills.js.map +1 -1
  52. package/dist/tui/components/common.d.ts +15 -0
  53. package/dist/tui/components/common.js +81 -0
  54. package/dist/tui/components/common.js.map +1 -0
  55. package/dist/tui/components/preference-action-notice-row.d.ts +5 -0
  56. package/dist/tui/components/preference-action-notice-row.js +17 -0
  57. package/dist/tui/components/preference-action-notice-row.js.map +1 -0
  58. package/dist/tui/components/skill-catalog-row.d.ts +8 -0
  59. package/dist/tui/components/skill-catalog-row.js +124 -0
  60. package/dist/tui/components/skill-catalog-row.js.map +1 -0
  61. package/dist/tui/components/status-content.d.ts +14 -0
  62. package/dist/tui/components/status-content.js +131 -0
  63. package/dist/tui/components/status-content.js.map +1 -0
  64. package/dist/tui/components/wizard-skills-dialog-content.d.ts +9 -0
  65. package/dist/tui/components/wizard-skills-dialog-content.js +219 -0
  66. package/dist/tui/components/wizard-skills-dialog-content.js.map +1 -0
  67. package/dist/tui/components/wizard-skills-dialog.d.ts +7 -0
  68. package/dist/tui/components/wizard-skills-dialog.js +156 -0
  69. package/dist/tui/components/wizard-skills-dialog.js.map +1 -0
  70. package/dist/tui/constants.d.ts +8 -0
  71. package/dist/tui/constants.js +9 -0
  72. package/dist/tui/constants.js.map +1 -0
  73. package/dist/tui/formatting.d.ts +8 -0
  74. package/dist/tui/formatting.js +45 -0
  75. package/dist/tui/formatting.js.map +1 -0
  76. package/dist/tui/plugin.d.ts +2 -0
  77. package/dist/tui/plugin.js +26 -0
  78. package/dist/tui/plugin.js.map +1 -0
  79. package/dist/tui/rendering.d.ts +2 -0
  80. package/dist/tui/rendering.js +8 -0
  81. package/dist/tui/rendering.js.map +1 -0
  82. package/dist/tui/skill-helpers.d.ts +13 -0
  83. package/dist/tui/skill-helpers.js +49 -0
  84. package/dist/tui/skill-helpers.js.map +1 -0
  85. package/dist/tui/slots.d.ts +2 -0
  86. package/dist/tui/slots.js +56 -0
  87. package/dist/tui/slots.js.map +1 -0
  88. package/dist/tui/status.d.ts +2 -0
  89. package/dist/tui/status.js +21 -0
  90. package/dist/tui/status.js.map +1 -0
  91. package/dist/tui/types.d.ts +75 -0
  92. package/dist/tui/types.js +2 -0
  93. package/dist/tui/types.js.map +1 -0
  94. package/dist/tui.d.ts +1 -44
  95. package/dist/tui.js +2 -870
  96. package/dist/tui.js.map +1 -1
  97. 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(`&nbsp;· `),
91
+ _el$11 = _$createTextNode(` GLOBAL SCOPE · `),
92
+ _el$12 = _$createTextNode(` PROJECT SCOPE &nbsp;· `),
93
+ _el$13 = _$createTextNode(` USER SCOPE &nbsp;· `),
94
+ _el$14 = _$createTextNode(` ignored &nbsp;· `),
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 &nbsp;· {catalog.assignmentCounts.global} GLOBAL SCOPE · {catalog.assignmentCounts.project} PROJECT SCOPE\n &nbsp;· {catalog.assignmentCounts.user} USER SCOPE\n &nbsp;· {currentStatus.snapshot.ignoredPublishedSkills.count} ignored\n &nbsp;· {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":"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","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import type { RefreshStatus, StatusState, TuiPluginApi } from '../types.js';
2
+ export declare const WizardSkillsDialog: (props: {
3
+ api: TuiPluginApi;
4
+ status: () => StatusState;
5
+ refreshStatus: RefreshStatus;
6
+ onClose: () => void;
7
+ }) => any;
@@ -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,2 @@
1
+ import type { TuiPlugin } from './types.js';
2
+ export declare const tui: TuiPlugin;
@@ -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,2 @@
1
+ import type { TuiPluginApi } from './types.js';
2
+ export declare const requestRender: (api: TuiPluginApi) => void;
@@ -0,0 +1,8 @@
1
+ export const requestRender = api => {
2
+ try {
3
+ api.renderer?.requestRender?.();
4
+ } catch {
5
+ // Ignore render request failures; state is still updated.
6
+ }
7
+ };
8
+ //# sourceMappingURL=rendering.js.map
@@ -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;