@aexol/opencode-wizard 0.3.3 → 0.3.5

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 (106) hide show
  1. package/README.md +9 -7
  2. package/dist/graphql-operations.d.ts +7 -0
  3. package/dist/graphql-operations.js +230 -0
  4. package/dist/graphql-operations.js.map +1 -0
  5. package/dist/plugin-tools.d.ts +90 -0
  6. package/dist/plugin-tools.js +93 -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 +30 -0
  10. package/dist/published-skills-system-note.js.map +1 -0
  11. package/dist/published-skills-terminology.d.ts +21 -0
  12. package/dist/published-skills-terminology.js +38 -0
  13. package/dist/published-skills-terminology.js.map +1 -0
  14. package/dist/published-skills-transform.d.ts +258 -0
  15. package/dist/published-skills-transform.js +310 -0
  16. package/dist/published-skills-transform.js.map +1 -0
  17. package/dist/server/auth-bootstrap.d.ts +7 -0
  18. package/dist/server/auth-bootstrap.js +89 -0
  19. package/dist/server/auth-bootstrap.js.map +1 -0
  20. package/dist/server/auth-flow.d.ts +10 -0
  21. package/dist/server/auth-flow.js +215 -0
  22. package/dist/server/auth-flow.js.map +1 -0
  23. package/dist/server/auth-store.d.ts +19 -0
  24. package/dist/server/auth-store.js +177 -0
  25. package/dist/server/auth-store.js.map +1 -0
  26. package/dist/server/client.d.ts +80 -0
  27. package/dist/server/client.js +324 -0
  28. package/dist/server/client.js.map +1 -0
  29. package/dist/server/config.d.ts +2 -0
  30. package/dist/server/config.js +82 -0
  31. package/dist/server/config.js.map +1 -0
  32. package/dist/server/constants.d.ts +26 -0
  33. package/dist/server/constants.js +32 -0
  34. package/dist/server/constants.js.map +1 -0
  35. package/dist/server/path-utils.d.ts +2 -0
  36. package/dist/server/path-utils.js +8 -0
  37. package/dist/server/path-utils.js.map +1 -0
  38. package/dist/server/preferences.d.ts +22 -0
  39. package/dist/server/preferences.js +121 -0
  40. package/dist/server/preferences.js.map +1 -0
  41. package/dist/server/presence.d.ts +14 -0
  42. package/dist/server/presence.js +68 -0
  43. package/dist/server/presence.js.map +1 -0
  44. package/dist/server/runtime.d.ts +13 -0
  45. package/dist/server/runtime.js +1315 -0
  46. package/dist/server/runtime.js.map +1 -0
  47. package/dist/server/status.d.ts +27 -0
  48. package/dist/server/status.js +224 -0
  49. package/dist/server/status.js.map +1 -0
  50. package/dist/server/types.d.ts +396 -0
  51. package/dist/server/types.js +2 -0
  52. package/dist/server/types.js.map +1 -0
  53. package/dist/server/workspace.d.ts +15 -0
  54. package/dist/server/workspace.js +126 -0
  55. package/dist/server/workspace.js.map +1 -0
  56. package/dist/server.d.ts +4 -309
  57. package/dist/server.js +4 -2611
  58. package/dist/server.js.map +1 -1
  59. package/dist/smoke-published-skills.js +11 -9
  60. package/dist/smoke-published-skills.js.map +1 -1
  61. package/dist/tui/components/common.d.ts +15 -0
  62. package/dist/tui/components/common.js +81 -0
  63. package/dist/tui/components/common.js.map +1 -0
  64. package/dist/tui/components/preference-action-notice-row.d.ts +5 -0
  65. package/dist/tui/components/preference-action-notice-row.js +17 -0
  66. package/dist/tui/components/preference-action-notice-row.js.map +1 -0
  67. package/dist/tui/components/skill-catalog-row.d.ts +8 -0
  68. package/dist/tui/components/skill-catalog-row.js +125 -0
  69. package/dist/tui/components/skill-catalog-row.js.map +1 -0
  70. package/dist/tui/components/status-content.d.ts +14 -0
  71. package/dist/tui/components/status-content.js +131 -0
  72. package/dist/tui/components/status-content.js.map +1 -0
  73. package/dist/tui/components/wizard-skills-dialog-content.d.ts +9 -0
  74. package/dist/tui/components/wizard-skills-dialog-content.js +229 -0
  75. package/dist/tui/components/wizard-skills-dialog-content.js.map +1 -0
  76. package/dist/tui/components/wizard-skills-dialog.d.ts +7 -0
  77. package/dist/tui/components/wizard-skills-dialog.js +156 -0
  78. package/dist/tui/components/wizard-skills-dialog.js.map +1 -0
  79. package/dist/tui/constants.d.ts +8 -0
  80. package/dist/tui/constants.js +9 -0
  81. package/dist/tui/constants.js.map +1 -0
  82. package/dist/tui/formatting.d.ts +8 -0
  83. package/dist/tui/formatting.js +45 -0
  84. package/dist/tui/formatting.js.map +1 -0
  85. package/dist/tui/plugin.d.ts +2 -0
  86. package/dist/tui/plugin.js +26 -0
  87. package/dist/tui/plugin.js.map +1 -0
  88. package/dist/tui/rendering.d.ts +2 -0
  89. package/dist/tui/rendering.js +8 -0
  90. package/dist/tui/rendering.js.map +1 -0
  91. package/dist/tui/skill-helpers.d.ts +13 -0
  92. package/dist/tui/skill-helpers.js +50 -0
  93. package/dist/tui/skill-helpers.js.map +1 -0
  94. package/dist/tui/slots.d.ts +2 -0
  95. package/dist/tui/slots.js +56 -0
  96. package/dist/tui/slots.js.map +1 -0
  97. package/dist/tui/status.d.ts +2 -0
  98. package/dist/tui/status.js +21 -0
  99. package/dist/tui/status.js.map +1 -0
  100. package/dist/tui/types.d.ts +75 -0
  101. package/dist/tui/types.js +2 -0
  102. package/dist/tui/types.js.map +1 -0
  103. package/dist/tui.d.ts +1 -44
  104. package/dist/tui.js +2 -870
  105. package/dist/tui.js.map +1 -1
  106. package/package.json +1 -1
