@yu_robotics/remote-cli 1.6.18 → 1.6.21
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 +5 -1
- package/dist/client/MessageHandler.d.ts +1 -0
- package/dist/client/MessageHandler.d.ts.map +1 -1
- package/dist/client/MessageHandler.js +18 -0
- package/dist/client/MessageHandler.js.map +1 -1
- package/dist/commands/service.d.ts +12 -0
- package/dist/commands/service.d.ts.map +1 -0
- package/dist/commands/service.js +28 -0
- package/dist/commands/service.js.map +1 -0
- package/dist/commands/start.d.ts +3 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +6 -2
- package/dist/commands/start.js.map +1 -1
- package/dist/executor/CodexAppServerExecutor.d.ts +1 -0
- package/dist/executor/CodexAppServerExecutor.d.ts.map +1 -1
- package/dist/executor/CodexAppServerExecutor.js +26 -1
- package/dist/executor/CodexAppServerExecutor.js.map +1 -1
- package/dist/executor/CodexExecutor.d.ts.map +1 -1
- package/dist/executor/CodexExecutor.js +6 -1
- package/dist/executor/CodexExecutor.js.map +1 -1
- package/dist/executor/IExecutor.d.ts +2 -1
- package/dist/executor/IExecutor.d.ts.map +1 -1
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -1
- package/dist/service/ServiceManager.d.ts +60 -0
- package/dist/service/ServiceManager.d.ts.map +1 -0
- package/dist/service/ServiceManager.js +228 -0
- package/dist/service/ServiceManager.js.map +1 -0
- package/dist/types/index.d.ts +5 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MacServiceManager = exports.LinuxServiceManager = void 0;
|
|
7
|
+
exports.getServicePlatform = getServicePlatform;
|
|
8
|
+
exports.getServiceContext = getServiceContext;
|
|
9
|
+
exports.createServiceManager = createServiceManager;
|
|
10
|
+
const child_process_1 = require("child_process");
|
|
11
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
12
|
+
const os_1 = __importDefault(require("os"));
|
|
13
|
+
const path_1 = __importDefault(require("path"));
|
|
14
|
+
const SERVICE_NAME = 'remote-cli';
|
|
15
|
+
const MAC_SERVICE_LABEL = 'ai.yu-robotics.remote-cli';
|
|
16
|
+
function runCommand(command, args) {
|
|
17
|
+
return new Promise((resolve, reject) => {
|
|
18
|
+
(0, child_process_1.execFile)(command, args, { encoding: 'utf8' }, (error, stdout, stderr) => {
|
|
19
|
+
if (error) {
|
|
20
|
+
Object.assign(error, { stdout, stderr });
|
|
21
|
+
reject(error);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
resolve({ stdout, stderr });
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
async function ignoreCommandFailure(runner, command, args) {
|
|
29
|
+
try {
|
|
30
|
+
await runner(command, args);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// The service may not have been loaded yet.
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function quoteSystemdArgument(value) {
|
|
37
|
+
return `"${value.replaceAll('\\', '\\\\').replaceAll('"', '\\"')}"`;
|
|
38
|
+
}
|
|
39
|
+
function xmlEscape(value) {
|
|
40
|
+
return value.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>').replaceAll('"', '"').replaceAll("'", ''');
|
|
41
|
+
}
|
|
42
|
+
function getServicePlatform(platform = process.platform) {
|
|
43
|
+
if (platform === 'linux' || platform === 'darwin')
|
|
44
|
+
return platform;
|
|
45
|
+
throw new Error(`Automatic service installation is not supported on ${platform}.`);
|
|
46
|
+
}
|
|
47
|
+
function getServiceContext(overrides = {}) {
|
|
48
|
+
const homeDir = overrides.homeDir ?? os_1.default.homedir();
|
|
49
|
+
const cliEntryPath = overrides.cliEntryPath ?? path_1.default.resolve(process.argv[1] || path_1.default.join(__dirname, '../../bin/remote-cli.js'));
|
|
50
|
+
return {
|
|
51
|
+
homeDir,
|
|
52
|
+
nodePath: overrides.nodePath ?? process.execPath,
|
|
53
|
+
cliEntryPath,
|
|
54
|
+
pathValue: overrides.pathValue ?? process.env.PATH ?? '',
|
|
55
|
+
logDirectory: overrides.logDirectory ?? path_1.default.join(homeDir, '.remote-cli', 'logs'),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
class BaseServiceManager {
|
|
59
|
+
context;
|
|
60
|
+
runner;
|
|
61
|
+
constructor(context, runner = runCommand) {
|
|
62
|
+
this.context = context;
|
|
63
|
+
this.runner = runner;
|
|
64
|
+
}
|
|
65
|
+
async prepareDirectories() {
|
|
66
|
+
await promises_1.default.mkdir(this.context.logDirectory, { recursive: true, mode: 0o700 });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
class LinuxServiceManager extends BaseServiceManager {
|
|
70
|
+
unitPath;
|
|
71
|
+
constructor(context, runner) {
|
|
72
|
+
super(context, runner);
|
|
73
|
+
this.unitPath = path_1.default.join(context.homeDir, '.config', 'systemd', 'user', `${SERVICE_NAME}.service`);
|
|
74
|
+
}
|
|
75
|
+
async install() {
|
|
76
|
+
await this.prepareDirectories();
|
|
77
|
+
await promises_1.default.mkdir(path_1.default.dirname(this.unitPath), { recursive: true, mode: 0o700 });
|
|
78
|
+
const unit = [
|
|
79
|
+
'[Unit]',
|
|
80
|
+
'Description=Remote CLI Client',
|
|
81
|
+
'After=network-online.target',
|
|
82
|
+
'',
|
|
83
|
+
'[Service]',
|
|
84
|
+
`ExecStart=${quoteSystemdArgument(this.context.nodePath)} ${quoteSystemdArgument(this.context.cliEntryPath)} start --non-interactive`,
|
|
85
|
+
`WorkingDirectory=${quoteSystemdArgument(this.context.homeDir)}`,
|
|
86
|
+
`Environment=HOME=${quoteSystemdArgument(this.context.homeDir)}`,
|
|
87
|
+
`Environment=PATH=${quoteSystemdArgument(this.context.pathValue)}`,
|
|
88
|
+
`StandardOutput=append:${quoteSystemdArgument(path_1.default.join(this.context.logDirectory, 'service.log'))}`,
|
|
89
|
+
`StandardError=append:${quoteSystemdArgument(path_1.default.join(this.context.logDirectory, 'service.error.log'))}`,
|
|
90
|
+
'Restart=always',
|
|
91
|
+
'RestartSec=5',
|
|
92
|
+
'',
|
|
93
|
+
'[Install]',
|
|
94
|
+
'WantedBy=default.target',
|
|
95
|
+
'',
|
|
96
|
+
].join('\n');
|
|
97
|
+
await promises_1.default.writeFile(this.unitPath, unit, { mode: 0o600 });
|
|
98
|
+
await this.runner('systemctl', ['--user', 'daemon-reload']);
|
|
99
|
+
await this.runner('systemctl', ['--user', 'enable', '--now', SERVICE_NAME]);
|
|
100
|
+
return this.status();
|
|
101
|
+
}
|
|
102
|
+
async uninstall() {
|
|
103
|
+
await ignoreCommandFailure(this.runner, 'systemctl', ['--user', 'disable', '--now', SERVICE_NAME]);
|
|
104
|
+
await promises_1.default.rm(this.unitPath, { force: true });
|
|
105
|
+
await ignoreCommandFailure(this.runner, 'systemctl', ['--user', 'daemon-reload']);
|
|
106
|
+
return this.status();
|
|
107
|
+
}
|
|
108
|
+
async status() {
|
|
109
|
+
const installed = await fileExists(this.unitPath);
|
|
110
|
+
if (!installed)
|
|
111
|
+
return this.createStatus(false, false, false);
|
|
112
|
+
try {
|
|
113
|
+
const result = await this.runner('systemctl', ['--user', 'show', SERVICE_NAME, '--no-page']);
|
|
114
|
+
const values = parseKeyValueOutput(result.stdout);
|
|
115
|
+
const pid = Number(values.MainPID);
|
|
116
|
+
return this.createStatus(true, values.ActiveState === 'active', values.UnitFileState === 'enabled', Number.isFinite(pid) && pid > 0 ? pid : undefined, values.ActiveState);
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
return this.createStatus(true, false, false, undefined, error instanceof Error ? error.message : 'Service status unavailable');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
createStatus(installed, running, enabled, pid, detail) {
|
|
123
|
+
return { platform: 'linux', supported: true, installed, running, enabled, servicePath: this.unitPath, serviceName: SERVICE_NAME, pid, detail };
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.LinuxServiceManager = LinuxServiceManager;
|
|
127
|
+
class MacServiceManager extends BaseServiceManager {
|
|
128
|
+
plistPath;
|
|
129
|
+
domain;
|
|
130
|
+
constructor(context, runner, userId = typeof process.getuid === 'function' ? process.getuid() : undefined) {
|
|
131
|
+
super(context, runner);
|
|
132
|
+
if (userId === undefined)
|
|
133
|
+
throw new Error('Unable to determine the current macOS user ID.');
|
|
134
|
+
this.domain = `gui/${userId}`;
|
|
135
|
+
this.plistPath = path_1.default.join(context.homeDir, 'Library', 'LaunchAgents', `${MAC_SERVICE_LABEL}.plist`);
|
|
136
|
+
}
|
|
137
|
+
async install() {
|
|
138
|
+
await this.prepareDirectories();
|
|
139
|
+
await promises_1.default.mkdir(path_1.default.dirname(this.plistPath), { recursive: true, mode: 0o700 });
|
|
140
|
+
const plist = this.createPlist();
|
|
141
|
+
await promises_1.default.writeFile(this.plistPath, plist, { mode: 0o600 });
|
|
142
|
+
await ignoreCommandFailure(this.runner, 'launchctl', ['bootout', this.domain, this.plistPath]);
|
|
143
|
+
await this.runner('launchctl', ['bootstrap', this.domain, this.plistPath]);
|
|
144
|
+
return this.status();
|
|
145
|
+
}
|
|
146
|
+
async uninstall() {
|
|
147
|
+
await ignoreCommandFailure(this.runner, 'launchctl', ['bootout', this.domain, this.plistPath]);
|
|
148
|
+
await promises_1.default.rm(this.plistPath, { force: true });
|
|
149
|
+
return this.status();
|
|
150
|
+
}
|
|
151
|
+
async status() {
|
|
152
|
+
const installed = await fileExists(this.plistPath);
|
|
153
|
+
if (!installed)
|
|
154
|
+
return this.createStatus(false, false, false);
|
|
155
|
+
try {
|
|
156
|
+
const result = await this.runner('launchctl', ['print', `${this.domain}/${MAC_SERVICE_LABEL}`]);
|
|
157
|
+
const pidMatch = result.stdout.match(/\bpid\s*=\s*(\d+)/);
|
|
158
|
+
return this.createStatus(true, true, true, pidMatch ? Number(pidMatch[1]) : undefined);
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
return this.createStatus(true, false, false, undefined, error instanceof Error ? error.message : 'Service status unavailable');
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
createPlist() {
|
|
165
|
+
const outputPath = path_1.default.join(this.context.logDirectory, 'service.log');
|
|
166
|
+
const errorPath = path_1.default.join(this.context.logDirectory, 'service.error.log');
|
|
167
|
+
const argumentsXml = [this.context.nodePath, this.context.cliEntryPath, 'start', '--non-interactive']
|
|
168
|
+
.map((argument) => ` <string>${xmlEscape(argument)}</string>`)
|
|
169
|
+
.join('\n');
|
|
170
|
+
const environmentXml = [
|
|
171
|
+
['HOME', this.context.homeDir],
|
|
172
|
+
['PATH', this.context.pathValue],
|
|
173
|
+
].map(([key, value]) => ` <key>${key}</key>\n <string>${xmlEscape(value)}</string>`).join('\n');
|
|
174
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
175
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
176
|
+
<plist version="1.0">
|
|
177
|
+
<dict>
|
|
178
|
+
<key>Label</key>
|
|
179
|
+
<string>${MAC_SERVICE_LABEL}</string>
|
|
180
|
+
<key>ProgramArguments</key>
|
|
181
|
+
<array>
|
|
182
|
+
${argumentsXml}
|
|
183
|
+
</array>
|
|
184
|
+
<key>WorkingDirectory</key>
|
|
185
|
+
<string>${xmlEscape(this.context.homeDir)}</string>
|
|
186
|
+
<key>EnvironmentVariables</key>
|
|
187
|
+
<dict>
|
|
188
|
+
${environmentXml}
|
|
189
|
+
</dict>
|
|
190
|
+
<key>RunAtLoad</key>
|
|
191
|
+
<true/>
|
|
192
|
+
<key>KeepAlive</key>
|
|
193
|
+
<true/>
|
|
194
|
+
<key>StandardOutPath</key>
|
|
195
|
+
<string>${xmlEscape(outputPath)}</string>
|
|
196
|
+
<key>StandardErrorPath</key>
|
|
197
|
+
<string>${xmlEscape(errorPath)}</string>
|
|
198
|
+
</dict>
|
|
199
|
+
</plist>
|
|
200
|
+
`;
|
|
201
|
+
}
|
|
202
|
+
createStatus(installed, running, enabled, pid, detail) {
|
|
203
|
+
return { platform: 'darwin', supported: true, installed, running, enabled, servicePath: this.plistPath, serviceName: MAC_SERVICE_LABEL, pid, detail };
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
exports.MacServiceManager = MacServiceManager;
|
|
207
|
+
function createServiceManager(platform = process.platform, context = getServiceContext(), runner) {
|
|
208
|
+
const servicePlatform = getServicePlatform(platform);
|
|
209
|
+
return servicePlatform === 'linux'
|
|
210
|
+
? new LinuxServiceManager(context, runner)
|
|
211
|
+
: new MacServiceManager(context, runner);
|
|
212
|
+
}
|
|
213
|
+
async function fileExists(filePath) {
|
|
214
|
+
try {
|
|
215
|
+
await promises_1.default.access(filePath);
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
function parseKeyValueOutput(output) {
|
|
223
|
+
return Object.fromEntries(output.split(/\r?\n/).flatMap((line) => {
|
|
224
|
+
const separator = line.indexOf('=');
|
|
225
|
+
return separator > 0 ? [[line.slice(0, separator), line.slice(separator + 1)]] : [];
|
|
226
|
+
}));
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=ServiceManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceManager.js","sourceRoot":"","sources":["../../src/service/ServiceManager.ts"],"names":[],"mappings":";;;;;;AA6DA,gDAGC;AAED,8CAUC;AAmLD,oDAKC;AApQD,iDAAyC;AACzC,2DAA6B;AAC7B,4CAAoB;AACpB,gDAAwB;AA0BxB,MAAM,YAAY,GAAG,YAAY,CAAC;AAClC,MAAM,iBAAiB,GAAG,2BAA2B,CAAC;AAEtD,SAAS,UAAU,CAAC,OAAe,EAAE,IAAc;IACjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAA,wBAAQ,EAAC,OAAO,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACtE,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBACzC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YACD,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,MAA4B,EAAE,OAAe,EAAE,IAAc;IAC/F,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;IAC9C,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa;IACzC,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;AACtE,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC5I,CAAC;AAED,SAAgB,kBAAkB,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ;IAC5D,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACnE,MAAM,IAAI,KAAK,CAAC,sDAAsD,QAAQ,GAAG,CAAC,CAAC;AACrF,CAAC;AAED,SAAgB,iBAAiB,CAAC,YAAqC,EAAE;IACvE,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,IAAI,YAAE,CAAC,OAAO,EAAE,CAAC;IAClD,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,IAAI,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAChI,OAAO;QACL,OAAO;QACP,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ;QAChD,YAAY;QACZ,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;QACxD,YAAY,EAAE,SAAS,CAAC,YAAY,IAAI,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC;KAClF,CAAC;AACJ,CAAC;AAQD,MAAe,kBAAkB;IACZ,OAAO,CAAiB;IACxB,MAAM,CAAuB;IAEhD,YAAY,OAAuB,EAAE,SAA+B,UAAU;QAC5E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAMS,KAAK,CAAC,kBAAkB;QAChC,MAAM,kBAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9E,CAAC;CACF;AAED,MAAa,mBAAoB,SAAQ,kBAAkB;IACxC,QAAQ,CAAS;IAElC,YAAY,OAAuB,EAAE,MAA6B;QAChE,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,UAAU,CAAC,CAAC;IACtG,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAChC,MAAM,kBAAE,CAAC,KAAK,CAAC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9E,MAAM,IAAI,GAAG;YACX,QAAQ;YACR,+BAA+B;YAC/B,6BAA6B;YAC7B,EAAE;YACF,WAAW;YACX,aAAa,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,0BAA0B;YACrI,oBAAoB,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAChE,oBAAoB,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAChE,oBAAoB,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAClE,yBAAyB,oBAAoB,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,EAAE;YACpG,wBAAwB,oBAAoB,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC,EAAE;YACzG,gBAAgB;YAChB,cAAc;YACd,EAAE;YACF,WAAW;YACX,yBAAyB;YACzB,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,kBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;QAC5D,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QACnG,MAAM,kBAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAE9D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;YAC7F,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC,YAAY,CACtB,IAAI,EACJ,MAAM,CAAC,WAAW,KAAK,QAAQ,EAC/B,MAAM,CAAC,aAAa,KAAK,SAAS,EAClC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EACjD,MAAM,CAAC,WAAW,CACnB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC;QACjI,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,SAAkB,EAAE,OAAgB,EAAE,OAAgB,EAAE,GAAY,EAAE,MAAe;QACxG,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IACjJ,CAAC;CACF;AAlED,kDAkEC;AAED,MAAa,iBAAkB,SAAQ,kBAAkB;IACtC,SAAS,CAAS;IAClB,MAAM,CAAS;IAEhC,YAAY,OAAuB,EAAE,MAA6B,EAAE,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS;QAC9I,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvB,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC5F,IAAI,CAAC,MAAM,GAAG,OAAO,MAAM,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,iBAAiB,QAAQ,CAAC,CAAC;IACvG,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAChC,MAAM,kBAAE,CAAC,KAAK,CAAC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,kBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,MAAM,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/F,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/F,MAAM,kBAAE,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAE9D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,iBAAiB,EAAE,CAAC,CAAC,CAAC;YAChG,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACzF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC;QACjI,CAAC;IACH,CAAC;IAEO,WAAW;QACjB,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;QAC5E,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,EAAE,mBAAmB,CAAC;aAClG,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,eAAe,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;aAChE,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,cAAc,GAAG;YACrB,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAC9B,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;SACjC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,YAAY,GAAG,uBAAuB,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEtG,OAAO;;;;;YAKC,iBAAiB;;;EAG3B,YAAY;;;YAGF,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;;;EAGzC,cAAc;;;;;;;YAOJ,SAAS,CAAC,UAAU,CAAC;;YAErB,SAAS,CAAC,SAAS,CAAC;;;CAG/B,CAAC;IACA,CAAC;IAEO,YAAY,CAAC,SAAkB,EAAE,OAAgB,EAAE,OAAgB,EAAE,GAAY,EAAE,MAAe;QACxG,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IACxJ,CAAC;CACF;AAnFD,8CAmFC;AAED,SAAgB,oBAAoB,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,GAAG,iBAAiB,EAAE,EAAE,MAA6B;IAC5H,MAAM,eAAe,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACrD,OAAO,eAAe,KAAK,OAAO;QAChC,CAAC,CAAC,IAAI,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC;QAC1C,CAAC,CAAC,IAAI,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,QAAgB;IACxC,IAAI,CAAC;QACH,MAAM,kBAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc;IACzC,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,CAAC,CAAC,CAAC,CAAC;AACN,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -25,6 +25,8 @@ export interface ToolResultInfo {
|
|
|
25
25
|
tool_use_id: string;
|
|
26
26
|
content: string;
|
|
27
27
|
is_error: boolean;
|
|
28
|
+
/** Optional unified diff for file-change results. */
|
|
29
|
+
diff?: string;
|
|
28
30
|
}
|
|
29
31
|
/**
|
|
30
32
|
* Content block types for structured streaming messages
|
|
@@ -130,7 +132,7 @@ export interface IncomingMessage {
|
|
|
130
132
|
/**
|
|
131
133
|
* Stream message types
|
|
132
134
|
*/
|
|
133
|
-
export type StreamType = 'text' | 'tool_use' | 'tool_result' | 'redacted_thinking' | 'plan_mode';
|
|
135
|
+
export type StreamType = 'text' | 'tool_use' | 'tool_result' | 'redacted_thinking' | 'plan_mode' | 'image';
|
|
134
136
|
/**
|
|
135
137
|
* Background task notification payload (Claude Code 2.x)
|
|
136
138
|
*
|
|
@@ -175,6 +177,8 @@ export interface OutgoingMessage {
|
|
|
175
177
|
toolResult?: ToolResultInfo;
|
|
176
178
|
/** Plan content (when streamType === 'plan_mode') */
|
|
177
179
|
planContent?: string;
|
|
180
|
+
/** Generated image content (when streamType === 'image') */
|
|
181
|
+
image?: ImageBlock;
|
|
178
182
|
/** Background task notification (when type === 'task_notification') */
|
|
179
183
|
taskNotification?: TaskNotificationInfo;
|
|
180
184
|
/** Thread ID that produced this output (optional — for multi-thread routing) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC;;;GAGG;AACH,eAAO,MAAM,WAAW,QAAU,CAAC;AAEnC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|