@spences10/pi-skills 0.0.29 → 0.0.31

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 +7 -7
  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,184 +0,0 @@
1
- import { show_text_modal } from '@spences10/pi-tui-modal';
2
- import { find_skill, format_skill_detail, format_skill_list, sort_skills, } from '../skill-utils.js';
3
- import { pick_skill, show_defaults_modal, show_refresh_summary, show_skill_detail_modal, show_skill_list_modal, } from '../skills-ui.js';
4
- import { handle_github_import } from './github-handlers.js';
5
- function notify_error(ctx, error) {
6
- ctx.ui.notify(error instanceof Error ? error.message : String(error), 'warning');
7
- }
8
- export async function handle_list_command({ mgr, ctx, }) {
9
- const skills = [...mgr.discover(), ...mgr.discover_importable()];
10
- if (ctx.hasUI)
11
- await show_skill_list_modal(ctx, mgr);
12
- else
13
- ctx.ui.notify(format_skill_list(skills));
14
- return false;
15
- }
16
- export async function handle_show_command({ arg, mgr, ctx, }) {
17
- const skills = [...mgr.discover(), ...mgr.discover_importable()];
18
- let target = arg;
19
- if (!target && ctx.hasUI) {
20
- target =
21
- (await pick_skill(ctx, {
22
- title: 'Show skill details',
23
- subtitle: 'Open a read-only skill detail view',
24
- skills: sort_skills(skills),
25
- empty_message: 'No skills found',
26
- })) ?? '';
27
- if (!target)
28
- return true;
29
- }
30
- if (!target) {
31
- ctx.ui.notify('Usage: /skills show <key|name>', 'warning');
32
- return true;
33
- }
34
- try {
35
- const skill = find_skill(skills, target);
36
- if (ctx.hasUI)
37
- await show_skill_detail_modal(ctx, skill);
38
- else
39
- ctx.ui.notify(format_skill_detail(skill));
40
- }
41
- catch (error) {
42
- notify_error(ctx, error);
43
- }
44
- return false;
45
- }
46
- export async function handle_toggle_command(request) {
47
- const { sub, arg, mgr, ctx } = request;
48
- let target = arg;
49
- if (!target && ctx.hasUI) {
50
- target =
51
- (await pick_skill(ctx, {
52
- title: sub === 'enable'
53
- ? 'Enable skill in active profile'
54
- : 'Disable skill in active profile',
55
- subtitle: `Profile: ${mgr.get_active_profile()}`,
56
- skills: sort_skills(mgr.discover()),
57
- empty_message: 'No managed skills found',
58
- })) ?? '';
59
- if (!target)
60
- return true;
61
- }
62
- if (!target) {
63
- ctx.ui.notify(`Usage: /skills ${sub} <key|name|pattern>`, 'warning');
64
- return true;
65
- }
66
- let pattern = target;
67
- try {
68
- pattern = find_skill(mgr.discover(), target).key;
69
- }
70
- catch {
71
- // Treat misses as patterns, e.g. design-* or *@plugin:vendor.
72
- }
73
- if (sub === 'enable')
74
- mgr.enable(pattern);
75
- else
76
- mgr.disable(pattern);
77
- ctx.ui.notify(`Updated ${mgr.get_active_profile()} profile. Reloading...`, 'info');
78
- await ctx.reload();
79
- return true;
80
- }
81
- export async function handle_import_command(request) {
82
- const { arg, mgr, ctx } = request;
83
- let target = arg;
84
- if (!target && ctx.hasUI) {
85
- target =
86
- (await pick_skill(ctx, {
87
- title: 'Import skill',
88
- subtitle: 'Copy an external skill into Pi-native storage, or run: /skills import <owner/repo> <skill>',
89
- skills: sort_skills(mgr.discover_importable()),
90
- empty_message: 'No importable skills found',
91
- })) ?? '';
92
- if (!target)
93
- return true;
94
- }
95
- if (!target) {
96
- ctx.ui.notify('Usage: /skills import <key|name> OR /skills import <owner/repo> <skill[@ref]> [--pin ref|--scope project|--dir path|--force]', 'warning');
97
- return true;
98
- }
99
- if (await handle_github_import(request))
100
- return true;
101
- try {
102
- const result = mgr.import_skill(target);
103
- ctx.ui.notify(`Imported ${target} to ${result.skillDir}. Reloading...`, 'info');
104
- await ctx.reload();
105
- return true;
106
- }
107
- catch (error) {
108
- notify_error(ctx, error);
109
- return true;
110
- }
111
- }
112
- export async function handle_sync_command({ arg, mgr, ctx, }) {
113
- let target = arg;
114
- if (!target && ctx.hasUI) {
115
- target =
116
- (await pick_skill(ctx, {
117
- title: 'Sync imported skill',
118
- subtitle: 'Update an imported skill from its upstream source',
119
- skills: sort_skills(mgr
120
- .discover()
121
- .filter((skill) => Boolean(skill.import_meta))),
122
- empty_message: 'No imported skills found',
123
- })) ?? '';
124
- if (!target)
125
- return true;
126
- }
127
- if (!target) {
128
- ctx.ui.notify('Usage: /skills sync <key|name>', 'warning');
129
- return true;
130
- }
131
- try {
132
- const result = mgr.sync_skill(target);
133
- if (result.changed) {
134
- ctx.ui.notify(`Synced ${target}. Reloading...`, 'info');
135
- await ctx.reload();
136
- return true;
137
- }
138
- if (ctx.hasUI) {
139
- await show_text_modal(ctx, {
140
- title: 'Skill already up to date',
141
- text: `${target} is already up to date.`,
142
- });
143
- }
144
- else {
145
- ctx.ui.notify(`${target} is already up to date.`, 'info');
146
- }
147
- return true;
148
- }
149
- catch (error) {
150
- notify_error(ctx, error);
151
- return true;
152
- }
153
- }
154
- export async function handle_refresh_command({ mgr, ctx, }) {
155
- if (ctx.hasUI) {
156
- await show_refresh_summary(ctx, mgr);
157
- return false;
158
- }
159
- mgr.refresh();
160
- ctx.ui.notify(`Rescanned: ${mgr.discover().length} managed skills, ${mgr.discover_importable().length} importable skills found`);
161
- return false;
162
- }
163
- export async function handle_defaults_command({ arg, mgr, ctx, }) {
164
- if (!arg && ctx.hasUI) {
165
- await show_defaults_modal(ctx, mgr);
166
- return false;
167
- }
168
- if (arg !== 'all-enabled' && arg !== 'all-disabled') {
169
- ctx.ui.notify('Usage: /skills defaults <all-enabled|all-disabled>', 'warning');
170
- return true;
171
- }
172
- mgr.set_defaults(arg);
173
- if (ctx.hasUI) {
174
- await show_text_modal(ctx, {
175
- title: 'Default skill policy updated',
176
- text: `Active profile now starts from: ${arg}`,
177
- });
178
- }
179
- else {
180
- ctx.ui.notify(`Default skill policy: ${arg}`);
181
- }
182
- return false;
183
- }
184
- //# sourceMappingURL=skill-handlers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-handlers.js","sourceRoot":"","sources":["../../src/commands/skill-handlers.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- import type { ExtensionCommandContext } from '@earendil-works/pi-coding-agent';
2
- import type { create_skills_manager } from '../manager.js';
3
- export type SkillsManager = ReturnType<typeof create_skills_manager>;
4
- export type SkillsCommandUiContext = ExtensionCommandContext;
5
- export type SkillsCommandRequest = {
6
- args: string;
7
- trimmed: string;
8
- sub: string;
9
- rest: string[];
10
- arg: string;
11
- mgr: SkillsManager;
12
- ctx: SkillsCommandUiContext;
13
- };
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":""}
@@ -1,17 +0,0 @@
1
- import { type DiscoveredSkill, type ImportedSkillMetadata } from './scanner.js';
2
- export declare function validate_imported_skill_name(name: string): string;
3
- export interface ImportSkillResult {
4
- skillDir: string;
5
- metadata: ImportedSkillMetadata;
6
- }
7
- export declare function import_external_skill(skill: DiscoveredSkill): ImportSkillResult;
8
- export interface SyncSkillResult {
9
- skillDir: string;
10
- metadata: ImportedSkillMetadata;
11
- changed: boolean;
12
- }
13
- export interface DeleteSkillResult {
14
- skillDir: string;
15
- }
16
- export declare function delete_managed_skill(skill: DiscoveredSkill): DeleteSkillResult;
17
- export declare function sync_imported_skill(skill: DiscoveredSkill): SyncSkillResult;
package/dist/importer.js DELETED
@@ -1,201 +0,0 @@
1
- import { getAgentDir } from '@earendil-works/pi-coding-agent';
2
- import { createHash } from 'node:crypto';
3
- import { cpSync, existsSync, mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync, } from 'node:fs';
4
- import { dirname, isAbsolute, join, relative, resolve, } from 'node:path';
5
- import { IMPORT_METADATA_FILE, } from './scanner.js';
6
- const IMPORT_METADATA_VERSION = 1;
7
- function get_managed_skills_dir() {
8
- return join(getAgentDir(), 'skills');
9
- }
10
- function ensure_dir(path) {
11
- mkdirSync(path, { recursive: true, mode: 0o700 });
12
- }
13
- function list_files_recursively(dir) {
14
- const files = [];
15
- for (const entry of readdirSync(dir, { withFileTypes: true })) {
16
- const full_path = join(dir, entry.name);
17
- if (entry.name === IMPORT_METADATA_FILE)
18
- continue;
19
- if (entry.isDirectory()) {
20
- files.push(...list_files_recursively(full_path));
21
- continue;
22
- }
23
- if (entry.isFile()) {
24
- files.push(full_path);
25
- }
26
- }
27
- return files.sort((a, b) => a.localeCompare(b));
28
- }
29
- function hash_directory(dir) {
30
- const hash = createHash('sha256');
31
- for (const file of list_files_recursively(dir)) {
32
- hash.update(relative(dir, file));
33
- hash.update('\0');
34
- hash.update(readFileSync(file));
35
- hash.update('\0');
36
- }
37
- return hash.digest('hex');
38
- }
39
- function read_metadata(base_dir) {
40
- const path = join(base_dir, IMPORT_METADATA_FILE);
41
- if (!existsSync(path))
42
- return undefined;
43
- try {
44
- return JSON.parse(readFileSync(path, 'utf-8'));
45
- }
46
- catch {
47
- return undefined;
48
- }
49
- }
50
- function write_metadata(base_dir, metadata) {
51
- writeFileSync(join(base_dir, IMPORT_METADATA_FILE), JSON.stringify(metadata, null, '\t') + '\n', { mode: 0o600 });
52
- }
53
- function has_control_character(value) {
54
- return Array.from(value).some((char) => {
55
- const code = char.codePointAt(0) ?? 0;
56
- return code < 0x20 || code === 0x7f;
57
- });
58
- }
59
- export function validate_imported_skill_name(name) {
60
- if (!name.trim()) {
61
- throw new Error('Skill name must not be empty');
62
- }
63
- if (name !== name.trim()) {
64
- throw new Error(`Invalid skill name "${name}": leading or trailing whitespace is not allowed`);
65
- }
66
- if (name === '.' ||
67
- name === '..' ||
68
- isAbsolute(name) ||
69
- /[\\/]/.test(name) ||
70
- has_control_character(name)) {
71
- throw new Error(`Invalid skill name "${name}": must be a single safe path segment`);
72
- }
73
- return name;
74
- }
75
- function resolve_managed_skill_dir(managed_root, name) {
76
- const safe_name = validate_imported_skill_name(name);
77
- const skill_dir = resolve(managed_root, safe_name);
78
- const relative_path = relative(managed_root, skill_dir);
79
- if (!relative_path ||
80
- relative_path.startsWith('..') ||
81
- isAbsolute(relative_path)) {
82
- throw new Error(`Invalid skill name "${name}": destination escapes managed skills directory`);
83
- }
84
- return skill_dir;
85
- }
86
- function replace_directory(source_dir, dest_dir) {
87
- const parent_dir = dirname(dest_dir);
88
- ensure_dir(parent_dir);
89
- const tmp_dir = join(parent_dir, `.${resolve(dest_dir).split('/').pop()}.tmp-${Date.now()}`);
90
- rmSync(tmp_dir, { recursive: true, force: true });
91
- cpSync(source_dir, tmp_dir, {
92
- recursive: true,
93
- preserveTimestamps: true,
94
- verbatimSymlinks: false,
95
- });
96
- rmSync(dest_dir, { recursive: true, force: true });
97
- cpSync(tmp_dir, dest_dir, {
98
- recursive: true,
99
- preserveTimestamps: true,
100
- verbatimSymlinks: false,
101
- });
102
- rmSync(tmp_dir, { recursive: true, force: true });
103
- }
104
- export function import_external_skill(skill) {
105
- if (skill.kind !== 'external') {
106
- throw new Error(`Skill ${skill.name} is not importable`);
107
- }
108
- const managed_root = get_managed_skills_dir();
109
- ensure_dir(managed_root);
110
- const skill_dir = resolve_managed_skill_dir(managed_root, skill.name);
111
- const existing = existsSync(skill_dir);
112
- if (existing) {
113
- const existing_stat = statSync(skill_dir);
114
- if (!existing_stat.isDirectory()) {
115
- throw new Error(`${skill_dir} exists and is not a directory`);
116
- }
117
- const existing_metadata = read_metadata(skill_dir);
118
- if (!existing_metadata) {
119
- throw new Error(`Refusing to overwrite existing unmanaged skill at ${skill_dir}`);
120
- }
121
- }
122
- replace_directory(skill.baseDir, skill_dir);
123
- const upstream_hash = hash_directory(skill.baseDir);
124
- const imported_hash = hash_directory(skill_dir);
125
- const now = new Date().toISOString();
126
- const metadata = {
127
- version: IMPORT_METADATA_VERSION,
128
- source: skill.source,
129
- upstream_skill_path: skill.skillPath,
130
- upstream_base_dir: skill.baseDir,
131
- upstream_install_path: skill.plugin?.installPath,
132
- upstream_version: skill.plugin?.version,
133
- upstream_git_commit_sha: skill.plugin?.gitCommitSha,
134
- imported_at: now,
135
- last_synced_at: now,
136
- imported_hash,
137
- upstream_hash,
138
- };
139
- write_metadata(skill_dir, metadata);
140
- return {
141
- skillDir: skill_dir,
142
- metadata,
143
- };
144
- }
145
- export function delete_managed_skill(skill) {
146
- if (skill.kind !== 'managed') {
147
- throw new Error(`Skill ${skill.name} is not managed`);
148
- }
149
- if (!existsSync(skill.baseDir)) {
150
- throw new Error(`Skill directory no longer exists: ${skill.baseDir}`);
151
- }
152
- if (!existsSync(skill.skillPath)) {
153
- throw new Error(`Skill file no longer exists: ${skill.skillPath}`);
154
- }
155
- const skill_dir = resolve(skill.baseDir);
156
- const skill_file = resolve(skill.skillPath);
157
- const relative_skill_path = relative(skill_dir, skill_file);
158
- if (!relative_skill_path ||
159
- relative_skill_path.startsWith('..') ||
160
- isAbsolute(relative_skill_path)) {
161
- throw new Error(`Refusing to delete unsafe skill path: ${skill.baseDir}`);
162
- }
163
- rmSync(skill_dir, { recursive: true, force: true });
164
- return { skillDir: skill_dir };
165
- }
166
- export function sync_imported_skill(skill) {
167
- if (skill.kind !== 'managed' || !skill.import_meta) {
168
- throw new Error(`Skill ${skill.name} is not managed by my-pi sync`);
169
- }
170
- const metadata = skill.import_meta;
171
- if (!existsSync(metadata.upstream_base_dir)) {
172
- throw new Error(`Upstream source no longer exists: ${metadata.upstream_base_dir}`);
173
- }
174
- const current_hash = hash_directory(skill.baseDir);
175
- if (current_hash !== metadata.imported_hash) {
176
- throw new Error(`Refusing to sync ${skill.name}; local changes detected in ${skill.baseDir}`);
177
- }
178
- const upstream_hash = hash_directory(metadata.upstream_base_dir);
179
- if (upstream_hash === metadata.upstream_hash) {
180
- return {
181
- skillDir: skill.baseDir,
182
- metadata,
183
- changed: false,
184
- };
185
- }
186
- replace_directory(metadata.upstream_base_dir, skill.baseDir);
187
- const imported_hash = hash_directory(skill.baseDir);
188
- const updated = {
189
- ...metadata,
190
- last_synced_at: new Date().toISOString(),
191
- imported_hash,
192
- upstream_hash,
193
- };
194
- write_metadata(skill.baseDir, updated);
195
- return {
196
- skillDir: skill.baseDir,
197
- metadata: updated,
198
- changed: true,
199
- };
200
- }
201
- //# sourceMappingURL=importer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"importer.js","sourceRoot":"","sources":["../src/importer.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import { type DiscoveredSkill } from '../scanner.js';
2
- import type { ProfileOps } from './profile.js';
3
- export interface ManagedSkill extends DiscoveredSkill {
4
- key: string;
5
- enabled: boolean;
6
- }
7
- export declare function resolve_skill_key(skill: DiscoveredSkill): string;
8
- export declare function match_skill_by_key_or_name(skills: DiscoveredSkill[], key_or_name: string): DiscoveredSkill;
9
- export declare function create_discovery_ops(get_cwd: () => string, profile_ops: ProfileOps): {
10
- get_managed(): DiscoveredSkill[];
11
- get_importable(): DiscoveredSkill[];
12
- discover(): ManagedSkill[];
13
- discover_importable(): ManagedSkill[];
14
- search(query: string): ManagedSkill[];
15
- search_importable(query: string): ManagedSkill[];
16
- get_enabled_skill_paths(): string[];
17
- is_enabled_by_skill(name: string, filePath: string): boolean;
18
- clear_cache(): void;
19
- };
@@ -1,101 +0,0 @@
1
- import { dirname } from 'node:path';
2
- import { make_skill_key } from '../config.js';
3
- import { scan_importable_skills, scan_managed_skills, scan_project_skills, } from '../scanner.js';
4
- export function resolve_skill_key(skill) {
5
- return make_skill_key(skill.name, skill.source);
6
- }
7
- export function match_skill_by_key_or_name(skills, key_or_name) {
8
- const exact_key = skills.find((skill) => resolve_skill_key(skill) === key_or_name);
9
- if (exact_key)
10
- return exact_key;
11
- const by_name = skills.filter((skill) => skill.name === key_or_name);
12
- if (by_name.length === 1) {
13
- return by_name[0];
14
- }
15
- if (by_name.length > 1) {
16
- throw new Error(`Multiple skills named ${key_or_name}. Use an exact key instead.`);
17
- }
18
- throw new Error(`Unknown skill: ${key_or_name}`);
19
- }
20
- function matches_search(skill, query) {
21
- const q = query.toLowerCase();
22
- return (skill.name.toLowerCase().includes(q) ||
23
- skill.description.toLowerCase().includes(q) ||
24
- skill.source.toLowerCase().includes(q));
25
- }
26
- export function create_discovery_ops(get_cwd, profile_ops) {
27
- let managed_cache = null;
28
- let importable_cache = null;
29
- function get_managed() {
30
- if (!managed_cache) {
31
- managed_cache = [
32
- ...scan_managed_skills(),
33
- ...scan_project_skills(get_cwd()),
34
- ];
35
- }
36
- return managed_cache;
37
- }
38
- function get_importable() {
39
- if (!importable_cache) {
40
- importable_cache = scan_importable_skills();
41
- }
42
- return importable_cache;
43
- }
44
- function to_managed(skill) {
45
- const key = resolve_skill_key(skill);
46
- return {
47
- ...skill,
48
- key,
49
- enabled: skill.kind === 'managed'
50
- ? profile_ops.is_effectively_enabled(skill)
51
- : false,
52
- };
53
- }
54
- function get_enabled_managed_skills() {
55
- return get_managed()
56
- .filter((skill) => profile_ops.is_effectively_enabled(skill))
57
- .map(to_managed);
58
- }
59
- return {
60
- get_managed,
61
- get_importable,
62
- discover() {
63
- return get_managed().map(to_managed);
64
- },
65
- discover_importable() {
66
- return get_importable().map(to_managed);
67
- },
68
- search(query) {
69
- return this.discover().filter((skill) => matches_search(skill, query));
70
- },
71
- search_importable(query) {
72
- return this.discover_importable().filter((skill) => matches_search(skill, query));
73
- },
74
- get_enabled_skill_paths() {
75
- return get_enabled_managed_skills().map((skill) => skill.skillPath);
76
- },
77
- is_enabled_by_skill(name, filePath) {
78
- const discovered = get_managed();
79
- const match = discovered.find((s) => s.skillPath === filePath);
80
- if (match)
81
- return profile_ops.is_effectively_enabled(match);
82
- const by_name = discovered.find((s) => s.name === name);
83
- if (by_name)
84
- return profile_ops.is_effectively_enabled(by_name);
85
- return profile_ops.apply_profile_rules(true, {
86
- name,
87
- description: '',
88
- skillPath: filePath,
89
- baseDir: dirname(filePath),
90
- source: 'pi-native',
91
- scope: 'global',
92
- kind: 'managed',
93
- });
94
- },
95
- clear_cache() {
96
- managed_cache = null;
97
- importable_cache = null;
98
- },
99
- };
100
- }
101
- //# sourceMappingURL=discovery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/manager/discovery.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import { type ImportSkillResult, type SyncSkillResult } from '../importer.js';
2
- import type { DiscoveredSkill } from '../scanner.js';
3
- import type { ProfileOps } from './profile.js';
4
- export declare function create_import_management_ops(get_importable: () => DiscoveredSkill[], get_managed: () => DiscoveredSkill[], profile_ops: ProfileOps, refresh: () => void): {
5
- import_skill(key_or_name: string): ImportSkillResult & {
6
- key: string;
7
- };
8
- sync_skill(key_or_name: string): SyncSkillResult & {
9
- key: string;
10
- };
11
- };
@@ -1,28 +0,0 @@
1
- import { make_skill_key } from '../config.js';
2
- import { import_external_skill, sync_imported_skill, } from '../importer.js';
3
- import { match_skill_by_key_or_name, resolve_skill_key, } from './discovery.js';
4
- export function create_import_management_ops(get_importable, get_managed, profile_ops, refresh) {
5
- return {
6
- import_skill(key_or_name) {
7
- const skill = match_skill_by_key_or_name(get_importable(), key_or_name);
8
- const result = import_external_skill(skill);
9
- const managed_key = make_skill_key(skill.name, 'pi-native');
10
- profile_ops.set_profile_skill_enabled(managed_key, true);
11
- refresh();
12
- return {
13
- ...result,
14
- key: managed_key,
15
- };
16
- },
17
- sync_skill(key_or_name) {
18
- const skill = match_skill_by_key_or_name(get_managed(), key_or_name);
19
- const result = sync_imported_skill(skill);
20
- refresh();
21
- return {
22
- ...result,
23
- key: resolve_skill_key(skill),
24
- };
25
- },
26
- };
27
- }
28
- //# sourceMappingURL=import-management.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"import-management.js","sourceRoot":"","sources":["../../src/manager/import-management.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAGN,qBAAqB,EACrB,mBAAmB,GACnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACN,0BAA0B,EAC1B,iBAAiB,GACjB,MAAM,gBAAgB,CAAC;AAGxB,MAAM,UAAU,4BAA4B,CAC3C,cAAuC,EACvC,WAAoC,EACpC,WAAuB,EACvB,OAAmB;IAOnB,OAAO;QACN,YAAY,CAAC,WAAmB;YAC/B,MAAM,KAAK,GAAG,0BAA0B,CACvC,cAAc,EAAE,EAChB,WAAW,CACX,CAAC;YACF,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAC5D,WAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACzD,OAAO,EAAE,CAAC;YACV,OAAO;gBACN,GAAG,MAAM;gBACT,GAAG,EAAE,WAAW;aAChB,CAAC;QACH,CAAC;QACD,UAAU,CAAC,WAAmB;YAC7B,MAAM,KAAK,GAAG,0BAA0B,CACvC,WAAW,EAAE,EACb,WAAW,CACX,CAAC;YACF,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC1C,OAAO,EAAE,CAAC;YACV,OAAO;gBACN,GAAG,MAAM;gBACT,GAAG,EAAE,iBAAiB,CAAC,KAAK,CAAC;aAC7B,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -1,29 +0,0 @@
1
- import { type SkillDefaultPolicy, type SkillsConfig } from '../config.js';
2
- import type { DiscoveredSkill } from '../scanner.js';
3
- export declare const SKILLS_PROFILE_ENV = "MY_PI_SKILLS_PROFILE";
4
- export interface SkillProfile {
5
- name: string;
6
- description?: string;
7
- extends: string[];
8
- include: string[];
9
- exclude: string[];
10
- active: boolean;
11
- }
12
- export type ProfileOps = ReturnType<typeof create_profile_ops>;
13
- export declare function glob_matches(pattern: string, value: string): boolean;
14
- export declare function require_profile_name(name: string): string;
15
- export declare function create_profile_ops(get_config: () => SkillsConfig, get_cwd: () => string, get_project_skills_enabled: () => boolean): {
16
- get_active_profile(): string;
17
- is_effectively_enabled(skill: DiscoveredSkill): boolean;
18
- set_profile_skill_enabled(key: string, enabled: boolean): boolean;
19
- set_defaults(policy: SkillDefaultPolicy): void;
20
- list_profiles(): SkillProfile[];
21
- use_profile(name: string): void;
22
- create_profile(name: string, options?: {
23
- description?: string;
24
- extends?: string[];
25
- }): SkillProfile;
26
- include_in_profile(profile: string, pattern: string): void;
27
- exclude_from_profile(profile: string, pattern: string): void;
28
- apply_profile_rules(initial: boolean, skill: DiscoveredSkill): boolean;
29
- };