@spences10/pi-skills 0.0.8 → 0.0.10

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/dist/config.js CHANGED
@@ -1,30 +1,145 @@
1
1
  import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync, } from 'node:fs';
2
2
  import { homedir } from 'node:os';
3
3
  import { dirname, join } from 'node:path';
4
+ const DEFAULT_PROFILES = {
5
+ default: {
6
+ description: 'General-purpose skills profile.',
7
+ include: [],
8
+ exclude: [],
9
+ },
10
+ };
4
11
  const DEFAULT_CONFIG = {
5
- version: 1,
12
+ version: 3,
6
13
  enabled: {},
7
14
  defaults: 'all-disabled',
15
+ current_profile: 'default',
16
+ profiles: DEFAULT_PROFILES,
8
17
  };
9
18
  export function get_config_path() {
10
19
  const xdg = process.env.XDG_CONFIG_HOME || join(homedir(), '.config');
11
20
  return join(xdg, 'my-pi', 'skills.json');
12
21
  }
22
+ function string_array(value) {
23
+ if (!Array.isArray(value))
24
+ return undefined;
25
+ const values = value
26
+ .map((item) => (typeof item === 'string' ? item.trim() : ''))
27
+ .filter(Boolean);
28
+ return values.length ? [...new Set(values)] : undefined;
29
+ }
30
+ function normalize_profile(value) {
31
+ if (!value || typeof value !== 'object')
32
+ return {};
33
+ const parsed = value;
34
+ const description = typeof parsed.description === 'string' &&
35
+ parsed.description.trim()
36
+ ? parsed.description.trim()
37
+ : undefined;
38
+ const extends_value = Array.isArray(parsed.extends)
39
+ ? string_array(parsed.extends)
40
+ : typeof parsed.extends === 'string' && parsed.extends.trim()
41
+ ? parsed.extends.trim()
42
+ : undefined;
43
+ const include = string_array(parsed.include);
44
+ const exclude = string_array(parsed.exclude);
45
+ const profile = {};
46
+ if (description)
47
+ profile.description = description;
48
+ if (extends_value)
49
+ profile.extends = extends_value;
50
+ if (include)
51
+ profile.include = include;
52
+ if (exclude)
53
+ profile.exclude = exclude;
54
+ return profile;
55
+ }
56
+ function normalize_profiles(value) {
57
+ if (!value || typeof value !== 'object') {
58
+ return structuredClone(DEFAULT_PROFILES);
59
+ }
60
+ const profiles = {};
61
+ for (const [name, profile] of Object.entries(value)) {
62
+ if (!safe_profile_name(name))
63
+ continue;
64
+ profiles[name] = normalize_profile(profile);
65
+ }
66
+ return Object.keys(profiles).length
67
+ ? profiles
68
+ : structuredClone(DEFAULT_PROFILES);
69
+ }
70
+ function unique_push(values, value) {
71
+ if (!values.includes(value))
72
+ values.push(value);
73
+ }
74
+ function remove_value(values, value) {
75
+ return values.filter((item) => item !== value);
76
+ }
77
+ function normalize_enabled_map(value) {
78
+ if (!value || typeof value !== 'object')
79
+ return {};
80
+ return Object.fromEntries(Object.entries(value)
81
+ .filter((entry) => typeof entry[1] === 'boolean' && Boolean(entry[0].trim()))
82
+ .map(([key, enabled]) => [key.trim(), enabled]));
83
+ }
84
+ function migrate_legacy_enablement_to_default_profile(profiles, enabled, defaults) {
85
+ const migrated = { ...profiles };
86
+ const base_default = {
87
+ ...DEFAULT_PROFILES.default,
88
+ ...migrated.default,
89
+ };
90
+ let include = [...(base_default.include ?? [])];
91
+ let exclude = [...(base_default.exclude ?? [])];
92
+ if (defaults === 'all-enabled') {
93
+ unique_push(include, '*');
94
+ }
95
+ for (const [key, is_enabled] of Object.entries(enabled)) {
96
+ if (is_enabled) {
97
+ exclude = remove_value(exclude, key);
98
+ unique_push(include, key);
99
+ }
100
+ else {
101
+ include = remove_value(include, key);
102
+ unique_push(exclude, key);
103
+ }
104
+ }
105
+ migrated.default = {
106
+ ...base_default,
107
+ include,
108
+ exclude,
109
+ };
110
+ return migrated;
111
+ }
112
+ export function safe_profile_name(value) {
113
+ const trimmed = value.trim();
114
+ if (!trimmed || trimmed === '.' || trimmed === '..')
115
+ return undefined;
116
+ if (!/^[a-zA-Z0-9_.-]+$/.test(trimmed))
117
+ return undefined;
118
+ return trimmed;
119
+ }
13
120
  export function load_skills_config() {
14
121
  const path = get_config_path();
15
122
  if (!existsSync(path))
16
- return { ...DEFAULT_CONFIG };
123
+ return structuredClone(DEFAULT_CONFIG);
17
124
  try {
18
125
  const raw = readFileSync(path, 'utf-8');
19
126
  const parsed = JSON.parse(raw);
20
- return {
21
- version: parsed.version ?? 1,
22
- enabled: parsed.enabled ?? {},
23
- defaults: parsed.defaults ?? 'all-enabled',
127
+ const enabled = normalize_enabled_map(parsed.enabled);
128
+ const defaults = parsed.defaults ?? 'all-disabled';
129
+ const profiles = migrate_legacy_enablement_to_default_profile(normalize_profiles(parsed.profiles), enabled, defaults);
130
+ const current_profile = safe_profile_name(parsed.current_profile ?? 'default');
131
+ const config = {
132
+ version: 3,
133
+ enabled: {},
134
+ defaults: 'all-disabled',
135
+ profiles,
24
136
  };
137
+ if (current_profile)
138
+ config.current_profile = current_profile;
139
+ return config;
25
140
  }
26
141
  catch {
27
- return { ...DEFAULT_CONFIG };
142
+ return structuredClone(DEFAULT_CONFIG);
28
143
  }
29
144
  }
30
145
  export function save_skills_config(config) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,UAAU,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,aAAa,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQ1C,MAAM,cAAc,GAAiB;IACpC,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,cAAc;CACxB,CAAC;AAEF,MAAM,UAAU,eAAe;IAC9B,MAAM,GAAG,GACR,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,kBAAkB;IACjC,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAEpD,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA0B,CAAC;QACxD,OAAO;YACN,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC;YAC5B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;YAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,aAAa;SAC1C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC9B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACtD,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,IAAI,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACxC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;QAC7D,IAAI,EAAE,KAAK;KACX,CAAC,CAAC;IACH,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,MAAc;IAC1D,OAAO,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC/B,MAAoB,EACpB,GAAW;IAEX,IAAI,GAAG,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC,QAAQ,KAAK,aAAa,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import type { ExtensionAPI } from '@mariozechner/pi-coding-agent';
2
1
  export { create_skills_manager } from './manager.js';
3
- export type { ManagedSkill, SkillsManager } from './manager.js';
4
- export default function skills(pi: ExtensionAPI): Promise<void>;
2
+ export type { ManagedSkill, SkillProfile, SkillsManager, } from './manager.js';
3
+ export { default } from './commands.js';