@yu_robotics/remote-cli 1.6.169 → 1.6.173

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.
Files changed (49) hide show
  1. package/README.md +21 -2
  2. package/dist/client/GoalCommand.d.ts +15 -0
  3. package/dist/client/GoalCommand.d.ts.map +1 -0
  4. package/dist/client/GoalCommand.js +59 -0
  5. package/dist/client/GoalCommand.js.map +1 -0
  6. package/dist/client/MessageHandler.d.ts +3 -0
  7. package/dist/client/MessageHandler.d.ts.map +1 -1
  8. package/dist/client/MessageHandler.js +167 -43
  9. package/dist/client/MessageHandler.js.map +1 -1
  10. package/dist/client/TaskRecovery.d.ts +3 -1
  11. package/dist/client/TaskRecovery.d.ts.map +1 -1
  12. package/dist/client/TaskRecovery.js +9 -4
  13. package/dist/client/TaskRecovery.js.map +1 -1
  14. package/dist/client/WebSocketClient.d.ts +2 -1
  15. package/dist/client/WebSocketClient.d.ts.map +1 -1
  16. package/dist/client/WebSocketClient.js +8 -1
  17. package/dist/client/WebSocketClient.js.map +1 -1
  18. package/dist/executor/CodexAppServerClient.d.ts +1 -0
  19. package/dist/executor/CodexAppServerClient.d.ts.map +1 -1
  20. package/dist/executor/CodexAppServerClient.js +12 -4
  21. package/dist/executor/CodexAppServerClient.js.map +1 -1
  22. package/dist/executor/CodexAppServerExecutor.d.ts +28 -2
  23. package/dist/executor/CodexAppServerExecutor.d.ts.map +1 -1
  24. package/dist/executor/CodexAppServerExecutor.js +517 -30
  25. package/dist/executor/CodexAppServerExecutor.js.map +1 -1
  26. package/dist/executor/IExecutor.d.ts +24 -0
  27. package/dist/executor/IExecutor.d.ts.map +1 -1
  28. package/dist/executor/codex/CodexGoals.d.ts +6 -0
  29. package/dist/executor/codex/CodexGoals.d.ts.map +1 -0
  30. package/dist/executor/codex/CodexGoals.js +49 -0
  31. package/dist/executor/codex/CodexGoals.js.map +1 -0
  32. package/dist/executor/codex/CodexImages.d.ts +22 -0
  33. package/dist/executor/codex/CodexImages.d.ts.map +1 -0
  34. package/dist/executor/codex/CodexImages.js +201 -0
  35. package/dist/executor/codex/CodexImages.js.map +1 -0
  36. package/dist/maintenance/release-notes.json +1 -1
  37. package/dist/utils/ImageDelivery.d.ts +67 -0
  38. package/dist/utils/ImageDelivery.d.ts.map +1 -0
  39. package/dist/utils/ImageDelivery.js +270 -0
  40. package/dist/utils/ImageDelivery.js.map +1 -0
  41. package/dist/utils/ImageValidation.d.ts +11 -0
  42. package/dist/utils/ImageValidation.d.ts.map +1 -0
  43. package/dist/utils/ImageValidation.js +62 -0
  44. package/dist/utils/ImageValidation.js.map +1 -0
  45. package/dist/utils/LocalImageDetector.d.ts +12 -3
  46. package/dist/utils/LocalImageDetector.d.ts.map +1 -1
  47. package/dist/utils/LocalImageDetector.js +153 -55
  48. package/dist/utils/LocalImageDetector.js.map +1 -1
  49. 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 MAX_IMAGE_BYTES = 2 * 1024 * 1024;
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
- const IMAGE_MIME_TYPES = {
14
- '.jpg': 'image/jpeg',
15
- '.jpeg': 'image/jpeg',
16
- '.png': 'image/png',
17
- '.webp': 'image/webp',
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 !/^https?:\/\//i.test(candidate) && IMAGE_EXTENSIONS.has(path_1.default.extname(candidate).toLowerCase());
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 standard Markdown image destinations and plain local image paths. */
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 angleImagePattern = /!\[[^\]]*\]\(\s*<([^>\r\n]+)>(?:[ \t]+(?:"[^"\r\n]*"|'[^'\r\n]*'|\([^)]*\)))?[ \t]*\)/g;
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 markdownDestinations = [];
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(angleImagePattern)) {
55
- markdownDestinations.push({ index: match.index ?? 0, destination: match[1] });
56
- }
57
- for (const match of text.matchAll(inlineImagePattern)) {
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
- markdownDestinations.push({ index: match.index ?? 0, destination });
65
- }
66
- for (const match of text.matchAll(collapsedReferencePattern)) {
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
- const precedingText = text.slice(0, candidateStart);
77
- if (precedingText.lastIndexOf('<') > precedingText.lastIndexOf('>'))
69
+ if (markdownSpans.some(span => candidateStart >= span.start && candidateStart < span.end))
78
70
  continue;
79
- addCandidate(candidates, match[1]);
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
- /** Read detected images that are allowed by the caller's directory policy. */
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
- try {
95
- const metadata = await (0, promises_1.stat)(resolvedPath);
96
- if (!metadata.isFile() || metadata.size <= 0 || metadata.size > MAX_IMAGE_BYTES)
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":"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"}
1
+ {"version":3,"file":"LocalImageDetector.js","sourceRoot":"","sources":["../../src/utils/LocalImageDetector.ts"],"names":[],"mappings":";;;;;;AAgDA,wDA+BC;AA0FD,gDAIC;AAMD,0CAkBC;AArMD,2BAA2C;AAC3C,0CAAoD;AACpD,2BAA6B;AAC7B,gDAAwB;AAExB,uDAAoE;AAEpE,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AAUxB,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAClC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,IAAI,WAAW,GAAG,CAAC,CAAC;AACpB,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAG9G,SAAS,WAAW,CAAC,SAAiB;IACpC,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;WAChF,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;WAC7B,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,aAAa,CAAC,SAAiB;IACtC,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,2CAA2C,EAAE,IAAI,CAAC,CAAC;AAC/G,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAiB;IACzC,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,cAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,YAAY,CAAC,UAAuB,EAAE,SAAiB;IAC9D,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,gBAAgB,CAAC,UAAU,CAAC;QAAE,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAa;IAC5C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AACzD,CAAC;AAED,2FAA2F;AAC3F,SAAgB,sBAAsB,CAAC,IAAa;IAClD,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,MAAM,0BAA0B,GAAG,oHAAoH,CAAC;IACxJ,MAAM,oBAAoB,GAAG,6IAA6I,CAAC;IAC3K,MAAM,WAAW,GAAG,yIAAyI,CAAC;IAC9J,MAAM,aAAa,GAA0C,EAAE,CAAC;IAChE,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;QAC9D,UAAU,CAAC,GAAG,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,IAAI,EAAE,WAAW,IAAI,sBAAsB;YAAE,MAAM;IACrD,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;QAC/B,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1G,IAAI,WAAW;YAAE,YAAY,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACvD,IAAI,EAAE,QAAQ,IAAI,sBAAsB;YAAE,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC;IACnE,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/C,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9E,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,IAAI,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC;YAAE,SAAS;QACpG,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QACpD,IAAI,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC;YAAE,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzG,IAAI,EAAE,QAAQ,IAAI,sBAAsB;YAAE,MAAM;IAClD,CAAC;IAED,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,SAAiB;IAC/C,MAAM,QAAQ,GAAG,cAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAChD,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,cAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,cAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACvH,CAAC;AAED,SAAS,QAAQ,CAAC,IAAW,EAAE,KAAY;IACzC,OAAO,KAAK,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG;WACpE,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC;AACpG,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,SAAiB,EAAE,GAAW,EAAE,MAAmB,EAAE,OAAsB;IAE3E,MAAM,OAAO,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAa,EAAE,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACxH,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,YAAY,GAAG,OAAO,MAAM,KAAK,UAAU;QAC/C,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,IAAA,YAAO,GAAE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtG,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACzC,MAAM,aAAa,GAAG,MAAM,IAAA,mBAAQ,EAAC,YAAY,CAAC,CAAC;IACnD,IAAI,OAAO,EAAE;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,mFAAmF;QACnF,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,qBAAqB,EAAE,EAAE,CAAC;YAClD,IAAI,OAAO,EAAE;gBAAE,OAAO,IAAI,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,aAAa,GAAG,MAAM,IAAA,mBAAQ,EAAC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;gBACtE,IAAI,OAAO,EAAE;oBAAE,OAAO,IAAI,CAAC;gBAC3B,IAAI,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC;oBAAC,UAAU,GAAG,IAAI,CAAC;oBAAC,MAAM;gBAAC,CAAC;YAC3E,CAAC;YAAC,MAAM,CAAC,CAAC,wDAAwD,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;IAC/B,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,IAAA,gBAAK,EAAC,aAAa,CAAC,CAAC;IAC9C,IAAI,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,GAAG,iCAAe;QAAE,OAAO,IAAI,CAAC;IAChH,MAAM,MAAM,GAAG,MAAM,IAAA,eAAI,EAAC,aAAa,EAAE,cAAS,CAAC,QAAQ,GAAG,CAAC,cAAS,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,cAAS,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;IACzH,IAAI,CAAC;QACH,IAAI,OAAO,EAAE;YAAE,OAAO,IAAI,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,iCAAe,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC7B,IAAI,OAAO,EAAE;gBAAE,OAAO,IAAI,CAAC;YAC3B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;YAC3G,IAAI,OAAO,EAAE;gBAAE,OAAO,IAAI,CAAC;YAC3B,IAAI,CAAC,SAAS;gBAAE,MAAM;YACtB,MAAM,IAAI,SAAS,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,MAAM,GAAG,iCAAe,IAAI,MAAM,KAAK,MAAM,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAC/E,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACvD,MAAM,WAAW,GAAG,MAAM,IAAA,mBAAQ,EAAC,YAAY,CAAC,CAAC;QACjD,IAAI,OAAO,EAAE,IAAI,WAAW,KAAK,aAAa;YAAE,OAAO,IAAI,CAAC;QAC5D,MAAM,OAAO,GAAG,MAAM,IAAA,gBAAK,EAAC,aAAa,CAAC,CAAC;QAC3C,IAAI,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACpF,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAA,gCAAc,EAAC,IAAI,CAAC,CAAC;QACtC,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3F,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,SAAiB,EAAE,GAAW,EAAE,MAAmB;IACzE,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,WAAW,IAAI,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAC7G,WAAW,EAAE,CAAC;IACd,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,KAAgD,CAAC;IACrD,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC;SACrE,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;SACjB,OAAO,CAAC,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;QAC3C,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAC/E,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,2EAA2E;QAC3E,qEAAqE;QACrE,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnD,CAAC;YAAS,CAAC;QACT,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,kFAAkF;AAC3E,KAAK,UAAU,kBAAkB,CACtC,QAAgB,EAAE,GAAW,EAAE,cAA8B;IAE7D,OAAO,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;AACjD,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,eAAe,CACnC,IAAa,EACb,GAAW,EACX,SAAsB;IAEtB,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,SAAS,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,IAAA,YAAO,GAAE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC1H,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YAAE,SAAS;QACrC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAEvB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QACxD,IAAI,KAAK;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yu_robotics/remote-cli",
3
- "version": "1.6.169",
3
+ "version": "1.6.173",
4
4
  "description": "Remote control Claude Code CLI via mobile",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",