glimmervoid 0.30.0 → 0.32.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/README.md +1 -1
- package/dist/bin/glimmervoid.js +144 -57
- package/dist/chunks/{adapters-Dho1VSY5.js → adapters-BU74M4QZ.js} +1 -1
- package/dist/chunks/{adapters-zPDx1Xox.js → adapters-CoC18rdt.js} +56 -31
- package/dist/chunks/agent-api-cli-V_BkYhBI.js +142 -0
- package/dist/chunks/agent-api-core-B3YI8SYs.js +192 -0
- package/dist/chunks/{agent-setup-cli-B5Atxr3F.js → agent-setup-cli-D4956BfN.js} +11 -28
- package/dist/chunks/backoff-DjVpfHk7.js +14 -0
- package/dist/chunks/child-process-safe-B3zcPdFM.js +2 -0
- package/dist/chunks/{child-process-safe-DRGsp0TE.js → child-process-safe-DDELk9XC.js} +3 -2
- package/dist/chunks/coerce-NSst8oRP.js +32 -0
- package/dist/chunks/{contracts-DGkKNh9W.js → config-CZ4H51D0.js} +374 -1684
- package/dist/chunks/{config-store-mm7MgzoL.js → config-store-BVtdHkDK.js} +594 -329
- package/dist/chunks/config-store-Cp62jN1O.js +2 -0
- package/dist/chunks/contracts-DXujp-Zn.js +2131 -0
- package/dist/chunks/git-version-CrLW4a6r.js +58 -0
- package/dist/chunks/{grok-DuU8xVLZ.js → grok-C4lzPFEg.js} +24 -21
- package/dist/chunks/{hook-relay-core-BHfYFnYV.js → hook-relay-core-DA_bz2KA.js} +10 -5
- package/dist/chunks/{hook-tools-pSJia7ks.js → hook-tools-UX2fmt81.js} +3 -5
- package/dist/chunks/{ingest-editor-core-BuI1gMF_.js → ingest-editor-core-vR6Wv6bP.js} +24 -13
- package/dist/chunks/json-core-dfa_7Fak.js +23 -0
- package/dist/chunks/json-file-oEH9vt-0.js +352 -0
- package/dist/chunks/knowledge-graph-cli-Bjy9_kv5.js +1354 -0
- package/dist/chunks/{loopback-post-C7C22eYi.js → loopback-post-DepQfdcM.js} +40 -26
- package/dist/chunks/{main-CuIZQPhZ.js → main-DSbpYn2Y.js} +27880 -19139
- package/dist/chunks/{node-pty-preflight-CK1knGIR.js → node-pty-preflight-C8QIlrtU.js} +4 -6
- package/dist/chunks/{pair-cli-w-gCAF-1.js → pair-cli-CKn-wUw9.js} +4 -3
- package/dist/chunks/paths-CeJl2Vcg.js +55 -0
- package/dist/chunks/{remote-config-C2ytQwrs.js → remote-config-DP44Ybt9.js} +37 -41
- package/dist/chunks/{rtk-hook-core-Bl6gYHPN.js → rtk-hook-core-BmEz2aq9.js} +3 -5
- package/dist/chunks/rtk-resolver-CIVLE_xk.js +2 -0
- package/dist/chunks/{rtk-resolver-CLo-gZzw.js → rtk-resolver-jJxy_Mrt.js} +2 -2
- package/dist/chunks/{runtime-paths-Ci_ksSkj.js → runtime-paths-BPoxENmK.js} +2 -6
- package/dist/chunks/runtime-paths-DU5jBEEO.js +2 -0
- package/dist/chunks/{sandbox-deps-Dd5-kZnf.js → sandbox-deps-DuaNFq7n.js} +16 -13
- package/dist/chunks/sandbox-proxy-core-hnQgKR0T.js +27 -0
- package/dist/chunks/{session-Cez8aIWg.js → session-B8fJb_Or.js} +25 -2
- package/dist/chunks/text-DoirglWV.js +21 -0
- package/dist/chunks/timer-deps-u2DAQLok.js +15 -0
- package/dist/chunks/{visions-cli-BXQFIBCX.js → visions-cli-BhFdym5n.js} +1 -1
- package/dist/chunks/{visions-setup-CvVnOe1r.js → visions-setup-CfgNHiG3.js} +20 -357
- package/dist/client/assets/index-C_XKsDFx.css +1 -0
- package/dist/client/assets/index-CoqWjYxP.js +254 -0
- package/dist/client/fonts/CommitMono-OFL.txt +92 -0
- package/dist/client/fonts/commit-mono-400-italic.woff2 +0 -0
- package/dist/client/fonts/commit-mono-400-regular.woff2 +0 -0
- package/dist/client/fonts/commit-mono-700-italic.woff2 +0 -0
- package/dist/client/fonts/commit-mono-700-regular.woff2 +0 -0
- package/dist/client/index.html +7 -24
- package/dist/client/octicons-LICENSE.txt +21 -0
- package/dist/scripts/postinstall-path-check.js +1 -1
- package/dist/server/index.js +3 -3
- package/dist/session/command-hook-relay.js +1 -1
- package/dist/session/hook-relay.js +3 -3
- package/dist/session/hook-tool-relay.js +2 -2
- package/dist/session/sandbox-open-launcher.js +79 -0
- package/dist/session/statusline-relay.js +8 -18
- package/dist/session/visions-relay.js +20 -11
- package/package.json +4 -1
- package/dist/chunks/agent-api-cli-D0MmtEdz.js +0 -71
- package/dist/chunks/agent-api-core-Dz0r21y9.js +0 -103
- package/dist/chunks/child-process-safe-DvQjXsgz.js +0 -2
- package/dist/chunks/config-store-CC8T3okC.js +0 -2
- package/dist/chunks/ingest-core-DWI1Mbu4.js +0 -342
- package/dist/chunks/rtk-resolver-CMQAidlI.js +0 -2
- package/dist/chunks/runtime-paths-JLrZ3wyi.js +0 -2
- package/dist/client/assets/index-B1MFijjb.css +0 -1
- package/dist/client/assets/index-CU1iPPdn.js +0 -249
|
@@ -1,338 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { r as errorMessage } from "./text-DoirglWV.js";
|
|
2
|
+
import { a as isPathInside } from "./paths-CeJl2Vcg.js";
|
|
3
|
+
import { a as packageRoot, i as extensionDir, n as cliPath, o as relayPath, t as bundled } from "./runtime-paths-BPoxENmK.js";
|
|
4
|
+
import { i as execSync, n as execFileAsync } from "./child-process-safe-DDELk9XC.js";
|
|
3
5
|
import { r as resolvePathCommandMatches } from "./spawn-command-Cc40FiZI.js";
|
|
4
|
-
import {
|
|
6
|
+
import { n as isRecord } from "./coerce-NSst8oRP.js";
|
|
5
7
|
import { stripTypeScriptTypes } from "node:module";
|
|
6
8
|
import fs from "node:fs";
|
|
7
9
|
import path from "node:path";
|
|
8
10
|
import os from "node:os";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var MAX_FILES_PER_BATCH = SOURCE_DEFAULTS.fs.digestQuota;
|
|
13
|
-
var UNTRACKED_KEY_CHARS = 16;
|
|
14
|
-
var MAX_ROOT_ENTRIES = 32;
|
|
15
|
-
var MAX_SAMPLE_FILES = 5;
|
|
16
|
-
var MAX_REL_PATH_CHARS = 200;
|
|
17
|
-
var IGNORED_DIR_NAMES = Object.freeze([
|
|
18
|
-
".git",
|
|
19
|
-
"node_modules",
|
|
20
|
-
".glimmervoid",
|
|
21
|
-
".cache",
|
|
22
|
-
".parcel-cache",
|
|
23
|
-
".turbo",
|
|
24
|
-
".next",
|
|
25
|
-
".nuxt",
|
|
26
|
-
".svelte-kit",
|
|
27
|
-
".gradle",
|
|
28
|
-
".tox",
|
|
29
|
-
".venv",
|
|
30
|
-
".pytest_cache",
|
|
31
|
-
".mypy_cache",
|
|
32
|
-
".ruff_cache",
|
|
33
|
-
".idea",
|
|
34
|
-
"__pycache__",
|
|
35
|
-
"dist",
|
|
36
|
-
"build",
|
|
37
|
-
"target",
|
|
38
|
-
"coverage"
|
|
39
|
-
]);
|
|
40
|
-
var IGNORED_FILE_SUFFIXES = Object.freeze([
|
|
41
|
-
"~",
|
|
42
|
-
".swp",
|
|
43
|
-
".swx",
|
|
44
|
-
".swo",
|
|
45
|
-
".tmp",
|
|
46
|
-
".temp",
|
|
47
|
-
".lock"
|
|
48
|
-
]);
|
|
49
|
-
var IGNORED_FILE_NAMES = Object.freeze([
|
|
50
|
-
".DS_Store",
|
|
51
|
-
"Thumbs.db",
|
|
52
|
-
"desktop.ini",
|
|
53
|
-
"4913"
|
|
54
|
-
]);
|
|
55
|
-
var DAEMON_CONFIG_SIBLINGS = Object.freeze([
|
|
56
|
-
"usage-lanes.json",
|
|
57
|
-
"usage-warehouse.json",
|
|
58
|
-
"usage-budget-state.json",
|
|
59
|
-
"pr-review-state.json",
|
|
60
|
-
"team-review-state.json",
|
|
61
|
-
"pairings.json",
|
|
62
|
-
"pairings-seen.json",
|
|
63
|
-
"litellm-pricing.json",
|
|
64
|
-
"update-check.json",
|
|
65
|
-
"recordings",
|
|
66
|
-
"uploads",
|
|
67
|
-
"memory"
|
|
68
|
-
]);
|
|
69
|
-
var ACTIVE_SESSION_STATES = Object.freeze([
|
|
70
|
-
"INITIALIZING",
|
|
71
|
-
"STARTING",
|
|
72
|
-
"RUNNING",
|
|
73
|
-
"WAITING",
|
|
74
|
-
"IDLE",
|
|
75
|
-
"COMPLETE"
|
|
76
|
-
]);
|
|
77
|
-
var CHANGE_KINDS = Object.freeze([
|
|
78
|
-
"create",
|
|
79
|
-
"update",
|
|
80
|
-
"delete"
|
|
81
|
-
]);
|
|
82
|
-
var CHANGE_VERBS = Object.freeze({
|
|
83
|
-
create: "created",
|
|
84
|
-
update: "updated",
|
|
85
|
-
delete: "deleted"
|
|
86
|
-
});
|
|
87
|
-
function toPosix(value) {
|
|
88
|
-
return String(value == null ? "" : value).split("\\").join("/");
|
|
89
|
-
}
|
|
90
|
-
function nonEmptyString(value) {
|
|
91
|
-
return typeof value === "string" && value.trim() ? value.trim() : null;
|
|
92
|
-
}
|
|
93
|
-
function buildIgnorePatterns(extraDirNames = []) {
|
|
94
|
-
const names = [];
|
|
95
|
-
for (const raw of [...IGNORED_DIR_NAMES, ...Array.isArray(extraDirNames) ? extraDirNames : []]) {
|
|
96
|
-
const name = nonEmptyString(raw);
|
|
97
|
-
if (!name || names.includes(name)) continue;
|
|
98
|
-
names.push(name);
|
|
99
|
-
}
|
|
100
|
-
const patterns = [];
|
|
101
|
-
for (const name of names) patterns.push(name, `**/${name}`, `**/${name}/**`);
|
|
102
|
-
for (const suffix of IGNORED_FILE_SUFFIXES) patterns.push(`**/*${suffix}`);
|
|
103
|
-
for (const name of IGNORED_FILE_NAMES) patterns.push(`**/${name}`);
|
|
104
|
-
return patterns;
|
|
105
|
-
}
|
|
106
|
-
function hasIgnoredSegment(relPath) {
|
|
107
|
-
for (const segment of toPosix(relPath).split("/")) {
|
|
108
|
-
if (!segment) continue;
|
|
109
|
-
if (IGNORED_DIR_NAMES.includes(segment)) return true;
|
|
110
|
-
}
|
|
111
|
-
return false;
|
|
112
|
-
}
|
|
113
|
-
function isIgnoredFileName(base) {
|
|
114
|
-
if (IGNORED_FILE_NAMES.includes(base)) return true;
|
|
115
|
-
return IGNORED_FILE_SUFFIXES.some((suffix) => base.endsWith(suffix));
|
|
116
|
-
}
|
|
117
|
-
function daemonWriteRules(configPath) {
|
|
118
|
-
const resolvedPath = nonEmptyString(configPath);
|
|
119
|
-
if (!resolvedPath) return null;
|
|
120
|
-
const configFile = path.resolve(resolvedPath);
|
|
121
|
-
const dir = path.dirname(configFile);
|
|
122
|
-
return {
|
|
123
|
-
paths: [configFile, ...DAEMON_CONFIG_SIBLINGS.map((name) => path.join(dir, name))],
|
|
124
|
-
dir,
|
|
125
|
-
prefix: `${path.basename(configFile)}.`
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
function isDaemonDerivedSibling(rules, absolutePath) {
|
|
129
|
-
const resolved = path.resolve(absolutePath);
|
|
130
|
-
if (foldCase(path.dirname(resolved)) !== foldCase(rules.dir)) return false;
|
|
131
|
-
return foldCase(path.basename(resolved)).startsWith(foldCase(rules.prefix));
|
|
132
|
-
}
|
|
133
|
-
function foldCase(value) {
|
|
134
|
-
return process.platform === "win32" ? String(value).toLowerCase() : String(value);
|
|
135
|
-
}
|
|
136
|
-
function isPathInside(parent, child) {
|
|
137
|
-
const from = nonEmptyString(parent);
|
|
138
|
-
const to = nonEmptyString(child);
|
|
139
|
-
if (!from || !to) return false;
|
|
140
|
-
const resolvedParent = path.resolve(from);
|
|
141
|
-
const resolvedChild = path.resolve(to);
|
|
142
|
-
if (foldCase(resolvedParent) === foldCase(resolvedChild)) return true;
|
|
143
|
-
const relative = path.relative(resolvedParent, resolvedChild);
|
|
144
|
-
if (!relative || path.isAbsolute(relative)) return false;
|
|
145
|
-
return !toPosix(relative).startsWith("../");
|
|
146
|
-
}
|
|
147
|
-
function relativeWithin(root, absolutePath) {
|
|
148
|
-
const from = nonEmptyString(root);
|
|
149
|
-
const to = nonEmptyString(absolutePath);
|
|
150
|
-
if (!from || !to) return null;
|
|
151
|
-
const relative = path.relative(path.resolve(from), path.resolve(to));
|
|
152
|
-
if (!relative || path.isAbsolute(relative)) return null;
|
|
153
|
-
const posix = toPosix(relative);
|
|
154
|
-
if (posix.startsWith("../")) return null;
|
|
155
|
-
return posix;
|
|
156
|
-
}
|
|
157
|
-
function isIgnoredChange({ relPath, absolutePath = null, daemonRules = null } = {}) {
|
|
158
|
-
const relative = nonEmptyString(relPath);
|
|
159
|
-
if (!relative) return true;
|
|
160
|
-
if (hasIgnoredSegment(relative)) return true;
|
|
161
|
-
const base = toPosix(relative).split("/").pop();
|
|
162
|
-
if (base && isIgnoredFileName(base)) return true;
|
|
163
|
-
const absolute = nonEmptyString(absolutePath);
|
|
164
|
-
if (!absolute || !daemonRules) return false;
|
|
165
|
-
if (daemonRules.paths.some((daemonPath) => isPathInside(daemonPath, absolute))) return true;
|
|
166
|
-
return isDaemonDerivedSibling(daemonRules, absolute);
|
|
167
|
-
}
|
|
168
|
-
function normalizeRoots(raw) {
|
|
169
|
-
if (!Array.isArray(raw)) return [];
|
|
170
|
-
const roots = [];
|
|
171
|
-
for (const entry of raw) {
|
|
172
|
-
const value = nonEmptyString(entry);
|
|
173
|
-
if (!value || roots.includes(value)) continue;
|
|
174
|
-
roots.push(value);
|
|
175
|
-
if (roots.length >= MAX_ROOT_ENTRIES) break;
|
|
176
|
-
}
|
|
177
|
-
return roots;
|
|
178
|
-
}
|
|
179
|
-
function dedupeRoots(roots) {
|
|
180
|
-
const named = [];
|
|
181
|
-
for (const entry of Array.isArray(roots) ? roots : []) {
|
|
182
|
-
const value = nonEmptyString(entry);
|
|
183
|
-
if (!value) continue;
|
|
184
|
-
if (named.some((kept) => foldCase(path.resolve(kept)) === foldCase(path.resolve(value)))) continue;
|
|
185
|
-
named.push(value);
|
|
186
|
-
}
|
|
187
|
-
named.sort((left, right) => left.length - right.length || left.localeCompare(right));
|
|
188
|
-
const kept = [];
|
|
189
|
-
for (const root of named) {
|
|
190
|
-
if (kept.some((outer) => isPathInside(outer, root))) continue;
|
|
191
|
-
kept.push(root);
|
|
192
|
-
}
|
|
193
|
-
return kept;
|
|
194
|
-
}
|
|
195
|
-
function deriveSessionRoots(session) {
|
|
196
|
-
const dirs = [];
|
|
197
|
-
for (const dir of [session?.path, session?.worktreeDir]) {
|
|
198
|
-
const value = nonEmptyString(dir);
|
|
199
|
-
if (!value || dirs.includes(value)) continue;
|
|
200
|
-
dirs.push(value);
|
|
201
|
-
}
|
|
202
|
-
return dirs;
|
|
203
|
-
}
|
|
204
|
-
function isActiveSessionState(state) {
|
|
205
|
-
return ACTIVE_SESSION_STATES.includes(nonEmptyString(state) || "");
|
|
206
|
-
}
|
|
207
|
-
function createBatch() {
|
|
208
|
-
return {
|
|
209
|
-
files: /* @__PURE__ */ new Map(),
|
|
210
|
-
untracked: /* @__PURE__ */ new Set(),
|
|
211
|
-
floored: false
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
function untrackedKey(relPath) {
|
|
215
|
-
return crypto.createHash("sha1").update(relPath, "utf8").digest("hex").slice(0, UNTRACKED_KEY_CHARS);
|
|
216
|
-
}
|
|
217
|
-
function truncatePath(relPath) {
|
|
218
|
-
if (relPath.length <= MAX_REL_PATH_CHARS) return relPath;
|
|
219
|
-
const scrubbed = scrubText(relPath);
|
|
220
|
-
if (scrubbed.length <= MAX_REL_PATH_CHARS) return scrubbed;
|
|
221
|
-
return `${scrubbed.slice(0, MAX_REL_PATH_CHARS)}...`;
|
|
222
|
-
}
|
|
223
|
-
function normalizeChangeKind(type) {
|
|
224
|
-
const kind = nonEmptyString(type);
|
|
225
|
-
if (!kind || !CHANGE_KINDS.includes(kind)) return null;
|
|
226
|
-
return kind;
|
|
227
|
-
}
|
|
228
|
-
function mergeChange(previous, next) {
|
|
229
|
-
if (!previous) return next;
|
|
230
|
-
if (previous === "create" && next === "delete") return null;
|
|
231
|
-
if (next === "delete") return "delete";
|
|
232
|
-
if (previous === "create") return "create";
|
|
233
|
-
return "update";
|
|
234
|
-
}
|
|
235
|
-
function recordChange(batch, relPath, type) {
|
|
236
|
-
const kind = normalizeChangeKind(type);
|
|
237
|
-
const relative = nonEmptyString(relPath);
|
|
238
|
-
if (!kind || !relative) return false;
|
|
239
|
-
const key = truncatePath(relative);
|
|
240
|
-
if (batch.files.has(key)) {
|
|
241
|
-
const merged = mergeChange(batch.files.get(key), kind);
|
|
242
|
-
if (merged === null) batch.files.delete(key);
|
|
243
|
-
if (merged !== null) batch.files.set(key, merged);
|
|
244
|
-
return true;
|
|
245
|
-
}
|
|
246
|
-
if (batch.files.size >= 2e3) {
|
|
247
|
-
const digest = untrackedKey(key);
|
|
248
|
-
if (batch.untracked.has(digest)) return true;
|
|
249
|
-
if (batch.untracked.size >= 1e4) {
|
|
250
|
-
batch.floored = true;
|
|
251
|
-
return true;
|
|
252
|
-
}
|
|
253
|
-
batch.untracked.add(digest);
|
|
254
|
-
return true;
|
|
255
|
-
}
|
|
256
|
-
batch.files.set(key, kind);
|
|
257
|
-
return true;
|
|
258
|
-
}
|
|
259
|
-
function batchSize(batch) {
|
|
260
|
-
return batch.files.size + batch.untracked.size;
|
|
261
|
-
}
|
|
262
|
-
function fileChangeEvent({ root, relPath, change, now }) {
|
|
263
|
-
return {
|
|
264
|
-
source: "fs",
|
|
265
|
-
kind: KIND,
|
|
266
|
-
ts: now,
|
|
267
|
-
scope: {
|
|
268
|
-
root,
|
|
269
|
-
sessionId: null
|
|
270
|
-
},
|
|
271
|
-
summary: `${CHANGE_VERBS[change]} ${relPath}`,
|
|
272
|
-
detail: {
|
|
273
|
-
path: relPath,
|
|
274
|
-
change
|
|
275
|
-
}
|
|
276
|
-
};
|
|
277
|
-
}
|
|
278
|
-
function countByKind(batch) {
|
|
279
|
-
const counts = {
|
|
280
|
-
create: 0,
|
|
281
|
-
update: 0,
|
|
282
|
-
delete: 0
|
|
283
|
-
};
|
|
284
|
-
for (const change of batch.files.values()) counts[change] += 1;
|
|
285
|
-
return counts;
|
|
286
|
-
}
|
|
287
|
-
function burstSummary(batch) {
|
|
288
|
-
const counts = countByKind(batch);
|
|
289
|
-
const parts = [];
|
|
290
|
-
if (counts.create) parts.push(`${counts.create} created`);
|
|
291
|
-
if (counts.update) parts.push(`${counts.update} updated`);
|
|
292
|
-
if (counts.delete) parts.push(`${counts.delete} deleted`);
|
|
293
|
-
const total = batchSize(batch);
|
|
294
|
-
const tail = parts.length > 0 ? `: ${parts.join(", ")}` : "";
|
|
295
|
-
return {
|
|
296
|
-
summary: `${batch.floored ? `at least ${total}` : `${total}`} files changed${tail}`,
|
|
297
|
-
counts,
|
|
298
|
-
total
|
|
299
|
-
};
|
|
300
|
-
}
|
|
301
|
-
function sampleOf(batch) {
|
|
302
|
-
return [...batch.files.keys()].slice(0, MAX_SAMPLE_FILES).join(", ");
|
|
303
|
-
}
|
|
304
|
-
function decideFsEvents(batch, { root = null, now = 0 } = {}) {
|
|
305
|
-
const total = batchSize(batch);
|
|
306
|
-
if (total === 0) return [];
|
|
307
|
-
if (total <= MAX_FILES_PER_BATCH && batch.untracked.size === 0) {
|
|
308
|
-
const events = [];
|
|
309
|
-
for (const [relPath, change] of batch.files) events.push(fileChangeEvent({
|
|
310
|
-
root,
|
|
311
|
-
relPath,
|
|
312
|
-
change,
|
|
313
|
-
now
|
|
314
|
-
}));
|
|
315
|
-
return events;
|
|
316
|
-
}
|
|
317
|
-
const { summary, counts } = burstSummary(batch);
|
|
318
|
-
return [{
|
|
319
|
-
source: "fs",
|
|
320
|
-
kind: KIND,
|
|
321
|
-
ts: now,
|
|
322
|
-
scope: {
|
|
323
|
-
root,
|
|
324
|
-
sessionId: null
|
|
325
|
-
},
|
|
326
|
-
summary,
|
|
327
|
-
detail: {
|
|
328
|
-
files: total,
|
|
329
|
-
atLeast: batch.floored,
|
|
330
|
-
created: counts.create,
|
|
331
|
-
updated: counts.update,
|
|
332
|
-
deleted: counts.delete,
|
|
333
|
-
sample: sampleOf(batch)
|
|
334
|
-
}
|
|
335
|
-
}];
|
|
11
|
+
//#region shared/escape-markup.ts
|
|
12
|
+
function escapeMarkup(value) {
|
|
13
|
+
return String(value).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
336
14
|
}
|
|
337
15
|
//#endregion
|
|
338
16
|
//#region server/lane-log.ts
|
|
@@ -692,11 +370,8 @@ var IMPLIED_INGEST = Object.freeze({
|
|
|
692
370
|
editor: Object.freeze({ enabled: true })
|
|
693
371
|
})
|
|
694
372
|
});
|
|
695
|
-
function isPlainObject(value) {
|
|
696
|
-
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
697
|
-
}
|
|
698
373
|
function impliedIngestChanges(config) {
|
|
699
|
-
if (!
|
|
374
|
+
if (!isRecord(config.ingest)) return [{
|
|
700
375
|
path: ["ingest"],
|
|
701
376
|
value: JSON.parse(JSON.stringify(IMPLIED_INGEST)),
|
|
702
377
|
why: "visions needs machine context"
|
|
@@ -708,9 +383,9 @@ function impliedIngestChanges(config) {
|
|
|
708
383
|
why: "visions needs machine context"
|
|
709
384
|
});
|
|
710
385
|
if (config.ingest.enabled === false) return changes;
|
|
711
|
-
const sources =
|
|
386
|
+
const sources = isRecord(config.ingest.sources) ? config.ingest.sources : {};
|
|
712
387
|
for (const [name, value] of Object.entries(IMPLIED_INGEST.sources)) {
|
|
713
|
-
if (
|
|
388
|
+
if (isRecord(sources[name])) continue;
|
|
714
389
|
changes.push({
|
|
715
390
|
path: [
|
|
716
391
|
"ingest",
|
|
@@ -726,21 +401,15 @@ function impliedIngestChanges(config) {
|
|
|
726
401
|
function decideImpliedDefaults(config) {
|
|
727
402
|
if (!config) return { changes: [] };
|
|
728
403
|
const visions = config.visions;
|
|
729
|
-
if (!
|
|
730
|
-
|
|
731
|
-
if (!isPlainObject(visions.dispatch)) changes.push({
|
|
732
|
-
path: ["visions", "dispatch"],
|
|
733
|
-
value: { enabled: true },
|
|
734
|
-
why: "visions implies its model dispatch"
|
|
735
|
-
});
|
|
736
|
-
return { changes };
|
|
404
|
+
if (!isRecord(visions) || visions.enabled !== true) return { changes: [] };
|
|
405
|
+
return { changes: impliedIngestChanges(config) };
|
|
737
406
|
}
|
|
738
407
|
function applyChanges(config, changes) {
|
|
739
408
|
for (const change of changes) {
|
|
740
409
|
let cursor = config;
|
|
741
410
|
for (const key of change.path.slice(0, -1)) {
|
|
742
411
|
const existing = cursor[key];
|
|
743
|
-
if (
|
|
412
|
+
if (isRecord(existing)) {
|
|
744
413
|
cursor = existing;
|
|
745
414
|
continue;
|
|
746
415
|
}
|
|
@@ -852,9 +521,6 @@ function buildZip(files) {
|
|
|
852
521
|
chunks.push(end);
|
|
853
522
|
return Buffer.concat(chunks);
|
|
854
523
|
}
|
|
855
|
-
function escapeXml(value) {
|
|
856
|
-
return String(value).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
857
|
-
}
|
|
858
524
|
function contentTypesXml() {
|
|
859
525
|
return [
|
|
860
526
|
"<?xml version=\"1.0\" encoding=\"utf-8\"?>",
|
|
@@ -871,14 +537,14 @@ function vsixManifestXml({ id, publisher, version, displayName, description, eng
|
|
|
871
537
|
"<?xml version=\"1.0\" encoding=\"utf-8\"?>",
|
|
872
538
|
"<PackageManifest Version=\"2.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vsx-schema/2011\">",
|
|
873
539
|
"<Metadata>",
|
|
874
|
-
`<Identity Language="en-US" Id="${
|
|
875
|
-
`<DisplayName>${
|
|
876
|
-
`<Description xml:space="preserve">${
|
|
540
|
+
`<Identity Language="en-US" Id="${escapeMarkup(id)}" Version="${escapeMarkup(version)}" Publisher="${escapeMarkup(publisher)}"/>`,
|
|
541
|
+
`<DisplayName>${escapeMarkup(displayName)}</DisplayName>`,
|
|
542
|
+
`<Description xml:space="preserve">${escapeMarkup(description)}</Description>`,
|
|
877
543
|
"<Tags></Tags>",
|
|
878
544
|
"<Categories>Other</Categories>",
|
|
879
545
|
"<GalleryFlags>Public</GalleryFlags>",
|
|
880
546
|
"<Properties>",
|
|
881
|
-
`<Property Id="Microsoft.VisualStudio.Code.Engine" Value="${
|
|
547
|
+
`<Property Id="Microsoft.VisualStudio.Code.Engine" Value="${escapeMarkup(engine)}"/>`,
|
|
882
548
|
"<Property Id=\"Microsoft.VisualStudio.Code.ExtensionDependencies\" Value=\"\"/>",
|
|
883
549
|
"<Property Id=\"Microsoft.VisualStudio.Code.ExtensionPack\" Value=\"\"/>",
|
|
884
550
|
"<Property Id=\"Microsoft.VisualStudio.Code.ExtensionKind\" Value=\"workspace\"/>",
|
|
@@ -1400,7 +1066,7 @@ function applyPlan(target, existingText, plan, { dryRun }) {
|
|
|
1400
1066
|
return {
|
|
1401
1067
|
...outcome(target),
|
|
1402
1068
|
action: "failed",
|
|
1403
|
-
reason:
|
|
1069
|
+
reason: errorMessage(error)
|
|
1404
1070
|
};
|
|
1405
1071
|
}
|
|
1406
1072
|
return {
|
|
@@ -1450,9 +1116,6 @@ var EDITOR_TIMEOUT_MS = 6e4;
|
|
|
1450
1116
|
function underTestRunner(env) {
|
|
1451
1117
|
return typeof env.NODE_TEST_CONTEXT === "string" && env.NODE_TEST_CONTEXT !== "";
|
|
1452
1118
|
}
|
|
1453
|
-
function errorMessage(error) {
|
|
1454
|
-
return error instanceof Error ? error.message : String(error);
|
|
1455
|
-
}
|
|
1456
1119
|
function commandFailureDetail(error) {
|
|
1457
1120
|
const failure = error ?? {};
|
|
1458
1121
|
return String(failure.stderr || failure.message || error).trim().split("\n").pop();
|
|
@@ -1750,4 +1413,4 @@ function createVisionsSetup({ getConfig = () => ({}), configStore = null, logger
|
|
|
1750
1413
|
return { maybeApply };
|
|
1751
1414
|
}
|
|
1752
1415
|
//#endregion
|
|
1753
|
-
export {
|
|
1416
|
+
export { escapeMarkup as _, relayInvocationOptions as a, unwireEverything as c, extensionIdOf as d, buildSetupGuide as f, createLaneLog as g, isExtensionInstalled as h, packVsix as i, wireEverything as l, recipeIds as m, createVisionsSetup as n, resolveRelayInvocation as o, commandLine as p, editorExtensions as r, resolvedEditorPaths as s, RELAY_PATH as t, editorTargets as u };
|