farming-code 2.2.30 → 2.2.32

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 (377) hide show
  1. package/THIRD_PARTY_NOTICES.md +7 -0
  2. package/backend/acp/{client-services.js → client-services.cjs} +132 -134
  3. package/backend/acp/packaged-claude-acp.cjs +37 -0
  4. package/backend/acp/packaged-codex-acp.cjs +37 -0
  5. package/backend/acp/patch-decisions.cjs +182 -0
  6. package/backend/acp/permission-security.cjs +131 -0
  7. package/backend/{acp-checkpoint-store.js → acp-checkpoint-store.cjs} +90 -59
  8. package/backend/{acp-runtime.js → acp-runtime.cjs} +1220 -1112
  9. package/backend/acp-session-state.cjs +622 -0
  10. package/backend/acp-transcript.cjs +525 -0
  11. package/backend/agent-env.cjs +257 -0
  12. package/backend/agent-extension-discovery.cjs +452 -0
  13. package/backend/agent-extension-inventory.cjs +116 -0
  14. package/backend/agent-json-stream.cjs +283 -0
  15. package/backend/agent-lifecycle-journal.cjs +185 -0
  16. package/backend/{agent-manager.js → agent-manager.cjs} +3116 -4275
  17. package/backend/agent-order-transaction.cjs +85 -0
  18. package/backend/agent-order.cjs +159 -0
  19. package/backend/agent-provider-session.cjs +98 -0
  20. package/backend/agent-runtime-binding.cjs +179 -0
  21. package/backend/agent-session-history.cjs +1022 -0
  22. package/backend/agent-session-inventory.cjs +291 -0
  23. package/backend/async-cache.cjs +104 -0
  24. package/backend/atomic-json-store.cjs +67 -0
  25. package/backend/auth.cjs +261 -0
  26. package/backend/authoritative-inventory-cache.cjs +383 -0
  27. package/backend/business-health.cjs +68 -0
  28. package/backend/chat-runtime.cjs +50 -0
  29. package/backend/claude-settings.cjs +132 -0
  30. package/backend/cli-agents.cjs +435 -0
  31. package/backend/codex-context-window.cjs +196 -0
  32. package/backend/codex-models.cjs +228 -0
  33. package/backend/codex-session-archive.cjs +82 -0
  34. package/backend/codex-session-history.cjs +590 -0
  35. package/backend/{codex-terminal-profile.js → codex-terminal-profile.cjs} +149 -155
  36. package/backend/codex-transcript-sanitizer.cjs +130 -0
  37. package/backend/codex-transcript.cjs +2107 -0
  38. package/backend/command-runner-child.cjs +105 -0
  39. package/backend/config-manager.cjs +1263 -0
  40. package/backend/control-api.cjs +439 -0
  41. package/backend/data/LICENSE.cua +21 -0
  42. package/backend/executable-discovery.cjs +204 -0
  43. package/backend/farming-agent-bootstrap.cjs +81 -0
  44. package/backend/farming-agent-bootstrap.zh_cn.md +6 -2
  45. package/backend/{farming-app-cli.js → farming-app-cli.cjs} +441 -493
  46. package/backend/farming-cli.cjs +414 -0
  47. package/backend/farming-net-pass.cjs +319 -0
  48. package/backend/farming-net-registry.cjs +123 -0
  49. package/backend/farming-net-server.cjs +309 -0
  50. package/backend/farming-session-store.cjs +651 -0
  51. package/backend/git-worktree-info.cjs +181 -0
  52. package/backend/haiku-token.cjs +828 -0
  53. package/backend/index-html.cjs +96 -0
  54. package/backend/input-parts.cjs +68 -0
  55. package/backend/input-routing.cjs +40 -0
  56. package/backend/{local-session-engine.js → local-session-engine.cjs} +276 -282
  57. package/backend/main-agent-skills.cjs +309 -0
  58. package/backend/main-page-session.cjs +132 -0
  59. package/backend/native-pty-controller-generation.cjs +139 -0
  60. package/backend/{native-pty-host-client.js → native-pty-host-client.cjs} +338 -346
  61. package/backend/native-pty-host-identity.cjs +125 -0
  62. package/backend/native-pty-host-path.cjs +68 -0
  63. package/backend/{native-pty-host.js → native-pty-host.cjs} +480 -569
  64. package/backend/native-session-engine.cjs +296 -0
  65. package/backend/network.cjs +57 -0
  66. package/backend/npm-update-helper.cjs +399 -0
  67. package/backend/packaged-node-pty.cjs +120 -0
  68. package/backend/preview-session-manager.cjs +89 -0
  69. package/backend/provider-adapters.cjs +492 -0
  70. package/backend/provider-home-configuration.cjs +211 -0
  71. package/backend/provider-session-id.cjs +79 -0
  72. package/backend/provider-session-service.cjs +333 -0
  73. package/backend/qr-share-tickets.cjs +119 -0
  74. package/backend/resource-broadcast-protocol.cjs +50 -0
  75. package/backend/review-diff-router.cjs +202 -0
  76. package/backend/review-diff-service.cjs +1267 -0
  77. package/backend/review-session-router.cjs +93 -0
  78. package/backend/review-session-service.cjs +470 -0
  79. package/backend/review-session-store.cjs +161 -0
  80. package/backend/review-state-router.cjs +132 -0
  81. package/backend/review-state-store.cjs +299 -0
  82. package/backend/run-history-store.cjs +97 -0
  83. package/backend/runtime-dependency-manager.cjs +893 -0
  84. package/backend/runtime-executable-invocation.cjs +37 -0
  85. package/backend/runtime-observation.cjs +96 -0
  86. package/backend/server-process-identity.cjs +70 -0
  87. package/backend/server.cjs +3356 -0
  88. package/backend/session-engine-bridge.cjs +144 -0
  89. package/backend/session-engine-router.cjs +105 -0
  90. package/backend/session-engine.cjs +64 -0
  91. package/backend/session-stream-protocol.cjs +181 -0
  92. package/backend/shell-busy-integration.cjs +442 -0
  93. package/backend/slash-command-discovery.cjs +423 -0
  94. package/backend/storage-layout.cjs +263 -0
  95. package/backend/system-monitor.cjs +96 -0
  96. package/backend/terminal-attach-checkpoint.cjs +73 -0
  97. package/backend/terminal-exit-quiescence.cjs +57 -0
  98. package/backend/{terminal-reducer-flow-control.js → terminal-reducer-flow-control.cjs} +45 -22
  99. package/backend/terminal-runtime-cleanup.cjs +99 -0
  100. package/backend/{terminal-screen-state.js → terminal-screen-state.cjs} +100 -108
  101. package/backend/{terminal-screen-worker-pool.js → terminal-screen-worker-pool.cjs} +89 -79
  102. package/backend/{terminal-screen-worker-thread.js → terminal-screen-worker-thread.cjs} +64 -65
  103. package/backend/terminal-screen-worker.cjs +352 -0
  104. package/backend/terminal-state-serialization.cjs +147 -0
  105. package/backend/{terminal-status.js → terminal-status.cjs} +137 -187
  106. package/backend/theme-manager.cjs +185 -0
  107. package/backend/{update-service.js → update-service.cjs} +258 -248
  108. package/backend/usage-forecast.cjs +95 -0
  109. package/backend/{usage-history-client.js → usage-history-client.cjs} +144 -94
  110. package/backend/usage-history-smoke.cjs +85 -0
  111. package/backend/usage-history-worker.cjs +60 -0
  112. package/backend/{usage-monitor.js → usage-monitor.cjs} +363 -390
  113. package/backend/workspace-directory.cjs +239 -0
  114. package/backend/workspace-discovery.cjs +271 -0
  115. package/backend/{workspace-file-router.js → workspace-file-router.cjs} +213 -282
  116. package/backend/{workspace-file-service.js → workspace-file-service.cjs} +1139 -1318
  117. package/backend/workspace-root-registry.cjs +192 -0
  118. package/bin/farming +1 -1
  119. package/dist/acp/codex-acp-1.1.4.mjs +18 -1
  120. package/dist/assets/App-BCkdpWB6.css +1 -0
  121. package/dist/assets/App-CRjKpaGp.js +697 -0
  122. package/dist/assets/CodeSelect-Ci8sKZPU.js +1 -0
  123. package/dist/assets/CodeSelect-T2eNzrOc.css +1 -0
  124. package/dist/assets/{FileEditorMarkdownPreview-Cs9cLv8a.js → FileEditorMarkdownPreview-V06QHlAg.js} +55 -55
  125. package/dist/assets/FileEditorPane-BX-Wjg9U.js +2 -0
  126. package/dist/assets/IconGlyphs-YhV7tqd4.js +1 -0
  127. package/dist/assets/ProjectFilesSection-BDT2_r0o.js +12 -0
  128. package/dist/assets/ReviewPage-BqAs5sG1.js +3 -0
  129. package/dist/assets/code-dark-B7eM_9G9.css +1 -0
  130. package/dist/assets/{cssMode-Bdg5RpcJ.js → cssMode-ADdAlxTO.js} +1 -1
  131. package/dist/assets/{editor.api2-D74ufkbr.js → editor.api2-BFLAr0YF.js} +162 -162
  132. package/dist/assets/file-icons-BpeqWkIB.js +1 -0
  133. package/dist/assets/{freemarker2-DfMDJfnE.js → freemarker2-C90q5jrp.js} +1 -1
  134. package/dist/assets/{handlebars-BEdPtzMT.js → handlebars-BwUQcEDq.js} +1 -1
  135. package/dist/assets/{html-B1fPb1QD.js → html-1s3uPKfh.js} +1 -1
  136. package/dist/assets/{htmlMode-CY2ZjHxH.js → htmlMode-xtKD99de.js} +1 -1
  137. package/dist/assets/{index-D-zetSol.js → index-C8MchCem.js} +3 -3
  138. package/dist/assets/{javascript-BV2OsWA0.js → javascript-Ph7ijyny.js} +1 -1
  139. package/dist/assets/{jsonMode-zd07aeuX.js → jsonMode-D-jGAnFH.js} +1 -1
  140. package/dist/assets/linkComputer-CbGyI_qx.js +1 -0
  141. package/dist/assets/{liquid-BParI24X.js → liquid-0IamE_cI.js} +1 -1
  142. package/dist/assets/{lspLanguageFeatures-BzredkoV.js → lspLanguageFeatures-BxnQunWF.js} +1 -1
  143. package/dist/assets/main-CLKXa6hf.css +1 -0
  144. package/dist/assets/{mdx-vGzUJN98.js → mdx-DdNmfivn.js} +1 -1
  145. package/dist/assets/{monaco.contribution-BmaeBQEc.js → monaco.contribution-B43jsUs1.js} +2 -2
  146. package/dist/assets/{python-CUwdLgsI.js → python-IAt4X5TS.js} +1 -1
  147. package/dist/assets/{razor-BScebUxU.js → razor-DRkFYW0S.js} +1 -1
  148. package/dist/assets/review-C8-oPKXk.css +1 -0
  149. package/dist/assets/{tsMode-DzUAibXK.js → tsMode-_d_4U2gf.js} +1 -1
  150. package/dist/assets/{typescript-D9EOeM7N.js → typescript-C7zcMq9l.js} +1 -1
  151. package/dist/assets/{workers-DAiomYZM.js → workers-D0nOyJzf.js} +1 -1
  152. package/dist/assets/workspace-editor-model-DND_Y-Bj.js +1 -0
  153. package/dist/assets/workspace-editor-monaco-BPWhgcIB.js +4 -0
  154. package/dist/assets/workspace-editor-monaco-N641qPjX.js +1 -0
  155. package/dist/assets/workspace-view-state-k1bTlJ_Z.js +13 -0
  156. package/dist/assets/{xml-wWl1dhkQ.js → xml-BR-HvxT8.js} +1 -1
  157. package/dist/assets/{yaml-Dc2WDaOZ.js → yaml-YtFQwh4q.js} +1 -1
  158. package/dist/index.html +1 -1
  159. package/extensions/browser/backend/agent-browser-runtime.cjs +1040 -0
  160. package/extensions/browser/backend/agent-capability.cjs +85 -0
  161. package/extensions/browser/backend/browser-mcp-server.cjs +655 -0
  162. package/extensions/browser/backend/browser-resource-manager.cjs +1486 -0
  163. package/extensions/browser/backend/browser-resource-store.cjs +228 -0
  164. package/extensions/browser/backend/browser-router.cjs +203 -0
  165. package/extensions/browser/backend/executable-discovery.cjs +248 -0
  166. package/extensions/browser/backend/farming-browser-client.cjs +116 -0
  167. package/extensions/browser/backend/index.cjs +32 -0
  168. package/extensions/browser/backend/managed-chromium-installer.cjs +833 -0
  169. package/extensions/browser/bin/farming-browser +16 -7
  170. package/extensions/computer/backend/agent-capability.cjs +72 -0
  171. package/extensions/computer/backend/computer-constants.cjs +59 -0
  172. package/extensions/computer/backend/computer-mcp-server.cjs +182 -0
  173. package/extensions/computer/backend/computer-resource-manager.cjs +1219 -0
  174. package/extensions/computer/backend/computer-resource-store.cjs +190 -0
  175. package/extensions/computer/backend/computer-router.cjs +257 -0
  176. package/extensions/computer/backend/cua-tools.json +3067 -0
  177. package/extensions/computer/backend/farming-computer-client.cjs +84 -0
  178. package/extensions/computer/backend/index.cjs +35 -0
  179. package/extensions/computer/backend/isolated-browser-provider.cjs +157 -0
  180. package/extensions/computer/bin/farming-computer +131 -0
  181. package/frontend/farming-net/app.js +255 -262
  182. package/frontend/ghostty-loader.js +24 -20
  183. package/frontend/reading-anchor.js +210 -193
  184. package/frontend/runtime-paths.js +24 -26
  185. package/frontend/session-bridge.js +90 -111
  186. package/frontend/session-modal-bridge.js +184 -302
  187. package/frontend/skin-bridge.js +20 -23
  188. package/frontend/skins/crt/app.js +7686 -7901
  189. package/frontend/skins/crt/effects.js +7 -6
  190. package/frontend/skins/crt/index.html +6 -6
  191. package/frontend/skins/crt/styles/markdown.css +4 -4
  192. package/frontend/terminal-bridge.js +174 -181
  193. package/frontend/terminal-replay.js +320 -345
  194. package/frontend/theme-loader.js +55 -71
  195. package/package.json +64 -37
  196. package/shared/backend-connection-status.js +38 -69
  197. package/shared/browser-protocol.js +235 -110
  198. package/shared/websocket-liveness.js +40 -0
  199. package/backend/acp/packaged-claude-acp.js +0 -13
  200. package/backend/acp/packaged-codex-acp.js +0 -13
  201. package/backend/acp/patch-decisions.js +0 -153
  202. package/backend/acp/permission-security.js +0 -108
  203. package/backend/acp-session-state.js +0 -634
  204. package/backend/acp-transcript.js +0 -512
  205. package/backend/agent-env.js +0 -250
  206. package/backend/agent-json-stream.js +0 -268
  207. package/backend/agent-lifecycle-journal.js +0 -133
  208. package/backend/agent-order.js +0 -166
  209. package/backend/agent-provider-session.js +0 -76
  210. package/backend/agent-runtime-binding.js +0 -174
  211. package/backend/agent-session-history.js +0 -986
  212. package/backend/async-cache.js +0 -94
  213. package/backend/atomic-json-store.js +0 -37
  214. package/backend/auth.js +0 -251
  215. package/backend/chat-runtime.js +0 -28
  216. package/backend/claude-settings.js +0 -121
  217. package/backend/cli-agents.js +0 -486
  218. package/backend/codex-context-window.js +0 -189
  219. package/backend/codex-models.js +0 -226
  220. package/backend/codex-session-archive.js +0 -65
  221. package/backend/codex-session-history.js +0 -647
  222. package/backend/codex-transcript-sanitizer.js +0 -115
  223. package/backend/codex-transcript.js +0 -2362
  224. package/backend/command-runner-child.js +0 -67
  225. package/backend/config-manager.js +0 -1117
  226. package/backend/control-api.js +0 -455
  227. package/backend/executable-discovery.js +0 -216
  228. package/backend/farming-agent-bootstrap.js +0 -49
  229. package/backend/farming-cli.js +0 -403
  230. package/backend/farming-net-pass.js +0 -285
  231. package/backend/farming-net-registry.js +0 -112
  232. package/backend/farming-net-server.js +0 -298
  233. package/backend/farming-session-store.js +0 -677
  234. package/backend/git-worktree-info.js +0 -181
  235. package/backend/haiku-token.js +0 -772
  236. package/backend/index-html.js +0 -80
  237. package/backend/input-parts.js +0 -54
  238. package/backend/input-routing.js +0 -24
  239. package/backend/json-cli-runtime.js +0 -275
  240. package/backend/main-agent-skills.js +0 -288
  241. package/backend/main-page-session.js +0 -122
  242. package/backend/native-pty-controller-generation.js +0 -106
  243. package/backend/native-pty-host-identity.js +0 -86
  244. package/backend/native-pty-host-path.js +0 -42
  245. package/backend/native-session-engine.js +0 -268
  246. package/backend/network.js +0 -23
  247. package/backend/npm-update-helper.js +0 -374
  248. package/backend/packaged-node-pty.js +0 -99
  249. package/backend/preview-session-manager.js +0 -68
  250. package/backend/provider-adapters.js +0 -399
  251. package/backend/provider-session-id.js +0 -47
  252. package/backend/provider-session-service.js +0 -345
  253. package/backend/qr-share-tickets.js +0 -100
  254. package/backend/review-diff-router.js +0 -180
  255. package/backend/review-diff-service.js +0 -1270
  256. package/backend/review-session-router.js +0 -74
  257. package/backend/review-session-service.js +0 -446
  258. package/backend/review-session-store.js +0 -151
  259. package/backend/review-state-router.js +0 -116
  260. package/backend/review-state-store.js +0 -286
  261. package/backend/run-history-store.js +0 -67
  262. package/backend/runtime-dependency-manager.js +0 -759
  263. package/backend/runtime-executable-invocation.js +0 -20
  264. package/backend/runtime-observation.js +0 -81
  265. package/backend/server-process-identity.js +0 -47
  266. package/backend/server.js +0 -3225
  267. package/backend/session-engine-bridge.js +0 -129
  268. package/backend/session-engine-router.js +0 -66
  269. package/backend/session-engine.js +0 -39
  270. package/backend/session-stream-protocol.js +0 -185
  271. package/backend/shell-busy-integration.js +0 -472
  272. package/backend/slash-command-discovery.js +0 -433
  273. package/backend/storage-layout.js +0 -205
  274. package/backend/system-monitor.js +0 -77
  275. package/backend/terminal-attach-checkpoint.js +0 -74
  276. package/backend/terminal-exit-quiescence.js +0 -39
  277. package/backend/terminal-runtime-cleanup.js +0 -80
  278. package/backend/terminal-screen-worker.js +0 -337
  279. package/backend/terminal-state-serialization.js +0 -127
  280. package/backend/theme-manager.js +0 -163
  281. package/backend/usage-forecast.js +0 -86
  282. package/backend/usage-history-scanner.ts +0 -2718
  283. package/backend/usage-history-smoke.js +0 -64
  284. package/backend/usage-history-worker.js +0 -34
  285. package/backend/workspace-directory.js +0 -232
  286. package/backend/workspace-discovery.js +0 -311
  287. package/backend/workspace-root-registry.js +0 -166
  288. package/dist/assets/App-BKNUILuL.css +0 -1
  289. package/dist/assets/App-Z1N7T0eM.js +0 -695
  290. package/dist/assets/FileEditorPane-CNtuGjQ3.js +0 -2
  291. package/dist/assets/IconGlyphs-BClgag6E.js +0 -1
  292. package/dist/assets/ProjectFilesSection-K3GHuQ4U.js +0 -12
  293. package/dist/assets/ReviewPage-BRuxFaH5.js +0 -3
  294. package/dist/assets/code-dark-kLsQLvpf.css +0 -1
  295. package/dist/assets/file-icons-BOlcJ0ZF.js +0 -1
  296. package/dist/assets/main-DUTz-Rd2.css +0 -1
  297. package/dist/assets/review-BcnwQtJv.css +0 -1
  298. package/dist/assets/workspace-editor-model-CSGCl21x.js +0 -1
  299. package/dist/assets/workspace-editor-monaco-CJNwbpCy.js +0 -4
  300. package/dist/assets/workspace-editor-monaco-CO9w8YV0.js +0 -1
  301. package/dist/assets/workspace-view-state-BjKPYp0E.js +0 -7
  302. package/extensions/browser/backend/agent-browser-runtime.js +0 -1041
  303. package/extensions/browser/backend/agent-capability.js +0 -55
  304. package/extensions/browser/backend/browser-mcp-server.js +0 -621
  305. package/extensions/browser/backend/browser-resource-manager.js +0 -1331
  306. package/extensions/browser/backend/browser-resource-store.js +0 -190
  307. package/extensions/browser/backend/browser-router.js +0 -141
  308. package/extensions/browser/backend/executable-discovery.js +0 -238
  309. package/extensions/browser/backend/farming-browser-client.js +0 -83
  310. package/extensions/browser/backend/index.js +0 -7
  311. package/extensions/browser/backend/managed-chromium-installer.js +0 -593
  312. package/extensions/browser/frontend/BrowserSidebarPortals.tsx +0 -360
  313. package/extensions/browser/frontend/BrowserViewer.tsx +0 -500
  314. package/extensions/browser/frontend/browser-resource-state.ts +0 -60
  315. package/extensions/browser/frontend/browser.css +0 -567
  316. package/extensions/browser/frontend/types.ts +0 -38
  317. package/extensions/browser/frontend/useBrowserResources.ts +0 -166
  318. package/frontend/vendor/ghostty-web/index.d.ts +0 -1842
  319. package/shared/backend-connection-status.d.ts +0 -37
  320. package/shared/browser-protocol.d.ts +0 -5
  321. /package/dist/assets/{api-w2x5QfxB.js → api-ByCV9MEr.js} +0 -0
  322. /package/dist/assets/{core-vPkV8P_m.js → core-Czwdx12k.js} +0 -0
  323. /package/dist/assets/{fsharp-DNZNZyEE.js → fsharp-BjPpkoJe.js} +0 -0
  324. /package/dist/assets/{go-_kPJjNc_.js → go-BkIDmSUP.js} +0 -0
  325. /package/dist/assets/{graphql-4HCNVt5g.js → graphql-CCJTpqi1.js} +0 -0
  326. /package/dist/assets/{hcl-C87ymY0o.js → hcl-s4z8lUFg.js} +0 -0
  327. /package/dist/assets/{ini-BYrrGNTc.js → ini-CyUW1I7Z.js} +0 -0
  328. /package/dist/assets/{java-B211rJbk.js → java-CFCcGRiM.js} +0 -0
  329. /package/dist/assets/{julia-DVPsRtBm.js → julia-DQyH_EYb.js} +0 -0
  330. /package/dist/assets/{kotlin-BYyNerjp.js → kotlin-B8hA5O51.js} +0 -0
  331. /package/dist/assets/{less-EC9UblGE.js → less-DaVdaas0.js} +0 -0
  332. /package/dist/assets/{lexon-B1yuUdqW.js → lexon-DLBhPd3y.js} +0 -0
  333. /package/dist/assets/{lua-Bo6GFzxT.js → lua-gB1c_cif.js} +0 -0
  334. /package/dist/assets/{m3-C-Y9cBVI.js → m3-C2T3z3gB.js} +0 -0
  335. /package/dist/assets/{markdown-BHu-wLbe.js → markdown-CKq-Euj1.js} +0 -0
  336. /package/dist/assets/{mips-Dkds26rX.js → mips-Bcs5qIDX.js} +0 -0
  337. /package/dist/assets/{msdax-PU4g-8_g.js → msdax-CBP48FHF.js} +0 -0
  338. /package/dist/assets/{mysql-fPpuGpS7.js → mysql-c7tiPcFj.js} +0 -0
  339. /package/dist/assets/{objective-c-Wy1e5JUf.js → objective-c-D4BZkeEV.js} +0 -0
  340. /package/dist/assets/{pascal-BIXwvrqU.js → pascal-CJDZg0MN.js} +0 -0
  341. /package/dist/assets/{pascaligo-DwR0AtL_.js → pascaligo-Bygi8Ynl.js} +0 -0
  342. /package/dist/assets/{perl-CGHAl8my.js → perl-aS8bkf7E.js} +0 -0
  343. /package/dist/assets/{pgsql-B91M73E2.js → pgsql-CzNAYFYl.js} +0 -0
  344. /package/dist/assets/{php-C70ttrCx.js → php-DOtoEFTT.js} +0 -0
  345. /package/dist/assets/{pla-BNrXaRh0.js → pla-DugRnao1.js} +0 -0
  346. /package/dist/assets/{postiats-Dv2IAZR9.js → postiats-DsXwusKh.js} +0 -0
  347. /package/dist/assets/{powerquery-CkY5Wq7J.js → powerquery-DL3o72oD.js} +0 -0
  348. /package/dist/assets/{powershell-uGIYLU3C.js → powershell-C1qHekys.js} +0 -0
  349. /package/dist/assets/{protobuf-CavfmJu-.js → protobuf-DHgsc-cH.js} +0 -0
  350. /package/dist/assets/{pug-Drqnyitx.js → pug-FZXlE_Iu.js} +0 -0
  351. /package/dist/assets/{qrcode-7uGsTEmi.js → qrcode-DJDTdjL7.js} +0 -0
  352. /package/dist/assets/{qsharp-C7yF-Dti.js → qsharp-bLyhI3DT.js} +0 -0
  353. /package/dist/assets/{r-HXLGP0_-.js → r-DjFGXbAa.js} +0 -0
  354. /package/dist/assets/{redis-C4y6mf2p.js → redis-DSoZ_V6u.js} +0 -0
  355. /package/dist/assets/{redshift-DdQrFPrv.js → redshift-CzkdCsrg.js} +0 -0
  356. /package/dist/assets/{restructuredtext-CBrf2PNj.js → restructuredtext-B_XPrGCQ.js} +0 -0
  357. /package/dist/assets/{ruby-CVtMoX2B.js → ruby-Cry2RneJ.js} +0 -0
  358. /package/dist/assets/{rust-Ckq4sbMP.js → rust-CWzdbFq1.js} +0 -0
  359. /package/dist/assets/{sb-er66OpE3.js → sb-DmofU59h.js} +0 -0
  360. /package/dist/assets/{scala-BdWZz-hH.js → scala-BUC2l-vN.js} +0 -0
  361. /package/dist/assets/{scheme-kTV_s2kP.js → scheme-CNIB_72f.js} +0 -0
  362. /package/dist/assets/{scss-Bymy2VJQ.js → scss-DcL4-NbX.js} +0 -0
  363. /package/dist/assets/{shell-bwEP1LQ1.js → shell-CgAGvSSA.js} +0 -0
  364. /package/dist/assets/{solidity-DCddeBgL.js → solidity-DSkt6O_P.js} +0 -0
  365. /package/dist/assets/{sophia-BMN3AQig.js → sophia--5ytcjDN.js} +0 -0
  366. /package/dist/assets/{sparql-CSXOLjzi.js → sparql-C1Srr7cD.js} +0 -0
  367. /package/dist/assets/{sql-COg8ewmK.js → sql-2k_O5fj7.js} +0 -0
  368. /package/dist/assets/{st-CIaZtBS_.js → st-DCCCPqfz.js} +0 -0
  369. /package/dist/assets/{swift-DXiOhUHu.js → swift-Dd8mAfOt.js} +0 -0
  370. /package/dist/assets/{systemverilog-BTDE6Dr2.js → systemverilog-B0-aZYXu.js} +0 -0
  371. /package/dist/assets/{tcl-B0zy9NvV.js → tcl-CZAZwPVX.js} +0 -0
  372. /package/dist/assets/{twig-D594l4Z1.js → twig-D-Ag0tdS.js} +0 -0
  373. /package/dist/assets/{typespec-XKVjaPqo.js → typespec-B7kTFp0Z.js} +0 -0
  374. /package/dist/assets/{useWorkspaceMenuKeyboard-Bpy_s69Z.js → useWorkspaceMenuKeyboard-uYZpDxhU.js} +0 -0
  375. /package/dist/assets/{vb-B2wYoKRV.js → vb-20w1JPum.js} +0 -0
  376. /package/dist/assets/{wgsl-D0Yf2LbK.js → wgsl-CLJfqFt0.js} +0 -0
  377. /package/dist/assets/{workspace-working-copy-C3FSR3N6.js → workspace-working-copy-Cfz07cOd.js} +0 -0
@@ -0,0 +1,147 @@
1
+ // Generated by scripts/build-backend-runtime.ts. Do not edit.
2
+ "use strict";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var terminal_state_serialization_exports = {};
21
+ __export(terminal_state_serialization_exports, {
22
+ MAX_REPLAY_EVENT_BYTES: () => MAX_REPLAY_EVENT_BYTES,
23
+ MAX_SERIALIZED_TERMINAL_STATE_BYTES: () => MAX_SERIALIZED_TERMINAL_STATE_BYTES,
24
+ TERMINAL_STATE_VERSION: () => TERMINAL_STATE_VERSION,
25
+ deserializeTerminalState: () => deserializeTerminalState,
26
+ normalizeTerminalStateEntry: () => normalizeTerminalStateEntry,
27
+ serializeTerminalState: () => serializeTerminalState,
28
+ terminalReplayText: () => terminalReplayText
29
+ });
30
+ module.exports = __toCommonJS(terminal_state_serialization_exports);
31
+ const TERMINAL_STATE_VERSION = 1;
32
+ const MAX_SERIALIZED_TERMINAL_STATE_BYTES = 32 * 1024 * 1024;
33
+ const MAX_REPLAY_EVENT_BYTES = 8 * 1024 * 1024;
34
+ function recordValue(value) {
35
+ return value && typeof value === "object" && !Array.isArray(value) ? value : {};
36
+ }
37
+ function finitePositiveInteger(value, fallback) {
38
+ const parsed = Math.floor(Number(value));
39
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
40
+ }
41
+ function normalizeReplayEvent(replayEvent) {
42
+ const source = recordValue(replayEvent);
43
+ const events = Array.isArray(source.events) ? source.events : [];
44
+ if (events.length !== 1) {
45
+ throw new Error("Serialized terminal state requires exactly one replay event");
46
+ }
47
+ const event = recordValue(events[0]);
48
+ const data = typeof event.data === "string" ? event.data : "";
49
+ if (Buffer.byteLength(data, "utf8") > MAX_REPLAY_EVENT_BYTES) {
50
+ throw new Error("Serialized terminal replay event exceeds the size limit");
51
+ }
52
+ return {
53
+ events: [{
54
+ data,
55
+ cols: finitePositiveInteger(event.cols, 80),
56
+ rows: finitePositiveInteger(event.rows, 30)
57
+ }]
58
+ };
59
+ }
60
+ function normalizeTerminalStateEntry(entry) {
61
+ if (!entry || typeof entry !== "object") {
62
+ throw new Error("Serialized terminal state entry must be an object");
63
+ }
64
+ const source = entry;
65
+ const id = typeof source.id === "string" ? source.id.trim() : "";
66
+ if (!/^[A-Za-z0-9][A-Za-z0-9_-]{0,199}$/.test(id)) {
67
+ throw new Error("Serialized terminal state has an invalid session id");
68
+ }
69
+ const metadata = recordValue(source.metadata);
70
+ const processDetails = recordValue(source.processDetails);
71
+ const processLaunchConfig = recordValue(source.processLaunchConfig);
72
+ return {
73
+ id,
74
+ metadata: {
75
+ ...metadata,
76
+ agentId: id
77
+ },
78
+ processDetails: {
79
+ cwd: typeof processDetails.cwd === "string" ? processDetails.cwd : "",
80
+ title: typeof processDetails.title === "string" ? processDetails.title : ""
81
+ },
82
+ processLaunchConfig: {
83
+ command: typeof processLaunchConfig.command === "string" ? processLaunchConfig.command : "",
84
+ args: Array.isArray(processLaunchConfig.args) ? processLaunchConfig.args.filter((arg) => typeof arg === "string") : [],
85
+ category: typeof processLaunchConfig.category === "string" ? processLaunchConfig.category : ""
86
+ },
87
+ replayEvent: normalizeReplayEvent(source.replayEvent),
88
+ timestamp: Number.isFinite(Number(source.timestamp)) ? Math.max(0, Math.floor(Number(source.timestamp))) : Date.now()
89
+ };
90
+ }
91
+ function serializeTerminalState(entries) {
92
+ const state = (Array.isArray(entries) ? entries : []).map(normalizeTerminalStateEntry);
93
+ const ids = /* @__PURE__ */ new Set();
94
+ for (const entry of state) {
95
+ if (ids.has(entry.id)) {
96
+ throw new Error(`Serialized terminal state contains duplicate session id ${entry.id}`);
97
+ }
98
+ ids.add(entry.id);
99
+ }
100
+ const serialized = JSON.stringify({
101
+ version: TERMINAL_STATE_VERSION,
102
+ state
103
+ });
104
+ if (Buffer.byteLength(serialized, "utf8") > MAX_SERIALIZED_TERMINAL_STATE_BYTES) {
105
+ throw new Error("Serialized terminal state exceeds the size limit");
106
+ }
107
+ return serialized;
108
+ }
109
+ function deserializeTerminalState(serialized) {
110
+ if (typeof serialized !== "string" || !serialized) return [];
111
+ if (Buffer.byteLength(serialized, "utf8") > MAX_SERIALIZED_TERMINAL_STATE_BYTES) {
112
+ throw new Error("Serialized terminal state exceeds the size limit");
113
+ }
114
+ let parsed;
115
+ try {
116
+ parsed = JSON.parse(serialized);
117
+ } catch {
118
+ throw new Error("Serialized terminal state is not valid JSON");
119
+ }
120
+ const envelope = recordValue(parsed);
121
+ if (envelope.version !== TERMINAL_STATE_VERSION || !Array.isArray(envelope.state)) {
122
+ throw new Error("Serialized terminal state has an unsupported format or version");
123
+ }
124
+ const state = envelope.state.map(normalizeTerminalStateEntry);
125
+ const ids = /* @__PURE__ */ new Set();
126
+ for (const entry of state) {
127
+ if (ids.has(entry.id)) {
128
+ throw new Error(`Serialized terminal state contains duplicate session id ${entry.id}`);
129
+ }
130
+ ids.add(entry.id);
131
+ }
132
+ return state;
133
+ }
134
+ function terminalReplayText(entry) {
135
+ const normalized = normalizeTerminalStateEntry(entry);
136
+ return normalized.replayEvent.events[0].data;
137
+ }
138
+ // Annotate the CommonJS export names for ESM import in node:
139
+ 0 && (module.exports = {
140
+ MAX_REPLAY_EVENT_BYTES,
141
+ MAX_SERIALIZED_TERMINAL_STATE_BYTES,
142
+ TERMINAL_STATE_VERSION,
143
+ deserializeTerminalState,
144
+ normalizeTerminalStateEntry,
145
+ serializeTerminalState,
146
+ terminalReplayText
147
+ });
@@ -1,83 +1,86 @@
1
- const SHELL_COMMANDS = new Set(['bash', 'zsh', 'sh', 'fish']);
2
- const DIRECT_PROCESS_AGENTS = new Set([
3
- 'opencode',
4
- 'qoder',
5
- 'qodercli',
6
- 'qwen',
7
- 'aider',
8
- 'github-copilot-cli',
9
- 'amazon-q',
1
+ // Generated by scripts/build-backend-runtime.ts. Do not edit.
2
+ "use strict";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var terminal_status_exports = {};
21
+ __export(terminal_status_exports, {
22
+ deriveTerminalStatus: () => deriveTerminalStatus,
23
+ terminalInputReady: () => terminalInputReady,
24
+ terminalTextLooksIdleShellPrompt: () => terminalTextLooksIdleShellPrompt
25
+ });
26
+ module.exports = __toCommonJS(terminal_status_exports);
27
+ const SHELL_COMMANDS = /* @__PURE__ */ new Set(["bash", "zsh", "sh", "fish"]);
28
+ const DIRECT_PROCESS_AGENTS = /* @__PURE__ */ new Set([
29
+ "opencode",
30
+ "qoder",
31
+ "qodercli",
32
+ "qwen",
33
+ "aider",
34
+ "github-copilot-cli",
35
+ "amazon-q"
10
36
  ]);
11
-
12
37
  function executableName(command) {
13
- const executable = String(command || '')
14
- .trim()
15
- .split(/\s+/)
16
- .find(token => token && token !== 'env' && !/^[A-Za-z_][A-Za-z0-9_]*=/.test(token));
17
- return (executable || '').split(/[\\/]/).pop() || '';
38
+ const executable = String(command || "").trim().split(/\s+/).find((token) => token && token !== "env" && !/^[A-Za-z_][A-Za-z0-9_]*=/.test(token));
39
+ return (executable || "").split(/[\\/]/).pop() || "";
18
40
  }
19
-
20
41
  function normalizedText(value) {
21
- return stripTerminalControlSequences(value).replace(/\s+/g, ' ').trim().toLowerCase();
42
+ return stripTerminalControlSequences(value).replace(/\s+/g, " ").trim().toLowerCase();
22
43
  }
23
-
24
44
  function terminalLines(value) {
25
- return stripTerminalControlSequences(value)
26
- .replace(/\r/g, '')
27
- .split('\n')
28
- .map((line) => line.replace(/\s+/g, ' ').trim().toLowerCase())
29
- .filter(Boolean);
45
+ return stripTerminalControlSequences(value).replace(/\r/g, "").split("\n").map((line) => line.replace(/\s+/g, " ").trim().toLowerCase()).filter(Boolean);
30
46
  }
31
-
32
47
  function stripTerminalControlSequences(value) {
33
- return String(value || '')
34
- .replace(/\x1b\][^\x07]*(?:\x07|\x1b\\)/g, '')
35
- .replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, '');
48
+ return String(value || "").replace(/\x1b\][^\x07]*(?:\x07|\x1b\\)/g, "").replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "");
36
49
  }
