botmux 2.107.0 → 2.108.0

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 (515) hide show
  1. package/README.en.md +17 -14
  2. package/README.md +19 -14
  3. package/dist/adapters/backend/sandbox.d.ts +3 -1
  4. package/dist/adapters/backend/sandbox.d.ts.map +1 -1
  5. package/dist/adapters/backend/sandbox.js +19 -3
  6. package/dist/adapters/backend/sandbox.js.map +1 -1
  7. package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
  8. package/dist/adapters/backend/tmux-backend.js +16 -1
  9. package/dist/adapters/backend/tmux-backend.js.map +1 -1
  10. package/dist/adapters/backend/tmux-pipe-backend.d.ts +24 -15
  11. package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
  12. package/dist/adapters/backend/tmux-pipe-backend.js +75 -43
  13. package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
  14. package/dist/adapters/cli/genius.d.ts.map +1 -1
  15. package/dist/adapters/cli/genius.js +9 -15
  16. package/dist/adapters/cli/genius.js.map +1 -1
  17. package/dist/adapters/cli/grok.d.ts +73 -0
  18. package/dist/adapters/cli/grok.d.ts.map +1 -0
  19. package/dist/adapters/cli/grok.js +298 -0
  20. package/dist/adapters/cli/grok.js.map +1 -0
  21. package/dist/adapters/cli/oh-my-pi.d.ts.map +1 -1
  22. package/dist/adapters/cli/oh-my-pi.js +133 -12
  23. package/dist/adapters/cli/oh-my-pi.js.map +1 -1
  24. package/dist/adapters/cli/registry.d.ts +2 -1
  25. package/dist/adapters/cli/registry.d.ts.map +1 -1
  26. package/dist/adapters/cli/registry.js +3 -1
  27. package/dist/adapters/cli/registry.js.map +1 -1
  28. package/dist/adapters/cli/shared-hints.d.ts +8 -4
  29. package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
  30. package/dist/adapters/cli/shared-hints.js +8 -4
  31. package/dist/adapters/cli/shared-hints.js.map +1 -1
  32. package/dist/adapters/cli/types.d.ts +18 -16
  33. package/dist/adapters/cli/types.d.ts.map +1 -1
  34. package/dist/adapters/hook-installer.d.ts +5 -4
  35. package/dist/adapters/hook-installer.d.ts.map +1 -1
  36. package/dist/adapters/hook-installer.js +42 -0
  37. package/dist/adapters/hook-installer.js.map +1 -1
  38. package/dist/cli/send-dispatch.d.ts +21 -0
  39. package/dist/cli/send-dispatch.d.ts.map +1 -1
  40. package/dist/cli/send-dispatch.js +159 -0
  41. package/dist/cli/send-dispatch.js.map +1 -1
  42. package/dist/cli/session-list-liveness.d.ts +22 -0
  43. package/dist/cli/session-list-liveness.d.ts.map +1 -0
  44. package/dist/cli/session-list-liveness.js +22 -0
  45. package/dist/cli/session-list-liveness.js.map +1 -0
  46. package/dist/cli.d.ts.map +1 -1
  47. package/dist/cli.js +182 -33
  48. package/dist/cli.js.map +1 -1
  49. package/dist/core/ask-types.d.ts +4 -0
  50. package/dist/core/ask-types.d.ts.map +1 -1
  51. package/dist/core/ask-types.js +10 -0
  52. package/dist/core/ask-types.js.map +1 -1
  53. package/dist/core/cost-calculator.d.ts.map +1 -1
  54. package/dist/core/cost-calculator.js +35 -13
  55. package/dist/core/cost-calculator.js.map +1 -1
  56. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  57. package/dist/core/dashboard-ipc-server.js +89 -16
  58. package/dist/core/dashboard-ipc-server.js.map +1 -1
  59. package/dist/core/dashboard-rows.d.ts.map +1 -1
  60. package/dist/core/dashboard-rows.js +6 -2
  61. package/dist/core/dashboard-rows.js.map +1 -1
  62. package/dist/core/dashboard-url.d.ts +6 -5
  63. package/dist/core/dashboard-url.d.ts.map +1 -1
  64. package/dist/core/dashboard-url.js +11 -8
  65. package/dist/core/dashboard-url.js.map +1 -1
  66. package/dist/core/maintenance.d.ts +11 -8
  67. package/dist/core/maintenance.d.ts.map +1 -1
  68. package/dist/core/maintenance.js +45 -20
  69. package/dist/core/maintenance.js.map +1 -1
  70. package/dist/core/per-bot-env.d.ts.map +1 -1
  71. package/dist/core/per-bot-env.js +4 -0
  72. package/dist/core/per-bot-env.js.map +1 -1
  73. package/dist/core/session-discovery.d.ts.map +1 -1
  74. package/dist/core/session-discovery.js +4 -0
  75. package/dist/core/session-discovery.js.map +1 -1
  76. package/dist/core/skills/cli-admin-command.d.ts.map +1 -1
  77. package/dist/core/skills/cli-admin-command.js +8 -2
  78. package/dist/core/skills/cli-admin-command.js.map +1 -1
  79. package/dist/core/skills/im-command.d.ts.map +1 -1
  80. package/dist/core/skills/im-command.js +3 -1
  81. package/dist/core/skills/im-command.js.map +1 -1
  82. package/dist/core/skills/sources.d.ts +33 -1
  83. package/dist/core/skills/sources.d.ts.map +1 -1
  84. package/dist/core/skills/sources.js +97 -0
  85. package/dist/core/skills/sources.js.map +1 -1
  86. package/dist/core/skills/types.d.ts +8 -0
  87. package/dist/core/skills/types.d.ts.map +1 -1
  88. package/dist/core/terminal-url.d.ts.map +1 -1
  89. package/dist/core/terminal-url.js +12 -2
  90. package/dist/core/terminal-url.js.map +1 -1
  91. package/dist/core/terminal-write-auth.d.ts +34 -0
  92. package/dist/core/terminal-write-auth.d.ts.map +1 -0
  93. package/dist/core/terminal-write-auth.js +76 -0
  94. package/dist/core/terminal-write-auth.js.map +1 -0
  95. package/dist/core/tmux-recovery.d.ts +11 -0
  96. package/dist/core/tmux-recovery.d.ts.map +1 -0
  97. package/dist/core/tmux-recovery.js +19 -0
  98. package/dist/core/tmux-recovery.js.map +1 -0
  99. package/dist/core/types.d.ts +10 -4
  100. package/dist/core/types.d.ts.map +1 -1
  101. package/dist/core/types.js.map +1 -1
  102. package/dist/core/update-check.d.ts +2 -2
  103. package/dist/core/update-check.js +2 -2
  104. package/dist/core/worker-pool.d.ts +3 -0
  105. package/dist/core/worker-pool.d.ts.map +1 -1
  106. package/dist/core/worker-pool.js +70 -3
  107. package/dist/core/worker-pool.js.map +1 -1
  108. package/dist/daemon.d.ts.map +1 -1
  109. package/dist/daemon.js +15 -8
  110. package/dist/daemon.js.map +1 -1
  111. package/dist/dashboard/auth.d.ts +1 -1
  112. package/dist/dashboard/auth.d.ts.map +1 -1
  113. package/dist/dashboard/auth.js +7 -2
  114. package/dist/dashboard/auth.js.map +1 -1
  115. package/dist/dashboard/bot-payload.d.ts +3 -0
  116. package/dist/dashboard/bot-payload.d.ts.map +1 -1
  117. package/dist/dashboard/bot-payload.js +3 -0
  118. package/dist/dashboard/bot-payload.js.map +1 -1
  119. package/dist/dashboard/connector-api.d.ts.map +1 -1
  120. package/dist/dashboard/connector-api.js +39 -13
  121. package/dist/dashboard/connector-api.js.map +1 -1
  122. package/dist/dashboard/history-senders.d.ts +37 -0
  123. package/dist/dashboard/history-senders.d.ts.map +1 -0
  124. package/dist/dashboard/history-senders.js +60 -0
  125. package/dist/dashboard/history-senders.js.map +1 -0
  126. package/dist/dashboard/roles-batch.d.ts +31 -0
  127. package/dist/dashboard/roles-batch.d.ts.map +1 -0
  128. package/dist/dashboard/roles-batch.js +87 -0
  129. package/dist/dashboard/roles-batch.js.map +1 -0
  130. package/dist/dashboard/settings-card-model.d.ts +4 -2
  131. package/dist/dashboard/settings-card-model.d.ts.map +1 -1
  132. package/dist/dashboard/settings-card-model.js +13 -5
  133. package/dist/dashboard/settings-card-model.js.map +1 -1
  134. package/dist/dashboard/settings-write-applier.d.ts +4 -1
  135. package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
  136. package/dist/dashboard/settings-write-applier.js +6 -1
  137. package/dist/dashboard/settings-write-applier.js.map +1 -1
  138. package/dist/dashboard/skill-install-request.d.ts +4 -0
  139. package/dist/dashboard/skill-install-request.d.ts.map +1 -1
  140. package/dist/dashboard/skill-install-request.js +11 -1
  141. package/dist/dashboard/skill-install-request.js.map +1 -1
  142. package/dist/dashboard/trigger-api.d.ts +9 -1
  143. package/dist/dashboard/trigger-api.d.ts.map +1 -1
  144. package/dist/dashboard/trigger-api.js +48 -10
  145. package/dist/dashboard/trigger-api.js.map +1 -1
  146. package/dist/dashboard/web/app.d.ts.map +1 -1
  147. package/dist/dashboard/web/app.js +286 -271
  148. package/dist/dashboard/web/app.js.map +1 -1
  149. package/dist/dashboard/web/bot-defaults-page.d.ts +26 -0
  150. package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
  151. package/dist/dashboard/web/bot-defaults-page.js +1408 -12
  152. package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
  153. package/dist/dashboard/web/bot-defaults.d.ts +91 -4
  154. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  155. package/dist/dashboard/web/bot-defaults.js +43 -2141
  156. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  157. package/dist/dashboard/web/bot-onboarding.d.ts +6 -1
  158. package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
  159. package/dist/dashboard/web/bot-onboarding.js +261 -306
  160. package/dist/dashboard/web/bot-onboarding.js.map +1 -1
  161. package/dist/dashboard/web/connectors-page.d.ts +4 -0
  162. package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
  163. package/dist/dashboard/web/connectors-page.js +228 -48
  164. package/dist/dashboard/web/connectors-page.js.map +1 -1
  165. package/dist/dashboard/web/dashboard-api.d.ts +9 -0
  166. package/dist/dashboard/web/dashboard-api.d.ts.map +1 -0
  167. package/dist/dashboard/web/dashboard-api.js +18 -0
  168. package/dist/dashboard/web/dashboard-api.js.map +1 -0
  169. package/dist/dashboard/web/dashboard-components.d.ts +92 -0
  170. package/dist/dashboard/web/dashboard-components.d.ts.map +1 -0
  171. package/dist/dashboard/web/dashboard-components.js +250 -0
  172. package/dist/dashboard/web/dashboard-components.js.map +1 -0
  173. package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -1
  174. package/dist/dashboard/web/dashboard-routes.js +30 -183
  175. package/dist/dashboard/web/dashboard-routes.js.map +1 -1
  176. package/dist/dashboard/web/floating-scrollbars.d.ts +2 -0
  177. package/dist/dashboard/web/floating-scrollbars.d.ts.map +1 -0
  178. package/dist/dashboard/web/floating-scrollbars.js +264 -0
  179. package/dist/dashboard/web/floating-scrollbars.js.map +1 -0
  180. package/dist/dashboard/web/groups-api.d.ts +36 -0
  181. package/dist/dashboard/web/groups-api.d.ts.map +1 -0
  182. package/dist/dashboard/web/groups-api.js +44 -0
  183. package/dist/dashboard/web/groups-api.js.map +1 -0
  184. package/dist/dashboard/web/groups-page.d.ts.map +1 -1
  185. package/dist/dashboard/web/groups-page.js +746 -15
  186. package/dist/dashboard/web/groups-page.js.map +1 -1
  187. package/dist/dashboard/web/groups.d.ts +51 -18
  188. package/dist/dashboard/web/groups.d.ts.map +1 -1
  189. package/dist/dashboard/web/groups.js +145 -1096
  190. package/dist/dashboard/web/groups.js.map +1 -1
  191. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  192. package/dist/dashboard/web/i18n.js +545 -255
  193. package/dist/dashboard/web/i18n.js.map +1 -1
  194. package/dist/dashboard/web/insights-page.d.ts.map +1 -1
  195. package/dist/dashboard/web/insights-page.js +1047 -14
  196. package/dist/dashboard/web/insights-page.js.map +1 -1
  197. package/dist/dashboard/web/insights.d.ts +177 -7
  198. package/dist/dashboard/web/insights.d.ts.map +1 -1
  199. package/dist/dashboard/web/insights.js +187 -1926
  200. package/dist/dashboard/web/insights.js.map +1 -1
  201. package/dist/dashboard/web/legacy-workflow-page.d.ts +3 -0
  202. package/dist/dashboard/web/legacy-workflow-page.d.ts.map +1 -0
  203. package/dist/dashboard/web/legacy-workflow-page.js +717 -0
  204. package/dist/dashboard/web/legacy-workflow-page.js.map +1 -0
  205. package/dist/dashboard/web/monitor-room.d.ts.map +1 -1
  206. package/dist/dashboard/web/monitor-room.js +10 -8
  207. package/dist/dashboard/web/monitor-room.js.map +1 -1
  208. package/dist/dashboard/web/monitoring-page.d.ts.map +1 -1
  209. package/dist/dashboard/web/monitoring-page.js +188 -14
  210. package/dist/dashboard/web/monitoring-page.js.map +1 -1
  211. package/dist/dashboard/web/office-page.d.ts.map +1 -1
  212. package/dist/dashboard/web/office-page.js +11 -23
  213. package/dist/dashboard/web/office-page.js.map +1 -1
  214. package/dist/dashboard/web/overview-page.d.ts.map +1 -1
  215. package/dist/dashboard/web/overview-page.js +141 -147
  216. package/dist/dashboard/web/overview-page.js.map +1 -1
  217. package/dist/dashboard/web/overview.d.ts +0 -1
  218. package/dist/dashboard/web/overview.d.ts.map +1 -1
  219. package/dist/dashboard/web/overview.js +3 -275
  220. package/dist/dashboard/web/overview.js.map +1 -1
  221. package/dist/dashboard/web/preferences.d.ts +1 -6
  222. package/dist/dashboard/web/preferences.d.ts.map +1 -1
  223. package/dist/dashboard/web/preferences.js +0 -21
  224. package/dist/dashboard/web/preferences.js.map +1 -1
  225. package/dist/dashboard/web/role-batch.d.ts +9 -0
  226. package/dist/dashboard/web/role-batch.d.ts.map +1 -0
  227. package/dist/dashboard/web/role-batch.js +42 -0
  228. package/dist/dashboard/web/role-batch.js.map +1 -0
  229. package/dist/dashboard/web/roles-page.d.ts.map +1 -1
  230. package/dist/dashboard/web/roles-page.js +538 -13
  231. package/dist/dashboard/web/roles-page.js.map +1 -1
  232. package/dist/dashboard/web/roles.d.ts +98 -1
  233. package/dist/dashboard/web/roles.d.ts.map +1 -1
  234. package/dist/dashboard/web/roles.js +117 -903
  235. package/dist/dashboard/web/roles.js.map +1 -1
  236. package/dist/dashboard/web/schedules-page.d.ts.map +1 -1
  237. package/dist/dashboard/web/schedules-page.js +82 -24
  238. package/dist/dashboard/web/schedules-page.js.map +1 -1
  239. package/dist/dashboard/web/sessions-kanban.d.ts +67 -0
  240. package/dist/dashboard/web/sessions-kanban.d.ts.map +1 -0
  241. package/dist/dashboard/web/sessions-kanban.js +481 -0
  242. package/dist/dashboard/web/sessions-kanban.js.map +1 -0
  243. package/dist/dashboard/web/sessions-page.d.ts +4 -0
  244. package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
  245. package/dist/dashboard/web/sessions-page.js +1633 -18
  246. package/dist/dashboard/web/sessions-page.js.map +1 -1
  247. package/dist/dashboard/web/sessions.d.ts +45 -4
  248. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  249. package/dist/dashboard/web/sessions.js +53 -2535
  250. package/dist/dashboard/web/sessions.js.map +1 -1
  251. package/dist/dashboard/web/settings-page.d.ts +0 -2
  252. package/dist/dashboard/web/settings-page.d.ts.map +1 -1
  253. package/dist/dashboard/web/settings-page.js +127 -117
  254. package/dist/dashboard/web/settings-page.js.map +1 -1
  255. package/dist/dashboard/web/skills-page.d.ts +10 -1
  256. package/dist/dashboard/web/skills-page.d.ts.map +1 -1
  257. package/dist/dashboard/web/skills-page.js +235 -93
  258. package/dist/dashboard/web/skills-page.js.map +1 -1
  259. package/dist/dashboard/web/team-federation-page.d.ts.map +1 -1
  260. package/dist/dashboard/web/team-federation-page.js +446 -28
  261. package/dist/dashboard/web/team-federation-page.js.map +1 -1
  262. package/dist/dashboard/web/team-federation.d.ts +91 -2
  263. package/dist/dashboard/web/team-federation.d.ts.map +1 -1
  264. package/dist/dashboard/web/team-federation.js +87 -474
  265. package/dist/dashboard/web/team-federation.js.map +1 -1
  266. package/dist/dashboard/web/theme-menu.d.ts +1 -0
  267. package/dist/dashboard/web/theme-menu.d.ts.map +1 -1
  268. package/dist/dashboard/web/theme-menu.js +79 -20
  269. package/dist/dashboard/web/theme-menu.js.map +1 -1
  270. package/dist/dashboard/web/ui.d.ts +1 -2
  271. package/dist/dashboard/web/ui.d.ts.map +1 -1
  272. package/dist/dashboard/web/ui.js +8 -20
  273. package/dist/dashboard/web/ui.js.map +1 -1
  274. package/dist/dashboard/web/v3-api.d.ts +16 -0
  275. package/dist/dashboard/web/v3-api.d.ts.map +1 -0
  276. package/dist/dashboard/web/v3-api.js +21 -0
  277. package/dist/dashboard/web/v3-api.js.map +1 -0
  278. package/dist/dashboard/web/v3-components.d.ts +2 -0
  279. package/dist/dashboard/web/v3-components.d.ts.map +1 -0
  280. package/dist/dashboard/web/v3-components.js +290 -0
  281. package/dist/dashboard/web/v3-components.js.map +1 -0
  282. package/dist/dashboard/web/v3-model.d.ts +80 -0
  283. package/dist/dashboard/web/v3-model.d.ts.map +1 -0
  284. package/dist/dashboard/web/v3-model.js +240 -0
  285. package/dist/dashboard/web/v3-model.js.map +1 -0
  286. package/dist/dashboard/web/v3-page.d.ts.map +1 -1
  287. package/dist/dashboard/web/v3-page.js +2 -22
  288. package/dist/dashboard/web/v3-page.js.map +1 -1
  289. package/dist/dashboard/web/v3-terminal.d.ts +14 -0
  290. package/dist/dashboard/web/v3-terminal.d.ts.map +1 -1
  291. package/dist/dashboard/web/v3-terminal.js +31 -19
  292. package/dist/dashboard/web/v3-terminal.js.map +1 -1
  293. package/dist/dashboard/web/webhook-logs-page.d.ts +16 -0
  294. package/dist/dashboard/web/webhook-logs-page.d.ts.map +1 -0
  295. package/dist/dashboard/web/webhook-logs-page.js +195 -0
  296. package/dist/dashboard/web/webhook-logs-page.js.map +1 -0
  297. package/dist/dashboard/web/whiteboards-page.d.ts.map +1 -1
  298. package/dist/dashboard/web/whiteboards-page.js +18 -23
  299. package/dist/dashboard/web/whiteboards-page.js.map +1 -1
  300. package/dist/dashboard/web/workflow-version-switch.d.ts +8 -0
  301. package/dist/dashboard/web/workflow-version-switch.d.ts.map +1 -0
  302. package/dist/dashboard/web/workflow-version-switch.js +9 -0
  303. package/dist/dashboard/web/workflow-version-switch.js.map +1 -0
  304. package/dist/dashboard/web/workflows.d.ts +272 -1
  305. package/dist/dashboard/web/workflows.d.ts.map +1 -1
  306. package/dist/dashboard/web/workflows.js +211 -1397
  307. package/dist/dashboard/web/workflows.js.map +1 -1
  308. package/dist/dashboard/webhook-routes.d.ts.map +1 -1
  309. package/dist/dashboard/webhook-routes.js +92 -39
  310. package/dist/dashboard/webhook-routes.js.map +1 -1
  311. package/dist/dashboard-web/app.js +1 -65
  312. package/dist/dashboard-web/brand-logo.png +0 -0
  313. package/dist/dashboard-web/chunks/bot-defaults-page-HSQ6HR3R.js +1 -0
  314. package/dist/dashboard-web/chunks/chunk-6TPODDDC.js +1 -0
  315. package/dist/dashboard-web/chunks/chunk-73EJP2MO.js +1 -0
  316. package/dist/dashboard-web/chunks/chunk-BRTZFELS.js +1 -0
  317. package/dist/dashboard-web/chunks/chunk-EVK77ASG.js +1 -0
  318. package/dist/dashboard-web/chunks/chunk-R3FXBFQH.js +1 -0
  319. package/dist/dashboard-web/chunks/chunk-VRLL7SNU.js +1 -0
  320. package/dist/dashboard-web/chunks/chunk-XCPSHD3G.js +37 -0
  321. package/dist/dashboard-web/chunks/chunk-XJ7BGPJH.js +1 -0
  322. package/dist/dashboard-web/chunks/chunk-YVRWYGXR.js +1 -0
  323. package/dist/dashboard-web/chunks/chunk-ZJING6FY.js +66 -0
  324. package/dist/dashboard-web/chunks/connectors-page-ODUA5UCW.js +1 -0
  325. package/dist/dashboard-web/chunks/groups-page-OYX5M6NK.js +8 -0
  326. package/dist/dashboard-web/chunks/insights-page-YCQO6OCR.js +22 -0
  327. package/dist/dashboard-web/chunks/legacy-workflow-page-XJAUNONP.js +2 -0
  328. package/dist/dashboard-web/chunks/{monitor-room-RFX4HPS5.js → monitor-room-WTZNYAFV.js} +17 -15
  329. package/dist/dashboard-web/chunks/monitoring-page-R6LJUK7G.js +2 -0
  330. package/dist/dashboard-web/chunks/office-page-4OXK3GNR.js +1 -0
  331. package/dist/dashboard-web/chunks/overview-page-4MVEJY6U.js +1 -0
  332. package/dist/dashboard-web/chunks/roles-page-NQDW27VV.js +1 -0
  333. package/dist/dashboard-web/chunks/schedules-page-JRNKYHOX.js +1 -0
  334. package/dist/dashboard-web/chunks/sessions-page-LF7UVI7B.js +3 -0
  335. package/dist/dashboard-web/chunks/settings-page-WGW7KQQS.js +2 -0
  336. package/dist/dashboard-web/chunks/skills-page-AMD4XP3T.js +3 -0
  337. package/dist/dashboard-web/chunks/team-federation-page-SYG3K4GG.js +1 -0
  338. package/dist/dashboard-web/chunks/v3-page-6NFFWNUK.js +94 -0
  339. package/dist/dashboard-web/chunks/whiteboards-page-FBRUK2AS.js +1 -0
  340. package/dist/dashboard-web/favicon.png +0 -0
  341. package/dist/dashboard-web/index.html +5 -69
  342. package/dist/dashboard-web/style.css +18835 -7211
  343. package/dist/dashboard.js +150 -32
  344. package/dist/dashboard.js.map +1 -1
  345. package/dist/global-config.d.ts +2 -2
  346. package/dist/global-config.d.ts.map +1 -1
  347. package/dist/i18n/en.d.ts.map +1 -1
  348. package/dist/i18n/en.js +3 -0
  349. package/dist/i18n/en.js.map +1 -1
  350. package/dist/i18n/zh.d.ts.map +1 -1
  351. package/dist/i18n/zh.js +3 -0
  352. package/dist/i18n/zh.js.map +1 -1
  353. package/dist/im/lark/card-builder.d.ts +7 -5
  354. package/dist/im/lark/card-builder.d.ts.map +1 -1
  355. package/dist/im/lark/card-builder.js +10 -7
  356. package/dist/im/lark/card-builder.js.map +1 -1
  357. package/dist/im/lark/card-handler.d.ts.map +1 -1
  358. package/dist/im/lark/card-handler.js +25 -1
  359. package/dist/im/lark/card-handler.js.map +1 -1
  360. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  361. package/dist/im/lark/event-dispatcher.js +84 -0
  362. package/dist/im/lark/event-dispatcher.js.map +1 -1
  363. package/dist/platform/binding.d.ts +9 -0
  364. package/dist/platform/binding.d.ts.map +1 -1
  365. package/dist/platform/binding.js +14 -0
  366. package/dist/platform/binding.js.map +1 -1
  367. package/dist/platform/tunnel-client.d.ts.map +1 -1
  368. package/dist/platform/tunnel-client.js +9 -0
  369. package/dist/platform/tunnel-client.js.map +1 -1
  370. package/dist/services/bot-config-store.d.ts +1 -1
  371. package/dist/services/bot-config-store.d.ts.map +1 -1
  372. package/dist/services/bot-config-store.js +11 -5
  373. package/dist/services/bot-config-store.js.map +1 -1
  374. package/dist/services/file-bridge-path.d.ts +8 -0
  375. package/dist/services/file-bridge-path.d.ts.map +1 -0
  376. package/dist/services/file-bridge-path.js +75 -0
  377. package/dist/services/file-bridge-path.js.map +1 -0
  378. package/dist/services/grok-paths.d.ts +27 -0
  379. package/dist/services/grok-paths.d.ts.map +1 -0
  380. package/dist/services/grok-paths.js +106 -0
  381. package/dist/services/grok-paths.js.map +1 -0
  382. package/dist/services/grok-transcript.d.ts +67 -0
  383. package/dist/services/grok-transcript.d.ts.map +1 -0
  384. package/dist/services/grok-transcript.js +630 -0
  385. package/dist/services/grok-transcript.js.map +1 -0
  386. package/dist/services/hermes-session-filter.d.ts +28 -0
  387. package/dist/services/hermes-session-filter.d.ts.map +1 -0
  388. package/dist/services/hermes-session-filter.js +53 -0
  389. package/dist/services/hermes-session-filter.js.map +1 -0
  390. package/dist/services/hermes-transcript.d.ts +3 -0
  391. package/dist/services/hermes-transcript.d.ts.map +1 -1
  392. package/dist/services/hermes-transcript.js +20 -2
  393. package/dist/services/hermes-transcript.js.map +1 -1
  394. package/dist/services/resumable-session-discovery.d.ts +3 -0
  395. package/dist/services/resumable-session-discovery.d.ts.map +1 -1
  396. package/dist/services/resumable-session-discovery.js +6 -1
  397. package/dist/services/resumable-session-discovery.js.map +1 -1
  398. package/dist/services/skill-registry-store.d.ts +9 -0
  399. package/dist/services/skill-registry-store.d.ts.map +1 -1
  400. package/dist/services/skill-registry-store.js +304 -1
  401. package/dist/services/skill-registry-store.js.map +1 -1
  402. package/dist/services/structured-bridge-clis.d.ts +29 -0
  403. package/dist/services/structured-bridge-clis.d.ts.map +1 -0
  404. package/dist/services/structured-bridge-clis.js +76 -0
  405. package/dist/services/structured-bridge-clis.js.map +1 -0
  406. package/dist/services/trigger-log-store.d.ts +59 -0
  407. package/dist/services/trigger-log-store.d.ts.map +1 -1
  408. package/dist/services/trigger-log-store.js +81 -10
  409. package/dist/services/trigger-log-store.js.map +1 -1
  410. package/dist/services/usage-ledger.d.ts +4 -1
  411. package/dist/services/usage-ledger.d.ts.map +1 -1
  412. package/dist/services/usage-ledger.js +48 -10
  413. package/dist/services/usage-ledger.js.map +1 -1
  414. package/dist/services/webhook-audit.d.ts +10 -0
  415. package/dist/services/webhook-audit.d.ts.map +1 -0
  416. package/dist/services/webhook-audit.js +116 -0
  417. package/dist/services/webhook-audit.js.map +1 -0
  418. package/dist/setup/bot-config-editor.d.ts.map +1 -1
  419. package/dist/setup/bot-config-editor.js +2 -0
  420. package/dist/setup/bot-config-editor.js.map +1 -1
  421. package/dist/setup/ensure-tmux.d.ts +26 -12
  422. package/dist/setup/ensure-tmux.d.ts.map +1 -1
  423. package/dist/setup/ensure-tmux.js +85 -18
  424. package/dist/setup/ensure-tmux.js.map +1 -1
  425. package/dist/skills/definitions.d.ts.map +1 -1
  426. package/dist/skills/definitions.js +14 -1
  427. package/dist/skills/definitions.js.map +1 -1
  428. package/dist/skills/injection-mode.d.ts +16 -0
  429. package/dist/skills/injection-mode.d.ts.map +1 -1
  430. package/dist/skills/injection-mode.js +25 -0
  431. package/dist/skills/injection-mode.js.map +1 -1
  432. package/dist/types.d.ts +9 -0
  433. package/dist/types.d.ts.map +1 -1
  434. package/dist/utils/global-install.d.ts +22 -0
  435. package/dist/utils/global-install.d.ts.map +1 -0
  436. package/dist/utils/global-install.js +106 -0
  437. package/dist/utils/global-install.js.map +1 -0
  438. package/dist/utils/install-diagnostics.d.ts +1 -1
  439. package/dist/utils/install-diagnostics.d.ts.map +1 -1
  440. package/dist/utils/install-diagnostics.js +6 -4
  441. package/dist/utils/install-diagnostics.js.map +1 -1
  442. package/dist/utils/install-info.d.ts +2 -0
  443. package/dist/utils/install-info.d.ts.map +1 -1
  444. package/dist/utils/install-info.js +10 -4
  445. package/dist/utils/install-info.js.map +1 -1
  446. package/dist/worker.js +293 -172
  447. package/dist/worker.js.map +1 -1
  448. package/dist/workflows/events/payloads.d.ts +10 -10
  449. package/dist/workflows/events/schema.d.ts +28 -28
  450. package/package.json +8 -7
  451. package/dist/dashboard/web/connectors.d.ts +0 -2
  452. package/dist/dashboard/web/connectors.d.ts.map +0 -1
  453. package/dist/dashboard/web/connectors.js +0 -2
  454. package/dist/dashboard/web/connectors.js.map +0 -1
  455. package/dist/dashboard/web/office.d.ts +0 -2
  456. package/dist/dashboard/web/office.d.ts.map +0 -1
  457. package/dist/dashboard/web/office.js +0 -2
  458. package/dist/dashboard/web/office.js.map +0 -1
  459. package/dist/dashboard/web/schedules.d.ts +0 -2
  460. package/dist/dashboard/web/schedules.d.ts.map +0 -1
  461. package/dist/dashboard/web/schedules.js +0 -2
  462. package/dist/dashboard/web/schedules.js.map +0 -1
  463. package/dist/dashboard/web/settings.d.ts +0 -2
  464. package/dist/dashboard/web/settings.d.ts.map +0 -1
  465. package/dist/dashboard/web/settings.js +0 -2
  466. package/dist/dashboard/web/settings.js.map +0 -1
  467. package/dist/dashboard/web/skills.d.ts +0 -2
  468. package/dist/dashboard/web/skills.d.ts.map +0 -1
  469. package/dist/dashboard/web/skills.js +0 -2
  470. package/dist/dashboard/web/skills.js.map +0 -1
  471. package/dist/dashboard/web/skin-intro.d.ts +0 -4
  472. package/dist/dashboard/web/skin-intro.d.ts.map +0 -1
  473. package/dist/dashboard/web/skin-intro.js +0 -49
  474. package/dist/dashboard/web/skin-intro.js.map +0 -1
  475. package/dist/dashboard/web/v3.d.ts +0 -3
  476. package/dist/dashboard/web/v3.d.ts.map +0 -1
  477. package/dist/dashboard/web/v3.js +0 -539
  478. package/dist/dashboard/web/v3.js.map +0 -1
  479. package/dist/dashboard/web/whiteboards.d.ts +0 -2
  480. package/dist/dashboard/web/whiteboards.d.ts.map +0 -1
  481. package/dist/dashboard/web/whiteboards.js +0 -2
  482. package/dist/dashboard/web/whiteboards.js.map +0 -1
  483. package/dist/dashboard-web/chunks/bot-defaults-page-OCIHPGEU.js +0 -438
  484. package/dist/dashboard-web/chunks/chunk-3N2PPQVD.js +0 -1
  485. package/dist/dashboard-web/chunks/chunk-3UJYRR2Q.js +0 -37
  486. package/dist/dashboard-web/chunks/chunk-5E3MJJL4.js +0 -1
  487. package/dist/dashboard-web/chunks/chunk-7SZRL6FY.js +0 -1
  488. package/dist/dashboard-web/chunks/chunk-JTSE5VP6.js +0 -54
  489. package/dist/dashboard-web/chunks/chunk-LXIK7OUJ.js +0 -1
  490. package/dist/dashboard-web/chunks/chunk-PE6W3C2C.js +0 -1
  491. package/dist/dashboard-web/chunks/chunk-QW54DWU3.js +0 -325
  492. package/dist/dashboard-web/chunks/connectors-IGETYWCP.js +0 -1
  493. package/dist/dashboard-web/chunks/groups-page-MYBS4ZYJ.js +0 -207
  494. package/dist/dashboard-web/chunks/insights-page-UPA32V2S.js +0 -309
  495. package/dist/dashboard-web/chunks/monitoring-page-7T3BESZ2.js +0 -1
  496. package/dist/dashboard-web/chunks/office-page-6DXYOG55.js +0 -1
  497. package/dist/dashboard-web/chunks/overview-page-LJSBCQW4.js +0 -1
  498. package/dist/dashboard-web/chunks/roles-page-ESURTVQH.js +0 -98
  499. package/dist/dashboard-web/chunks/schedules-LML2ISOT.js +0 -1
  500. package/dist/dashboard-web/chunks/sessions-YB73XOTU.js +0 -1
  501. package/dist/dashboard-web/chunks/sessions-page-MCO5QR7Z.js +0 -1
  502. package/dist/dashboard-web/chunks/settings-page-OSDKNVS3.js +0 -2
  503. package/dist/dashboard-web/chunks/skills-page-PXBZJ6P6.js +0 -2
  504. package/dist/dashboard-web/chunks/team-federation-page-TTPVHFPX.js +0 -10
  505. package/dist/dashboard-web/chunks/v3-page-FVPUL665.js +0 -149
  506. package/dist/dashboard-web/chunks/whiteboards-page-HLCTYSSV.js +0 -1
  507. package/dist/dashboard-web/chunks/workflows-FCPM4S4D.js +0 -184
  508. package/dist/dashboard-web/skins/bluearchive-hero.webp +0 -0
  509. package/dist/dashboard-web/skins/dragonball-goku.webp +0 -0
  510. package/dist/dashboard-web/skins/dragonball-wukong.webp +0 -0
  511. package/dist/dashboard-web/skins/genshin-breeze.webp +0 -0
  512. package/dist/dashboard-web/skins/ikun-hero.webp +0 -0
  513. package/dist/dashboard-web/skins/prts-priestess.webp +0 -0
  514. package/dist/dashboard-web/skins/zzz-hero.webp +0 -0
  515. package/dist/dashboard-web/skins/zzz-pattern.svg +0 -25
