yepanywhere 0.6.0 → 0.6.2

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 (225) hide show
  1. package/bundled/@yep-anywhere/shared/dist/app-types.d.ts +25 -0
  2. package/bundled/@yep-anywhere/shared/dist/app-types.d.ts.map +1 -1
  3. package/bundled/@yep-anywhere/shared/dist/app-types.js.map +1 -1
  4. package/bundled/@yep-anywhere/shared/dist/codex-schema/session.d.ts +179 -14
  5. package/bundled/@yep-anywhere/shared/dist/codex-schema/session.d.ts.map +1 -1
  6. package/bundled/@yep-anywhere/shared/dist/codex-schema/session.js +89 -0
  7. package/bundled/@yep-anywhere/shared/dist/codex-schema/session.js.map +1 -1
  8. package/bundled/@yep-anywhere/shared/dist/codex-tool-correlation.d.ts +25 -0
  9. package/bundled/@yep-anywhere/shared/dist/codex-tool-correlation.d.ts.map +1 -0
  10. package/bundled/@yep-anywhere/shared/dist/codex-tool-correlation.js +52 -0
  11. package/bundled/@yep-anywhere/shared/dist/codex-tool-correlation.js.map +1 -0
  12. package/bundled/@yep-anywhere/shared/dist/codex-web-run.d.ts +46 -0
  13. package/bundled/@yep-anywhere/shared/dist/codex-web-run.d.ts.map +1 -0
  14. package/bundled/@yep-anywhere/shared/dist/codex-web-run.js +14 -0
  15. package/bundled/@yep-anywhere/shared/dist/codex-web-run.js.map +1 -0
  16. package/bundled/@yep-anywhere/shared/dist/git-status.d.ts +29 -6
  17. package/bundled/@yep-anywhere/shared/dist/git-status.d.ts.map +1 -1
  18. package/bundled/@yep-anywhere/shared/dist/git-status.js +1 -6
  19. package/bundled/@yep-anywhere/shared/dist/git-status.js.map +1 -1
  20. package/bundled/@yep-anywhere/shared/dist/index.d.ts +7 -2
  21. package/bundled/@yep-anywhere/shared/dist/index.d.ts.map +1 -1
  22. package/bundled/@yep-anywhere/shared/dist/index.js +2 -0
  23. package/bundled/@yep-anywhere/shared/dist/index.js.map +1 -1
  24. package/bundled/@yep-anywhere/shared/dist/server-capabilities.d.ts +248 -0
  25. package/bundled/@yep-anywhere/shared/dist/server-capabilities.d.ts.map +1 -0
  26. package/bundled/@yep-anywhere/shared/dist/server-capabilities.js +251 -0
  27. package/bundled/@yep-anywhere/shared/dist/server-capabilities.js.map +1 -0
  28. package/bundled/@yep-anywhere/shared/dist/tool-display-actions.d.ts +26 -0
  29. package/bundled/@yep-anywhere/shared/dist/tool-display-actions.d.ts.map +1 -0
  30. package/bundled/@yep-anywhere/shared/dist/tool-display-actions.js +9 -0
  31. package/bundled/@yep-anywhere/shared/dist/tool-display-actions.js.map +1 -0
  32. package/bundled/@yep-anywhere/shared/package.json +1 -1
  33. package/client-dist/assets/de-BNhVdIq4.js +6 -0
  34. package/client-dist/assets/es-Csn9n24J.js +6 -0
  35. package/client-dist/assets/fr-DKx4tSpo.js +6 -0
  36. package/client-dist/assets/index-1y2h7U7U.js +582 -0
  37. package/client-dist/assets/index-Cn_ZDP6u.css +1 -0
  38. package/client-dist/assets/ja-DAkhkwQZ.js +6 -0
  39. package/client-dist/assets/zh-CN-B7lY0cc6.js +6 -0
  40. package/client-dist/index.html +2 -2
  41. package/dist/app.d.ts.map +1 -1
  42. package/dist/app.js.map +1 -1
  43. package/dist/codex/codeModeExec.d.ts +30 -0
  44. package/dist/codex/codeModeExec.d.ts.map +1 -0
  45. package/dist/codex/codeModeExec.js +419 -0
  46. package/dist/codex/codeModeExec.js.map +1 -0
  47. package/dist/codex/displayActions.d.ts +48 -0
  48. package/dist/codex/displayActions.d.ts.map +1 -0
  49. package/dist/codex/displayActions.js +674 -0
  50. package/dist/codex/displayActions.js.map +1 -0
  51. package/dist/codex/normalization.d.ts +10 -7
  52. package/dist/codex/normalization.d.ts.map +1 -1
  53. package/dist/codex/normalization.js +179 -502
  54. package/dist/codex/normalization.js.map +1 -1
  55. package/dist/codex/webRun.d.ts +42 -0
  56. package/dist/codex/webRun.d.ts.map +1 -0
  57. package/dist/codex/webRun.js +199 -0
  58. package/dist/codex/webRun.js.map +1 -0
  59. package/dist/indexes/SessionIndexService.d.ts +1 -1
  60. package/dist/indexes/SessionIndexService.d.ts.map +1 -1
  61. package/dist/indexes/SessionIndexService.js +16 -4
  62. package/dist/indexes/SessionIndexService.js.map +1 -1
  63. package/dist/routes/git-status.d.ts.map +1 -1
  64. package/dist/routes/git-status.js +70 -0
  65. package/dist/routes/git-status.js.map +1 -1
  66. package/dist/routes/project-queue.d.ts.map +1 -1
  67. package/dist/routes/project-queue.js.map +1 -1
  68. package/dist/routes/public-shares.d.ts +1 -1
  69. package/dist/routes/public-shares.d.ts.map +1 -1
  70. package/dist/routes/public-shares.js +4 -6
  71. package/dist/routes/public-shares.js.map +1 -1
  72. package/dist/routes/session-metadata-patch.d.ts +24 -0
  73. package/dist/routes/session-metadata-patch.d.ts.map +1 -0
  74. package/dist/routes/session-metadata-patch.js +119 -0
  75. package/dist/routes/session-metadata-patch.js.map +1 -0
  76. package/dist/routes/session-project-routing.d.ts +25 -0
  77. package/dist/routes/session-project-routing.d.ts.map +1 -0
  78. package/dist/routes/session-project-routing.js +32 -0
  79. package/dist/routes/session-project-routing.js.map +1 -0
  80. package/dist/routes/session-provider-resolution.d.ts +28 -0
  81. package/dist/routes/session-provider-resolution.d.ts.map +1 -0
  82. package/dist/routes/session-provider-resolution.js +22 -0
  83. package/dist/routes/session-provider-resolution.js.map +1 -0
  84. package/dist/routes/session-queue-summaries.d.ts +21 -0
  85. package/dist/routes/session-queue-summaries.d.ts.map +1 -0
  86. package/dist/routes/session-queue-summaries.js +79 -0
  87. package/dist/routes/session-queue-summaries.js.map +1 -0
  88. package/dist/routes/session-recovered-queue.d.ts +43 -0
  89. package/dist/routes/session-recovered-queue.d.ts.map +1 -0
  90. package/dist/routes/session-recovered-queue.js +132 -0
  91. package/dist/routes/session-recovered-queue.js.map +1 -0
  92. package/dist/routes/session-thinking-options.d.ts +12 -0
  93. package/dist/routes/session-thinking-options.d.ts.map +1 -0
  94. package/dist/routes/session-thinking-options.js +7 -0
  95. package/dist/routes/session-thinking-options.js.map +1 -0
  96. package/dist/routes/sessions.d.ts.map +1 -1
  97. package/dist/routes/sessions.js +110 -409
  98. package/dist/routes/sessions.js.map +1 -1
  99. package/dist/routes/settings-parsers.d.ts +37 -0
  100. package/dist/routes/settings-parsers.d.ts.map +1 -0
  101. package/dist/routes/settings-parsers.js +896 -0
  102. package/dist/routes/settings-parsers.js.map +1 -0
  103. package/dist/routes/settings.d.ts.map +1 -1
  104. package/dist/routes/settings.js +4 -894
  105. package/dist/routes/settings.js.map +1 -1
  106. package/dist/routes/version.d.ts +0 -2
  107. package/dist/routes/version.d.ts.map +1 -1
  108. package/dist/routes/version.js +8 -10
  109. package/dist/routes/version.js.map +1 -1
  110. package/dist/sdk/cli-detection.d.ts +15 -1
  111. package/dist/sdk/cli-detection.d.ts.map +1 -1
  112. package/dist/sdk/cli-detection.js +159 -28
  113. package/dist/sdk/cli-detection.js.map +1 -1
  114. package/dist/sdk/messageQueue.d.ts +5 -0
  115. package/dist/sdk/messageQueue.d.ts.map +1 -1
  116. package/dist/sdk/messageQueue.js +21 -0
  117. package/dist/sdk/messageQueue.js.map +1 -1
  118. package/dist/sdk/providers/codex-model-catalog.d.ts +34 -0
  119. package/dist/sdk/providers/codex-model-catalog.d.ts.map +1 -0
  120. package/dist/sdk/providers/codex-model-catalog.js +378 -0
  121. package/dist/sdk/providers/codex-model-catalog.js.map +1 -0
  122. package/dist/sdk/providers/codex-notification-guards.d.ts +15 -0
  123. package/dist/sdk/providers/codex-notification-guards.d.ts.map +1 -0
  124. package/dist/sdk/providers/codex-notification-guards.js +159 -0
  125. package/dist/sdk/providers/codex-notification-guards.js.map +1 -0
  126. package/dist/sdk/providers/codex-protocol/generated/ImageGenerationItem.d.ts +9 -0
  127. package/dist/sdk/providers/codex-protocol/generated/ImageGenerationItem.d.ts.map +1 -0
  128. package/dist/sdk/providers/codex-protocol/generated/ImageGenerationItem.js +3 -0
  129. package/dist/sdk/providers/codex-protocol/generated/ImageGenerationItem.js.map +1 -0
  130. package/dist/sdk/providers/codex-protocol/generated/MultiAgentMode.d.ts +5 -5
  131. package/dist/sdk/providers/codex-protocol/generated/MultiAgentMode.d.ts.map +1 -1
  132. package/dist/sdk/providers/codex-protocol/generated/ResponseItem.d.ts +1 -0
  133. package/dist/sdk/providers/codex-protocol/generated/ResponseItem.d.ts.map +1 -1
  134. package/dist/sdk/providers/codex-protocol/generated/ThreadId.d.ts +5 -0
  135. package/dist/sdk/providers/codex-protocol/generated/ThreadId.d.ts.map +1 -1
  136. package/dist/sdk/providers/codex-protocol/generated/WebSearchItem.d.ts +7 -0
  137. package/dist/sdk/providers/codex-protocol/generated/WebSearchItem.d.ts.map +1 -0
  138. package/dist/sdk/providers/codex-protocol/generated/WebSearchItem.js +3 -0
  139. package/dist/sdk/providers/codex-protocol/generated/WebSearchItem.js.map +1 -0
  140. package/dist/sdk/providers/codex-protocol/generated/v2/AskForApproval.d.ts +1 -1
  141. package/dist/sdk/providers/codex-protocol/generated/v2/AskForApproval.d.ts.map +1 -1
  142. package/dist/sdk/providers/codex-protocol/generated/v2/CapabilityRootLocation.d.ts +3 -0
  143. package/dist/sdk/providers/codex-protocol/generated/v2/CapabilityRootLocation.d.ts.map +1 -1
  144. package/dist/sdk/providers/codex-protocol/generated/v2/CodexErrorInfo.d.ts +1 -1
  145. package/dist/sdk/providers/codex-protocol/generated/v2/CodexErrorInfo.d.ts.map +1 -1
  146. package/dist/sdk/providers/codex-protocol/generated/v2/McpToolCallAppContext.d.ts +3 -0
  147. package/dist/sdk/providers/codex-protocol/generated/v2/McpToolCallAppContext.d.ts.map +1 -1
  148. package/dist/sdk/providers/codex-protocol/generated/v2/Thread.d.ts +13 -0
  149. package/dist/sdk/providers/codex-protocol/generated/v2/Thread.d.ts.map +1 -1
  150. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadExtra.d.ts +5 -0
  151. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadExtra.d.ts.map +1 -0
  152. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadExtra.js +3 -0
  153. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadExtra.js.map +1 -0
  154. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadForkParams.d.ts +7 -0
  155. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadForkParams.d.ts.map +1 -1
  156. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadHistoryMode.d.ts +2 -0
  157. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadHistoryMode.d.ts.map +1 -0
  158. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadHistoryMode.js +3 -0
  159. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadHistoryMode.js.map +1 -0
  160. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadItem.d.ts +5 -13
  161. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadItem.d.ts.map +1 -1
  162. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadRollbackParams.d.ts +3 -0
  163. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadRollbackParams.d.ts.map +1 -1
  164. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadStartParams.d.ts +10 -0
  165. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadStartParams.d.ts.map +1 -1
  166. package/dist/sdk/providers/codex-protocol/generated/v2/Turn.d.ts +3 -0
  167. package/dist/sdk/providers/codex-protocol/generated/v2/Turn.d.ts.map +1 -1
  168. package/dist/sdk/providers/codex-summary-helpers.d.ts +41 -0
  169. package/dist/sdk/providers/codex-summary-helpers.d.ts.map +1 -0
  170. package/dist/sdk/providers/codex-summary-helpers.js +207 -0
  171. package/dist/sdk/providers/codex-summary-helpers.js.map +1 -0
  172. package/dist/sdk/providers/codex.d.ts +0 -25
  173. package/dist/sdk/providers/codex.d.ts.map +1 -1
  174. package/dist/sdk/providers/codex.js +160 -703
  175. package/dist/sdk/providers/codex.js.map +1 -1
  176. package/dist/sdk/providers/opencode-models.d.ts +17 -0
  177. package/dist/sdk/providers/opencode-models.d.ts.map +1 -0
  178. package/dist/sdk/providers/opencode-models.js +83 -0
  179. package/dist/sdk/providers/opencode-models.js.map +1 -0
  180. package/dist/sdk/providers/opencode.d.ts +1 -9
  181. package/dist/sdk/providers/opencode.d.ts.map +1 -1
  182. package/dist/sdk/providers/opencode.js +1 -82
  183. package/dist/sdk/providers/opencode.js.map +1 -1
  184. package/dist/sdk/types.d.ts +3 -1
  185. package/dist/sdk/types.d.ts.map +1 -1
  186. package/dist/services/ProjectQueueService.d.ts.map +1 -1
  187. package/dist/services/ProjectQueueService.js +3 -1
  188. package/dist/services/ProjectQueueService.js.map +1 -1
  189. package/dist/sessions/claude-summary.d.ts.map +1 -1
  190. package/dist/sessions/claude-summary.js +13 -1
  191. package/dist/sessions/claude-summary.js.map +1 -1
  192. package/dist/sessions/codex-reader.d.ts +0 -2
  193. package/dist/sessions/codex-reader.d.ts.map +1 -1
  194. package/dist/sessions/codex-reader.js +46 -84
  195. package/dist/sessions/codex-reader.js.map +1 -1
  196. package/dist/sessions/codex-user-turn-provenance.d.ts +40 -0
  197. package/dist/sessions/codex-user-turn-provenance.d.ts.map +1 -0
  198. package/dist/sessions/codex-user-turn-provenance.js +165 -0
  199. package/dist/sessions/codex-user-turn-provenance.js.map +1 -0
  200. package/dist/sessions/normalization.d.ts.map +1 -1
  201. package/dist/sessions/normalization.js +80 -51
  202. package/dist/sessions/normalization.js.map +1 -1
  203. package/dist/sessions/pagination.d.ts +6 -0
  204. package/dist/sessions/pagination.d.ts.map +1 -1
  205. package/dist/sessions/pagination.js +42 -2
  206. package/dist/sessions/pagination.js.map +1 -1
  207. package/dist/subscriptions.d.ts.map +1 -1
  208. package/dist/subscriptions.js +1 -0
  209. package/dist/subscriptions.js.map +1 -1
  210. package/dist/supervisor/Process.d.ts +12 -0
  211. package/dist/supervisor/Process.d.ts.map +1 -1
  212. package/dist/supervisor/Process.js +178 -22
  213. package/dist/supervisor/Process.js.map +1 -1
  214. package/dist/supervisor/Supervisor.d.ts +5 -1
  215. package/dist/supervisor/Supervisor.d.ts.map +1 -1
  216. package/dist/supervisor/Supervisor.js +47 -0
  217. package/dist/supervisor/Supervisor.js.map +1 -1
  218. package/package.json +2 -2
  219. package/client-dist/assets/de-CHMDbVD5.js +0 -6
  220. package/client-dist/assets/es-CK8MPF_C.js +0 -6
  221. package/client-dist/assets/fr-49PXQiUL.js +0 -6
  222. package/client-dist/assets/index-B-09fVut.js +0 -557
  223. package/client-dist/assets/index-uJnfvD1f.css +0 -1
  224. package/client-dist/assets/ja-CrCGPmoH.js +0 -6
  225. package/client-dist/assets/zh-CN-AFJxv5ke.js +0 -6
