@snutils/snu 0.1.5 → 0.1.7
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 +103 -6
- package/dist/cli/daemon.d.ts +30 -0
- package/dist/cli/daemon.d.ts.map +1 -0
- package/dist/cli/daemon.js +80 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +162 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/selfUpdate.d.ts +11 -0
- package/dist/cli/selfUpdate.d.ts.map +1 -0
- package/dist/cli/selfUpdate.js +77 -0
- package/dist/cli/selfUpdate.js.map +1 -0
- package/dist/cli/updateCheck.d.ts +28 -0
- package/dist/cli/updateCheck.d.ts.map +1 -0
- package/dist/cli/updateCheck.js +143 -0
- package/dist/cli/updateCheck.js.map +1 -0
- package/dist/server/standalone.d.ts +1 -0
- package/dist/server/standalone.d.ts.map +1 -1
- package/dist/server/standalone.js +21 -16
- package/dist/server/standalone.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ Unified CLI and Model Context Protocol (MCP) server for ServiceNow development,
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
9
9
|
- **Zero Manual Credentials:** Connects to your live browser session via SN Utils, automatically inheriting authenticated SSO/MFA sessions, cookies, update set, and application scope.
|
|
10
|
-
- **Dual Mode (CLI + MCP):** Use it as a terminal command tool (`snu query`, `snu search`, `snu schema`) or as
|
|
10
|
+
- **Dual Mode (CLI + MCP):** Use it as a terminal command tool (`snu query`, `snu search`, `snu schema`) or as a local stdio MCP server (`snu --mcp`) in any compatible AI client.
|
|
11
11
|
- **Works Attached & Standalone:** Operates seamlessly when VS Code is open (Attached Mode), or completely standalone without VS Code (Standalone Mode with in-process bridge and auto-handover).
|
|
12
12
|
- **14 Strictly-Typed Tools:** Fast GraphQL code search, schema dictionary inspection, record queries, CRUD operations, background script execution, and live form automation.
|
|
13
13
|
|
|
@@ -48,22 +48,29 @@ snu run "gs.print('Hello from ' + gs.getUserName());"
|
|
|
48
48
|
|
|
49
49
|
---
|
|
50
50
|
|
|
51
|
-
## 2.
|
|
51
|
+
## 2. Use as an MCP Server
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
`@snutils/snu` exposes the same ServiceNow capabilities as 14 MCP tools. The MCP client starts `snu --mcp` as a local stdio process; no remote MCP endpoint or API key is required.
|
|
54
|
+
|
|
55
|
+
### Configure your MCP client
|
|
56
|
+
|
|
57
|
+
Add this server to your client's MCP configuration. Depending on the client, this may be an `mcp.json`, `claude_desktop_config.json`, project setting, or an **Add MCP server** screen.
|
|
58
|
+
|
|
59
|
+
Using `npx` is the easiest option because it does not require a global installation:
|
|
54
60
|
|
|
55
61
|
```json
|
|
56
62
|
{
|
|
57
63
|
"mcpServers": {
|
|
58
64
|
"sn-utils": {
|
|
59
65
|
"command": "npx",
|
|
60
|
-
"args": ["-
|
|
66
|
+
"args": ["--yes", "--prefer-online", "@snutils/snu@latest", "--mcp"]
|
|
61
67
|
}
|
|
62
68
|
}
|
|
63
69
|
}
|
|
64
70
|
```
|
|
65
71
|
|
|
66
|
-
|
|
72
|
+
If the package is installed globally, use the shorter command:
|
|
73
|
+
|
|
67
74
|
```json
|
|
68
75
|
{
|
|
69
76
|
"mcpServers": {
|
|
@@ -75,7 +82,84 @@ Or if installed globally:
|
|
|
75
82
|
}
|
|
76
83
|
```
|
|
77
84
|
|
|
78
|
-
|
|
85
|
+
Restart or refresh the MCP client after changing its configuration. The server should appear as `sn-utils` with 14 tools. `@latest` with `--prefer-online` checks npm for a newer release each time the MCP process starts; a running MCP process is never replaced underneath an active session.
|
|
86
|
+
|
|
87
|
+
### Connect a ServiceNow instance
|
|
88
|
+
|
|
89
|
+
1. Start or enable the `sn-utils` server in your MCP client.
|
|
90
|
+
2. Open the ServiceNow instance in a browser where you are already signed in.
|
|
91
|
+
3. Run `/token` from the SN Utils slash command box. This opens the ScriptSync and AI Agent Helper tab.
|
|
92
|
+
4. Keep the helper tab open while the agent is working.
|
|
93
|
+
5. Ask the agent to call `snu_get_context` before doing other work. It reports the connected instance, helper status, license tier, and effective permission gates.
|
|
94
|
+
|
|
95
|
+
You normally do **not** need to run `snu serve` separately. `snu --mcp` first looks for the ScriptSync bridge supplied by VS Code or an existing standalone daemon. If neither is available, it starts an in-process standalone bridge automatically. Run `snu serve` only when you also want a persistent bridge for separate terminal commands.
|
|
96
|
+
|
|
97
|
+
The `/token` connection must be made after a bridge is running. If the MCP client or standalone bridge is restarted, run `/token` again. Session credentials remain in memory and are cleared when the helper disconnects.
|
|
98
|
+
|
|
99
|
+
### Try it from your agent
|
|
100
|
+
|
|
101
|
+
Example prompts:
|
|
102
|
+
|
|
103
|
+
```text
|
|
104
|
+
Use snu_get_context and summarize the connected ServiceNow instance and permission gates.
|
|
105
|
+
|
|
106
|
+
Inspect the incident table schema, then query five active priority 1 incidents.
|
|
107
|
+
|
|
108
|
+
Find active Script Includes containing "GlideRecordSecure" and summarize what they do.
|
|
109
|
+
|
|
110
|
+
Read the current incident form and explain which fields are populated. Do not change anything.
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
When more than one instance is connected, tell the agent which instance to use or pass the optional `instance` argument to a tool.
|
|
114
|
+
|
|
115
|
+
### Available MCP tools
|
|
116
|
+
|
|
117
|
+
| Category | Tools | Purpose |
|
|
118
|
+
| --- | --- | --- |
|
|
119
|
+
| Connection | `snu_get_context` | Inspect the bridge, helper, instances, license, and permission gates. |
|
|
120
|
+
| Schema and search | `snu_get_schema`, `snu_code_search` | Inspect table metadata and search server-side code. Code Search requires SN Utils Pro. |
|
|
121
|
+
| Record reads | `snu_query_records`, `snu_get_record` | Query tables or fetch a record by `sys_id`. |
|
|
122
|
+
| Record writes | `snu_create_artifact`, `snu_update_record`, `snu_delete_record` | Create scriptable artifacts, update fields, or delete a record. |
|
|
123
|
+
| Server execution | `snu_run_background_script` | Run server-side JavaScript and return its captured output. |
|
|
124
|
+
| Browser and forms | `snu_get_form_state`, `snu_set_form_field`, `snu_run_ui_action`, `snu_navigate`, `snu_take_screenshot` | Inspect and operate the connected ServiceNow browser tab. |
|
|
125
|
+
|
|
126
|
+
### Permissions and human review
|
|
127
|
+
|
|
128
|
+
The helper tab applies permissions per ServiceNow instance:
|
|
129
|
+
|
|
130
|
+
- **Off** blocks that class of operation.
|
|
131
|
+
- **Approve** sends high-risk operations to the helper's Review Queue for one-time approval.
|
|
132
|
+
- **Auto** allows that operation without a review prompt.
|
|
133
|
+
|
|
134
|
+
Standalone mode also has fail-closed host gates. Background Scripts, record deletion, REST writes, and browser debugger access are disabled by default; artifact creation is enabled by default. Both the host gate and the instance gate must allow an operation.
|
|
135
|
+
|
|
136
|
+
For an MCP process, host gates can be enabled through environment variables in clients that support an `env` block. Only enable the capabilities you intend to give the agent:
|
|
137
|
+
|
|
138
|
+
```json
|
|
139
|
+
{
|
|
140
|
+
"mcpServers": {
|
|
141
|
+
"sn-utils": {
|
|
142
|
+
"command": "npx",
|
|
143
|
+
"args": ["--yes", "--prefer-online", "@snutils/snu@latest", "--mcp"],
|
|
144
|
+
"env": {
|
|
145
|
+
"SNU_ALLOW_BACKGROUND_SCRIPTS": "1"
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Supported host settings are `SNU_ALLOW_BACKGROUND_SCRIPTS`, `SNU_ALLOW_DELETE_RECORDS`, `SNU_ALLOW_CREATE_ARTIFACTS`, `SNU_ALLOW_BROWSER_DEBUGGER`, and `SNU_ALLOW_REST_REQUEST`. Global defaults can alternatively be stored in `~/.sn-scriptsync/settings.json`.
|
|
153
|
+
|
|
154
|
+
Interactive CLI commands check for a newer release at most once every 24 hours and print an update hint when one is available. MCP, JSON output, CI, and npm offline mode never perform this check. Set `SNU_DISABLE_UPDATE_CHECK=1` to opt out explicitly.
|
|
155
|
+
|
|
156
|
+
### MCP troubleshooting
|
|
157
|
+
|
|
158
|
+
- **`Missing instance URL or authentication token`:** make sure the MCP server is running, then run `/token` again from the intended ServiceNow instance.
|
|
159
|
+
- **`E_BROWSER_DISCONNECTED`:** reopen the helper with `/token` and leave that tab open.
|
|
160
|
+
- **An operation is disabled:** check both the host setting and the matching per-instance permission in the helper's Agent Access tab.
|
|
161
|
+
- **The MCP server is not listed:** refresh or restart the MCP client after editing its configuration. With a global install, verify that the client can resolve `snu`; otherwise use the `npx` configuration.
|
|
162
|
+
- **Multiple instances are connected:** pass the tool's `instance` argument or name the target instance in the prompt.
|
|
79
163
|
|
|
80
164
|
---
|
|
81
165
|
|
|
@@ -89,10 +173,23 @@ snu context
|
|
|
89
173
|
# Start a persistent standalone bridge daemon
|
|
90
174
|
snu serve
|
|
91
175
|
|
|
176
|
+
# Inspect, gracefully restart, or stop the standalone bridge
|
|
177
|
+
snu status
|
|
178
|
+
snu restart
|
|
179
|
+
snu stop
|
|
180
|
+
|
|
181
|
+
# Check for a newer global CLI, then install it explicitly
|
|
182
|
+
snu update --check
|
|
183
|
+
snu update
|
|
184
|
+
|
|
92
185
|
# GraphQL field-index code search across script tables (Pro)
|
|
93
186
|
snu search "OAuthUtil" --tables sys_script_include,sys_ui_action --limit 20
|
|
94
187
|
```
|
|
95
188
|
|
|
189
|
+
`snu serve` is idempotent: if a healthy bridge already owns the ports, it reports that process instead of failing with `EADDRINUSE`. `snu stop` and `snu restart` only manage a bridge that identifies itself as a standalone `snu` host and whose authenticated port file matches its live PID. They refuse to stop a VS Code-owned bridge or an unrelated process.
|
|
190
|
+
|
|
191
|
+
`snu update` checks npm and updates a global installation with `npm install --global @snutils/snu@latest`. Use `snu update --check` for a read-only check. When running through `npx`, restart the MCP or CLI process with `@snutils/snu@latest` instead; there is no global installation to replace.
|
|
192
|
+
|
|
96
193
|
### Query & Schema
|
|
97
194
|
```bash
|
|
98
195
|
# Inspect table dictionary columns, types, references, choices
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { DiscoveryOptions, DiscoveryResult, HealthResponse } from '../types.js';
|
|
2
|
+
interface YieldResponse {
|
|
3
|
+
ok: boolean;
|
|
4
|
+
status: number;
|
|
5
|
+
json(): Promise<{
|
|
6
|
+
status?: string;
|
|
7
|
+
error?: string;
|
|
8
|
+
}>;
|
|
9
|
+
}
|
|
10
|
+
type YieldFetch = (url: string, init: {
|
|
11
|
+
method: string;
|
|
12
|
+
headers: Record<string, string>;
|
|
13
|
+
body: string;
|
|
14
|
+
signal: AbortSignal;
|
|
15
|
+
}) => Promise<YieldResponse>;
|
|
16
|
+
export interface ActiveBridgeStatus {
|
|
17
|
+
running: true;
|
|
18
|
+
discovery: DiscoveryResult;
|
|
19
|
+
health: HealthResponse;
|
|
20
|
+
}
|
|
21
|
+
export interface InactiveBridgeStatus {
|
|
22
|
+
running: false;
|
|
23
|
+
}
|
|
24
|
+
export type BridgeStatus = ActiveBridgeStatus | InactiveBridgeStatus;
|
|
25
|
+
export declare function inspectBridge(options?: DiscoveryOptions): Promise<BridgeStatus>;
|
|
26
|
+
export declare function assertStandaloneBridge(status: BridgeStatus): asserts status is ActiveBridgeStatus;
|
|
27
|
+
export declare function requestStandaloneYield(status: BridgeStatus, fetchImpl?: YieldFetch): Promise<void>;
|
|
28
|
+
export declare function waitForBridgeExit(pid: number, timeoutMs?: number, aliveCheck?: (pid: number) => boolean): Promise<void>;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=daemon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEhF,UAAU,aAAa;IACrB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,IAAI,OAAO,CAAC;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD;AAED,KAAK,UAAU,GAAG,CAChB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IACJ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;CACrB,KACE,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5B,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,IAAI,CAAC;IACd,SAAS,EAAE,eAAe,CAAC;IAC3B,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,KAAK,CAAC;CAChB;AAED,MAAM,MAAM,YAAY,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;AAErE,wBAAsB,aAAa,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC,CAezF;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,kBAAkB,CAajG;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,YAAY,EACpB,SAAS,GAAE,UAA2C,GACrD,OAAO,CAAC,IAAI,CAAC,CAgCf;AAWD,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,SAAS,SAAQ,EACjB,UAAU,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAoB,GAChD,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.inspectBridge = inspectBridge;
|
|
4
|
+
exports.assertStandaloneBridge = assertStandaloneBridge;
|
|
5
|
+
exports.requestStandaloneYield = requestStandaloneYield;
|
|
6
|
+
exports.waitForBridgeExit = waitForBridgeExit;
|
|
7
|
+
const client_js_1 = require("../client.js");
|
|
8
|
+
async function inspectBridge(options = {}) {
|
|
9
|
+
try {
|
|
10
|
+
const discovery = await (0, client_js_1.discoverBridge)(options);
|
|
11
|
+
const health = await (0, client_js_1.checkHealth)(discovery.port, discovery.pid);
|
|
12
|
+
return { running: true, discovery, health };
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
if (err?.code === 'E_BRIDGE_NOT_FOUND' ||
|
|
16
|
+
err?.code === 'E_BRIDGE_UNREACHABLE' ||
|
|
17
|
+
err?.code === 'E_STALE_PORT_FILE') {
|
|
18
|
+
return { running: false };
|
|
19
|
+
}
|
|
20
|
+
throw err;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function assertStandaloneBridge(status) {
|
|
24
|
+
if (!status.running) {
|
|
25
|
+
throw new client_js_1.ScriptSyncClientError('No active SN Utils standalone bridge found.', 'E_SERVER_NOT_RUNNING');
|
|
26
|
+
}
|
|
27
|
+
if (status.health.hostKind !== 'standalone') {
|
|
28
|
+
throw new client_js_1.ScriptSyncClientError('The active bridge is owned by VS Code. Stop or restart it from VS Code instead.', 'E_NOT_STANDALONE');
|
|
29
|
+
}
|
|
30
|
+
if (status.health.pid !== status.discovery.pid) {
|
|
31
|
+
throw new client_js_1.ScriptSyncClientError('Bridge PID changed during lifecycle check.', 'E_STALE_PORT_FILE');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function requestStandaloneYield(status, fetchImpl = fetch) {
|
|
35
|
+
assertStandaloneBridge(status);
|
|
36
|
+
const controller = new AbortController();
|
|
37
|
+
const timer = setTimeout(() => controller.abort(), 2_000);
|
|
38
|
+
try {
|
|
39
|
+
const response = await fetchImpl(`http://127.0.0.1:${status.discovery.port}/api/yield`, {
|
|
40
|
+
method: 'POST',
|
|
41
|
+
headers: {
|
|
42
|
+
'Content-Type': 'application/json',
|
|
43
|
+
'X-Agent-Token': status.discovery.token,
|
|
44
|
+
},
|
|
45
|
+
body: JSON.stringify({ id: `snu_lifecycle_${Date.now()}`, command: 'yield', params: {} }),
|
|
46
|
+
signal: controller.signal,
|
|
47
|
+
});
|
|
48
|
+
const payload = await response.json().catch(() => ({}));
|
|
49
|
+
if (!response.ok || payload.status !== 'success') {
|
|
50
|
+
throw new client_js_1.ScriptSyncClientError(payload.error || `Standalone bridge refused to stop (HTTP ${response.status}).`, 'E_STOP_FAILED', response.status);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
if (err instanceof client_js_1.ScriptSyncClientError)
|
|
55
|
+
throw err;
|
|
56
|
+
throw new client_js_1.ScriptSyncClientError(`Could not stop standalone bridge: ${err?.message || err}`, 'E_STOP_FAILED');
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
clearTimeout(timer);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function isPidAlive(pid) {
|
|
63
|
+
try {
|
|
64
|
+
process.kill(pid, 0);
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async function waitForBridgeExit(pid, timeoutMs = 5_000, aliveCheck = isPidAlive) {
|
|
72
|
+
const deadline = Date.now() + timeoutMs;
|
|
73
|
+
while (Date.now() < deadline) {
|
|
74
|
+
if (!aliveCheck(pid))
|
|
75
|
+
return;
|
|
76
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
77
|
+
}
|
|
78
|
+
throw new client_js_1.ScriptSyncClientError(`Standalone bridge PID ${pid} did not stop within ${timeoutMs / 1000}s.`, 'E_STOP_TIMEOUT');
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,OAAO,QAA0B,CAAC;AAY/C,wBAAgB,SAAS,IAAI,IAAI,CAwChC;AAED,wBAAsB,MAAM,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgZxE"}
|
package/dist/cli/index.js
CHANGED
|
@@ -45,8 +45,21 @@ const stdin_js_1 = require("./stdin.js");
|
|
|
45
45
|
const format_js_1 = require("./format.js");
|
|
46
46
|
const index_js_1 = require("../mcp/index.js");
|
|
47
47
|
const standalone_js_1 = require("../server/standalone.js");
|
|
48
|
+
const updateCheck_js_1 = require("./updateCheck.js");
|
|
49
|
+
const daemon_js_1 = require("./daemon.js");
|
|
50
|
+
const selfUpdate_js_1 = require("./selfUpdate.js");
|
|
48
51
|
const packageMetadata = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../../package.json'), 'utf8'));
|
|
49
52
|
exports.VERSION = packageMetadata.version;
|
|
53
|
+
function startUpdateCheck(enabled) {
|
|
54
|
+
if (!enabled || !(0, updateCheck_js_1.shouldCheckForUpdates)())
|
|
55
|
+
return Promise.resolve(undefined);
|
|
56
|
+
return (0, updateCheck_js_1.getUpdateNotice)({ currentVersion: exports.VERSION });
|
|
57
|
+
}
|
|
58
|
+
async function printUpdateNotice(noticePromise) {
|
|
59
|
+
const notice = await noticePromise;
|
|
60
|
+
if (notice)
|
|
61
|
+
process.stderr.write(notice);
|
|
62
|
+
}
|
|
50
63
|
function printHelp() {
|
|
51
64
|
console.log(`
|
|
52
65
|
\x1b[1mSN Utils CLI (snu)\x1b[0m — Unified CLI and MCP Bridge for ServiceNow
|
|
@@ -55,6 +68,10 @@ function printHelp() {
|
|
|
55
68
|
snu <command> [arguments...] [options...]
|
|
56
69
|
snu --mcp Start Model Context Protocol (MCP) server on stdio
|
|
57
70
|
snu serve [--port <p>] [--ws <p>] Start persistent standalone bridge daemon
|
|
71
|
+
snu status Show the active local bridge process
|
|
72
|
+
snu restart Gracefully replace a standalone bridge
|
|
73
|
+
snu stop Gracefully stop a standalone bridge
|
|
74
|
+
snu update [--check] Check for or install the latest CLI release
|
|
58
75
|
|
|
59
76
|
\x1b[1mCORE COMMANDS:\x1b[0m
|
|
60
77
|
context Show active connection, helper tab, and instance roster
|
|
@@ -92,10 +109,12 @@ async function runCli(argv = process.argv.slice(2)) {
|
|
|
92
109
|
}
|
|
93
110
|
if (argv.includes('-h') || argv.includes('--help') || argv.length === 0) {
|
|
94
111
|
printHelp();
|
|
112
|
+
await printUpdateNotice(startUpdateCheck(true));
|
|
95
113
|
return;
|
|
96
114
|
}
|
|
97
115
|
if (argv.includes('-v') || argv.includes('--version')) {
|
|
98
116
|
console.log(`snu v${exports.VERSION}`);
|
|
117
|
+
await printUpdateNotice(startUpdateCheck(true));
|
|
99
118
|
return;
|
|
100
119
|
}
|
|
101
120
|
let isJsonMode = argv.includes('-j') || argv.includes('--json');
|
|
@@ -126,26 +145,162 @@ async function runCli(argv = process.argv.slice(2)) {
|
|
|
126
145
|
}
|
|
127
146
|
if (nonGlobalTokens.length === 0) {
|
|
128
147
|
printHelp();
|
|
148
|
+
await printUpdateNotice(startUpdateCheck(!isJsonMode));
|
|
129
149
|
return;
|
|
130
150
|
}
|
|
131
|
-
|
|
132
|
-
|
|
151
|
+
const lifecycleCommand = nonGlobalTokens[0];
|
|
152
|
+
const updateNotice = startUpdateCheck(!isJsonMode && lifecycleCommand !== 'update');
|
|
153
|
+
const lifecycleArgs = (0, util_1.parseArgs)({
|
|
154
|
+
args: nonGlobalTokens.slice(1),
|
|
155
|
+
options: {
|
|
156
|
+
port: { type: 'string' },
|
|
157
|
+
ws: { type: 'string' },
|
|
158
|
+
check: { type: 'boolean' },
|
|
159
|
+
},
|
|
160
|
+
allowPositionals: true,
|
|
161
|
+
strict: false,
|
|
162
|
+
});
|
|
163
|
+
const lifecycleValues = lifecycleArgs.values;
|
|
164
|
+
const parsePort = (name, fallback) => {
|
|
165
|
+
const raw = lifecycleValues[name];
|
|
166
|
+
if (raw === undefined)
|
|
167
|
+
return fallback;
|
|
168
|
+
const parsed = Number(raw);
|
|
169
|
+
if (!Number.isInteger(parsed) || parsed < 1 || parsed > 65535) {
|
|
170
|
+
throw new client_js_1.ScriptSyncClientError(`Invalid --${name} value: ${raw}`, 'E_INVALID_PARAMS');
|
|
171
|
+
}
|
|
172
|
+
return parsed;
|
|
173
|
+
};
|
|
174
|
+
const startStandalone = async () => {
|
|
133
175
|
const standalone = new standalone_js_1.StandaloneBridge({
|
|
134
176
|
cwd: process.cwd(),
|
|
177
|
+
httpPort: parsePort('port', 1977),
|
|
178
|
+
wsPort: parsePort('ws', 1978),
|
|
135
179
|
onYield: () => {
|
|
136
|
-
console.log('\n[snu]
|
|
180
|
+
console.log('\n[snu] Standalone bridge stopped.');
|
|
137
181
|
process.exit(0);
|
|
138
182
|
},
|
|
139
183
|
});
|
|
140
|
-
|
|
141
|
-
|
|
184
|
+
const { httpPort, wsPort } = await standalone.start();
|
|
185
|
+
if (isJsonMode) {
|
|
186
|
+
(0, format_js_1.outputJson)({ running: true, hostKind: 'standalone', pid: process.pid, httpPort, wsPort });
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
142
189
|
console.log(`\n\x1b[1m\x1b[32m[snu] Standalone Bridge Active\x1b[0m`);
|
|
190
|
+
console.log(` • PID: ${process.pid}`);
|
|
143
191
|
console.log(` • HTTP API: http://127.0.0.1:${httpPort}/api`);
|
|
144
192
|
console.log(` • WebSocket: ws://127.0.0.1:${wsPort} (connect via SN Utils helper tab)`);
|
|
145
193
|
console.log(`\n\x1b[90mRunning standalone. Press Ctrl+C to stop.\x1b[0m\n`);
|
|
146
194
|
}
|
|
195
|
+
await printUpdateNotice(updateNotice);
|
|
196
|
+
};
|
|
197
|
+
// Standalone bridge lifecycle commands.
|
|
198
|
+
if (['serve', 'status', 'stop', 'restart'].includes(lifecycleCommand)) {
|
|
199
|
+
try {
|
|
200
|
+
const status = await (0, daemon_js_1.inspectBridge)({ portFile, cwd: process.cwd() });
|
|
201
|
+
if (lifecycleCommand === 'status') {
|
|
202
|
+
const result = status.running
|
|
203
|
+
? {
|
|
204
|
+
running: true,
|
|
205
|
+
hostKind: status.health.hostKind || 'unknown',
|
|
206
|
+
pid: status.health.pid,
|
|
207
|
+
httpPort: status.discovery.port,
|
|
208
|
+
apiVersion: status.health.apiVersion,
|
|
209
|
+
}
|
|
210
|
+
: { running: false };
|
|
211
|
+
if (isJsonMode)
|
|
212
|
+
(0, format_js_1.outputJson)(result);
|
|
213
|
+
else if (status.running) {
|
|
214
|
+
console.log(`\nSN Utils Bridge: active`);
|
|
215
|
+
console.log(` Host: ${status.health.hostKind || 'unknown'}`);
|
|
216
|
+
console.log(` PID: ${status.health.pid}`);
|
|
217
|
+
console.log(` HTTP API: http://127.0.0.1:${status.discovery.port}/api\n`);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
console.log('\nSN Utils Bridge: not running\n');
|
|
221
|
+
}
|
|
222
|
+
await printUpdateNotice(updateNotice);
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
if (lifecycleCommand === 'serve' && status.running) {
|
|
226
|
+
if (isJsonMode) {
|
|
227
|
+
(0, format_js_1.outputJson)({ running: true, alreadyRunning: true, hostKind: status.health.hostKind, pid: status.health.pid });
|
|
228
|
+
}
|
|
229
|
+
else if (status.health.hostKind === 'standalone') {
|
|
230
|
+
console.log(`\nSN Utils standalone bridge is already active (PID ${status.health.pid}).`);
|
|
231
|
+
console.log('Use `snu restart` to replace it.\n');
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
console.log(`\nScriptSync bridge is active in VS Code (PID ${status.health.pid}).`);
|
|
235
|
+
console.log('A separate standalone bridge is not needed.\n');
|
|
236
|
+
}
|
|
237
|
+
await printUpdateNotice(updateNotice);
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
if (lifecycleCommand === 'stop') {
|
|
241
|
+
if (!status.running) {
|
|
242
|
+
if (isJsonMode)
|
|
243
|
+
(0, format_js_1.outputJson)({ stopped: false, alreadyStopped: true });
|
|
244
|
+
else
|
|
245
|
+
console.log('\nSN Utils standalone bridge is already stopped.\n');
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
const pid = status.discovery.pid;
|
|
249
|
+
await (0, daemon_js_1.requestStandaloneYield)(status);
|
|
250
|
+
await (0, daemon_js_1.waitForBridgeExit)(pid);
|
|
251
|
+
if (isJsonMode)
|
|
252
|
+
(0, format_js_1.outputJson)({ stopped: true, pid });
|
|
253
|
+
else
|
|
254
|
+
console.log(`\nStopped SN Utils standalone bridge (PID ${pid}).\n`);
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
if (lifecycleCommand === 'restart' && status.running) {
|
|
258
|
+
const pid = status.discovery.pid;
|
|
259
|
+
await (0, daemon_js_1.requestStandaloneYield)(status);
|
|
260
|
+
await (0, daemon_js_1.waitForBridgeExit)(pid);
|
|
261
|
+
if (!isJsonMode)
|
|
262
|
+
console.log(`\nStopped SN Utils standalone bridge (PID ${pid}). Restarting...`);
|
|
263
|
+
}
|
|
264
|
+
await startStandalone();
|
|
265
|
+
}
|
|
266
|
+
catch (err) {
|
|
267
|
+
(0, format_js_1.outputError)(err, isJsonMode);
|
|
268
|
+
process.exit(1);
|
|
269
|
+
}
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
if (lifecycleCommand === 'update') {
|
|
273
|
+
try {
|
|
274
|
+
const checkOnly = lifecycleValues.check === true;
|
|
275
|
+
if (isJsonMode && !checkOnly) {
|
|
276
|
+
throw new client_js_1.ScriptSyncClientError('Use `snu update --check --json` for machine-readable output.', 'E_INVALID_PARAMS');
|
|
277
|
+
}
|
|
278
|
+
const decision = await (0, selfUpdate_js_1.checkForCliUpdate)(exports.VERSION);
|
|
279
|
+
if (isJsonMode) {
|
|
280
|
+
(0, format_js_1.outputJson)(decision);
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
if (decision.action === 'current') {
|
|
284
|
+
console.log(`\nsnu v${exports.VERSION} is already current (npm latest: v${decision.latestVersion}).\n`);
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
if (decision.action === 'npx') {
|
|
288
|
+
console.log(`\nA newer release is available: v${decision.latestVersion}.`);
|
|
289
|
+
console.log('This command is running through npx; restart it with `@snutils/snu@latest`.\n');
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
if (checkOnly) {
|
|
293
|
+
console.log(`\nUpdate available: snu v${exports.VERSION} -> v${decision.latestVersion}`);
|
|
294
|
+
console.log('Run `snu update` to install it.\n');
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
console.log(`\nUpdating snu v${exports.VERSION} -> v${decision.latestVersion}...\n`);
|
|
298
|
+
await (0, selfUpdate_js_1.installLatestWithNpm)();
|
|
299
|
+
console.log(`\nUpdated @snutils/snu to v${decision.latestVersion}.`);
|
|
300
|
+
console.log('If a standalone bridge is active, run `snu restart` to use the new version.\n');
|
|
301
|
+
}
|
|
147
302
|
catch (err) {
|
|
148
|
-
(0, format_js_1.outputError)(err,
|
|
303
|
+
(0, format_js_1.outputError)(err, isJsonMode);
|
|
149
304
|
process.exit(1);
|
|
150
305
|
}
|
|
151
306
|
return;
|
|
@@ -323,6 +478,7 @@ async function runCli(argv = process.argv.slice(2)) {
|
|
|
323
478
|
else {
|
|
324
479
|
process.stdout.write((0, format_js_1.formatHumanOutput)(tool.agentCommand, result));
|
|
325
480
|
}
|
|
481
|
+
await printUpdateNotice(updateNotice);
|
|
326
482
|
}
|
|
327
483
|
catch (err) {
|
|
328
484
|
(0, format_js_1.outputError)(err, isJsonMode);
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type UpdateAction = 'current' | 'install' | 'npx';
|
|
2
|
+
export interface UpdateDecision {
|
|
3
|
+
action: UpdateAction;
|
|
4
|
+
currentVersion: string;
|
|
5
|
+
latestVersion: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function isNpxExecution(executablePath?: string, env?: NodeJS.ProcessEnv): boolean;
|
|
8
|
+
export declare function decideUpdate(currentVersion: string, latestVersion: string, viaNpx: boolean): UpdateDecision;
|
|
9
|
+
export declare function checkForCliUpdate(currentVersion: string): Promise<UpdateDecision>;
|
|
10
|
+
export declare function installLatestWithNpm(): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=selfUpdate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selfUpdate.d.ts","sourceRoot":"","sources":["../../src/cli/selfUpdate.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,cAAc,CAC5B,cAAc,GAAE,MAA8B,EAC9C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAGT;AAED,wBAAgB,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,cAAc,CAS3G;AAED,wBAAsB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAMvF;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAY1D"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.isNpxExecution = isNpxExecution;
|
|
37
|
+
exports.decideUpdate = decideUpdate;
|
|
38
|
+
exports.checkForCliUpdate = checkForCliUpdate;
|
|
39
|
+
exports.installLatestWithNpm = installLatestWithNpm;
|
|
40
|
+
const node_child_process_1 = require("node:child_process");
|
|
41
|
+
const path = __importStar(require("node:path"));
|
|
42
|
+
const updateCheck_js_1 = require("./updateCheck.js");
|
|
43
|
+
function isNpxExecution(executablePath = process.argv[1] || '', env = process.env) {
|
|
44
|
+
const normalized = executablePath.split(path.sep).join('/');
|
|
45
|
+
return normalized.includes('/_npx/') || env.npm_command === 'exec';
|
|
46
|
+
}
|
|
47
|
+
function decideUpdate(currentVersion, latestVersion, viaNpx) {
|
|
48
|
+
if (!(0, updateCheck_js_1.isNewerVersion)(latestVersion, currentVersion)) {
|
|
49
|
+
return { action: 'current', currentVersion, latestVersion };
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
action: viaNpx ? 'npx' : 'install',
|
|
53
|
+
currentVersion,
|
|
54
|
+
latestVersion,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
async function checkForCliUpdate(currentVersion) {
|
|
58
|
+
const latestVersion = await (0, updateCheck_js_1.fetchLatestVersion)({ timeoutMs: 3_000 });
|
|
59
|
+
if (!latestVersion) {
|
|
60
|
+
throw new Error('Could not retrieve the latest @snutils/snu version from npm.');
|
|
61
|
+
}
|
|
62
|
+
return decideUpdate(currentVersion, latestVersion, isNpxExecution());
|
|
63
|
+
}
|
|
64
|
+
async function installLatestWithNpm() {
|
|
65
|
+
const npmCommand = process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
66
|
+
const exitCode = await new Promise((resolve, reject) => {
|
|
67
|
+
const child = (0, node_child_process_1.spawn)(npmCommand, ['install', '--global', '@snutils/snu@latest'], {
|
|
68
|
+
stdio: 'inherit',
|
|
69
|
+
});
|
|
70
|
+
child.once('error', reject);
|
|
71
|
+
child.once('close', (code) => resolve(code ?? 1));
|
|
72
|
+
});
|
|
73
|
+
if (exitCode !== 0) {
|
|
74
|
+
throw new Error(`npm exited with code ${exitCode}.`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=selfUpdate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selfUpdate.js","sourceRoot":"","sources":["../../src/cli/selfUpdate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,wCAMC;AAED,oCASC;AAED,8CAMC;AAED,oDAYC;AAnDD,2DAA2C;AAC3C,gDAAkC;AAClC,qDAAsE;AAUtE,SAAgB,cAAc,CAC5B,iBAAyB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAC9C,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5D,OAAO,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC;AACrE,CAAC;AAED,SAAgB,YAAY,CAAC,cAAsB,EAAE,aAAqB,EAAE,MAAe;IACzF,IAAI,CAAC,IAAA,+BAAc,EAAC,aAAa,EAAE,cAAc,CAAC,EAAE,CAAC;QACnD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;IAC9D,CAAC;IACD,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QAClC,cAAc;QACd,aAAa;KACd,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,cAAsB;IAC5D,MAAM,aAAa,GAAG,MAAM,IAAA,mCAAkB,EAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,YAAY,CAAC,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC,CAAC;AACvE,CAAC;AAEM,KAAK,UAAU,oBAAoB;IACxC,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IACpE,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7D,MAAM,KAAK,GAAG,IAAA,0BAAK,EAAC,UAAU,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,qBAAqB,CAAC,EAAE;YAC9E,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IACH,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,GAAG,CAAC,CAAC;IACvD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
interface UpdateResponse {
|
|
2
|
+
ok: boolean;
|
|
3
|
+
json(): Promise<{
|
|
4
|
+
version?: unknown;
|
|
5
|
+
}>;
|
|
6
|
+
}
|
|
7
|
+
type UpdateFetch = (url: string, init: {
|
|
8
|
+
signal: AbortSignal;
|
|
9
|
+
}) => Promise<UpdateResponse>;
|
|
10
|
+
export interface LatestVersionOptions {
|
|
11
|
+
timeoutMs?: number;
|
|
12
|
+
fetchImpl?: UpdateFetch;
|
|
13
|
+
}
|
|
14
|
+
export interface UpdateCheckOptions {
|
|
15
|
+
currentVersion: string;
|
|
16
|
+
cacheFile?: string;
|
|
17
|
+
now?: number;
|
|
18
|
+
intervalMs?: number;
|
|
19
|
+
timeoutMs?: number;
|
|
20
|
+
fetchImpl?: UpdateFetch;
|
|
21
|
+
}
|
|
22
|
+
export declare function getUpdateCacheFile(): string;
|
|
23
|
+
export declare function shouldCheckForUpdates(env?: NodeJS.ProcessEnv, stderrIsTty?: boolean): boolean;
|
|
24
|
+
export declare function isNewerVersion(candidate: string, current: string): boolean;
|
|
25
|
+
export declare function fetchLatestVersion(options?: LatestVersionOptions): Promise<string | undefined>;
|
|
26
|
+
export declare function getUpdateNotice(options: UpdateCheckOptions): Promise<string | undefined>;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=updateCheck.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateCheck.d.ts","sourceRoot":"","sources":["../../src/cli/updateCheck.ts"],"names":[],"mappings":"AAaA,UAAU,cAAc;IACtB,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,IAAI,OAAO,CAAC;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACxC;AAED,KAAK,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAE3F,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,WAAW,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,WAAW,CAAC;CACzB;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,qBAAqB,CACnC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,WAAW,GAAE,OAAuC,GACnD,OAAO,CAKT;AAWD,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAY1E;AAwBD,wBAAsB,kBAAkB,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAcxG;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAwB9F"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.getUpdateCacheFile = getUpdateCacheFile;
|
|
37
|
+
exports.shouldCheckForUpdates = shouldCheckForUpdates;
|
|
38
|
+
exports.isNewerVersion = isNewerVersion;
|
|
39
|
+
exports.fetchLatestVersion = fetchLatestVersion;
|
|
40
|
+
exports.getUpdateNotice = getUpdateNotice;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const os = __importStar(require("os"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const REGISTRY_URL = 'https://registry.npmjs.org/@snutils%2Fsnu/latest';
|
|
45
|
+
const DEFAULT_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
46
|
+
const DEFAULT_TIMEOUT_MS = 800;
|
|
47
|
+
function getUpdateCacheFile() {
|
|
48
|
+
return path.join(os.homedir(), '.sn-scriptsync', 'snu-update-check.json');
|
|
49
|
+
}
|
|
50
|
+
function shouldCheckForUpdates(env = process.env, stderrIsTty = process.stderr.isTTY === true) {
|
|
51
|
+
if (!stderrIsTty)
|
|
52
|
+
return false;
|
|
53
|
+
if (env.CI || env.NO_UPDATE_NOTIFIER || env.SNU_DISABLE_UPDATE_CHECK)
|
|
54
|
+
return false;
|
|
55
|
+
if (env.npm_config_offline === 'true' || env.npm_config_offline === '1')
|
|
56
|
+
return false;
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
function parseVersion(version) {
|
|
60
|
+
const match = version.trim().replace(/^v/, '').match(/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/);
|
|
61
|
+
if (!match)
|
|
62
|
+
return undefined;
|
|
63
|
+
return {
|
|
64
|
+
numbers: [Number(match[1]), Number(match[2]), Number(match[3])],
|
|
65
|
+
prerelease: match[4] || null,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function isNewerVersion(candidate, current) {
|
|
69
|
+
const next = parseVersion(candidate);
|
|
70
|
+
const installed = parseVersion(current);
|
|
71
|
+
if (!next || !installed)
|
|
72
|
+
return false;
|
|
73
|
+
for (let i = 0; i < next.numbers.length; i++) {
|
|
74
|
+
if (next.numbers[i] !== installed.numbers[i]) {
|
|
75
|
+
return next.numbers[i] > installed.numbers[i];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return installed.prerelease !== null && next.prerelease === null;
|
|
79
|
+
}
|
|
80
|
+
function readCache(cacheFile) {
|
|
81
|
+
try {
|
|
82
|
+
const parsed = JSON.parse(fs.readFileSync(cacheFile, 'utf8'));
|
|
83
|
+
if (typeof parsed.checkedAt !== 'number')
|
|
84
|
+
return undefined;
|
|
85
|
+
return {
|
|
86
|
+
checkedAt: parsed.checkedAt,
|
|
87
|
+
latestVersion: typeof parsed.latestVersion === 'string' ? parsed.latestVersion : undefined,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function writeCache(cacheFile, cache) {
|
|
95
|
+
try {
|
|
96
|
+
fs.mkdirSync(path.dirname(cacheFile), { recursive: true });
|
|
97
|
+
fs.writeFileSync(cacheFile, JSON.stringify(cache), { encoding: 'utf8', mode: 0o600 });
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// Update checks must never interfere with the requested CLI command.
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async function fetchLatestVersion(options = {}) {
|
|
104
|
+
const controller = new AbortController();
|
|
105
|
+
const timer = setTimeout(() => controller.abort(), options.timeoutMs ?? DEFAULT_TIMEOUT_MS);
|
|
106
|
+
try {
|
|
107
|
+
const fetchImpl = options.fetchImpl ?? fetch;
|
|
108
|
+
const response = await fetchImpl(REGISTRY_URL, { signal: controller.signal });
|
|
109
|
+
if (!response.ok)
|
|
110
|
+
return undefined;
|
|
111
|
+
const payload = await response.json();
|
|
112
|
+
return typeof payload.version === 'string' ? payload.version : undefined;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
clearTimeout(timer);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
async function getUpdateNotice(options) {
|
|
122
|
+
const now = options.now ?? Date.now();
|
|
123
|
+
const intervalMs = options.intervalMs ?? DEFAULT_INTERVAL_MS;
|
|
124
|
+
const cacheFile = options.cacheFile ?? getUpdateCacheFile();
|
|
125
|
+
const cached = readCache(cacheFile);
|
|
126
|
+
if (cached && now - cached.checkedAt < intervalMs)
|
|
127
|
+
return undefined;
|
|
128
|
+
let latestVersion;
|
|
129
|
+
try {
|
|
130
|
+
latestVersion = await fetchLatestVersion({
|
|
131
|
+
timeoutMs: options.timeoutMs,
|
|
132
|
+
fetchImpl: options.fetchImpl,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
finally {
|
|
136
|
+
writeCache(cacheFile, { checkedAt: now, latestVersion });
|
|
137
|
+
}
|
|
138
|
+
if (!latestVersion || !isNewerVersion(latestVersion, options.currentVersion))
|
|
139
|
+
return undefined;
|
|
140
|
+
return (`\nUpdate available: snu v${options.currentVersion} -> v${latestVersion}\n` +
|
|
141
|
+
'Run: npm install -g @snutils/snu@latest\n');
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=updateCheck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateCheck.js","sourceRoot":"","sources":["../../src/cli/updateCheck.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standalone.d.ts","sourceRoot":"","sources":["../../src/server/standalone.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"standalone.d.ts","sourceRoot":"","sources":["../../src/server/standalone.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,CAAC,EAAE,SAAS,GAAG,gBAAgB,GAAG,MAAM,CAAC;CACtD;AAED,qBAAa,gBAAgB;IASf,OAAO,CAAC,OAAO;IAR3B,OAAO,CAAC,QAAQ,CAAC,CAAqB;IACtC,OAAO,CAAC,UAAU,CAAC,CAAuB;IAC1C,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,aAAa,CAAC,CAAa;IACnC,OAAO,CAAC,WAAW,CAAC,CAAa;gBAEb,OAAO,GAAE,uBAA4B;IAKnD,KAAK,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IA0C3E,OAAO,CAAC,cAAc;IA2CtB,cAAc,IAAI,IAAI;IAgBhB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAoB5B"}
|
|
@@ -100,28 +100,33 @@ class StandaloneBridge {
|
|
|
100
100
|
startedAt: Date.now(),
|
|
101
101
|
hostKind: 'standalone',
|
|
102
102
|
}, null, 2);
|
|
103
|
+
const portFileMode = this.options.portFileMode ?? 'default';
|
|
103
104
|
// 1. Workspace port file: .vscode/sn-agent-port.json
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
fs.
|
|
105
|
+
if (portFileMode !== 'none') {
|
|
106
|
+
try {
|
|
107
|
+
const vscodeDir = path.join(this.cwd, '.vscode');
|
|
108
|
+
if (!fs.existsSync(vscodeDir)) {
|
|
109
|
+
fs.mkdirSync(vscodeDir, { recursive: true });
|
|
110
|
+
}
|
|
111
|
+
const wsPortFile = path.join(vscodeDir, 'sn-agent-port.json');
|
|
112
|
+
fs.writeFileSync(wsPortFile, payload);
|
|
113
|
+
this.writtenPortFiles.push(wsPortFile);
|
|
108
114
|
}
|
|
109
|
-
|
|
110
|
-
fs.writeFileSync(wsPortFile, payload);
|
|
111
|
-
this.writtenPortFiles.push(wsPortFile);
|
|
115
|
+
catch { }
|
|
112
116
|
}
|
|
113
|
-
catch { }
|
|
114
117
|
// 2. Global port file: ~/.sn-scriptsync/agent-port.json
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
fs.
|
|
118
|
+
if (portFileMode === 'default') {
|
|
119
|
+
try {
|
|
120
|
+
const globalDir = path.join(os.homedir(), '.sn-scriptsync');
|
|
121
|
+
if (!fs.existsSync(globalDir)) {
|
|
122
|
+
fs.mkdirSync(globalDir, { recursive: true });
|
|
123
|
+
}
|
|
124
|
+
const globalPortFile = path.join(globalDir, 'agent-port.json');
|
|
125
|
+
fs.writeFileSync(globalPortFile, payload);
|
|
126
|
+
this.writtenPortFiles.push(globalPortFile);
|
|
119
127
|
}
|
|
120
|
-
|
|
121
|
-
fs.writeFileSync(globalPortFile, payload);
|
|
122
|
-
this.writtenPortFiles.push(globalPortFile);
|
|
128
|
+
catch { }
|
|
123
129
|
}
|
|
124
|
-
catch { }
|
|
125
130
|
}
|
|
126
131
|
cleanPortFiles() {
|
|
127
132
|
for (const p of this.writtenPortFiles) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standalone.js","sourceRoot":"","sources":["../../src/server/standalone.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,+CAAiC;AACjC,+CAAmD;AACnD,mDAAuD;AACvD,mDAAuD;
|
|
1
|
+
{"version":3,"file":"standalone.js","sourceRoot":"","sources":["../../src/server/standalone.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED