@shidesheng0218/dsh-plugin-lint 0.1.0 → 0.4.0
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/NOTICE +1 -1
- package/README.md +515 -81
- package/bin/dsh-plugin-analyze.mjs +378 -0
- package/bin/dsh-plugin-lint.mjs +315 -27
- package/bin/dsh-plugin-matrix.mjs +78 -0
- package/bin/dsh-plugin-upgrade-plan.mjs +180 -0
- package/package.json +12 -4
- package/schema/dsh-manifest.schema.json +134 -0
- package/scripts/lib/probe.mjs +28 -385
- package/scripts/probe-boot.mjs +103 -37
- package/src/composition.js +1 -0
- package/src/core/baseline.js +98 -0
- package/src/core/changed.js +41 -0
- package/src/core/load.js +145 -0
- package/src/core/mask.js +207 -0
- package/src/core/pack.js +95 -0
- package/src/core/packlist.js +186 -0
- package/src/core/peer.js +39 -0
- package/src/core/profile-scan.js +121 -0
- package/src/core/report.js +174 -0
- package/src/core/rules.js +581 -0
- package/src/core/semver.js +192 -0
- package/src/core/tarball.js +90 -0
- package/src/data/event-types.json +111 -9
- package/src/experimental/conflicts.js +315 -0
- package/src/experimental/index.js +4 -0
- package/src/experimental/performance.js +515 -0
- package/src/experimental/security.js +462 -0
- package/src/index.js +15 -17
- package/src/load.js +1 -116
- package/src/mask.js +1 -156
- package/src/matrix/cache.js +19 -0
- package/src/matrix/cell.js +79 -0
- package/src/matrix/cells.js +58 -0
- package/src/matrix/conflicts.js +210 -0
- package/src/matrix/export.js +155 -0
- package/src/matrix/index.js +71 -0
- package/src/matrix/manifest.js +17 -0
- package/src/matrix/migrate.js +41 -0
- package/src/matrix/run.js +241 -0
- package/src/matrix/sanitize.js +42 -0
- package/src/matrix/schema.js +178 -0
- package/src/matrix/site.js +61 -0
- package/src/matrix/sync.js +72 -0
- package/src/matrix/verify.js +152 -0
- package/src/performance.js +1 -0
- package/src/probe/artifact-resolver.js +161 -0
- package/src/probe/classify.js +8 -0
- package/src/probe/dsh-adapter.js +212 -0
- package/src/probe/environment/docker.js +270 -0
- package/src/probe/environment/host-unsafe.js +39 -0
- package/src/probe/environment/materialize.js +22 -0
- package/src/probe/environment.js +50 -0
- package/src/probe/installed-artifact.js +17 -0
- package/src/probe/probe.js +278 -0
- package/src/report.js +1 -79
- package/src/rules.js +1 -379
- package/src/security.js +1 -0
- package/src/shared/errors.js +7 -0
- package/src/shared/hash.js +31 -0
- package/src/shared/status.js +12 -0
- package/src/shared/validate.js +14 -0
- package/src/shared/version.js +4 -0
- package/src/upgrade/compatibility.js +14 -0
- package/src/upgrade/planner.js +119 -0
- package/src/upgrade/profile.js +82 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A deliberately small semver range evaluator for DSH peer admission.
|
|
3
|
+
*
|
|
4
|
+
* The host calls `semver.satisfies(runtime, range, { includePrerelease: true })`
|
|
5
|
+
* (dsh-app-boot README: "prereleases participate in range matching"). This
|
|
6
|
+
* module implements the subset of node-semver that appears in plugin peer
|
|
7
|
+
* declarations: exact/partial versions, = > >= < <=, ^, ~, hyphen ranges, x/*,
|
|
8
|
+
* and ||. Anything outside that grammar returns 'unknown' instead of guessing:
|
|
9
|
+
* a rule that cannot decide must not produce an error.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const VERSION_RE = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+([0-9A-Za-z.-]+))?$/;
|
|
13
|
+
const PARTIAL_RE = /^(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:-([0-9A-Za-z.-]+))?$/;
|
|
14
|
+
|
|
15
|
+
export function parseVersion(text) {
|
|
16
|
+
const match = VERSION_RE.exec(String(text ?? '').trim());
|
|
17
|
+
if (!match) return null;
|
|
18
|
+
return {
|
|
19
|
+
major: Number(match[1]),
|
|
20
|
+
minor: Number(match[2]),
|
|
21
|
+
patch: Number(match[3]),
|
|
22
|
+
prerelease: match[4] ? match[4].split('.') : [],
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function compareIdentifiers(a, b) {
|
|
27
|
+
const aNumeric = /^\d+$/.test(a);
|
|
28
|
+
const bNumeric = /^\d+$/.test(b);
|
|
29
|
+
if (aNumeric && bNumeric) return Math.sign(Number(a) - Number(b));
|
|
30
|
+
if (aNumeric) return -1;
|
|
31
|
+
if (bNumeric) return 1;
|
|
32
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function compareVersions(a, b) {
|
|
36
|
+
for (const key of ['major', 'minor', 'patch']) {
|
|
37
|
+
if (a[key] !== b[key]) return Math.sign(a[key] - b[key]);
|
|
38
|
+
}
|
|
39
|
+
if (a.prerelease.length === 0 && b.prerelease.length === 0) return 0;
|
|
40
|
+
if (a.prerelease.length === 0) return 1;
|
|
41
|
+
if (b.prerelease.length === 0) return -1;
|
|
42
|
+
for (let index = 0; index < Math.max(a.prerelease.length, b.prerelease.length); index += 1) {
|
|
43
|
+
if (a.prerelease[index] === undefined) return -1;
|
|
44
|
+
if (b.prerelease[index] === undefined) return 1;
|
|
45
|
+
const diff = compareIdentifiers(a.prerelease[index], b.prerelease[index]);
|
|
46
|
+
if (diff !== 0) return diff;
|
|
47
|
+
}
|
|
48
|
+
return 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function version(major, minor = 0, patch = 0, prerelease = []) {
|
|
52
|
+
return { major, minor, patch, prerelease };
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function parsePartial(text) {
|
|
56
|
+
const match = PARTIAL_RE.exec(text);
|
|
57
|
+
if (!match) return null;
|
|
58
|
+
return {
|
|
59
|
+
major: Number(match[1]),
|
|
60
|
+
minor: match[2] === undefined ? undefined : Number(match[2]),
|
|
61
|
+
patch: match[3] === undefined ? undefined : Number(match[3]),
|
|
62
|
+
prerelease: match[4] ? match[4].split('.') : [],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function floor(partial) {
|
|
67
|
+
return version(partial.major, partial.minor ?? 0, partial.patch ?? 0, partial.prerelease);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function nextMajor(partial) { return version(partial.major + 1, 0, 0); }
|
|
71
|
+
function nextMinor(partial) { return version(partial.major, (partial.minor ?? 0) + 1, 0); }
|
|
72
|
+
function nextPatch(partial) { return version(partial.major, partial.minor ?? 0, (partial.patch ?? 0) + 1); }
|
|
73
|
+
|
|
74
|
+
function caretBounds(partial) {
|
|
75
|
+
const lower = { op: '>=', version: floor(partial) };
|
|
76
|
+
let upper;
|
|
77
|
+
if (partial.major > 0) upper = nextMajor(partial);
|
|
78
|
+
else if ((partial.minor ?? 0) > 0) upper = nextMinor(partial);
|
|
79
|
+
else upper = nextPatch(partial);
|
|
80
|
+
return [lower, { op: '<', version: upper }];
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function tildeBounds(partial) {
|
|
84
|
+
const lower = { op: '>=', version: floor(partial) };
|
|
85
|
+
const upper = partial.minor === undefined ? nextMajor(partial) : nextMinor(partial);
|
|
86
|
+
return [lower, { op: '<', version: upper }];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function bareBounds(partial) {
|
|
90
|
+
if (partial.major === undefined) return [];
|
|
91
|
+
// A full version is exact; a partial one is the usual x-range.
|
|
92
|
+
if (partial.minor !== undefined && partial.patch !== undefined) {
|
|
93
|
+
return [{ op: '=', version: floor(partial) }];
|
|
94
|
+
}
|
|
95
|
+
const lower = { op: '>=', version: floor(partial) };
|
|
96
|
+
const upper = partial.minor === undefined ? nextMajor(partial) : nextMinor(partial);
|
|
97
|
+
return [lower, { op: '<', version: upper }];
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function operatorBounds(op, partial) {
|
|
101
|
+
if (partial.major === undefined) return [];
|
|
102
|
+
const exact = floor(partial);
|
|
103
|
+
if (op === '>=') return [{ op: '>=', version: exact }];
|
|
104
|
+
if (op === '>') {
|
|
105
|
+
if (partial.patch !== undefined) return [{ op: '>', version: exact }];
|
|
106
|
+
if (partial.minor !== undefined) return [{ op: '>=', version: nextMinor(partial) }];
|
|
107
|
+
return [{ op: '>=', version: nextMajor(partial) }];
|
|
108
|
+
}
|
|
109
|
+
if (op === '<') return [{ op: '<', version: exact }];
|
|
110
|
+
if (op === '<=') {
|
|
111
|
+
if (partial.patch !== undefined) return [{ op: '<=', version: exact }];
|
|
112
|
+
if (partial.minor !== undefined) return [{ op: '<', version: nextMinor(partial) }];
|
|
113
|
+
return [{ op: '<', version: nextMajor(partial) }];
|
|
114
|
+
}
|
|
115
|
+
if (op === '=') return bareBounds(partial);
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function parseComparator(token) {
|
|
120
|
+
if (token === '*' || token === 'x' || token === 'X') return [];
|
|
121
|
+
const match = /^(>=|<=|>|<|=|\^|~)?\s*(.+)$/.exec(token);
|
|
122
|
+
if (!match) return null;
|
|
123
|
+
const op = match[1] ?? '';
|
|
124
|
+
const text = match[2];
|
|
125
|
+
const partial = parsePartial(text);
|
|
126
|
+
if (!partial) return null;
|
|
127
|
+
if (op === '^') return caretBounds(partial);
|
|
128
|
+
if (op === '~') return tildeBounds(partial);
|
|
129
|
+
if (op === '') return bareBounds(partial);
|
|
130
|
+
return operatorBounds(op, partial);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
function parseHyphen(left, right) {
|
|
134
|
+
const a = parsePartial(left);
|
|
135
|
+
const b = parsePartial(right);
|
|
136
|
+
if (!a || !b || a.major === undefined || b.major === undefined) return null;
|
|
137
|
+
const bounds = [{ op: '>=', version: floor(a) }];
|
|
138
|
+
if (b.patch !== undefined) bounds.push({ op: '<=', version: floor(b) });
|
|
139
|
+
else if (b.minor !== undefined) bounds.push({ op: '<', version: nextMinor(b) });
|
|
140
|
+
else bounds.push({ op: '<', version: nextMajor(b) });
|
|
141
|
+
return bounds;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function parseAlternative(text) {
|
|
145
|
+
const trimmed = text.trim();
|
|
146
|
+
if (trimmed === '') return null;
|
|
147
|
+
const hyphen = /^(\S+)\s+-\s+(\S+)$/.exec(trimmed);
|
|
148
|
+
if (hyphen) return parseHyphen(hyphen[1], hyphen[2]);
|
|
149
|
+
const tokens = trimmed.split(/\s+/);
|
|
150
|
+
const bounds = [];
|
|
151
|
+
for (const token of tokens) {
|
|
152
|
+
const parsed = parseComparator(token);
|
|
153
|
+
if (parsed === null) return null;
|
|
154
|
+
bounds.push(...parsed);
|
|
155
|
+
}
|
|
156
|
+
return bounds;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/** true / false / null (null = outside the supported grammar). */
|
|
160
|
+
export function evaluateRange(text) {
|
|
161
|
+
const raw = String(text ?? '').trim();
|
|
162
|
+
if (raw === '' || /^workspace:/.test(raw)) return null;
|
|
163
|
+
const alternatives = raw.split('||').map(parseAlternative);
|
|
164
|
+
if (alternatives.some((alt) => alt === null)) return null;
|
|
165
|
+
return alternatives;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export function satisfies(versionText, rangeText) {
|
|
169
|
+
const target = parseVersion(versionText);
|
|
170
|
+
if (!target) return null;
|
|
171
|
+
const alternatives = evaluateRange(rangeText);
|
|
172
|
+
if (alternatives === null) return null;
|
|
173
|
+
for (const bounds of alternatives) {
|
|
174
|
+
let ok = true;
|
|
175
|
+
for (const bound of bounds) {
|
|
176
|
+
const cmp = compareVersions(target, bound.version);
|
|
177
|
+
const pass = bound.op === '>' ? cmp > 0
|
|
178
|
+
: bound.op === '>=' ? cmp >= 0
|
|
179
|
+
: bound.op === '<' ? cmp < 0
|
|
180
|
+
: bound.op === '<=' ? cmp <= 0
|
|
181
|
+
: cmp === 0;
|
|
182
|
+
if (!pass) { ok = false; break; }
|
|
183
|
+
}
|
|
184
|
+
if (ok) return true;
|
|
185
|
+
}
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/** Whether a range uses only the supported grammar. */
|
|
190
|
+
export function isDecidableRange(text) {
|
|
191
|
+
return evaluateRange(text) !== null;
|
|
192
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join, normalize } from 'node:path';
|
|
3
|
+
import { gunzipSync } from 'node:zlib';
|
|
4
|
+
|
|
5
|
+
const BLOCK = 512;
|
|
6
|
+
const MAX_ENTRIES = 10000;
|
|
7
|
+
const MAX_BYTES = 256 * 1024 * 1024;
|
|
8
|
+
|
|
9
|
+
function text(buffer, start, length) {
|
|
10
|
+
return buffer.subarray(start, start + length).toString('utf8').replace(/\0.*$/, '').trim();
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function safeRelative(name) {
|
|
14
|
+
const normalized = String(name).replace(/\\/g, '/').replace(/^\/+/, '');
|
|
15
|
+
if (!normalized || normalized.split('/').includes('..')) {
|
|
16
|
+
throw new Error('tarball entry escapes the extraction directory: ' + name);
|
|
17
|
+
}
|
|
18
|
+
return normalize(normalized);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function parsePax(body) {
|
|
22
|
+
const records = {};
|
|
23
|
+
let offset = 0;
|
|
24
|
+
while (offset < body.length) {
|
|
25
|
+
const space = body.indexOf(0x20, offset);
|
|
26
|
+
if (space < 0) break;
|
|
27
|
+
const length = Number(body.subarray(offset, space).toString('ascii'));
|
|
28
|
+
if (!Number.isFinite(length) || length <= 0) break;
|
|
29
|
+
const record = body.subarray(space + 1, offset + length - 1).toString('utf8');
|
|
30
|
+
const equals = record.indexOf('=');
|
|
31
|
+
if (equals > 0) records[record.slice(0, equals)] = record.slice(equals + 1);
|
|
32
|
+
offset += length;
|
|
33
|
+
}
|
|
34
|
+
return records;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Extract an npm tarball without dependencies. Only regular files and
|
|
39
|
+
* directories are written; symlinks, hardlinks, and path traversal are
|
|
40
|
+
* rejected. Returns the extracted file list.
|
|
41
|
+
*/
|
|
42
|
+
export function extractTarball(buffer, dest) {
|
|
43
|
+
const tar = gunzipSync(buffer);
|
|
44
|
+
let offset = 0;
|
|
45
|
+
let entries = 0;
|
|
46
|
+
let bytes = 0;
|
|
47
|
+
let pax = {};
|
|
48
|
+
let longName;
|
|
49
|
+
const files = [];
|
|
50
|
+
while (offset + BLOCK <= tar.length) {
|
|
51
|
+
const header = tar.subarray(offset, offset + BLOCK);
|
|
52
|
+
if (header.every((byte) => byte === 0)) break;
|
|
53
|
+
const name = text(header, 0, 100);
|
|
54
|
+
const size = parseInt(text(header, 124, 12) || '0', 8);
|
|
55
|
+
const type = String.fromCharCode(header[156] || 48);
|
|
56
|
+
const prefix = text(header, 345, 155);
|
|
57
|
+
const dataStart = offset + BLOCK;
|
|
58
|
+
const dataEnd = dataStart + size;
|
|
59
|
+
if (dataEnd > tar.length) throw new Error('tarball entry extends past the archive: ' + name);
|
|
60
|
+
const body = tar.subarray(dataStart, dataEnd);
|
|
61
|
+
offset = dataStart + Math.ceil(size / BLOCK) * BLOCK;
|
|
62
|
+
entries += 1;
|
|
63
|
+
if (entries > MAX_ENTRIES) throw new Error('tarball has too many entries');
|
|
64
|
+
bytes += size;
|
|
65
|
+
if (bytes > MAX_BYTES) throw new Error('tarball expands beyond the size limit');
|
|
66
|
+
|
|
67
|
+
if (type === 'x' || type === 'g') { pax = { ...pax, ...parsePax(body) }; continue; }
|
|
68
|
+
if (type === 'L') { longName = text(body, 0, body.length); continue; }
|
|
69
|
+
|
|
70
|
+
const rawPath = longName || pax.path || (prefix ? prefix + '/' + name : name);
|
|
71
|
+
longName = undefined;
|
|
72
|
+
pax = {};
|
|
73
|
+
|
|
74
|
+
if (type === '5') {
|
|
75
|
+
mkdirSync(join(dest, safeRelative(rawPath)), { recursive: true });
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (type === '0' || type === '\0' || type === '7') {
|
|
79
|
+
const path = join(dest, safeRelative(rawPath));
|
|
80
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
81
|
+
writeFileSync(path, body);
|
|
82
|
+
files.push(safeRelative(rawPath));
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (type === '1' || type === '2') {
|
|
86
|
+
throw new Error('tarball contains a link: ' + rawPath);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return files;
|
|
90
|
+
}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$comment": "Session event types observed in the official DeepSeek Harness packages. Regenerate with scripts/harvest-event-types.mjs against an installed DSH.",
|
|
3
3
|
"source": "DeepSeek Harness (MIT); harvested from @deepseek-ai/* lib bundles",
|
|
4
|
-
"harvestedAt": "2026-
|
|
5
|
-
"filesScanned":
|
|
6
|
-
"appendSiteTypes":
|
|
7
|
-
"observedTypes":
|
|
4
|
+
"harvestedAt": "2026-11-06",
|
|
5
|
+
"filesScanned": 472,
|
|
6
|
+
"appendSiteTypes": 46,
|
|
7
|
+
"observedTypes": 379,
|
|
8
8
|
"types": [
|
|
9
|
+
"a/b",
|
|
10
|
+
"account/watch",
|
|
9
11
|
"agent-loop/config-start-failed",
|
|
10
12
|
"agent-preset/conflict",
|
|
11
13
|
"agent-preset/invalid",
|
|
@@ -33,13 +35,28 @@
|
|
|
33
35
|
"approval/request",
|
|
34
36
|
"assistant/attempt",
|
|
35
37
|
"assistant/chunk",
|
|
38
|
+
"assistant/live",
|
|
36
39
|
"assistant/live-chunk",
|
|
37
40
|
"assistant/message",
|
|
38
41
|
"authorization/settled",
|
|
42
|
+
"client-console/disable",
|
|
43
|
+
"client-console/enable",
|
|
44
|
+
"client-console/event",
|
|
45
|
+
"client-runtime/cancel",
|
|
46
|
+
"client-runtime/get-properties",
|
|
47
|
+
"client-runtime/request",
|
|
48
|
+
"client-runtime/response",
|
|
49
|
+
"client-runtime/response-acknowledged",
|
|
50
|
+
"client-runtime/session-closed",
|
|
51
|
+
"client-sources/request",
|
|
52
|
+
"client-sources/response",
|
|
53
|
+
"client-sources/session-closed",
|
|
39
54
|
"command/done",
|
|
40
55
|
"command/executed",
|
|
41
56
|
"command/run",
|
|
42
57
|
"commands/change",
|
|
58
|
+
"commands/execute",
|
|
59
|
+
"commands/list",
|
|
43
60
|
"compact/end",
|
|
44
61
|
"compact/prune",
|
|
45
62
|
"compact/start",
|
|
@@ -51,17 +68,20 @@
|
|
|
51
68
|
"compaction/summary-error",
|
|
52
69
|
"connection/request",
|
|
53
70
|
"connection/reset",
|
|
71
|
+
"cordis-tree/get",
|
|
54
72
|
"cordis/dynamic-package",
|
|
55
73
|
"cordis/dynamic-retract",
|
|
56
74
|
"cordis/inspect-query",
|
|
57
75
|
"cordis/inspect-query-resolved",
|
|
58
76
|
"cordis/request-run",
|
|
59
77
|
"cordis/request-run-resolved",
|
|
78
|
+
"cordis/tree",
|
|
60
79
|
"credential/rejected",
|
|
61
80
|
"credentials/describe",
|
|
62
81
|
"credentials/record-updated",
|
|
63
82
|
"credentials/reference-updated",
|
|
64
83
|
"credentials/set",
|
|
84
|
+
"credentials/unset",
|
|
65
85
|
"deepseek-account/model-sign-in-required",
|
|
66
86
|
"deepseek-account/session-expired",
|
|
67
87
|
"deepseek-account/signed-out",
|
|
@@ -74,6 +94,7 @@
|
|
|
74
94
|
"document-render/failed",
|
|
75
95
|
"domain/changed",
|
|
76
96
|
"dsh-commands/brand",
|
|
97
|
+
"dsh-experimental-inspector/0",
|
|
77
98
|
"dsh-llm/brand",
|
|
78
99
|
"ecdsa/rsa",
|
|
79
100
|
"eventsource-parser/stream",
|
|
@@ -83,6 +104,13 @@
|
|
|
83
104
|
"feedback/message-delete",
|
|
84
105
|
"feedback/message-put",
|
|
85
106
|
"feedback/record",
|
|
107
|
+
"fetch/end",
|
|
108
|
+
"fetch/error",
|
|
109
|
+
"fetch/request-body-chunk",
|
|
110
|
+
"fetch/request-body-end",
|
|
111
|
+
"fetch/response",
|
|
112
|
+
"fetch/response-body-chunk",
|
|
113
|
+
"fetch/start",
|
|
86
114
|
"fmwvqz/sqb",
|
|
87
115
|
"fmwvqz/sqlefppjlmbopmf",
|
|
88
116
|
"foo/bar",
|
|
@@ -100,12 +128,14 @@
|
|
|
100
128
|
"gateway/context-unavailable",
|
|
101
129
|
"gateway/definition-unavailable",
|
|
102
130
|
"gateway/input-invalid",
|
|
131
|
+
"gateway/interactions-forbidden",
|
|
103
132
|
"gateway/internal",
|
|
104
133
|
"gateway/invocation-unavailable",
|
|
105
134
|
"gateway/lookup-failed",
|
|
106
135
|
"gateway/lookup-not-found",
|
|
107
136
|
"gateway/lookup-unavailable",
|
|
108
137
|
"gateway/method-unavailable",
|
|
138
|
+
"gateway/peer-disposed",
|
|
109
139
|
"gateway/protocol",
|
|
110
140
|
"gateway/provider-mismatch",
|
|
111
141
|
"gateway/result-invalid",
|
|
@@ -115,6 +145,13 @@
|
|
|
115
145
|
"goal/activation-changed",
|
|
116
146
|
"goal/change",
|
|
117
147
|
"goal/changed",
|
|
148
|
+
"goals/clear",
|
|
149
|
+
"goals/complete",
|
|
150
|
+
"goals/create",
|
|
151
|
+
"goals/edit",
|
|
152
|
+
"goals/get",
|
|
153
|
+
"goals/pause",
|
|
154
|
+
"goals/resume",
|
|
118
155
|
"hmr/change",
|
|
119
156
|
"hmr/reload",
|
|
120
157
|
"hook/invoked",
|
|
@@ -129,7 +166,12 @@
|
|
|
129
166
|
"internal/set",
|
|
130
167
|
"internal/status",
|
|
131
168
|
"internal/update",
|
|
169
|
+
"job/follow",
|
|
170
|
+
"job/kill",
|
|
171
|
+
"job/list",
|
|
132
172
|
"job/not-found",
|
|
173
|
+
"job/registered",
|
|
174
|
+
"job/settled",
|
|
133
175
|
"kb/mqfbgj",
|
|
134
176
|
"llm/adapters-updated",
|
|
135
177
|
"llm/model-discovery-rejected",
|
|
@@ -151,6 +193,7 @@
|
|
|
151
193
|
"model/selection",
|
|
152
194
|
"permission-presets/catalog-changed",
|
|
153
195
|
"permission/preset",
|
|
196
|
+
"picomatch/posix",
|
|
154
197
|
"plan/invalid-address",
|
|
155
198
|
"plan/mode",
|
|
156
199
|
"plan/not-found",
|
|
@@ -159,51 +202,96 @@
|
|
|
159
202
|
"plugin-manager/changed",
|
|
160
203
|
"plugin-manager/install-log",
|
|
161
204
|
"plugin-manager/install-state",
|
|
205
|
+
"plugin-market/changed",
|
|
206
|
+
"plugin-market/fetch-failed",
|
|
207
|
+
"plugin-market/invalid-index",
|
|
208
|
+
"plugin-market/invalid-index-url",
|
|
209
|
+
"plugin-market/invalid-query",
|
|
210
|
+
"plugin-market/settings-unavailable",
|
|
211
|
+
"plugin-market/unknown-index",
|
|
212
|
+
"query/request",
|
|
213
|
+
"query/response",
|
|
214
|
+
"remote-access/denied",
|
|
162
215
|
"request/context",
|
|
163
216
|
"request/header",
|
|
164
217
|
"request/header-delta",
|
|
165
218
|
"resources/list",
|
|
166
219
|
"resources/read",
|
|
167
220
|
"sandbox/mode",
|
|
221
|
+
"schedule/catalog",
|
|
168
222
|
"schedule/change",
|
|
169
223
|
"schedule/changed",
|
|
224
|
+
"schedule/delete",
|
|
225
|
+
"schedule/history",
|
|
170
226
|
"schedule/list",
|
|
227
|
+
"schedule/update",
|
|
171
228
|
"session-log-deepseek/delivery-accepted",
|
|
172
229
|
"session-telemetry/record",
|
|
173
230
|
"session/agent-busy",
|
|
231
|
+
"session/attachment",
|
|
174
232
|
"session/attachment-invalid",
|
|
233
|
+
"session/cancel",
|
|
175
234
|
"session/conflict",
|
|
235
|
+
"session/control",
|
|
236
|
+
"session/create",
|
|
176
237
|
"session/created",
|
|
177
238
|
"session/disposed",
|
|
178
239
|
"session/end-seed",
|
|
179
240
|
"session/event",
|
|
180
241
|
"session/flush",
|
|
242
|
+
"session/follow",
|
|
243
|
+
"session/fork",
|
|
181
244
|
"session/fork-unavailable",
|
|
182
245
|
"session/invalid-time-zone",
|
|
246
|
+
"session/list",
|
|
247
|
+
"session/migration-required",
|
|
183
248
|
"session/model-unavailable",
|
|
184
249
|
"session/not-found",
|
|
250
|
+
"session/page",
|
|
251
|
+
"session/projections",
|
|
185
252
|
"session/projections-unavailable",
|
|
186
253
|
"session/prompt",
|
|
187
254
|
"session/provider-credentials-unavailable",
|
|
188
255
|
"session/provider-models-unavailable",
|
|
189
256
|
"session/queue-item-not-found",
|
|
257
|
+
"session/rename",
|
|
258
|
+
"session/resume",
|
|
259
|
+
"session/search",
|
|
190
260
|
"session/steer-unavailable",
|
|
191
261
|
"session/title",
|
|
192
262
|
"session/title-invalid",
|
|
193
263
|
"session/title-llm-request",
|
|
264
|
+
"session/wait",
|
|
194
265
|
"session/workspace-attach-failed",
|
|
195
266
|
"session/writer-held",
|
|
196
267
|
"settings/conflict",
|
|
268
|
+
"settings/describe",
|
|
197
269
|
"settings/document-updated",
|
|
270
|
+
"settings/mutate",
|
|
198
271
|
"settings/rejected",
|
|
199
|
-
"
|
|
272
|
+
"settings/replace",
|
|
273
|
+
"settings/update",
|
|
200
274
|
"skills/change",
|
|
275
|
+
"skills/list",
|
|
201
276
|
"slash/input-begin-command",
|
|
202
277
|
"slash/input-consume-token",
|
|
203
278
|
"slash/input-insert-reference",
|
|
204
279
|
"slash/input-insert-text",
|
|
205
280
|
"slots/changed",
|
|
281
|
+
"source/accepted",
|
|
282
|
+
"source/append",
|
|
283
|
+
"source/append-acknowledged",
|
|
284
|
+
"source/close",
|
|
285
|
+
"source/open",
|
|
286
|
+
"source/rejected",
|
|
287
|
+
"source/replace",
|
|
288
|
+
"source/resnapshot",
|
|
289
|
+
"speech/catalog",
|
|
290
|
+
"speech/configure",
|
|
291
|
+
"speech/follow",
|
|
206
292
|
"speech/invalid-audio",
|
|
293
|
+
"speech/prepare",
|
|
294
|
+
"speech/transcribe",
|
|
207
295
|
"speech/transcription-failed",
|
|
208
296
|
"steering/message",
|
|
209
297
|
"step/end",
|
|
@@ -223,13 +311,22 @@
|
|
|
223
311
|
"subagent/provider-removed",
|
|
224
312
|
"subagent/start",
|
|
225
313
|
"subagent/unauthorized",
|
|
314
|
+
"subagents/prompt",
|
|
226
315
|
"system-prompt/assemble",
|
|
227
316
|
"system-prompt/change",
|
|
228
317
|
"system/message",
|
|
229
318
|
"team/member",
|
|
230
319
|
"team/task",
|
|
320
|
+
"terminal/attach",
|
|
321
|
+
"terminal/close",
|
|
231
322
|
"terminal/control-unavailable",
|
|
323
|
+
"terminal/create",
|
|
324
|
+
"terminal/environment",
|
|
232
325
|
"terminal/limit-reached",
|
|
326
|
+
"terminal/list",
|
|
327
|
+
"terminal/rename",
|
|
328
|
+
"terminal/retain",
|
|
329
|
+
"terminal/shells",
|
|
233
330
|
"terminal/unavailable",
|
|
234
331
|
"terminal/view",
|
|
235
332
|
"theme/change",
|
|
@@ -266,6 +363,7 @@
|
|
|
266
363
|
"workflow/log",
|
|
267
364
|
"workflow/phase",
|
|
268
365
|
"workflow/start",
|
|
366
|
+
"working-directory/change",
|
|
269
367
|
"workspace-file/not-directory",
|
|
270
368
|
"workspace-file/not-found",
|
|
271
369
|
"workspace-file/not-regular-file",
|
|
@@ -276,16 +374,20 @@
|
|
|
276
374
|
"workspace-file/unsupported-address",
|
|
277
375
|
"workspace-file/watch-unsupported",
|
|
278
376
|
"workspace/changes",
|
|
377
|
+
"workspace/create",
|
|
378
|
+
"workspace/delete",
|
|
379
|
+
"workspace/follow",
|
|
279
380
|
"workspace/invalid-path",
|
|
280
381
|
"workspace/move-invalid",
|
|
281
382
|
"workspace/name-conflict",
|
|
282
383
|
"workspace/not-found",
|
|
384
|
+
"workspace/rename",
|
|
283
385
|
"workspace/session-active",
|
|
284
386
|
"workspace/session-activity",
|
|
285
387
|
"workspace/session-stop",
|
|
286
|
-
"x/name"
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
"
|
|
388
|
+
"x/name"
|
|
389
|
+
],
|
|
390
|
+
"dshVersions": [
|
|
391
|
+
"0.2.1-rc.5"
|
|
290
392
|
]
|
|
291
393
|
}
|