@@ -0,0 +1,630 @@
1
+ /**
2
+ * Reader for Grok Build's per-session ACP update stream.
3
+ *
4
+ * Path: `$GROK_HOME/sessions/<url-encoded-cwd>/<sessionId>/updates.jsonl`
5
+ *
6
+ * Bridge contract (same as Codex/CoCo/Pi): emit only
7
+ * - `user` — real user prompt (`user_message_chunk`)
8
+ * - `assistant_final` — the LAST contiguous run of `agent_message_chunk`s
9
+ * closed by `turn_completed`
10
+ *
11
+ * "Last contiguous run": grok streams progress narration between tool calls
12
+ * as agent_message_chunks too (most real turns carry 2–5 such groups). Codex
13
+ * parity is `phase=final_answer` only — the visible final reply — so any
14
+ * agent-message group followed by a non-message event (tool_call / thought /
15
+ * hook) is **dropped immediately** (buffer cleared, offset advanced). Only a
16
+ * group that reaches `turn_completed` without an intervening non-message
17
+ * event is emitted. This also keeps the 1s poller from rewinding across
18
+ * long tool stretches (hundreds of tool_call_update lines).
19
+ *
20
+ * Mid-turn thoughts / tool calls are ignored so the queue never closes a
21
+ * Lark turn on narration. Type-ahead follow-ups park until the active turn
22
+ * finishes (Grok queue semantics ≈ CoCo), so the transcript stays interleaved
23
+ * user1 → assistant_final1 → user2 → assistant_final2 — CodexBridgeQueue's
24
+ * HOL-block-drop still applies if a steer-like merge ever appears.
25
+ */
26
+ import { existsSync, statSync, openSync, readSync, closeSync, readdirSync, readFileSync, readlinkSync, } from 'node:fs';
27
+ import { execSync } from 'node:child_process';
28
+ import { platform } from 'node:os';
29
+ import { join } from 'node:path';
30
+ import { encodeGrokCwd, grokSessionsRoot, grokUpdatesPath, grokSummaryPath, resolveGrokCwdBucketDir, } from './grok-paths.js';
31
+ import { isBotmuxInjectedPrompt } from './resumable-session-discovery.js';
32
+ const IS_LINUX = platform() === 'linux';
33
+ const SESSION_UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
34
+ const GROK_SESSIONS_ANCHOR = '/.grok/sessions/';
35
+ const TITLE_MAX = 80;
36
+ function truncateTitle(text) {
37
+ const norm = text.replace(/\s+/g, ' ').trim();
38
+ if (!norm)
39
+ return '';
40
+ return norm.length > TITLE_MAX ? `${norm.slice(0, TITLE_MAX - 1)}…` : norm;
41
+ }
42
+ function contentText(content) {
43
+ if (typeof content === 'string')
44
+ return content;
45
+ if (!content || typeof content !== 'object')
46
+ return '';
47
+ const c = content;
48
+ if (typeof c.text === 'string')
49
+ return c.text;
50
+ return '';
51
+ }
52
+ /** Locate updates.jsonl for a session id, optionally scoped to cwd. */
53
+ export function findGrokUpdatesBySessionId(sessionId, cwd) {
54
+ if (!sessionId || !SESSION_UUID_RE.test(sessionId))
55
+ return undefined;
56
+ if (cwd) {
57
+ const p = grokUpdatesPath(sessionId, cwd);
58
+ if (existsSync(p))
59
+ return p;
60
+ }
61
+ const root = grokSessionsRoot();
62
+ if (!existsSync(root))
63
+ return undefined;
64
+ let entries;
65
+ try {
66
+ entries = readdirSync(root);
67
+ }
68
+ catch {
69
+ return undefined;
70
+ }
71
+ for (const name of entries) {
72
+ if (name.endsWith('.sqlite') || name.endsWith('.lock'))
73
+ continue;
74
+ const p = join(root, name, sessionId, 'updates.jsonl');
75
+ if (existsSync(p))
76
+ return p;
77
+ }
78
+ return undefined;
79
+ }
80
+ export function findGrokSummaryBySessionId(sessionId, cwd) {
81
+ if (!sessionId || !SESSION_UUID_RE.test(sessionId))
82
+ return undefined;
83
+ if (cwd) {
84
+ const p = grokSummaryPath(sessionId, cwd);
85
+ if (existsSync(p))
86
+ return p;
87
+ }
88
+ const root = grokSessionsRoot();
89
+ if (!existsSync(root))
90
+ return undefined;
91
+ let entries;
92
+ try {
93
+ entries = readdirSync(root);
94
+ }
95
+ catch {
96
+ return undefined;
97
+ }
98
+ for (const name of entries) {
99
+ if (name.endsWith('.sqlite') || name.endsWith('.lock'))
100
+ continue;
101
+ const p = join(root, name, sessionId, 'summary.json');
102
+ if (existsSync(p))
103
+ return p;
104
+ }
105
+ return undefined;
106
+ }
107
+ /** True when a session dir with summary.json exists (resume preflight). */
108
+ export function grokSessionExists(sessionId, cwd) {
109
+ if (!sessionId)
110
+ return false;
111
+ try {
112
+ // findGrokSummaryBySessionId already prefers cwd then scans every bucket.
113
+ return !!findGrokSummaryBySessionId(sessionId, cwd);
114
+ }
115
+ catch {
116
+ return undefined;
117
+ }
118
+ }
119
+ /** True when the session DIRECTORY exists in any cwd bucket — regardless of
120
+ * summary.json. Grok creates the dir (with summary.json) at TUI startup and
121
+ * REFUSES `--session-id <id>` when the dir already exists ("Session ID is
122
+ * already in use", exit 1) — so a fresh spawn must probe the dir itself, not
123
+ * the resume preflight's summary.json. */
124
+ export function grokSessionDirExists(sessionId, cwd) {
125
+ if (!sessionId || !SESSION_UUID_RE.test(sessionId))
126
+ return false;
127
+ try {
128
+ if (cwd && existsSync(join(resolveGrokCwdBucketDir(cwd), sessionId)))
129
+ return true;
130
+ const root = grokSessionsRoot();
131
+ if (!existsSync(root))
132
+ return false;
133
+ for (const name of readdirSync(root)) {
134
+ if (name.endsWith('.sqlite') || name.endsWith('.lock'))
135
+ continue;
136
+ if (existsSync(join(root, name, sessionId)))
137
+ return true;
138
+ }
139
+ return false;
140
+ }
141
+ catch {
142
+ return false;
143
+ }
144
+ }
145
+ function matchGrokSessionPath(target) {
146
+ // Try the CONFIGURED sessions root first so a custom GROK_HOME is honored,
147
+ // then fall back to the default `/.grok/sessions/` anchor.
148
+ const root = grokSessionsRoot();
149
+ let base;
150
+ let rest;
151
+ if (target.startsWith(root + '/')) {
152
+ base = root;
153
+ rest = target.slice(root.length + 1);
154
+ }
155
+ else {
156
+ const idx = target.indexOf(GROK_SESSIONS_ANCHOR);
157
+ if (idx >= 0) {
158
+ base = target.slice(0, idx + GROK_SESSIONS_ANCHOR.length - 1);
159
+ rest = target.slice(idx + GROK_SESSIONS_ANCHOR.length);
160
+ }
161
+ }
162
+ if (!base || !rest)
163
+ return undefined;
164
+ // …/sessions/<encoded-cwd>/<sessionId>/…
165
+ const parts = rest.split('/').filter(Boolean);
166
+ if (parts.length < 2)
167
+ return undefined;
168
+ const sessionId = parts[1];
169
+ if (!sessionId || !SESSION_UUID_RE.test(sessionId))
170
+ return undefined;
171
+ // Prefer the session dir + updates.jsonl even if the open fd is another file.
172
+ const updatesPath = join(base, parts[0], sessionId, 'updates.jsonl');
173
+ return { sessionId, updatesPath };
174
+ }
175
+ /** Extract the grok session id from any path under the sessions root — used
176
+ * by the worker to detect a `/new` / `/clear` / `/resume` rotation (new
177
+ * session id at the same pid) and re-attach the bridge. */
178
+ export function grokSessionIdFromPath(path) {
179
+ return matchGrokSessionPath(path)?.sessionId;
180
+ }
181
+ /** Bind a live Grok pid to its session via open fds (Linux /proc or lsof). */
182
+ export function findGrokSessionByPid(pid) {
183
+ if (!Number.isInteger(pid) || pid <= 0)
184
+ return undefined;
185
+ if (IS_LINUX) {
186
+ const fdDir = `/proc/${pid}/fd`;
187
+ if (existsSync(fdDir)) {
188
+ let entries;
189
+ try {
190
+ entries = readdirSync(fdDir);
191
+ }
192
+ catch {
193
+ return undefined;
194
+ }
195
+ for (const fd of entries) {
196
+ let target;
197
+ try {
198
+ target = readlinkSync(join(fdDir, fd));
199
+ }
200
+ catch {
201
+ continue;
202
+ }
203
+ if (target.endsWith(' (deleted)'))
204
+ continue;
205
+ const hit = matchGrokSessionPath(target);
206
+ if (hit)
207
+ return hit;
208
+ }
209
+ return undefined;
210
+ }
211
+ }
212
+ let out;
213
+ try {
214
+ out = execSync(`lsof -p ${pid} -Fn`, {
215
+ encoding: 'utf-8',
216
+ stdio: ['pipe', 'pipe', 'pipe'],
217
+ });
218
+ }
219
+ catch {
220
+ return undefined;
221
+ }
222
+ for (const line of out.split('\n')) {
223
+ if (!line.startsWith('n/'))
224
+ continue;
225
+ const hit = matchGrokSessionPath(line.slice(1));
226
+ if (hit)
227
+ return hit;
228
+ }
229
+ return undefined;
230
+ }
231
+ function parseTimestampMs(obj, update) {
232
+ const meta = update?._meta ?? obj?.params?._meta ?? obj?._meta;
233
+ if (meta && typeof meta.agentTimestampMs === 'number')
234
+ return meta.agentTimestampMs;
235
+ if (typeof obj?.timestamp === 'number') {
236
+ // Grok uses seconds-ish unix in some builds and ms in others; treat
237
+ // small values as seconds.
238
+ return obj.timestamp < 1e12 ? obj.timestamp * 1000 : obj.timestamp;
239
+ }
240
+ return Date.now();
241
+ }
242
+ function eventUuid(path, lineStart, update, obj) {
243
+ const meta = update?._meta ?? obj?.params?._meta ?? obj?._meta;
244
+ if (meta && typeof meta.eventId === 'string' && meta.eventId)
245
+ return meta.eventId;
246
+ return `${path}:${lineStart}`;
247
+ }
248
+ /**
249
+ * Increment-read updates.jsonl. Agent chunks of the CURRENT contiguous group
250
+ * are buffered. A non-message event (tool_call / thought / hook) while a
251
+ * group is buffered **drops that group immediately** and advances the offset
252
+ * (narration cannot become the final answer — codex final_answer parity).
253
+ * The next agent chunk starts a fresh group; `turn_completed` emits only
254
+ * whatever group is still buffered. If the file ends mid-group, newOffset
255
+ * rewinds to the group's first chunk so the next poll re-reads it (queue
256
+ * dedups by uuid).
257
+ */
258
+ export function drainGrokUpdates(path, fromOffset) {
259
+ if (!existsSync(path))
260
+ return { events: [], newOffset: 0, pendingTail: '' };
261
+ let size;
262
+ try {
263
+ size = statSync(path).size;
264
+ }
265
+ catch {
266
+ return { events: [], newOffset: fromOffset, pendingTail: '' };
267
+ }
268
+ let start = fromOffset;
269
+ if (size < start)
270
+ start = 0;
271
+ if (size === start)
272
+ return { events: [], newOffset: start, pendingTail: '' };
273
+ const len = size - start;
274
+ const buf = Buffer.alloc(len);
275
+ const fd = openSync(path, 'r');
276
+ try {
277
+ readSync(fd, buf, 0, len, start);
278
+ }
279
+ finally {
280
+ closeSync(fd);
281
+ }
282
+ const text = buf.toString('utf8');
283
+ const lastNl = text.lastIndexOf('\n');
284
+ const completeText = lastNl >= 0 ? text.slice(0, lastNl + 1) : '';
285
+ const pendingTail = lastNl >= 0 ? text.slice(lastNl + 1) : text;
286
+ // Pure partial-line window (writer mid-flush, no '\n' yet): never advance.
287
+ // ''.split('\n') yields [''] — treating that as a bare newline would push
288
+ // offset by 1 and desync the next poll so the finished line fails JSON.parse
289
+ // and is silently dropped (codex drainCodexRollout keeps newOffset = start).
290
+ if (!completeText) {
291
+ return { events: [], newOffset: start, pendingTail };
292
+ }
293
+ const events = [];
294
+ let agentParts = [];
295
+ let openTurnStartOffset = null;
296
+ let openTurnSessionId;
297
+ let cursor = start;
298
+ let lastFullyConsumedOffset = start;
299
+ for (const line of completeText.split('\n')) {
300
+ if (line.length === 0) {
301
+ cursor += 1; // bare \n
302
+ lastFullyConsumedOffset = cursor;
303
+ continue;
304
+ }
305
+ const lineStart = cursor;
306
+ const lineBytes = Buffer.byteLength(line, 'utf8') + 1; // + \n
307
+ cursor += lineBytes;
308
+ let obj;
309
+ try {
310
+ obj = JSON.parse(line);
311
+ }
312
+ catch {
313
+ lastFullyConsumedOffset = cursor;
314
+ continue;
315
+ }
316
+ const update = obj?.params?.update ?? obj?.update;
317
+ if (!update || typeof update !== 'object') {
318
+ lastFullyConsumedOffset = cursor;
319
+ continue;
320
+ }
321
+ const su = update.sessionUpdate;
322
+ const sessionId = (typeof obj?.params?.sessionId === 'string' && obj.params.sessionId)
323
+ || (typeof update.sessionId === 'string' && update.sessionId)
324
+ || undefined;
325
+ const timestampMs = parseTimestampMs(obj, update);
326
+ const uuid = eventUuid(path, lineStart, update, obj);
327
+ if (su === 'user_message_chunk') {
328
+ // Drop any unfinished agent buffer — a new user turn supersedes it.
329
+ agentParts = [];
330
+ openTurnStartOffset = null;
331
+ openTurnSessionId = undefined;
332
+ const textContent = contentText(update.content).trim();
333
+ if (textContent) {
334
+ events.push({
335
+ uuid,
336
+ timestampMs,
337
+ kind: 'user',
338
+ text: textContent,
339
+ sourceSessionId: sessionId,
340
+ });
341
+ }
342
+ lastFullyConsumedOffset = cursor;
343
+ continue;
344
+ }
345
+ if (su === 'agent_message_chunk') {
346
+ const chunk = contentText(update.content);
347
+ if (chunk) {
348
+ if (openTurnStartOffset === null)
349
+ openTurnStartOffset = lineStart;
350
+ if (sessionId)
351
+ openTurnSessionId = sessionId;
352
+ agentParts.push(chunk);
353
+ }
354
+ // Do not advance lastFullyConsumedOffset past open group — handled at end.
355
+ continue;
356
+ }
357
+ if (su === 'turn_completed') {
358
+ // Emit only a still-buffered (post-tool) group. Narration groups were
359
+ // already dropped on the tool_call/thought that followed them.
360
+ const finalText = agentParts.join('').trim();
361
+ agentParts = [];
362
+ openTurnStartOffset = null;
363
+ if (finalText) {
364
+ events.push({
365
+ uuid,
366
+ timestampMs,
367
+ kind: 'assistant_final',
368
+ text: finalText,
369
+ sourceSessionId: sessionId ?? openTurnSessionId,
370
+ });
371
+ }
372
+ openTurnSessionId = undefined;
373
+ lastFullyConsumedOffset = cursor;
374
+ continue;
375
+ }
376
+ // tool_call / thought / hooks / etc. — any buffered agent group is
377
+ // mid-turn narration and can never be the final answer. Drop it and
378
+ // advance past this line so the 1s poller does not rewind through
379
+ // hundreds of tool_call_update events every tick.
380
+ if (agentParts.length > 0) {
381
+ agentParts = [];
382
+ openTurnStartOffset = null;
383
+ openTurnSessionId = undefined;
384
+ }
385
+ lastFullyConsumedOffset = cursor;
386
+ }
387
+ // Mid-group at EOF (final reply still streaming): rewind so agent chunks
388
+ // are re-read next tick.
389
+ const newOffset = openTurnStartOffset !== null
390
+ ? openTurnStartOffset
391
+ : (completeText ? start + Buffer.byteLength(completeText, 'utf8') : lastFullyConsumedOffset);
392
+ return { events, newOffset, pendingTail };
393
+ }
394
+ /** Current file size helper for submit-verify baseByte. */
395
+ export function grokFileSize(path) {
396
+ if (!existsSync(path))
397
+ return 0;
398
+ try {
399
+ return statSync(path).size;
400
+ }
401
+ catch {
402
+ return 0;
403
+ }
404
+ }
405
+ function normaliseNewlines(text) {
406
+ return text.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
407
+ }
408
+ /**
409
+ * Scan the bucket-level prompt_history.jsonl from `fromByte` for a submit
410
+ * whose `prompt` equals `expectedText` (modulo newline normalisation — the
411
+ * composer stores multi-line input verbatim with `\n`). prompt_history is
412
+ * written AT SUBMIT TIME even while a turn is running (verified 0.2.93), so
413
+ * this confirms busy-turn type-ahead submits that updates.jsonl (dequeue-time
414
+ * user events) cannot. Returns the owning session id when found.
415
+ *
416
+ * Concurrent safety: the file is cwd-bucket shared. Two workers in the same
417
+ * repo can append identical prompt text under different session_ids. Callers
418
+ * MUST pass `preferSessionId` (from {@link findGrokSessionByPid} of their
419
+ * CLI pid) so we never claim another worker's line. Without a prefer id we
420
+ * only accept a match when all matching lines agree on a single session_id
421
+ * (or have no id); ambiguous multi-sid hits fail closed.
422
+ */
423
+ export function matchGrokPromptAppend(path, fromByte, expectedText, opts) {
424
+ if (!expectedText || !existsSync(path))
425
+ return { found: false };
426
+ let size;
427
+ try {
428
+ size = statSync(path).size;
429
+ }
430
+ catch {
431
+ return { found: false };
432
+ }
433
+ const start = size < fromByte ? 0 : fromByte;
434
+ if (size <= start)
435
+ return { found: false };
436
+ const len = size - start;
437
+ const buf = Buffer.alloc(len);
438
+ try {
439
+ const fd = openSync(path, 'r');
440
+ try {
441
+ readSync(fd, buf, 0, len, start);
442
+ }
443
+ finally {
444
+ closeSync(fd);
445
+ }
446
+ }
447
+ catch {
448
+ return { found: false };
449
+ }
450
+ const expected = normaliseNewlines(expectedText);
451
+ const expectedTrimmed = expected.trim();
452
+ const matches = [];
453
+ for (const line of buf.toString('utf8').split('\n')) {
454
+ if (!line)
455
+ continue;
456
+ let obj;
457
+ try {
458
+ obj = JSON.parse(line);
459
+ }
460
+ catch {
461
+ continue;
462
+ } // partial tail — later poll re-reads
463
+ if (typeof obj?.prompt !== 'string')
464
+ continue;
465
+ const got = normaliseNewlines(obj.prompt);
466
+ // Exact match modulo newline normalisation; trim fallback tolerates the
467
+ // composer stripping leading/trailing whitespace on submit.
468
+ if (obj.prompt === expectedText || got === expected || got.trim() === expectedTrimmed) {
469
+ const sid = typeof obj.session_id === 'string' && SESSION_UUID_RE.test(obj.session_id)
470
+ ? obj.session_id
471
+ : undefined;
472
+ matches.push({ cliSessionId: sid });
473
+ }
474
+ }
475
+ if (matches.length === 0)
476
+ return { found: false };
477
+ const prefer = opts?.preferSessionId?.trim();
478
+ if (prefer) {
479
+ const hit = matches.find((m) => m.cliSessionId === prefer);
480
+ if (hit)
481
+ return { found: true, cliSessionId: hit.cliSessionId };
482
+ // Preferred sid not among matches yet (slow append / other worker's lines
483
+ // only) — keep polling; never fall through to another sid.
484
+ return { found: false };
485
+ }
486
+ // No process binding: only safe when every match agrees on the same sid
487
+ // (or none). Multiple distinct sids ⇒ concurrent workers — fail closed.
488
+ const sids = new Set(matches.map((m) => m.cliSessionId).filter((s) => !!s));
489
+ if (sids.size > 1)
490
+ return { found: false };
491
+ if (sids.size === 1) {
492
+ const only = [...sids][0];
493
+ return { found: true, cliSessionId: only };
494
+ }
495
+ // Matched text but no session_id fields — confirm submit without rotation.
496
+ return { found: true };
497
+ }
498
+ function looksLikeBotmuxPrompt(text) {
499
+ return isBotmuxInjectedPrompt(text);
500
+ }
501
+ /** Head-read cap for /adopt discovery: real updates.jsonl files run to
502
+ * megabytes, and the first user prompt (title + botmux-filter input) sits
503
+ * within the first few KB after the startup hook events — never read the
504
+ * whole file per session just to list candidates. */
505
+ const DISCOVER_HEAD_BYTES = 256 * 1024;
506
+ /** First real user prompt from the head of updates.jsonl (bounded read). */
507
+ function readFirstUserChunk(path) {
508
+ try {
509
+ const size = statSync(path).size;
510
+ const len = Math.min(size, DISCOVER_HEAD_BYTES);
511
+ if (len <= 0)
512
+ return undefined;
513
+ const buf = Buffer.alloc(len);
514
+ const fd = openSync(path, 'r');
515
+ try {
516
+ readSync(fd, buf, 0, len, 0);
517
+ }
518
+ finally {
519
+ closeSync(fd);
520
+ }
521
+ for (const line of buf.toString('utf8').split('\n')) {
522
+ if (!line || !line.includes('user_message_chunk'))
523
+ continue;
524
+ let obj;
525
+ try {
526
+ obj = JSON.parse(line);
527
+ }
528
+ catch {
529
+ continue;
530
+ } // truncated tail line
531
+ const update = obj?.params?.update ?? obj?.update;
532
+ if (!update || update.sessionUpdate !== 'user_message_chunk')
533
+ continue;
534
+ const text = contentText(update.content).trim();
535
+ if (text)
536
+ return text;
537
+ }
538
+ }
539
+ catch { /* ignore */ }
540
+ return undefined;
541
+ }
542
+ /**
543
+ * Discover resumable Grok sessions for `/adopt` import.
544
+ * Most-recent first, capped to `limit`, excluding live ids.
545
+ */
546
+ export async function discoverGrokSessions(limit, exclude) {
547
+ const root = grokSessionsRoot();
548
+ if (!existsSync(root) || limit <= 0)
549
+ return [];
550
+ const cands = [];
551
+ let cwdBuckets;
552
+ try {
553
+ cwdBuckets = readdirSync(root);
554
+ }
555
+ catch {
556
+ return [];
557
+ }
558
+ for (const bucket of cwdBuckets) {
559
+ if (bucket.endsWith('.sqlite') || bucket.endsWith('.lock'))
560
+ continue;
561
+ const bucketPath = join(root, bucket);
562
+ let sessionIds;
563
+ try {
564
+ sessionIds = readdirSync(bucketPath);
565
+ }
566
+ catch {
567
+ continue;
568
+ }
569
+ let cwd = '';
570
+ try {
571
+ cwd = decodeURIComponent(bucket);
572
+ }
573
+ catch {
574
+ cwd = bucket;
575
+ }
576
+ for (const sessionId of sessionIds) {
577
+ if (exclude?.has(sessionId))
578
+ continue;
579
+ if (!SESSION_UUID_RE.test(sessionId))
580
+ continue;
581
+ const summaryPath = join(bucketPath, sessionId, 'summary.json');
582
+ if (!existsSync(summaryPath))
583
+ continue;
584
+ let mtimeMs = 0;
585
+ try {
586
+ mtimeMs = statSync(summaryPath).mtimeMs;
587
+ }
588
+ catch {
589
+ continue;
590
+ }
591
+ let title = '';
592
+ let summaryCwd = cwd;
593
+ try {
594
+ const raw = JSON.parse(readFileSync(summaryPath, 'utf8'));
595
+ title = String(raw?.generated_title || raw?.session_summary || '').trim();
596
+ const infoCwd = raw?.info?.cwd;
597
+ if (typeof infoCwd === 'string' && infoCwd)
598
+ summaryCwd = infoCwd;
599
+ }
600
+ catch { /* title optional */ }
601
+ // Prefer first real user_message_chunk for title when summary empty;
602
+ // also filter botmux-spawned sessions. Bounded head read — see
603
+ // readFirstUserChunk.
604
+ const updatesPath = join(bucketPath, sessionId, 'updates.jsonl');
605
+ const firstPrompt = existsSync(updatesPath) ? readFirstUserChunk(updatesPath) : undefined;
606
+ if (firstPrompt) {
607
+ if (looksLikeBotmuxPrompt(firstPrompt))
608
+ continue;
609
+ if (!title)
610
+ title = truncateTitle(firstPrompt);
611
+ }
612
+ cands.push({
613
+ sessionId,
614
+ cwd: summaryCwd,
615
+ mtimeMs,
616
+ title: title || sessionId.slice(0, 8),
617
+ });
618
+ }
619
+ }
620
+ cands.sort((a, b) => b.mtimeMs - a.mtimeMs);
621
+ return cands.slice(0, limit).map((c) => ({
622
+ cliSessionId: c.sessionId,
623
+ cwd: c.cwd,
624
+ title: c.title,
625
+ lastActivityAt: Math.round(c.mtimeMs),
626
+ }));
627
+ }
628
+ /** Encode helper re-export for adapters that need the bucket name. */
629
+ export { encodeGrokCwd };
630
+ //# sourceMappingURL=grok-transcript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grok-transcript.js","sourceRoot":"","sources":["../../src/services/grok-transcript.ts"],"names":[],"mappings":"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"}