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.
Files changed (68) hide show
  1. package/README.md +1 -1
  2. package/dist/bin/glimmervoid.js +144 -57
  3. package/dist/chunks/{adapters-Dho1VSY5.js → adapters-BU74M4QZ.js} +1 -1
  4. package/dist/chunks/{adapters-zPDx1Xox.js → adapters-CoC18rdt.js} +56 -31
  5. package/dist/chunks/agent-api-cli-V_BkYhBI.js +142 -0
  6. package/dist/chunks/agent-api-core-B3YI8SYs.js +192 -0
  7. package/dist/chunks/{agent-setup-cli-B5Atxr3F.js → agent-setup-cli-D4956BfN.js} +11 -28
  8. package/dist/chunks/backoff-DjVpfHk7.js +14 -0
  9. package/dist/chunks/child-process-safe-B3zcPdFM.js +2 -0
  10. package/dist/chunks/{child-process-safe-DRGsp0TE.js → child-process-safe-DDELk9XC.js} +3 -2
  11. package/dist/chunks/coerce-NSst8oRP.js +32 -0
  12. package/dist/chunks/{contracts-DGkKNh9W.js → config-CZ4H51D0.js} +374 -1684
  13. package/dist/chunks/{config-store-mm7MgzoL.js → config-store-BVtdHkDK.js} +594 -329
  14. package/dist/chunks/config-store-Cp62jN1O.js +2 -0
  15. package/dist/chunks/contracts-DXujp-Zn.js +2131 -0
  16. package/dist/chunks/git-version-CrLW4a6r.js +58 -0
  17. package/dist/chunks/{grok-DuU8xVLZ.js → grok-C4lzPFEg.js} +24 -21
  18. package/dist/chunks/{hook-relay-core-BHfYFnYV.js → hook-relay-core-DA_bz2KA.js} +10 -5
  19. package/dist/chunks/{hook-tools-pSJia7ks.js → hook-tools-UX2fmt81.js} +3 -5
  20. package/dist/chunks/{ingest-editor-core-BuI1gMF_.js → ingest-editor-core-vR6Wv6bP.js} +24 -13
  21. package/dist/chunks/json-core-dfa_7Fak.js +23 -0
  22. package/dist/chunks/json-file-oEH9vt-0.js +352 -0
  23. package/dist/chunks/knowledge-graph-cli-Bjy9_kv5.js +1354 -0
  24. package/dist/chunks/{loopback-post-C7C22eYi.js → loopback-post-DepQfdcM.js} +40 -26
  25. package/dist/chunks/{main-CuIZQPhZ.js → main-DSbpYn2Y.js} +27880 -19139
  26. package/dist/chunks/{node-pty-preflight-CK1knGIR.js → node-pty-preflight-C8QIlrtU.js} +4 -6
  27. package/dist/chunks/{pair-cli-w-gCAF-1.js → pair-cli-CKn-wUw9.js} +4 -3
  28. package/dist/chunks/paths-CeJl2Vcg.js +55 -0
  29. package/dist/chunks/{remote-config-C2ytQwrs.js → remote-config-DP44Ybt9.js} +37 -41
  30. package/dist/chunks/{rtk-hook-core-Bl6gYHPN.js → rtk-hook-core-BmEz2aq9.js} +3 -5
  31. package/dist/chunks/rtk-resolver-CIVLE_xk.js +2 -0
  32. package/dist/chunks/{rtk-resolver-CLo-gZzw.js → rtk-resolver-jJxy_Mrt.js} +2 -2
  33. package/dist/chunks/{runtime-paths-Ci_ksSkj.js → runtime-paths-BPoxENmK.js} +2 -6
  34. package/dist/chunks/runtime-paths-DU5jBEEO.js +2 -0
  35. package/dist/chunks/{sandbox-deps-Dd5-kZnf.js → sandbox-deps-DuaNFq7n.js} +16 -13
  36. package/dist/chunks/sandbox-proxy-core-hnQgKR0T.js +27 -0
  37. package/dist/chunks/{session-Cez8aIWg.js → session-B8fJb_Or.js} +25 -2
  38. package/dist/chunks/text-DoirglWV.js +21 -0
  39. package/dist/chunks/timer-deps-u2DAQLok.js +15 -0
  40. package/dist/chunks/{visions-cli-BXQFIBCX.js → visions-cli-BhFdym5n.js} +1 -1
  41. package/dist/chunks/{visions-setup-CvVnOe1r.js → visions-setup-CfgNHiG3.js} +20 -357
  42. package/dist/client/assets/index-C_XKsDFx.css +1 -0
  43. package/dist/client/assets/index-CoqWjYxP.js +254 -0
  44. package/dist/client/fonts/CommitMono-OFL.txt +92 -0
  45. package/dist/client/fonts/commit-mono-400-italic.woff2 +0 -0
  46. package/dist/client/fonts/commit-mono-400-regular.woff2 +0 -0
  47. package/dist/client/fonts/commit-mono-700-italic.woff2 +0 -0
  48. package/dist/client/fonts/commit-mono-700-regular.woff2 +0 -0
  49. package/dist/client/index.html +7 -24
  50. package/dist/client/octicons-LICENSE.txt +21 -0
  51. package/dist/scripts/postinstall-path-check.js +1 -1
  52. package/dist/server/index.js +3 -3
  53. package/dist/session/command-hook-relay.js +1 -1
  54. package/dist/session/hook-relay.js +3 -3
  55. package/dist/session/hook-tool-relay.js +2 -2
  56. package/dist/session/sandbox-open-launcher.js +79 -0
  57. package/dist/session/statusline-relay.js +8 -18
  58. package/dist/session/visions-relay.js +20 -11
  59. package/package.json +4 -1
  60. package/dist/chunks/agent-api-cli-D0MmtEdz.js +0 -71
  61. package/dist/chunks/agent-api-core-Dz0r21y9.js +0 -103
  62. package/dist/chunks/child-process-safe-DvQjXsgz.js +0 -2
  63. package/dist/chunks/config-store-CC8T3okC.js +0 -2
  64. package/dist/chunks/ingest-core-DWI1Mbu4.js +0 -342
  65. package/dist/chunks/rtk-resolver-CMQAidlI.js +0 -2
  66. package/dist/chunks/runtime-paths-JLrZ3wyi.js +0 -2
  67. package/dist/client/assets/index-B1MFijjb.css +0 -1
  68. package/dist/client/assets/index-CU1iPPdn.js +0 -249
