@snutils/snu 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +156 -0
- package/bin/snu.js +8 -0
- package/dist/cli/format.d.ts +14 -0
- package/dist/cli/format.d.ts.map +1 -0
- package/dist/cli/format.js +231 -0
- package/dist/cli/format.js.map +1 -0
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +296 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/stdin.d.ts +14 -0
- package/dist/cli/stdin.d.ts.map +1 -0
- package/dist/cli/stdin.js +75 -0
- package/dist/cli/stdin.js.map +1 -0
- package/dist/client.d.ts +43 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +350 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +4 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +185 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/registry.d.ts +5 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +527 -0
- package/dist/registry.js.map +1 -0
- package/dist/server/canonical.d.ts +10 -0
- package/dist/server/canonical.d.ts.map +1 -0
- package/dist/server/canonical.js +72 -0
- package/dist/server/canonical.js.map +1 -0
- package/dist/server/config.d.ts +9 -0
- package/dist/server/config.d.ts.map +1 -0
- package/dist/server/config.js +117 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/dispatcher.d.ts +32 -0
- package/dist/server/dispatcher.d.ts.map +1 -0
- package/dist/server/dispatcher.js +631 -0
- package/dist/server/dispatcher.js.map +1 -0
- package/dist/server/httpBridge.d.ts +20 -0
- package/dist/server/httpBridge.d.ts.map +1 -0
- package/dist/server/httpBridge.js +219 -0
- package/dist/server/httpBridge.js.map +1 -0
- package/dist/server/pendingRegistry.d.ts +26 -0
- package/dist/server/pendingRegistry.d.ts.map +1 -0
- package/dist/server/pendingRegistry.js +76 -0
- package/dist/server/pendingRegistry.js.map +1 -0
- package/dist/server/policy.d.ts +18 -0
- package/dist/server/policy.d.ts.map +1 -0
- package/dist/server/policy.js +53 -0
- package/dist/server/policy.js.map +1 -0
- package/dist/server/standalone.d.ts +24 -0
- package/dist/server/standalone.d.ts.map +1 -0
- package/dist/server/standalone.js +152 -0
- package/dist/server/standalone.js.map +1 -0
- package/dist/server/wsBridge.d.ts +45 -0
- package/dist/server/wsBridge.d.ts.map +1 -0
- package/dist/server/wsBridge.js +321 -0
- package/dist/server/wsBridge.js.map +1 -0
- package/dist/types.d.ts +123 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,152 @@
|
|
|
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.StandaloneBridge = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
const crypto = __importStar(require("crypto"));
|
|
41
|
+
const wsBridge_js_1 = require("./wsBridge.js");
|
|
42
|
+
const httpBridge_js_1 = require("./httpBridge.js");
|
|
43
|
+
const dispatcher_js_1 = require("./dispatcher.js");
|
|
44
|
+
class StandaloneBridge {
|
|
45
|
+
options;
|
|
46
|
+
wsBridge;
|
|
47
|
+
httpBridge;
|
|
48
|
+
token;
|
|
49
|
+
cwd;
|
|
50
|
+
writtenPortFiles = [];
|
|
51
|
+
constructor(options = {}) {
|
|
52
|
+
this.options = options;
|
|
53
|
+
this.token = crypto.randomBytes(24).toString('hex');
|
|
54
|
+
this.cwd = options.cwd || process.cwd();
|
|
55
|
+
}
|
|
56
|
+
async start() {
|
|
57
|
+
// 1. Start WebSocket Bridge on 1978
|
|
58
|
+
const wsBridge = new wsBridge_js_1.StandaloneWsBridge(this.options.wsPort ?? 1978);
|
|
59
|
+
const wsPort = await wsBridge.start();
|
|
60
|
+
this.wsBridge = wsBridge;
|
|
61
|
+
// 2. Start Dispatcher
|
|
62
|
+
const dispatcher = new dispatcher_js_1.StandaloneDispatcher({
|
|
63
|
+
cwd: this.cwd,
|
|
64
|
+
wsBridge,
|
|
65
|
+
});
|
|
66
|
+
// 3. Start HTTP Bridge on 1977
|
|
67
|
+
const httpBridge = new httpBridge_js_1.StandaloneHttpBridge({
|
|
68
|
+
port: this.options.httpPort ?? 1977,
|
|
69
|
+
token: this.token,
|
|
70
|
+
dispatcher,
|
|
71
|
+
onYield: async () => {
|
|
72
|
+
await this.stop();
|
|
73
|
+
if (this.options.onYield) {
|
|
74
|
+
this.options.onYield();
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
const httpPort = await httpBridge.start();
|
|
79
|
+
this.httpBridge = httpBridge;
|
|
80
|
+
// 4. Write Port Files
|
|
81
|
+
this.writePortFiles(httpPort);
|
|
82
|
+
// 5. Clean up on exit
|
|
83
|
+
const cleanup = () => {
|
|
84
|
+
this.cleanPortFiles();
|
|
85
|
+
};
|
|
86
|
+
process.once('SIGINT', cleanup);
|
|
87
|
+
process.once('SIGTERM', cleanup);
|
|
88
|
+
process.once('exit', cleanup);
|
|
89
|
+
return { httpPort, wsPort, token: this.token };
|
|
90
|
+
}
|
|
91
|
+
writePortFiles(httpPort) {
|
|
92
|
+
const payload = JSON.stringify({
|
|
93
|
+
port: httpPort,
|
|
94
|
+
token: this.token,
|
|
95
|
+
pid: process.pid,
|
|
96
|
+
apiVersion: 8,
|
|
97
|
+
startedAt: Date.now(),
|
|
98
|
+
hostKind: 'standalone',
|
|
99
|
+
}, null, 2);
|
|
100
|
+
// 1. Workspace port file: .vscode/sn-agent-port.json
|
|
101
|
+
try {
|
|
102
|
+
const vscodeDir = path.join(this.cwd, '.vscode');
|
|
103
|
+
if (!fs.existsSync(vscodeDir)) {
|
|
104
|
+
fs.mkdirSync(vscodeDir, { recursive: true });
|
|
105
|
+
}
|
|
106
|
+
const wsPortFile = path.join(vscodeDir, 'sn-agent-port.json');
|
|
107
|
+
fs.writeFileSync(wsPortFile, payload);
|
|
108
|
+
this.writtenPortFiles.push(wsPortFile);
|
|
109
|
+
}
|
|
110
|
+
catch { }
|
|
111
|
+
// 2. Global port file: ~/.sn-scriptsync/agent-port.json
|
|
112
|
+
try {
|
|
113
|
+
const globalDir = path.join(os.homedir(), '.sn-scriptsync');
|
|
114
|
+
if (!fs.existsSync(globalDir)) {
|
|
115
|
+
fs.mkdirSync(globalDir, { recursive: true });
|
|
116
|
+
}
|
|
117
|
+
const globalPortFile = path.join(globalDir, 'agent-port.json');
|
|
118
|
+
fs.writeFileSync(globalPortFile, payload);
|
|
119
|
+
this.writtenPortFiles.push(globalPortFile);
|
|
120
|
+
}
|
|
121
|
+
catch { }
|
|
122
|
+
}
|
|
123
|
+
cleanPortFiles() {
|
|
124
|
+
for (const p of this.writtenPortFiles) {
|
|
125
|
+
try {
|
|
126
|
+
if (fs.existsSync(p)) {
|
|
127
|
+
const raw = fs.readFileSync(p, 'utf8');
|
|
128
|
+
const data = JSON.parse(raw);
|
|
129
|
+
// Only remove if this process owns it
|
|
130
|
+
if (data.pid === process.pid) {
|
|
131
|
+
fs.unlinkSync(p);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch { }
|
|
136
|
+
}
|
|
137
|
+
this.writtenPortFiles = [];
|
|
138
|
+
}
|
|
139
|
+
async stop() {
|
|
140
|
+
this.cleanPortFiles();
|
|
141
|
+
if (this.httpBridge) {
|
|
142
|
+
await this.httpBridge.close();
|
|
143
|
+
this.httpBridge = undefined;
|
|
144
|
+
}
|
|
145
|
+
if (this.wsBridge) {
|
|
146
|
+
await this.wsBridge.close();
|
|
147
|
+
this.wsBridge = undefined;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
exports.StandaloneBridge = StandaloneBridge;
|
|
152
|
+
//# sourceMappingURL=standalone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standalone.js","sourceRoot":"","sources":["../../src/server/standalone.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { PendingRegistry } from './pendingRegistry.js';
|
|
2
|
+
import { HelperCapabilities, InstanceGateSnapshot, SecurityGates } from '../types.js';
|
|
3
|
+
export interface HelperState {
|
|
4
|
+
tier: 'free' | 'pro' | 'trial' | 'enterprise';
|
|
5
|
+
proFeatures: boolean;
|
|
6
|
+
cdp: {
|
|
7
|
+
available: boolean;
|
|
8
|
+
reason: string | null;
|
|
9
|
+
};
|
|
10
|
+
capabilities: HelperCapabilities;
|
|
11
|
+
sessionEpoch: string;
|
|
12
|
+
instanceGates: Map<string, InstanceGateSnapshot>;
|
|
13
|
+
}
|
|
14
|
+
export interface ActiveReview {
|
|
15
|
+
reviewId: string;
|
|
16
|
+
nonce: string;
|
|
17
|
+
payloadHash: string;
|
|
18
|
+
consumed: boolean;
|
|
19
|
+
correlationId: string;
|
|
20
|
+
command: string;
|
|
21
|
+
params: any;
|
|
22
|
+
instanceOrigin: string;
|
|
23
|
+
createdAt: number;
|
|
24
|
+
}
|
|
25
|
+
export declare class StandaloneWsBridge {
|
|
26
|
+
private port;
|
|
27
|
+
private pending;
|
|
28
|
+
private wss?;
|
|
29
|
+
private activeClient?;
|
|
30
|
+
private state;
|
|
31
|
+
private activeReviews;
|
|
32
|
+
constructor(port?: number, pending?: PendingRegistry);
|
|
33
|
+
start(): Promise<number>;
|
|
34
|
+
private resetHelperState;
|
|
35
|
+
private handleMessage;
|
|
36
|
+
registerReview(active: Omit<ActiveReview, 'consumed' | 'createdAt'>): void;
|
|
37
|
+
cancelReview(reviewId: string, reason?: string): void;
|
|
38
|
+
sendToBrowser(payload: any): void;
|
|
39
|
+
hasBrowserClient(): boolean;
|
|
40
|
+
getHelperState(): HelperState;
|
|
41
|
+
getInstanceGate(instanceUrl?: string, gate?: keyof SecurityGates): import('./policy.js').GateMode;
|
|
42
|
+
isServerRunning(): boolean;
|
|
43
|
+
close(): Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=wsBridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wsBridge.d.ts","sourceRoot":"","sources":["../../src/server/wsBridge.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,aAAa,EAAkB,MAAM,aAAa,CAAC;AAEtG,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,YAAY,CAAC;IAC9C,WAAW,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACnD,YAAY,EAAE,kBAAkB,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,kBAAkB;IAc3B,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,OAAO;IAdjB,OAAO,CAAC,GAAG,CAAC,CAAkB;IAC9B,OAAO,CAAC,YAAY,CAAC,CAAY;IACjC,OAAO,CAAC,KAAK,CAOX;IACF,OAAO,CAAC,aAAa,CAAmC;gBAG9C,IAAI,SAAO,EACX,OAAO,GAAE,eAAwC;IAGrD,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAgE9B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,aAAa;IAuIrB,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,WAAW,CAAC,GAAG,IAAI;IAQ1E,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAc,GAAG,IAAI;IAc1D,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IAOjC,gBAAgB,IAAI,OAAO;IAI3B,cAAc,IAAI,WAAW;IAI7B,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,aAAa,GAAG,OAAO,aAAa,EAAE,QAAQ;IAYjG,eAAe,IAAI,OAAO;IAIpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAkB7B"}
|
|
@@ -0,0 +1,321 @@
|
|
|
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.StandaloneWsBridge = void 0;
|
|
37
|
+
const crypto = __importStar(require("crypto"));
|
|
38
|
+
const ws_1 = require("ws");
|
|
39
|
+
const pendingRegistry_js_1 = require("./pendingRegistry.js");
|
|
40
|
+
class StandaloneWsBridge {
|
|
41
|
+
port;
|
|
42
|
+
pending;
|
|
43
|
+
wss;
|
|
44
|
+
activeClient;
|
|
45
|
+
state = {
|
|
46
|
+
tier: 'free',
|
|
47
|
+
proFeatures: false,
|
|
48
|
+
cdp: { available: false, reason: 'E_PRO_REQUIRED' },
|
|
49
|
+
capabilities: { protocolVersion: 1 },
|
|
50
|
+
sessionEpoch: '',
|
|
51
|
+
instanceGates: new Map(),
|
|
52
|
+
};
|
|
53
|
+
activeReviews = new Map();
|
|
54
|
+
constructor(port = 1978, pending = pendingRegistry_js_1.defaultPendingRegistry) {
|
|
55
|
+
this.port = port;
|
|
56
|
+
this.pending = pending;
|
|
57
|
+
}
|
|
58
|
+
async start() {
|
|
59
|
+
return new Promise((resolve, reject) => {
|
|
60
|
+
try {
|
|
61
|
+
const wss = new ws_1.WebSocketServer({ port: this.port, host: '127.0.0.1' }, () => {
|
|
62
|
+
this.wss = wss;
|
|
63
|
+
const addr = wss.address();
|
|
64
|
+
const actualPort = typeof addr === 'object' && addr ? addr.port : this.port;
|
|
65
|
+
this.port = actualPort;
|
|
66
|
+
resolve(actualPort);
|
|
67
|
+
});
|
|
68
|
+
wss.on('error', (err) => {
|
|
69
|
+
reject(err);
|
|
70
|
+
});
|
|
71
|
+
wss.on('connection', (ws) => {
|
|
72
|
+
if (this.activeClient && this.activeClient !== ws) {
|
|
73
|
+
try {
|
|
74
|
+
this.activeClient.close(1000, 'Replaced by new connection');
|
|
75
|
+
}
|
|
76
|
+
catch { }
|
|
77
|
+
}
|
|
78
|
+
this.activeClient = ws;
|
|
79
|
+
this.state.sessionEpoch = crypto.randomUUID();
|
|
80
|
+
// Send host hello
|
|
81
|
+
try {
|
|
82
|
+
ws.send(JSON.stringify({
|
|
83
|
+
action: 'hostHello',
|
|
84
|
+
protocolVersion: 1,
|
|
85
|
+
hostKind: 'standalone',
|
|
86
|
+
sessionEpoch: this.state.sessionEpoch,
|
|
87
|
+
features: {
|
|
88
|
+
commandReview: 1,
|
|
89
|
+
rejectionFeedback: 1,
|
|
90
|
+
instanceSecurityGates: 1,
|
|
91
|
+
},
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
catch { }
|
|
95
|
+
ws.on('message', (raw) => {
|
|
96
|
+
try {
|
|
97
|
+
const msg = JSON.parse(raw.toString('utf8'));
|
|
98
|
+
this.handleMessage(ws, msg);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Ignore malformed frames
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
ws.on('close', () => {
|
|
105
|
+
if (this.activeClient === ws) {
|
|
106
|
+
this.activeClient = undefined;
|
|
107
|
+
this.resetHelperState();
|
|
108
|
+
this.pending.rejectAll('E_BROWSER_DISCONNECTED', 'Browser helper disconnected');
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
reject(err);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
resetHelperState() {
|
|
119
|
+
this.state = {
|
|
120
|
+
tier: 'free',
|
|
121
|
+
proFeatures: false,
|
|
122
|
+
cdp: { available: false, reason: 'E_PRO_REQUIRED' },
|
|
123
|
+
capabilities: { protocolVersion: 1 },
|
|
124
|
+
sessionEpoch: '',
|
|
125
|
+
instanceGates: new Map(),
|
|
126
|
+
};
|
|
127
|
+
this.activeReviews.clear();
|
|
128
|
+
}
|
|
129
|
+
handleMessage(ws, msg) {
|
|
130
|
+
if (ws !== this.activeClient)
|
|
131
|
+
return;
|
|
132
|
+
// 1. Immutable merge for license / build info
|
|
133
|
+
if (msg.action === 'helperLicenseInfo' || msg.action === 'helperBuildInfo' || msg.action === 'helperHello') {
|
|
134
|
+
if (msg.tier)
|
|
135
|
+
this.state.tier = msg.tier;
|
|
136
|
+
if (typeof msg.proFeatures === 'boolean')
|
|
137
|
+
this.state.proFeatures = msg.proFeatures;
|
|
138
|
+
if (msg.cdp)
|
|
139
|
+
this.state.cdp = msg.cdp;
|
|
140
|
+
if (msg.capabilities && typeof msg.capabilities === 'object') {
|
|
141
|
+
this.state.capabilities = {
|
|
142
|
+
...this.state.capabilities,
|
|
143
|
+
...msg.capabilities,
|
|
144
|
+
protocolVersion: msg.capabilities.protocolVersion || 1,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
// 2. Per-Instance Gate Snapshot update
|
|
150
|
+
if (msg.action === 'helperGatesUpdated') {
|
|
151
|
+
try {
|
|
152
|
+
if (!msg.instanceOrigin || typeof msg.instanceOrigin !== 'string' || typeof msg.revision !== 'number')
|
|
153
|
+
return;
|
|
154
|
+
const origin = new URL(msg.instanceOrigin).origin.toLowerCase();
|
|
155
|
+
const revision = Math.floor(msg.revision);
|
|
156
|
+
if (!Number.isSafeInteger(revision) || revision < 1)
|
|
157
|
+
return;
|
|
158
|
+
const current = this.state.instanceGates.get(origin);
|
|
159
|
+
if (current && revision <= current.revision) {
|
|
160
|
+
// Discard stale out-of-order revision
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
const rawGates = msg.gates;
|
|
164
|
+
if (!rawGates || typeof rawGates !== 'object')
|
|
165
|
+
return;
|
|
166
|
+
const isValidGateVal = (v) => typeof v === 'boolean' || v === 'off' || v === 'approve' || v === 'auto';
|
|
167
|
+
// Require every field to be a valid gate mode
|
|
168
|
+
if (!isValidGateVal(rawGates.backgroundScripts) ||
|
|
169
|
+
!isValidGateVal(rawGates.deleteRecords) ||
|
|
170
|
+
!isValidGateVal(rawGates.createArtifacts) ||
|
|
171
|
+
!isValidGateVal(rawGates.browserDebugger) ||
|
|
172
|
+
!isValidGateVal(rawGates.restRequest)) {
|
|
173
|
+
// Reject malformed / partial gate snapshot
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const gates = {
|
|
177
|
+
backgroundScripts: rawGates.backgroundScripts,
|
|
178
|
+
deleteRecords: rawGates.deleteRecords,
|
|
179
|
+
createArtifacts: rawGates.createArtifacts,
|
|
180
|
+
browserDebugger: rawGates.browserDebugger,
|
|
181
|
+
restRequest: rawGates.restRequest,
|
|
182
|
+
};
|
|
183
|
+
this.state.instanceGates.set(origin, {
|
|
184
|
+
instanceOrigin: origin,
|
|
185
|
+
revision,
|
|
186
|
+
receivedAt: Date.now(),
|
|
187
|
+
gates,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
catch { }
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
// 3. Two-phase review response from browser helper tab
|
|
194
|
+
if (msg.action === 'reviewResponse') {
|
|
195
|
+
const { reviewId, nonce, payloadHash, approved, userFeedback } = msg;
|
|
196
|
+
const active = this.activeReviews.get(reviewId);
|
|
197
|
+
if (!active)
|
|
198
|
+
return;
|
|
199
|
+
if (active.consumed || active.nonce !== nonce) {
|
|
200
|
+
// Replay or invalid nonce
|
|
201
|
+
this.pending.reject(active.correlationId, 'E_REPLAY_DETECTED', 'Replay detected or invalid review nonce', {
|
|
202
|
+
reviewId,
|
|
203
|
+
});
|
|
204
|
+
this.activeReviews.delete(reviewId);
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
if (active.payloadHash !== payloadHash) {
|
|
208
|
+
this.pending.reject(active.correlationId, 'E_COMMAND_FAILED', 'Payload hash mismatch during review', {
|
|
209
|
+
reviewId,
|
|
210
|
+
});
|
|
211
|
+
this.activeReviews.delete(reviewId);
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
// Check if command is still pending (e.g. has not timed out or been cancelled)
|
|
215
|
+
if (!this.pending.has(active.correlationId)) {
|
|
216
|
+
this.activeReviews.delete(reviewId);
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
active.consumed = true;
|
|
220
|
+
if (!approved) {
|
|
221
|
+
const feedback = typeof userFeedback === 'string' ? userFeedback.slice(0, 1000).trim() : undefined;
|
|
222
|
+
this.pending.reject(active.correlationId, 'E_USER_REJECTED', feedback ? `Execution rejected by developer: "${feedback}"` : 'Execution rejected by developer in browser helper tab', { userFeedback: feedback, reviewId });
|
|
223
|
+
this.activeReviews.delete(reviewId);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
// Approved! Authorize execution on helper
|
|
227
|
+
try {
|
|
228
|
+
this.sendToBrowser({
|
|
229
|
+
action: 'executeApproved',
|
|
230
|
+
reviewId,
|
|
231
|
+
nonce,
|
|
232
|
+
payloadHash,
|
|
233
|
+
agentRequestId: active.correlationId,
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
this.pending.reject(active.correlationId, 'E_BROWSER_DISCONNECTED', err?.message || String(err));
|
|
238
|
+
}
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
// 4. Standard correlated agent responses
|
|
242
|
+
if (msg.agentRequestId) {
|
|
243
|
+
if (msg.success === false && msg.code) {
|
|
244
|
+
this.pending.reject(msg.agentRequestId, msg.code, msg.error || 'Command failed', msg.details);
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
this.pending.resolve(msg.agentRequestId, msg);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
registerReview(active) {
|
|
252
|
+
this.activeReviews.set(active.reviewId, {
|
|
253
|
+
...active,
|
|
254
|
+
consumed: false,
|
|
255
|
+
createdAt: Date.now(),
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
cancelReview(reviewId, reason = 'CANCELLED') {
|
|
259
|
+
const active = this.activeReviews.get(reviewId);
|
|
260
|
+
if (active) {
|
|
261
|
+
this.activeReviews.delete(reviewId);
|
|
262
|
+
try {
|
|
263
|
+
this.sendToBrowser({
|
|
264
|
+
action: 'cancelReview',
|
|
265
|
+
reviewId,
|
|
266
|
+
reason,
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
catch { }
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
sendToBrowser(payload) {
|
|
273
|
+
if (!this.activeClient || this.activeClient.readyState !== ws_1.WebSocket.OPEN) {
|
|
274
|
+
throw new Error('No browser helper connected. Open the SN Utils helper tab via /token.');
|
|
275
|
+
}
|
|
276
|
+
this.activeClient.send(JSON.stringify(payload));
|
|
277
|
+
}
|
|
278
|
+
hasBrowserClient() {
|
|
279
|
+
return !!this.activeClient && this.activeClient.readyState === ws_1.WebSocket.OPEN;
|
|
280
|
+
}
|
|
281
|
+
getHelperState() {
|
|
282
|
+
return this.state;
|
|
283
|
+
}
|
|
284
|
+
getInstanceGate(instanceUrl, gate) {
|
|
285
|
+
if (!instanceUrl || !gate)
|
|
286
|
+
return 'off';
|
|
287
|
+
try {
|
|
288
|
+
const origin = new URL(instanceUrl).origin.toLowerCase();
|
|
289
|
+
const snap = this.state.instanceGates.get(origin);
|
|
290
|
+
if (snap) {
|
|
291
|
+
return snap.gates[gate] ?? 'approve';
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
catch { }
|
|
295
|
+
return 'off';
|
|
296
|
+
}
|
|
297
|
+
isServerRunning() {
|
|
298
|
+
return !!this.wss;
|
|
299
|
+
}
|
|
300
|
+
async close() {
|
|
301
|
+
this.resetHelperState();
|
|
302
|
+
this.pending.rejectAll('E_SERVER_STOPPED', 'ScriptSync server stopped');
|
|
303
|
+
if (this.activeClient) {
|
|
304
|
+
try {
|
|
305
|
+
this.activeClient.close();
|
|
306
|
+
}
|
|
307
|
+
catch { }
|
|
308
|
+
this.activeClient = undefined;
|
|
309
|
+
}
|
|
310
|
+
if (this.wss) {
|
|
311
|
+
return new Promise((resolve) => {
|
|
312
|
+
this.wss.close(() => {
|
|
313
|
+
this.wss = undefined;
|
|
314
|
+
resolve();
|
|
315
|
+
});
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
exports.StandaloneWsBridge = StandaloneWsBridge;
|
|
321
|
+
//# sourceMappingURL=wsBridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wsBridge.js","sourceRoot":"","sources":["../../src/server/wsBridge.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire-format and domain interfaces for @snutils/snu
|
|
3
|
+
*/
|
|
4
|
+
import { SecurityGates, CommandPolicy } from './server/policy.js';
|
|
5
|
+
export { SecurityGates, CommandPolicy };
|
|
6
|
+
export interface AgentRequest {
|
|
7
|
+
id: string;
|
|
8
|
+
command: string;
|
|
9
|
+
params?: Record<string, any>;
|
|
10
|
+
instance?: string;
|
|
11
|
+
timestamp?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface AgentResponse<T = any> {
|
|
14
|
+
id: string;
|
|
15
|
+
command: string;
|
|
16
|
+
status: 'success' | 'error';
|
|
17
|
+
result?: T;
|
|
18
|
+
error?: string;
|
|
19
|
+
code?: string;
|
|
20
|
+
timestamp: number;
|
|
21
|
+
details?: {
|
|
22
|
+
userFeedback?: string;
|
|
23
|
+
reviewId?: string;
|
|
24
|
+
instanceOrigin?: string;
|
|
25
|
+
expiresIn?: number;
|
|
26
|
+
[key: string]: any;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export interface HelperCapabilities {
|
|
30
|
+
protocolVersion: number;
|
|
31
|
+
commandReview?: 1;
|
|
32
|
+
rejectionFeedback?: 1;
|
|
33
|
+
instanceSecurityGates?: 1;
|
|
34
|
+
}
|
|
35
|
+
export interface InstanceGateSnapshot {
|
|
36
|
+
instanceOrigin: string;
|
|
37
|
+
revision: number;
|
|
38
|
+
receivedAt: number;
|
|
39
|
+
gates: SecurityGates;
|
|
40
|
+
}
|
|
41
|
+
export interface ReviewEnvelope {
|
|
42
|
+
required: true;
|
|
43
|
+
reviewId: string;
|
|
44
|
+
nonce: string;
|
|
45
|
+
payloadHash: string;
|
|
46
|
+
kind: 'background_script' | 'record_delete' | 'rest_delete' | 'ui_action' | 'bulk_delete';
|
|
47
|
+
summary: string;
|
|
48
|
+
targets?: Array<{
|
|
49
|
+
table: string;
|
|
50
|
+
sys_id: string;
|
|
51
|
+
display?: string;
|
|
52
|
+
}>;
|
|
53
|
+
script?: string;
|
|
54
|
+
instanceOrigin: string;
|
|
55
|
+
client: {
|
|
56
|
+
name: string;
|
|
57
|
+
version?: string;
|
|
58
|
+
hostKind: 'vscode' | 'standalone';
|
|
59
|
+
pid?: number;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export interface StagedWriteResult {
|
|
63
|
+
staged: true;
|
|
64
|
+
reviewId: string;
|
|
65
|
+
message: string;
|
|
66
|
+
}
|
|
67
|
+
export interface AgentPortFile {
|
|
68
|
+
port: number;
|
|
69
|
+
token: string;
|
|
70
|
+
pid: number;
|
|
71
|
+
apiVersion: number;
|
|
72
|
+
startedAt: number;
|
|
73
|
+
extensionVersion?: string;
|
|
74
|
+
}
|
|
75
|
+
export interface HealthResponse {
|
|
76
|
+
status: 'success';
|
|
77
|
+
apiVersion: number;
|
|
78
|
+
hostKind?: 'vscode' | 'standalone';
|
|
79
|
+
commands: string[];
|
|
80
|
+
pid: number;
|
|
81
|
+
}
|
|
82
|
+
export interface DiscoveryOptions {
|
|
83
|
+
portFile?: string;
|
|
84
|
+
cwd?: string;
|
|
85
|
+
}
|
|
86
|
+
export interface DiscoveryResult {
|
|
87
|
+
port: number;
|
|
88
|
+
token: string;
|
|
89
|
+
pid: number;
|
|
90
|
+
apiVersion: number;
|
|
91
|
+
portFilePath: string;
|
|
92
|
+
isGlobal: boolean;
|
|
93
|
+
}
|
|
94
|
+
export interface MappedCommand {
|
|
95
|
+
command: string;
|
|
96
|
+
instance?: string;
|
|
97
|
+
params: Record<string, any>;
|
|
98
|
+
}
|
|
99
|
+
export interface ToolOptionDefinition {
|
|
100
|
+
type: 'string' | 'boolean';
|
|
101
|
+
short?: string;
|
|
102
|
+
description?: string;
|
|
103
|
+
default?: any;
|
|
104
|
+
}
|
|
105
|
+
export interface ToolDefinition {
|
|
106
|
+
name: string;
|
|
107
|
+
agentCommand: string;
|
|
108
|
+
description: string;
|
|
109
|
+
cliCommand: string;
|
|
110
|
+
cliUsage?: string;
|
|
111
|
+
cliOptions?: Record<string, ToolOptionDefinition>;
|
|
112
|
+
inputSchema: {
|
|
113
|
+
type: 'object';
|
|
114
|
+
properties: Record<string, any>;
|
|
115
|
+
required?: string[];
|
|
116
|
+
anyOf?: Array<{
|
|
117
|
+
required: string[];
|
|
118
|
+
}>;
|
|
119
|
+
additionalProperties?: boolean;
|
|
120
|
+
};
|
|
121
|
+
mapInput: (input: Record<string, any>) => MappedCommand;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|