@spences10/pi-skills 0.0.19 → 0.0.21
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 +18 -32
- package/dist/commands/completions.d.ts +8 -0
- package/dist/commands/completions.js +68 -0
- package/dist/commands/completions.js.map +1 -0
- package/dist/commands/github-handlers.d.ts +4 -0
- package/dist/commands/github-handlers.js +127 -0
- package/dist/commands/github-handlers.js.map +1 -0
- package/dist/commands/handler.d.ts +2 -0
- package/dist/commands/handler.js +56 -0
- package/dist/commands/handler.js.map +1 -0
- package/dist/commands/home-handler.d.ts +2 -0
- package/dist/commands/home-handler.js +38 -0
- package/dist/commands/home-handler.js.map +1 -0
- package/dist/commands/profile-handlers.d.ts +2 -0
- package/dist/commands/profile-handlers.js +117 -0
- package/dist/commands/profile-handlers.js.map +1 -0
- package/dist/commands/skill-handlers.d.ts +8 -0
- package/dist/commands/skill-handlers.js +184 -0
- package/dist/commands/skill-handlers.js.map +1 -0
- package/dist/commands/types.d.ts +13 -0
- package/dist/commands/types.js +2 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/commands.js +91 -227
- package/dist/commands.js.map +1 -1
- package/dist/gh-skill.d.ts +16 -0
- package/dist/gh-skill.js +52 -0
- package/dist/gh-skill.js.map +1 -1
- package/dist/importer.d.ts +4 -0
- package/dist/importer.js +21 -0
- package/dist/importer.js.map +1 -1
- package/dist/manager/discovery.d.ts +19 -0
- package/dist/manager/discovery.js +101 -0
- package/dist/manager/discovery.js.map +1 -0
- package/dist/manager/import-management.d.ts +11 -0
- package/dist/manager/import-management.js +28 -0
- package/dist/manager/import-management.js.map +1 -0
- package/dist/manager/profile.d.ts +29 -0
- package/dist/manager/profile.js +214 -0
- package/dist/manager/profile.js.map +1 -0
- package/dist/manager.d.ts +4 -7
- package/dist/manager.js +35 -36
- package/dist/manager.js.map +1 -1
- package/dist/resource-discovery.d.ts +1 -0
- package/dist/resource-discovery.js +7 -0
- package/dist/resource-discovery.js.map +1 -0
- package/dist/scanner.d.ts +2 -33
- package/dist/scanner.js +7 -108
- package/dist/scanner.js.map +1 -1
- package/dist/skill-utils.d.ts +0 -7
- package/dist/skill-utils.js +10 -89
- package/dist/skill-utils.js.map +1 -1
- package/dist/skills-ui/github.d.ts +1 -0
- package/dist/skills-ui/github.js +128 -2
- package/dist/skills-ui/github.js.map +1 -1
- package/dist/skills-ui/home.d.ts +5 -1
- package/dist/skills-ui/home.js +7 -7
- package/dist/skills-ui/home.js.map +1 -1
- package/dist/skills-ui/manage.js +33 -5
- package/dist/skills-ui/manage.js.map +1 -1
- package/dist/skills-ui/profiles.js +1 -1
- package/dist/skills-ui/profiles.js.map +1 -1
- package/dist/skills-ui/skill-list.js +2 -5
- package/dist/skills-ui/skill-list.js.map +1 -1
- package/dist/skills-ui.d.ts +1 -2
- package/dist/skills-ui.js +1 -2
- package/dist/skills-ui.js.map +1 -1
- package/package.json +6 -4
package/README.md
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
[](https://viteplus.dev)
|
|
5
5
|
[](https://vitest.dev)
|
|
6
6
|
|
|
7
|
-
Pi extension for managing and
|
|
8
|
-
|
|
7
|
+
Pi extension for managing, discovering, and installing Agent Skills
|
|
8
|
+
for Pi.
|
|
9
9
|
|
|
10
10
|
Maintained in the `my-pi` Vite+ workspace and tested with Vitest.
|
|
11
11
|
|
|
@@ -27,33 +27,21 @@ pi -e ./packages/pi-skills
|
|
|
27
27
|
## What it does
|
|
28
28
|
|
|
29
29
|
Pi already has native skill discovery. This package adds a management
|
|
30
|
-
layer for
|
|
30
|
+
layer for Pi skill ecosystems:
|
|
31
31
|
|
|
32
32
|
- discovers Pi-native skills in `$PI_CODING_AGENT_DIR/skills`
|
|
33
33
|
(default: `~/.pi/agent/skills`)
|
|
34
|
-
- discovers user-local Claude skills in `~/.claude/skills`
|
|
35
34
|
- discovers project skills in `.agents/*/SKILL.md`,
|
|
36
35
|
`.agents/skills/*/SKILL.md`, and `.pi/skills/*/SKILL.md`
|
|
37
|
-
-
|
|
38
|
-
-
|
|
36
|
+
- searches public GitHub `SKILL.md` files through `gh skill search`
|
|
37
|
+
- previews GitHub-hosted skills through `gh skill preview`
|
|
39
38
|
- installs GitHub-hosted skills through `gh skill` when GitHub CLI
|
|
40
39
|
support is available
|
|
41
|
-
- syncs imported skills when upstream plugin content changes
|
|
42
40
|
- checks or applies GitHub skill updates through `gh skill update`
|
|
43
41
|
- provides a `/skills` command and interactive picker
|
|
44
42
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
```text
|
|
48
|
-
$PI_CODING_AGENT_DIR/skills/<skill-name>
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
The `~/.claude` locations are intentional upstream discovery sources,
|
|
52
|
-
not Pi-managed state. Use `--no-skills` or `--untrusted` when sandbox
|
|
53
|
-
runs must not read user-local Claude skills/plugins.
|
|
54
|
-
|
|
55
|
-
Import metadata is stored beside each imported skill so sync can
|
|
56
|
-
detect local edits and upstream changes.
|
|
43
|
+
External source import/sync behavior lives in
|
|
44
|
+
`@spences10/pi-skill-importer`.
|
|
57
45
|
|
|
58
46
|
## Commands
|
|
59
47
|
|
|
@@ -61,10 +49,8 @@ detect local edits and upstream changes.
|
|
|
61
49
|
/skills
|
|
62
50
|
/skills enable <key|name|pattern>
|
|
63
51
|
/skills disable <key|name|pattern>
|
|
52
|
+
/skills search <query>
|
|
64
53
|
/skills add <owner/repo> <skill[@ref]> [--pin ref|--scope project|--dir path|--force]
|
|
65
|
-
/skills import <key-or-name>
|
|
66
|
-
/skills import <owner/repo> <skill[@ref]> [--pin ref|--scope project|--dir path|--force]
|
|
67
|
-
/skills sync <key-or-name>
|
|
68
54
|
/skills update --dry-run
|
|
69
55
|
/skills update --all
|
|
70
56
|
/skills profile create <name>
|
|
@@ -74,18 +60,18 @@ detect local edits and upstream changes.
|
|
|
74
60
|
/skills defaults all-disabled
|
|
75
61
|
```
|
|
76
62
|
|
|
77
|
-
GitHub
|
|
78
|
-
with preview `gh skill` support. The extension delegates
|
|
79
|
-
tracking, pinning, preview/update metadata, and tree-SHA
|
|
80
|
-
`gh skill` instead of maintaining a parallel cache.
|
|
63
|
+
GitHub search, installs, and updates require GitHub CLI `gh` v2.90.0
|
|
64
|
+
or newer with preview `gh skill` support. The extension delegates
|
|
65
|
+
GitHub source tracking, pinning, preview/update metadata, and tree-SHA
|
|
66
|
+
comparison to `gh skill` instead of maintaining a parallel cache.
|
|
81
67
|
|
|
82
68
|
With a UI available, `/skills` opens a modal home menu for managing,
|
|
83
|
-
adding GitHub skills,
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
69
|
+
adding GitHub skills, updating GitHub skills, refreshing discovery,
|
|
70
|
+
profile switching, and profile baseline selection. The Add GitHub
|
|
71
|
+
skill flow can install one skill or every `SKILL.md` found in a
|
|
72
|
+
repository. The no-arg `search`, `add`, and `defaults` subcommands use
|
|
73
|
+
modal pickers/forms in interactive mode. In headless mode, use the
|
|
74
|
+
subcommands directly.
|
|
89
75
|
|
|
90
76
|
## Skill enablement
|
|
91
77
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { create_skills_manager } from '../manager.js';
|
|
2
|
+
type SkillsManager = ReturnType<typeof create_skills_manager>;
|
|
3
|
+
export declare const SKILL_SUBCOMMANDS: string[];
|
|
4
|
+
export declare function get_skill_argument_completions(prefix: string, mgr: SkillsManager): {
|
|
5
|
+
value: string;
|
|
6
|
+
label: string;
|
|
7
|
+
}[] | null;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { sort_skills } from '../skill-utils.js';
|
|
2
|
+
export const SKILL_SUBCOMMANDS = [
|
|
3
|
+
'list',
|
|
4
|
+
'show',
|
|
5
|
+
'enable',
|
|
6
|
+
'disable',
|
|
7
|
+
'delete',
|
|
8
|
+
'search',
|
|
9
|
+
'add',
|
|
10
|
+
'update',
|
|
11
|
+
'profile',
|
|
12
|
+
'refresh',
|
|
13
|
+
'defaults',
|
|
14
|
+
];
|
|
15
|
+
export function get_skill_argument_completions(prefix, mgr) {
|
|
16
|
+
const parts = prefix.trimStart().split(/\s+/);
|
|
17
|
+
const has_trailing_space = /\s$/.test(prefix);
|
|
18
|
+
if (parts.length <= 1 && !has_trailing_space) {
|
|
19
|
+
return SKILL_SUBCOMMANDS.filter((s) => s.startsWith(parts[0] || '')).map((s) => ({ value: s, label: s }));
|
|
20
|
+
}
|
|
21
|
+
if (['show', 'enable', 'disable', 'delete'].includes(parts[0] ?? '')) {
|
|
22
|
+
const q = parts.slice(1).join(' ').toLowerCase();
|
|
23
|
+
return sort_skills(mgr.discover())
|
|
24
|
+
.filter((s) => s.key.toLowerCase().includes(q) ||
|
|
25
|
+
s.name.toLowerCase().includes(q))
|
|
26
|
+
.slice(0, 20)
|
|
27
|
+
.map((s) => ({
|
|
28
|
+
value: `${parts[0]} ${s.key}`,
|
|
29
|
+
label: s.key,
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
if (parts[0] === 'update') {
|
|
33
|
+
return ['--dry-run', '--all', '--force', '--unpin']
|
|
34
|
+
.filter((flag) => flag.startsWith(parts.at(-1) ?? ''))
|
|
35
|
+
.map((flag) => ({
|
|
36
|
+
value: `${parts.slice(0, -1).join(' ')} ${flag}`.trim(),
|
|
37
|
+
label: flag,
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
if (parts[0] === 'profile') {
|
|
41
|
+
const profile_subs = [
|
|
42
|
+
'list',
|
|
43
|
+
'show',
|
|
44
|
+
'use',
|
|
45
|
+
'create',
|
|
46
|
+
'include',
|
|
47
|
+
'exclude',
|
|
48
|
+
];
|
|
49
|
+
if (parts.length <= 2 && !has_trailing_space) {
|
|
50
|
+
return profile_subs
|
|
51
|
+
.filter((s) => s.startsWith(parts[1] || ''))
|
|
52
|
+
.map((s) => ({ value: `profile ${s}`, label: s }));
|
|
53
|
+
}
|
|
54
|
+
if (['show', 'use', 'include', 'exclude'].includes(parts[1] ?? '')) {
|
|
55
|
+
const q = parts.slice(2).join(' ').toLowerCase();
|
|
56
|
+
return mgr
|
|
57
|
+
.list_profiles()
|
|
58
|
+
.filter((profile) => profile.name.toLowerCase().includes(q))
|
|
59
|
+
.slice(0, 20)
|
|
60
|
+
.map((profile) => ({
|
|
61
|
+
value: `profile ${parts[1]} ${profile.name}`,
|
|
62
|
+
label: profile.name,
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=completions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completions.js","sourceRoot":"","sources":["../../src/commands/completions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SkillsCommandRequest } from './types.js';
|
|
2
|
+
export declare function handle_add_command({ rest, arg, ctx, }: SkillsCommandRequest): Promise<boolean>;
|
|
3
|
+
export declare function handle_github_import(request: SkillsCommandRequest): Promise<boolean>;
|
|
4
|
+
export declare function handle_update_command({ rest, ctx, }: SkillsCommandRequest): Promise<boolean>;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { run_with_progress_modal, show_text_modal, } from '@spences10/pi-tui-modal';
|
|
2
|
+
import { has_gh_skill, parse_gh_skill_install_args, run_gh_skill_install, run_gh_skill_install_async, run_gh_skill_update, run_gh_skill_update_async, } from '../gh-skill.js';
|
|
3
|
+
import { show_add_github_skill_modal } from '../skills-ui.js';
|
|
4
|
+
function notify_error(ctx, error) {
|
|
5
|
+
ctx.ui.notify(error instanceof Error ? error.message : String(error), 'warning');
|
|
6
|
+
}
|
|
7
|
+
export async function handle_add_command({ rest, arg, ctx, }) {
|
|
8
|
+
if (!arg && ctx.hasUI) {
|
|
9
|
+
if (await show_add_github_skill_modal(ctx))
|
|
10
|
+
return true;
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const gh_request = parse_gh_skill_install_args(rest);
|
|
14
|
+
if (!gh_request) {
|
|
15
|
+
ctx.ui.notify('Usage: /skills add <owner/repo> <skill[@ref]> [--pin ref|--scope project|--dir path|--force]', 'warning');
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
if (!has_gh_skill()) {
|
|
19
|
+
ctx.ui.notify('GitHub skill adds require gh v2.90.0+ with `gh skill` support.', 'warning');
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
const output = ctx.hasUI
|
|
24
|
+
? await run_with_progress_modal(ctx, {
|
|
25
|
+
title: 'Adding GitHub skill',
|
|
26
|
+
message: `Installing ${gh_request.skill} from ${gh_request.repository}`,
|
|
27
|
+
}, async ({ signal, update }) => {
|
|
28
|
+
update({ current: gh_request.skill });
|
|
29
|
+
return await run_gh_skill_install_async(gh_request, undefined, {
|
|
30
|
+
signal,
|
|
31
|
+
});
|
|
32
|
+
})
|
|
33
|
+
: run_gh_skill_install(gh_request);
|
|
34
|
+
if (output === undefined)
|
|
35
|
+
return true;
|
|
36
|
+
ctx.ui.notify(`${output || `Added ${gh_request.skill} from ${gh_request.repository}`}\nReloading...`, 'info');
|
|
37
|
+
await ctx.reload();
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
notify_error(ctx, error);
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export async function handle_github_import(request) {
|
|
46
|
+
const { rest, ctx } = request;
|
|
47
|
+
const gh_request = parse_gh_skill_install_args(rest);
|
|
48
|
+
if (!gh_request)
|
|
49
|
+
return false;
|
|
50
|
+
if (!has_gh_skill()) {
|
|
51
|
+
ctx.ui.notify('GitHub skill imports require gh v2.90.0+ with `gh skill` support.', 'warning');
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
const output = ctx.hasUI
|
|
56
|
+
? await run_with_progress_modal(ctx, {
|
|
57
|
+
title: 'Importing GitHub skill',
|
|
58
|
+
message: `Installing ${gh_request.skill} from ${gh_request.repository}`,
|
|
59
|
+
}, async ({ signal, update }) => {
|
|
60
|
+
update({ current: gh_request.skill });
|
|
61
|
+
return await run_gh_skill_install_async(gh_request, undefined, {
|
|
62
|
+
signal,
|
|
63
|
+
});
|
|
64
|
+
})
|
|
65
|
+
: run_gh_skill_install(gh_request);
|
|
66
|
+
if (output === undefined)
|
|
67
|
+
return true;
|
|
68
|
+
if (ctx.hasUI) {
|
|
69
|
+
await show_text_modal(ctx, {
|
|
70
|
+
title: 'GitHub skill imported',
|
|
71
|
+
text: `${output || `Imported ${gh_request.skill} from ${gh_request.repository}`}\n\nReloading...`,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
ctx.ui.notify(`${output || `Imported ${gh_request.skill} from ${gh_request.repository}`}\nReloading...`, 'info');
|
|
76
|
+
}
|
|
77
|
+
await ctx.reload();
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
notify_error(ctx, error);
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export async function handle_update_command({ rest, ctx, }) {
|
|
86
|
+
if (!has_gh_skill()) {
|
|
87
|
+
ctx.ui.notify('GitHub skill updates require gh v2.90.0+ with `gh skill` support.', 'warning');
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
const dry_run = rest.includes('--dry-run');
|
|
92
|
+
const output = ctx.hasUI
|
|
93
|
+
? await run_with_progress_modal(ctx, {
|
|
94
|
+
title: dry_run
|
|
95
|
+
? 'Checking GitHub skill updates'
|
|
96
|
+
: 'Updating GitHub skills',
|
|
97
|
+
message: `Running gh skill update ${rest.join(' ')}`.trim(),
|
|
98
|
+
}, async ({ signal }) => await run_gh_skill_update_async(rest, undefined, {
|
|
99
|
+
signal,
|
|
100
|
+
}))
|
|
101
|
+
: run_gh_skill_update(rest);
|
|
102
|
+
if (output === undefined)
|
|
103
|
+
return true;
|
|
104
|
+
if (ctx.hasUI) {
|
|
105
|
+
await show_text_modal(ctx, {
|
|
106
|
+
title: dry_run
|
|
107
|
+
? 'GitHub skill update check'
|
|
108
|
+
: 'GitHub skills updated',
|
|
109
|
+
text: output || 'No output from gh skill update.',
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
ctx.ui.notify(output || 'gh skill update completed.');
|
|
114
|
+
}
|
|
115
|
+
if (!dry_run) {
|
|
116
|
+
ctx.ui.notify('Reloading skills...', 'info');
|
|
117
|
+
await ctx.reload();
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
notify_error(ctx, error);
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=github-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-handlers.js","sourceRoot":"","sources":["../../src/commands/github-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { SKILL_SUBCOMMANDS } from './completions.js';
|
|
2
|
+
import { handle_add_command, handle_update_command, } from './github-handlers.js';
|
|
3
|
+
import { handle_skills_home } from './home-handler.js';
|
|
4
|
+
import { handle_profile_command } from './profile-handlers.js';
|
|
5
|
+
import { handle_defaults_command, handle_import_command, handle_list_command, handle_refresh_command, handle_show_command, handle_sync_command, handle_toggle_command, } from './skill-handlers.js';
|
|
6
|
+
export async function handle_skills_command(args, ctx, mgr) {
|
|
7
|
+
const trimmed = args.trim();
|
|
8
|
+
if (!trimmed && (await handle_skills_home(ctx, mgr)))
|
|
9
|
+
return;
|
|
10
|
+
const [sub, ...rest] = (trimmed || 'list').split(/\s+/);
|
|
11
|
+
const request = {
|
|
12
|
+
args,
|
|
13
|
+
trimmed,
|
|
14
|
+
sub,
|
|
15
|
+
rest,
|
|
16
|
+
arg: rest.join(' '),
|
|
17
|
+
mgr,
|
|
18
|
+
ctx,
|
|
19
|
+
};
|
|
20
|
+
switch (sub) {
|
|
21
|
+
case 'list':
|
|
22
|
+
await handle_list_command(request);
|
|
23
|
+
break;
|
|
24
|
+
case 'show':
|
|
25
|
+
await handle_show_command(request);
|
|
26
|
+
break;
|
|
27
|
+
case 'enable':
|
|
28
|
+
case 'disable':
|
|
29
|
+
await handle_toggle_command(request);
|
|
30
|
+
break;
|
|
31
|
+
case 'add':
|
|
32
|
+
await handle_add_command(request);
|
|
33
|
+
break;
|
|
34
|
+
case 'import':
|
|
35
|
+
await handle_import_command(request);
|
|
36
|
+
break;
|
|
37
|
+
case 'sync':
|
|
38
|
+
await handle_sync_command(request);
|
|
39
|
+
break;
|
|
40
|
+
case 'update':
|
|
41
|
+
await handle_update_command(request);
|
|
42
|
+
break;
|
|
43
|
+
case 'profile':
|
|
44
|
+
await handle_profile_command(request);
|
|
45
|
+
break;
|
|
46
|
+
case 'refresh':
|
|
47
|
+
await handle_refresh_command(request);
|
|
48
|
+
break;
|
|
49
|
+
case 'defaults':
|
|
50
|
+
await handle_defaults_command(request);
|
|
51
|
+
break;
|
|
52
|
+
default:
|
|
53
|
+
ctx.ui.notify(`Unknown: ${sub}. Use: ${SKILL_SUBCOMMANDS.join(', ')}`, 'warning');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/commands/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACN,kBAAkB,EAClB,qBAAqB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EACN,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,GACrB,MAAM,qBAAqB,CAAC;AAM7B,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAC1C,IAAY,EACZ,GAA2B,EAC3B,GAAkB;IAElB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAE5B,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAAE,OAAO;IAE7D,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG;QACf,IAAI;QACJ,OAAO;QACP,GAAG;QACH,IAAI;QACJ,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACnB,GAAG;QACH,GAAG;KACH,CAAC;IAEF,QAAQ,GAAG,EAAE,CAAC;QACb,KAAK,MAAM;YACV,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM;QACP,KAAK,MAAM;YACV,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM;QACP,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACb,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM;QACP,KAAK,KAAK;YACT,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM;QACP,KAAK,QAAQ;YACZ,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM;QACP,KAAK,MAAM;YACV,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM;QACP,KAAK,QAAQ;YACZ,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM;QACP,KAAK,SAAS;YACb,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM;QACP,KAAK,SAAS;YACb,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM;QACP,KAAK,UAAU;YACd,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACvC,MAAM;QACP;YACC,GAAG,CAAC,EAAE,CAAC,MAAM,CACZ,YAAY,GAAG,UAAU,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACvD,SAAS,CACT,CAAC;IACJ,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { show_add_github_skill_modal, show_importable_skills_modal, show_profiles_modal, show_refresh_summary, show_skills_home_modal, show_skills_manager_modal, show_update_github_skills_modal, } from '../skills-ui.js';
|
|
2
|
+
export async function handle_skills_home(ctx, mgr) {
|
|
3
|
+
if (!ctx.hasUI)
|
|
4
|
+
return false;
|
|
5
|
+
let selected;
|
|
6
|
+
while (true) {
|
|
7
|
+
const managed_count = mgr.discover().length;
|
|
8
|
+
const importable_count = mgr.discover_importable().length;
|
|
9
|
+
selected = await show_skills_home_modal(ctx, managed_count, importable_count, mgr.get_active_profile());
|
|
10
|
+
if (!selected)
|
|
11
|
+
break;
|
|
12
|
+
if (selected === 'manage') {
|
|
13
|
+
if (await show_skills_manager_modal(ctx, mgr))
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
else if (selected === 'importable') {
|
|
17
|
+
if (await show_importable_skills_modal(ctx, mgr))
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
else if (selected === 'add') {
|
|
21
|
+
if (await show_add_github_skill_modal(ctx))
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
else if (selected === 'update') {
|
|
25
|
+
if (await show_update_github_skills_modal(ctx))
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
else if (selected === 'profiles') {
|
|
29
|
+
if (await show_profiles_modal(ctx, mgr))
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
else if (selected === 'refresh') {
|
|
33
|
+
await show_refresh_summary(ctx, mgr);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=home-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"home-handler.js","sourceRoot":"","sources":["../../src/commands/home-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,2BAA2B,EAC3B,4BAA4B,EAC5B,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,+BAA+B,GAC/B,MAAM,iBAAiB,CAAC;AAMzB,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACvC,GAA2B,EAC3B,GAAkB;IAElB,IAAI,CAAC,GAAG,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAE7B,IAAI,QAA4B,CAAC;IACjC,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,aAAa,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC;QAC5C,MAAM,gBAAgB,GAAG,GAAG,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC;QAC1D,QAAQ,GAAG,MAAM,sBAAsB,CACtC,GAAG,EACH,aAAa,EACb,gBAAgB,EAChB,GAAG,CAAC,kBAAkB,EAAE,CACxB,CAAC;QACF,IAAI,CAAC,QAAQ;YAAE,MAAM;QAErB,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC3B,IAAI,MAAM,yBAAyB,CAAC,GAAG,EAAE,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC5D,CAAC;aAAM,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YACtC,IAAI,MAAM,4BAA4B,CAAC,GAAG,EAAE,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC/D,CAAC;aAAM,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC/B,IAAI,MAAM,2BAA2B,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;QACzD,CAAC;aAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,IAAI,MAAM,+BAA+B,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC7D,CAAC;aAAM,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YACpC,IAAI,MAAM,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;QACtD,CAAC;aAAM,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { show_input_modal, show_text_modal, } from '@spences10/pi-tui-modal';
|
|
2
|
+
import { format_profile_detail, profile_description, } from '../skill-utils.js';
|
|
3
|
+
import { pick_profile, show_profiles_modal } from '../skills-ui.js';
|
|
4
|
+
function notify_error(ctx, error) {
|
|
5
|
+
ctx.ui.notify(error instanceof Error ? error.message : String(error), 'warning');
|
|
6
|
+
}
|
|
7
|
+
export async function handle_profile_command(request) {
|
|
8
|
+
const { args, rest, mgr, ctx } = request;
|
|
9
|
+
const [action = 'list', name, ...pattern_parts] = rest;
|
|
10
|
+
const pattern = pattern_parts.join(' ');
|
|
11
|
+
if (!args.trim().startsWith('profile') && ctx.hasUI) {
|
|
12
|
+
if (await show_profiles_modal(ctx, mgr))
|
|
13
|
+
return true;
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
if (action === 'list') {
|
|
17
|
+
const text = mgr
|
|
18
|
+
.list_profiles()
|
|
19
|
+
.map((profile) => `${profile.active ? 'active' : ' '} ${profile.name} — ${profile_description(profile)}`)
|
|
20
|
+
.join('\n');
|
|
21
|
+
if (ctx.hasUI) {
|
|
22
|
+
await show_text_modal(ctx, {
|
|
23
|
+
title: 'Skill profiles',
|
|
24
|
+
text: text || 'No skill profiles found',
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
ctx.ui.notify(text || 'No skill profiles found');
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
if (action === 'show') {
|
|
33
|
+
let target = name;
|
|
34
|
+
if (!target && ctx.hasUI)
|
|
35
|
+
target = await pick_profile(ctx, mgr, 'Show skill profile');
|
|
36
|
+
const profile = mgr
|
|
37
|
+
.list_profiles()
|
|
38
|
+
.find((candidate) => candidate.name === target);
|
|
39
|
+
if (!profile) {
|
|
40
|
+
ctx.ui.notify('Usage: /skills profile show <name>', 'warning');
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
if (ctx.hasUI) {
|
|
44
|
+
await show_text_modal(ctx, {
|
|
45
|
+
title: profile.name,
|
|
46
|
+
text: format_profile_detail(profile),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
ctx.ui.notify(format_profile_detail(profile));
|
|
51
|
+
}
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
if (action === 'use') {
|
|
55
|
+
let target = name;
|
|
56
|
+
if (!target && ctx.hasUI)
|
|
57
|
+
target = await pick_profile(ctx, mgr, 'Use skill profile');
|
|
58
|
+
if (!target) {
|
|
59
|
+
ctx.ui.notify('Usage: /skills profile use <name>', 'warning');
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
mgr.use_profile(target);
|
|
64
|
+
ctx.ui.notify(`Using skill profile ${target}. Reloading...`, 'info');
|
|
65
|
+
await ctx.reload();
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
notify_error(ctx, error);
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
if (action === 'create') {
|
|
74
|
+
let target = name;
|
|
75
|
+
if (!target && ctx.hasUI) {
|
|
76
|
+
target = await show_input_modal(ctx, {
|
|
77
|
+
title: 'Create skill profile',
|
|
78
|
+
label: 'Profile name',
|
|
79
|
+
trim: true,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
if (!target) {
|
|
83
|
+
ctx.ui.notify('Usage: /skills profile create <name>', 'warning');
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
mgr.create_profile(target);
|
|
88
|
+
ctx.ui.notify(`Created empty skill profile ${target}`);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
notify_error(ctx, error);
|
|
92
|
+
}
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
if (action === 'include' || action === 'exclude') {
|
|
96
|
+
if (!name || !pattern) {
|
|
97
|
+
ctx.ui.notify(`Usage: /skills profile ${action} <name> <pattern>`, 'warning');
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
if (action === 'include')
|
|
102
|
+
mgr.include_in_profile(name, pattern);
|
|
103
|
+
else
|
|
104
|
+
mgr.exclude_from_profile(name, pattern);
|
|
105
|
+
ctx.ui.notify(`Updated skill profile ${name}. Reloading...`, 'info');
|
|
106
|
+
await ctx.reload();
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
notify_error(ctx, error);
|
|
111
|
+
}
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
ctx.ui.notify('Usage: /skills profile <list|show|use|create|include|exclude>', 'warning');
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=profile-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-handlers.js","sourceRoot":"","sources":["../../src/commands/profile-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SkillsCommandRequest } from './types.js';
|
|
2
|
+
export declare function handle_list_command({ mgr, ctx, }: SkillsCommandRequest): Promise<boolean>;
|
|
3
|
+
export declare function handle_show_command({ arg, mgr, ctx, }: SkillsCommandRequest): Promise<boolean>;
|
|
4
|
+
export declare function handle_toggle_command(request: SkillsCommandRequest): Promise<boolean>;
|
|
5
|
+
export declare function handle_import_command(request: SkillsCommandRequest): Promise<boolean>;
|
|
6
|
+
export declare function handle_sync_command({ arg, mgr, ctx, }: SkillsCommandRequest): Promise<boolean>;
|
|
7
|
+
export declare function handle_refresh_command({ mgr, ctx, }: SkillsCommandRequest): Promise<boolean>;
|
|
8
|
+
export declare function handle_defaults_command({ arg, mgr, ctx, }: SkillsCommandRequest): Promise<boolean>;
|