37
-
38
50
  function terminalStatusCommand(value) {
39
- return stripTerminalControlSequences(value)
40
- .replace(/[\x00-\x1f\x7f]/g, ' ')
41
- .replace(/\s+/g, ' ')
42
- .trim();
51
+ return stripTerminalControlSequences(value).replace(/[\x00-\x1f\x7f]/g, " ").replace(/\s+/g, " ").trim();
43
52
  }
44
-
45
53
  function finiteNumber(value) {
46
- return typeof value === 'number' && Number.isFinite(value) ? value : null;
54
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
47
55
  }
48
-
49
56
  function lastMatchIndex(text, pattern) {
50
57
  const matches = Array.from(text.matchAll(pattern));
51
- const lastMatch = matches.length > 0 ? matches[matches.length - 1] : undefined;
52
- return lastMatch && typeof lastMatch.index === 'number' ? lastMatch.index : -1;
58
+ const lastMatch = matches.length > 0 ? matches[matches.length - 1] : void 0;
59
+ return lastMatch && typeof lastMatch.index === "number" ? lastMatch.index : -1;
53
60
  }
54
-
55
61
  function lastIndexOfAny(text, needles) {
56
62
  return needles.reduce((last, needle) => Math.max(last, text.lastIndexOf(needle)), -1);
57
63
  }