@@ -1,338 +1,16 @@
1
- import { a as packageRoot, i as extensionDir, n as cliPath, o as relayPath, t as bundled } from "./runtime-paths-Ci_ksSkj.js";
2
- import { i as execSync, n as execFileAsync } from "./child-process-safe-DRGsp0TE.js";
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 { d as scrubText, n as SOURCE_DEFAULTS } from "./ingest-core-DWI1Mbu4.js";
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
- import crypto from "node:crypto";
10
- var KIND = "file-change";
11
- var DEFAULT_BATCH_MS = SOURCE_DEFAULTS.fs.batchMs;
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, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
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 (!isPlainObject(config.ingest)) return [{
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 = isPlainObject(config.ingest.sources) ? config.ingest.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 (isPlainObject(sources[name])) continue;
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 (!isPlainObject(visions) || visions.enabled !== true) return { changes: [] };
730
- const changes = impliedIngestChanges(config);
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 (isPlainObject(existing)) {
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, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
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="${escapeXml(id)}" Version="${escapeXml(version)}" Publisher="${escapeXml(publisher)}"/>`,
875
- `<DisplayName>${escapeXml(displayName)}</DisplayName>`,
876
- `<Description xml:space="preserve">${escapeXml(description)}</Description>`,
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="${escapeXml(engine)}"/>`,
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: error instanceof Error ? error.message : String(error)
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 { deriveSessionRoots as C, recordChange as D, normalizeRoots as E, relativeWithin as O, dedupeRoots as S, isIgnoredChange as T, DEFAULT_BATCH_MS as _, relayInvocationOptions as a, daemonWriteRules as b, 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, buildIgnorePatterns as v, isActiveSessionState as w, decideFsEvents as x, createBatch as y };
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 };