botmux 2.47.0 → 2.47.1

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 (472) hide show
  1. package/README.en.md +10 -5
  2. package/README.md +10 -5
  3. package/dist/adapters/adopt-route.d.ts +63 -0
  4. package/dist/adapters/adopt-route.d.ts.map +1 -0
  5. package/dist/adapters/adopt-route.js +195 -0
  6. package/dist/adapters/adopt-route.js.map +1 -0
  7. package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
  8. package/dist/adapters/backend/tmux-backend.js +11 -0
  9. package/dist/adapters/backend/tmux-backend.js.map +1 -1
  10. package/dist/adapters/backend/tmux-pipe-backend.d.ts +11 -0
  11. package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
  12. package/dist/adapters/backend/tmux-pipe-backend.js +17 -1
  13. package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
  14. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  15. package/dist/adapters/cli/claude-code.js +36 -9
  16. package/dist/adapters/cli/claude-code.js.map +1 -1
  17. package/dist/adapters/cli/coco.d.ts.map +1 -1
  18. package/dist/adapters/cli/coco.js +26 -1
  19. package/dist/adapters/cli/coco.js.map +1 -1
  20. package/dist/adapters/cli/codex-app.d.ts +4 -0
  21. package/dist/adapters/cli/codex-app.d.ts.map +1 -0
  22. package/dist/adapters/cli/codex-app.js +72 -0
  23. package/dist/adapters/cli/codex-app.js.map +1 -0
  24. package/dist/adapters/cli/codex.d.ts.map +1 -1
  25. package/dist/adapters/cli/codex.js +6 -1
  26. package/dist/adapters/cli/codex.js.map +1 -1
  27. package/dist/adapters/cli/cursor.d.ts.map +1 -1
  28. package/dist/adapters/cli/cursor.js +58 -12
  29. package/dist/adapters/cli/cursor.js.map +1 -1
  30. package/dist/adapters/cli/gemini.d.ts.map +1 -1
  31. package/dist/adapters/cli/gemini.js +5 -1
  32. package/dist/adapters/cli/gemini.js.map +1 -1
  33. package/dist/adapters/cli/hermes.d.ts +4 -0
  34. package/dist/adapters/cli/hermes.d.ts.map +1 -0
  35. package/dist/adapters/cli/hermes.js +40 -0
  36. package/dist/adapters/cli/hermes.js.map +1 -0
  37. package/dist/adapters/cli/mira.d.ts +4 -0
  38. package/dist/adapters/cli/mira.d.ts.map +1 -0
  39. package/dist/adapters/cli/mira.js +67 -0
  40. package/dist/adapters/cli/mira.js.map +1 -0
  41. package/dist/adapters/cli/mtr.d.ts +5 -0
  42. package/dist/adapters/cli/mtr.d.ts.map +1 -0
  43. package/dist/adapters/cli/mtr.js +62 -0
  44. package/dist/adapters/cli/mtr.js.map +1 -0
  45. package/dist/adapters/cli/opencode.d.ts.map +1 -1
  46. package/dist/adapters/cli/opencode.js +19 -1
  47. package/dist/adapters/cli/opencode.js.map +1 -1
  48. package/dist/adapters/cli/registry.d.ts +5 -1
  49. package/dist/adapters/cli/registry.d.ts.map +1 -1
  50. package/dist/adapters/cli/registry.js +22 -2
  51. package/dist/adapters/cli/registry.js.map +1 -1
  52. package/dist/adapters/cli/shared-hints.d.ts +1 -1
  53. package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
  54. package/dist/adapters/cli/shared-hints.js +2 -1
  55. package/dist/adapters/cli/shared-hints.js.map +1 -1
  56. package/dist/adapters/cli/types.d.ts +35 -2
  57. package/dist/adapters/cli/types.d.ts.map +1 -1
  58. package/dist/adapters/hook-command.d.ts +18 -0
  59. package/dist/adapters/hook-command.d.ts.map +1 -0
  60. package/dist/adapters/hook-command.js +38 -0
  61. package/dist/adapters/hook-command.js.map +1 -0
  62. package/dist/adapters/hook-installer.d.ts +14 -0
  63. package/dist/adapters/hook-installer.d.ts.map +1 -0
  64. package/dist/adapters/hook-installer.js +192 -0
  65. package/dist/adapters/hook-installer.js.map +1 -0
  66. package/dist/bot-registry.d.ts +59 -0
  67. package/dist/bot-registry.d.ts.map +1 -1
  68. package/dist/bot-registry.js +67 -0
  69. package/dist/bot-registry.js.map +1 -1
  70. package/dist/cli/bots-list-output.d.ts +8 -0
  71. package/dist/cli/bots-list-output.d.ts.map +1 -1
  72. package/dist/cli/bots-list-output.js +9 -0
  73. package/dist/cli/bots-list-output.js.map +1 -1
  74. package/dist/cli.d.ts +15 -1
  75. package/dist/cli.d.ts.map +1 -1
  76. package/dist/cli.js +603 -106
  77. package/dist/cli.js.map +1 -1
  78. package/dist/codex-app-runner.d.ts +3 -0
  79. package/dist/codex-app-runner.d.ts.map +1 -0
  80. package/dist/codex-app-runner.js +512 -0
  81. package/dist/codex-app-runner.js.map +1 -0
  82. package/dist/config.d.ts +11 -2
  83. package/dist/config.d.ts.map +1 -1
  84. package/dist/config.js +17 -4
  85. package/dist/config.js.map +1 -1
  86. package/dist/core/ask-api.d.ts +47 -0
  87. package/dist/core/ask-api.d.ts.map +1 -0
  88. package/dist/core/ask-api.js +139 -0
  89. package/dist/core/ask-api.js.map +1 -0
  90. package/dist/core/ask-args.d.ts +53 -0
  91. package/dist/core/ask-args.d.ts.map +1 -0
  92. package/dist/core/ask-args.js +122 -0
  93. package/dist/core/ask-args.js.map +1 -0
  94. package/dist/core/ask-broker.d.ts +98 -0
  95. package/dist/core/ask-broker.d.ts.map +1 -0
  96. package/dist/core/ask-broker.js +329 -0
  97. package/dist/core/ask-broker.js.map +1 -0
  98. package/dist/core/ask-hook/claude-code.d.ts +50 -0
  99. package/dist/core/ask-hook/claude-code.d.ts.map +1 -0
  100. package/dist/core/ask-hook/claude-code.js +145 -0
  101. package/dist/core/ask-hook/claude-code.js.map +1 -0
  102. package/dist/core/ask-hook/codex.d.ts +43 -0
  103. package/dist/core/ask-hook/codex.d.ts.map +1 -0
  104. package/dist/core/ask-hook/codex.js +69 -0
  105. package/dist/core/ask-hook/codex.js.map +1 -0
  106. package/dist/core/ask-hook/opencode.d.ts +41 -0
  107. package/dist/core/ask-hook/opencode.d.ts.map +1 -0
  108. package/dist/core/ask-hook/opencode.js +108 -0
  109. package/dist/core/ask-hook/opencode.js.map +1 -0
  110. package/dist/core/ask-hook/registry.d.ts +3 -0
  111. package/dist/core/ask-hook/registry.d.ts.map +1 -0
  112. package/dist/core/ask-hook/registry.js +12 -0
  113. package/dist/core/ask-hook/registry.js.map +1 -0
  114. package/dist/core/ask-hook/types.d.ts +26 -0
  115. package/dist/core/ask-hook/types.d.ts.map +1 -0
  116. package/dist/core/ask-hook/types.js +2 -0
  117. package/dist/core/ask-hook/types.js.map +1 -0
  118. package/dist/core/ask-types.d.ts +146 -0
  119. package/dist/core/ask-types.d.ts.map +1 -0
  120. package/dist/core/ask-types.js +18 -0
  121. package/dist/core/ask-types.js.map +1 -0
  122. package/dist/core/command-handler.d.ts +20 -0
  123. package/dist/core/command-handler.d.ts.map +1 -1
  124. package/dist/core/command-handler.js +774 -311
  125. package/dist/core/command-handler.js.map +1 -1
  126. package/dist/core/dashboard-ipc-server.d.ts +2 -0
  127. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  128. package/dist/core/dashboard-ipc-server.js +222 -2
  129. package/dist/core/dashboard-ipc-server.js.map +1 -1
  130. package/dist/core/role-resolver.d.ts +17 -1
  131. package/dist/core/role-resolver.d.ts.map +1 -1
  132. package/dist/core/role-resolver.js +64 -10
  133. package/dist/core/role-resolver.js.map +1 -1
  134. package/dist/core/session-discovery.d.ts.map +1 -1
  135. package/dist/core/session-discovery.js +19 -5
  136. package/dist/core/session-discovery.js.map +1 -1
  137. package/dist/core/session-manager.d.ts +1 -1
  138. package/dist/core/session-manager.d.ts.map +1 -1
  139. package/dist/core/session-manager.js +37 -20
  140. package/dist/core/session-manager.js.map +1 -1
  141. package/dist/core/trigger-session.d.ts +9 -0
  142. package/dist/core/trigger-session.d.ts.map +1 -0
  143. package/dist/core/trigger-session.js +158 -0
  144. package/dist/core/trigger-session.js.map +1 -0
  145. package/dist/core/types.d.ts +5 -0
  146. package/dist/core/types.d.ts.map +1 -1
  147. package/dist/core/types.js.map +1 -1
  148. package/dist/core/worker-pool.d.ts +141 -0
  149. package/dist/core/worker-pool.d.ts.map +1 -1
  150. package/dist/core/worker-pool.js +543 -24
  151. package/dist/core/worker-pool.js.map +1 -1
  152. package/dist/daemon.d.ts.map +1 -1
  153. package/dist/daemon.js +213 -58
  154. package/dist/daemon.js.map +1 -1
  155. package/dist/dashboard/auth.d.ts +6 -1
  156. package/dist/dashboard/auth.d.ts.map +1 -1
  157. package/dist/dashboard/auth.js +9 -1
  158. package/dist/dashboard/auth.js.map +1 -1
  159. package/dist/dashboard/connector-api.d.ts +3 -0
  160. package/dist/dashboard/connector-api.d.ts.map +1 -0
  161. package/dist/dashboard/connector-api.js +351 -0
  162. package/dist/dashboard/connector-api.js.map +1 -0
  163. package/dist/dashboard/federated-group-core.d.ts +54 -0
  164. package/dist/dashboard/federated-group-core.d.ts.map +1 -0
  165. package/dist/dashboard/federated-group-core.js +165 -0
  166. package/dist/dashboard/federated-group-core.js.map +1 -0
  167. package/dist/dashboard/federation-api.d.ts +42 -0
  168. package/dist/dashboard/federation-api.d.ts.map +1 -0
  169. package/dist/dashboard/federation-api.js +408 -0
  170. package/dist/dashboard/federation-api.js.map +1 -0
  171. package/dist/dashboard/federation-spoke-api.d.ts +76 -0
  172. package/dist/dashboard/federation-spoke-api.d.ts.map +1 -0
  173. package/dist/dashboard/federation-spoke-api.js +618 -0
  174. package/dist/dashboard/federation-spoke-api.js.map +1 -0
  175. package/dist/dashboard/team-group.d.ts +18 -0
  176. package/dist/dashboard/team-group.d.ts.map +1 -0
  177. package/dist/dashboard/team-group.js +7 -0
  178. package/dist/dashboard/team-group.js.map +1 -0
  179. package/dist/dashboard/trigger-api.d.ts +13 -0
  180. package/dist/dashboard/trigger-api.d.ts.map +1 -0
  181. package/dist/dashboard/trigger-api.js +77 -0
  182. package/dist/dashboard/trigger-api.js.map +1 -0
  183. package/dist/dashboard/web/app.js +8 -0
  184. package/dist/dashboard/web/app.js.map +1 -1
  185. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  186. package/dist/dashboard/web/bot-defaults.js +205 -21
  187. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  188. package/dist/dashboard/web/connectors.d.ts +2 -0
  189. package/dist/dashboard/web/connectors.d.ts.map +1 -0
  190. package/dist/dashboard/web/connectors.js +187 -0
  191. package/dist/dashboard/web/connectors.js.map +1 -0
  192. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  193. package/dist/dashboard/web/i18n.js +43 -5
  194. package/dist/dashboard/web/i18n.js.map +1 -1
  195. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  196. package/dist/dashboard/web/sessions.js +4 -0
  197. package/dist/dashboard/web/sessions.js.map +1 -1
  198. package/dist/dashboard/web/team-federation.d.ts +3 -0
  199. package/dist/dashboard/web/team-federation.d.ts.map +1 -0
  200. package/dist/dashboard/web/team-federation.js +487 -0
  201. package/dist/dashboard/web/team-federation.js.map +1 -0
  202. package/dist/dashboard/web/workflows.js +3 -3
  203. package/dist/dashboard/web/workflows.js.map +1 -1
  204. package/dist/dashboard/webhook-routes.d.ts +19 -0
  205. package/dist/dashboard/webhook-routes.d.ts.map +1 -0
  206. package/dist/dashboard/webhook-routes.js +321 -0
  207. package/dist/dashboard/webhook-routes.js.map +1 -0
  208. package/dist/dashboard/workflow-api.d.ts +8 -1
  209. package/dist/dashboard/workflow-api.d.ts.map +1 -1
  210. package/dist/dashboard/workflow-api.js +19 -4
  211. package/dist/dashboard/workflow-api.js.map +1 -1
  212. package/dist/dashboard-web/app.js +539 -375
  213. package/dist/dashboard-web/index.html +3 -1
  214. package/dist/dashboard-web/style.css +22 -0
  215. package/dist/dashboard.js +199 -2
  216. package/dist/dashboard.js.map +1 -1
  217. package/dist/i18n/en.d.ts.map +1 -1
  218. package/dist/i18n/en.js +104 -11
  219. package/dist/i18n/en.js.map +1 -1
  220. package/dist/i18n/zh.d.ts.map +1 -1
  221. package/dist/i18n/zh.js +104 -11
  222. package/dist/i18n/zh.js.map +1 -1
  223. package/dist/im/lark/ask-card.d.ts +55 -0
  224. package/dist/im/lark/ask-card.d.ts.map +1 -0
  225. package/dist/im/lark/ask-card.js +328 -0
  226. package/dist/im/lark/ask-card.js.map +1 -0
  227. package/dist/im/lark/card-builder.d.ts +108 -3
  228. package/dist/im/lark/card-builder.d.ts.map +1 -1
  229. package/dist/im/lark/card-builder.js +480 -50
  230. package/dist/im/lark/card-builder.js.map +1 -1
  231. package/dist/im/lark/card-handler.d.ts.map +1 -1
  232. package/dist/im/lark/card-handler.js +241 -18
  233. package/dist/im/lark/card-handler.js.map +1 -1
  234. package/dist/im/lark/client.d.ts +83 -0
  235. package/dist/im/lark/client.d.ts.map +1 -1
  236. package/dist/im/lark/client.js +286 -70
  237. package/dist/im/lark/client.js.map +1 -1
  238. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  239. package/dist/im/lark/event-dispatcher.js +29 -4
  240. package/dist/im/lark/event-dispatcher.js.map +1 -1
  241. package/dist/im/lark/grant-command.d.ts +2 -1
  242. package/dist/im/lark/grant-command.d.ts.map +1 -1
  243. package/dist/im/lark/grant-command.js +3 -2
  244. package/dist/im/lark/grant-command.js.map +1 -1
  245. package/dist/im/lark/identity-cache.d.ts.map +1 -1
  246. package/dist/im/lark/identity-cache.js +3 -3
  247. package/dist/im/lark/identity-cache.js.map +1 -1
  248. package/dist/im/lark/md-card.d.ts +20 -2
  249. package/dist/im/lark/md-card.d.ts.map +1 -1
  250. package/dist/im/lark/md-card.js +49 -17
  251. package/dist/im/lark/md-card.js.map +1 -1
  252. package/dist/im/lark/message-parser.d.ts.map +1 -1
  253. package/dist/im/lark/message-parser.js +87 -31
  254. package/dist/im/lark/message-parser.js.map +1 -1
  255. package/dist/im/lark/workflow-card-handler.d.ts +2 -2
  256. package/dist/im/lark/workflow-card-handler.d.ts.map +1 -1
  257. package/dist/im/lark/workflow-card-handler.js +12 -1
  258. package/dist/im/lark/workflow-card-handler.js.map +1 -1
  259. package/dist/im/lark/workflow-progress-card.d.ts.map +1 -1
  260. package/dist/im/lark/workflow-progress-card.js +53 -0
  261. package/dist/im/lark/workflow-progress-card.js.map +1 -1
  262. package/dist/mira-output.d.ts +3 -0
  263. package/dist/mira-output.d.ts.map +1 -0
  264. package/dist/mira-output.js +136 -0
  265. package/dist/mira-output.js.map +1 -0
  266. package/dist/mira-runner.d.ts +3 -0
  267. package/dist/mira-runner.d.ts.map +1 -0
  268. package/dist/mira-runner.js +534 -0
  269. package/dist/mira-runner.js.map +1 -0
  270. package/dist/services/bot-owner-store.d.ts +28 -0
  271. package/dist/services/bot-owner-store.d.ts.map +1 -0
  272. package/dist/services/bot-owner-store.js +82 -0
  273. package/dist/services/bot-owner-store.js.map +1 -0
  274. package/dist/services/bot-profile-store.d.ts +16 -0
  275. package/dist/services/bot-profile-store.d.ts.map +1 -0
  276. package/dist/services/bot-profile-store.js +98 -0
  277. package/dist/services/bot-profile-store.js.map +1 -0
  278. package/dist/services/brand-store.d.ts +15 -0
  279. package/dist/services/brand-store.d.ts.map +1 -0
  280. package/dist/services/brand-store.js +47 -0
  281. package/dist/services/brand-store.js.map +1 -0
  282. package/dist/services/card-prefs-store.d.ts +20 -0
  283. package/dist/services/card-prefs-store.d.ts.map +1 -0
  284. package/dist/services/card-prefs-store.js +82 -0
  285. package/dist/services/card-prefs-store.js.map +1 -0
  286. package/dist/services/codex-bridge-queue.d.ts +1 -0
  287. package/dist/services/codex-bridge-queue.d.ts.map +1 -1
  288. package/dist/services/codex-bridge-queue.js +23 -0
  289. package/dist/services/codex-bridge-queue.js.map +1 -1
  290. package/dist/services/codex-transcript.d.ts +1 -0
  291. package/dist/services/codex-transcript.d.ts.map +1 -1
  292. package/dist/services/codex-transcript.js.map +1 -1
  293. package/dist/services/connector-store.d.ts +58 -0
  294. package/dist/services/connector-store.d.ts.map +1 -0
  295. package/dist/services/connector-store.js +79 -0
  296. package/dist/services/connector-store.js.map +1 -0
  297. package/dist/services/deployment-identity.d.ts +22 -0
  298. package/dist/services/deployment-identity.d.ts.map +1 -0
  299. package/dist/services/deployment-identity.js +67 -0
  300. package/dist/services/deployment-identity.js.map +1 -0
  301. package/dist/services/federation-membership-store.d.ts +23 -0
  302. package/dist/services/federation-membership-store.d.ts.map +1 -0
  303. package/dist/services/federation-membership-store.js +66 -0
  304. package/dist/services/federation-membership-store.js.map +1 -0
  305. package/dist/services/federation-roster.d.ts +54 -0
  306. package/dist/services/federation-roster.d.ts.map +1 -0
  307. package/dist/services/federation-roster.js +51 -0
  308. package/dist/services/federation-roster.js.map +1 -0
  309. package/dist/services/federation-store.d.ts +76 -0
  310. package/dist/services/federation-store.d.ts.map +1 -0
  311. package/dist/services/federation-store.js +133 -0
  312. package/dist/services/federation-store.js.map +1 -0
  313. package/dist/services/grant-store.d.ts +12 -2
  314. package/dist/services/grant-store.d.ts.map +1 -1
  315. package/dist/services/grant-store.js +51 -4
  316. package/dist/services/grant-store.js.map +1 -1
  317. package/dist/services/group-creator.d.ts +10 -0
  318. package/dist/services/group-creator.d.ts.map +1 -1
  319. package/dist/services/group-creator.js +26 -1
  320. package/dist/services/group-creator.js.map +1 -1
  321. package/dist/services/groups-store.d.ts +30 -0
  322. package/dist/services/groups-store.d.ts.map +1 -1
  323. package/dist/services/groups-store.js +85 -12
  324. package/dist/services/groups-store.js.map +1 -1
  325. package/dist/services/hermes-transcript.d.ts +7 -0
  326. package/dist/services/hermes-transcript.d.ts.map +1 -0
  327. package/dist/services/hermes-transcript.js +117 -0
  328. package/dist/services/hermes-transcript.js.map +1 -0
  329. package/dist/services/invite-store.d.ts +28 -0
  330. package/dist/services/invite-store.d.ts.map +1 -0
  331. package/dist/services/invite-store.js +85 -0
  332. package/dist/services/invite-store.js.map +1 -0
  333. package/dist/services/pairing-store.d.ts +47 -0
  334. package/dist/services/pairing-store.d.ts.map +1 -0
  335. package/dist/services/pairing-store.js +132 -0
  336. package/dist/services/pairing-store.js.map +1 -0
  337. package/dist/services/project-scanner.d.ts +10 -0
  338. package/dist/services/project-scanner.d.ts.map +1 -1
  339. package/dist/services/project-scanner.js +11 -0
  340. package/dist/services/project-scanner.js.map +1 -1
  341. package/dist/services/relay-picker.d.ts +22 -0
  342. package/dist/services/relay-picker.d.ts.map +1 -0
  343. package/dist/services/relay-picker.js +62 -0
  344. package/dist/services/relay-picker.js.map +1 -0
  345. package/dist/services/send-policy.d.ts +55 -0
  346. package/dist/services/send-policy.d.ts.map +1 -0
  347. package/dist/services/send-policy.js +47 -0
  348. package/dist/services/send-policy.js.map +1 -0
  349. package/dist/services/session-store.js +1 -1
  350. package/dist/services/session-store.js.map +1 -1
  351. package/dist/services/team-roster.d.ts +38 -0
  352. package/dist/services/team-roster.d.ts.map +1 -0
  353. package/dist/services/team-roster.js +82 -0
  354. package/dist/services/team-roster.js.map +1 -0
  355. package/dist/services/team-store.d.ts +54 -0
  356. package/dist/services/team-store.d.ts.map +1 -0
  357. package/dist/services/team-store.js +156 -0
  358. package/dist/services/team-store.js.map +1 -0
  359. package/dist/services/trigger-log-store.d.ts +46 -0
  360. package/dist/services/trigger-log-store.d.ts.map +1 -0
  361. package/dist/services/trigger-log-store.js +132 -0
  362. package/dist/services/trigger-log-store.js.map +1 -0
  363. package/dist/services/trigger-types.d.ts +57 -0
  364. package/dist/services/trigger-types.d.ts.map +1 -0
  365. package/dist/services/trigger-types.js +28 -0
  366. package/dist/services/trigger-types.js.map +1 -0
  367. package/dist/services/webhook-key.d.ts +16 -0
  368. package/dist/services/webhook-key.d.ts.map +1 -0
  369. package/dist/services/webhook-key.js +123 -0
  370. package/dist/services/webhook-key.js.map +1 -0
  371. package/dist/services/webhook-lifecycle-extractors.d.ts +15 -0
  372. package/dist/services/webhook-lifecycle-extractors.d.ts.map +1 -0
  373. package/dist/services/webhook-lifecycle-extractors.js +59 -0
  374. package/dist/services/webhook-lifecycle-extractors.js.map +1 -0
  375. package/dist/services/webhook-lifecycle-store.d.ts +45 -0
  376. package/dist/services/webhook-lifecycle-store.d.ts.map +1 -0
  377. package/dist/services/webhook-lifecycle-store.js +159 -0
  378. package/dist/services/webhook-lifecycle-store.js.map +1 -0
  379. package/dist/setup/bot-config-editor.d.ts +8 -1
  380. package/dist/setup/bot-config-editor.d.ts.map +1 -1
  381. package/dist/setup/bot-config-editor.js +20 -2
  382. package/dist/setup/bot-config-editor.js.map +1 -1
  383. package/dist/setup/ensure-tmux.d.ts +0 -22
  384. package/dist/setup/ensure-tmux.d.ts.map +1 -1
  385. package/dist/setup/ensure-tmux.js +25 -1
  386. package/dist/setup/ensure-tmux.js.map +1 -1
  387. package/dist/setup/verify-permissions.d.ts.map +1 -1
  388. package/dist/setup/verify-permissions.js +15 -1
  389. package/dist/setup/verify-permissions.js.map +1 -1
  390. package/dist/skills/definitions.d.ts +2 -0
  391. package/dist/skills/definitions.d.ts.map +1 -1
  392. package/dist/skills/definitions.js +178 -12
  393. package/dist/skills/definitions.js.map +1 -1
  394. package/dist/skills/installer.d.ts +34 -0
  395. package/dist/skills/installer.d.ts.map +1 -1
  396. package/dist/skills/installer.js +119 -2
  397. package/dist/skills/installer.js.map +1 -1
  398. package/dist/types.d.ts +25 -0
  399. package/dist/types.d.ts.map +1 -1
  400. package/dist/utils/bot-routing.d.ts +50 -0
  401. package/dist/utils/bot-routing.d.ts.map +1 -1
  402. package/dist/utils/bot-routing.js +83 -0
  403. package/dist/utils/bot-routing.js.map +1 -1
  404. package/dist/utils/daemon-discovery.d.ts +11 -0
  405. package/dist/utils/daemon-discovery.d.ts.map +1 -0
  406. package/dist/utils/daemon-discovery.js +59 -0
  407. package/dist/utils/daemon-discovery.js.map +1 -0
  408. package/dist/utils/user-token.d.ts.map +1 -1
  409. package/dist/utils/user-token.js +0 -2
  410. package/dist/utils/user-token.js.map +1 -1
  411. package/dist/worker.js +198 -27
  412. package/dist/worker.js.map +1 -1
  413. package/dist/workflows/attempt-resume.d.ts.map +1 -1
  414. package/dist/workflows/attempt-resume.js +2 -2
  415. package/dist/workflows/attempt-resume.js.map +1 -1
  416. package/dist/workflows/definition.d.ts +412 -9
  417. package/dist/workflows/definition.d.ts.map +1 -1
  418. package/dist/workflows/definition.js +238 -3
  419. package/dist/workflows/definition.js.map +1 -1
  420. package/dist/workflows/events/payloads.d.ts +114 -11
  421. package/dist/workflows/events/payloads.d.ts.map +1 -1
  422. package/dist/workflows/events/payloads.js +46 -0
  423. package/dist/workflows/events/payloads.js.map +1 -1
  424. package/dist/workflows/events/replay.d.ts +21 -0
  425. package/dist/workflows/events/replay.d.ts.map +1 -1
  426. package/dist/workflows/events/replay.js +103 -0
  427. package/dist/workflows/events/replay.js.map +1 -1
  428. package/dist/workflows/events/schema.d.ts +1301 -606
  429. package/dist/workflows/events/schema.d.ts.map +1 -1
  430. package/dist/workflows/events/schema.js +37 -1
  431. package/dist/workflows/events/schema.js.map +1 -1
  432. package/dist/workflows/events/types.d.ts +5 -1
  433. package/dist/workflows/events/types.d.ts.map +1 -1
  434. package/dist/workflows/loader.d.ts +14 -0
  435. package/dist/workflows/loader.d.ts.map +1 -1
  436. package/dist/workflows/loader.js +27 -0
  437. package/dist/workflows/loader.js.map +1 -1
  438. package/dist/workflows/loop.js +58 -0
  439. package/dist/workflows/loop.js.map +1 -1
  440. package/dist/workflows/ops-projection.d.ts +58 -0
  441. package/dist/workflows/ops-projection.d.ts.map +1 -1
  442. package/dist/workflows/ops-projection.js +74 -0
  443. package/dist/workflows/ops-projection.js.map +1 -1
  444. package/dist/workflows/orchestrator.d.ts +65 -1
  445. package/dist/workflows/orchestrator.d.ts.map +1 -1
  446. package/dist/workflows/orchestrator.js +486 -74
  447. package/dist/workflows/orchestrator.js.map +1 -1
  448. package/dist/workflows/output-binding.d.ts +8 -1
  449. package/dist/workflows/output-binding.d.ts.map +1 -1
  450. package/dist/workflows/output-binding.js +75 -11
  451. package/dist/workflows/output-binding.js.map +1 -1
  452. package/dist/workflows/runtime.d.ts +1 -1
  453. package/dist/workflows/runtime.d.ts.map +1 -1
  454. package/dist/workflows/runtime.js +39 -4
  455. package/dist/workflows/runtime.js.map +1 -1
  456. package/dist/workflows/trigger-from-envelope.d.ts +13 -0
  457. package/dist/workflows/trigger-from-envelope.d.ts.map +1 -0
  458. package/dist/workflows/trigger-from-envelope.js +67 -0
  459. package/dist/workflows/trigger-from-envelope.js.map +1 -0
  460. package/dist/workflows/wait.d.ts +23 -2
  461. package/dist/workflows/wait.d.ts.map +1 -1
  462. package/dist/workflows/wait.js +39 -17
  463. package/dist/workflows/wait.js.map +1 -1
  464. package/package.json +1 -1
  465. package/dist/services/feishu-task-client.d.ts +0 -28
  466. package/dist/services/feishu-task-client.d.ts.map +0 -1
  467. package/dist/services/feishu-task-client.js +0 -123
  468. package/dist/services/feishu-task-client.js.map +0 -1
  469. package/dist/services/task-store.d.ts +0 -37
  470. package/dist/services/task-store.d.ts.map +0 -1
  471. package/dist/services/task-store.js +0 -115
  472. package/dist/services/task-store.js.map +0 -1