@@ -0,0 +1,674 @@
1
+ import { posix, win32 } from "node:path";
2
+ const SHELL_EXECUTABLES = new Set(["bash", "sh", "zsh", "dash"]);
3
+ const POWERSHELL_EXECUTABLES = new Set([
4
+ "pwsh",
5
+ "pwsh.exe",
6
+ "powershell",
7
+ "powershell.exe",
8
+ ]);
9
+ function shouldEscapeShellChar(next) {
10
+ return (next !== undefined &&
11
+ (/\s/.test(next) || next === "\\" || next === "'" || next === '"'));
12
+ }
13
+ function tokenizeShellCommand(command) {
14
+ const tokens = [];
15
+ let current = "";
16
+ let quote = null;
17
+ let escaping = false;
18
+ for (let i = 0; i < command.length; i++) {
19
+ const char = command[i];
20
+ if (!char)
21
+ continue;
22
+ if (escaping) {
23
+ current += char;
24
+ escaping = false;
25
+ continue;
26
+ }
27
+ if (quote) {
28
+ if (char === quote) {
29
+ quote = null;
30
+ }
31
+ else if (quote === '"' &&
32
+ char === "\\" &&
33
+ shouldEscapeShellChar(command[i + 1])) {
34
+ escaping = true;
35
+ }
36
+ else {
37
+ current += char;
38
+ }
39
+ continue;
40
+ }
41
+ if (char === "\\" && shouldEscapeShellChar(command[i + 1])) {
42
+ escaping = true;
43
+ continue;
44
+ }
45
+ if (char === "'" || char === '"') {
46
+ quote = char;
47
+ continue;
48
+ }
49
+ if (/\s/.test(char)) {
50
+ if (current.length > 0) {
51
+ tokens.push(current);
52
+ current = "";
53
+ }
54
+ continue;
55
+ }
56
+ current += char;
57
+ }
58
+ if (current.length > 0) {
59
+ tokens.push(current);
60
+ }
61
+ return tokens;
62
+ }
63
+ function getExecutableName(token) {
64
+ const normalized = token.replace(/\\/g, "/");
65
+ return (normalized.split("/").pop() || token).toLowerCase();
66
+ }
67
+ function isShellExecutable(token) {
68
+ return SHELL_EXECUTABLES.has(getExecutableName(token));
69
+ }
70
+ function isPowerShellExecutable(token) {
71
+ const executableName = getExecutableName(token);
72
+ return (POWERSHELL_EXECUTABLES.has(executableName) ||
73
+ executableName.endsWith("pwsh.exe") ||
74
+ executableName.endsWith("powershell.exe"));
75
+ }
76
+ function getShellLauncherPrefixLength(tokens) {
77
+ if (tokens.length < 3) {
78
+ return 0;
79
+ }
80
+ const first = tokens[0] || "";
81
+ const second = tokens[1] || "";
82
+ const third = tokens[2] || "";
83
+ if (getExecutableName(first) === "env" &&
84
+ isShellExecutable(second) &&
85
+ third === "-lc" &&
86
+ tokens.length >= 4) {
87
+ return 3;
88
+ }
89
+ if (isShellExecutable(first) && second === "-lc" && tokens.length >= 3) {
90
+ return 2;
91
+ }
92
+ if (isPowerShellExecutable(first)) {
93
+ for (let i = 1; i < tokens.length - 1; i++) {
94
+ const token = tokens[i]?.toLowerCase();
95
+ if (token === "-command" || token === "-c") {
96
+ return i + 1;
97
+ }
98
+ }
99
+ }
100
+ return 0;
101
+ }
102
+ export function unwrapCodexShellLauncherCommand(command) {
103
+ let normalized = command.trim();
104
+ for (let i = 0; i < 3; i++) {
105
+ const tokens = tokenizeShellCommand(normalized);
106
+ const launcherPrefixLength = getShellLauncherPrefixLength(tokens);
107
+ if (launcherPrefixLength === 0 || tokens.length <= launcherPrefixLength) {
108
+ break;
109
+ }
110
+ normalized = tokens.slice(launcherPrefixLength).join(" ").trim();
111
+ }
112
+ return normalized;
113
+ }
114
+ function splitTopLevelCommandSequence(command) {
115
+ const commands = [];
116
+ let start = 0;
117
+ let quote = null;
118
+ let escaping = false;
119
+ const pushCommand = (end) => {
120
+ const part = command.slice(start, end).trim();
121
+ if (!part)
122
+ return false;
123
+ commands.push(part);
124
+ return true;
125
+ };
126
+ for (let i = 0; i < command.length; i++) {
127
+ const char = command[i];
128
+ const next = command[i + 1];
129
+ if (escaping) {
130
+ escaping = false;
131
+ continue;
132
+ }
133
+ if (quote) {
134
+ if (quote === '"' && (char === "`" || (char === "$" && next === "("))) {
135
+ return null;
136
+ }
137
+ if (char === "\\" && quote === '"') {
138
+ escaping = true;
139
+ }
140
+ else if (char === quote) {
141
+ quote = null;
142
+ }
143
+ continue;
144
+ }
145
+ if (char === "\\") {
146
+ escaping = true;
147
+ continue;
148
+ }
149
+ if (char === "'" || char === '"') {
150
+ quote = char;
151
+ continue;
152
+ }
153
+ // Command substitution and grouped shell programs require a real parser.
154
+ if (char === "`" || (char === "$" && next === "(") || char === "(") {
155
+ return null;
156
+ }
157
+ if (char === ")" || char === "{" || char === "}") {
158
+ return null;
159
+ }
160
+ if (char === "|" && next === "|") {
161
+ return null;
162
+ }
163
+ if (char === "&" && next !== "&") {
164
+ return null;
165
+ }
166
+ const separatorLength = char === "&" && next === "&" ? 2 : char === ";" || char === "\n" ? 1 : 0;
167
+ if (separatorLength === 0)
168
+ continue;
169
+ if (!pushCommand(i)) {
170
+ // Permit formatting newlines immediately after another separator.
171
+ if (char === "\n" && command.slice(start, i).trim() === "") {
172
+ start = i + 1;
173
+ continue;
174
+ }
175
+ return null;
176
+ }
177
+ i += separatorLength - 1;
178
+ start = i + 1;
179
+ }
180
+ if (quote || escaping || !pushCommand(command.length)) {
181
+ return null;
182
+ }
183
+ return commands;
184
+ }
185
+ function parseLineRangeToken(token) {
186
+ const match = token.match(/^(\d+)(?:,(\d+))?p$/);
187
+ if (!match?.[1])
188
+ return null;
189
+ const startLine = Number.parseInt(match[1], 10);
190
+ const endLine = match[2] ? Number.parseInt(match[2], 10) : startLine;
191
+ if (!Number.isFinite(startLine) || !Number.isFinite(endLine)) {
192
+ return null;
193
+ }
194
+ return {
195
+ startLine,
196
+ endLine: Math.max(startLine, endLine),
197
+ };
198
+ }
199
+ function parseReadShellCommand(command) {
200
+ const tokens = tokenizeShellCommand(command);
201
+ if (tokens.length === 0)
202
+ return null;
203
+ if (tokens[0] === "cat" && tokens.length === 2) {
204
+ const filePath = tokens[1];
205
+ if (!filePath || filePath.startsWith("-")) {
206
+ return null;
207
+ }
208
+ return {
209
+ filePath,
210
+ stripLineNumbers: false,
211
+ };
212
+ }
213
+ if (tokens[0] === "sed" && tokens[1] === "-n" && tokens.length === 4) {
214
+ const range = parseLineRangeToken(tokens[2] ?? "");
215
+ const filePath = tokens[3];
216
+ if (!range || !filePath || filePath.startsWith("-")) {
217
+ return null;
218
+ }
219
+ return {
220
+ filePath,
221
+ startLine: range.startLine,
222
+ endLine: range.endLine,
223
+ stripLineNumbers: false,
224
+ };
225
+ }
226
+ const isNlSedCommand = tokens[0] === "nl" &&
227
+ tokens[1] === "-ba" &&
228
+ tokens[3] === "|" &&
229
+ tokens[4] === "sed" &&
230
+ tokens[5] === "-n" &&
231
+ tokens.length === 7;
232
+ if (isNlSedCommand) {
233
+ const filePath = tokens[2];
234
+ const range = parseLineRangeToken(tokens[6] ?? "");
235
+ if (!filePath || !range)
236
+ return null;
237
+ return {
238
+ filePath,
239
+ startLine: range.startLine,
240
+ endLine: range.endLine,
241
+ stripLineNumbers: true,
242
+ };
243
+ }
244
+ return parsePowerShellGetContentCommand(tokens);
245
+ }
246
+ function parsePowerShellGetContentCommand(tokens) {
247
+ if (tokens[0]?.toLowerCase() !== "get-content") {
248
+ return null;
249
+ }
250
+ if (tokens.some((token) => token === "&&" || token === ";")) {
251
+ return null;
252
+ }
253
+ const pipeIndex = tokens.indexOf("|");
254
+ const getContentTokens = pipeIndex === -1 ? tokens : tokens.slice(0, pipeIndex);
255
+ let selectWindow = null;
256
+ if (pipeIndex !== -1) {
257
+ selectWindow = parseSelectObjectWindow(tokens.slice(pipeIndex + 1));
258
+ if (!selectWindow) {
259
+ return null;
260
+ }
261
+ }
262
+ const flagsWithValue = new Set([
263
+ "-credential",
264
+ "-delimiter",
265
+ "-encoding",
266
+ "-erroraction",
267
+ "-exclude",
268
+ "-filter",
269
+ "-include",
270
+ "-readcount",
271
+ "-stream",
272
+ ]);
273
+ let filePath = "";
274
+ let totalCount;
275
+ for (let i = 1; i < getContentTokens.length; i++) {
276
+ const token = getContentTokens[i];
277
+ if (!token)
278
+ continue;
279
+ const normalized = token.toLowerCase();
280
+ if (normalized === "-path" || normalized === "-literalpath") {
281
+ const next = getContentTokens[i + 1];
282
+ if (!next || next.startsWith("-"))
283
+ return null;
284
+ filePath = next;
285
+ i += 1;
286
+ continue;
287
+ }
288
+ if (normalized.startsWith("-path:")) {
289
+ filePath = token.slice("-path:".length);
290
+ continue;
291
+ }
292
+ if (normalized.startsWith("-literalpath:")) {
293
+ filePath = token.slice("-literalpath:".length);
294
+ continue;
295
+ }
296
+ if (normalized === "-totalcount" || normalized === "-head") {
297
+ const next = getContentTokens[i + 1];
298
+ const parsed = next ? Number.parseInt(next, 10) : Number.NaN;
299
+ if (!Number.isFinite(parsed) || parsed < 0)
300
+ return null;
301
+ totalCount = parsed;
302
+ i += 1;
303
+ continue;
304
+ }
305
+ if (normalized.startsWith("-totalcount:")) {
306
+ const parsed = Number.parseInt(token.slice("-totalcount:".length), 10);
307
+ if (!Number.isFinite(parsed) || parsed < 0)
308
+ return null;
309
+ totalCount = parsed;
310
+ continue;
311
+ }
312
+ if (normalized.startsWith("-head:")) {
313
+ const parsed = Number.parseInt(token.slice("-head:".length), 10);
314
+ if (!Number.isFinite(parsed) || parsed < 0)
315
+ return null;
316
+ totalCount = parsed;
317
+ continue;
318
+ }
319
+ if (flagsWithValue.has(normalized)) {
320
+ i += 1;
321
+ continue;
322
+ }
323
+ if (token.startsWith("-"))
324
+ continue;
325
+ if (!filePath)
326
+ filePath = token;
327
+ }
328
+ filePath = stripOuterQuotes(filePath);
329
+ if (!filePath || filePath.startsWith("-"))
330
+ return null;
331
+ if (selectWindow) {
332
+ const startLine = selectWindow.skip + 1;
333
+ return {
334
+ filePath,
335
+ startLine,
336
+ ...(selectWindow.first !== undefined && selectWindow.first > 0
337
+ ? { endLine: selectWindow.skip + selectWindow.first }
338
+ : {}),
339
+ stripLineNumbers: false,
340
+ };
341
+ }
342
+ return {
343
+ filePath,
344
+ ...(totalCount !== undefined && totalCount > 0
345
+ ? { startLine: 1, endLine: totalCount }
346
+ : {}),
347
+ stripLineNumbers: false,
348
+ };
349
+ }
350
+ function parseSelectObjectWindow(tokens) {
351
+ if (tokens[0]?.toLowerCase() !== "select-object") {
352
+ return null;
353
+ }
354
+ let skip;
355
+ let first;
356
+ for (let i = 1; i < tokens.length; i++) {
357
+ const token = tokens[i];
358
+ if (!token)
359
+ continue;
360
+ const normalized = token.toLowerCase();
361
+ if (normalized === "-skip" || normalized === "-first") {
362
+ const next = tokens[i + 1];
363
+ const parsed = next ? Number.parseInt(next, 10) : Number.NaN;
364
+ if (!Number.isFinite(parsed) || parsed < 0)
365
+ return null;
366
+ if (normalized === "-skip")
367
+ skip = parsed;
368
+ else
369
+ first = parsed;
370
+ i += 1;
371
+ continue;
372
+ }
373
+ if (normalized.startsWith("-skip:") || normalized.startsWith("-first:")) {
374
+ const prefixLength = normalized.startsWith("-skip:")
375
+ ? "-skip:".length
376
+ : "-first:".length;
377
+ const parsed = Number.parseInt(token.slice(prefixLength), 10);
378
+ if (!Number.isFinite(parsed) || parsed < 0)
379
+ return null;
380
+ if (normalized.startsWith("-skip:"))
381
+ skip = parsed;
382
+ else
383
+ first = parsed;
384
+ continue;
385
+ }
386
+ return null;
387
+ }
388
+ if (skip === undefined && first === undefined)
389
+ return null;
390
+ return {
391
+ skip: skip ?? 0,
392
+ ...(first !== undefined ? { first } : {}),
393
+ };
394
+ }
395
+ function parseRipgrepCommand(command) {
396
+ const tokens = tokenizeShellCommand(command);
397
+ if (tokens[0] !== "rg" || tokens.length < 2) {
398
+ return null;
399
+ }
400
+ if (tokens.includes("--files")) {
401
+ return null;
402
+ }
403
+ if (tokens.some((token) => token === "|" || token === "&&" || token === ";")) {
404
+ return null;
405
+ }
406
+ const flagsWithValue = new Set([
407
+ "-g",
408
+ "--glob",
409
+ "-e",
410
+ "--regexp",
411
+ "-f",
412
+ "--file",
413
+ "-m",
414
+ "--max-count",
415
+ "-A",
416
+ "--after-context",
417
+ "-B",
418
+ "--before-context",
419
+ "-C",
420
+ "--context",
421
+ "-t",
422
+ "--type",
423
+ "-T",
424
+ "--type-not",
425
+ ]);
426
+ let query = "";
427
+ const searchPaths = [];
428
+ for (let i = 1; i < tokens.length; i++) {
429
+ const token = tokens[i];
430
+ if (!token)
431
+ continue;
432
+ if (token === "--") {
433
+ const rest = tokens.slice(i + 1).filter(Boolean);
434
+ if (!query && rest[0])
435
+ query = rest[0];
436
+ if (query)
437
+ searchPaths.push(...rest.slice(1));
438
+ break;
439
+ }
440
+ if (token === "-e" || token === "--regexp") {
441
+ const next = tokens[i + 1];
442
+ if (next && !query)
443
+ query = next;
444
+ i += 1;
445
+ continue;
446
+ }
447
+ if (flagsWithValue.has(token)) {
448
+ i += 1;
449
+ continue;
450
+ }
451
+ if (token.startsWith("--glob=") || token.startsWith("--regexp=")) {
452
+ if (token.startsWith("--regexp=") && !query) {
453
+ query = token.slice("--regexp=".length);
454
+ }
455
+ continue;
456
+ }
457
+ if (token.startsWith("-"))
458
+ continue;
459
+ if (!query)
460
+ query = token;
461
+ else
462
+ searchPaths.push(token);
463
+ }
464
+ if (!query)
465
+ return null;
466
+ return {
467
+ query,
468
+ ...(searchPaths.length > 0 ? { path: searchPaths.join(" ") } : {}),
469
+ };
470
+ }
471
+ function parseListCommand(command) {
472
+ const tokens = tokenizeShellCommand(command);
473
+ if (tokens.some((token) => token === "|" || token === ">" || token === "<")) {
474
+ return null;
475
+ }
476
+ if (tokens[0] === "rg" && tokens[1] === "--files") {
477
+ const flagsWithValue = new Set([
478
+ "-g",
479
+ "--glob",
480
+ "--iglob",
481
+ "-t",
482
+ "--type",
483
+ "-T",
484
+ "--type-not",
485
+ "--sort",
486
+ "--sortr",
487
+ ]);
488
+ const paths = [];
489
+ for (let i = 2; i < tokens.length; i++) {
490
+ const token = tokens[i];
491
+ if (!token)
492
+ continue;
493
+ if (flagsWithValue.has(token)) {
494
+ i += 1;
495
+ continue;
496
+ }
497
+ if (token.startsWith("-"))
498
+ continue;
499
+ paths.push(token);
500
+ }
501
+ if (paths.length > 1)
502
+ return null;
503
+ return paths[0] ? { path: paths[0] } : {};
504
+ }
505
+ if (tokens[0] === "ls") {
506
+ const paths = tokens.slice(1).filter((token) => !token.startsWith("-"));
507
+ if (paths.length > 1)
508
+ return null;
509
+ return paths[0] ? { path: paths[0] } : {};
510
+ }
511
+ return null;
512
+ }
513
+ function isWindowsPath(value) {
514
+ return (/^[A-Za-z]:[\\/]/.test(value) ||
515
+ value.startsWith("\\\\") ||
516
+ value.includes("\\"));
517
+ }
518
+ function isAbsoluteCrossPlatform(value) {
519
+ return posix.isAbsolute(value) || win32.isAbsolute(value);
520
+ }
521
+ function resolveAbsolutePath(filePath, workingDirectory) {
522
+ if (isAbsoluteCrossPlatform(filePath))
523
+ return filePath;
524
+ if (!workingDirectory)
525
+ return undefined;
526
+ const pathApi = isWindowsPath(workingDirectory) ? win32 : posix;
527
+ return pathApi.resolve(workingDirectory, filePath);
528
+ }
529
+ function basenameCrossPlatform(filePath) {
530
+ return isWindowsPath(filePath)
531
+ ? win32.basename(filePath)
532
+ : posix.basename(filePath);
533
+ }
534
+ function parseDisplayAction(command, workingDirectory) {
535
+ const readInfo = parseReadShellCommand(command);
536
+ if (readInfo) {
537
+ const absolutePath = resolveAbsolutePath(readInfo.filePath, workingDirectory);
538
+ return {
539
+ kind: "read",
540
+ command,
541
+ name: basenameCrossPlatform(readInfo.filePath),
542
+ ...readInfo,
543
+ ...(absolutePath ? { absolutePath } : {}),
544
+ };
545
+ }
546
+ const listInfo = parseListCommand(command);
547
+ if (listInfo) {
548
+ return { kind: "list", command, ...listInfo };
549
+ }
550
+ const searchInfo = parseRipgrepCommand(command);
551
+ if (searchInfo) {
552
+ return { kind: "search", command, ...searchInfo };
553
+ }
554
+ return null;
555
+ }
556
+ export function analyzeCodexCommand(command, workingDirectory) {
557
+ const normalizedCommand = unwrapCodexShellLauncherCommand(command);
558
+ const commands = splitTopLevelCommandSequence(normalizedCommand);
559
+ if (!commands)
560
+ return null;
561
+ const actions = [];
562
+ for (const part of commands) {
563
+ const action = parseDisplayAction(part, workingDirectory);
564
+ if (!action)
565
+ return null;
566
+ actions.push(action);
567
+ }
568
+ return {
569
+ actions,
570
+ command: normalizedCommand,
571
+ explorationOnly: true,
572
+ };
573
+ }
574
+ /** Strip parser evidence that should not participate in render identity. */
575
+ export function toToolDisplayActions(actions) {
576
+ return actions.map((action) => {
577
+ switch (action.kind) {
578
+ case "read":
579
+ return {
580
+ kind: action.kind,
581
+ path: action.filePath,
582
+ name: action.name,
583
+ ...(action.absolutePath ? { absolutePath: action.absolutePath } : {}),
584
+ ...(action.startLine !== undefined
585
+ ? { startLine: action.startLine }
586
+ : {}),
587
+ ...(action.endLine !== undefined ? { endLine: action.endLine } : {}),
588
+ };
589
+ case "search":
590
+ return {
591
+ kind: action.kind,
592
+ query: action.query,
593
+ ...(action.path ? { path: action.path } : {}),
594
+ };
595
+ case "list":
596
+ return {
597
+ kind: action.kind,
598
+ ...(action.path ? { path: action.path } : {}),
599
+ };
600
+ default:
601
+ throw new Error("Unsupported Codex display action");
602
+ }
603
+ });
604
+ }
605
+ function isRecord(value) {
606
+ return !!value && typeof value === "object" && !Array.isArray(value);
607
+ }
608
+ function stringField(record, field) {
609
+ const value = record[field];
610
+ return typeof value === "string" && value.trim() ? value : undefined;
611
+ }
612
+ /** Convert live app-server metadata into the same semantic vocabulary. */
613
+ export function parseCodexCommandActionsOracle(commandActions) {
614
+ if (!Array.isArray(commandActions) || commandActions.length === 0)
615
+ return null;
616
+ const actions = [];
617
+ for (const value of commandActions) {
618
+ if (!isRecord(value))
619
+ return null;
620
+ const type = stringField(value, "type");
621
+ const command = stringField(value, "command") ?? "";
622
+ if (type === "read") {
623
+ const filePath = stringField(value, "path");
624
+ if (!filePath)
625
+ return null;
626
+ const parsed = parseReadShellCommand(command);
627
+ actions.push({
628
+ kind: "read",
629
+ command,
630
+ filePath,
631
+ absolutePath: filePath,
632
+ name: stringField(value, "name") ?? basenameCrossPlatform(filePath),
633
+ ...(parsed?.startLine !== undefined
634
+ ? { startLine: parsed.startLine }
635
+ : {}),
636
+ ...(parsed?.endLine !== undefined ? { endLine: parsed.endLine } : {}),
637
+ stripLineNumbers: parsed?.stripLineNumbers ?? false,
638
+ });
639
+ continue;
640
+ }
641
+ if (type === "search") {
642
+ const query = stringField(value, "query");
643
+ if (!query)
644
+ return null;
645
+ const path = stringField(value, "path");
646
+ actions.push({
647
+ kind: "search",
648
+ command,
649
+ query,
650
+ ...(path ? { path } : {}),
651
+ });
652
+ continue;
653
+ }
654
+ if (type === "listFiles") {
655
+ const path = stringField(value, "path");
656
+ actions.push({ kind: "list", command, ...(path ? { path } : {}) });
657
+ continue;
658
+ }
659
+ return null;
660
+ }
661
+ return actions;
662
+ }
663
+ export function stripOuterQuotes(value) {
664
+ if (value.length < 2) {
665
+ return value;
666
+ }
667
+ const first = value[0];
668
+ const last = value[value.length - 1];
669
+ if ((first === "'" && last === "'") || (first === '"' && last === '"')) {
670
+ return value.slice(1, -1);
671
+ }
672
+ return value;
673
+ }
674
+ //# sourceMappingURL=displayActions.js.map