@spences10/pi-skills 0.0.30 → 0.0.32

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 (40) hide show
  1. package/dist/commands.js.map +1 -1
  2. package/dist/gh-skill.js.map +1 -1
  3. package/dist/manager.js.map +1 -1
  4. package/package.json +4 -4
  5. package/dist/commands/github-handlers.d.ts +0 -4
  6. package/dist/commands/github-handlers.js +0 -127
  7. package/dist/commands/github-handlers.js.map +0 -1
  8. package/dist/commands/handler.d.ts +0 -2
  9. package/dist/commands/handler.js +0 -56
  10. package/dist/commands/handler.js.map +0 -1
  11. package/dist/commands/home-handler.d.ts +0 -2
  12. package/dist/commands/home-handler.js +0 -38
  13. package/dist/commands/home-handler.js.map +0 -1
  14. package/dist/commands/profile-handlers.d.ts +0 -2
  15. package/dist/commands/profile-handlers.js +0 -117
  16. package/dist/commands/profile-handlers.js.map +0 -1
  17. package/dist/commands/skill-handlers.d.ts +0 -8
  18. package/dist/commands/skill-handlers.js +0 -184
  19. package/dist/commands/skill-handlers.js.map +0 -1
  20. package/dist/commands/types.d.ts +0 -13
  21. package/dist/commands/types.js +0 -2
  22. package/dist/commands/types.js.map +0 -1
  23. package/dist/importer.d.ts +0 -17
  24. package/dist/importer.js +0 -201
  25. package/dist/importer.js.map +0 -1
  26. package/dist/manager/discovery.d.ts +0 -19
  27. package/dist/manager/discovery.js +0 -101
  28. package/dist/manager/discovery.js.map +0 -1
  29. package/dist/manager/import-management.d.ts +0 -11
  30. package/dist/manager/import-management.js +0 -28
  31. package/dist/manager/import-management.js.map +0 -1
  32. package/dist/manager/profile.d.ts +0 -29
  33. package/dist/manager/profile.js +0 -214
  34. package/dist/manager/profile.js.map +0 -1
  35. package/dist/skills-ui/importable.d.ts +0 -3
  36. package/dist/skills-ui/importable.js +0 -91
  37. package/dist/skills-ui/importable.js.map +0 -1
  38. package/dist/skills-ui/progress.d.ts +0 -13
  39. package/dist/skills-ui/progress.js +0 -120
  40. package/dist/skills-ui/progress.js.map +0 -1
