@spences10/pi-skills 0.0.7 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -2
- package/dist/commands.d.ts +2 -0
- package/dist/commands.js +444 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +11 -1
- package/dist/config.js +73 -4
- package/dist/config.js.map +1 -1
- package/dist/importer.js +2 -2
- package/dist/importer.js.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.js +1 -720
- package/dist/index.js.map +1 -1
- package/dist/manager.d.ts +20 -1
- package/dist/manager.js +183 -22
- package/dist/manager.js.map +1 -1
- package/dist/scanner.js +2 -2
- package/dist/scanner.js.map +1 -1
- package/dist/skill-utils.d.ts +23 -0
- package/dist/skill-utils.js +221 -0
- package/dist/skill-utils.js.map +1 -0
- package/dist/skills-ui.d.ts +16 -0
- package/dist/skills-ui.js +374 -0
- package/dist/skills-ui.js.map +1 -0
- package/package.json +11 -8
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
export const ENABLED = '● enabled';
|
|
2
|
+
export const DISABLED = '○ disabled';
|
|
3
|
+
export const SYNC = '↻ sync';
|
|
4
|
+
export const IMPORTED_LABEL = '✓ imported';
|
|
5
|
+
export function sort_skills(skills) {
|
|
6
|
+
return [...skills].sort((a, b) => {
|
|
7
|
+
const by_name = a.name.localeCompare(b.name);
|
|
8
|
+
if (by_name !== 0)
|
|
9
|
+
return by_name;
|
|
10
|
+
const by_source = a.source.localeCompare(b.source);
|
|
11
|
+
if (by_source !== 0)
|
|
12
|
+
return by_source;
|
|
13
|
+
return a.key.localeCompare(b.key);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
export function find_matching_imported_skill(managed_skills, skill) {
|
|
17
|
+
const exact_match = managed_skills.find((candidate) => candidate.import_meta?.source === skill.source &&
|
|
18
|
+
(candidate.import_meta.upstream_skill_path ===
|
|
19
|
+
skill.skillPath ||
|
|
20
|
+
candidate.import_meta.upstream_base_dir === skill.baseDir));
|
|
21
|
+
if (exact_match)
|
|
22
|
+
return exact_match;
|
|
23
|
+
return managed_skills.find((candidate) => candidate.import_meta?.source === skill.source &&
|
|
24
|
+
candidate.name === skill.name);
|
|
25
|
+
}
|
|
26
|
+
export function get_importable_state(managed_skills, skill) {
|
|
27
|
+
const imported = find_matching_imported_skill(managed_skills, skill);
|
|
28
|
+
if (imported?.import_meta) {
|
|
29
|
+
const version_changed = Boolean(skill.plugin?.version &&
|
|
30
|
+
imported.import_meta.upstream_version &&
|
|
31
|
+
skill.plugin.version !== imported.import_meta.upstream_version);
|
|
32
|
+
const sha_changed = Boolean(skill.plugin?.gitCommitSha &&
|
|
33
|
+
imported.import_meta.upstream_git_commit_sha &&
|
|
34
|
+
skill.plugin.gitCommitSha !==
|
|
35
|
+
imported.import_meta.upstream_git_commit_sha);
|
|
36
|
+
if (version_changed || sha_changed) {
|
|
37
|
+
return {
|
|
38
|
+
label: 'sync',
|
|
39
|
+
detail: 'Press Enter to sync the imported copy and reload',
|
|
40
|
+
action: 'sync',
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
label: 'imported',
|
|
45
|
+
detail: `Already imported to ${imported.baseDir}`,
|
|
46
|
+
action: null,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const managed_conflict = managed_skills.find((candidate) => candidate.name === skill.name);
|
|
50
|
+
if (managed_conflict) {
|
|
51
|
+
return {
|
|
52
|
+
label: 'managed',
|
|
53
|
+
detail: `Already managed at ${managed_conflict.baseDir}`,
|
|
54
|
+
action: null,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
label: 'import',
|
|
59
|
+
detail: 'Press Enter to import into pi-native skills and reload',
|
|
60
|
+
action: 'import',
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export function to_setting_item(skill) {
|
|
64
|
+
const detail_lines = [
|
|
65
|
+
`${skill.source} • ${skill.key}`,
|
|
66
|
+
skill.description,
|
|
67
|
+
skill.baseDir,
|
|
68
|
+
];
|
|
69
|
+
if (skill.import_meta?.upstream_version) {
|
|
70
|
+
detail_lines.push(`upstream: ${skill.import_meta.upstream_version}${skill.import_meta.upstream_git_commit_sha ? ` • ${skill.import_meta.upstream_git_commit_sha.slice(0, 12)}` : ''}`);
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
id: skill.key,
|
|
74
|
+
label: skill.name,
|
|
75
|
+
description: detail_lines.join('\n'),
|
|
76
|
+
currentValue: skill.enabled ? ENABLED : DISABLED,
|
|
77
|
+
values: [ENABLED, DISABLED],
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export function to_importable_setting_item(managed_skills, skill) {
|
|
81
|
+
const state = get_importable_state(managed_skills, skill);
|
|
82
|
+
const detail_lines = [
|
|
83
|
+
`${skill.source} • ${skill.key}`,
|
|
84
|
+
skill.description,
|
|
85
|
+
skill.baseDir,
|
|
86
|
+
];
|
|
87
|
+
if (skill.plugin?.version) {
|
|
88
|
+
detail_lines.push(`plugin: ${skill.plugin.version}${skill.plugin.gitCommitSha ? ` • ${skill.plugin.gitCommitSha.slice(0, 12)}` : ''}`);
|
|
89
|
+
}
|
|
90
|
+
if (state.action === 'import') {
|
|
91
|
+
return {
|
|
92
|
+
id: skill.key,
|
|
93
|
+
label: skill.name,
|
|
94
|
+
description: detail_lines.join('\n'),
|
|
95
|
+
currentValue: DISABLED,
|
|
96
|
+
values: [ENABLED, DISABLED],
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
if (state.action === 'sync') {
|
|
100
|
+
detail_lines.push('enter to sync');
|
|
101
|
+
return {
|
|
102
|
+
id: skill.key,
|
|
103
|
+
label: skill.name,
|
|
104
|
+
description: detail_lines.join('\n'),
|
|
105
|
+
currentValue: SYNC,
|
|
106
|
+
values: [SYNC],
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
detail_lines.push(state.detail);
|
|
110
|
+
return {
|
|
111
|
+
id: skill.key,
|
|
112
|
+
label: skill.name,
|
|
113
|
+
description: detail_lines.join('\n'),
|
|
114
|
+
currentValue: IMPORTED_LABEL,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
export function sets_equal(a, b) {
|
|
118
|
+
if (a.size !== b.size)
|
|
119
|
+
return false;
|
|
120
|
+
for (const value of a) {
|
|
121
|
+
if (!b.has(value))
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
export function skill_status(skill) {
|
|
127
|
+
if (skill.kind === 'external')
|
|
128
|
+
return 'importable';
|
|
129
|
+
return skill.enabled ? 'enabled' : 'disabled';
|
|
130
|
+
}
|
|
131
|
+
export function format_skill_detail(skill) {
|
|
132
|
+
const lines = [
|
|
133
|
+
`# ${skill.name}`,
|
|
134
|
+
'',
|
|
135
|
+
`Status: ${skill_status(skill)}`,
|
|
136
|
+
`Source: ${skill.source}`,
|
|
137
|
+
`Key: ${skill.key}`,
|
|
138
|
+
`Kind: ${skill.kind}`,
|
|
139
|
+
'',
|
|
140
|
+
skill.description,
|
|
141
|
+
'',
|
|
142
|
+
`Base directory: ${skill.baseDir}`,
|
|
143
|
+
`Skill file: ${skill.skillPath}`,
|
|
144
|
+
];
|
|
145
|
+
if (skill.plugin) {
|
|
146
|
+
lines.push('', 'Plugin', `- ID: ${skill.plugin.pluginId}`, `- Version: ${skill.plugin.version}`, `- Install path: ${skill.plugin.installPath}`);
|
|
147
|
+
if (skill.plugin.gitCommitSha) {
|
|
148
|
+
lines.push(`- Commit: ${skill.plugin.gitCommitSha}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (skill.import_meta) {
|
|
152
|
+
lines.push('', 'Import metadata', `- Upstream source: ${skill.import_meta.source}`, `- Imported at: ${skill.import_meta.imported_at}`, `- Last synced at: ${skill.import_meta.last_synced_at}`, `- Upstream path: ${skill.import_meta.upstream_skill_path}`);
|
|
153
|
+
if (skill.import_meta.upstream_version) {
|
|
154
|
+
lines.push(`- Upstream version: ${skill.import_meta.upstream_version}`);
|
|
155
|
+
}
|
|
156
|
+
if (skill.import_meta.upstream_git_commit_sha) {
|
|
157
|
+
lines.push(`- Upstream commit: ${skill.import_meta.upstream_git_commit_sha}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return lines.join('\n');
|
|
161
|
+
}
|
|
162
|
+
export function format_skill_list(skills) {
|
|
163
|
+
if (skills.length === 0)
|
|
164
|
+
return 'No skills found.';
|
|
165
|
+
return sort_skills(skills)
|
|
166
|
+
.map((skill) => `${skill_status(skill).padEnd(10)} ${skill.name} (${skill.key})`)
|
|
167
|
+
.join('\n');
|
|
168
|
+
}
|
|
169
|
+
export function find_skill(skills, key_or_name) {
|
|
170
|
+
const query = key_or_name.trim();
|
|
171
|
+
const exact_key = skills.find((skill) => skill.key === query);
|
|
172
|
+
if (exact_key)
|
|
173
|
+
return exact_key;
|
|
174
|
+
const exact_name = skills.filter((skill) => skill.name === query);
|
|
175
|
+
if (exact_name.length === 1)
|
|
176
|
+
return exact_name[0];
|
|
177
|
+
if (exact_name.length > 1) {
|
|
178
|
+
throw new Error(`Multiple skills named ${query}. Use an exact key instead.`);
|
|
179
|
+
}
|
|
180
|
+
const lower = query.toLowerCase();
|
|
181
|
+
const fuzzy = skills.filter((skill) => skill.key.toLowerCase() === lower ||
|
|
182
|
+
skill.name.toLowerCase() === lower);
|
|
183
|
+
if (fuzzy.length === 1)
|
|
184
|
+
return fuzzy[0];
|
|
185
|
+
if (fuzzy.length > 1) {
|
|
186
|
+
throw new Error(`Multiple skills matched ${query}. Use an exact key instead.`);
|
|
187
|
+
}
|
|
188
|
+
throw new Error(`Unknown skill: ${query}`);
|
|
189
|
+
}
|
|
190
|
+
export function profile_description(profile) {
|
|
191
|
+
const parts = [profile.active ? 'active' : 'inactive'];
|
|
192
|
+
if (profile.extends.length) {
|
|
193
|
+
parts.push(`extends ${profile.extends.join(', ')}`);
|
|
194
|
+
}
|
|
195
|
+
parts.push(`${profile.include.length} include`);
|
|
196
|
+
parts.push(`${profile.exclude.length} exclude`);
|
|
197
|
+
return parts.join(' • ');
|
|
198
|
+
}
|
|
199
|
+
export function format_profile_detail(profile) {
|
|
200
|
+
const lines = [
|
|
201
|
+
`# ${profile.name}`,
|
|
202
|
+
'',
|
|
203
|
+
`Status: ${profile.active ? 'active' : 'inactive'}`,
|
|
204
|
+
];
|
|
205
|
+
if (profile.description) {
|
|
206
|
+
lines.push(`Description: ${profile.description}`);
|
|
207
|
+
}
|
|
208
|
+
if (profile.extends.length) {
|
|
209
|
+
lines.push(`Extends: ${profile.extends.join(', ')}`);
|
|
210
|
+
}
|
|
211
|
+
lines.push('', 'Include patterns:');
|
|
212
|
+
lines.push(...(profile.include.length
|
|
213
|
+
? profile.include.map((p) => `- ${p}`)
|
|
214
|
+
: ['- none']));
|
|
215
|
+
lines.push('', 'Exclude patterns:');
|
|
216
|
+
lines.push(...(profile.exclude.length
|
|
217
|
+
? profile.exclude.map((p) => `- ${p}`)
|
|
218
|
+
: ['- none']));
|
|
219
|
+
return lines.join('\n');
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=skill-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-utils.js","sourceRoot":"","sources":["../src/skill-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ExtensionCommandContext } from '@mariozechner/pi-coding-agent';
|
|
2
|
+
import type { ManagedSkill, SkillsManager } from './manager.js';
|
|
3
|
+
export declare function show_skills_home_modal(ctx: ExtensionCommandContext, managed_count: number, importable_count: number, active_profile: string): Promise<string | undefined>;
|
|
4
|
+
export declare function show_skills_manager_modal(ctx: ExtensionCommandContext, mgr: SkillsManager): Promise<boolean>;
|
|
5
|
+
export declare function pick_skill(ctx: ExtensionCommandContext, options: {
|
|
6
|
+
title: string;
|
|
7
|
+
subtitle: string;
|
|
8
|
+
skills: ManagedSkill[];
|
|
9
|
+
empty_message: string;
|
|
10
|
+
}): Promise<string | undefined>;
|
|
11
|
+
export declare function show_skill_detail_modal(ctx: ExtensionCommandContext, skill: ManagedSkill): Promise<void>;
|
|
12
|
+
export declare function show_skill_list_modal(ctx: ExtensionCommandContext, mgr: SkillsManager): Promise<void>;
|
|
13
|
+
export declare function show_refresh_summary(ctx: ExtensionCommandContext, mgr: SkillsManager): Promise<void>;
|
|
14
|
+
export declare function show_defaults_modal(ctx: ExtensionCommandContext, mgr: SkillsManager): Promise<void>;
|
|
15
|
+
export declare function pick_profile(ctx: ExtensionCommandContext, mgr: SkillsManager, title: string): Promise<string | undefined>;
|
|
16
|
+
export declare function show_profiles_modal(ctx: ExtensionCommandContext, mgr: SkillsManager): Promise<boolean>;
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
import { show_input_modal, show_picker_modal, show_settings_modal, show_text_modal, } from '@spences10/pi-tui-modal';
|
|
2
|
+
import { ENABLED, find_matching_imported_skill, find_skill, format_profile_detail, format_skill_detail, get_importable_state, profile_description, sets_equal, skill_status, sort_skills, to_importable_setting_item, to_setting_item, } from './skill-utils.js';
|
|
3
|
+
export async function show_skills_home_modal(ctx, managed_count, importable_count, active_profile) {
|
|
4
|
+
return await show_picker_modal(ctx, {
|
|
5
|
+
title: 'Skills',
|
|
6
|
+
subtitle: `${managed_count} managed • ${importable_count} importable • profile ${active_profile}`,
|
|
7
|
+
items: [
|
|
8
|
+
{
|
|
9
|
+
value: 'manage',
|
|
10
|
+
label: 'Manage skills',
|
|
11
|
+
description: 'Enable, disable, import, and sync skills',
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
value: 'browse',
|
|
15
|
+
label: 'Browse details',
|
|
16
|
+
description: 'Open read-only detail views for discovered skills',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
value: 'import',
|
|
20
|
+
label: 'Import skill',
|
|
21
|
+
description: 'Copy an external skill into Pi-native storage',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
value: 'sync',
|
|
25
|
+
label: 'Sync imported skill',
|
|
26
|
+
description: 'Update an imported skill from its upstream source',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
value: 'profiles',
|
|
30
|
+
label: 'Profiles',
|
|
31
|
+
description: 'Create and switch named skill sets',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
value: 'refresh',
|
|
35
|
+
label: 'Refresh discovery',
|
|
36
|
+
description: 'Rescan managed and importable skills',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
value: 'defaults',
|
|
40
|
+
label: 'Default policy',
|
|
41
|
+
description: 'Choose whether new skills default enabled or disabled',
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
footer: 'enter opens • esc close/back',
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
export async function show_skills_manager_modal(ctx, mgr) {
|
|
48
|
+
const discovered = sort_skills(mgr.discover());
|
|
49
|
+
const importable = sort_skills(mgr.discover_importable());
|
|
50
|
+
if (discovered.length === 0 && importable.length === 0) {
|
|
51
|
+
ctx.ui.notify('No managed or importable skills found');
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
const initial_enabled = new Set(discovered
|
|
55
|
+
.filter((skill) => skill.enabled)
|
|
56
|
+
.map((skill) => skill.key));
|
|
57
|
+
const current_enabled = new Set(initial_enabled);
|
|
58
|
+
const queued_imports = new Set();
|
|
59
|
+
let reload_notice = null;
|
|
60
|
+
const managed_items = discovered.map(to_setting_item);
|
|
61
|
+
const importable_items = importable.map((skill) => to_importable_setting_item(discovered, skill));
|
|
62
|
+
const all_items = [];
|
|
63
|
+
if (managed_items.length > 0) {
|
|
64
|
+
all_items.push({
|
|
65
|
+
id: '__header_managed__',
|
|
66
|
+
label: `── Managed (${managed_items.length}) ──`,
|
|
67
|
+
description: '',
|
|
68
|
+
currentValue: '',
|
|
69
|
+
});
|
|
70
|
+
all_items.push(...managed_items);
|
|
71
|
+
}
|
|
72
|
+
if (importable_items.length > 0) {
|
|
73
|
+
all_items.push({
|
|
74
|
+
id: '__header_importable__',
|
|
75
|
+
label: `── Importable (${importable_items.length}) ──`,
|
|
76
|
+
description: '',
|
|
77
|
+
currentValue: '',
|
|
78
|
+
});
|
|
79
|
+
all_items.push(...importable_items);
|
|
80
|
+
}
|
|
81
|
+
const metadata_by_id = new Map(all_items.map((item) => [item.id, item.description ?? '']));
|
|
82
|
+
for (const item of all_items) {
|
|
83
|
+
if (!item.id.startsWith('__header_'))
|
|
84
|
+
item.description = '';
|
|
85
|
+
}
|
|
86
|
+
const managed_keys = new Set(discovered.map((skill) => skill.key));
|
|
87
|
+
const importable_map = new Map(importable.map((skill) => [skill.key, skill]));
|
|
88
|
+
await show_settings_modal(ctx, {
|
|
89
|
+
title: 'Skills',
|
|
90
|
+
subtitle: () => {
|
|
91
|
+
const enabled = current_enabled.size;
|
|
92
|
+
const disabled = discovered.length - enabled;
|
|
93
|
+
const queued = queued_imports.size;
|
|
94
|
+
const parts = [
|
|
95
|
+
`profile ${mgr.get_active_profile()}`,
|
|
96
|
+
`${enabled} enabled`,
|
|
97
|
+
`${disabled} disabled`,
|
|
98
|
+
];
|
|
99
|
+
if (importable.length > 0)
|
|
100
|
+
parts.push(`${importable.length} importable`);
|
|
101
|
+
if (queued > 0)
|
|
102
|
+
parts.push(`${queued} queued for import`);
|
|
103
|
+
return parts.join(' • ');
|
|
104
|
+
},
|
|
105
|
+
items: all_items,
|
|
106
|
+
max_visible: Math.min(Math.max(all_items.length + 4, 8), 12),
|
|
107
|
+
enable_search: true,
|
|
108
|
+
metadata: (item) => item ? metadata_by_id.get(item.id)?.split('\n') : undefined,
|
|
109
|
+
on_change: (id, new_value) => {
|
|
110
|
+
if (id.startsWith('__header_'))
|
|
111
|
+
return;
|
|
112
|
+
if (managed_keys.has(id)) {
|
|
113
|
+
if (new_value === ENABLED) {
|
|
114
|
+
current_enabled.add(id);
|
|
115
|
+
mgr.enable(id);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
current_enabled.delete(id);
|
|
119
|
+
mgr.disable(id);
|
|
120
|
+
}
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const import_skill = importable_map.get(id);
|
|
124
|
+
if (!import_skill)
|
|
125
|
+
return;
|
|
126
|
+
const state = get_importable_state(discovered, import_skill);
|
|
127
|
+
if (state.action === 'import') {
|
|
128
|
+
if (new_value === ENABLED)
|
|
129
|
+
queued_imports.add(id);
|
|
130
|
+
else
|
|
131
|
+
queued_imports.delete(id);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (state.action !== 'sync')
|
|
135
|
+
return;
|
|
136
|
+
const imported_skill = find_matching_imported_skill(discovered, import_skill);
|
|
137
|
+
if (!imported_skill) {
|
|
138
|
+
ctx.ui.notify(`Imported copy for ${import_skill.name} was not found`, 'warning');
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
const result = mgr.sync_skill(imported_skill.key);
|
|
143
|
+
if (result.changed) {
|
|
144
|
+
reload_notice = `Synced ${import_skill.name}. Reloading...`;
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
ctx.ui.notify(`${import_skill.name} is already up to date.`, 'info');
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
ctx.ui.notify(error instanceof Error ? error.message : String(error), 'warning');
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
if (queued_imports.size > 0) {
|
|
155
|
+
const imported_names = [];
|
|
156
|
+
for (const key of queued_imports) {
|
|
157
|
+
try {
|
|
158
|
+
mgr.import_skill(key);
|
|
159
|
+
imported_names.push(key);
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
ctx.ui.notify(error instanceof Error ? error.message : String(error), 'warning');
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (imported_names.length > 0) {
|
|
166
|
+
reload_notice = `Imported ${imported_names.length} skill(s). Reloading...`;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (reload_notice) {
|
|
170
|
+
ctx.ui.notify(reload_notice, 'info');
|
|
171
|
+
await ctx.reload();
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
if (!sets_equal(initial_enabled, current_enabled)) {
|
|
175
|
+
ctx.ui.notify('Reloading to apply updated skills...', 'info');
|
|
176
|
+
await ctx.reload();
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
export async function pick_skill(ctx, options) {
|
|
182
|
+
return await show_picker_modal(ctx, {
|
|
183
|
+
title: options.title,
|
|
184
|
+
subtitle: options.subtitle,
|
|
185
|
+
items: options.skills.map((skill) => ({
|
|
186
|
+
value: skill.key,
|
|
187
|
+
label: skill.name,
|
|
188
|
+
description: `${skill_status(skill)} • ${skill.source} • ${skill.key}`,
|
|
189
|
+
})),
|
|
190
|
+
empty_message: options.empty_message,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
export async function show_skill_detail_modal(ctx, skill) {
|
|
194
|
+
await show_text_modal(ctx, {
|
|
195
|
+
title: skill.name,
|
|
196
|
+
subtitle: `${skill_status(skill)} • ${skill.source}`,
|
|
197
|
+
text: format_skill_detail(skill),
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
export async function show_skill_list_modal(ctx, mgr) {
|
|
201
|
+
while (true) {
|
|
202
|
+
const skills = sort_skills([
|
|
203
|
+
...mgr.discover(),
|
|
204
|
+
...mgr.discover_importable(),
|
|
205
|
+
]);
|
|
206
|
+
const key = await pick_skill(ctx, {
|
|
207
|
+
title: 'Browse skills',
|
|
208
|
+
subtitle: `${mgr.discover().length} managed • ${mgr.discover_importable().length} importable`,
|
|
209
|
+
skills,
|
|
210
|
+
empty_message: 'No skills found',
|
|
211
|
+
});
|
|
212
|
+
if (!key)
|
|
213
|
+
return;
|
|
214
|
+
await show_skill_detail_modal(ctx, find_skill(skills, key));
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
export async function show_refresh_summary(ctx, mgr) {
|
|
218
|
+
mgr.refresh();
|
|
219
|
+
await show_text_modal(ctx, {
|
|
220
|
+
title: 'Skills refreshed',
|
|
221
|
+
text: `${mgr.discover().length} managed skills\n${mgr.discover_importable().length} importable skills found`,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
export async function show_defaults_modal(ctx, mgr) {
|
|
225
|
+
const selected = await show_picker_modal(ctx, {
|
|
226
|
+
title: 'Skill default policy',
|
|
227
|
+
subtitle: 'Choose how newly discovered skills start',
|
|
228
|
+
items: [
|
|
229
|
+
{
|
|
230
|
+
value: 'all-enabled',
|
|
231
|
+
label: 'All enabled',
|
|
232
|
+
description: 'New skills are enabled by default',
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
value: 'all-disabled',
|
|
236
|
+
label: 'All disabled',
|
|
237
|
+
description: 'New skills require explicit enablement',
|
|
238
|
+
},
|
|
239
|
+
],
|
|
240
|
+
});
|
|
241
|
+
if (!selected)
|
|
242
|
+
return;
|
|
243
|
+
mgr.set_defaults(selected);
|
|
244
|
+
await show_text_modal(ctx, {
|
|
245
|
+
title: 'Skill defaults updated',
|
|
246
|
+
text: `Default policy: ${selected}`,
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
export async function pick_profile(ctx, mgr, title) {
|
|
250
|
+
return await show_picker_modal(ctx, {
|
|
251
|
+
title,
|
|
252
|
+
subtitle: `Active: ${mgr.get_active_profile()}`,
|
|
253
|
+
items: mgr.list_profiles().map((profile) => ({
|
|
254
|
+
value: profile.name,
|
|
255
|
+
label: `${profile.active ? '● ' : '○ '}${profile.name}`,
|
|
256
|
+
description: profile_description(profile),
|
|
257
|
+
})),
|
|
258
|
+
empty_message: 'No skill profiles found',
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
export async function show_profiles_modal(ctx, mgr) {
|
|
262
|
+
while (true) {
|
|
263
|
+
const selected = await show_picker_modal(ctx, {
|
|
264
|
+
title: 'Skill profiles',
|
|
265
|
+
subtitle: `Active: ${mgr.get_active_profile()}`,
|
|
266
|
+
items: [
|
|
267
|
+
{
|
|
268
|
+
value: 'use',
|
|
269
|
+
label: 'Use profile',
|
|
270
|
+
description: 'Switch the active skill profile and reload',
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
value: 'create',
|
|
274
|
+
label: 'Create profile',
|
|
275
|
+
description: 'Create a named skill profile',
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
value: 'include',
|
|
279
|
+
label: 'Add include pattern',
|
|
280
|
+
description: 'Enable matching skills in a profile',
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
value: 'exclude',
|
|
284
|
+
label: 'Add exclude pattern',
|
|
285
|
+
description: 'Disable matching skills in a profile',
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
value: 'show',
|
|
289
|
+
label: 'Show profile details',
|
|
290
|
+
description: 'Inspect include/exclude patterns',
|
|
291
|
+
},
|
|
292
|
+
],
|
|
293
|
+
footer: 'patterns match skill names, keys, sources, or paths; * is supported',
|
|
294
|
+
});
|
|
295
|
+
if (!selected)
|
|
296
|
+
return false;
|
|
297
|
+
if (selected === 'use') {
|
|
298
|
+
const profile = await pick_profile(ctx, mgr, 'Use skill profile');
|
|
299
|
+
if (!profile)
|
|
300
|
+
continue;
|
|
301
|
+
try {
|
|
302
|
+
mgr.use_profile(profile);
|
|
303
|
+
ctx.ui.notify(`Using skill profile ${profile}. Reloading...`, 'info');
|
|
304
|
+
await ctx.reload();
|
|
305
|
+
return true;
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
ctx.ui.notify(error instanceof Error ? error.message : String(error), 'warning');
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
else if (selected === 'create') {
|
|
312
|
+
const name = await show_input_modal(ctx, {
|
|
313
|
+
title: 'Create skill profile',
|
|
314
|
+
label: 'Profile name',
|
|
315
|
+
trim: true,
|
|
316
|
+
});
|
|
317
|
+
if (!name)
|
|
318
|
+
continue;
|
|
319
|
+
try {
|
|
320
|
+
mgr.create_profile(name, { extends: ['default'] });
|
|
321
|
+
await show_text_modal(ctx, {
|
|
322
|
+
title: 'Skill profile created',
|
|
323
|
+
text: `Created ${name}. Use /skills profile use ${name} to activate it.`,
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
catch (error) {
|
|
327
|
+
ctx.ui.notify(error instanceof Error ? error.message : String(error), 'warning');
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
else if (selected === 'include' || selected === 'exclude') {
|
|
331
|
+
const profile = await pick_profile(ctx, mgr, selected === 'include'
|
|
332
|
+
? 'Choose include profile'
|
|
333
|
+
: 'Choose exclude profile');
|
|
334
|
+
if (!profile)
|
|
335
|
+
continue;
|
|
336
|
+
const pattern = await show_input_modal(ctx, {
|
|
337
|
+
title: selected === 'include'
|
|
338
|
+
? 'Add include pattern'
|
|
339
|
+
: 'Add exclude pattern',
|
|
340
|
+
subtitle: `Profile: ${profile}`,
|
|
341
|
+
label: 'Pattern',
|
|
342
|
+
trim: true,
|
|
343
|
+
});
|
|
344
|
+
if (!pattern)
|
|
345
|
+
continue;
|
|
346
|
+
try {
|
|
347
|
+
if (selected === 'include')
|
|
348
|
+
mgr.include_in_profile(profile, pattern);
|
|
349
|
+
else
|
|
350
|
+
mgr.exclude_from_profile(profile, pattern);
|
|
351
|
+
ctx.ui.notify(`Updated ${profile}. Reloading...`, 'info');
|
|
352
|
+
await ctx.reload();
|
|
353
|
+
return true;
|
|
354
|
+
}
|
|
355
|
+
catch (error) {
|
|
356
|
+
ctx.ui.notify(error instanceof Error ? error.message : String(error), 'warning');
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
else if (selected === 'show') {
|
|
360
|
+
const profile_name = await pick_profile(ctx, mgr, 'Show skill profile');
|
|
361
|
+
const profile = mgr
|
|
362
|
+
.list_profiles()
|
|
363
|
+
.find((p) => p.name === profile_name);
|
|
364
|
+
if (!profile)
|
|
365
|
+
continue;
|
|
366
|
+
await show_text_modal(ctx, {
|
|
367
|
+
title: profile.name,
|
|
368
|
+
subtitle: profile_description(profile),
|
|
369
|
+
text: format_profile_detail(profile),
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
//# sourceMappingURL=skills-ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-ui.js","sourceRoot":"","sources":["../src/skills-ui.ts"],"names":[],"mappings":"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"}
|