@spences10/pi-skills 0.0.14 → 0.0.16

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.
@@ -0,0 +1,282 @@
1
+ import { run_with_progress_modal, show_input_modal, show_picker_modal, show_text_modal, } from '@spences10/pi-tui-modal';
2
+ import { has_gh_skill, list_github_repository_skills_async, run_gh_skill_install_async, run_gh_skill_update_async, } from '../gh-skill.js';
3
+ function is_already_installed_error(error) {
4
+ const message = error instanceof Error ? error.message : String(error);
5
+ return message.includes('already installed');
6
+ }
7
+ export async function show_add_github_skill_modal(ctx) {
8
+ if (!has_gh_skill()) {
9
+ ctx.ui.notify('Add GitHub skill requires gh v2.90.0+ with `gh skill` support.', 'warning');
10
+ return false;
11
+ }
12
+ const repository = await show_input_modal(ctx, {
13
+ title: 'Add GitHub skill',
14
+ subtitle: 'Example: spences10/skills',
15
+ label: 'Repository (owner/repo)',
16
+ trim: true,
17
+ });
18
+ if (!repository)
19
+ return false;
20
+ const action = await show_picker_modal(ctx, {
21
+ title: 'Add GitHub skill',
22
+ subtitle: repository,
23
+ items: [
24
+ {
25
+ value: 'one',
26
+ label: 'Choose one skill',
27
+ description: 'Enter a skill name or exact path to install',
28
+ },
29
+ {
30
+ value: 'all',
31
+ label: 'Install all skills from repo',
32
+ description: 'List SKILL.md files through gh api, install each one, then reload',
33
+ },
34
+ {
35
+ value: 'preview',
36
+ label: 'Preview/browse',
37
+ description: 'Coming later: preview repository skills before installing',
38
+ },
39
+ ],
40
+ });
41
+ if (!action)
42
+ return false;
43
+ if (action === 'preview') {
44
+ await show_text_modal(ctx, {
45
+ title: 'Preview/browse coming later',
46
+ text: `For now, use:\n\ngh skill preview ${repository}`,
47
+ });
48
+ return false;
49
+ }
50
+ if (action === 'one') {
51
+ const skill = await show_input_modal(ctx, {
52
+ title: 'Add one GitHub skill',
53
+ subtitle: `${repository} • example: svelte-runes or svelte-runes@v1.0.0`,
54
+ label: 'Skill name, optionally @tag-or-sha',
55
+ trim: true,
56
+ });
57
+ if (!skill)
58
+ return false;
59
+ try {
60
+ const output = await run_with_progress_modal(ctx, {
61
+ title: 'Installing GitHub skill',
62
+ message: `Installing ${skill} from ${repository}`,
63
+ }, async ({ signal, update }) => {
64
+ update({ current: skill });
65
+ return await run_gh_skill_install_async({
66
+ repository,
67
+ skill,
68
+ flags: [],
69
+ }, undefined, { signal });
70
+ });
71
+ if (output === undefined)
72
+ return false;
73
+ await show_text_modal(ctx, {
74
+ title: 'GitHub skill added',
75
+ text: `${output || `Installed ${skill} from ${repository}`}\n\nReloading...`,
76
+ });
77
+ await ctx.reload();
78
+ return true;
79
+ }
80
+ catch (error) {
81
+ ctx.ui.notify(error instanceof Error ? error.message : String(error), 'warning');
82
+ return false;
83
+ }
84
+ }
85
+ const ref_mode = await show_picker_modal(ctx, {
86
+ title: 'Install all GitHub skills',
87
+ subtitle: repository,
88
+ items: [
89
+ {
90
+ value: 'default',
91
+ label: 'Use default branch',
92
+ description: 'Install current default branch without a pin',
93
+ },
94
+ {
95
+ value: 'pin',
96
+ label: 'Pin to tag, branch, or commit SHA',
97
+ description: 'Recommended for reviewed/reproducible installs',
98
+ },
99
+ ],
100
+ });
101
+ if (!ref_mode)
102
+ return false;
103
+ const pin = ref_mode === 'pin'
104
+ ? await show_input_modal(ctx, {
105
+ title: 'Install all GitHub skills',
106
+ subtitle: repository,
107
+ label: 'Pin tag, branch, or commit SHA',
108
+ trim: true,
109
+ })
110
+ : undefined;
111
+ if (ref_mode === 'pin' && !pin)
112
+ return false;
113
+ const existing_mode = await show_picker_modal(ctx, {
114
+ title: 'Install all GitHub skills',
115
+ subtitle: 'When a skill is already installed',
116
+ items: [
117
+ {
118
+ value: 'skip',
119
+ label: 'Skip existing skills',
120
+ description: 'Leave installed skills unchanged',
121
+ },
122
+ {
123
+ value: 'overwrite',
124
+ label: 'Overwrite existing skills',
125
+ description: 'Pass --force to gh skill install',
126
+ },
127
+ ],
128
+ });
129
+ if (!existing_mode)
130
+ return false;
131
+ try {
132
+ const result = await run_with_progress_modal(ctx, {
133
+ title: 'Installing GitHub skills',
134
+ message: `Reading skills from ${repository}`,
135
+ }, async ({ signal, update }) => {
136
+ const skills = await list_github_repository_skills_async(repository, pin, undefined, { signal });
137
+ if (skills.length === 0) {
138
+ return { lines: [], installed: 0, skipped: 0, failed: 0 };
139
+ }
140
+ const lines = [];
141
+ let installed = 0;
142
+ let skipped = 0;
143
+ let failed = 0;
144
+ update({
145
+ message: existing_mode === 'overwrite'
146
+ ? 'Overwriting existing skills...'
147
+ : 'Installing missing skills...',
148
+ completed: 0,
149
+ total: skills.length,
150
+ });
151
+ for (const [index, skill] of skills.entries()) {
152
+ const flags = [
153
+ ...(pin ? ['--pin', pin] : []),
154
+ ...(existing_mode === 'overwrite' ? ['--force'] : []),
155
+ ];
156
+ update({
157
+ current: skill.name,
158
+ completed: index,
159
+ total: skills.length,
160
+ });
161
+ try {
162
+ const output = await run_gh_skill_install_async({
163
+ repository,
164
+ skill: skill.path,
165
+ flags,
166
+ }, undefined, { signal });
167
+ installed += 1;
168
+ lines.push(`✓ ${skill.name}`);
169
+ update({
170
+ completed: index + 1,
171
+ line: `✓ ${skill.name}`,
172
+ });
173
+ if (output)
174
+ lines.push(output.split('\n')[0] ?? output);
175
+ }
176
+ catch (error) {
177
+ if (signal.aborted)
178
+ throw error;
179
+ if (existing_mode === 'skip' &&
180
+ is_already_installed_error(error)) {
181
+ skipped += 1;
182
+ lines.push(`⊘ ${skill.name} already installed`);
183
+ update({
184
+ completed: index + 1,
185
+ line: `⊘ ${skill.name} already installed`,
186
+ });
187
+ continue;
188
+ }
189
+ failed += 1;
190
+ const message = error instanceof Error ? error.message : String(error);
191
+ lines.push(`! ${skill.name}: ${message}`);
192
+ update({
193
+ completed: index + 1,
194
+ line: `! ${skill.name}: ${message}`,
195
+ });
196
+ }
197
+ }
198
+ return { lines, installed, skipped, failed };
199
+ });
200
+ if (result === undefined)
201
+ return false;
202
+ const { lines, installed, skipped, failed } = result;
203
+ if (lines.length === 0 && installed === 0) {
204
+ ctx.ui.notify(`No SKILL.md files found in ${repository}`, 'warning');
205
+ return false;
206
+ }
207
+ await show_text_modal(ctx, {
208
+ title: 'GitHub skills added',
209
+ text: `Installed ${installed}, skipped ${skipped}, failed ${failed} from ${repository}.\n\n${lines.join('\n')}${installed > 0 ? '\n\nReloading...' : ''}`,
210
+ });
211
+ if (installed > 0) {
212
+ await ctx.reload();
213
+ return true;
214
+ }
215
+ return false;
216
+ }
217
+ catch (error) {
218
+ ctx.ui.notify(error instanceof Error ? error.message : String(error), 'warning');
219
+ return false;
220
+ }
221
+ }
222
+ export async function show_update_github_skills_modal(ctx) {
223
+ if (!has_gh_skill()) {
224
+ ctx.ui.notify('Update GitHub skills requires gh v2.90.0+ with `gh skill` support.', 'warning');
225
+ return false;
226
+ }
227
+ try {
228
+ const check_output = await run_with_progress_modal(ctx, {
229
+ title: 'Checking GitHub skill updates',
230
+ message: 'Running gh skill update --dry-run',
231
+ }, async ({ signal }) => await run_gh_skill_update_async(['--dry-run'], undefined, {
232
+ signal,
233
+ }));
234
+ if (check_output === undefined)
235
+ return false;
236
+ const selected = await show_picker_modal(ctx, {
237
+ title: 'Update GitHub skills',
238
+ subtitle: 'Dry-run result',
239
+ items: [
240
+ {
241
+ value: 'apply',
242
+ label: 'Apply updates',
243
+ description: 'Run gh skill update --all and reload',
244
+ },
245
+ {
246
+ value: 'check-only',
247
+ label: 'Check only',
248
+ description: 'Show dry-run output without modifying files',
249
+ },
250
+ ],
251
+ footer: check_output || 'No output from gh skill update --dry-run.',
252
+ });
253
+ if (!selected)
254
+ return false;
255
+ if (selected === 'check-only') {
256
+ await show_text_modal(ctx, {
257
+ title: 'GitHub skill update check',
258
+ text: check_output || 'No output from gh skill update --dry-run.',
259
+ });
260
+ return false;
261
+ }
262
+ const output = await run_with_progress_modal(ctx, {
263
+ title: 'Updating GitHub skills',
264
+ message: 'Running gh skill update --all',
265
+ }, async ({ signal }) => await run_gh_skill_update_async(['--all'], undefined, {
266
+ signal,
267
+ }));
268
+ if (output === undefined)
269
+ return false;
270
+ await show_text_modal(ctx, {
271
+ title: 'GitHub skills updated',
272
+ text: `${output || 'gh skill update --all completed.'}\n\nReloading...`,
273
+ });
274
+ await ctx.reload();
275
+ return true;
276
+ }
277
+ catch (error) {
278
+ ctx.ui.notify(error instanceof Error ? error.message : String(error), 'warning');
279
+ return false;
280
+ }
281
+ }
282
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/skills-ui/github.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ExtensionCommandContext } from '@earendil-works/pi-coding-agent';
2
+ export declare function show_skills_home_modal(ctx: ExtensionCommandContext, managed_count: number, importable_count: number, active_profile: string): Promise<string | undefined>;
@@ -0,0 +1,41 @@
1
+ import { show_picker_modal } from '@spences10/pi-tui-modal';
2
+ export async function show_skills_home_modal(ctx, managed_count, importable_count, active_profile) {
3
+ return await show_picker_modal(ctx, {
4
+ title: 'Skills',
5
+ subtitle: `${managed_count} managed • ${importable_count} importable • profile ${active_profile}`,
6
+ items: [
7
+ {
8
+ value: 'manage',
9
+ label: 'Manage skills',
10
+ description: 'Search and enable/disable managed skills',
11
+ },
12
+ {
13
+ value: 'importable',
14
+ label: 'Importable skills',
15
+ description: 'Batch import external skills or sync imported copies',
16
+ },
17
+ {
18
+ value: 'add',
19
+ label: 'Add GitHub skill',
20
+ description: 'Install a skill from owner/repo using gh skill',
21
+ },
22
+ {
23
+ value: 'update',
24
+ label: 'Update GitHub skills',
25
+ description: 'Check GitHub-installed skills and apply updates',
26
+ },
27
+ {
28
+ value: 'profiles',
29
+ label: 'Profiles',
30
+ description: 'Switch profiles and edit profile rules',
31
+ },
32
+ {
33
+ value: 'refresh',
34
+ label: 'Refresh discovery',
35
+ description: 'Rescan managed and importable skills',
36
+ },
37
+ ],
38
+ footer: 'enter opens • esc close/back',
39
+ });
40
+ }
41
+ //# sourceMappingURL=home.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home.js","sourceRoot":"","sources":["../../src/skills-ui/home.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC3C,GAA4B,EAC5B,aAAqB,EACrB,gBAAwB,EACxB,cAAsB;IAEtB,OAAO,MAAM,iBAAiB,CAAC,GAAG,EAAE;QACnC,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,GAAG,aAAa,cAAc,gBAAgB,yBAAyB,cAAc,EAAE;QACjG,KAAK,EAAE;YACN;gBACC,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,eAAe;gBACtB,WAAW,EAAE,0CAA0C;aACvD;YACD;gBACC,KAAK,EAAE,YAAY;gBACnB,KAAK,EAAE,mBAAmB;gBAC1B,WAAW,EACV,sDAAsD;aACvD;YACD;gBACC,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,kBAAkB;gBACzB,WAAW,EAAE,gDAAgD;aAC7D;YACD;gBACC,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,sBAAsB;gBAC7B,WAAW,EACV,iDAAiD;aAClD;YACD;gBACC,KAAK,EAAE,UAAU;gBACjB,KAAK,EAAE,UAAU;gBACjB,WAAW,EAAE,wCAAwC;aACrD;YACD;gBACC,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,mBAAmB;gBAC1B,WAAW,EAAE,sCAAsC;aACnD;SACD;QACD,MAAM,EAAE,8BAA8B;KACtC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExtensionCommandContext } from '@earendil-works/pi-coding-agent';
2
+ import type { SkillsManager } from '../manager.js';
3
+ export declare function show_importable_skills_modal(ctx: ExtensionCommandContext, mgr: SkillsManager): Promise<boolean>;
@@ -0,0 +1,91 @@
1
+ import { show_settings_modal } from '@spences10/pi-tui-modal';
2
+ import { find_matching_imported_skill, find_skill, get_importable_state, sort_skills, } from '../skill-utils.js';
3
+ const IMPORT_SELECTED = '● import';
4
+ const SYNC_SELECTED = '● sync';
5
+ const SKIP_SELECTED = '○ skip';
6
+ function importable_action_label(state) {
7
+ if (state.action === 'import')
8
+ return 'Import';
9
+ if (state.action === 'sync')
10
+ return 'Sync available';
11
+ return state.label === 'managed'
12
+ ? 'Already managed'
13
+ : 'Already imported';
14
+ }
15
+ export async function show_importable_skills_modal(ctx, mgr) {
16
+ const managed = sort_skills(mgr.discover());
17
+ const importable = sort_skills(mgr.discover_importable());
18
+ if (importable.length === 0) {
19
+ ctx.ui.notify('No importable skills found');
20
+ return false;
21
+ }
22
+ const selected = new Map();
23
+ const metadata_by_id = new Map();
24
+ const items = importable.map((skill) => {
25
+ const state = get_importable_state(managed, skill);
26
+ metadata_by_id.set(skill.key, [
27
+ `${importable_action_label(state)} • ${skill.source} • ${skill.key}`,
28
+ skill.description,
29
+ state.detail,
30
+ skill.baseDir,
31
+ ].join('\n'));
32
+ const values = state.action === 'import'
33
+ ? [SKIP_SELECTED, IMPORT_SELECTED]
34
+ : state.action === 'sync'
35
+ ? [SKIP_SELECTED, SYNC_SELECTED]
36
+ : [state.label];
37
+ return {
38
+ id: skill.key,
39
+ label: skill.name,
40
+ description: '',
41
+ currentValue: values[0],
42
+ values,
43
+ };
44
+ });
45
+ await show_settings_modal(ctx, {
46
+ title: 'Importable skills',
47
+ subtitle: () => {
48
+ const actions = [...selected.values()].filter((value) => value !== SKIP_SELECTED).length;
49
+ return `${importable.length} external skills • ${actions} selected`;
50
+ },
51
+ items,
52
+ max_visible: Math.min(Math.max(items.length + 4, 8), 12),
53
+ enable_search: true,
54
+ metadata: (item) => item ? metadata_by_id.get(item.id)?.split('\n') : undefined,
55
+ on_change: (id, new_value) => {
56
+ if (new_value === SKIP_SELECTED)
57
+ selected.delete(id);
58
+ else
59
+ selected.set(id, new_value);
60
+ },
61
+ });
62
+ let changed = false;
63
+ for (const [key, action] of selected) {
64
+ const skill = find_skill(importable, key);
65
+ try {
66
+ if (action === IMPORT_SELECTED) {
67
+ mgr.import_skill(skill.key);
68
+ changed = true;
69
+ }
70
+ else if (action === SYNC_SELECTED) {
71
+ const imported_skill = find_matching_imported_skill(managed, skill);
72
+ if (!imported_skill) {
73
+ ctx.ui.notify(`Imported copy for ${skill.name} was not found`, 'warning');
74
+ continue;
75
+ }
76
+ changed =
77
+ mgr.sync_skill(imported_skill.key).changed || changed;
78
+ }
79
+ }
80
+ catch (error) {
81
+ ctx.ui.notify(error instanceof Error ? error.message : String(error), 'warning');
82
+ }
83
+ }
84
+ if (changed) {
85
+ ctx.ui.notify('Updated importable skills. Reloading...', 'info');
86
+ await ctx.reload();
87
+ return true;
88
+ }
89
+ return false;
90
+ }
91
+ //# sourceMappingURL=importable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importable.js","sourceRoot":"","sources":["../../src/skills-ui/importable.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ExtensionCommandContext } from '@earendil-works/pi-coding-agent';
2
+ import type { SkillsManager } from '../manager.js';
3
+ export declare function show_skills_manager_modal(ctx: ExtensionCommandContext, mgr: SkillsManager): Promise<boolean>;
@@ -0,0 +1,46 @@
1
+ import { show_settings_modal } from '@spences10/pi-tui-modal';
2
+ import { ENABLED, sets_equal, sort_skills, to_setting_item, } from '../skill-utils.js';
3
+ export async function show_skills_manager_modal(ctx, mgr) {
4
+ const discovered = sort_skills(mgr.discover());
5
+ if (discovered.length === 0) {
6
+ ctx.ui.notify('No managed skills found');
7
+ return false;
8
+ }
9
+ const initial_enabled = new Set(discovered
10
+ .filter((skill) => skill.enabled)
11
+ .map((skill) => skill.key));
12
+ const current_enabled = new Set(initial_enabled);
13
+ const items = discovered.map(to_setting_item);
14
+ const metadata_by_id = new Map(items.map((item) => [item.id, item.description ?? '']));
15
+ for (const item of items)
16
+ item.description = '';
17
+ await show_settings_modal(ctx, {
18
+ title: 'Manage skills',
19
+ subtitle: () => {
20
+ const enabled = current_enabled.size;
21
+ const disabled = discovered.length - enabled;
22
+ return `profile ${mgr.get_active_profile()} • ${enabled} enabled • ${disabled} disabled`;
23
+ },
24
+ items,
25
+ max_visible: Math.min(Math.max(items.length + 4, 8), 12),
26
+ enable_search: true,
27
+ metadata: (item) => item ? metadata_by_id.get(item.id)?.split('\n') : undefined,
28
+ on_change: (id, new_value) => {
29
+ if (new_value === ENABLED) {
30
+ current_enabled.add(id);
31
+ mgr.enable(id);
32
+ }
33
+ else {
34
+ current_enabled.delete(id);
35
+ mgr.disable(id);
36
+ }
37
+ },
38
+ });
39
+ if (!sets_equal(initial_enabled, current_enabled)) {
40
+ ctx.ui.notify('Reloading to apply updated skills...', 'info');
41
+ await ctx.reload();
42
+ return true;
43
+ }
44
+ return false;
45
+ }
46
+ //# sourceMappingURL=manage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage.js","sourceRoot":"","sources":["../../src/skills-ui/manage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EACN,OAAO,EACP,UAAU,EACV,WAAW,EACX,eAAe,GACf,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC9C,GAA4B,EAC5B,GAAkB;IAElB,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,GAAG,CAC9B,UAAU;SACR,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;SAChC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAC3B,CAAC;IACF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC9C,MAAM,cAAc,GAAG,IAAI,GAAG,CAC7B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CACtD,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IAEhD,MAAM,mBAAmB,CAAC,GAAG,EAAE;QAC9B,KAAK,EAAE,eAAe;QACtB,QAAQ,EAAE,GAAG,EAAE;YACd,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC;YACrC,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC;YAC7C,OAAO,WAAW,GAAG,CAAC,kBAAkB,EAAE,MAAM,OAAO,cAAc,QAAQ,WAAW,CAAC;QAC1F,CAAC;QACD,KAAK;QACL,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QACxD,aAAa,EAAE,IAAI;QACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAClB,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5D,SAAS,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE;YAC5B,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;gBAC3B,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACxB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACP,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC3B,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACF,CAAC;KACD,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,eAAe,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,sCAAsC,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ExtensionCommandContext } from '@earendil-works/pi-coding-agent';
2
+ import type { SkillsManager } from '../manager.js';
3
+ export declare function show_refresh_summary(ctx: ExtensionCommandContext, mgr: SkillsManager): Promise<void>;
4
+ export declare function show_defaults_modal(ctx: ExtensionCommandContext, mgr: SkillsManager): Promise<void>;
5
+ export declare function pick_profile(ctx: ExtensionCommandContext, mgr: SkillsManager, title: string): Promise<string | undefined>;
6
+ export declare function show_profiles_modal(ctx: ExtensionCommandContext, mgr: SkillsManager): Promise<boolean>;