58
-
59
64
  function lastLineIndexMatching(text, predicate) {
60
65
  let offset = 0;
61
66
  let lastIndex = -1;
62
- for (const line of text.split('\n')) {
67
+ for (const line of text.split("\n")) {
63
68
  if (predicate(line)) lastIndex = offset;
64
69
  offset += line.length + 1;
65
70
  }
66
71
  return lastIndex;
67
72
  }
68
-
69
73
  function lastCodexIdleFooterIndex(text) {
70
74
  return lastMatchIndex(text, /(?:^|\n)\s*(?:gpt|codex)[^\n]*(?:·|•)\s*(?:~|\/)[^\n]*$/gim);
71
75
  }
72
-
73
76
  function codexActiveIndex(text) {
74
77
  const activeTextIndex = lastIndexOfAny(text, [
75
- 'pursuing goal',
76
- 'reconnecting',
77
- '/stop to close',
78
- 'background terminal running',
79
- 'messages to be submitted after next tool call',
80
- 'stream disconnected before completion',
78
+ "pursuing goal",
79
+ "reconnecting",
80
+ "/stop to close",
81
+ "background terminal running",
82
+ "messages to be submitted after next tool call",
83
+ "stream disconnected before completion"
81
84
  ]);
82
85
  const workingIndex = lastMatchIndex(
83
86
  text,
@@ -85,182 +88,142 @@ function codexActiveIndex(text) {
85
88
  );
86
89
  return Math.max(activeTextIndex, workingIndex);
87
90
  }
88
-
89
91
  function codexBlockedIndex(text) {
90
92
  return lastIndexOfAny(text, [
91
- 'goal blocked',
92
- 'input exceeds the context window',
93
- 'please adjust your input and try again',
93
+ "goal blocked",
94
+ "input exceeds the context window",
95
+ "please adjust your input and try again"
94
96
  ]);
95
97
  }
96
-
97
98
  function lineShowsInterrupt(line) {
98
99
  return /\b(?:press\s+)?(?:esc|escape|ctrl\+c|ctrl-c)\s+to\s+interrupt\b/i.test(line);
99
100
  }
100
-
101
101
  function lineShowsClaudeStatusRow(line, excludeBareWorking = false) {
102
102
  const normalized = line.trim().toLowerCase();
103
103
  const match = normalized.match(
104
104
  /^([*✳✱✲✶✻✽✢])?\s*([\p{L}\p{M}][\p{L}\p{M}'’-]*)(?:\.{3}|…)?\s*\(([^)]*)\)\s*$/u
105
105
  );
106
106
  if (!match || !lineShowsInterrupt(match[3])) return false;
107
- if (excludeBareWorking && !match[1] && match[2] === 'working') return false;
108
-
107
+ if (excludeBareWorking && !match[1] && match[2] === "working") return false;
109
108
  const interruptOnly = /^(?:press\s+)?(?:esc|escape|ctrl\+c|ctrl-c)\s+to\s+interrupt$/i.test(match[3].trim());
110
109
  const hasElapsedTime = /\b\d+(?:\.\d+)?\s*(?:ms|s|m|h)\b/i.test(match[3]);
111
110
  return interruptOnly || hasElapsedTime;
112
111
  }
113
-
114
112
  function lineShowsClaudeActivity(line) {
115
113
  const normalized = line.trim().toLowerCase();
116
114
  if (/^(?:press\s+)?(?:esc|escape|ctrl\+c|ctrl-c)\s+to\s+interrupt$/.test(normalized)) return true;
117
115
  return lineShowsClaudeStatusRow(normalized);
118
116
  }
119
-
120
117
  function lineShowsClaudeKindEvidence(line) {
121
118
  const normalized = line.trim().toLowerCase();
122
119
  if (/^(?:press\s+)?(?:esc|escape|ctrl\+c|ctrl-c)\s+to\s+interrupt$/.test(normalized)) return true;
123
120
  return lineShowsClaudeStatusRow(normalized, true);
124
121
  }
125
-
126
122
  function terminalLineLooksLikeIdleShellPrompt(line) {
127
123
  return /^(?:\s*[│┃]\s*(?:[^$%#\n]+?\s+)?[$%#]|\s*(?:\([^)]+\)\s+)?(?:[\w.-]+@[\w.-]+:)?[~/][\w./~:+-]*\s*[$%#]|\s*[$%#])\s*$/u.test(line);
128
124
  }
129
-
130
125
  function latestTerminalKindFromText(title, previewText) {
131
- const text = stripTerminalControlSequences(previewText).replace(/\r/g, '').toLowerCase();
126
+ const text = stripTerminalControlSequences(previewText).replace(/\r/g, "").toLowerCase();
132
127
  const candidates = [];
133
128
  const codexIndex = Math.max(lastCodexIdleFooterIndex(text), codexActiveIndex(text));
134
- if (codexIndex >= 0) candidates.push({ kind: 'codex', index: codexIndex });
135
-
129
+ if (codexIndex >= 0) candidates.push({ kind: "codex", index: codexIndex });
136
130
  const claudeIndex = lastLineIndexMatching(text, lineShowsClaudeKindEvidence);
137
- if (claudeIndex >= 0) candidates.push({ kind: 'claude', index: claudeIndex });
138
-
131
+ if (claudeIndex >= 0) candidates.push({ kind: "claude", index: claudeIndex });
139
132
  const shellIndex = lastLineIndexMatching(text, terminalLineLooksLikeIdleShellPrompt);
140
- if (shellIndex >= 0) candidates.push({ kind: 'shell', index: shellIndex });
141
-
133
+ if (shellIndex >= 0) candidates.push({ kind: "shell", index: shellIndex });
142
134
  const latest = candidates.sort((left, right) => right.index - left.index)[0];
143
135
  if (latest) return latest.kind;
144
-
145
136
  const normalizedTitle = normalizedText(title);
146
- if (/\bclaude\s+code\b/.test(normalizedTitle)) return 'claude';
147
- if (/\bcodex\b/.test(normalizedTitle)) return 'codex';
137
+ if (/\bclaude\s+code\b/.test(normalizedTitle)) return "claude";
138
+ if (/\bcodex\b/.test(normalizedTitle)) return "codex";
148
139
  return null;
149
140
  }
150
-
151
141
  function inferKindFromText(title, previewText, command) {
152
142
  const commandName = executableName(command).toLowerCase();
153
- if (DIRECT_PROCESS_AGENTS.has(commandName)) return 'process';
154
- if (commandName && !SHELL_COMMANDS.has(commandName) && commandName !== 'codex' && commandName !== 'claude') return 'process';
143
+ if (DIRECT_PROCESS_AGENTS.has(commandName)) return "process";
144
+ if (commandName && !SHELL_COMMANDS.has(commandName) && commandName !== "codex" && commandName !== "claude") return "process";
155
145
  const terminalKind = latestTerminalKindFromText(title, previewText);
156
146
  if (terminalKind) return terminalKind;
157
- if (commandName === 'claude') return 'claude';
158
- if (commandName === 'codex') return 'codex';
159
- if (SHELL_COMMANDS.has(commandName)) return 'shell';
160
- return commandName ? 'process' : 'unknown';
147
+ if (commandName === "claude") return "claude";
148
+ if (commandName === "codex") return "codex";
149
+ if (SHELL_COMMANDS.has(commandName)) return "shell";
150
+ return commandName ? "process" : "unknown";
161
151
  }
162
-
163
152
  function terminalTextLooksIdleShellPrompt(previewText) {
164
- const lines = stripTerminalControlSequences(previewText)
165
- .replace(/\r/g, '')
166
- .split('\n')
167
- .map(line => line.trimEnd())
168
- .filter(Boolean);
153
+ const lines = stripTerminalControlSequences(previewText).replace(/\r/g, "").split("\n").map((line) => line.trimEnd()).filter(Boolean);
169
154
  if (lines.length === 0) return false;
170
-
171
155
  return terminalLineLooksLikeIdleShellPrompt(lines[lines.length - 1]);
172
156
  }
173
-
174
157
  function terminalTitleShowsCodexActivity(title) {
175
- return /^[\s]*[\u2800-\u28ff]/u.test(String(title || ''));
158
+ return /^[\s]*[\u2800-\u28ff]/u.test(String(title || ""));
176
159
  }
177
-
178
160
  function inferCodexActivity(title, previewText) {
179
- if (terminalTitleShowsCodexActivity(title)) return 'busy';
180
-
181
- const text = stripTerminalControlSequences(previewText).replace(/\r/g, '').toLowerCase();
182
- if (!text.trim()) return 'unknown';
183
-
161
+ if (terminalTitleShowsCodexActivity(title)) return "busy";
162
+ const text = stripTerminalControlSequences(previewText).replace(/\r/g, "").toLowerCase();
163
+ if (!text.trim()) return "unknown";
184
164
  const idleIndex = lastCodexIdleFooterIndex(text);
185
165
  const blockedIndex = codexBlockedIndex(text);
186
166
  const activeIndex = codexActiveIndex(text);
187
167
  const inactiveIndex = Math.max(idleIndex, blockedIndex);
188
- if (activeIndex >= 0) return inactiveIndex > activeIndex ? 'idle' : 'busy';
189
- if (inactiveIndex >= 0) return 'idle';
190
- return 'unknown';
168
+ if (activeIndex >= 0) return inactiveIndex > activeIndex ? "idle" : "busy";
169
+ if (inactiveIndex >= 0) return "idle";
170
+ return "unknown";
191
171
  }
192
-
193
172
  function inferClaudeActivity(previewText) {
194
173
  const lines = terminalLines(previewText);
195
- if (lines.length === 0) return 'unknown';
196
- return lines.some(lineShowsClaudeActivity) ? 'busy' : 'idle';
174
+ if (lines.length === 0) return "unknown";
175
+ return lines.some(lineShowsClaudeActivity) ? "busy" : "idle";
197
176
  }
198
-
199
177
  function inferOpenCodeActivity(previewText) {
200
178
  const lines = terminalLines(previewText);
201
- if (lines.length === 0) return 'unknown';
179
+ if (lines.length === 0) return "unknown";
202
180
  const tail = lines.slice(-8);
203
181
  let footerIndex = -1;
204
182
  for (let index = 0; index < tail.length; index += 1) {
205
183
  if (/(?:•|·)\s*opencode\s+\d+(?:\.\d+){1,2}\b/.test(tail[index])) footerIndex = index;
206
184
  }
207
- if (footerIndex < 0) return 'idle';
208
-
209
- const activeProgress = (line) => (
210
- /^(?:[│┃]\s*)?[■⬝⭝]{3,}/u.test(line)
211
- && /\b(?:esc|escape|ctrl\+c|ctrl-c)(?:\s+(?:again\s+)?to)?\s+interrupt\b/.test(line)
212
- );
213
- const activeFooter = activeProgress(tail[footerIndex])
214
- || (footerIndex > 0 && activeProgress(tail[footerIndex - 1]));
215
- return activeFooter ? 'busy' : 'idle';
185
+ if (footerIndex < 0) return "idle";
186
+ const activeProgress = (line) => /^(?:[│┃]\s*)?[■⬝⭝]{3,}/u.test(line) && /\b(?:esc|escape|ctrl\+c|ctrl-c)(?:\s+(?:again\s+)?to)?\s+interrupt\b/.test(line);
187
+ const activeFooter = activeProgress(tail[footerIndex]) || footerIndex > 0 && activeProgress(tail[footerIndex - 1]);
188
+ return activeFooter ? "busy" : "idle";
216
189
  }
217
-
218
190
  function inferQoderLikeActivity(title, previewText, commandName) {
219
191
  const normalizedTitle = stripTerminalControlSequences(title).trim();
220
- if (commandName === 'qoder' || commandName === 'qodercli') {
221
- if (/^✋/u.test(normalizedTitle)) return 'idle';
192
+ if (commandName === "qoder" || commandName === "qodercli") {
193
+ if (/^✋/u.test(normalizedTitle)) return "idle";
222
194
  }
223
-
224
195
  const lines = terminalLines(previewText);
225
196
  const tail = lines.slice(-8);
226
197
  const active = tail.some((line, index) => {
227
198
  if (!/^[\u2800-\u28ff]/u.test(line)) return false;
228
- const loadingWindow = tail.slice(index, index + 3).join(' ');
229
- return /\besc\b/.test(loadingWindow)
230
- && /\b\d+(?:\.\d+)?\s*(?:ms|s|m|h)\b/.test(loadingWindow);
199
+ const loadingWindow = tail.slice(index, index + 3).join(" ");
200
+ return /\besc\b/.test(loadingWindow) && /\b\d+(?:\.\d+)?\s*(?:ms|s|m|h)\b/.test(loadingWindow);
231
201
  });
232
- if (active) return 'busy';
233
-
234
- if (commandName === 'qoder' || commandName === 'qodercli') {
235
- if (/^[✦⏲]/u.test(normalizedTitle)) return 'busy';
236
- if (/^◇/u.test(normalizedTitle)) return 'idle';
202
+ if (active) return "busy";
203
+ if (commandName === "qoder" || commandName === "qodercli") {
204
+ if (/^[✦⏲]/u.test(normalizedTitle)) return "busy";
205
+ if (/^◇/u.test(normalizedTitle)) return "idle";
237
206
  }
238
- return lines.length > 0 || normalizedTitle ? 'idle' : 'unknown';
207
+ return lines.length > 0 || normalizedTitle ? "idle" : "unknown";
239
208
  }
240
-
241
209
  function inferGenericActivity(previewText, terminalBusy) {
242
- if (terminalBusy === true) return 'busy';
243
- if (terminalBusy === false) return 'idle';
244
-
245
- if (terminalTextLooksIdleShellPrompt(previewText)) return 'idle';
246
- return 'unknown';
210
+ if (terminalBusy === true) return "busy";
211
+ if (terminalBusy === false) return "idle";
212
+ if (terminalTextLooksIdleShellPrompt(previewText)) return "idle";
213
+ return "unknown";
247
214
  }
248
-
249
215
  function nestedProcessCommandFromTitle(title) {
250
216
  const normalizedTitle = stripTerminalControlSequences(title).trim();
251
- if (/^oc\s*\|/i.test(normalizedTitle)) return 'opencode';
252
- if (/^[◇✋✦⏲]/u.test(normalizedTitle)) return 'qodercli';
253
- if (/^qwen\b/i.test(normalizedTitle)) return 'qwen';
254
- return '';
217
+ if (/^oc\s*\|/i.test(normalizedTitle)) return "opencode";
218
+ if (/^[◇✋✦⏲]/u.test(normalizedTitle)) return "qodercli";
219
+ if (/^qwen\b/i.test(normalizedTitle)) return "qwen";
220
+ return "";
255
221
  }
256
-
257
222
  function deriveTerminalStatus(options = {}) {
258
- const title = typeof options.title === 'string' ? options.title : '';
259
- const previewText = typeof options.previewText === 'string' ? options.previewText : '';
260
- const terminalBusy = typeof options.terminalBusy === 'boolean' ? options.terminalBusy : null;
261
- const hasShellStatus = options.shellLastEvent === 'start'
262
- || options.shellLastEvent === 'finish'
263
- || typeof options.shellLastExitCode === 'number';
223
+ const title = typeof options.title === "string" ? options.title : "";
224
+ const previewText = typeof options.previewText === "string" ? options.previewText : "";
225
+ const terminalBusy = typeof options.terminalBusy === "boolean" ? options.terminalBusy : null;
226
+ const hasShellStatus = options.shellLastEvent === "start" || options.shellLastEvent === "finish" || typeof options.shellLastExitCode === "number";
264
227
  const commandName = executableName(options.command).toLowerCase();
265
228
  const runningCommandName = executableName(options.shellCommand).toLowerCase();
266
229
  const launchedFromShell = SHELL_COMMANDS.has(commandName);
@@ -268,59 +231,48 @@ function deriveTerminalStatus(options = {}) {
268
231
  let kind;
269
232
  if (launchedFromShell && runningCommandName) {
270
233
  activityCommandName = runningCommandName;
271
- if (runningCommandName === 'codex') kind = 'codex';
272
- else if (runningCommandName === 'claude') kind = 'claude';
273
- else if (DIRECT_PROCESS_AGENTS.has(runningCommandName)) kind = 'process';
274
- else kind = 'shell';
234
+ if (runningCommandName === "codex") kind = "codex";
235
+ else if (runningCommandName === "claude") kind = "claude";
236
+ else if (DIRECT_PROCESS_AGENTS.has(runningCommandName)) kind = "process";
237
+ else kind = "shell";
275
238
  } else {
276
- const nestedProcessCommand = launchedFromShell && !terminalTextLooksIdleShellPrompt(previewText)
277
- ? nestedProcessCommandFromTitle(title)
278
- : '';
239
+ const nestedProcessCommand = launchedFromShell && !terminalTextLooksIdleShellPrompt(previewText) ? nestedProcessCommandFromTitle(title) : "";
279
240
  if (nestedProcessCommand) {
280
241
  activityCommandName = nestedProcessCommand;
281
- kind = 'process';
242
+ kind = "process";
282
243
  } else {
283
244
  kind = inferKindFromText(title, previewText, options.command);
284
245
  }
285
246
  }
286
- const shellActivity = kind === 'shell';
287
- const hasPromptIdleFallback = options.status !== 'exited'
288
- && shellActivity
289
- && terminalBusy === true
290
- && terminalTextLooksIdleShellPrompt(previewText);
291
- let activity = 'unknown';
292
- if (options.status === 'exited') {
293
- activity = 'exited';
247
+ const shellActivity = kind === "shell";
248
+ const hasPromptIdleFallback = options.status !== "exited" && shellActivity && terminalBusy === true && terminalTextLooksIdleShellPrompt(previewText);
249
+ let activity = "unknown";
250
+ if (options.status === "exited") {
251
+ activity = "exited";
294
252
  } else if (hasPromptIdleFallback) {
295
- activity = 'idle';
253
+ activity = "idle";
254
+ } else if (kind === "codex") {
255
+ const inferredCodexActivity = inferCodexActivity(title, previewText);
256
+ activity = inferredCodexActivity === "unknown" && terminalBusy !== null ? terminalBusy ? "busy" : "idle" : inferredCodexActivity;
296
257
  } else if (!SHELL_COMMANDS.has(commandName) && terminalBusy !== null) {
297
- activity = terminalBusy ? 'busy' : 'idle';
298
- } else if (kind === 'codex') {
299
- activity = inferCodexActivity(title, previewText);
300
- } else if (kind === 'claude') {
258
+ activity = terminalBusy ? "busy" : "idle";
259
+ } else if (kind === "claude") {
301
260
  activity = inferClaudeActivity(previewText);
302
- } else if (activityCommandName === 'opencode') {
261
+ } else if (activityCommandName === "opencode") {
303
262
  activity = inferOpenCodeActivity(previewText);
304
- } else if (activityCommandName === 'qoder'
305
- || activityCommandName === 'qodercli'
306
- || activityCommandName === 'qwen') {
263
+ } else if (activityCommandName === "qoder" || activityCommandName === "qodercli" || activityCommandName === "qwen") {
307
264
  activity = inferQoderLikeActivity(title, previewText, activityCommandName);
308
265
  } else {
309
266
  activity = inferGenericActivity(previewText, terminalBusy);
310
267
  }
311
-
312
268
  const status = {
313
269
  kind,
314
270
  activity,
315
- busy: activity === 'busy',
316
- cwd: typeof options.cwd === 'string' ? options.cwd : '',
271
+ busy: activity === "busy",
272
+ cwd: typeof options.cwd === "string" ? options.cwd : "",
317
273
  title,
318
- lastExitCode: typeof options.shellLastExitCode === 'number' ? options.shellLastExitCode : null,
319
- source: hasPromptIdleFallback
320
- ? 'shell-prompt-fallback'
321
- : (shellActivity && hasShellStatus
322
- ? 'shell-status-marker'
323
- : (shellActivity && terminalBusy !== null ? 'shell-busy-marker' : 'terminal-text')),
274
+ lastExitCode: typeof options.shellLastExitCode === "number" ? options.shellLastExitCode : null,
275
+ source: hasPromptIdleFallback ? "shell-prompt-fallback" : shellActivity && hasShellStatus ? "shell-status-marker" : shellActivity && terminalBusy !== null ? "shell-busy-marker" : "terminal-text"
324
276
  };
325
277
  const runningCommand = terminalStatusCommand(options.shellCommand);
326
278
  const lastCommand = terminalStatusCommand(options.shellLastCommand);
@@ -348,28 +300,26 @@ function deriveTerminalStatus(options = {}) {
348
300
  }
349
301
  return status;
350
302
  }
351
-
352
303
  function terminalInputReady(options = {}) {
353
304
  const status = deriveTerminalStatus(options);
354
- if (status.activity !== 'idle') return false;
355
-
356
- const previewText = typeof options.previewText === 'string' ? options.previewText : '';
357
- if (status.kind === 'codex') {
358
- const text = stripTerminalControlSequences(previewText).replace(/\r/g, '').toLowerCase();
305
+ if (status.activity !== "idle") return false;
306
+ const previewText = typeof options.previewText === "string" ? options.previewText : "";
307
+ if (status.kind === "codex") {
308
+ const text = stripTerminalControlSequences(previewText).replace(/\r/g, "").toLowerCase();
359
309
  return lastCodexIdleFooterIndex(text) >= 0 || codexBlockedIndex(text) >= 0;
360
310
  }
361
- if (status.kind === 'claude') {
362
- const text = stripTerminalControlSequences(previewText).replace(/\r/g, '');
311
+ if (status.kind === "claude") {
312
+ const text = stripTerminalControlSequences(previewText).replace(/\r/g, "");
363
313
  return /(?:^|\n)\s*❯(?:\s|$)/u.test(text);
364
314
  }
365
- if (status.kind === 'shell') {
315
+ if (status.kind === "shell") {
366
316
  return options.terminalBusy === false || terminalTextLooksIdleShellPrompt(previewText);
367
317
  }
368
318
  return Boolean(stripTerminalControlSequences(previewText).trim());
369
319
  }
370
-
371
- module.exports = {
320
+ // Annotate the CommonJS export names for ESM import in node:
321
+ 0 && (module.exports = {
372
322
  deriveTerminalStatus,
373
323
  terminalInputReady,
374
- terminalTextLooksIdleShellPrompt,
375
- };
324
+ terminalTextLooksIdleShellPrompt
325
+ });