@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 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 an MCP server (`snu --mcp`) in Cursor, Windsurf, Claude Desktop, and Antigravity.
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. MCP Configuration (Cursor / Claude Desktop / Windsurf)
51
+ ## 2. Use as an MCP Server
52
52
 
53
- Add the following block to your editor's MCP configuration (`mcp.json` or `claude_desktop_config.json`):
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": ["-y", "@snutils/snu", "--mcp"]
66
+ "args": ["--yes", "--prefer-online", "@snutils/snu@latest", "--mcp"]
61
67
  }
62
68
  }
63
69
  }
64
70
  ```
65
71
 
66
- Or if installed globally:
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
- > **Standalone MCP:** When you launch `snu --mcp`, it automatically detects if VS Code is running. If not, it spins up an in-process standalone bridge so your AI editor connects directly to your browser's SN Utils helper tab with zero extra steps.
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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,OAAO,QAA0B,CAAC;AAE/C,wBAAgB,SAAS,IAAI,IAAI,CAoChC;AAED,wBAAsB,MAAM,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwQxE"}
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
- // Handle standalone daemon command: snu serve
132
- if (nonGlobalTokens[0] === 'serve') {
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] VS Code requested port handover. Standalone bridge yielded ports.');
180
+ console.log('\n[snu] Standalone bridge stopped.');
137
181
  process.exit(0);
138
182
  },
139
183
  });
140
- try {
141
- const { httpPort, wsPort } = await standalone.start();
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, false);
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);
@@ -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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"}
@@ -3,6 +3,7 @@ export interface StandaloneBridgeOptions {
3
3
  wsPort?: number;
4
4
  cwd?: string;
5
5
  onYield?: () => void;
6
+ portFileMode?: 'default' | 'workspace-only' | 'none';
6
7
  }
7
8
  export declare class StandaloneBridge {
8
9
  private options;
@@ -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;CACtB;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;IAqCtB,cAAc,IAAI,IAAI;IAgBhB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAoB5B"}
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
- try {
105
- const vscodeDir = path.join(this.cwd, '.vscode');
106
- if (!fs.existsSync(vscodeDir)) {
107
- fs.mkdirSync(vscodeDir, { recursive: true });
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
- const wsPortFile = path.join(vscodeDir, 'sn-agent-port.json');
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
- try {
116
- const globalDir = path.join(os.homedir(), '.sn-scriptsync');
117
- if (!fs.existsSync(globalDir)) {
118
- fs.mkdirSync(globalDir, { recursive: true });
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
- const globalPortFile = path.join(globalDir, 'agent-port.json');
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":"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"}
1
+ {"version":3,"file":"standalone.js","sourceRoot":"","sources":["../../src/server/standalone.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snutils/snu",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "Unified CLI and Model Context Protocol (MCP) server for SN Utils and ScriptSync",
5
5
  "author": "Arnoud Kooi <arnoud@snutils.com>",
6
6
  "license": "SEE LICENSE IN LICENSE.md",