@@ -0,0 +1,136 @@
1
+ function stripLineEnd(line) {
2
+ let end = line.length;
3
+ while (end > 0 && (line.charCodeAt(end - 1) === 32 || line.charCodeAt(end - 1) === 9))
4
+ end--;
5
+ return line.slice(0, end);
6
+ }
7
+ function collapseBlankLines(text) {
8
+ const lines = text.replaceAll('\r\n', '\n').split('\n').map(stripLineEnd);
9
+ const out = [];
10
+ let blank = false;
11
+ for (const line of lines) {
12
+ if (line.trim().length === 0) {
13
+ if (!blank)
14
+ out.push('');
15
+ blank = true;
16
+ }
17
+ else {
18
+ out.push(line);
19
+ blank = false;
20
+ }
21
+ }
22
+ return out.join('\n').trim();
23
+ }
24
+ function nextCisCtrlOpen(lower, from) {
25
+ const raw = lower.indexOf('<cis-ctrl', from);
26
+ const escaped = lower.indexOf('&lt;cis-ctrl', from);
27
+ if (raw < 0 && escaped < 0)
28
+ return undefined;
29
+ if (escaped < 0 || (raw >= 0 && raw < escaped))
30
+ return { index: raw, close: '</cis-ctrl>' };
31
+ return { index: escaped, close: '&lt;/cis-ctrl&gt;' };
32
+ }
33
+ function consumeFollowingOwnLineBreak(text, from, out) {
34
+ let pos = from;
35
+ while (text[pos] === ' ' || text[pos] === '\t')
36
+ pos++;
37
+ if (out.length > 0 && !out.endsWith('\n'))
38
+ return pos;
39
+ if (text[pos] === '\r' && text[pos + 1] === '\n')
40
+ return pos + 2;
41
+ if (text[pos] === '\n')
42
+ return pos + 1;
43
+ return pos;
44
+ }
45
+ function stripCisCtrlBlocks(text) {
46
+ const lower = text.toLowerCase();
47
+ let out = '';
48
+ let pos = 0;
49
+ for (;;) {
50
+ const open = nextCisCtrlOpen(lower, pos);
51
+ if (!open)
52
+ return out + text.slice(pos);
53
+ out += text.slice(pos, open.index);
54
+ const close = lower.indexOf(open.close, open.index);
55
+ if (close < 0)
56
+ return out;
57
+ pos = consumeFollowingOwnLineBreak(text, close + open.close.length, out);
58
+ }
59
+ }
60
+ export function sanitizeMiraFinalText(text) {
61
+ return collapseBlankLines(stripCisCtrlBlocks(text));
62
+ }
63
+ function parseJsonMaybe(value) {
64
+ try {
65
+ return JSON.parse(value);
66
+ }
67
+ catch {
68
+ return undefined;
69
+ }
70
+ }
71
+ function textFromContentParts(value) {
72
+ if (typeof value === 'string')
73
+ return value;
74
+ if (Array.isArray(value)) {
75
+ const parts = value
76
+ .map(part => {
77
+ if (typeof part === 'string')
78
+ return part;
79
+ if (!part || typeof part !== 'object')
80
+ return '';
81
+ const obj = part;
82
+ return typeof obj.text === 'string' ? obj.text : textFromContentParts(obj.content) ?? '';
83
+ })
84
+ .filter(Boolean);
85
+ return parts.length > 0 ? parts.join('') : undefined;
86
+ }
87
+ if (!value || typeof value !== 'object')
88
+ return undefined;
89
+ const obj = value;
90
+ if (typeof obj.text === 'string')
91
+ return obj.text;
92
+ if (typeof obj.content === 'string')
93
+ return obj.content;
94
+ return textFromContentParts(obj.content);
95
+ }
96
+ function assistantTextFromValue(value) {
97
+ if (!value || typeof value !== 'object')
98
+ return undefined;
99
+ if (Array.isArray(value)) {
100
+ for (let i = value.length - 1; i >= 0; i--) {
101
+ const text = assistantTextFromValue(value[i]);
102
+ if (text)
103
+ return text;
104
+ }
105
+ return undefined;
106
+ }
107
+ const obj = value;
108
+ const nestedMessage = obj.message;
109
+ if (nestedMessage && typeof nestedMessage === 'object') {
110
+ const nested = nestedMessage;
111
+ if (nested.role === 'assistant')
112
+ return textFromContentParts(nested.content);
113
+ }
114
+ if (obj.role === 'assistant')
115
+ return textFromContentParts(obj.content);
116
+ return undefined;
117
+ }
118
+ export function extractMiraHistoryFinalText(payload) {
119
+ const messages = payload?.data?.messages;
120
+ if (!Array.isArray(messages))
121
+ return undefined;
122
+ for (let i = messages.length - 1; i >= 0; i--) {
123
+ const message = messages[i];
124
+ if (!message || message.sender !== 2)
125
+ continue;
126
+ const content = typeof message.content === 'string'
127
+ ? parseJsonMaybe(message.content) ?? message.content
128
+ : message.content;
129
+ const text = assistantTextFromValue(content) ?? textFromContentParts(content);
130
+ const sanitized = text ? sanitizeMiraFinalText(text) : '';
131
+ if (sanitized)
132
+ return sanitized;
133
+ }
134
+ return undefined;
135
+ }
136
+ //# sourceMappingURL=mira-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mira-output.js","sourceRoot":"","sources":["../src/mira-output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=mira-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mira-runner.d.ts","sourceRoot":"","sources":["../src/mira-runner.ts"],"names":[],"mappings":""}
@@ -0,0 +1,534 @@
1
+ #!/usr/bin/env node
2
+ import { execFileSync } from 'node:child_process';
3
+ import { existsSync } from 'node:fs';
4
+ import { homedir } from 'node:os';
5
+ import { join } from 'node:path';
6
+ import { Buffer } from 'node:buffer';
7
+ import { extractMiraHistoryFinalText, sanitizeMiraFinalText } from './mira-output.js';
8
+ const MIRA_DOMAIN = 'https://mira.bytedance.com';
9
+ const API_BASE_URL = process.env.MIRA_API_BASE_URL ?? `${MIRA_DOMAIN}/mira/api/v1`;
10
+ const MODEL_METADATA_URL = process.env.MIRA_MODEL_METADATA_URL ?? `${MIRA_DOMAIN}/api/v1/model/metadata`;
11
+ const DEFAULT_DATA_SOURCES = ['manus'];
12
+ const LAST_ROUND_RETRY_DELAYS_MS = [0, 250, 750];
13
+ const COOKIE_DB_PATH = process.env.MIRA_COOKIE_DB
14
+ ?? join(homedir(), 'Library', 'Application Support', 'mira', 'Cookies');
15
+ const OSC_PREFIX = '\x1b]777;botmux:';
16
+ const OSC_END = '\x07';
17
+ function parseArgs(argv) {
18
+ const out = { sessionId: '' };
19
+ for (let i = 0; i < argv.length; i++) {
20
+ const key = argv[i];
21
+ const val = argv[i + 1];
22
+ if (key === '--session-id' && val !== undefined) {
23
+ out.sessionId = val;
24
+ i++;
25
+ }
26
+ else if (key === '--mira-session-id' && val !== undefined) {
27
+ out.miraSessionId = val;
28
+ i++;
29
+ }
30
+ else if (key === '--model' && val !== undefined) {
31
+ out.model = val;
32
+ i++;
33
+ }
34
+ else if (key === '--bot-name' && val !== undefined) {
35
+ out.botName = val;
36
+ i++;
37
+ }
38
+ else if (key === '--bot-open-id' && val !== undefined) {
39
+ out.botOpenId = val;
40
+ i++;
41
+ }
42
+ else if (key === '--locale' && val !== undefined) {
43
+ out.locale = val;
44
+ i++;
45
+ }
46
+ }
47
+ if (!out.sessionId)
48
+ throw new Error('--session-id is required');
49
+ return out;
50
+ }
51
+ function b64Json(value) {
52
+ return Buffer.from(JSON.stringify(value), 'utf8').toString('base64');
53
+ }
54
+ function emitMarker(kind, payload) {
55
+ process.stdout.write(`${OSC_PREFIX}${kind}:${b64Json(payload)}${OSC_END}`);
56
+ }
57
+ function writeLine(text = '') {
58
+ process.stdout.write(text + '\n');
59
+ }
60
+ function prompt() {
61
+ process.stdout.write('› ');
62
+ }
63
+ function errorMessage(err) {
64
+ if (err instanceof Error)
65
+ return err.message;
66
+ return String(err);
67
+ }
68
+ function sleep(ms) {
69
+ return new Promise(resolve => setTimeout(resolve, ms));
70
+ }
71
+ function runSqliteCookieQuery(dbPath) {
72
+ const sql = [
73
+ "select name || '=' || value",
74
+ 'from cookies',
75
+ "where value != ''",
76
+ " and (host_key = 'mira.bytedance.com' or host_key = '.mira.bytedance.com' or host_key like '%.mira.bytedance.com')",
77
+ "order by case when name = 'mira_session' then 0 else 1 end",
78
+ ].join(' ');
79
+ return execFileSync('sqlite3', [dbPath, sql], {
80
+ encoding: 'utf8',
81
+ stdio: ['ignore', 'pipe', 'pipe'],
82
+ timeout: 5_000,
83
+ });
84
+ }
85
+ function readCookieHeader() {
86
+ if (process.env.MIRA_COOKIE_HEADER?.trim())
87
+ return process.env.MIRA_COOKIE_HEADER.trim();
88
+ if (process.env.MIRA_SESSION?.trim())
89
+ return `mira_session=${process.env.MIRA_SESSION.trim()}`;
90
+ if (!existsSync(COOKIE_DB_PATH)) {
91
+ throw new Error(`Mira cookie database not found at ${COOKIE_DB_PATH}. Open Mira.app and sign in, or set MIRA_COOKIE_HEADER.`);
92
+ }
93
+ let output;
94
+ try {
95
+ output = runSqliteCookieQuery(COOKIE_DB_PATH);
96
+ }
97
+ catch (err) {
98
+ const detail = err?.stderr ? String(err.stderr).trim() : errorMessage(err);
99
+ throw new Error(`Failed to read Mira cookies via sqlite3: ${detail}`);
100
+ }
101
+ const cookies = output.split('\n').map(s => s.trim()).filter(Boolean);
102
+ if (!cookies.some(c => c.startsWith('mira_session='))) {
103
+ throw new Error('Mira login cookie mira_session was not found. Open Mira.app and sign in, then try again.');
104
+ }
105
+ return cookies.join('; ');
106
+ }
107
+ function parseDataSources() {
108
+ const raw = process.env.MIRA_DATA_SOURCES?.trim();
109
+ if (!raw)
110
+ return DEFAULT_DATA_SOURCES;
111
+ try {
112
+ const parsed = JSON.parse(raw);
113
+ if (Array.isArray(parsed))
114
+ return parsed.map(String).filter(Boolean);
115
+ }
116
+ catch { /* fall through to CSV */ }
117
+ return raw.split(',').map(s => s.trim()).filter(Boolean);
118
+ }
119
+ function boolEnv(name, fallback) {
120
+ const raw = process.env[name]?.trim().toLowerCase();
121
+ if (!raw)
122
+ return fallback;
123
+ return raw === '1' || raw === 'true' || raw === 'yes' || raw === 'on';
124
+ }
125
+ function extractMiraMessage(data) {
126
+ if (data === '[DONE]')
127
+ return { event: 'finish', data: {} };
128
+ try {
129
+ const outer = JSON.parse(data);
130
+ const message = outer.Message;
131
+ if (typeof message === 'string')
132
+ return JSON.parse(message);
133
+ if (message && typeof message === 'object')
134
+ return message;
135
+ }
136
+ catch {
137
+ return undefined;
138
+ }
139
+ return undefined;
140
+ }
141
+ function sseDataLines(block) {
142
+ return block
143
+ .split(/\r?\n/)
144
+ .filter(line => line.startsWith('data:'))
145
+ .map(line => line.slice(5).trimStart());
146
+ }
147
+ function findSseSeparator(buffer) {
148
+ const lf = buffer.indexOf('\n\n');
149
+ const crlf = buffer.indexOf('\r\n\r\n');
150
+ if (lf < 0 && crlf < 0)
151
+ return undefined;
152
+ if (lf < 0)
153
+ return { index: crlf, length: 4 };
154
+ if (crlf < 0)
155
+ return { index: lf, length: 2 };
156
+ return lf < crlf ? { index: lf, length: 2 } : { index: crlf, length: 4 };
157
+ }
158
+ function extractText(value) {
159
+ if (typeof value === 'string')
160
+ return value;
161
+ if (!value || typeof value !== 'object')
162
+ return undefined;
163
+ const obj = value;
164
+ for (const key of ['result', 'text', 'content', 'answer', 'delta']) {
165
+ const nested = obj[key];
166
+ if (typeof nested === 'string')
167
+ return nested;
168
+ }
169
+ if (obj.content && typeof obj.content === 'object') {
170
+ const nested = extractText(obj.content);
171
+ if (nested)
172
+ return nested;
173
+ }
174
+ return undefined;
175
+ }
176
+ function finalTextFromMessage(message) {
177
+ if (message.event !== 'content')
178
+ return undefined;
179
+ const data = message.data;
180
+ if (!data || typeof data !== 'object')
181
+ return extractText(data);
182
+ const obj = data;
183
+ return extractText(obj.content ?? obj);
184
+ }
185
+ function titleFromMessage(message) {
186
+ if (message.event !== 'title')
187
+ return undefined;
188
+ return extractText(message.data);
189
+ }
190
+ class MiraClient {
191
+ args;
192
+ currentSessionId;
193
+ cookieHeader;
194
+ explicitModel;
195
+ resolvedModel;
196
+ dataSources = parseDataSources();
197
+ constructor(args) {
198
+ this.args = args;
199
+ this.currentSessionId = args.miraSessionId;
200
+ this.explicitModel = process.env.MIRA_MODEL?.trim() || args.model?.trim() || undefined;
201
+ }
202
+ async ensureSession() {
203
+ if (this.currentSessionId) {
204
+ emitMarker('thread', { threadId: this.currentSessionId });
205
+ return this.currentSessionId;
206
+ }
207
+ const model = await this.resolveModel();
208
+ const sessionProperties = {
209
+ topic: `botmux ${this.args.sessionId.slice(0, 8)}`,
210
+ dataSource: '360_performance',
211
+ dataSources: this.dataSources,
212
+ model,
213
+ };
214
+ const payload = {
215
+ sessionProperties: {
216
+ ...sessionProperties,
217
+ },
218
+ };
219
+ const response = await fetch(`${API_BASE_URL}/chat/create`, {
220
+ method: 'POST',
221
+ headers: await this.headers(),
222
+ body: JSON.stringify(payload),
223
+ });
224
+ const text = await response.text();
225
+ if (!response.ok)
226
+ throw new Error(`Mira chat/create failed (${response.status}): ${text.slice(0, 500)}`);
227
+ let parsed;
228
+ try {
229
+ parsed = JSON.parse(text);
230
+ }
231
+ catch {
232
+ throw new Error(`Mira chat/create returned non-JSON: ${text.slice(0, 500)}`);
233
+ }
234
+ if (parsed.code && parsed.code !== 0) {
235
+ throw new Error(`Mira API error ${parsed.code}: ${parsed.msg ?? parsed.message ?? 'unknown'}`);
236
+ }
237
+ const sessionId = parsed.sessionItem?.sessionId;
238
+ if (typeof sessionId !== 'string' || !sessionId) {
239
+ throw new Error(`Mira chat/create response did not include sessionItem.sessionId: ${text.slice(0, 500)}`);
240
+ }
241
+ this.currentSessionId = sessionId;
242
+ emitMarker('thread', { threadId: sessionId });
243
+ return sessionId;
244
+ }
245
+ async complete(content) {
246
+ const sessionId = await this.ensureSession();
247
+ const model = await this.resolveModel();
248
+ const startedAt = Date.now();
249
+ const online = boolEnv('MIRA_ONLINE', true);
250
+ const payload = {
251
+ sessionId,
252
+ content,
253
+ messageType: 1,
254
+ summaryAgent: model,
255
+ dataSources: this.dataSources,
256
+ comprehensive: 1,
257
+ config: {
258
+ online,
259
+ mode: process.env.MIRA_MODE || 'quick',
260
+ tool_list: online
261
+ ? [
262
+ { name: 'Web', id: 'Web', scope: 'GLOBAL' },
263
+ { name: 'KnowledgeQASearch', id: 'KnowledgeQASearch', scope: 'GLOBAL' },
264
+ ]
265
+ : [],
266
+ updatedAt: startedAt,
267
+ },
268
+ };
269
+ const response = await fetch(`${API_BASE_URL}/chat/completion`, {
270
+ method: 'POST',
271
+ headers: await this.headers({ Accept: 'text/event-stream' }),
272
+ body: JSON.stringify(payload),
273
+ });
274
+ if (!response.ok || !response.body) {
275
+ const text = await response.text().catch(() => '');
276
+ throw new Error(`Mira chat/completion failed (${response.status}): ${text.slice(0, 500)}`);
277
+ }
278
+ const reader = response.body.getReader();
279
+ const decoder = new TextDecoder();
280
+ let buffer = '';
281
+ let finalText = '';
282
+ let seenTitle = false;
283
+ let done = false;
284
+ while (!done) {
285
+ const chunk = await reader.read();
286
+ if (chunk.done)
287
+ break;
288
+ buffer += decoder.decode(chunk.value, { stream: true });
289
+ for (;;) {
290
+ const sep = findSseSeparator(buffer);
291
+ if (!sep)
292
+ break;
293
+ const block = buffer.slice(0, sep.index);
294
+ buffer = buffer.slice(sep.index + sep.length);
295
+ for (const data of sseDataLines(block)) {
296
+ const message = extractMiraMessage(data);
297
+ if (!message)
298
+ continue;
299
+ if (message.event === 'finish') {
300
+ done = true;
301
+ break;
302
+ }
303
+ const title = titleFromMessage(message);
304
+ if (title && !seenTitle) {
305
+ seenTitle = true;
306
+ writeLine(`[mira] ${title}`);
307
+ }
308
+ const errorValue = message.error ?? message.data?.error;
309
+ if (errorValue)
310
+ throw new Error(`Mira stream error: ${JSON.stringify(errorValue)}`);
311
+ const text = finalTextFromMessage(message);
312
+ if (text)
313
+ finalText = text;
314
+ }
315
+ if (done)
316
+ break;
317
+ }
318
+ }
319
+ try {
320
+ await reader.cancel();
321
+ }
322
+ catch { /* stream already closed */ }
323
+ const sanitizedFinalText = sanitizeMiraFinalText(finalText);
324
+ return {
325
+ finalText: sanitizedFinalText || await this.fetchLastRoundFinalText(sessionId).catch(() => '') || '',
326
+ turnId: `mira-${startedAt}`,
327
+ };
328
+ }
329
+ async headers(extraHeaders = {}) {
330
+ if (!this.cookieHeader)
331
+ this.cookieHeader = readCookieHeader();
332
+ return {
333
+ 'Content-Type': 'application/json',
334
+ Cookie: this.cookieHeader,
335
+ ...extraHeaders,
336
+ };
337
+ }
338
+ async resolveModel() {
339
+ if (this.resolvedModel)
340
+ return this.resolvedModel;
341
+ if (this.explicitModel) {
342
+ this.resolvedModel = this.explicitModel;
343
+ return this.resolvedModel;
344
+ }
345
+ const settingsModel = await this.fetchUserDefaultModel().catch(err => {
346
+ writeLine(`[mira] failed to read Mira default model: ${errorMessage(err)}`);
347
+ return undefined;
348
+ });
349
+ if (settingsModel) {
350
+ this.resolvedModel = settingsModel;
351
+ return settingsModel;
352
+ }
353
+ const metadataModel = await this.fetchMetadataDefaultModel().catch(err => {
354
+ writeLine(`[mira] failed to read Mira model metadata: ${errorMessage(err)}`);
355
+ return undefined;
356
+ });
357
+ if (metadataModel) {
358
+ this.resolvedModel = metadataModel;
359
+ return metadataModel;
360
+ }
361
+ throw new Error('Unable to determine Mira model. Set a Default Model in Mira.app settings, or set MIRA_MODEL.');
362
+ }
363
+ async fetchUserDefaultModel() {
364
+ const json = await this.fetchJson(`${API_BASE_URL}/user/settings/get`, 'Mira user settings');
365
+ if (json.code && json.code !== 0) {
366
+ throw new Error(`API error ${json.code}: ${json.msg ?? json.message ?? 'unknown'}`);
367
+ }
368
+ const model = json.data?.settings?.default_model;
369
+ return typeof model === 'string' && model.trim() ? model.trim() : undefined;
370
+ }
371
+ async fetchMetadataDefaultModel() {
372
+ const json = await this.fetchJson(MODEL_METADATA_URL, 'Mira model metadata');
373
+ if (json.code && json.code !== 0) {
374
+ throw new Error(`API error ${json.code}: ${json.msg ?? json.message ?? 'unknown'}`);
375
+ }
376
+ const models = Array.isArray(json.data?.models) ? json.data.models : [];
377
+ const enabled = models.filter((model) => model && model.enable !== false);
378
+ const selected = enabled.find((model) => model.default === true) ?? enabled[0];
379
+ const key = selected?.key;
380
+ return typeof key === 'string' && key.trim() ? key.trim() : undefined;
381
+ }
382
+ async fetchLastRoundFinalText(sessionId) {
383
+ for (const delay of LAST_ROUND_RETRY_DELAYS_MS) {
384
+ if (delay > 0)
385
+ await sleep(delay);
386
+ const text = await this.fetchLastRoundFinalTextOnce(sessionId).catch(() => undefined);
387
+ if (text)
388
+ return text;
389
+ }
390
+ return undefined;
391
+ }
392
+ async fetchLastRoundFinalTextOnce(sessionId) {
393
+ const url = `${API_BASE_URL}/chat/messages/round/last?session_id=${encodeURIComponent(sessionId)}`;
394
+ const json = await this.fetchJson(url, 'Mira last round messages');
395
+ if (json.code && json.code !== 0)
396
+ return undefined;
397
+ return extractMiraHistoryFinalText(json);
398
+ }
399
+ async fetchJson(url, label) {
400
+ const response = await fetch(url, {
401
+ method: 'GET',
402
+ headers: await this.headers(),
403
+ });
404
+ const text = await response.text();
405
+ if (!response.ok)
406
+ throw new Error(`${label} failed (${response.status}): ${text.slice(0, 500)}`);
407
+ try {
408
+ return JSON.parse(text);
409
+ }
410
+ catch {
411
+ throw new Error(`${label} returned non-JSON: ${text.slice(0, 500)}`);
412
+ }
413
+ }
414
+ }
415
+ let args;
416
+ try {
417
+ args = parseArgs(process.argv.slice(2));
418
+ }
419
+ catch (err) {
420
+ console.error(errorMessage(err));
421
+ process.exit(2);
422
+ }
423
+ const client = new MiraClient(args);
424
+ const queue = [];
425
+ let inputBuffer = '';
426
+ let processing = false;
427
+ async function runTurn(content) {
428
+ const startedAtMs = Date.now();
429
+ writeLine();
430
+ writeLine('[user]');
431
+ writeLine(content);
432
+ writeLine();
433
+ writeLine('[mira] thinking...');
434
+ const result = await client.complete(content);
435
+ const completedAtMs = Date.now();
436
+ if (result.finalText) {
437
+ writeLine();
438
+ writeLine(result.finalText);
439
+ emitMarker('final', {
440
+ turnId: result.turnId,
441
+ content: result.finalText,
442
+ startedAtMs,
443
+ completedAtMs,
444
+ });
445
+ }
446
+ else {
447
+ writeLine('[mira] completed without text output.');
448
+ }
449
+ }
450
+ async function drainQueue() {
451
+ if (processing)
452
+ return;
453
+ processing = true;
454
+ try {
455
+ while (queue.length > 0) {
456
+ const next = queue.shift();
457
+ try {
458
+ await runTurn(next);
459
+ }
460
+ catch (err) {
461
+ const now = Date.now();
462
+ const message = `Mira runner error: ${errorMessage(err)}`;
463
+ writeLine(message);
464
+ emitMarker('final', {
465
+ turnId: `mira-error-${now}`,
466
+ content: message,
467
+ startedAtMs: now,
468
+ completedAtMs: now,
469
+ });
470
+ }
471
+ prompt();
472
+ }
473
+ }
474
+ finally {
475
+ processing = false;
476
+ }
477
+ }
478
+ function enqueueLine(line) {
479
+ const trimmed = line.trim();
480
+ if (!trimmed)
481
+ return;
482
+ if (trimmed.startsWith('::botmux-mira:')) {
483
+ const encoded = trimmed.slice('::botmux-mira:'.length);
484
+ try {
485
+ const decoded = JSON.parse(Buffer.from(encoded, 'base64').toString('utf8'));
486
+ if (decoded?.type === 'message' && typeof decoded.content === 'string') {
487
+ queue.push(decoded.content);
488
+ void drainQueue();
489
+ }
490
+ }
491
+ catch (err) {
492
+ writeLine(`[mira] bad botmux input: ${errorMessage(err)}`);
493
+ }
494
+ return;
495
+ }
496
+ queue.push(line);
497
+ void drainQueue();
498
+ }
499
+ function handleInput(data) {
500
+ const text = data.toString('utf8');
501
+ for (const ch of text) {
502
+ if (ch === '\u0003') {
503
+ process.exit(130);
504
+ }
505
+ else if (ch === '\r' || ch === '\n') {
506
+ const line = inputBuffer;
507
+ inputBuffer = '';
508
+ enqueueLine(line);
509
+ }
510
+ else if (ch === '\u007f' || ch === '\b') {
511
+ inputBuffer = inputBuffer.slice(0, -1);
512
+ }
513
+ else {
514
+ inputBuffer += ch;
515
+ }
516
+ }
517
+ }
518
+ async function main() {
519
+ await client.ensureSession();
520
+ writeLine('Mira connected.');
521
+ if (process.stdin.isTTY)
522
+ process.stdin.setRawMode(true);
523
+ process.stdin.resume();
524
+ process.stdin.on('data', handleInput);
525
+ prompt();
526
+ }
527
+ process.on('SIGTERM', () => {
528
+ process.exit(0);
529
+ });
530
+ main().catch(err => {
531
+ console.error(`Mira runner failed: ${errorMessage(err)}`);
532
+ process.exit(1);
533
+ });
534
+ //# sourceMappingURL=mira-runner.js.map