@spences10/pi-skills 0.0.1 → 0.0.2
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/importer.d.ts +1 -0
- package/dist/importer.js +35 -2
- package/dist/importer.js.map +1 -1
- package/package.json +4 -4
package/dist/importer.d.ts
CHANGED
package/dist/importer.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import { cpSync, existsSync, mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync, } from 'node:fs';
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
|
-
import { dirname, join, relative, resolve } from 'node:path';
|
|
4
|
+
import { dirname, isAbsolute, join, relative, resolve, } from 'node:path';
|
|
5
5
|
import { IMPORT_METADATA_FILE, } from './scanner.js';
|
|
6
6
|
const IMPORT_METADATA_VERSION = 1;
|
|
7
7
|
function get_managed_skills_dir() {
|
|
@@ -50,6 +50,39 @@ function read_metadata(base_dir) {
|
|
|
50
50
|
function write_metadata(base_dir, metadata) {
|
|
51
51
|
writeFileSync(join(base_dir, IMPORT_METADATA_FILE), JSON.stringify(metadata, null, '\t') + '\n', { mode: 0o600 });
|
|
52
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
|
+
}
|
|
53
86
|
function replace_directory(source_dir, dest_dir) {
|
|
54
87
|
const parent_dir = dirname(dest_dir);
|
|
55
88
|
ensure_dir(parent_dir);
|
|
@@ -74,7 +107,7 @@ export function import_external_skill(skill) {
|
|
|
74
107
|
}
|
|
75
108
|
const managed_root = get_managed_skills_dir();
|
|
76
109
|
ensure_dir(managed_root);
|
|
77
|
-
const skill_dir =
|
|
110
|
+
const skill_dir = resolve_managed_skill_dir(managed_root, skill.name);
|
|
78
111
|
const existing = existsSync(skill_dir);
|
|
79
112
|
if (existing) {
|
|
80
113
|
const existing_stat = statSync(skill_dir);
|
package/dist/importer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importer.js","sourceRoot":"","sources":["../src/importer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACN,MAAM,EACN,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,aAAa,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"importer.js","sourceRoot":"","sources":["../src/importer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spences10/pi-skills",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "Pi extension for managing and importing Agent Skills from Pi, Claude, and plugin sources",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent-skills",
|
|
@@ -32,12 +32,12 @@
|
|
|
32
32
|
"access": "public"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@mariozechner/pi-coding-agent": "^0.70.
|
|
36
|
-
"@mariozechner/pi-tui": "^0.70.
|
|
35
|
+
"@mariozechner/pi-coding-agent": "^0.70.5",
|
|
36
|
+
"@mariozechner/pi-tui": "^0.70.5"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^25.6.0",
|
|
40
|
-
"typescript": "^
|
|
40
|
+
"typescript": "^6.0.0",
|
|
41
41
|
"vitest": "^4.1.5"
|
|
42
42
|
},
|
|
43
43
|
"engines": {
|