@spences10/pi-skills 0.0.12 → 0.0.14
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 +27 -1
- package/dist/commands.d.ts +1 -1
- package/dist/commands.js +19 -58
- package/dist/commands.js.map +1 -1
- package/dist/config.d.ts +8 -0
- package/dist/config.js +32 -0
- package/dist/config.js.map +1 -1
- package/dist/importer.js +1 -1
- package/dist/importer.js.map +1 -1
- package/dist/manager.d.ts +5 -1
- package/dist/manager.js +48 -9
- package/dist/manager.js.map +1 -1
- package/dist/scanner.d.ts +4 -1
- package/dist/scanner.js +73 -5
- package/dist/scanner.js.map +1 -1
- package/dist/skill-utils.d.ts +1 -4
- package/dist/skill-utils.js +0 -39
- package/dist/skill-utils.js.map +1 -1
- package/dist/skills-ui.d.ts +2 -1
- package/dist/skills-ui.js +116 -138
- package/dist/skills-ui.js.map +1 -1
- package/package.json +5 -5
package/dist/scanner.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { getAgentDir, parseFrontmatter, } from '@
|
|
2
|
-
import { existsSync, globSync, readFileSync } from 'node:fs';
|
|
1
|
+
import { getAgentDir, parseFrontmatter, } from '@earendil-works/pi-coding-agent';
|
|
2
|
+
import { existsSync, globSync, readFileSync, statSync, } from 'node:fs';
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
|
-
import { basename, dirname, join, resolve } from 'node:path';
|
|
4
|
+
import { basename, dirname, join, parse, resolve } from 'node:path';
|
|
5
5
|
export const IMPORT_METADATA_FILE = '.my-pi-source.json';
|
|
6
6
|
function read_installed_plugins() {
|
|
7
7
|
const path = join(homedir(), '.claude', 'plugins', 'installed_plugins.json');
|
|
@@ -53,6 +53,7 @@ function scan_dir_for_skills(dir, options) {
|
|
|
53
53
|
skillPath: direct,
|
|
54
54
|
baseDir: dir,
|
|
55
55
|
source: options.source,
|
|
56
|
+
scope: options.scope,
|
|
56
57
|
kind: options.kind,
|
|
57
58
|
plugin: options.plugin,
|
|
58
59
|
import_meta: options.kind === 'managed'
|
|
@@ -74,6 +75,7 @@ function scan_dir_for_skills(dir, options) {
|
|
|
74
75
|
skillPath: full_path,
|
|
75
76
|
baseDir: base_dir,
|
|
76
77
|
source: options.source,
|
|
78
|
+
scope: options.scope,
|
|
77
79
|
kind: options.kind,
|
|
78
80
|
plugin: options.plugin,
|
|
79
81
|
import_meta: options.kind === 'managed'
|
|
@@ -103,12 +105,14 @@ export function scan_managed_skills() {
|
|
|
103
105
|
const skills = [];
|
|
104
106
|
for (const skill of scan_dir_for_skills(join(homedir(), '.claude', 'skills'), {
|
|
105
107
|
source: 'user-local',
|
|
108
|
+
scope: 'global',
|
|
106
109
|
kind: 'managed',
|
|
107
110
|
})) {
|
|
108
111
|
skills.push(skill);
|
|
109
112
|
}
|
|
110
113
|
for (const skill of scan_dir_for_skills(join(getAgentDir(), 'skills'), {
|
|
111
114
|
source: 'pi-native',
|
|
115
|
+
scope: 'global',
|
|
112
116
|
kind: 'managed',
|
|
113
117
|
include_direct_root_skill: false,
|
|
114
118
|
})) {
|
|
@@ -116,6 +120,63 @@ export function scan_managed_skills() {
|
|
|
116
120
|
}
|
|
117
121
|
return dedupe_by_skill_path(skills);
|
|
118
122
|
}
|
|
123
|
+
function parent_dir(path) {
|
|
124
|
+
const parsed = parse(path);
|
|
125
|
+
const parent = dirname(path);
|
|
126
|
+
return parent === path || parent === parsed.root ? null : parent;
|
|
127
|
+
}
|
|
128
|
+
function is_directory(path) {
|
|
129
|
+
try {
|
|
130
|
+
return statSync(path).isDirectory();
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
function project_roots(cwd) {
|
|
137
|
+
const roots = [];
|
|
138
|
+
let current = resolve(cwd);
|
|
139
|
+
while (true) {
|
|
140
|
+
roots.push(current);
|
|
141
|
+
if (is_directory(join(current, '.git')))
|
|
142
|
+
break;
|
|
143
|
+
const parent = parent_dir(current);
|
|
144
|
+
if (!parent)
|
|
145
|
+
break;
|
|
146
|
+
current = parent;
|
|
147
|
+
}
|
|
148
|
+
return roots;
|
|
149
|
+
}
|
|
150
|
+
export function scan_project_skills(cwd = process.cwd()) {
|
|
151
|
+
const skills = [];
|
|
152
|
+
for (const root of project_roots(cwd)) {
|
|
153
|
+
for (const skill of scan_dir_for_skills(join(root, '.agents'), {
|
|
154
|
+
source: 'project:.agents',
|
|
155
|
+
scope: 'project',
|
|
156
|
+
kind: 'managed',
|
|
157
|
+
include_direct_root_skill: false,
|
|
158
|
+
})) {
|
|
159
|
+
skills.push(skill);
|
|
160
|
+
}
|
|
161
|
+
for (const skill of scan_dir_for_skills(join(root, '.agents', 'skills'), {
|
|
162
|
+
source: 'project:.agents/skills',
|
|
163
|
+
scope: 'project',
|
|
164
|
+
kind: 'managed',
|
|
165
|
+
include_direct_root_skill: false,
|
|
166
|
+
})) {
|
|
167
|
+
skills.push(skill);
|
|
168
|
+
}
|
|
169
|
+
for (const skill of scan_dir_for_skills(join(root, '.pi', 'skills'), {
|
|
170
|
+
source: 'project:.pi/skills',
|
|
171
|
+
scope: 'project',
|
|
172
|
+
kind: 'managed',
|
|
173
|
+
include_direct_root_skill: false,
|
|
174
|
+
})) {
|
|
175
|
+
skills.push(skill);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return dedupe_by_skill_path(skills);
|
|
179
|
+
}
|
|
119
180
|
export function scan_importable_skills() {
|
|
120
181
|
const skills = [];
|
|
121
182
|
const plugins = read_installed_plugins();
|
|
@@ -134,6 +195,7 @@ export function scan_importable_skills() {
|
|
|
134
195
|
};
|
|
135
196
|
for (const skill of scan_dir_for_skills(join(entry.installPath, 'skills'), {
|
|
136
197
|
source,
|
|
198
|
+
scope: 'plugin',
|
|
137
199
|
kind: 'external',
|
|
138
200
|
plugin,
|
|
139
201
|
})) {
|
|
@@ -141,6 +203,7 @@ export function scan_importable_skills() {
|
|
|
141
203
|
}
|
|
142
204
|
for (const skill of scan_dir_for_skills(join(entry.installPath, '.pi', 'skills'), {
|
|
143
205
|
source,
|
|
206
|
+
scope: 'plugin',
|
|
144
207
|
kind: 'external',
|
|
145
208
|
plugin,
|
|
146
209
|
})) {
|
|
@@ -155,6 +218,7 @@ export function scan_importable_skills() {
|
|
|
155
218
|
skillPath: direct_root_skill,
|
|
156
219
|
baseDir: entry.installPath,
|
|
157
220
|
source,
|
|
221
|
+
scope: 'plugin',
|
|
158
222
|
kind: 'external',
|
|
159
223
|
plugin,
|
|
160
224
|
});
|
|
@@ -163,7 +227,11 @@ export function scan_importable_skills() {
|
|
|
163
227
|
}
|
|
164
228
|
return dedupe_by_skill_path(skills);
|
|
165
229
|
}
|
|
166
|
-
export function scan_all_skills() {
|
|
167
|
-
return [
|
|
230
|
+
export function scan_all_skills(cwd = process.cwd()) {
|
|
231
|
+
return [
|
|
232
|
+
...scan_managed_skills(),
|
|
233
|
+
...scan_project_skills(cwd),
|
|
234
|
+
...scan_importable_skills(),
|
|
235
|
+
];
|
|
168
236
|
}
|
|
169
237
|
//# sourceMappingURL=scanner.js.map
|
package/dist/scanner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,WAAW,EACX,gBAAgB,GAEhB,MAAM
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
|
package/dist/skill-utils.d.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { type SettingItem } from '@
|
|
1
|
+
import { type SettingItem } from '@earendil-works/pi-tui';
|
|
2
2
|
import type { ManagedSkill, SkillProfile } from './manager.js';
|
|
3
3
|
export declare const ENABLED = "\u25CF enabled";
|
|
4
4
|
export declare const DISABLED = "\u25CB disabled";
|
|
5
|
-
export declare const SYNC = "\u21BB sync";
|
|
6
|
-
export declare const IMPORTED_LABEL = "\u2713 imported";
|
|
7
5
|
export interface ImportableSkillState {
|
|
8
6
|
label: string;
|
|
9
7
|
detail: string;
|
|
@@ -13,7 +11,6 @@ export declare function sort_skills(skills: ManagedSkill[]): ManagedSkill[];
|
|
|
13
11
|
export declare function find_matching_imported_skill(managed_skills: ManagedSkill[], skill: ManagedSkill): ManagedSkill | undefined;
|
|
14
12
|
export declare function get_importable_state(managed_skills: ManagedSkill[], skill: ManagedSkill): ImportableSkillState;
|
|
15
13
|
export declare function to_setting_item(skill: ManagedSkill): SettingItem;
|
|
16
|
-
export declare function to_importable_setting_item(managed_skills: ManagedSkill[], skill: ManagedSkill): SettingItem;
|
|
17
14
|
export declare function sets_equal(a: ReadonlySet<string>, b: ReadonlySet<string>): boolean;
|
|
18
15
|
export declare function skill_status(skill: ManagedSkill): string;
|
|
19
16
|
export declare function format_skill_detail(skill: ManagedSkill): string;
|
package/dist/skill-utils.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
export const ENABLED = '● enabled';
|
|
2
2
|
export const DISABLED = '○ disabled';
|
|
3
|
-
export const SYNC = '↻ sync';
|
|
4
|
-
export const IMPORTED_LABEL = '✓ imported';
|
|
5
3
|
export function sort_skills(skills) {
|
|
6
4
|
return [...skills].sort((a, b) => {
|
|
7
5
|
const by_name = a.name.localeCompare(b.name);
|
|
@@ -77,43 +75,6 @@ export function to_setting_item(skill) {
|
|
|
77
75
|
values: [ENABLED, DISABLED],
|
|
78
76
|
};
|
|
79
77
|
}
|
|
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
78
|
export function sets_equal(a, b) {
|
|
118
79
|
if (a.size !== b.size)
|
|
119
80
|
return false;
|
package/dist/skill-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-utils.js","sourceRoot":"","sources":["../src/skill-utils.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC;AACnC,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"skill-utils.js","sourceRoot":"","sources":["../src/skill-utils.ts"],"names":[],"mappings":"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"}
|
package/dist/skills-ui.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type { ExtensionCommandContext } from '@
|
|
1
|
+
import type { ExtensionCommandContext } from '@earendil-works/pi-coding-agent';
|
|
2
2
|
import type { ManagedSkill, SkillsManager } from './manager.js';
|
|
3
3
|
export declare function show_skills_home_modal(ctx: ExtensionCommandContext, managed_count: number, importable_count: number, active_profile: string): Promise<string | undefined>;
|
|
4
4
|
export declare function show_skills_manager_modal(ctx: ExtensionCommandContext, mgr: SkillsManager): Promise<boolean>;
|
|
5
|
+
export declare function show_importable_skills_modal(ctx: ExtensionCommandContext, mgr: SkillsManager): Promise<boolean>;
|
|
5
6
|
export declare function pick_skill(ctx: ExtensionCommandContext, options: {
|
|
6
7
|
title: string;
|
|
7
8
|
subtitle: string;
|
package/dist/skills-ui.js
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
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,
|
|
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_setting_item, } from './skill-utils.js';
|
|
3
|
+
function importable_action_label(state) {
|
|
4
|
+
if (state.action === 'import')
|
|
5
|
+
return 'Import';
|
|
6
|
+
if (state.action === 'sync')
|
|
7
|
+
return 'Sync available';
|
|
8
|
+
return state.label === 'managed'
|
|
9
|
+
? 'Already managed'
|
|
10
|
+
: 'Already imported';
|
|
11
|
+
}
|
|
3
12
|
export async function show_skills_home_modal(ctx, managed_count, importable_count, active_profile) {
|
|
4
13
|
return await show_picker_modal(ctx, {
|
|
5
14
|
title: 'Skills',
|
|
@@ -8,175 +17,136 @@ export async function show_skills_home_modal(ctx, managed_count, importable_coun
|
|
|
8
17
|
{
|
|
9
18
|
value: 'manage',
|
|
10
19
|
label: 'Manage skills',
|
|
11
|
-
description: '
|
|
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',
|
|
20
|
+
description: 'Search and enable/disable managed skills',
|
|
22
21
|
},
|
|
23
22
|
{
|
|
24
|
-
value: '
|
|
25
|
-
label: '
|
|
26
|
-
description: '
|
|
23
|
+
value: 'importable',
|
|
24
|
+
label: 'Importable skills',
|
|
25
|
+
description: 'Import external skills or sync imported copies',
|
|
27
26
|
},
|
|
28
27
|
{
|
|
29
28
|
value: 'profiles',
|
|
30
29
|
label: 'Profiles',
|
|
31
|
-
description: '
|
|
30
|
+
description: 'Switch profiles and edit profile rules',
|
|
32
31
|
},
|
|
33
32
|
{
|
|
34
33
|
value: 'refresh',
|
|
35
34
|
label: 'Refresh discovery',
|
|
36
35
|
description: 'Rescan managed and importable skills',
|
|
37
36
|
},
|
|
38
|
-
{
|
|
39
|
-
value: 'defaults',
|
|
40
|
-
label: 'Profile baseline',
|
|
41
|
-
description: 'Choose whether this profile starts enabled or disabled',
|
|
42
|
-
},
|
|
43
37
|
],
|
|
44
38
|
footer: 'enter opens • esc close/back',
|
|
45
39
|
});
|
|
46
40
|
}
|
|
47
41
|
export async function show_skills_manager_modal(ctx, mgr) {
|
|
48
42
|
const discovered = sort_skills(mgr.discover());
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
ctx.ui.notify('No managed or importable skills found');
|
|
43
|
+
if (discovered.length === 0) {
|
|
44
|
+
ctx.ui.notify('No managed skills found');
|
|
52
45
|
return false;
|
|
53
46
|
}
|
|
54
47
|
const initial_enabled = new Set(discovered
|
|
55
48
|
.filter((skill) => skill.enabled)
|
|
56
49
|
.map((skill) => skill.key));
|
|
57
50
|
const current_enabled = new Set(initial_enabled);
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
const
|
|
61
|
-
|
|
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]));
|
|
51
|
+
const items = discovered.map(to_setting_item);
|
|
52
|
+
const metadata_by_id = new Map(items.map((item) => [item.id, item.description ?? '']));
|
|
53
|
+
for (const item of items)
|
|
54
|
+
item.description = '';
|
|
88
55
|
await show_settings_modal(ctx, {
|
|
89
|
-
title: '
|
|
56
|
+
title: 'Manage skills',
|
|
90
57
|
subtitle: () => {
|
|
91
58
|
const enabled = current_enabled.size;
|
|
92
59
|
const disabled = discovered.length - enabled;
|
|
93
|
-
|
|
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(' • ');
|
|
60
|
+
return `profile ${mgr.get_active_profile()} • ${enabled} enabled • ${disabled} disabled`;
|
|
104
61
|
},
|
|
105
|
-
items
|
|
106
|
-
max_visible: Math.min(Math.max(
|
|
62
|
+
items,
|
|
63
|
+
max_visible: Math.min(Math.max(items.length + 4, 8), 12),
|
|
107
64
|
enable_search: true,
|
|
108
65
|
metadata: (item) => item ? metadata_by_id.get(item.id)?.split('\n') : undefined,
|
|
109
66
|
on_change: (id, new_value) => {
|
|
110
|
-
if (
|
|
111
|
-
|
|
112
|
-
|
|
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;
|
|
67
|
+
if (new_value === ENABLED) {
|
|
68
|
+
current_enabled.add(id);
|
|
69
|
+
mgr.enable(id);
|
|
122
70
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
71
|
+
else {
|
|
72
|
+
current_enabled.delete(id);
|
|
73
|
+
mgr.disable(id);
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
if (!sets_equal(initial_enabled, current_enabled)) {
|
|
78
|
+
ctx.ui.notify('Reloading to apply updated skills...', 'info');
|
|
79
|
+
await ctx.reload();
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
export async function show_importable_skills_modal(ctx, mgr) {
|
|
85
|
+
while (true) {
|
|
86
|
+
const managed = sort_skills(mgr.discover());
|
|
87
|
+
const importable = sort_skills(mgr.discover_importable());
|
|
88
|
+
if (importable.length === 0) {
|
|
89
|
+
ctx.ui.notify('No importable skills found');
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
const selected = await show_picker_modal(ctx, {
|
|
93
|
+
title: 'Importable skills',
|
|
94
|
+
subtitle: `${importable.length} external skills • enter imports or syncs`,
|
|
95
|
+
items: importable.map((skill) => {
|
|
96
|
+
const state = get_importable_state(managed, skill);
|
|
97
|
+
return {
|
|
98
|
+
value: skill.key,
|
|
99
|
+
label: skill.name,
|
|
100
|
+
description: `${importable_action_label(state)} • ${skill.source} • ${skill.key}`,
|
|
101
|
+
};
|
|
102
|
+
}),
|
|
103
|
+
empty_message: 'No importable skills found',
|
|
104
|
+
});
|
|
105
|
+
if (!selected)
|
|
106
|
+
return false;
|
|
107
|
+
const skill = find_skill(importable, selected);
|
|
108
|
+
const state = get_importable_state(managed, skill);
|
|
109
|
+
if (state.action === 'import') {
|
|
110
|
+
try {
|
|
111
|
+
const result = mgr.import_skill(skill.key);
|
|
112
|
+
ctx.ui.notify(`Imported ${skill.name} to ${result.skillDir}. Reloading...`, 'info');
|
|
113
|
+
await ctx.reload();
|
|
114
|
+
return true;
|
|
133
115
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
116
|
+
catch (error) {
|
|
117
|
+
ctx.ui.notify(error instanceof Error ? error.message : String(error), 'warning');
|
|
118
|
+
}
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
if (state.action === 'sync') {
|
|
122
|
+
const imported_skill = find_matching_imported_skill(managed, skill);
|
|
137
123
|
if (!imported_skill) {
|
|
138
|
-
ctx.ui.notify(`Imported copy for ${
|
|
139
|
-
|
|
124
|
+
ctx.ui.notify(`Imported copy for ${skill.name} was not found`, 'warning');
|
|
125
|
+
continue;
|
|
140
126
|
}
|
|
141
127
|
try {
|
|
142
128
|
const result = mgr.sync_skill(imported_skill.key);
|
|
143
129
|
if (result.changed) {
|
|
144
|
-
|
|
130
|
+
ctx.ui.notify(`Synced ${skill.name}. Reloading...`, 'info');
|
|
131
|
+
await ctx.reload();
|
|
145
132
|
return true;
|
|
146
133
|
}
|
|
147
|
-
ctx
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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);
|
|
134
|
+
await show_text_modal(ctx, {
|
|
135
|
+
title: 'Skill already up to date',
|
|
136
|
+
text: `${skill.name} is already up to date.`,
|
|
137
|
+
});
|
|
160
138
|
}
|
|
161
139
|
catch (error) {
|
|
162
140
|
ctx.ui.notify(error instanceof Error ? error.message : String(error), 'warning');
|
|
163
141
|
}
|
|
142
|
+
continue;
|
|
164
143
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
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;
|
|
144
|
+
await show_text_modal(ctx, {
|
|
145
|
+
title: skill.name,
|
|
146
|
+
subtitle: importable_action_label(state),
|
|
147
|
+
text: state.detail,
|
|
148
|
+
});
|
|
178
149
|
}
|
|
179
|
-
return false;
|
|
180
150
|
}
|
|
181
151
|
export async function pick_skill(ctx, options) {
|
|
182
152
|
return await show_picker_modal(ctx, {
|
|
@@ -223,18 +193,18 @@ export async function show_refresh_summary(ctx, mgr) {
|
|
|
223
193
|
}
|
|
224
194
|
export async function show_defaults_modal(ctx, mgr) {
|
|
225
195
|
const selected = await show_picker_modal(ctx, {
|
|
226
|
-
title: '
|
|
196
|
+
title: 'Default skill policy',
|
|
227
197
|
subtitle: `Active profile: ${mgr.get_active_profile()}`,
|
|
228
198
|
items: [
|
|
229
199
|
{
|
|
230
200
|
value: 'all-enabled',
|
|
231
|
-
label: '
|
|
232
|
-
description: '
|
|
201
|
+
label: 'Enable by default',
|
|
202
|
+
description: 'Start with matching skills enabled; exclude rules turn skills off',
|
|
233
203
|
},
|
|
234
204
|
{
|
|
235
205
|
value: 'all-disabled',
|
|
236
|
-
label: '
|
|
237
|
-
description: '
|
|
206
|
+
label: 'Disable by default',
|
|
207
|
+
description: 'Start with skills disabled; include rules turn skills on',
|
|
238
208
|
},
|
|
239
209
|
],
|
|
240
210
|
});
|
|
@@ -242,8 +212,8 @@ export async function show_defaults_modal(ctx, mgr) {
|
|
|
242
212
|
return;
|
|
243
213
|
mgr.set_defaults(selected);
|
|
244
214
|
await show_text_modal(ctx, {
|
|
245
|
-
title: '
|
|
246
|
-
text: `Active profile
|
|
215
|
+
title: 'Default skill policy updated',
|
|
216
|
+
text: `Active profile now starts from: ${selected}`,
|
|
247
217
|
});
|
|
248
218
|
}
|
|
249
219
|
export async function pick_profile(ctx, mgr, title) {
|
|
@@ -276,13 +246,18 @@ export async function show_profiles_modal(ctx, mgr) {
|
|
|
276
246
|
},
|
|
277
247
|
{
|
|
278
248
|
value: 'include',
|
|
279
|
-
label: '
|
|
280
|
-
description: '
|
|
249
|
+
label: 'Add include rule',
|
|
250
|
+
description: 'Turn on skills that match a profile pattern',
|
|
281
251
|
},
|
|
282
252
|
{
|
|
283
253
|
value: 'exclude',
|
|
284
|
-
label: '
|
|
285
|
-
description: '
|
|
254
|
+
label: 'Add exclude rule',
|
|
255
|
+
description: 'Turn off skills that match a profile pattern',
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
value: 'defaults',
|
|
259
|
+
label: 'Default skill policy',
|
|
260
|
+
description: 'Choose the profile starting point before rules apply',
|
|
286
261
|
},
|
|
287
262
|
{
|
|
288
263
|
value: 'show',
|
|
@@ -329,14 +304,14 @@ export async function show_profiles_modal(ctx, mgr) {
|
|
|
329
304
|
}
|
|
330
305
|
else if (selected === 'include' || selected === 'exclude') {
|
|
331
306
|
const profile = await pick_profile(ctx, mgr, selected === 'include'
|
|
332
|
-
? 'Choose
|
|
333
|
-
: 'Choose
|
|
307
|
+
? 'Choose profile for include rule'
|
|
308
|
+
: 'Choose profile for exclude rule');
|
|
334
309
|
if (!profile)
|
|
335
310
|
continue;
|
|
336
311
|
const pattern = await show_input_modal(ctx, {
|
|
337
312
|
title: selected === 'include'
|
|
338
|
-
? '
|
|
339
|
-
: '
|
|
313
|
+
? 'Add include rule'
|
|
314
|
+
: 'Add exclude rule',
|
|
340
315
|
subtitle: `Profile: ${profile}`,
|
|
341
316
|
label: 'Skill name, key, or pattern',
|
|
342
317
|
trim: true,
|
|
@@ -356,6 +331,9 @@ export async function show_profiles_modal(ctx, mgr) {
|
|
|
356
331
|
ctx.ui.notify(error instanceof Error ? error.message : String(error), 'warning');
|
|
357
332
|
}
|
|
358
333
|
}
|
|
334
|
+
else if (selected === 'defaults') {
|
|
335
|
+
await show_defaults_modal(ctx, mgr);
|
|
336
|
+
}
|
|
359
337
|
else if (selected === 'show') {
|
|
360
338
|
const profile_name = await pick_profile(ctx, mgr, 'Show skill profile');
|
|
361
339
|
const profile = mgr
|