@@ -0,0 +1,229 @@
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 { WIZARD_SCOPE_TERMS } from '../../published-skills-terminology.js';
10
+ import { SKILLS_PAGE_SIZE } from '../constants.js';
11
+ import { compactStatusMessage, formatSkillsCatalogUnavailableMessage } from '../formatting.js';
12
+ import { getInstallableNotInstalledSkills, getSkillRowState } from '../skill-helpers.js';
13
+ import { PreferenceActionNoticeRow } from './preference-action-notice-row.js';
14
+ import { SkillCatalogRow } from './skill-catalog-row.js';
15
+ export const WizardSkillsDialogContent = props => {
16
+ const [page, setPage] = createSignal(0);
17
+ const content = () => {
18
+ const currentStatus = props.status();
19
+ if (currentStatus.kind === 'loading') {
20
+ return (() => {
21
+ var _el$ = _$createElement("text");
22
+ _$insertNode(_el$, _$createTextNode(`Refreshing published skills…`));
23
+ _$setProp(_el$, "wrapMode", "none");
24
+ _$setProp(_el$, "overflow", "hidden");
25
+ _$effect(_$p => _$setProp(_el$, "fg", props.theme.textMuted, _$p));
26
+ return _el$;
27
+ })();
28
+ }
29
+ if (currentStatus.kind === 'error') {
30
+ return (() => {
31
+ var _el$3 = _$createElement("text"),
32
+ _el$4 = _$createTextNode(`unavailable: `);
33
+ _$insertNode(_el$3, _el$4);
34
+ _$setProp(_el$3, "wrapMode", "none");
35
+ _$setProp(_el$3, "overflow", "hidden");
36
+ _$insert(_el$3, () => compactStatusMessage(currentStatus.message), null);
37
+ _$effect(_$p => _$setProp(_el$3, "fg", props.theme.warning, _$p));
38
+ return _el$3;
39
+ })();
40
+ }
41
+ if (!currentStatus.snapshot.catalog) {
42
+ return (() => {
43
+ var _el$5 = _$createElement("text"),
44
+ _el$6 = _$createTextNode(`catalog `);
45
+ _$insertNode(_el$5, _el$6);
46
+ _$setProp(_el$5, "wrapMode", "none");
47
+ _$setProp(_el$5, "overflow", "hidden");
48
+ _$insert(_el$5, () => formatSkillsCatalogUnavailableMessage(currentStatus.snapshot), null);
49
+ _$effect(_$p => _$setProp(_el$5, "fg", props.theme.textMuted, _$p));
50
+ return _el$5;
51
+ })();
52
+ }
53
+ const {
54
+ catalog
55
+ } = currentStatus.snapshot;
56
+ const installableNotInstalledSkills = getInstallableNotInstalledSkills(currentStatus.snapshot);
57
+ const rows = [...catalog.skills.map(skill => ({
58
+ skill,
59
+ ignored: false,
60
+ state: getSkillRowState(skill)
61
+ })), ...currentStatus.snapshot.ignoredPublishedSkills.skills.map(skill => ({
62
+ skill,
63
+ ignored: true,
64
+ state: getSkillRowState(skill)
65
+ })), ...installableNotInstalledSkills.map(skill => ({
66
+ skill,
67
+ ignored: false,
68
+ state: 'installable'
69
+ }))];
70
+ const totalPages = Math.max(1, Math.ceil(rows.length / SKILLS_PAGE_SIZE));
71
+ const currentPage = Math.min(page(), totalPages - 1);
72
+ const startIndex = currentPage * SKILLS_PAGE_SIZE;
73
+ const endIndex = Math.min(startIndex + SKILLS_PAGE_SIZE, rows.length);
74
+ const visibleRows = rows.slice(startIndex, endIndex);
75
+ const canGoBack = currentPage > 0;
76
+ const canGoForward = currentPage < totalPages - 1;
77
+ const goBack = () => {
78
+ if (!canGoBack) return;
79
+ setPage(currentPage - 1);
80
+ };
81
+ const goForward = () => {
82
+ if (!canGoForward) return;
83
+ setPage(currentPage + 1);
84
+ };
85
+ return (() => {
86
+ var _el$7 = _$createElement("box"),
87
+ _el$8 = _$createElement("box"),
88
+ _el$9 = _$createElement("text"),
89
+ _el$0 = _$createElement("b"),
90
+ _el$1 = _$createTextNode(` skills`),
91
+ _el$10 = _$createTextNode(`&nbsp;· `),
92
+ _el$11 = _$createTextNode(` `),
93
+ _el$12 = _$createTextNode(` · `),
94
+ _el$13 = _$createTextNode(` `),
95
+ _el$14 = _$createTextNode(`&nbsp;· `),
96
+ _el$15 = _$createTextNode(` `),
97
+ _el$16 = _$createTextNode(`&nbsp;· `),
98
+ _el$17 = _$createTextNode(` ignored &nbsp;· `),
99
+ _el$18 = _$createTextNode(` installable/not installed`),
100
+ _el$19 = _$createElement("text"),
101
+ _el$20 = _$createTextNode(`page `),
102
+ _el$21 = _$createTextNode(`/`),
103
+ _el$22 = _$createElement("box"),
104
+ _el$23 = _$createElement("box"),
105
+ _el$24 = _$createElement("box"),
106
+ _el$25 = _$createElement("text"),
107
+ _el$27 = _$createElement("text"),
108
+ _el$28 = _$createTextNode(` shown`),
109
+ _el$29 = _$createElement("box"),
110
+ _el$30 = _$createElement("text");
111
+ _$insertNode(_el$7, _el$8);
112
+ _$insertNode(_el$7, _el$22);
113
+ _$insertNode(_el$7, _el$23);
114
+ _$setProp(_el$7, "width", "100%");
115
+ _$setProp(_el$7, "flexDirection", "column");
116
+ _$setProp(_el$7, "overflow", "hidden");
117
+ _$insertNode(_el$8, _el$9);
118
+ _$insertNode(_el$8, _el$19);
119
+ _$setProp(_el$8, "width", "100%");
120
+ _$setProp(_el$8, "flexDirection", "row");
121
+ _$setProp(_el$8, "justifyContent", "space-between");
122
+ _$setProp(_el$8, "overflow", "hidden");
123
+ _$insertNode(_el$9, _el$0);
124
+ _$insertNode(_el$9, _el$10);
125
+ _$insertNode(_el$9, _el$11);
126
+ _$insertNode(_el$9, _el$12);
127
+ _$insertNode(_el$9, _el$13);
128
+ _$insertNode(_el$9, _el$14);
129
+ _$insertNode(_el$9, _el$15);
130
+ _$insertNode(_el$9, _el$16);
131
+ _$insertNode(_el$9, _el$17);
132
+ _$insertNode(_el$9, _el$18);
133
+ _$setProp(_el$9, "wrapMode", "none");
134
+ _$setProp(_el$9, "overflow", "hidden");
135
+ _$insertNode(_el$0, _el$1);
136
+ _$insert(_el$0, () => catalog.publishedSkillCount, _el$1);
137
+ _$insert(_el$9, () => catalog.assignmentCounts.global, _el$11);
138
+ _$insert(_el$9, () => WIZARD_SCOPE_TERMS.global, _el$12);
139
+ _$insert(_el$9, () => catalog.assignmentCounts.project, _el$13);
140
+ _$insert(_el$9, () => WIZARD_SCOPE_TERMS.project, _el$14);
141
+ _$insert(_el$9, () => catalog.assignmentCounts.user, _el$15);
142
+ _$insert(_el$9, () => WIZARD_SCOPE_TERMS.user, _el$16);
143
+ _$insert(_el$9, () => currentStatus.snapshot.ignoredPublishedSkills.count, _el$17);
144
+ _$insert(_el$9, () => installableNotInstalledSkills.length, _el$18);
145
+ _$insertNode(_el$19, _el$20);
146
+ _$insertNode(_el$19, _el$21);
147
+ _$setProp(_el$19, "wrapMode", "none");
148
+ _$insert(_el$19, currentPage + 1, _el$21);
149
+ _$insert(_el$19, totalPages, null);
150
+ _$setProp(_el$22, "width", "100%");
151
+ _$setProp(_el$22, "flexDirection", "column");
152
+ _$setProp(_el$22, "marginTop", 1);
153
+ _$setProp(_el$22, "overflow", "hidden");
154
+ _$insert(_el$22, () => visibleRows.map(row => _$createComponent(SkillCatalogRow, {
155
+ row: row,
156
+ get theme() {
157
+ return props.theme;
158
+ },
159
+ get onIgnore() {
160
+ return props.onIgnoreSkill;
161
+ },
162
+ get onInstall() {
163
+ return props.onInstallSkill;
164
+ },
165
+ get onUninstall() {
166
+ return props.onUninstallSkill;
167
+ }
168
+ })));
169
+ _$insertNode(_el$23, _el$24);
170
+ _$insertNode(_el$23, _el$27);
171
+ _$insertNode(_el$23, _el$29);
172
+ _$setProp(_el$23, "width", "100%");
173
+ _$setProp(_el$23, "flexDirection", "row");
174
+ _$setProp(_el$23, "justifyContent", "space-between");
175
+ _$setProp(_el$23, "overflow", "hidden");
176
+ _$insertNode(_el$24, _el$25);
177
+ _$setProp(_el$24, "onMouseUp", goBack);
178
+ _$setProp(_el$24, "flexShrink", 0);
179
+ _$insertNode(_el$25, _$createTextNode(`← Prev`));
180
+ _$setProp(_el$25, "wrapMode", "none");
181
+ _$insertNode(_el$27, _el$28);
182
+ _$setProp(_el$27, "wrapMode", "none");
183
+ _$setProp(_el$27, "overflow", "hidden");
184
+ _$insert(_el$27, () => visibleRows.length, _el$28);
185
+ _$insertNode(_el$29, _el$30);
186
+ _$setProp(_el$29, "onMouseUp", goForward);
187
+ _$setProp(_el$29, "flexShrink", 0);
188
+ _$insertNode(_el$30, _$createTextNode(`Next →`));
189
+ _$setProp(_el$30, "wrapMode", "none");
190
+ _$effect(_p$ => {
191
+ var _v$ = props.theme.text,
192
+ _v$2 = props.theme.textMuted,
193
+ _v$3 = canGoBack ? props.theme.text : props.theme.textMuted,
194
+ _v$4 = props.theme.textMuted,
195
+ _v$5 = canGoForward ? props.theme.text : props.theme.textMuted;
196
+ _v$ !== _p$.e && (_p$.e = _$setProp(_el$9, "fg", _v$, _p$.e));
197
+ _v$2 !== _p$.t && (_p$.t = _$setProp(_el$19, "fg", _v$2, _p$.t));
198
+ _v$3 !== _p$.a && (_p$.a = _$setProp(_el$25, "fg", _v$3, _p$.a));
199
+ _v$4 !== _p$.o && (_p$.o = _$setProp(_el$27, "fg", _v$4, _p$.o));
200
+ _v$5 !== _p$.i && (_p$.i = _$setProp(_el$30, "fg", _v$5, _p$.i));
201
+ return _p$;
202
+ }, {
203
+ e: undefined,
204
+ t: undefined,
205
+ a: undefined,
206
+ o: undefined,
207
+ i: undefined
208
+ });
209
+ return _el$7;
210
+ })();
211
+ };
212
+ return (() => {
213
+ var _el$32 = _$createElement("box");
214
+ _$setProp(_el$32, "width", "100%");
215
+ _$setProp(_el$32, "flexDirection", "column");
216
+ _$setProp(_el$32, "overflow", "hidden");
217
+ _$insert(_el$32, _$createComponent(PreferenceActionNoticeRow, {
218
+ get notice() {
219
+ return props.actionNotice();
220
+ },
221
+ get theme() {
222
+ return props.theme;
223
+ }
224
+ }), null);
225
+ _$insert(_el$32, content, null);
226
+ return _el$32;
227
+ })();
228
+ };
229
+ //# sourceMappingURL=wizard-skills-dialog-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createSignal","WIZARD_SCOPE_TERMS","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$23","_el$24","_el$25","_el$27","_el$28","_el$29","_el$30","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$32","notice","actionNotice"],"sources":["../../../src/tui/components/wizard-skills-dialog-content.tsx"],"sourcesContent":["import { createSignal } from 'solid-js';\nimport { WIZARD_SCOPE_TERMS } from '../../published-skills-terminology.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} {WIZARD_SCOPE_TERMS.global} · {catalog.assignmentCounts.project}{' '}\n {WIZARD_SCOPE_TERMS.project}\n &nbsp;· {catalog.assignmentCounts.user} {WIZARD_SCOPE_TERMS.user}\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;