@@ -1,214 +0,0 @@
1
- import { resolve } from 'node:path';
2
- import { is_skill_enabled, make_skill_key, safe_profile_name, save_skills_config, } from '../config.js';
3
- export const SKILLS_PROFILE_ENV = 'MY_PI_SKILLS_PROFILE';
4
- function normalize_extends(value) {
5
- if (!value)
6
- return [];
7
- return Array.isArray(value) ? value : [value];
8
- }
9
- function unique_push(values, value) {
10
- if (!values.includes(value))
11
- values.push(value);
12
- }
13
- function remove_value(values, value) {
14
- return (values ?? []).filter((item) => item !== value);
15
- }
16
- function escape_regex(value) {
17
- return value.replace(/[|\\{}()[\]^$+?.]/g, '\\$&');
18
- }
19
- function normalize_match_path(value) {
20
- if (value.startsWith('~/')) {
21
- return resolve(process.env.HOME ?? '', value.slice(2));
22
- }
23
- return value;
24
- }
25
- export function glob_matches(pattern, value) {
26
- const regex = new RegExp(`^${normalize_match_path(pattern).split('*').map(escape_regex).join('.*')}$`, 'i');
27
- return regex.test(normalize_match_path(value));
28
- }
29
- function profile_pattern_matches(pattern, skill) {
30
- const key = make_skill_key(skill.name, skill.source);
31
- return [
32
- key,
33
- skill.name,
34
- skill.source,
35
- skill.skillPath,
36
- skill.baseDir,
37
- ].some((value) => glob_matches(pattern, value));
38
- }
39
- export function require_profile_name(name) {
40
- const normalized = safe_profile_name(name);
41
- if (!normalized)
42
- throw new Error(`Invalid skill profile name: ${name}`);
43
- return normalized;
44
- }
45
- function context_cwd_values(rule) {
46
- const value = rule.when.cwd;
47
- if (!value)
48
- return [];
49
- return Array.isArray(value) ? value : [value];
50
- }
51
- export function create_profile_ops(get_config, get_cwd, get_project_skills_enabled) {
52
- function get_active_profile() {
53
- const config = get_config();
54
- const from_env = process.env[SKILLS_PROFILE_ENV]?.trim();
55
- if (from_env)
56
- return require_profile_name(from_env);
57
- for (const context of config.contexts) {
58
- if (!config.profiles[context.profile])
59
- continue;
60
- if (context_cwd_values(context).some((pattern) => glob_matches(pattern, get_cwd()))) {
61
- return context.profile;
62
- }
63
- }
64
- return config.current_profile ?? 'default';
65
- }
66
- function resolve_profile_rules(name, seen = new Set()) {
67
- const config = get_config();
68
- const profile = config.profiles[name];
69
- if (!profile || seen.has(name))
70
- return [];
71
- seen.add(name);
72
- const rules = [];
73
- for (const parent of normalize_extends(profile.extends)) {
74
- rules.push(...resolve_profile_rules(parent, seen));
75
- }
76
- for (const pattern of profile.include ?? []) {
77
- rules.push({ pattern, enabled: true });
78
- }
79
- for (const pattern of profile.exclude ?? []) {
80
- rules.push({ pattern, enabled: false });
81
- }
82
- return rules;
83
- }
84
- function apply_profile_rules(initial, skill) {
85
- let enabled = initial;
86
- for (const rule of resolve_profile_rules(get_active_profile())) {
87
- if (profile_pattern_matches(rule.pattern, skill)) {
88
- enabled = rule.enabled;
89
- }
90
- }
91
- return enabled;
92
- }
93
- function is_effectively_enabled(skill) {
94
- const config = get_config();
95
- if (skill.scope === 'project' && !get_project_skills_enabled())
96
- return false;
97
- const initial = skill.scope === 'project'
98
- ? true
99
- : is_skill_enabled(config, make_skill_key(skill.name, skill.source));
100
- return apply_profile_rules(initial, skill);
101
- }
102
- function get_or_create_profile(name) {
103
- const config = get_config();
104
- const normalized = require_profile_name(name);
105
- config.profiles[normalized] ??= {};
106
- return config.profiles[normalized];
107
- }
108
- function to_profile(name) {
109
- const config = get_config();
110
- const profile = config.profiles[name] ?? {};
111
- const result = {
112
- name,
113
- extends: normalize_extends(profile.extends),
114
- include: [...(profile.include ?? [])],
115
- exclude: [...(profile.exclude ?? [])],
116
- active: name === get_active_profile(),
117
- };
118
- if (profile.description)
119
- result.description = profile.description;
120
- return result;
121
- }
122
- function set_profile_skill_enabled(key, enabled) {
123
- const config = get_config();
124
- const profile = get_or_create_profile(get_active_profile());
125
- if (enabled) {
126
- profile.exclude = remove_value(profile.exclude, key);
127
- profile.include ??= [];
128
- unique_push(profile.include, key);
129
- }
130
- else {
131
- profile.include = remove_value(profile.include, key);
132
- profile.exclude ??= [];
133
- unique_push(profile.exclude, key);
134
- }
135
- save_skills_config(config);
136
- return enabled;
137
- }
138
- function set_defaults(policy) {
139
- const config = get_config();
140
- const profile = get_or_create_profile(get_active_profile());
141
- profile.include = remove_value(profile.include, '*');
142
- profile.exclude = remove_value(profile.exclude, '*');
143
- if (policy === 'all-enabled') {
144
- profile.include ??= [];
145
- profile.include.unshift('*');
146
- }
147
- config.defaults = 'all-disabled';
148
- save_skills_config(config);
149
- }
150
- function include_in_profile(profile_name, pattern) {
151
- const config = get_config();
152
- const profile = get_or_create_profile(profile_name);
153
- const normalized = pattern.trim();
154
- if (!normalized)
155
- throw new Error('Profile pattern is required');
156
- profile.exclude = remove_value(profile.exclude, normalized);
157
- profile.include ??= [];
158
- unique_push(profile.include, normalized);
159
- save_skills_config(config);
160
- }
161
- function exclude_from_profile(profile_name, pattern) {
162
- const config = get_config();
163
- const profile = get_or_create_profile(profile_name);
164
- const normalized = pattern.trim();
165
- if (!normalized)
166
- throw new Error('Profile pattern is required');
167
- profile.include = remove_value(profile.include, normalized);
168
- profile.exclude ??= [];
169
- unique_push(profile.exclude, normalized);
170
- save_skills_config(config);
171
- }
172
- return {
173
- get_active_profile,
174
- is_effectively_enabled,
175
- set_profile_skill_enabled,
176
- set_defaults,
177
- list_profiles() {
178
- return Object.keys(get_config().profiles)
179
- .sort((a, b) => a.localeCompare(b))
180
- .map(to_profile);
181
- },
182
- use_profile(name) {
183
- const config = get_config();
184
- const normalized = require_profile_name(name);
185
- if (!config.profiles[normalized]) {
186
- throw new Error(`Unknown skill profile: ${normalized}`);
187
- }
188
- config.current_profile = normalized;
189
- save_skills_config(config);
190
- },
191
- create_profile(name, options = {}) {
192
- const config = get_config();
193
- const normalized = require_profile_name(name);
194
- if (config.profiles[normalized]) {
195
- throw new Error(`Skill profile already exists: ${normalized}`);
196
- }
197
- const profile = {
198
- include: [],
199
- exclude: [],
200
- };
201
- if (options.description)
202
- profile.description = options.description;
203
- if (options.extends?.length)
204
- profile.extends = options.extends;
205
- config.profiles[normalized] = profile;
206
- save_skills_config(config);
207
- return to_profile(normalized);
208
- },
209
- include_in_profile,
210
- exclude_from_profile,
211
- apply_profile_rules,
212
- };
213
- }
214
- //# sourceMappingURL=profile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/manager/profile.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
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>;
@@ -1,91 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"importable.js","sourceRoot":"","sources":["../../src/skills-ui/importable.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- import type { ExtensionCommandContext } from '@earendil-works/pi-coding-agent';
2
- export interface SkillProgressUpdate {
3
- message?: string;
4
- current?: string;
5
- completed?: number;
6
- total?: number;
7
- line?: string;
8
- }
9
- export interface SkillProgressController {
10
- signal: AbortSignal;
11
- update: (update: SkillProgressUpdate) => void;
12
- }
13
- export declare function run_with_skill_progress<T>(ctx: ExtensionCommandContext, title: string, message: string, task: (controller: SkillProgressController) => Promise<T>): Promise<T | undefined>;
@@ -1,120 +0,0 @@
1
- import { Key, matchesKey, truncateToWidth, } from '@earendil-works/pi-tui';
2
- class SkillProgressOverlay {
3
- tui;
4
- theme;
5
- state;
6
- on_cancel;
7
- frame = 0;
8
- frames = [
9
- '⠋',
10
- '⠙',
11
- '⠹',
12
- '⠸',
13
- '⠼',
14
- '⠴',
15
- '⠦',
16
- '⠧',
17
- '⠇',
18
- '⠏',
19
- ];
20
- interval;
21
- constructor(tui, theme, state, on_cancel) {
22
- this.tui = tui;
23
- this.theme = theme;
24
- this.state = state;
25
- this.on_cancel = on_cancel;
26
- this.interval = setInterval(() => {
27
- this.frame = (this.frame + 1) % this.frames.length;
28
- this.tui.requestRender();
29
- }, 120);
30
- }
31
- render(width) {
32
- const spinner = this.theme.fg('accent', this.frames[this.frame] ?? '•');
33
- const count = this.state.total !== undefined &&
34
- this.state.completed !== undefined
35
- ? this.theme.fg('dim', ` ${this.state.completed}/${this.state.total}`)
36
- : '';
37
- const lines = [
38
- this.theme.fg('accent', this.theme.bold(this.state.title)),
39
- `${spinner} ${this.state.message}${count}`,
40
- ];
41
- if (this.state.current) {
42
- lines.push(this.theme.fg('muted', `Current: ${this.state.current}`));
43
- }
44
- if (this.state.lines.length > 0) {
45
- lines.push('', this.theme.fg('dim', 'Recent activity'));
46
- lines.push(...this.state.lines.slice(-8));
47
- }
48
- lines.push('', this.theme.fg('dim', 'esc cancel'));
49
- return lines.map((line) => truncateToWidth(line, width));
50
- }
51
- handleInput(data) {
52
- if (matchesKey(data, Key.escape))
53
- this.on_cancel();
54
- }
55
- invalidate() { }
56
- dispose() {
57
- clearInterval(this.interval);
58
- }
59
- }
60
- export async function run_with_skill_progress(ctx, title, message, task) {
61
- const result = await ctx.ui.custom((tui, theme, _kb, done) => {
62
- const abort_controller = new AbortController();
63
- const state = {
64
- title,
65
- message,
66
- lines: [],
67
- cancelled: false,
68
- };
69
- const update = (update) => {
70
- if (update.message !== undefined)
71
- state.message = update.message;
72
- if (update.current !== undefined)
73
- state.current = update.current;
74
- if (update.completed !== undefined)
75
- state.completed = update.completed;
76
- if (update.total !== undefined)
77
- state.total = update.total;
78
- if (update.line)
79
- state.lines.push(update.line);
80
- tui.requestRender();
81
- };
82
- const component = new SkillProgressOverlay(tui, theme, state, () => {
83
- if (state.cancelled)
84
- return;
85
- state.cancelled = true;
86
- state.message = 'Cancelling...';
87
- abort_controller.abort();
88
- tui.requestRender();
89
- });
90
- void task({ signal: abort_controller.signal, update })
91
- .then((value) => {
92
- done(state.cancelled
93
- ? { status: 'cancelled' }
94
- : { status: 'success', value });
95
- })
96
- .catch((error) => {
97
- if (state.cancelled || abort_controller.signal.aborted) {
98
- done({ status: 'cancelled' });
99
- return;
100
- }
101
- done({ status: 'error', error });
102
- });
103
- return component;
104
- }, {
105
- overlay: true,
106
- overlayOptions: {
107
- width: '70%',
108
- minWidth: 50,
109
- maxHeight: '70%',
110
- },
111
- });
112
- if (result.status === 'cancelled') {
113
- ctx.ui.notify('Cancelled', 'info');
114
- return undefined;
115
- }
116
- if (result.status === 'error')
117
- throw result.error;
118
- return result.value;
119
- }
120
- //# sourceMappingURL=progress.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/skills-ui/progress.ts"],"names":[],"mappings":"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"}