@yu_robotics/remote-cli 1.6.170 → 1.6.176
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 +25 -0
- package/dist/client/GoalCommand.d.ts +15 -0
- package/dist/client/GoalCommand.d.ts.map +1 -0
- package/dist/client/GoalCommand.js +59 -0
- package/dist/client/GoalCommand.js.map +1 -0
- package/dist/client/MessageHandler.d.ts +4 -0
- package/dist/client/MessageHandler.d.ts.map +1 -1
- package/dist/client/MessageHandler.js +186 -46
- package/dist/client/MessageHandler.js.map +1 -1
- package/dist/client/TaskRecovery.d.ts +3 -1
- package/dist/client/TaskRecovery.d.ts.map +1 -1
- package/dist/client/TaskRecovery.js +9 -4
- package/dist/client/TaskRecovery.js.map +1 -1
- package/dist/client/WebSocketClient.d.ts +2 -1
- package/dist/client/WebSocketClient.d.ts.map +1 -1
- package/dist/client/WebSocketClient.js +9 -1
- package/dist/client/WebSocketClient.js.map +1 -1
- package/dist/delegation/DelegationManager.js +1 -1
- package/dist/delegation/DelegationManager.js.map +1 -1
- package/dist/executor/AcpExecutor.d.ts +6 -0
- package/dist/executor/AcpExecutor.d.ts.map +1 -1
- package/dist/executor/AcpExecutor.js +81 -10
- package/dist/executor/AcpExecutor.js.map +1 -1
- package/dist/executor/CodexAppServerClient.d.ts +1 -0
- package/dist/executor/CodexAppServerClient.d.ts.map +1 -1
- package/dist/executor/CodexAppServerClient.js +12 -4
- package/dist/executor/CodexAppServerClient.js.map +1 -1
- package/dist/executor/CodexAppServerExecutor.d.ts +39 -2
- package/dist/executor/CodexAppServerExecutor.d.ts.map +1 -1
- package/dist/executor/CodexAppServerExecutor.js +712 -32
- package/dist/executor/CodexAppServerExecutor.js.map +1 -1
- package/dist/executor/IExecutor.d.ts +43 -0
- package/dist/executor/IExecutor.d.ts.map +1 -1
- package/dist/executor/KimiExecutor.d.ts +9 -0
- package/dist/executor/KimiExecutor.d.ts.map +1 -1
- package/dist/executor/KimiExecutor.js +45 -0
- package/dist/executor/KimiExecutor.js.map +1 -1
- package/dist/executor/codex/CodexGoals.d.ts +6 -0
- package/dist/executor/codex/CodexGoals.d.ts.map +1 -0
- package/dist/executor/codex/CodexGoals.js +49 -0
- package/dist/executor/codex/CodexGoals.js.map +1 -0
- package/dist/executor/codex/CodexImages.d.ts +22 -0
- package/dist/executor/codex/CodexImages.d.ts.map +1 -0
- package/dist/executor/codex/CodexImages.js +201 -0
- package/dist/executor/codex/CodexImages.js.map +1 -0
- package/dist/executor/index.d.ts +2 -1
- package/dist/executor/index.d.ts.map +1 -1
- package/dist/executor/index.js +1 -0
- package/dist/executor/index.js.map +1 -1
- package/dist/executor/kimi/KimiAccountUsage.d.ts +2 -6
- package/dist/executor/kimi/KimiAccountUsage.d.ts.map +1 -1
- package/dist/executor/kimi/KimiAccountUsage.js +11 -71
- package/dist/executor/kimi/KimiAccountUsage.js.map +1 -1
- package/dist/executor/kimi/KimiLocalServer.d.ts +28 -0
- package/dist/executor/kimi/KimiLocalServer.d.ts.map +1 -0
- package/dist/executor/kimi/KimiLocalServer.js +192 -0
- package/dist/executor/kimi/KimiLocalServer.js.map +1 -0
- package/dist/executor/kimi/KimiModelCatalog.d.ts +6 -0
- package/dist/executor/kimi/KimiModelCatalog.d.ts.map +1 -0
- package/dist/executor/kimi/KimiModelCatalog.js +86 -0
- package/dist/executor/kimi/KimiModelCatalog.js.map +1 -0
- package/dist/maintenance/release-notes.json +1 -1
- package/dist/settings/SettingsCatalog.d.ts +1 -1
- package/dist/settings/SettingsCatalog.d.ts.map +1 -1
- package/dist/settings/SettingsCatalog.js +6 -2
- package/dist/settings/SettingsCatalog.js.map +1 -1
- package/dist/settings/SettingsService.d.ts +3 -1
- package/dist/settings/SettingsService.d.ts.map +1 -1
- package/dist/settings/SettingsService.js +17 -5
- package/dist/settings/SettingsService.js.map +1 -1
- package/dist/thread/ThreadExecutorPool.d.ts +3 -1
- package/dist/thread/ThreadExecutorPool.d.ts.map +1 -1
- package/dist/thread/ThreadExecutorPool.js +13 -1
- package/dist/thread/ThreadExecutorPool.js.map +1 -1
- package/dist/thread/ThreadManager.d.ts +1 -1
- package/dist/thread/ThreadManager.d.ts.map +1 -1
- package/dist/thread/ThreadManager.js.map +1 -1
- package/dist/thread/types.d.ts +2 -0
- package/dist/thread/types.d.ts.map +1 -1
- package/dist/types/Settings.d.ts +8 -0
- package/dist/types/Settings.d.ts.map +1 -1
- package/dist/utils/ImageDelivery.d.ts +67 -0
- package/dist/utils/ImageDelivery.d.ts.map +1 -0
- package/dist/utils/ImageDelivery.js +270 -0
- package/dist/utils/ImageDelivery.js.map +1 -0
- package/dist/utils/ImageValidation.d.ts +11 -0
- package/dist/utils/ImageValidation.d.ts.map +1 -0
- package/dist/utils/ImageValidation.js +62 -0
- package/dist/utils/ImageValidation.js.map +1 -0
- package/dist/utils/LocalImageDetector.d.ts +12 -3
- package/dist/utils/LocalImageDetector.d.ts.map +1 -1
- package/dist/utils/LocalImageDetector.js +153 -55
- package/dist/utils/LocalImageDetector.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,29 +3,32 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MAX_IMAGE_BYTES = void 0;
|
|
6
7
|
exports.extractLocalImagePaths = extractLocalImagePaths;
|
|
8
|
+
exports.readLocalImagePath = readLocalImagePath;
|
|
7
9
|
exports.readLocalImages = readLocalImages;
|
|
10
|
+
const fs_1 = require("fs");
|
|
8
11
|
const promises_1 = require("fs/promises");
|
|
9
12
|
const os_1 = require("os");
|
|
10
13
|
const path_1 = __importDefault(require("path"));
|
|
11
|
-
const
|
|
14
|
+
const ImageValidation_1 = require("./ImageValidation");
|
|
15
|
+
var ImageValidation_2 = require("./ImageValidation");
|
|
16
|
+
Object.defineProperty(exports, "MAX_IMAGE_BYTES", { enumerable: true, get: function () { return ImageValidation_2.MAX_IMAGE_BYTES; } });
|
|
17
|
+
const MAX_CANDIDATE_ATTEMPTS = 32;
|
|
18
|
+
const MAX_ACTIVE_READS = 4;
|
|
19
|
+
const READ_DEADLINE_MS = 15_000;
|
|
20
|
+
let activeReads = 0;
|
|
12
21
|
const IMAGE_EXTENSIONS = new Set(['.jpg', '.jpeg', '.png', '.webp', '.gif', '.bmp', '.tif', '.tiff', '.ico']);
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
'.gif': 'image/gif',
|
|
19
|
-
'.bmp': 'image/bmp',
|
|
20
|
-
'.tif': 'image/tiff',
|
|
21
|
-
'.tiff': 'image/tiff',
|
|
22
|
-
'.ico': 'image/x-icon',
|
|
23
|
-
};
|
|
22
|
+
function isLocalPath(candidate) {
|
|
23
|
+
return !!candidate.trim() && !candidate.includes('\0') && !candidate.startsWith('//')
|
|
24
|
+
&& !candidate.startsWith('\\\\')
|
|
25
|
+
&& (!/^[a-z][a-z0-9+.-]*:/i.test(candidate) || /^[a-z]:[\\/]/i.test(candidate));
|
|
26
|
+
}
|
|
24
27
|
function trimCandidate(candidate) {
|
|
25
28
|
return candidate.trim().replace(/[.,;:!?]+$/, '').replace(/\\([\\!"#$%&'()*+,./:;<=>?@[\]^_`{|}~-])/g, '$1');
|
|
26
29
|
}
|
|
27
30
|
function isImageCandidate(candidate) {
|
|
28
|
-
return
|
|
31
|
+
return isLocalPath(candidate) && IMAGE_EXTENSIONS.has(path_1.default.extname(candidate).toLowerCase());
|
|
29
32
|
}
|
|
30
33
|
function addCandidate(candidates, candidate) {
|
|
31
34
|
const normalized = trimCandidate(candidate);
|
|
@@ -35,74 +38,169 @@ function addCandidate(candidates, candidate) {
|
|
|
35
38
|
function normalizeReferenceLabel(label) {
|
|
36
39
|
return label.trim().replace(/\s+/g, ' ').toLowerCase();
|
|
37
40
|
}
|
|
38
|
-
/** Extract
|
|
41
|
+
/** Extract at most 32 candidate attempts, including invalid and duplicate destinations. */
|
|
39
42
|
function extractLocalImagePaths(text) {
|
|
40
43
|
if (typeof text !== 'string')
|
|
41
44
|
return [];
|
|
42
45
|
const candidates = new Set();
|
|
43
46
|
const references = new Map();
|
|
44
47
|
const referenceDefinitionPattern = /^[ \t]{0,3}\[([^\]\r\n]+)\]:[ \t]*(?:<([^>\r\n]+)>|(\S+))(?:[ \t]+(?:"[^"\r\n]*"|'[^'\r\n]*'|\([^)]*\)))?[ \t]*$/gm;
|
|
45
|
-
const
|
|
46
|
-
const inlineImagePattern = /!\[[^\]]*\]\(\s*((?:\\.|[^\s)])+)(?:[ \t]+(?:"[^"\r\n]*"|'[^'\r\n]*'|\([^)]*\)))?[ \t]*\)/g;
|
|
47
|
-
const referenceImagePattern = /!\[([^\]]*)\]\[([^\]]*)\]/g;
|
|
48
|
-
const collapsedReferencePattern = /!\[([^\]]+)\](?!\(|\[)/g;
|
|
48
|
+
const markdownImagePattern = /!\[([^\]]*)\](?:\(\s*(?:<([^>\r\n]+)>|((?:\\.|[^\s)\\])+))(?:[ \t]+(?:"[^"\r\n]*"|'[^'\r\n]*'|\([^)]*\)))?[ \t]*\)|\[([^\]]*)\]|(?!\(|\[))/g;
|
|
49
49
|
const pathPattern = /(?:^|[\s"'`])((?:~\/|\.{1,2}\/|\/|[A-Za-z]:[\\/])?[^\s"'`<>()[\],;]+\.(?:jpe?g|png|webp|gif|bmp|tiff?|ico))(?=$|[\s"'`<>()[\],;.?!])/gim;
|
|
50
|
-
const
|
|
50
|
+
const markdownSpans = [];
|
|
51
|
+
let definitions = 0;
|
|
52
|
+
let attempts = 0;
|
|
51
53
|
for (const match of text.matchAll(referenceDefinitionPattern)) {
|
|
52
54
|
references.set(normalizeReferenceLabel(match[1]), match[2] ?? match[3]);
|
|
55
|
+
if (++definitions >= MAX_CANDIDATE_ATTEMPTS)
|
|
56
|
+
break;
|
|
53
57
|
}
|
|
54
|
-
for (const match of text.matchAll(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
markdownDestinations.push({ index: match.index ?? 0, destination: match[1] });
|
|
59
|
-
}
|
|
60
|
-
for (const match of text.matchAll(referenceImagePattern)) {
|
|
61
|
-
const label = normalizeReferenceLabel(match[2] || match[1]);
|
|
62
|
-
const destination = references.get(label);
|
|
58
|
+
for (const match of text.matchAll(markdownImagePattern)) {
|
|
59
|
+
const start = match.index ?? 0;
|
|
60
|
+
markdownSpans.push({ start, end: start + match[0].length });
|
|
61
|
+
const destination = match[2] ?? match[3] ?? references.get(normalizeReferenceLabel(match[4] || match[1]));
|
|
63
62
|
if (destination)
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const destination = references.get(normalizeReferenceLabel(match[1]));
|
|
68
|
-
if (destination)
|
|
69
|
-
markdownDestinations.push({ index: match.index ?? 0, destination });
|
|
70
|
-
}
|
|
71
|
-
for (const match of markdownDestinations.sort((left, right) => left.index - right.index)) {
|
|
72
|
-
addCandidate(candidates, match.destination);
|
|
63
|
+
addCandidate(candidates, destination);
|
|
64
|
+
if (++attempts >= MAX_CANDIDATE_ATTEMPTS)
|
|
65
|
+
return [...candidates];
|
|
73
66
|
}
|
|
74
67
|
for (const match of text.matchAll(pathPattern)) {
|
|
75
68
|
const candidateStart = (match.index ?? 0) + match[0].length - match[1].length;
|
|
76
|
-
|
|
77
|
-
if (precedingText.lastIndexOf('<') > precedingText.lastIndexOf('>'))
|
|
69
|
+
if (markdownSpans.some(span => candidateStart >= span.start && candidateStart < span.end))
|
|
78
70
|
continue;
|
|
79
|
-
|
|
71
|
+
const precedingText = text.slice(0, candidateStart);
|
|
72
|
+
if (precedingText.lastIndexOf('<') <= precedingText.lastIndexOf('>'))
|
|
73
|
+
addCandidate(candidates, match[1]);
|
|
74
|
+
if (++attempts >= MAX_CANDIDATE_ATTEMPTS)
|
|
75
|
+
break;
|
|
80
76
|
}
|
|
81
77
|
return [...candidates];
|
|
82
78
|
}
|
|
83
|
-
|
|
79
|
+
function contains(root, candidate) {
|
|
80
|
+
const relative = path_1.default.relative(root, candidate);
|
|
81
|
+
return relative === '' || (!path_1.default.isAbsolute(relative) && relative !== '..' && !relative.startsWith(`..${path_1.default.sep}`));
|
|
82
|
+
}
|
|
83
|
+
function sameFile(left, right) {
|
|
84
|
+
return right.isFile() && left.dev === right.dev && left.ino === right.ino
|
|
85
|
+
&& left.size === right.size && left.mtimeMs === right.mtimeMs && left.ctimeMs === right.ctimeMs;
|
|
86
|
+
}
|
|
87
|
+
async function readBoundedPath(candidate, cwd, policy, expired) {
|
|
88
|
+
const allowed = typeof policy === 'function' ? policy : (value, base) => policy.isSafePath(value, base);
|
|
89
|
+
if (!allowed(candidate, cwd))
|
|
90
|
+
return null;
|
|
91
|
+
const resolvedPath = typeof policy === 'function'
|
|
92
|
+
? path_1.default.resolve(cwd, candidate.startsWith('~/') ? path_1.default.join((0, os_1.homedir)(), candidate.slice(2)) : candidate)
|
|
93
|
+
: policy.normalizePath(candidate, cwd);
|
|
94
|
+
const canonicalPath = await (0, promises_1.realpath)(resolvedPath);
|
|
95
|
+
if (expired())
|
|
96
|
+
return null;
|
|
97
|
+
if (typeof policy === 'function') {
|
|
98
|
+
// Legacy callbacks cannot expose configured roots; require canonical approval too.
|
|
99
|
+
if (!allowed(canonicalPath, cwd))
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
let insideRoot = false;
|
|
104
|
+
for (const root of policy.getAllowedDirectories()) {
|
|
105
|
+
if (expired())
|
|
106
|
+
return null;
|
|
107
|
+
try {
|
|
108
|
+
const canonicalRoot = await (0, promises_1.realpath)(policy.normalizePath(root, cwd));
|
|
109
|
+
if (expired())
|
|
110
|
+
return null;
|
|
111
|
+
if (contains(canonicalRoot, canonicalPath)) {
|
|
112
|
+
insideRoot = true;
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch { /* A missing configured root cannot authorize a file. */ }
|
|
117
|
+
}
|
|
118
|
+
if (!insideRoot)
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
const beforeOpen = await (0, promises_1.lstat)(canonicalPath);
|
|
122
|
+
if (expired() || !beforeOpen.isFile() || beforeOpen.size <= 0 || beforeOpen.size > ImageValidation_1.MAX_IMAGE_BYTES)
|
|
123
|
+
return null;
|
|
124
|
+
const handle = await (0, promises_1.open)(canonicalPath, fs_1.constants.O_RDONLY | (fs_1.constants.O_NOFOLLOW ?? 0) | (fs_1.constants.O_NONBLOCK ?? 0));
|
|
125
|
+
try {
|
|
126
|
+
if (expired())
|
|
127
|
+
return null;
|
|
128
|
+
const before = await handle.stat();
|
|
129
|
+
if (expired() || !sameFile(beforeOpen, before))
|
|
130
|
+
return null;
|
|
131
|
+
const bytes = Buffer.allocUnsafe(ImageValidation_1.MAX_IMAGE_BYTES + 1);
|
|
132
|
+
let length = 0;
|
|
133
|
+
while (length < bytes.length) {
|
|
134
|
+
if (expired())
|
|
135
|
+
return null;
|
|
136
|
+
const { bytesRead } = await handle.read(bytes, length, Math.min(64 * 1024, bytes.length - length), length);
|
|
137
|
+
if (expired())
|
|
138
|
+
return null;
|
|
139
|
+
if (!bytesRead)
|
|
140
|
+
break;
|
|
141
|
+
length += bytesRead;
|
|
142
|
+
}
|
|
143
|
+
if (!length || length > ImageValidation_1.MAX_IMAGE_BYTES || length !== before.size)
|
|
144
|
+
return null;
|
|
145
|
+
const after = await handle.stat();
|
|
146
|
+
if (expired() || !sameFile(before, after))
|
|
147
|
+
return null;
|
|
148
|
+
const currentPath = await (0, promises_1.realpath)(resolvedPath);
|
|
149
|
+
if (expired() || currentPath !== canonicalPath)
|
|
150
|
+
return null;
|
|
151
|
+
const current = await (0, promises_1.lstat)(canonicalPath);
|
|
152
|
+
if (expired() || !sameFile(after, current) || !allowed(candidate, cwd))
|
|
153
|
+
return null;
|
|
154
|
+
const data = bytes.subarray(0, length);
|
|
155
|
+
const mimeType = (0, ImageValidation_1.sniffImageMime)(data);
|
|
156
|
+
return mimeType ? { path: resolvedPath, data: data.toString('base64'), mimeType } : null;
|
|
157
|
+
}
|
|
158
|
+
finally {
|
|
159
|
+
await handle.close();
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
async function readPath(candidate, cwd, policy) {
|
|
163
|
+
if (typeof candidate !== 'string' || !isLocalPath(candidate) || activeReads >= MAX_ACTIVE_READS)
|
|
164
|
+
return null;
|
|
165
|
+
activeReads++;
|
|
166
|
+
let expired = false;
|
|
167
|
+
let timer;
|
|
168
|
+
const operation = readBoundedPath(candidate, cwd, policy, () => expired)
|
|
169
|
+
.catch(() => null)
|
|
170
|
+
.finally(() => { activeReads--; });
|
|
171
|
+
const deadline = new Promise(resolve => {
|
|
172
|
+
timer = setTimeout(() => { expired = true; resolve(null); }, READ_DEADLINE_MS);
|
|
173
|
+
timer.unref?.();
|
|
174
|
+
});
|
|
175
|
+
try {
|
|
176
|
+
// A timeout fences delivery, not the filesystem operation. Keep its permit
|
|
177
|
+
// until the underlying operation and handle cleanup actually settle.
|
|
178
|
+
return await Promise.race([operation, deadline]);
|
|
179
|
+
}
|
|
180
|
+
finally {
|
|
181
|
+
if (timer)
|
|
182
|
+
clearTimeout(timer);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/** Read exactly one native saved path. No text parsing or extension inference. */
|
|
186
|
+
async function readLocalImagePath(filePath, cwd, directoryGuard) {
|
|
187
|
+
return readPath(filePath, cwd, directoryGuard);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Read detected images using a guard or the existing callback API. Prefer the
|
|
191
|
+
* guard to resolve allowed-root aliases. These checks are not an OS sandbox.
|
|
192
|
+
*/
|
|
84
193
|
async function readLocalImages(text, cwd, isAllowed) {
|
|
85
194
|
const images = [];
|
|
86
195
|
const seen = new Set();
|
|
87
196
|
for (const candidate of extractLocalImagePaths(text)) {
|
|
88
|
-
if (!isAllowed(candidate, cwd))
|
|
89
|
-
continue;
|
|
90
197
|
const resolvedPath = path_1.default.resolve(cwd, candidate.startsWith('~/') ? path_1.default.join((0, os_1.homedir)(), candidate.slice(2)) : candidate);
|
|
91
198
|
if (seen.has(resolvedPath))
|
|
92
199
|
continue;
|
|
93
200
|
seen.add(resolvedPath);
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
continue;
|
|
98
|
-
const data = (await (0, promises_1.readFile)(resolvedPath)).toString('base64');
|
|
99
|
-
const mimeType = IMAGE_MIME_TYPES[path_1.default.extname(resolvedPath).toLowerCase()];
|
|
100
|
-
if (mimeType)
|
|
101
|
-
images.push({ path: resolvedPath, data, mimeType });
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
// Tool output can contain paths that no longer exist; ignore them quietly.
|
|
105
|
-
}
|
|
201
|
+
const image = await readPath(candidate, cwd, isAllowed);
|
|
202
|
+
if (image)
|
|
203
|
+
images.push(image);
|
|
106
204
|
}
|
|
107
205
|
return images;
|
|
108
206
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalImageDetector.js","sourceRoot":"","sources":["../../src/utils/LocalImageDetector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LocalImageDetector.js","sourceRoot":"","sources":["../../src/utils/LocalImageDetector.ts"],"names":[],"mappings":"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"}
|