@skillbase/spm 0.1.3 → 0.1.4
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/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.1.4] - 2026-03-14
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- **`connect`/`disconnect` now preserve JSONC comments and formatting** — switched from `JSON.parse`/`JSON.stringify` to `jsonc-parser` (`modify`/`applyEdits`). Previously, running `spm connect zed` on a `settings.json` with comments or trailing commas would silently drop all existing settings.
|
|
10
|
+
|
|
5
11
|
### Changed
|
|
6
12
|
|
|
7
13
|
- **Embedded skill index in MCP instructions** — at server startup, a compact pipe-delimited index (`name|tokens|trigger|tags|file_patterns`) is appended to MCP instructions so the model sees all available skills immediately without calling `skill_list`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/connect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/connect.ts"],"names":[],"mappings":"AAoEA,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
|
|
@@ -2,7 +2,11 @@ import fs from "node:fs/promises";
|
|
|
2
2
|
import { realpathSync } from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import os from "node:os";
|
|
5
|
+
import { parse, modify, applyEdits } from "jsonc-parser";
|
|
5
6
|
const MCP_SERVER_KEY = "spm";
|
|
7
|
+
const JSONC_MODIFY_OPTIONS = {
|
|
8
|
+
formattingOptions: { tabSize: 2, insertSpaces: true },
|
|
9
|
+
};
|
|
6
10
|
function getClients() {
|
|
7
11
|
const home = os.homedir();
|
|
8
12
|
const platform = process.platform;
|
|
@@ -35,18 +39,18 @@ function getSkillsBin() {
|
|
|
35
39
|
}
|
|
36
40
|
return "spm";
|
|
37
41
|
}
|
|
38
|
-
async function
|
|
42
|
+
async function readRawConfig(filePath) {
|
|
39
43
|
try {
|
|
40
|
-
|
|
41
|
-
return JSON.parse(raw);
|
|
44
|
+
return await fs.readFile(filePath, "utf-8");
|
|
42
45
|
}
|
|
43
46
|
catch {
|
|
44
|
-
return {};
|
|
47
|
+
return "{}";
|
|
45
48
|
}
|
|
46
49
|
}
|
|
47
|
-
async function
|
|
50
|
+
async function writeRawConfig(filePath, content) {
|
|
48
51
|
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
49
|
-
|
|
52
|
+
const normalized = content.endsWith("\n") ? content : content + "\n";
|
|
53
|
+
await fs.writeFile(filePath, normalized, "utf-8");
|
|
50
54
|
}
|
|
51
55
|
export async function connectCommand(client) {
|
|
52
56
|
const clients = getClients();
|
|
@@ -55,19 +59,21 @@ export async function connectCommand(client) {
|
|
|
55
59
|
console.error(`Unknown client "${client}". Supported: ${Object.keys(clients).join(", ")}`);
|
|
56
60
|
process.exit(1);
|
|
57
61
|
}
|
|
58
|
-
|
|
59
|
-
const
|
|
62
|
+
let content = await readRawConfig(config.configPath);
|
|
63
|
+
const data = parse(content);
|
|
64
|
+
const section = data[config.serverSection] ?? {};
|
|
60
65
|
if (section[MCP_SERVER_KEY]) {
|
|
61
66
|
console.log(`Already connected to ${config.name}.`);
|
|
62
67
|
console.log(` Config: ${config.configPath}`);
|
|
63
68
|
return;
|
|
64
69
|
}
|
|
65
|
-
|
|
70
|
+
const serverValue = {
|
|
66
71
|
command: process.execPath,
|
|
67
72
|
args: [getSkillsBin(), "serve"],
|
|
68
73
|
};
|
|
69
|
-
|
|
70
|
-
|
|
74
|
+
const edits = modify(content, [config.serverSection, MCP_SERVER_KEY], serverValue, JSONC_MODIFY_OPTIONS);
|
|
75
|
+
content = applyEdits(content, edits);
|
|
76
|
+
await writeRawConfig(config.configPath, content);
|
|
71
77
|
console.log(`Connected to ${config.name}.`);
|
|
72
78
|
console.log(` Config: ${config.configPath}`);
|
|
73
79
|
console.log(` Restart ${config.name} to activate.`);
|
|
@@ -79,15 +85,17 @@ export async function disconnectCommand(client) {
|
|
|
79
85
|
console.error(`Unknown client "${client}". Supported: ${Object.keys(clients).join(", ")}`);
|
|
80
86
|
process.exit(1);
|
|
81
87
|
}
|
|
82
|
-
|
|
83
|
-
const
|
|
88
|
+
let content = await readRawConfig(config.configPath);
|
|
89
|
+
const data = parse(content);
|
|
90
|
+
const section = data[config.serverSection] ?? {};
|
|
84
91
|
if (!section[MCP_SERVER_KEY]) {
|
|
85
92
|
console.log(`Not connected to ${config.name}.`);
|
|
86
93
|
return;
|
|
87
94
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
95
|
+
const edits = modify(content, [config.serverSection, MCP_SERVER_KEY], undefined, // undefined = remove the key
|
|
96
|
+
JSONC_MODIFY_OPTIONS);
|
|
97
|
+
content = applyEdits(content, edits);
|
|
98
|
+
await writeRawConfig(config.configPath, content);
|
|
91
99
|
console.log(`Disconnected from ${config.name}.`);
|
|
92
100
|
console.log(` Config: ${config.configPath}`);
|
|
93
101
|
console.log(` Restart ${config.name} to apply.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/cli/commands/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/cli/commands/connect.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skillbase/spm",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Package manager for AI skills — discover, install, and publish reusable prompts and tools",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": "https://github.com/skillbase/spm",
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"test": "vitest run",
|
|
38
38
|
"test:watch": "vitest",
|
|
39
39
|
"test:coverage": "vitest run --coverage",
|
|
40
|
+
"version": "bash scripts/release-changelog.sh",
|
|
40
41
|
"prepublishOnly": "npm run build && npm test"
|
|
41
42
|
},
|
|
42
43
|
"engines": {
|
|
@@ -50,6 +51,7 @@
|
|
|
50
51
|
"@skillbase/spm": "^0.1.1",
|
|
51
52
|
"ajv": "^8.18.0",
|
|
52
53
|
"commander": "^14.0.3",
|
|
54
|
+
"jsonc-parser": "^3.3.1",
|
|
53
55
|
"semver": "^7.7.4",
|
|
54
56
|
"tar-stream": "^3.1.8"
|
|
55
57
|
},
|