@mclean-capital/neura 2.1.1 → 2.1.3
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/core/version.txt +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +36 -18
- package/dist/commands/update.js.map +1 -1
- package/dist/service/windows.d.ts +47 -0
- package/dist/service/windows.d.ts.map +1 -1
- package/dist/service/windows.js +112 -12
- package/dist/service/windows.js.map +1 -1
- package/package.json +1 -1
package/core/version.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.1.
|
|
1
|
+
2.1.3
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAqDA;;;;;GAKG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA+GnD"}
|
package/dist/commands/update.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
import { spawnSync } from 'child_process';
|
|
2
|
+
import { execSync, spawnSync } from 'child_process';
|
|
3
3
|
import { existsSync } from 'fs';
|
|
4
4
|
import { join } from 'path';
|
|
5
5
|
import { CLI_VERSION } from '../version.js';
|
|
@@ -22,19 +22,33 @@ const PACKAGE_NAME = '@mclean-capital/neura';
|
|
|
22
22
|
* install layout); the caller falls back to printing a manual instruction.
|
|
23
23
|
*/
|
|
24
24
|
function resolveFreshCliEntrypoint() {
|
|
25
|
+
// We use execSync rather than spawnSync here to avoid DEP0190. The npm
|
|
26
|
+
// CLI on Windows is `npm.cmd` (a shell-script wrapper), and spawning
|
|
27
|
+
// `.cmd`/`.bat` files on Windows requires `shell: true` (CVE-2024-27980).
|
|
28
|
+
// But `spawnSync(cmd, args, { shell: true })` is deprecated in Node 22+
|
|
29
|
+
// because the args are concatenated into the shell command string
|
|
30
|
+
// without escaping. execSync with a single pre-joined command string
|
|
31
|
+
// sidesteps both problems — and because every token in this command is
|
|
32
|
+
// a hardcoded constant, there's no injection surface.
|
|
25
33
|
const npmCmd = process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
try {
|
|
35
|
+
const stdout = execSync(`${npmCmd} root -g`, {
|
|
36
|
+
encoding: 'utf-8',
|
|
37
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
38
|
+
});
|
|
39
|
+
const globalRoot = stdout.trim();
|
|
40
|
+
if (!globalRoot)
|
|
41
|
+
return null;
|
|
42
|
+
// npm packages with scopes live at <root>/@scope/name/
|
|
43
|
+
const candidate = join(globalRoot, PACKAGE_NAME, 'dist', 'index.js');
|
|
44
|
+
return existsSync(candidate) ? candidate : null;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// `npm` not on PATH, `npm root -g` exited non-zero, or the candidate
|
|
48
|
+
// path isn't where we expected — caller falls back to manual
|
|
49
|
+
// instructions.
|
|
34
50
|
return null;
|
|
35
|
-
|
|
36
|
-
const candidate = join(globalRoot, PACKAGE_NAME, 'dist', 'index.js');
|
|
37
|
-
return existsSync(candidate) ? candidate : null;
|
|
51
|
+
}
|
|
38
52
|
}
|
|
39
53
|
/**
|
|
40
54
|
* Update Neura by reinstalling the npm package and restarting the core service.
|
|
@@ -77,13 +91,17 @@ export async function updateCommand() {
|
|
|
77
91
|
// want to run `npm install -g` and re-register the service below. Both
|
|
78
92
|
// operations are idempotent and fast when nothing actually changes.
|
|
79
93
|
const npmCmd = process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
80
|
-
|
|
94
|
+
const installCmd = `${npmCmd} install -g ${PACKAGE_NAME}@latest`;
|
|
95
|
+
console.log(chalk.dim(` Running: ${installCmd}`));
|
|
81
96
|
console.log();
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
97
|
+
// Same DEP0190 reasoning as `resolveFreshCliEntrypoint` above: use
|
|
98
|
+
// execSync with a single pre-joined command string rather than
|
|
99
|
+
// `spawnSync(cmd, args, { shell: true })`. All three tokens in this
|
|
100
|
+
// string are hardcoded constants — no injection surface.
|
|
101
|
+
try {
|
|
102
|
+
execSync(installCmd, { stdio: 'inherit' });
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
87
105
|
console.log();
|
|
88
106
|
console.log(chalk.red(' ✗ npm install failed. Check your network connection and try running the\n' +
|
|
89
107
|
' command above manually.'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,12 @@ interface ShimContext {
|
|
|
42
42
|
errLogFile: string;
|
|
43
43
|
pidFile: string;
|
|
44
44
|
cmdPath: string;
|
|
45
|
+
/**
|
|
46
|
+
* VBScript launcher path. Used by `spawnDetachedCore` via `wscript.exe`
|
|
47
|
+
* to kick off the `.cmd` shim without allocating a visible console
|
|
48
|
+
* window. See `renderVbsLauncher` and `spawnDetachedCore` for details.
|
|
49
|
+
*/
|
|
50
|
+
vbsPath: string;
|
|
45
51
|
}
|
|
46
52
|
declare function getShimContext(): ShimContext;
|
|
47
53
|
declare function getStartupShimPath(): string;
|
|
@@ -82,6 +88,45 @@ declare function escapeCmd(str: string): string;
|
|
|
82
88
|
* `stop()` key off of.
|
|
83
89
|
*/
|
|
84
90
|
declare function renderCmdShim(ctx: ShimContext): string;
|
|
91
|
+
/**
|
|
92
|
+
* Escape a string for safe embedding in a VBScript string literal.
|
|
93
|
+
*
|
|
94
|
+
* VBScript strings use `""` as the escape for a literal double-quote.
|
|
95
|
+
* No other escapes needed for our use case (we only interpolate
|
|
96
|
+
* filesystem paths, which on Windows can't contain newlines and
|
|
97
|
+
* effectively never contain `"`).
|
|
98
|
+
*/
|
|
99
|
+
declare function escapeVbs(str: string): string;
|
|
100
|
+
/**
|
|
101
|
+
* Render the VBScript launcher that `spawnDetachedCore` invokes via
|
|
102
|
+
* `wscript.exe` to kick off the `.cmd` shim without a visible window.
|
|
103
|
+
*
|
|
104
|
+
* Why this indirection exists at all:
|
|
105
|
+
*
|
|
106
|
+
* On Windows, spawning the shim directly via
|
|
107
|
+
* `spawn('cmd.exe', [shim], { detached: true, windowsHide: true })`
|
|
108
|
+
* pops up a terminal window in recent Windows Terminal installs
|
|
109
|
+
* where "Default terminal" is set to Windows Terminal. Node's docs
|
|
110
|
+
* explicitly state that on Windows, `detached: true` "will have
|
|
111
|
+
* its own console window" — that console allocation is intercepted
|
|
112
|
+
* by Windows Terminal and shown as a visible tab, `windowsHide`
|
|
113
|
+
* notwithstanding.
|
|
114
|
+
*
|
|
115
|
+
* Removing `detached: true` fixes the popup but also kills the
|
|
116
|
+
* child when the Neura CLI process exits (the core needs to
|
|
117
|
+
* survive long past the 100ms `neura start` invocation).
|
|
118
|
+
*
|
|
119
|
+
* The fix: spawn `wscript.exe` instead of `cmd.exe`. WScript is a
|
|
120
|
+
* GUI app, not a console app — it has no console to attach to, so
|
|
121
|
+
* `detached: true` doesn't create a new console window. WScript
|
|
122
|
+
* runs this `.vbs` file, which calls `WshShell.Run` with window
|
|
123
|
+
* style `0` (hidden), which internally uses `ShellExecuteEx` to
|
|
124
|
+
* launch the `.cmd` shim fully detached with no visible window.
|
|
125
|
+
* WScript exits immediately after dispatching the Run call, and
|
|
126
|
+
* the shim's cmd.exe + node.exe subtree continues running,
|
|
127
|
+
* invisible and independent.
|
|
128
|
+
*/
|
|
129
|
+
declare function renderVbsLauncher(ctx: ShimContext): string;
|
|
85
130
|
export declare function isInstalled(): boolean;
|
|
86
131
|
/**
|
|
87
132
|
* Check if the core process is currently alive.
|
|
@@ -131,6 +176,8 @@ export declare const __test__: {
|
|
|
131
176
|
getShimContext: typeof getShimContext;
|
|
132
177
|
getStartupShimPath: typeof getStartupShimPath;
|
|
133
178
|
renderCmdShim: typeof renderCmdShim;
|
|
179
|
+
renderVbsLauncher: typeof renderVbsLauncher;
|
|
134
180
|
escapeCmd: typeof escapeCmd;
|
|
181
|
+
escapeVbs: typeof escapeVbs;
|
|
135
182
|
};
|
|
136
183
|
//# sourceMappingURL=windows.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windows.d.ts","sourceRoot":"","sources":["../../src/service/windows.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iBAAS,cAAc,IAAI,WAAW,
|
|
1
|
+
{"version":3,"file":"windows.d.ts","sourceRoot":"","sources":["../../src/service/windows.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iBAAS,cAAc,IAAI,WAAW,CAcrC;AAED,iBAAS,kBAAkB,IAAI,MAAM,CAYpC;AAED;;;;;;;;GAQG;AACH,iBAAS,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKtC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,iBAAS,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAc/C;AAYD;;;;;;;GAOG;AACH,iBAAS,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,iBAAS,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAUnD;AAuID,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAgBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,IAAI,OAAO,CA0BnC;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAI5D,wEAAwE;AACxE,wBAAgB,kBAAkB,IAAI,WAAW,GAAG,IAAI,CAEvD;AAED,wBAAgB,OAAO,IAAI,IAAI,CA+C9B;AAED,wBAAgB,SAAS,IAAI,IAAI,CAQhC;AAED,wBAAgB,KAAK,IAAI,IAAI,CAG5B;AAED,wBAAgB,IAAI,IAAI,IAAI,CA6B3B;AAED,wBAAgB,OAAO,IAAI,IAAI,CAG9B;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;;;;;;;;;;;AAED,wBASW;AAGX,eAAO,MAAM,QAAQ;;;;;;;;CAQpB,CAAC"}
|
package/dist/service/windows.js
CHANGED
|
@@ -17,6 +17,7 @@ function getShimContext() {
|
|
|
17
17
|
errLogFile: join(logDir, 'core.error.log'),
|
|
18
18
|
pidFile: join(home, 'neura-core.pid'),
|
|
19
19
|
cmdPath: join(home, 'neura-core.cmd'),
|
|
20
|
+
vbsPath: join(home, 'neura-core-launcher.vbs'),
|
|
20
21
|
};
|
|
21
22
|
}
|
|
22
23
|
function getStartupShimPath() {
|
|
@@ -89,6 +90,60 @@ function writeCmdShim(ctx) {
|
|
|
89
90
|
mkdirSync(ctx.logDir, { recursive: true });
|
|
90
91
|
writeFileSync(ctx.cmdPath, renderCmdShim(ctx), 'utf-8');
|
|
91
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Escape a string for safe embedding in a VBScript string literal.
|
|
95
|
+
*
|
|
96
|
+
* VBScript strings use `""` as the escape for a literal double-quote.
|
|
97
|
+
* No other escapes needed for our use case (we only interpolate
|
|
98
|
+
* filesystem paths, which on Windows can't contain newlines and
|
|
99
|
+
* effectively never contain `"`).
|
|
100
|
+
*/
|
|
101
|
+
function escapeVbs(str) {
|
|
102
|
+
return str.replace(/"/g, '""');
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Render the VBScript launcher that `spawnDetachedCore` invokes via
|
|
106
|
+
* `wscript.exe` to kick off the `.cmd` shim without a visible window.
|
|
107
|
+
*
|
|
108
|
+
* Why this indirection exists at all:
|
|
109
|
+
*
|
|
110
|
+
* On Windows, spawning the shim directly via
|
|
111
|
+
* `spawn('cmd.exe', [shim], { detached: true, windowsHide: true })`
|
|
112
|
+
* pops up a terminal window in recent Windows Terminal installs
|
|
113
|
+
* where "Default terminal" is set to Windows Terminal. Node's docs
|
|
114
|
+
* explicitly state that on Windows, `detached: true` "will have
|
|
115
|
+
* its own console window" — that console allocation is intercepted
|
|
116
|
+
* by Windows Terminal and shown as a visible tab, `windowsHide`
|
|
117
|
+
* notwithstanding.
|
|
118
|
+
*
|
|
119
|
+
* Removing `detached: true` fixes the popup but also kills the
|
|
120
|
+
* child when the Neura CLI process exits (the core needs to
|
|
121
|
+
* survive long past the 100ms `neura start` invocation).
|
|
122
|
+
*
|
|
123
|
+
* The fix: spawn `wscript.exe` instead of `cmd.exe`. WScript is a
|
|
124
|
+
* GUI app, not a console app — it has no console to attach to, so
|
|
125
|
+
* `detached: true` doesn't create a new console window. WScript
|
|
126
|
+
* runs this `.vbs` file, which calls `WshShell.Run` with window
|
|
127
|
+
* style `0` (hidden), which internally uses `ShellExecuteEx` to
|
|
128
|
+
* launch the `.cmd` shim fully detached with no visible window.
|
|
129
|
+
* WScript exits immediately after dispatching the Run call, and
|
|
130
|
+
* the shim's cmd.exe + node.exe subtree continues running,
|
|
131
|
+
* invisible and independent.
|
|
132
|
+
*/
|
|
133
|
+
function renderVbsLauncher(ctx) {
|
|
134
|
+
// WshShell.Run(command, windowStyle, bWaitOnReturn):
|
|
135
|
+
// command = fully-quoted path to the .cmd shim
|
|
136
|
+
// windowStyle = 0 → hidden
|
|
137
|
+
// bWaitOnReturn = False → fire-and-forget
|
|
138
|
+
return `' Neura core hidden launcher. Generated by \`neura install\`.\r
|
|
139
|
+
' Do not edit; re-run \`neura install\` to regenerate.\r
|
|
140
|
+
Set shell = CreateObject("WScript.Shell")\r
|
|
141
|
+
shell.Run Chr(34) & "${escapeVbs(ctx.cmdPath)}" & Chr(34), 0, False\r
|
|
142
|
+
`;
|
|
143
|
+
}
|
|
144
|
+
function writeVbsLauncher(ctx) {
|
|
145
|
+
writeFileSync(ctx.vbsPath, renderVbsLauncher(ctx), 'utf-8');
|
|
146
|
+
}
|
|
92
147
|
/**
|
|
93
148
|
* Register the Scheduled Task via `schtasks /Create`.
|
|
94
149
|
*
|
|
@@ -157,15 +212,49 @@ function removeStartupShim() {
|
|
|
157
212
|
unlinkSync(shimPath);
|
|
158
213
|
}
|
|
159
214
|
/**
|
|
160
|
-
* Spawn the launcher `.cmd`
|
|
161
|
-
*
|
|
215
|
+
* Spawn the launcher `.cmd` so the core starts immediately after
|
|
216
|
+
* `neura install` / `neura start` (instead of waiting for the next
|
|
217
|
+
* logon to trigger the Scheduled Task / Startup shim).
|
|
218
|
+
*
|
|
219
|
+
* The spawn chain:
|
|
220
|
+
*
|
|
221
|
+
* Node CLI
|
|
222
|
+
* → wscript.exe (detached, hidden, no console to show)
|
|
223
|
+
* → neura-core-launcher.vbs
|
|
224
|
+
* → WshShell.Run("neura-core.cmd", windowStyle=0, wait=False)
|
|
225
|
+
* → cmd.exe (hidden, detached via ShellExecuteEx)
|
|
226
|
+
* → node.exe running the core bundle
|
|
162
227
|
*
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
*
|
|
228
|
+
* Why this convoluted chain? We tried the obvious thing —
|
|
229
|
+
* `spawn('cmd.exe', [shim], { detached: true, windowsHide: true })` —
|
|
230
|
+
* and it pops up a visible Windows Terminal tab in any install where
|
|
231
|
+
* "Default terminal" is set to Windows Terminal. Node's docs say
|
|
232
|
+
* `detached: true` "will have its own console window" on Windows, and
|
|
233
|
+
* that console allocation is intercepted by Windows Terminal's
|
|
234
|
+
* default-terminal shim regardless of the `windowsHide` flag.
|
|
235
|
+
*
|
|
236
|
+
* Removing `detached: true` fixes the popup but breaks survival: the
|
|
237
|
+
* child gets killed when the parent Node CLI exits (~100ms later).
|
|
238
|
+
*
|
|
239
|
+
* The workaround is to launch via `wscript.exe`, a GUI application
|
|
240
|
+
* that has no console. With `detached: true`, Windows still creates a
|
|
241
|
+
* fresh process-group leader, but there is no console allocation at
|
|
242
|
+
* all — no popup. `wscript.exe` runs a tiny `.vbs` file that invokes
|
|
243
|
+
* `WshShell.Run` with window style `0` and `bWaitOnReturn=False`.
|
|
244
|
+
* That's a thin wrapper over `ShellExecuteEx`, which launches the
|
|
245
|
+
* `.cmd` shim with `SW_HIDE` and returns immediately. The shim runs
|
|
246
|
+
* `cmd.exe` → `node.exe` invisibly, and those processes survive long
|
|
247
|
+
* after both `wscript` and the Neura CLI have exited because
|
|
248
|
+
* ShellExecuteEx properly orphans them.
|
|
249
|
+
*
|
|
250
|
+
* Verified end-to-end on a real Windows machine where the previous
|
|
251
|
+
* `cmd.exe` approach reliably popped up a terminal tab — this chain
|
|
252
|
+
* produces zero visible windows and the core runs on the correct
|
|
253
|
+
* port, surviving the parent `neura start` process exiting ~100ms
|
|
254
|
+
* after spawn.
|
|
166
255
|
*/
|
|
167
256
|
function spawnDetachedCore(ctx) {
|
|
168
|
-
const child = spawn('
|
|
257
|
+
const child = spawn('wscript.exe', [ctx.vbsPath], {
|
|
169
258
|
detached: true,
|
|
170
259
|
stdio: 'ignore',
|
|
171
260
|
windowsHide: true,
|
|
@@ -238,10 +327,18 @@ export function getLastInstallMode() {
|
|
|
238
327
|
}
|
|
239
328
|
export function install() {
|
|
240
329
|
const ctx = getShimContext();
|
|
241
|
-
// Always regenerate
|
|
242
|
-
//
|
|
243
|
-
//
|
|
330
|
+
// Always regenerate both launchers so they pick up any new paths or
|
|
331
|
+
// config changes since the last install. Idempotent: overwriting
|
|
332
|
+
// both files is safe whether or not the task is already registered.
|
|
333
|
+
//
|
|
334
|
+
// - `neura-core.cmd` → invoked by the Scheduled Task or
|
|
335
|
+
// Startup-folder shim at logon
|
|
336
|
+
// - `neura-core-launcher.vbs` → invoked by `spawnDetachedCore`
|
|
337
|
+
// via `wscript.exe` to start the
|
|
338
|
+
// core from `install()`/`start()`
|
|
339
|
+
// without a visible popup window
|
|
244
340
|
writeCmdShim(ctx);
|
|
341
|
+
writeVbsLauncher(ctx);
|
|
245
342
|
// Prefer the Scheduled Task path — it survives reboots cleanly and
|
|
246
343
|
// shows up in Task Scheduler so the user can manage it from the GUI.
|
|
247
344
|
// If it fails (GPO, corp lockdown, schtasks.exe missing from PATH,
|
|
@@ -278,9 +375,10 @@ export function uninstall() {
|
|
|
278
375
|
stop();
|
|
279
376
|
deleteScheduledTask();
|
|
280
377
|
removeStartupShim();
|
|
281
|
-
// Leave NEURA_HOME/neura-core.cmd
|
|
282
|
-
//
|
|
283
|
-
// that's the user's
|
|
378
|
+
// Leave NEURA_HOME/neura-core.cmd and neura-core-launcher.vbs in
|
|
379
|
+
// place — they're harmless and get re-written on next
|
|
380
|
+
// `neura install`. Don't delete NEURA_HOME itself; that's the user's
|
|
381
|
+
// config + memory store.
|
|
284
382
|
}
|
|
285
383
|
export function start() {
|
|
286
384
|
if (isRunning())
|
|
@@ -341,6 +439,8 @@ export const __test__ = {
|
|
|
341
439
|
getShimContext,
|
|
342
440
|
getStartupShimPath,
|
|
343
441
|
renderCmdShim,
|
|
442
|
+
renderVbsLauncher,
|
|
344
443
|
escapeCmd,
|
|
444
|
+
escapeVbs,
|
|
345
445
|
};
|
|
346
446
|
//# sourceMappingURL=windows.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windows.js","sourceRoot":"","sources":["../../src/service/windows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACpF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,SAAS,GAAG,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"windows.js","sourceRoot":"","sources":["../../src/service/windows.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED