mindweave 2.5.0 → 3.0.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 +81 -145
- package/dist/cli/App.js +579 -304
- package/dist/cli/App.js.map +1 -1
- package/dist/cli/analytics.js +27 -18
- package/dist/cli/analytics.js.map +1 -1
- package/dist/cli/attachments.js +34 -0
- package/dist/cli/attachments.js.map +1 -1
- package/dist/cli/bannerFit.js +70 -0
- package/dist/cli/bannerFit.js.map +1 -0
- package/dist/cli/bootstrap.js +41 -3
- package/dist/cli/bootstrap.js.map +1 -1
- package/dist/cli/commands.js +4 -1
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/components/ApprovalBox.js +3 -2
- package/dist/cli/components/ApprovalBox.js.map +1 -1
- package/dist/cli/components/BlockView.js +27 -6
- package/dist/cli/components/BlockView.js.map +1 -1
- package/dist/cli/components/FirstRunFrame.js +2 -1
- package/dist/cli/components/FirstRunFrame.js.map +1 -1
- package/dist/cli/components/KeyManager.js +5 -4
- package/dist/cli/components/KeyManager.js.map +1 -1
- package/dist/cli/components/KeySetup.js +29 -13
- package/dist/cli/components/KeySetup.js.map +1 -1
- package/dist/cli/components/MarathonBox.js +64 -0
- package/dist/cli/components/MarathonBox.js.map +1 -0
- package/dist/cli/components/McpMinitabs.js +8 -7
- package/dist/cli/components/McpMinitabs.js.map +1 -1
- package/dist/cli/components/Picker.js +4 -3
- package/dist/cli/components/Picker.js.map +1 -1
- package/dist/cli/components/PromptInput.js +47 -8
- package/dist/cli/components/PromptInput.js.map +1 -1
- package/dist/cli/components/PulseDot.js +42 -0
- package/dist/cli/components/PulseDot.js.map +1 -0
- package/dist/cli/components/SubagentView.js +9 -6
- package/dist/cli/components/SubagentView.js.map +1 -1
- package/dist/cli/components/TipLine.js +2 -1
- package/dist/cli/components/TipLine.js.map +1 -1
- package/dist/cli/components/ToolGroup.js +65 -49
- package/dist/cli/components/ToolGroup.js.map +1 -1
- package/dist/cli/components/ToolLine.js +20 -19
- package/dist/cli/components/ToolLine.js.map +1 -1
- package/dist/cli/components/TrustGate.js +2 -1
- package/dist/cli/components/TrustGate.js.map +1 -1
- package/dist/cli/components/minitabs.js +3 -2
- package/dist/cli/components/minitabs.js.map +1 -1
- package/dist/cli/desktopApp.js +45 -0
- package/dist/cli/desktopApp.js.map +1 -0
- package/dist/cli/help.js +1 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/inkOutputPatch.js +285 -0
- package/dist/cli/inkOutputPatch.js.map +1 -0
- package/dist/cli/inkSpeed.js +29 -0
- package/dist/cli/inkSpeed.js.map +1 -0
- package/dist/cli/inkSpeedLoader.js +47 -0
- package/dist/cli/inkSpeedLoader.js.map +1 -0
- package/dist/cli/inputText.js +30 -0
- package/dist/cli/inputText.js.map +1 -0
- package/dist/cli/keyManager.js +2 -1
- package/dist/cli/keyManager.js.map +1 -1
- package/dist/cli/keyPrefs.js +90 -0
- package/dist/cli/keyPrefs.js.map +1 -0
- package/dist/cli/keySetup.js +5 -2
- package/dist/cli/keySetup.js.map +1 -1
- package/dist/cli/marathonUi.js +113 -0
- package/dist/cli/marathonUi.js.map +1 -0
- package/dist/cli/markdown.js +63 -11
- package/dist/cli/markdown.js.map +1 -1
- package/dist/cli/modes.js +3 -3
- package/dist/cli/modes.js.map +1 -1
- package/dist/cli/prodEnv.js +43 -0
- package/dist/cli/prodEnv.js.map +1 -0
- package/dist/cli/revealPace.js +5 -5
- package/dist/cli/revealPace.js.map +1 -1
- package/dist/cli/revealQueue.js +120 -0
- package/dist/cli/revealQueue.js.map +1 -0
- package/dist/cli/theme.js +47 -0
- package/dist/cli/theme.js.map +1 -0
- package/dist/cli/toolDisplay.js +112 -18
- package/dist/cli/toolDisplay.js.map +1 -1
- package/dist/cli/transcript.js +1 -1
- package/dist/cli/transcript.js.map +1 -1
- package/dist/cli/virtualWindow.js +14 -2
- package/dist/cli/virtualWindow.js.map +1 -1
- package/dist/cli/wheelAccel.js +73 -0
- package/dist/cli/wheelAccel.js.map +1 -0
- package/dist/cli/widestLinePatch.js +48 -0
- package/dist/cli/widestLinePatch.js.map +1 -0
- package/dist/cli/workingVerb.js +88 -28
- package/dist/cli/workingVerb.js.map +1 -1
- package/dist/cli/wrap.js +1 -1
- package/dist/cli/wrap.js.map +1 -1
- package/dist/core/contextSettings.js +84 -0
- package/dist/core/contextSettings.js.map +1 -0
- package/dist/core/limitsView.js +40 -0
- package/dist/core/limitsView.js.map +1 -0
- package/dist/core/mcpServers.js +164 -0
- package/dist/core/mcpServers.js.map +1 -0
- package/dist/core/permissions.js +209 -0
- package/dist/core/permissions.js.map +1 -0
- package/dist/core/providerKeys.js +187 -0
- package/dist/core/providerKeys.js.map +1 -0
- package/dist/core/rulesSkills.js +142 -0
- package/dist/core/rulesSkills.js.map +1 -0
- package/dist/core/spendView.js +90 -0
- package/dist/core/spendView.js.map +1 -0
- package/dist/core/turnRunner.js +759 -0
- package/dist/core/turnRunner.js.map +1 -0
- package/dist/drivers/anthropic/client.js +101 -26
- package/dist/drivers/anthropic/client.js.map +1 -1
- package/dist/drivers/anthropic/manifest.js +43 -13
- package/dist/drivers/anthropic/manifest.js.map +1 -1
- package/dist/drivers/cerebras/manifest.js +13 -3
- package/dist/drivers/cerebras/manifest.js.map +1 -1
- package/dist/drivers/deepseek/manifest.js +24 -34
- package/dist/drivers/deepseek/manifest.js.map +1 -1
- package/dist/drivers/glm/manifest.js +21 -6
- package/dist/drivers/glm/manifest.js.map +1 -1
- package/dist/drivers/groq/manifest.js +5 -2
- package/dist/drivers/groq/manifest.js.map +1 -1
- package/dist/drivers/kimi/manifest.js +13 -10
- package/dist/drivers/kimi/manifest.js.map +1 -1
- package/dist/drivers/meta/manifest.js +21 -16
- package/dist/drivers/meta/manifest.js.map +1 -1
- package/dist/drivers/minimax/manifest.js +15 -12
- package/dist/drivers/minimax/manifest.js.map +1 -1
- package/dist/drivers/ollama/catalog.js +71 -0
- package/dist/drivers/ollama/catalog.js.map +1 -0
- package/dist/drivers/ollama/client.js +164 -0
- package/dist/drivers/ollama/client.js.map +1 -0
- package/dist/drivers/ollama/endpoint.js +42 -0
- package/dist/drivers/ollama/endpoint.js.map +1 -0
- package/dist/drivers/ollama/index.js +5 -0
- package/dist/drivers/ollama/index.js.map +1 -0
- package/dist/drivers/ollama/manifest.js +64 -0
- package/dist/drivers/ollama/manifest.js.map +1 -0
- package/dist/drivers/openai/client.js +10 -4
- package/dist/drivers/openai/client.js.map +1 -1
- package/dist/drivers/openai/manifest.js +69 -18
- package/dist/drivers/openai/manifest.js.map +1 -1
- package/dist/drivers/qwen/manifest.js +19 -6
- package/dist/drivers/qwen/manifest.js.map +1 -1
- package/dist/drivers/registry.js +11 -0
- package/dist/drivers/registry.js.map +1 -1
- package/dist/drivers/retryPolicy.js +26 -1
- package/dist/drivers/retryPolicy.js.map +1 -1
- package/dist/drivers/xai/client.js +12 -10
- package/dist/drivers/xai/client.js.map +1 -1
- package/dist/drivers/xai/manifest.js +62 -25
- package/dist/drivers/xai/manifest.js.map +1 -1
- package/dist/dynamo/auxModel.js +54 -0
- package/dist/dynamo/auxModel.js.map +1 -0
- package/dist/dynamo/engine.js +407 -99
- package/dist/dynamo/engine.js.map +1 -1
- package/dist/dynamo/guard.js +10 -0
- package/dist/dynamo/guard.js.map +1 -1
- package/dist/dynamo/liveMeter.js +25 -6
- package/dist/dynamo/liveMeter.js.map +1 -1
- package/dist/dynamo/marathon.js +409 -0
- package/dist/dynamo/marathon.js.map +1 -0
- package/dist/dynamo/marathonPrompt.js +45 -0
- package/dist/dynamo/marathonPrompt.js.map +1 -0
- package/dist/dynamo/model.js +6 -2
- package/dist/dynamo/model.js.map +1 -1
- package/dist/dynamo/toolBatches.js +58 -0
- package/dist/dynamo/toolBatches.js.map +1 -0
- package/dist/dynamo/usageLimits.js +446 -0
- package/dist/dynamo/usageLimits.js.map +1 -0
- package/dist/governor/freshness.js +10 -7
- package/dist/governor/freshness.js.map +1 -1
- package/dist/governor/index.js +76 -9
- package/dist/governor/index.js.map +1 -1
- package/dist/governor/write.js +43 -14
- package/dist/governor/write.js.map +1 -1
- package/dist/index.js +18 -151
- package/dist/index.js.map +1 -1
- package/dist/main.js +162 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp/manager.js +18 -0
- package/dist/mcp/manager.js.map +1 -1
- package/dist/memory/allMetas.js +69 -0
- package/dist/memory/allMetas.js.map +1 -0
- package/dist/memory/compaction.js +70 -15
- package/dist/memory/compaction.js.map +1 -1
- package/dist/memory/earlier.js +15 -0
- package/dist/memory/earlier.js.map +1 -0
- package/dist/memory/profile.js +93 -0
- package/dist/memory/profile.js.map +1 -0
- package/dist/memory/rewind.js +262 -0
- package/dist/memory/rewind.js.map +1 -0
- package/dist/memory/session.js +42 -10
- package/dist/memory/session.js.map +1 -1
- package/dist/memory/sessionMemory.js +48 -13
- package/dist/memory/sessionMemory.js.map +1 -1
- package/dist/memory/sessionMemoryCompact.js +1 -1
- package/dist/memory/sessionMemoryCompact.js.map +1 -1
- package/dist/memory/sessionTitle.js +50 -0
- package/dist/memory/sessionTitle.js.map +1 -0
- package/dist/memory/store.js +42 -1
- package/dist/memory/store.js.map +1 -1
- package/dist/memory/types.js.map +1 -1
- package/dist/tools/askUser.js +14 -0
- package/dist/tools/askUser.js.map +1 -1
- package/dist/tools/backgroundShells.js +208 -5
- package/dist/tools/backgroundShells.js.map +1 -1
- package/dist/tools/browser.js +176 -0
- package/dist/tools/browser.js.map +1 -0
- package/dist/tools/cdp.js +165 -0
- package/dist/tools/cdp.js.map +1 -0
- package/dist/tools/checkpoints.js +208 -5
- package/dist/tools/checkpoints.js.map +1 -1
- package/dist/tools/deferredNative.js +2 -0
- package/dist/tools/deferredNative.js.map +1 -1
- package/dist/tools/detail.js +9 -6
- package/dist/tools/detail.js.map +1 -1
- package/dist/tools/edit.js +2 -1
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/exitPlan.js +4 -0
- package/dist/tools/exitPlan.js.map +1 -1
- package/dist/tools/hiddenDesktop.js +273 -0
- package/dist/tools/hiddenDesktop.js.map +1 -0
- package/dist/tools/listeningPorts.js +134 -0
- package/dist/tools/listeningPorts.js.map +1 -0
- package/dist/tools/mcpSearch.js +8 -0
- package/dist/tools/mcpSearch.js.map +1 -1
- package/dist/tools/mindweaveStatus.js +1 -1
- package/dist/tools/mindweaveStatus.js.map +1 -1
- package/dist/tools/registry.js +3 -0
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/replaceSymbol.js +2 -1
- package/dist/tools/replaceSymbol.js.map +1 -1
- package/dist/tools/runCommand.js +113 -9
- package/dist/tools/runCommand.js.map +1 -1
- package/dist/tools/screenshot.js +4 -6
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/screenshotWin.js +26 -9
- package/dist/tools/screenshotWin.js.map +1 -1
- package/dist/tools/stateCheckpoint.js +128 -0
- package/dist/tools/stateCheckpoint.js.map +1 -0
- package/dist/tools/todo.js +6 -0
- package/dist/tools/todo.js.map +1 -1
- package/dist/tools/ui.js +1295 -0
- package/dist/tools/ui.js.map +1 -0
- package/dist/tools/uiHide.js +356 -0
- package/dist/tools/uiHide.js.map +1 -0
- package/dist/tools/uiPage.js +861 -0
- package/dist/tools/uiPage.js.map +1 -0
- package/dist/tools/uiWin.js +506 -0
- package/dist/tools/uiWin.js.map +1 -0
- package/dist/tools/webFetch.js +32 -25
- package/dist/tools/webFetch.js.map +1 -1
- package/dist/tools/webSearch.js +12 -0
- package/dist/tools/webSearch.js.map +1 -1
- package/dist/tools/writeFile.js +2 -1
- package/dist/tools/writeFile.js.map +1 -1
- package/package.json +78 -75
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hiddenDesktop.ts — start an app the agent is about to test where the user can never see it.
|
|
3
|
+
*
|
|
4
|
+
* Windows gives every session more than one desktop: the one on the screen, and any others
|
|
5
|
+
* a program creates. A window opened on another desktop is never drawn on the screen, not
|
|
6
|
+
* even for one frame, but it is still a real window that draws, runs its page, answers the
|
|
7
|
+
* accessibility layer and can be photographed. So an app started there can be tested fully
|
|
8
|
+
* without ever appearing in front of the user.
|
|
9
|
+
*
|
|
10
|
+
* Moving a window off the screen after it opens (uiHide.ts) cannot promise that. Measured
|
|
11
|
+
* on this project: an Electron window stayed on the screen for 30-50ms before any outside
|
|
12
|
+
* move could land, because it is created, centred and shown in one go, and a plain WinForms
|
|
13
|
+
* window was caught on screen in the composited picture. Only starting the app somewhere
|
|
14
|
+
* else closes that gap, and a separate desktop is the one place Windows offers for it.
|
|
15
|
+
*
|
|
16
|
+
* ## What goes there
|
|
17
|
+
*
|
|
18
|
+
* Only commands that start an app FOR TESTING: the ones carrying the debugging-port flags
|
|
19
|
+
* the `ui` tool tells the agent to add (checked in the command and in the package script
|
|
20
|
+
* it runs), or any command the agent marks `hidden: true`. Nothing else, because a program
|
|
21
|
+
* that keeps a single instance (a browser, an editor) first started there would open the
|
|
22
|
+
* user's own later launches there too, where they cannot see them.
|
|
23
|
+
*
|
|
24
|
+
* A window cannot be moved from one desktop to another, so an app started here is shown to
|
|
25
|
+
* the user by starting it again without `hidden`.
|
|
26
|
+
*
|
|
27
|
+
* ## How
|
|
28
|
+
*
|
|
29
|
+
* Node cannot choose a child's desktop, so a tiny launcher does: it creates the desktop,
|
|
30
|
+
* starts the rest of its command line there with the same output handles, waits, and exits
|
|
31
|
+
* with the command's own code. Everything the command starts inherits the desktop. The
|
|
32
|
+
* launcher is compiled once, on first use, with the C# compiler every Windows 10 and 11
|
|
33
|
+
* install ships with, and kept under the state folder. It stays in the process tree, so the
|
|
34
|
+
* usual tree kill stops the app with it.
|
|
35
|
+
*
|
|
36
|
+
* The scripts that read, photograph or move windows reach this desktop through `DESK_CS`.
|
|
37
|
+
*/
|
|
38
|
+
import { spawn } from "node:child_process";
|
|
39
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
40
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
41
|
+
import { mkdir, rename, rm, writeFile } from "node:fs/promises";
|
|
42
|
+
import { join } from "node:path";
|
|
43
|
+
import { stateRoot } from "../memory/store.js";
|
|
44
|
+
/** This process's hidden desktop. One per process, so two sessions never share one. */
|
|
45
|
+
export function hiddenDesktopName() {
|
|
46
|
+
return `mindweave-${process.pid}`;
|
|
47
|
+
}
|
|
48
|
+
/** A window on the hidden desktop is named by its handle with this in front, so every
|
|
49
|
+
* script it is handed back to knows where to look for it. */
|
|
50
|
+
export const HIDDEN_MARK = "~";
|
|
51
|
+
/** The handle and, for a window on the hidden desktop, the script arguments that reach it. */
|
|
52
|
+
export function windowArgs(handle) {
|
|
53
|
+
return handle.startsWith(HIDDEN_MARK)
|
|
54
|
+
? { handle: handle.slice(HIDDEN_MARK.length), desktop: ["-Desktop", hiddenDesktopName()] }
|
|
55
|
+
: { handle, desktop: [] };
|
|
56
|
+
}
|
|
57
|
+
/** The flags the `ui` tool asks for to test an app over its debugging port. */
|
|
58
|
+
const TEST_FLAGS = /--remote-debugging-port\b|WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS/i;
|
|
59
|
+
/** `npm start`, `npm run dev`, `pnpm dev`, `yarn tauri dev`, `bun run x`: the script run. */
|
|
60
|
+
const PACKAGE_SCRIPT = /(?:^|[\s;&|(])(?:npm|pnpm|yarn|bun)(?:\.cmd)?\s+(?:run(?:-script)?\s+)?([\w:.-]+)/gi;
|
|
61
|
+
/** Scripts that start other scripts are followed this far. */
|
|
62
|
+
const SCRIPT_DEPTH = 3;
|
|
63
|
+
/**
|
|
64
|
+
* Whether a command starts an app for testing, so it belongs on the hidden desktop.
|
|
65
|
+
*
|
|
66
|
+
* `explicit` is the agent's own `hidden` argument and wins either way. Otherwise the
|
|
67
|
+
* command is checked for the test flags, and so is any package script it runs, since
|
|
68
|
+
* `npm run dev` hides the flags inside package.json.
|
|
69
|
+
*/
|
|
70
|
+
export function wantsHiddenDesktop(command, cwd, explicit) {
|
|
71
|
+
// Windows: a hidden desktop. Linux: a virtual display, when Xvfb is installed. macOS has
|
|
72
|
+
// neither; there the window is moved off the screen once it is up (uiHide.ts).
|
|
73
|
+
if (process.platform === "linux") {
|
|
74
|
+
if (!virtualDisplay())
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
else if (process.platform !== "win32")
|
|
78
|
+
return false;
|
|
79
|
+
if (explicit !== undefined)
|
|
80
|
+
return explicit;
|
|
81
|
+
if (TEST_FLAGS.test(command))
|
|
82
|
+
return true;
|
|
83
|
+
let scripts;
|
|
84
|
+
try {
|
|
85
|
+
scripts = JSON.parse(readFileSync(join(cwd, "package.json"), "utf8")).scripts ?? {};
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
return runsFlaggedScript(command, scripts, SCRIPT_DEPTH);
|
|
91
|
+
}
|
|
92
|
+
/** Whether `text` runs a package script whose body (or a script it runs) has the flags. Pure. */
|
|
93
|
+
export function runsFlaggedScript(text, scripts, depth) {
|
|
94
|
+
if (depth <= 0)
|
|
95
|
+
return false;
|
|
96
|
+
for (const m of text.matchAll(PACKAGE_SCRIPT)) {
|
|
97
|
+
const name = m[1];
|
|
98
|
+
// `npm test`, `npm install` and the like are commands of npm, not scripts, unless
|
|
99
|
+
// package.json names one that way; a missing name is simply not followed.
|
|
100
|
+
const body = scripts[name];
|
|
101
|
+
if (typeof body !== "string")
|
|
102
|
+
continue;
|
|
103
|
+
if (TEST_FLAGS.test(body) || runsFlaggedScript(body, scripts, depth - 1))
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
/** The launcher. Its command line is `<launcher> <desktop> <the command line to start>`,
|
|
109
|
+
* and the rest after the desktop is passed on exactly as it arrived. */
|
|
110
|
+
const LAUNCHER_CS = String.raw `
|
|
111
|
+
using System;
|
|
112
|
+
using System.Runtime.InteropServices;
|
|
113
|
+
using System.Text;
|
|
114
|
+
|
|
115
|
+
static class MwHiddenLaunch {
|
|
116
|
+
[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
|
117
|
+
static extern IntPtr CreateDesktop(string name, IntPtr device, IntPtr devmode, uint flags, uint access, IntPtr sa);
|
|
118
|
+
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
|
|
119
|
+
struct STARTUPINFO {
|
|
120
|
+
public int cb; public string reserved; public string desktop; public string title;
|
|
121
|
+
public int x, y, w, h, xChars, yChars, fill, flags; public short show, reserved2;
|
|
122
|
+
public IntPtr reserved3, stdIn, stdOut, stdErr;
|
|
123
|
+
}
|
|
124
|
+
[StructLayout(LayoutKind.Sequential)] struct PROCESS_INFORMATION { public IntPtr process, thread; public int pid, tid; }
|
|
125
|
+
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
|
126
|
+
static extern bool CreateProcess(string app, StringBuilder cmd, IntPtr pa, IntPtr ta, bool inherit, uint flags, IntPtr env, string cwd, ref STARTUPINFO si, out PROCESS_INFORMATION pi);
|
|
127
|
+
[DllImport("kernel32.dll")] static extern IntPtr GetStdHandle(int n);
|
|
128
|
+
[DllImport("kernel32.dll")] static extern uint WaitForSingleObject(IntPtr h, uint ms);
|
|
129
|
+
[DllImport("kernel32.dll")] static extern bool GetExitCodeProcess(IntPtr h, out uint code);
|
|
130
|
+
|
|
131
|
+
static int Token(string s, int i) {
|
|
132
|
+
if (i < s.Length && s[i] == '"') { int q = s.IndexOf('"', i + 1); return q < 0 ? s.Length : q + 1; }
|
|
133
|
+
while (i < s.Length && s[i] != ' ' && s[i] != '\t') i++;
|
|
134
|
+
return i;
|
|
135
|
+
}
|
|
136
|
+
static int Space(string s, int i) { while (i < s.Length && (s[i] == ' ' || s[i] == '\t')) i++; return i; }
|
|
137
|
+
|
|
138
|
+
static int Main() {
|
|
139
|
+
string line = Environment.CommandLine;
|
|
140
|
+
int i = Space(line, Token(line, 0));
|
|
141
|
+
int end = Token(line, i);
|
|
142
|
+
string desk = line.Substring(i, end - i).Trim('"');
|
|
143
|
+
string rest = line.Substring(Space(line, end));
|
|
144
|
+
if (desk.Length == 0 || rest.Length == 0) { Console.Error.WriteLine("usage: <desktop> <command line>"); return 1; }
|
|
145
|
+
// Creates it, or opens it when an earlier command already did.
|
|
146
|
+
IntPtr d = CreateDesktop(desk, IntPtr.Zero, IntPtr.Zero, 0, 0x10000000, IntPtr.Zero);
|
|
147
|
+
if (d == IntPtr.Zero) { Console.Error.WriteLine("Could not create the hidden desktop (error " + Marshal.GetLastWin32Error() + ")."); return 1; }
|
|
148
|
+
var si = new STARTUPINFO();
|
|
149
|
+
si.cb = Marshal.SizeOf(typeof(STARTUPINFO));
|
|
150
|
+
si.desktop = desk;
|
|
151
|
+
si.flags = 0x100; // STARTF_USESTDHANDLES: the same output file and input as this process
|
|
152
|
+
si.stdIn = GetStdHandle(-10); si.stdOut = GetStdHandle(-11); si.stdErr = GetStdHandle(-12);
|
|
153
|
+
PROCESS_INFORMATION pi;
|
|
154
|
+
if (!CreateProcess(null, new StringBuilder(rest), IntPtr.Zero, IntPtr.Zero, true, 0, IntPtr.Zero, null, ref si, out pi)) {
|
|
155
|
+
Console.Error.WriteLine("Could not start the command on the hidden desktop (error " + Marshal.GetLastWin32Error() + ").");
|
|
156
|
+
return 1;
|
|
157
|
+
}
|
|
158
|
+
WaitForSingleObject(pi.process, 0xFFFFFFFF);
|
|
159
|
+
uint code; GetExitCodeProcess(pi.process, out code);
|
|
160
|
+
return unchecked((int)code);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
`;
|
|
164
|
+
let launcher = null;
|
|
165
|
+
let xvfb;
|
|
166
|
+
/** `xvfb-run` when this Linux has a virtual display server to start apps on, else null. */
|
|
167
|
+
export function virtualDisplay() {
|
|
168
|
+
if (xvfb !== undefined)
|
|
169
|
+
return xvfb;
|
|
170
|
+
xvfb = null;
|
|
171
|
+
for (const dir of (process.env.PATH ?? "").split(":")) {
|
|
172
|
+
if (dir && existsSync(join(dir, "xvfb-run"))) {
|
|
173
|
+
xvfb = join(dir, "xvfb-run");
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return xvfb;
|
|
178
|
+
}
|
|
179
|
+
/** What goes in front of a command started on a virtual display, then the shell and its arguments. */
|
|
180
|
+
export const VIRTUAL_DISPLAY_ARGS = ["-a", "-s", "-screen 0 1280x800x24"];
|
|
181
|
+
/** The compiled launcher's path, compiling it the first time. Rejects with why it could
|
|
182
|
+
* not be built. On Linux the "launcher" is xvfb-run. */
|
|
183
|
+
export function launcherPath() {
|
|
184
|
+
if (process.platform === "linux") {
|
|
185
|
+
const x = virtualDisplay();
|
|
186
|
+
return x ? Promise.resolve(x) : Promise.reject(new Error("xvfb-run is not installed (sudo apt install xvfb)"));
|
|
187
|
+
}
|
|
188
|
+
launcher ??= buildLauncher().catch((error) => {
|
|
189
|
+
launcher = null; // try again next time rather than remembering a passing failure
|
|
190
|
+
throw error;
|
|
191
|
+
});
|
|
192
|
+
return launcher;
|
|
193
|
+
}
|
|
194
|
+
async function buildLauncher() {
|
|
195
|
+
const hash = createHash("sha256").update(LAUNCHER_CS).digest("hex").slice(0, 12);
|
|
196
|
+
const dir = join(stateRoot(), "bin");
|
|
197
|
+
const exe = join(dir, `mindweave-hidden-${hash}.exe`);
|
|
198
|
+
if (existsSync(exe))
|
|
199
|
+
return exe;
|
|
200
|
+
const windir = process.env.WINDIR || process.env.SystemRoot || "C:\\Windows";
|
|
201
|
+
const csc = [
|
|
202
|
+
join(windir, "Microsoft.NET", "Framework64", "v4.0.30319", "csc.exe"),
|
|
203
|
+
join(windir, "Microsoft.NET", "Framework", "v4.0.30319", "csc.exe"),
|
|
204
|
+
].find((p) => existsSync(p));
|
|
205
|
+
if (!csc)
|
|
206
|
+
throw new Error("the C# compiler that ships with Windows (.NET Framework 4) was not found");
|
|
207
|
+
await mkdir(dir, { recursive: true });
|
|
208
|
+
const tag = randomBytes(4).toString("hex");
|
|
209
|
+
const src = join(dir, `mindweave-hidden-${tag}.cs`);
|
|
210
|
+
const tmp = join(dir, `mindweave-hidden-${tag}.exe`);
|
|
211
|
+
await writeFile(src, LAUNCHER_CS, "utf8");
|
|
212
|
+
try {
|
|
213
|
+
await new Promise((resolve, reject) => {
|
|
214
|
+
const child = spawn(csc, ["/nologo", "/target:exe", "/optimize+", `/out:${tmp}`, src], { windowsHide: true });
|
|
215
|
+
let text = "";
|
|
216
|
+
child.stdout.on("data", (d) => (text += d.toString()));
|
|
217
|
+
child.stderr.on("data", (d) => (text += d.toString()));
|
|
218
|
+
child.on("error", reject);
|
|
219
|
+
child.on("close", (code) => (code === 0 ? resolve() : reject(new Error(`compiling the launcher failed: ${text.trim() || `exit ${code}`}`))));
|
|
220
|
+
});
|
|
221
|
+
// Renamed into place, so a second process compiling at the same moment never runs a
|
|
222
|
+
// half-written file; whichever lands last wins, and both are the same program.
|
|
223
|
+
await rename(tmp, exe).catch(async (error) => {
|
|
224
|
+
if (!existsSync(exe))
|
|
225
|
+
throw error;
|
|
226
|
+
});
|
|
227
|
+
return exe;
|
|
228
|
+
}
|
|
229
|
+
finally {
|
|
230
|
+
await rm(src, { force: true }).catch(() => { });
|
|
231
|
+
await rm(tmp, { force: true }).catch(() => { });
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* C# for the window scripts: run a piece of work on the hidden desktop. A thread can only
|
|
236
|
+
* list, read or draw the windows of the desktop it is on, and a thread that already owns
|
|
237
|
+
* a window cannot move, so the work runs on a fresh thread placed there. An empty name runs
|
|
238
|
+
* it where it is, unchanged.
|
|
239
|
+
*/
|
|
240
|
+
export const DESK_CS = String.raw `
|
|
241
|
+
public static class MwDesk {
|
|
242
|
+
[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)] static extern IntPtr OpenDesktop(string name, uint flags, bool inherit, uint access);
|
|
243
|
+
[DllImport("user32.dll", SetLastError = true)] static extern bool SetThreadDesktop(IntPtr d);
|
|
244
|
+
[DllImport("user32.dll")] static extern bool CloseDesktop(IntPtr d);
|
|
245
|
+
|
|
246
|
+
public static bool Exists(string desk) {
|
|
247
|
+
if (string.IsNullOrEmpty(desk)) return false;
|
|
248
|
+
IntPtr d = OpenDesktop(desk, 0, false, 0x0040 /* DESKTOP_ENUMERATE */);
|
|
249
|
+
if (d == IntPtr.Zero) return false;
|
|
250
|
+
CloseDesktop(d);
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
public static string On(string desk, Func<string> work) {
|
|
255
|
+
if (string.IsNullOrEmpty(desk)) return work();
|
|
256
|
+
string result = null;
|
|
257
|
+
Exception failed = null;
|
|
258
|
+
var t = new System.Threading.Thread(() => {
|
|
259
|
+
try {
|
|
260
|
+
IntPtr d = OpenDesktop(desk, 0, false, 0x10000000);
|
|
261
|
+
if (d == IntPtr.Zero || !SetThreadDesktop(d)) { result = "ERR the hidden desktop is gone: the app on it has closed"; return; }
|
|
262
|
+
result = work();
|
|
263
|
+
} catch (Exception e) { failed = e; }
|
|
264
|
+
});
|
|
265
|
+
t.SetApartmentState(System.Threading.ApartmentState.MTA);
|
|
266
|
+
t.Start();
|
|
267
|
+
t.Join();
|
|
268
|
+
if (failed != null) throw failed;
|
|
269
|
+
return result;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
`;
|
|
273
|
+
//# sourceMappingURL=hiddenDesktop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hiddenDesktop.js","sourceRoot":"","sources":["../../src/tools/hiddenDesktop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* listeningPorts.ts — which TCP ports are listening, and which process owns each.
|
|
3
|
+
*
|
|
4
|
+
* Background commands use this to notice when something they started opens a port: a
|
|
5
|
+
* dev server coming up, or an app finishing its build and opening its debugging port.
|
|
6
|
+
* That is the moment an agent waiting on "the app" can carry on, and nothing in a
|
|
7
|
+
* command's own output reliably says it (a Tauri build prints "Running ..." and then the
|
|
8
|
+
* app's own logs, if any).
|
|
9
|
+
*
|
|
10
|
+
* The listing is the operating system's own (netstat on Windows, ss on Linux, lsof on
|
|
11
|
+
* macOS), and the parent map is how a port is traced back to the command that started
|
|
12
|
+
* the process owning it. Everything is best-effort: a missing tool or an odd line means
|
|
13
|
+
* fewer ports seen, never a thrown error.
|
|
14
|
+
*/
|
|
15
|
+
import { spawn } from "node:child_process";
|
|
16
|
+
/** `netstat -ano -p TCP` (Windows). Pure. IPv4 and IPv6 rows, LISTENING only. */
|
|
17
|
+
export function parseNetstat(text) {
|
|
18
|
+
const out = [];
|
|
19
|
+
for (const line of text.split(/\r?\n/)) {
|
|
20
|
+
const f = line.trim().split(/\s+/);
|
|
21
|
+
if (f.length < 5 || !/^TCP/i.test(f[0]) || !/LISTEN/i.test(f[3]))
|
|
22
|
+
continue;
|
|
23
|
+
const port = Number(/:(\d+)$/.exec(f[1])?.[1]);
|
|
24
|
+
const pid = Number(f[4]);
|
|
25
|
+
if (port > 0 && pid > 0)
|
|
26
|
+
out.push({ port, pid });
|
|
27
|
+
}
|
|
28
|
+
return dedupe(out);
|
|
29
|
+
}
|
|
30
|
+
/** `ss -ltnpH` (Linux). Pure. */
|
|
31
|
+
export function parseSs(text) {
|
|
32
|
+
const out = [];
|
|
33
|
+
for (const line of text.split(/\r?\n/)) {
|
|
34
|
+
// State Recv-Q Send-Q Local:Port Peer:Port Process
|
|
35
|
+
const local = line.trim().split(/\s+/)[3] ?? "";
|
|
36
|
+
const port = Number(/:(\d+)$/.exec(local)?.[1]);
|
|
37
|
+
for (const m of line.matchAll(/pid=(\d+)/g)) {
|
|
38
|
+
const pid = Number(m[1]);
|
|
39
|
+
if (port > 0 && pid > 0)
|
|
40
|
+
out.push({ port, pid });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return dedupe(out);
|
|
44
|
+
}
|
|
45
|
+
/** `lsof -nP -iTCP -sTCP:LISTEN -Fpn` (macOS). Pure: `p<pid>` then `n<addr>:<port>` lines. */
|
|
46
|
+
export function parseLsof(text) {
|
|
47
|
+
const out = [];
|
|
48
|
+
let pid = 0;
|
|
49
|
+
for (const line of text.split(/\r?\n/)) {
|
|
50
|
+
if (line.startsWith("p"))
|
|
51
|
+
pid = Number(line.slice(1));
|
|
52
|
+
else if (line.startsWith("n")) {
|
|
53
|
+
const port = Number(/:(\d+)$/.exec(line)?.[1]);
|
|
54
|
+
if (port > 0 && pid > 0)
|
|
55
|
+
out.push({ port, pid });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return dedupe(out);
|
|
59
|
+
}
|
|
60
|
+
/** `pid ppid` per line (from PowerShell on Windows, `ps -A -o pid=,ppid=` elsewhere). Pure. */
|
|
61
|
+
export function parseParents(text) {
|
|
62
|
+
const map = new Map();
|
|
63
|
+
for (const line of text.split(/\r?\n/)) {
|
|
64
|
+
const m = /^\s*(\d+)\s+(\d+)\s*$/.exec(line);
|
|
65
|
+
if (m)
|
|
66
|
+
map.set(Number(m[1]), Number(m[2]));
|
|
67
|
+
}
|
|
68
|
+
return map;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The first of `roots` that `pid` descends from, walking up the parent map, or null.
|
|
72
|
+
* Pure. Bounded, and safe against the loops a reused process id can make.
|
|
73
|
+
*/
|
|
74
|
+
export function ownerOf(pid, parents, roots) {
|
|
75
|
+
const seen = new Set();
|
|
76
|
+
let p = pid;
|
|
77
|
+
for (let i = 0; i < 64 && p && !seen.has(p); i++) {
|
|
78
|
+
if (roots.has(p))
|
|
79
|
+
return p;
|
|
80
|
+
seen.add(p);
|
|
81
|
+
p = parents.get(p);
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
function dedupe(list) {
|
|
86
|
+
const seen = new Set();
|
|
87
|
+
return list.filter((l) => {
|
|
88
|
+
const k = `${l.port}:${l.pid}`;
|
|
89
|
+
if (seen.has(k))
|
|
90
|
+
return false;
|
|
91
|
+
seen.add(k);
|
|
92
|
+
return true;
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function capture(cmd, args, timeoutMs = 8000) {
|
|
96
|
+
return new Promise((resolve) => {
|
|
97
|
+
let out = "";
|
|
98
|
+
let child;
|
|
99
|
+
try {
|
|
100
|
+
child = spawn(cmd, args, { windowsHide: true, stdio: ["ignore", "pipe", "ignore"] });
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
resolve("");
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const timer = setTimeout(() => child.kill(), timeoutMs);
|
|
107
|
+
timer.unref?.();
|
|
108
|
+
child.stdout.on("data", (d) => (out += d.toString()));
|
|
109
|
+
child.on("error", () => { clearTimeout(timer); resolve(""); });
|
|
110
|
+
child.on("close", () => { clearTimeout(timer); resolve(out); });
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/** Every listening TCP port on this machine, with its owning process. */
|
|
114
|
+
export async function listListeners() {
|
|
115
|
+
if (process.platform === "win32")
|
|
116
|
+
return parseNetstat(await capture("netstat", ["-ano", "-p", "TCP"]));
|
|
117
|
+
if (process.platform === "darwin")
|
|
118
|
+
return parseLsof(await capture("lsof", ["-nP", "-iTCP", "-sTCP:LISTEN", "-Fpn"]));
|
|
119
|
+
return parseSs(await capture("ss", ["-ltnpH"]));
|
|
120
|
+
}
|
|
121
|
+
/** Every process's parent. The one expensive call here, so it is made only when a
|
|
122
|
+
* listening process appears that has not been traced yet. */
|
|
123
|
+
export async function parentMap() {
|
|
124
|
+
if (process.platform === "win32") {
|
|
125
|
+
return parseParents(await capture("powershell.exe", [
|
|
126
|
+
"-NoProfile",
|
|
127
|
+
"-NonInteractive",
|
|
128
|
+
"-Command",
|
|
129
|
+
"Get-CimInstance Win32_Process -Property ProcessId,ParentProcessId | ForEach-Object { \"$($_.ProcessId) $($_.ParentProcessId)\" }",
|
|
130
|
+
]));
|
|
131
|
+
}
|
|
132
|
+
return parseParents(await capture("ps", ["-A", "-o", "pid=,ppid="]));
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=listeningPorts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listeningPorts.js","sourceRoot":"","sources":["../../src/tools/listeningPorts.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/mcpSearch.js
CHANGED
|
@@ -121,4 +121,12 @@ export const findTools = {
|
|
|
121
121
|
};
|
|
122
122
|
},
|
|
123
123
|
};
|
|
124
|
+
/**
|
|
125
|
+
* Loading a tool is the agent getting ready, not something done to the project, so it is
|
|
126
|
+
* never shown: a "Loaded tool" row told the user nothing they could act on. The result
|
|
127
|
+
* still reaches the model in full (it carries the schemas) and is still recorded; only
|
|
128
|
+
* the row is dropped, the same call made for searches and the code lookups.
|
|
129
|
+
*/
|
|
130
|
+
const loadTools = findTools.execute.bind(findTools);
|
|
131
|
+
findTools.execute = async (args, ctx, call) => ({ ...(await loadTools(args, ctx, call)), quiet: true });
|
|
124
132
|
//# sourceMappingURL=mcpSearch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcpSearch.js","sourceRoot":"","sources":["../../src/tools/mcpSearch.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcpSearch.js","sourceRoot":"","sources":["../../src/tools/mcpSearch.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ const USER_ONLY = [
|
|
|
11
11
|
["start a fresh conversation, or resume an old one", "/clear, /continue"],
|
|
12
12
|
["sign in to a remote MCP server", "/mcp, then Sign in"],
|
|
13
13
|
["switch between the fullscreen and inline shell", "/screen"],
|
|
14
|
-
["
|
|
14
|
+
["see why usage counting is off for now", "/analytics"],
|
|
15
15
|
["update Mindweave itself", "/update"],
|
|
16
16
|
];
|
|
17
17
|
/** What the agent can change on its own, so it offers rather than deflects. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mindweaveStatus.js","sourceRoot":"","sources":["../../src/tools/mindweaveStatus.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAEhD,wFAAwF;AACxF,MAAM,SAAS,GAAkC;IAC/C,CAAC,mCAAmC,EAAE,mBAAmB,CAAC;IAC1D,CAAC,kCAAkC,EAAE,QAAQ,CAAC;IAC9C,CAAC,2BAA2B,EAAE,MAAM,CAAC;IACrC,CAAC,sBAAsB,EAAE,OAAO,CAAC;IACjC,CAAC,4CAA4C,EAAE,UAAU,CAAC;IAC1D,CAAC,kDAAkD,EAAE,mBAAmB,CAAC;IACzE,CAAC,gCAAgC,EAAE,oBAAoB,CAAC;IACxD,CAAC,gDAAgD,EAAE,SAAS,CAAC;IAC7D,CAAC,
|
|
1
|
+
{"version":3,"file":"mindweaveStatus.js","sourceRoot":"","sources":["../../src/tools/mindweaveStatus.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/registry.js
CHANGED
|
@@ -8,6 +8,7 @@ import { readSymbolTool } from "./readSymbol.js";
|
|
|
8
8
|
import { replaceSymbolBody } from "./replaceSymbol.js";
|
|
9
9
|
import { web } from "./web.js";
|
|
10
10
|
import { screenshot } from "./screenshot.js";
|
|
11
|
+
import { ui } from "./ui.js";
|
|
11
12
|
import { viewImage } from "./viewImage.js";
|
|
12
13
|
import { exitPlan } from "./exitPlan.js";
|
|
13
14
|
import { todoWrite } from "./todo.js";
|
|
@@ -48,6 +49,8 @@ export const TOOLS = [
|
|
|
48
49
|
// Sight (read-only: looks at a picture, changes nothing)
|
|
49
50
|
viewImage,
|
|
50
51
|
screenshot,
|
|
52
|
+
// Using an app window (mutating: it presses the app's buttons)
|
|
53
|
+
ui,
|
|
51
54
|
// Planning (read-only, and offered only while planning — see `planOnly`)
|
|
52
55
|
exitPlan,
|
|
53
56
|
// Action (mutating)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { recordWrite, relativize, resolvePath } from "./paths.js";
|
|
2
2
|
import { applyEol } from "./eol.js";
|
|
3
|
-
import { editDetail, lineCount, magnitude, withScope } from "./detail.js";
|
|
3
|
+
import { FULL_DETAIL_MAX, editDetail, lineCount, magnitude, withScope } from "./detail.js";
|
|
4
4
|
import { numberedWindow } from "./editWindow.js";
|
|
5
5
|
import { normalizeLf } from "./editCore.js";
|
|
6
6
|
import { prepareEditTarget, unreadError, fail, failQuietly, errText } from "./editTarget.js";
|
|
@@ -121,6 +121,7 @@ export const replaceSymbolBody = {
|
|
|
121
121
|
`New definition — line-numbered so you can make further edits without re-reading:\n${window}`,
|
|
122
122
|
summary: `replaced ${span.name} in ${shown} · ${scope}`,
|
|
123
123
|
detail: withScope(scope, editDetail(oldBody, args.new_definition)),
|
|
124
|
+
detailFull: withScope(scope, editDetail(oldBody, args.new_definition, FULL_DETAIL_MAX)),
|
|
124
125
|
detailKind: "diff",
|
|
125
126
|
};
|
|
126
127
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replaceSymbol.js","sourceRoot":"","sources":["../../src/tools/replaceSymbol.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"replaceSymbol.js","sourceRoot":"","sources":["../../src/tools/replaceSymbol.ts"],"names":[],"mappings":"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"}
|