@skillstate/cli 2.0.2 → 2.0.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/README.md +79 -9
- package/dist/commands.d.ts +2 -2
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +27 -19
- package/dist/commands.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/install.d.ts +144 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +535 -0
- package/dist/install.js.map +1 -0
- package/dist/jsonc.d.ts +46 -0
- package/dist/jsonc.d.ts.map +1 -0
- package/dist/jsonc.js +255 -0
- package/dist/jsonc.js.map +1 -0
- package/package.json +4 -2
package/dist/jsonc.js
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
// @non-paper JSONC surgery for host-config edits (additive).
|
|
2
|
+
//
|
|
3
|
+
// OpenCode's `opencode.jsonc` may carry comments and trailing commas, and
|
|
4
|
+
// rewriting the whole document would destroy them. This module scans JSONC
|
|
5
|
+
// text string-aware (quotes, escapes, line and block comments), locates
|
|
6
|
+
// object entries by span, and splices single keys in/out so everything
|
|
7
|
+
// around the edit point is preserved byte-for-byte.
|
|
8
|
+
//
|
|
9
|
+
// Zero dependencies, Node >= 20, ESM.
|
|
10
|
+
function isWs(ch) {
|
|
11
|
+
return ch === ' ' || ch === '\t' || ch === '\n' || ch === '\r';
|
|
12
|
+
}
|
|
13
|
+
/** Skip whitespace and line/block comments starting at `i`. */
|
|
14
|
+
export function skipWsAndComments(text, i) {
|
|
15
|
+
while (i < text.length) {
|
|
16
|
+
const ch = text[i];
|
|
17
|
+
if (isWs(ch)) {
|
|
18
|
+
i += 1;
|
|
19
|
+
}
|
|
20
|
+
else if (ch === '/' && text[i + 1] === '/') {
|
|
21
|
+
i += 2;
|
|
22
|
+
while (i < text.length && text[i] !== '\n') {
|
|
23
|
+
i += 1;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else if (ch === '/' && text[i + 1] === '*') {
|
|
27
|
+
i += 2;
|
|
28
|
+
while (i < text.length && !(text[i] === '*' && text[i + 1] === '/')) {
|
|
29
|
+
i += 1;
|
|
30
|
+
}
|
|
31
|
+
i = Math.min(i + 2, text.length);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return i;
|
|
38
|
+
}
|
|
39
|
+
/** Scan a `"string"` literal starting at `i` (must be `"`); returns the index past the closing quote. */
|
|
40
|
+
function scanString(text, i) {
|
|
41
|
+
i += 1;
|
|
42
|
+
while (i < text.length) {
|
|
43
|
+
const ch = text[i];
|
|
44
|
+
if (ch === '\\') {
|
|
45
|
+
i += 2;
|
|
46
|
+
}
|
|
47
|
+
else if (ch === '"') {
|
|
48
|
+
return i + 1;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
i += 1;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
throw new Error('Unterminated string in JSONC');
|
|
55
|
+
}
|
|
56
|
+
/** Index just past the JSON value starting at `i` (object, array, string, or primitive). */
|
|
57
|
+
function scanValueEnd(text, i) {
|
|
58
|
+
const ch = text[i];
|
|
59
|
+
if (ch === '{' || ch === '[') {
|
|
60
|
+
let depth = 0;
|
|
61
|
+
while (i < text.length) {
|
|
62
|
+
const c = text[i];
|
|
63
|
+
if (c === '"') {
|
|
64
|
+
i = scanString(text, i);
|
|
65
|
+
}
|
|
66
|
+
else if (c === '{' || c === '[') {
|
|
67
|
+
depth += 1;
|
|
68
|
+
i += 1;
|
|
69
|
+
}
|
|
70
|
+
else if (c === '}' || c === ']') {
|
|
71
|
+
depth -= 1;
|
|
72
|
+
i += 1;
|
|
73
|
+
if (depth === 0) {
|
|
74
|
+
return i;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
i += 1;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
throw new Error('Unterminated object/array in JSONC');
|
|
82
|
+
}
|
|
83
|
+
if (ch === '"') {
|
|
84
|
+
return scanString(text, i);
|
|
85
|
+
}
|
|
86
|
+
while (i < text.length) {
|
|
87
|
+
const c = text[i];
|
|
88
|
+
if (c === ',' || c === '}' || c === ']' || isWs(c)) {
|
|
89
|
+
return i;
|
|
90
|
+
}
|
|
91
|
+
i += 1;
|
|
92
|
+
}
|
|
93
|
+
return i;
|
|
94
|
+
}
|
|
95
|
+
/** Scan the object whose `{` sits at `objStart` into a span with entry positions. */
|
|
96
|
+
export function scanObject(text, objStart) {
|
|
97
|
+
let i = skipWsAndComments(text, objStart + 1);
|
|
98
|
+
const entries = [];
|
|
99
|
+
while (i < text.length) {
|
|
100
|
+
if (text[i] === '}') {
|
|
101
|
+
return { braceStart: objStart, braceEnd: i, entries };
|
|
102
|
+
}
|
|
103
|
+
if (text[i] !== '"') {
|
|
104
|
+
throw new Error('Expected object key in JSONC');
|
|
105
|
+
}
|
|
106
|
+
const entryStart = i;
|
|
107
|
+
const keyEnd = scanString(text, i);
|
|
108
|
+
const key = JSON.parse(text.slice(entryStart, keyEnd));
|
|
109
|
+
i = skipWsAndComments(text, keyEnd);
|
|
110
|
+
if (text[i] !== ':') {
|
|
111
|
+
throw new Error('Expected colon after key in JSONC');
|
|
112
|
+
}
|
|
113
|
+
i = skipWsAndComments(text, i + 1);
|
|
114
|
+
const valueStart = i;
|
|
115
|
+
const valueEnd = scanValueEnd(text, i);
|
|
116
|
+
i = skipWsAndComments(text, valueEnd);
|
|
117
|
+
let entryEnd = valueEnd;
|
|
118
|
+
if (text[i] === ',') {
|
|
119
|
+
entryEnd = i + 1;
|
|
120
|
+
i = skipWsAndComments(text, i + 1);
|
|
121
|
+
}
|
|
122
|
+
entries.push({ key, entryStart, entryEnd, valueStart, valueEnd });
|
|
123
|
+
}
|
|
124
|
+
throw new Error('Unterminated object in JSONC');
|
|
125
|
+
}
|
|
126
|
+
/** Span of the document's root object, or null when the root is not an object. */
|
|
127
|
+
export function findTopLevelObject(text) {
|
|
128
|
+
const i = skipWsAndComments(text, 0);
|
|
129
|
+
if (i >= text.length || text[i] !== '{') {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
return scanObject(text, i);
|
|
133
|
+
}
|
|
134
|
+
/** Strip line/block comments and trailing commas so `JSON.parse` can read the rest. */
|
|
135
|
+
export function stripJsonc(text) {
|
|
136
|
+
let out = '';
|
|
137
|
+
let i = 0;
|
|
138
|
+
while (i < text.length) {
|
|
139
|
+
const ch = text[i];
|
|
140
|
+
if (ch === '"') {
|
|
141
|
+
const end = scanString(text, i);
|
|
142
|
+
out += text.slice(i, end);
|
|
143
|
+
i = end;
|
|
144
|
+
}
|
|
145
|
+
else if (ch === '/' && text[i + 1] === '/') {
|
|
146
|
+
i += 2;
|
|
147
|
+
while (i < text.length && text[i] !== '\n') {
|
|
148
|
+
i += 1;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else if (ch === '/' && text[i + 1] === '*') {
|
|
152
|
+
i += 2;
|
|
153
|
+
while (i < text.length && !(text[i] === '*' && text[i + 1] === '/')) {
|
|
154
|
+
i += 1;
|
|
155
|
+
}
|
|
156
|
+
i = Math.min(i + 2, text.length);
|
|
157
|
+
}
|
|
158
|
+
else if (ch === ',') {
|
|
159
|
+
const next = skipWsAndComments(text, i + 1);
|
|
160
|
+
if (next >= text.length || text[next] === '}' || text[next] === ']') {
|
|
161
|
+
i += 1;
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
out += ch;
|
|
165
|
+
i += 1;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
out += ch;
|
|
170
|
+
i += 1;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return out;
|
|
174
|
+
}
|
|
175
|
+
/** Parse JSONC text (comments + trailing commas tolerated) via JSON.parse. */
|
|
176
|
+
export function parseJsonc(text) {
|
|
177
|
+
return JSON.parse(stripJsonc(text));
|
|
178
|
+
}
|
|
179
|
+
/** Leading whitespace of the line containing `index`. */
|
|
180
|
+
function lineIndentAt(text, index) {
|
|
181
|
+
const lineStart = text.lastIndexOf('\n', index - 1) + 1;
|
|
182
|
+
let indent = '';
|
|
183
|
+
let j = lineStart;
|
|
184
|
+
while (j < text.length && (text[j] === ' ' || text[j] === '\t')) {
|
|
185
|
+
indent += text[j];
|
|
186
|
+
j += 1;
|
|
187
|
+
}
|
|
188
|
+
return indent;
|
|
189
|
+
}
|
|
190
|
+
/** Indent for entries inside `span`: the first entry's indent, or the closing brace's indent + two spaces. */
|
|
191
|
+
function entryIndent(text, span) {
|
|
192
|
+
if (span.entries.length > 0) {
|
|
193
|
+
return lineIndentAt(text, span.entries[0].entryStart);
|
|
194
|
+
}
|
|
195
|
+
return `${lineIndentAt(text, span.braceEnd)} `;
|
|
196
|
+
}
|
|
197
|
+
/** Re-indent a pretty-printed JSON block so its first line stays in place. */
|
|
198
|
+
function reindent(json, indent) {
|
|
199
|
+
const lines = json.split('\n');
|
|
200
|
+
return [lines[0], ...lines.slice(1).map((l) => indent + l)].join('\n');
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Splice one `"key": <valueJson>` entry into the object at `objStart`,
|
|
204
|
+
* preserving all surrounding text (comments included). Idempotent: when the
|
|
205
|
+
* key already exists the text is returned unchanged.
|
|
206
|
+
*/
|
|
207
|
+
export function insertObjectEntry(text, objStart, key, valueJson) {
|
|
208
|
+
const span = scanObject(text, objStart);
|
|
209
|
+
if (span.entries.some((e) => e.key === key)) {
|
|
210
|
+
return { text, changed: false };
|
|
211
|
+
}
|
|
212
|
+
const indent = entryIndent(text, span);
|
|
213
|
+
const body = reindent(`"${key}": ${valueJson}`, indent);
|
|
214
|
+
if (span.entries.length === 0) {
|
|
215
|
+
const closeIndent = lineIndentAt(text, span.braceEnd);
|
|
216
|
+
const inserted = `\n${indent}${body}\n${closeIndent}`;
|
|
217
|
+
return {
|
|
218
|
+
text: text.slice(0, span.braceStart + 1) + inserted + text.slice(span.braceEnd),
|
|
219
|
+
changed: true,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
const inserted = `\n${indent}${body},`;
|
|
223
|
+
return {
|
|
224
|
+
text: text.slice(0, span.braceStart + 1) + inserted + text.slice(span.braceStart + 1),
|
|
225
|
+
changed: true,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Splice the `"key"` entry out of the object at `objStart`, keeping the rest
|
|
230
|
+
* valid (the entry's trailing comma, or the previous entry's comma for a last
|
|
231
|
+
* entry, goes with it). Idempotent: a missing key returns the text unchanged.
|
|
232
|
+
*/
|
|
233
|
+
export function removeObjectEntry(text, objStart, key) {
|
|
234
|
+
const span = scanObject(text, objStart);
|
|
235
|
+
const entry = span.entries.find((e) => e.key === key);
|
|
236
|
+
if (entry === undefined) {
|
|
237
|
+
return { text, changed: false };
|
|
238
|
+
}
|
|
239
|
+
let start = entry.entryStart;
|
|
240
|
+
let end = entry.entryEnd;
|
|
241
|
+
if (end === entry.valueEnd) {
|
|
242
|
+
let j = start - 1;
|
|
243
|
+
while (j >= 0 && isWs(text[j])) {
|
|
244
|
+
j -= 1;
|
|
245
|
+
}
|
|
246
|
+
if (j >= 0 && text[j] === ',') {
|
|
247
|
+
start = j;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return {
|
|
251
|
+
text: text.slice(0, start) + text.slice(end),
|
|
252
|
+
changed: true,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=jsonc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonc.js","sourceRoot":"","sources":["../src/jsonc.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skillstate/cli",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "skillstate CLI — init | run | report.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -25,6 +25,8 @@
|
|
|
25
25
|
},
|
|
26
26
|
"license": "MIT",
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@skillstate/core": "^2.0.0"
|
|
28
|
+
"@skillstate/core": "^2.0.0",
|
|
29
|
+
"@skillstate/mcp": "^2.0.0",
|
|
30
|
+
"@skillstate/opencode": "^2.0.0"
|
|
29
31
|
}
|
|
30
32
|
}
|