kimaki 0.31.0 → 1.0.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 (989) hide show
  1. package/dist/agent-ui.d.ts +33 -0
  2. package/dist/agent-ui.e2e.test.d.ts +1 -0
  3. package/dist/agent-ui.e2e.test.js +140 -0
  4. package/dist/agent-ui.e2e.test.js.map +1 -0
  5. package/dist/agent-ui.js +199 -0
  6. package/dist/agent-ui.js.map +1 -0
  7. package/dist/analytics.d.ts +42 -0
  8. package/dist/analytics.e2e.test.d.ts +1 -0
  9. package/dist/analytics.e2e.test.js +112 -0
  10. package/dist/analytics.e2e.test.js.map +1 -0
  11. package/dist/analytics.js +162 -223
  12. package/dist/analytics.js.map +1 -0
  13. package/dist/analytics.test.d.ts +1 -0
  14. package/dist/analytics.test.js +121 -157
  15. package/dist/analytics.test.js.map +1 -0
  16. package/dist/autostart.d.ts +7 -0
  17. package/dist/autostart.js +75 -0
  18. package/dist/autostart.js.map +1 -0
  19. package/dist/bot.d.ts +90 -0
  20. package/dist/bot.js +120 -0
  21. package/dist/bot.js.map +1 -0
  22. package/dist/btw.e2e.test.d.ts +1 -0
  23. package/dist/btw.e2e.test.js +102 -0
  24. package/dist/btw.e2e.test.js.map +1 -0
  25. package/dist/catalog-refresh.e2e.test.d.ts +1 -0
  26. package/dist/catalog-refresh.e2e.test.js +90 -0
  27. package/dist/catalog-refresh.e2e.test.js.map +1 -0
  28. package/dist/cli/bot.d.ts +5 -0
  29. package/dist/cli/bot.js +427 -0
  30. package/dist/cli/bot.js.map +1 -0
  31. package/dist/cli/discord.d.ts +3 -0
  32. package/dist/cli/discord.js +118 -0
  33. package/dist/cli/discord.js.map +1 -0
  34. package/dist/cli/project.d.ts +5 -0
  35. package/dist/cli/project.js +143 -0
  36. package/dist/cli/project.js.map +1 -0
  37. package/dist/cli/schedule.d.ts +3 -0
  38. package/dist/cli/schedule.js +156 -0
  39. package/dist/cli/schedule.js.map +1 -0
  40. package/dist/cli/session.d.ts +4 -0
  41. package/dist/cli/session.js +281 -0
  42. package/dist/cli/session.js.map +1 -0
  43. package/dist/cli/shared.d.ts +55 -0
  44. package/dist/cli/shared.js +138 -0
  45. package/dist/cli/shared.js.map +1 -0
  46. package/dist/cli-discord.e2e.test.d.ts +1 -0
  47. package/dist/cli-discord.e2e.test.js +64 -0
  48. package/dist/cli-discord.e2e.test.js.map +1 -0
  49. package/dist/cli-lock.e2e.test.d.ts +1 -0
  50. package/dist/cli-lock.e2e.test.js +520 -0
  51. package/dist/cli-lock.e2e.test.js.map +1 -0
  52. package/dist/cli-read.e2e.test.d.ts +1 -0
  53. package/dist/cli-read.e2e.test.js +81 -0
  54. package/dist/cli-read.e2e.test.js.map +1 -0
  55. package/dist/cli-sessions.e2e.test.d.ts +1 -0
  56. package/dist/cli-sessions.e2e.test.js +116 -0
  57. package/dist/cli-sessions.e2e.test.js.map +1 -0
  58. package/dist/cli.d.ts +2 -0
  59. package/dist/cli.js +34 -263
  60. package/dist/cli.js.map +1 -0
  61. package/dist/commands/login-commands.d.ts +59 -0
  62. package/dist/commands/login-commands.js +341 -0
  63. package/dist/commands/login-commands.js.map +1 -0
  64. package/dist/commands/preference-commands.d.ts +44 -0
  65. package/dist/commands/preference-commands.js +551 -0
  66. package/dist/commands/preference-commands.js.map +1 -0
  67. package/dist/commands/session-commands.d.ts +8 -0
  68. package/dist/commands/session-commands.js +267 -0
  69. package/dist/commands/session-commands.js.map +1 -0
  70. package/dist/commands/thread-commands.d.ts +16 -0
  71. package/dist/commands/thread-commands.js +285 -0
  72. package/dist/commands/thread-commands.js.map +1 -0
  73. package/dist/commands/worktree-commands.d.ts +41 -0
  74. package/dist/commands/worktree-commands.js +279 -0
  75. package/dist/commands/worktree-commands.js.map +1 -0
  76. package/dist/commands.e2e.test.d.ts +1 -0
  77. package/dist/commands.e2e.test.js +255 -0
  78. package/dist/commands.e2e.test.js.map +1 -0
  79. package/dist/credentials.d.ts +84 -0
  80. package/dist/credentials.js +320 -0
  81. package/dist/credentials.js.map +1 -0
  82. package/dist/db.d.ts +1532 -0
  83. package/dist/db.js +57 -245
  84. package/dist/db.js.map +1 -0
  85. package/dist/db.test.d.ts +1 -0
  86. package/dist/db.test.js +351 -682
  87. package/dist/db.test.js.map +1 -0
  88. package/dist/duration.d.ts +2 -0
  89. package/dist/duration.js +18 -0
  90. package/dist/duration.js.map +1 -0
  91. package/dist/effects.d.ts +15 -0
  92. package/dist/effects.js +291 -0
  93. package/dist/effects.js.map +1 -0
  94. package/dist/errors.d.ts +38 -0
  95. package/dist/errors.js +40 -175
  96. package/dist/errors.js.map +1 -0
  97. package/dist/event-loop.d.ts +40 -0
  98. package/dist/event-loop.js +414 -0
  99. package/dist/event-loop.js.map +1 -0
  100. package/dist/file-edit-log.d.ts +41 -0
  101. package/dist/file-edit-log.js +122 -164
  102. package/dist/file-edit-log.js.map +1 -0
  103. package/dist/file-edit-log.test.d.ts +1 -0
  104. package/dist/file-edit-log.test.js +68 -244
  105. package/dist/file-edit-log.test.js.map +1 -0
  106. package/dist/format-parts.d.ts +137 -0
  107. package/dist/format-parts.js +300 -0
  108. package/dist/format-parts.js.map +1 -0
  109. package/dist/format-parts.test.d.ts +1 -0
  110. package/dist/format-parts.test.js +144 -0
  111. package/dist/format-parts.test.js.map +1 -0
  112. package/dist/gateway-replay.e2e.test.d.ts +1 -0
  113. package/dist/gateway-replay.e2e.test.js +95 -0
  114. package/dist/gateway-replay.e2e.test.js.map +1 -0
  115. package/dist/harness.e2e.test.d.ts +1 -0
  116. package/dist/harness.e2e.test.js +107 -0
  117. package/dist/harness.e2e.test.js.map +1 -0
  118. package/dist/hello-thread.e2e.test.d.ts +1 -0
  119. package/dist/hello-thread.e2e.test.js +194 -0
  120. package/dist/hello-thread.e2e.test.js.map +1 -0
  121. package/dist/ingress.d.ts +7 -0
  122. package/dist/ingress.js +337 -0
  123. package/dist/ingress.js.map +1 -0
  124. package/dist/interaction-context.d.ts +45 -0
  125. package/dist/interaction-context.js +77 -0
  126. package/dist/interaction-context.js.map +1 -0
  127. package/dist/interrupt.e2e.test.d.ts +1 -0
  128. package/dist/interrupt.e2e.test.js +124 -0
  129. package/dist/interrupt.e2e.test.js.map +1 -0
  130. package/dist/legacy.e2e.test.d.ts +1 -0
  131. package/dist/legacy.e2e.test.js +85 -0
  132. package/dist/legacy.e2e.test.js.map +1 -0
  133. package/dist/live-call.d.ts +51 -0
  134. package/dist/live-call.js +207 -0
  135. package/dist/live-call.js.map +1 -0
  136. package/dist/lock-routes.d.ts +812 -0
  137. package/dist/lock-routes.js +635 -0
  138. package/dist/lock-routes.js.map +1 -0
  139. package/dist/lock-server.d.ts +36 -0
  140. package/dist/lock-server.js +223 -0
  141. package/dist/lock-server.js.map +1 -0
  142. package/dist/logger.d.ts +13 -0
  143. package/dist/logger.js +112 -162
  144. package/dist/logger.js.map +1 -0
  145. package/dist/login.e2e.test.d.ts +1 -0
  146. package/dist/login.e2e.test.js +83 -0
  147. package/dist/login.e2e.test.js.map +1 -0
  148. package/dist/main.d.ts +32 -0
  149. package/dist/main.js +190 -0
  150. package/dist/main.js.map +1 -0
  151. package/dist/markdown/components.d.ts +10 -0
  152. package/dist/markdown/components.js +77 -0
  153. package/dist/markdown/components.js.map +1 -0
  154. package/dist/markdown/markdown.test.d.ts +1 -0
  155. package/dist/markdown/markdown.test.js +393 -0
  156. package/dist/markdown/markdown.test.js.map +1 -0
  157. package/dist/markdown/render-markdown.d.ts +30 -0
  158. package/dist/markdown/render-markdown.js +265 -0
  159. package/dist/markdown/render-markdown.js.map +1 -0
  160. package/dist/message-tool.e2e.test.d.ts +1 -0
  161. package/dist/message-tool.e2e.test.js +39 -0
  162. package/dist/message-tool.e2e.test.js.map +1 -0
  163. package/dist/migrations.d.ts +8 -0
  164. package/dist/migrations.js +187 -0
  165. package/dist/migrations.js.map +1 -0
  166. package/dist/onboarding-cli.e2e.test.d.ts +1 -0
  167. package/dist/onboarding-cli.e2e.test.js +178 -0
  168. package/dist/onboarding-cli.e2e.test.js.map +1 -0
  169. package/dist/onboarding.d.ts +36 -0
  170. package/dist/onboarding.e2e.test.d.ts +1 -0
  171. package/dist/onboarding.e2e.test.js +148 -0
  172. package/dist/onboarding.e2e.test.js.map +1 -0
  173. package/dist/onboarding.js +261 -0
  174. package/dist/onboarding.js.map +1 -0
  175. package/dist/opencode-server.d.ts +54 -0
  176. package/dist/opencode-server.js +413 -0
  177. package/dist/opencode-server.js.map +1 -0
  178. package/dist/opencode-server.test.d.ts +1 -0
  179. package/dist/opencode-server.test.js +21 -0
  180. package/dist/opencode-server.test.js.map +1 -0
  181. package/dist/permissions.d.ts +31 -0
  182. package/dist/permissions.e2e.test.d.ts +1 -0
  183. package/dist/permissions.e2e.test.js +166 -0
  184. package/dist/permissions.e2e.test.js.map +1 -0
  185. package/dist/permissions.js +95 -0
  186. package/dist/permissions.js.map +1 -0
  187. package/dist/plugin/anthropic/index.d.ts +13 -0
  188. package/dist/plugin/anthropic/index.js +201 -0
  189. package/dist/plugin/anthropic/index.js.map +1 -0
  190. package/dist/plugin/anthropic/index.test.d.ts +1 -0
  191. package/dist/plugin/anthropic/index.test.js +39 -0
  192. package/dist/plugin/anthropic/index.test.js.map +1 -0
  193. package/dist/plugin/index.d.ts +3 -0
  194. package/dist/plugin/index.js +106 -0
  195. package/dist/plugin/index.js.map +1 -0
  196. package/dist/plugin/session-id/index.d.ts +3 -0
  197. package/dist/plugin/session-id/index.js +18 -0
  198. package/dist/plugin/session-id/index.js.map +1 -0
  199. package/dist/plugin.e2e.test.d.ts +1 -0
  200. package/dist/plugin.e2e.test.js +87 -0
  201. package/dist/plugin.e2e.test.js.map +1 -0
  202. package/dist/preference-commands.e2e.test.d.ts +1 -0
  203. package/dist/preference-commands.e2e.test.js +555 -0
  204. package/dist/preference-commands.e2e.test.js.map +1 -0
  205. package/dist/probe-live.tmp.d.ts +1 -0
  206. package/dist/probe-live.tmp.js +82 -0
  207. package/dist/probe-live.tmp.js.map +1 -0
  208. package/dist/project.d.ts +58 -0
  209. package/dist/project.js +169 -0
  210. package/dist/project.js.map +1 -0
  211. package/dist/prompt.d.ts +112 -0
  212. package/dist/prompt.js +578 -0
  213. package/dist/prompt.js.map +1 -0
  214. package/dist/questions.d.ts +59 -0
  215. package/dist/questions.e2e.test.d.ts +1 -0
  216. package/dist/questions.e2e.test.js +290 -0
  217. package/dist/questions.e2e.test.js.map +1 -0
  218. package/dist/questions.js +231 -0
  219. package/dist/questions.js.map +1 -0
  220. package/dist/queue.d.ts +45 -0
  221. package/dist/queue.e2e.test.d.ts +1 -0
  222. package/dist/queue.e2e.test.js +220 -0
  223. package/dist/queue.e2e.test.js.map +1 -0
  224. package/dist/queue.js +132 -0
  225. package/dist/queue.js.map +1 -0
  226. package/dist/remote-send.d.ts +32 -0
  227. package/dist/remote-send.e2e.test.d.ts +1 -0
  228. package/dist/remote-send.e2e.test.js +89 -0
  229. package/dist/remote-send.e2e.test.js.map +1 -0
  230. package/dist/remote-send.js +105 -0
  231. package/dist/remote-send.js.map +1 -0
  232. package/dist/renderer.e2e.test.d.ts +1 -0
  233. package/dist/renderer.e2e.test.js +357 -0
  234. package/dist/renderer.e2e.test.js.map +1 -0
  235. package/dist/restart.e2e.test.d.ts +1 -0
  236. package/dist/restart.e2e.test.js +68 -0
  237. package/dist/restart.e2e.test.js.map +1 -0
  238. package/dist/routes.d.ts +24 -0
  239. package/dist/routes.js +42 -0
  240. package/dist/routes.js.map +1 -0
  241. package/dist/routes.test.d.ts +1 -0
  242. package/dist/routes.test.js +79 -0
  243. package/dist/routes.test.js.map +1 -0
  244. package/dist/routines.e2e.test.d.ts +1 -0
  245. package/dist/routines.e2e.test.js +188 -0
  246. package/dist/routines.e2e.test.js.map +1 -0
  247. package/dist/scheduler.d.ts +116 -0
  248. package/dist/scheduler.e2e.test.d.ts +1 -0
  249. package/dist/scheduler.e2e.test.js +163 -0
  250. package/dist/scheduler.e2e.test.js.map +1 -0
  251. package/dist/scheduler.js +602 -0
  252. package/dist/scheduler.js.map +1 -0
  253. package/dist/scheduler.test.d.ts +1 -0
  254. package/dist/scheduler.test.js +180 -0
  255. package/dist/scheduler.test.js.map +1 -0
  256. package/dist/schema-sql.d.ts +1 -0
  257. package/dist/schema-sql.js +3 -0
  258. package/dist/schema-sql.js.map +1 -0
  259. package/dist/schema.d.ts +2968 -0
  260. package/dist/schema.js +95 -252
  261. package/dist/schema.js.map +1 -0
  262. package/dist/session-commands.e2e.test.d.ts +1 -0
  263. package/dist/session-commands.e2e.test.js +285 -0
  264. package/dist/session-commands.e2e.test.js.map +1 -0
  265. package/dist/session-events.d.ts +55 -0
  266. package/dist/session-events.js +190 -0
  267. package/dist/session-events.js.map +1 -0
  268. package/dist/session-ops.e2e.test.d.ts +1 -0
  269. package/dist/session-ops.e2e.test.js +114 -0
  270. package/dist/session-ops.e2e.test.js.map +1 -0
  271. package/dist/sessions.d.ts +121 -0
  272. package/dist/sessions.js +662 -0
  273. package/dist/sessions.js.map +1 -0
  274. package/dist/shell.e2e.test.d.ts +1 -0
  275. package/dist/shell.e2e.test.js +147 -0
  276. package/dist/shell.e2e.test.js.map +1 -0
  277. package/dist/slash-commands.d.ts +62 -0
  278. package/dist/slash-commands.js +475 -0
  279. package/dist/slash-commands.js.map +1 -0
  280. package/dist/slash-commands.test.d.ts +1 -0
  281. package/dist/slash-commands.test.js +87 -0
  282. package/dist/slash-commands.test.js.map +1 -0
  283. package/dist/sleep.e2e.test.d.ts +1 -0
  284. package/dist/sleep.e2e.test.js +115 -487
  285. package/dist/sleep.e2e.test.js.map +1 -0
  286. package/dist/sleeps.d.ts +37 -0
  287. package/dist/sleeps.js +220 -0
  288. package/dist/sleeps.js.map +1 -0
  289. package/dist/store.d.ts +10 -0
  290. package/dist/store.js +8 -28
  291. package/dist/store.js.map +1 -0
  292. package/dist/system-prompt.d.ts +65 -0
  293. package/dist/system-prompt.js +875 -0
  294. package/dist/system-prompt.js.map +1 -0
  295. package/dist/tasks.e2e.test.d.ts +1 -0
  296. package/dist/tasks.e2e.test.js +173 -0
  297. package/dist/tasks.e2e.test.js.map +1 -0
  298. package/dist/test/auth-plugin/index.d.ts +3 -0
  299. package/dist/test/auth-plugin/index.js +18 -0
  300. package/dist/test/auth-plugin/index.js.map +1 -0
  301. package/dist/test/fake-mcp-server.d.ts +1 -0
  302. package/dist/test/fake-mcp-server.js +45 -0
  303. package/dist/test/fake-mcp-server.js.map +1 -0
  304. package/dist/test/harness.d.ts +246 -0
  305. package/dist/test/harness.js +704 -0
  306. package/dist/test/harness.js.map +1 -0
  307. package/dist/test/replay.d.ts +14 -0
  308. package/dist/test/replay.js +75 -0
  309. package/dist/test/replay.js.map +1 -0
  310. package/dist/thread-reducer.d.ts +172 -0
  311. package/dist/thread-reducer.fixtures.test.d.ts +1 -0
  312. package/dist/thread-reducer.fixtures.test.js +360 -0
  313. package/dist/thread-reducer.fixtures.test.js.map +1 -0
  314. package/dist/thread-reducer.js +497 -0
  315. package/dist/thread-reducer.js.map +1 -0
  316. package/dist/thread-reducer.test.d.ts +1 -0
  317. package/dist/thread-reducer.test.js +369 -0
  318. package/dist/thread-reducer.test.js.map +1 -0
  319. package/dist/tts.test.d.ts +1 -0
  320. package/dist/tts.test.js +147 -0
  321. package/dist/tts.test.js.map +1 -0
  322. package/dist/voice-agent.d.ts +33 -0
  323. package/dist/voice-agent.js +159 -0
  324. package/dist/voice-agent.js.map +1 -0
  325. package/dist/voice-attachments.e2e.test.d.ts +1 -0
  326. package/dist/voice-attachments.e2e.test.js +253 -0
  327. package/dist/voice-attachments.e2e.test.js.map +1 -0
  328. package/dist/voice-call.d.ts +59 -0
  329. package/dist/voice-call.e2e.test.d.ts +1 -0
  330. package/dist/voice-call.e2e.test.js +259 -0
  331. package/dist/voice-call.e2e.test.js.map +1 -0
  332. package/dist/voice-call.js +760 -0
  333. package/dist/voice-call.js.map +1 -0
  334. package/dist/voice-openai.e2e.test.d.ts +1 -0
  335. package/dist/voice-openai.e2e.test.js +161 -0
  336. package/dist/voice-openai.e2e.test.js.map +1 -0
  337. package/dist/voice.d.ts +116 -0
  338. package/dist/voice.js +619 -717
  339. package/dist/voice.js.map +1 -0
  340. package/dist/working-directory.e2e.test.d.ts +1 -0
  341. package/dist/working-directory.e2e.test.js +231 -0
  342. package/dist/working-directory.e2e.test.js.map +1 -0
  343. package/dist/worktrees.d.ts +54 -0
  344. package/dist/worktrees.js +247 -709
  345. package/dist/worktrees.js.map +1 -0
  346. package/dist/worktrees.test.d.ts +1 -0
  347. package/dist/worktrees.test.js +97 -952
  348. package/dist/worktrees.test.js.map +1 -0
  349. package/package.json +38 -74
  350. package/src/agent-ui.e2e.test.ts +134 -0
  351. package/src/agent-ui.ts +216 -0
  352. package/src/analytics.e2e.test.ts +138 -0
  353. package/src/analytics.test.ts +122 -182
  354. package/src/analytics.ts +206 -258
  355. package/src/autostart.ts +78 -0
  356. package/src/bot.ts +194 -0
  357. package/src/btw.e2e.test.ts +130 -0
  358. package/src/catalog-refresh.e2e.test.ts +112 -0
  359. package/src/cli/bot.ts +419 -0
  360. package/src/cli/discord.ts +116 -0
  361. package/src/cli/project.ts +147 -0
  362. package/src/cli/schedule.ts +151 -0
  363. package/src/cli/session.ts +285 -0
  364. package/src/cli/shared.ts +139 -0
  365. package/src/cli-discord.e2e.test.ts +62 -0
  366. package/src/cli-lock.e2e.test.ts +530 -0
  367. package/src/cli-read.e2e.test.ts +78 -0
  368. package/src/cli-sessions.e2e.test.ts +122 -0
  369. package/src/cli.ts +35 -418
  370. package/src/commands/login-commands.ts +360 -0
  371. package/src/commands/preference-commands.ts +586 -0
  372. package/src/commands/session-commands.ts +289 -0
  373. package/src/commands/thread-commands.ts +324 -0
  374. package/src/commands/worktree-commands.ts +288 -0
  375. package/src/commands.e2e.test.ts +290 -0
  376. package/src/credentials.ts +425 -0
  377. package/src/db.test.ts +344 -759
  378. package/src/db.ts +66 -284
  379. package/src/duration.ts +18 -0
  380. package/src/effects.ts +303 -0
  381. package/src/errors.ts +39 -228
  382. package/src/event-loop.ts +462 -0
  383. package/src/file-edit-log.test.ts +68 -272
  384. package/src/file-edit-log.ts +108 -231
  385. package/src/fixtures/v1-schema.sql +241 -0
  386. package/src/fixtures/voice.ogg +0 -0
  387. package/src/format-parts.test.ts +150 -0
  388. package/src/format-parts.ts +405 -0
  389. package/src/gateway-replay.e2e.test.ts +116 -0
  390. package/src/harness.e2e.test.ts +124 -0
  391. package/src/hello-thread.e2e.test.ts +223 -0
  392. package/src/ingress.ts +334 -0
  393. package/src/interaction-context.ts +131 -0
  394. package/src/interrupt.e2e.test.ts +151 -0
  395. package/src/legacy.e2e.test.ts +105 -0
  396. package/src/live-call.ts +249 -0
  397. package/src/lock-routes.ts +625 -0
  398. package/src/lock-server.ts +233 -0
  399. package/src/logger.ts +120 -207
  400. package/src/login.e2e.test.ts +86 -0
  401. package/src/main.ts +230 -0
  402. package/src/markdown/components.ts +102 -0
  403. package/src/markdown/markdown.test.ts +414 -0
  404. package/src/markdown/render-markdown.ts +288 -0
  405. package/src/migrations.ts +198 -0
  406. package/src/onboarding-cli.e2e.test.ts +215 -0
  407. package/src/onboarding.e2e.test.ts +171 -0
  408. package/src/onboarding.ts +297 -0
  409. package/src/opencode-server.test.ts +24 -0
  410. package/src/opencode-server.ts +461 -0
  411. package/src/permissions.e2e.test.ts +191 -0
  412. package/src/permissions.ts +121 -0
  413. package/src/plugin/anthropic/index.test.ts +39 -0
  414. package/src/plugin/anthropic/index.ts +213 -0
  415. package/src/plugin/index.ts +93 -0
  416. package/src/plugin/session-id/index.ts +19 -0
  417. package/src/plugin.e2e.test.ts +112 -0
  418. package/src/preference-commands.e2e.test.ts +597 -0
  419. package/src/project.ts +216 -0
  420. package/src/prompt.ts +664 -0
  421. package/src/questions.e2e.test.ts +328 -0
  422. package/src/questions.ts +322 -0
  423. package/src/queue.e2e.test.ts +253 -0
  424. package/src/queue.ts +158 -0
  425. package/src/remote-send.e2e.test.ts +91 -0
  426. package/src/remote-send.ts +110 -0
  427. package/src/renderer.e2e.test.ts +390 -0
  428. package/src/restart.e2e.test.ts +90 -0
  429. package/src/routes.test.ts +81 -0
  430. package/src/routes.ts +48 -0
  431. package/src/routines.e2e.test.ts +210 -0
  432. package/src/scheduler.e2e.test.ts +182 -0
  433. package/src/scheduler.test.ts +183 -0
  434. package/src/scheduler.ts +648 -0
  435. package/src/schema-sql.ts +3 -0
  436. package/src/schema.ts +95 -271
  437. package/src/session-commands.e2e.test.ts +326 -0
  438. package/src/session-events.ts +218 -0
  439. package/src/session-ops.e2e.test.ts +141 -0
  440. package/src/sessions.ts +803 -0
  441. package/src/shell.e2e.test.ts +173 -0
  442. package/src/slash-commands.test.ts +89 -0
  443. package/src/slash-commands.ts +539 -0
  444. package/src/sleep.e2e.test.ts +135 -552
  445. package/src/sleeps.ts +230 -0
  446. package/src/store.ts +19 -217
  447. package/src/system-prompt.ts +944 -0
  448. package/src/test/auth-plugin/index.ts +17 -0
  449. package/src/test/fake-mcp-server.ts +49 -0
  450. package/src/test/harness.ts +957 -0
  451. package/src/test/replay.ts +90 -0
  452. package/src/thread-reducer.fixtures.test.ts +374 -0
  453. package/src/thread-reducer.test.ts +380 -0
  454. package/src/thread-reducer.ts +671 -0
  455. package/src/tts.test.ts +150 -0
  456. package/src/voice-agent.ts +196 -0
  457. package/src/voice-attachments.e2e.test.ts +298 -0
  458. package/src/voice-call.e2e.test.ts +293 -0
  459. package/src/voice-call.ts +764 -0
  460. package/src/voice-openai.e2e.test.ts +191 -0
  461. package/src/voice.ts +668 -988
  462. package/src/working-directory.e2e.test.ts +226 -0
  463. package/src/worktrees.test.ts +89 -1115
  464. package/src/worktrees.ts +195 -957
  465. package/bin.js +0 -2
  466. package/dist/agent-model.e2e.test.js +0 -1223
  467. package/dist/ai-tool-to-genai.js +0 -233
  468. package/dist/ai-tool-to-genai.test.js +0 -267
  469. package/dist/ai-tool.js +0 -6
  470. package/dist/anthropic-account-identity.js +0 -70
  471. package/dist/anthropic-account-identity.test.js +0 -38
  472. package/dist/anthropic-auth-plugin.js +0 -958
  473. package/dist/anthropic-auth-plugin.test.js +0 -115
  474. package/dist/anthropic-auth-state.js +0 -186
  475. package/dist/anthropic-auth-state.test.js +0 -203
  476. package/dist/bash-tool-schema-plugin.js +0 -50
  477. package/dist/bash-tool-schema-plugin.test.js +0 -68
  478. package/dist/bin.js +0 -151
  479. package/dist/bot-lifecycle.test.js +0 -206
  480. package/dist/btw-prefix-detection.js +0 -24
  481. package/dist/btw-prefix-detection.test.js +0 -130
  482. package/dist/cache-drift-plugin.js +0 -183
  483. package/dist/cache-rewrite.js +0 -39
  484. package/dist/cache-rewrite.test.js +0 -41
  485. package/dist/channel-management.js +0 -347
  486. package/dist/cli-commands/bot.js +0 -254
  487. package/dist/cli-commands/maintenance.js +0 -171
  488. package/dist/cli-commands/misc.js +0 -153
  489. package/dist/cli-commands/project.js +0 -510
  490. package/dist/cli-commands/send.js +0 -659
  491. package/dist/cli-commands/session.js +0 -889
  492. package/dist/cli-commands/task.js +0 -277
  493. package/dist/cli-commands/thread.js +0 -63
  494. package/dist/cli-commands/user.js +0 -145
  495. package/dist/cli-parsing.test.js +0 -226
  496. package/dist/cli-runner.js +0 -1591
  497. package/dist/cli-runner.test.js +0 -119
  498. package/dist/cli-send-thread.e2e.test.js +0 -470
  499. package/dist/cloudflare-transcription.js +0 -56
  500. package/dist/commands/abort.js +0 -84
  501. package/dist/commands/action-buttons.js +0 -248
  502. package/dist/commands/add-project.js +0 -111
  503. package/dist/commands/agent.js +0 -658
  504. package/dist/commands/ask-question.js +0 -371
  505. package/dist/commands/ask-question.test.js +0 -150
  506. package/dist/commands/btw.js +0 -275
  507. package/dist/commands/compact.js +0 -117
  508. package/dist/commands/context-usage.js +0 -194
  509. package/dist/commands/context-usage.test.js +0 -49
  510. package/dist/commands/create-new-project.js +0 -138
  511. package/dist/commands/diff.js +0 -63
  512. package/dist/commands/file-upload.js +0 -280
  513. package/dist/commands/fork-subagent.js +0 -175
  514. package/dist/commands/fork.js +0 -291
  515. package/dist/commands/gemini-apikey.js +0 -123
  516. package/dist/commands/last-sessions.js +0 -129
  517. package/dist/commands/login.js +0 -893
  518. package/dist/commands/mcp.js +0 -239
  519. package/dist/commands/memory-snapshot.js +0 -24
  520. package/dist/commands/mention-mode.js +0 -42
  521. package/dist/commands/merge-worktree.js +0 -205
  522. package/dist/commands/model-variant.js +0 -390
  523. package/dist/commands/model.js +0 -1012
  524. package/dist/commands/multioauth.js +0 -425
  525. package/dist/commands/new-worktree.js +0 -625
  526. package/dist/commands/paginated-select.js +0 -57
  527. package/dist/commands/permissions.js +0 -327
  528. package/dist/commands/queue.js +0 -347
  529. package/dist/commands/queue.test.js +0 -15
  530. package/dist/commands/remove-project.js +0 -111
  531. package/dist/commands/restart-opencode-server.js +0 -133
  532. package/dist/commands/resume.js +0 -148
  533. package/dist/commands/run-command.js +0 -79
  534. package/dist/commands/screenshare.js +0 -307
  535. package/dist/commands/screenshare.test.js +0 -20
  536. package/dist/commands/session-id.js +0 -78
  537. package/dist/commands/session.js +0 -248
  538. package/dist/commands/share.js +0 -80
  539. package/dist/commands/tasks.js +0 -296
  540. package/dist/commands/types.js +0 -2
  541. package/dist/commands/undo-redo.js +0 -313
  542. package/dist/commands/unset-model.js +0 -116
  543. package/dist/commands/upgrade.js +0 -41
  544. package/dist/commands/user-command.js +0 -196
  545. package/dist/commands/verbosity.js +0 -124
  546. package/dist/commands/vscode.js +0 -295
  547. package/dist/commands/worktrees.js +0 -548
  548. package/dist/condense-memory.js +0 -33
  549. package/dist/config.js +0 -126
  550. package/dist/context-awareness-plugin.js +0 -357
  551. package/dist/context-awareness-plugin.test.js +0 -126
  552. package/dist/cpu-profiler.js +0 -211
  553. package/dist/cpu-profiler.test.js +0 -160
  554. package/dist/critique-utils.js +0 -95
  555. package/dist/database.js +0 -1074
  556. package/dist/debounce-timeout.js +0 -28
  557. package/dist/debounced-process-flush.js +0 -77
  558. package/dist/default-channel-provisioning.test.js +0 -149
  559. package/dist/discord-bot.js +0 -1432
  560. package/dist/discord-command-registration.js +0 -519
  561. package/dist/discord-command-registration.test.js +0 -17
  562. package/dist/discord-urls.js +0 -81
  563. package/dist/discord-utils.js +0 -789
  564. package/dist/discord-utils.test.js +0 -400
  565. package/dist/escape-backticks.test.js +0 -429
  566. package/dist/event-stream-real-capture.e2e.test.js +0 -533
  567. package/dist/eventsource-parser.test.js +0 -327
  568. package/dist/exec-async.js +0 -38
  569. package/dist/external-directory-permissions.e2e.test.js +0 -86
  570. package/dist/external-directory-project-deny.e2e.test.js +0 -70
  571. package/dist/external-opencode-sync.js +0 -620
  572. package/dist/external-opencode-sync.test.js +0 -206
  573. package/dist/extract-sdk-error-message.test.js +0 -13
  574. package/dist/format-tables.js +0 -728
  575. package/dist/format-tables.test.js +0 -915
  576. package/dist/forum-sync/config.js +0 -79
  577. package/dist/forum-sync/discord-operations.js +0 -157
  578. package/dist/forum-sync/index.js +0 -5
  579. package/dist/forum-sync/markdown.js +0 -110
  580. package/dist/forum-sync/sync-to-discord.js +0 -417
  581. package/dist/forum-sync/sync-to-files.js +0 -190
  582. package/dist/forum-sync/types.js +0 -53
  583. package/dist/forum-sync/watchers.js +0 -322
  584. package/dist/gateway-proxy-reconnect.e2e.test.js +0 -414
  585. package/dist/gateway-proxy.e2e.test.js +0 -488
  586. package/dist/genai-worker-wrapper.js +0 -111
  587. package/dist/genai-worker.js +0 -309
  588. package/dist/genai.js +0 -232
  589. package/dist/git-worktree-core.js +0 -461
  590. package/dist/guild-categories.test.js +0 -225
  591. package/dist/heap-monitor.js +0 -122
  592. package/dist/hrana-server.js +0 -322
  593. package/dist/hrana-server.test.js +0 -99
  594. package/dist/html-actions.js +0 -123
  595. package/dist/html-actions.test.js +0 -70
  596. package/dist/html-components.js +0 -115
  597. package/dist/html-components.test.js +0 -34
  598. package/dist/image-optimizer-plugin.js +0 -153
  599. package/dist/image-utils.js +0 -112
  600. package/dist/interaction-handler.js +0 -578
  601. package/dist/ipc-polling.js +0 -245
  602. package/dist/ipc-tools-plugin.js +0 -251
  603. package/dist/kimaki-digital-twin.e2e.test.js +0 -161
  604. package/dist/kimaki-opencode-plugin-loading.e2e.test.js +0 -158
  605. package/dist/kimaki-opencode-plugin.js +0 -33
  606. package/dist/kimaki-opencode-plugin.test.js +0 -126
  607. package/dist/kimaki-workspace-adaptor.js +0 -118
  608. package/dist/limit-heading-depth.js +0 -25
  609. package/dist/limit-heading-depth.test.js +0 -105
  610. package/dist/list-channel-threads.js +0 -163
  611. package/dist/list-channel-threads.test.js +0 -80
  612. package/dist/markdown.js +0 -455
  613. package/dist/markdown.test.js +0 -411
  614. package/dist/memory-overview-plugin.js +0 -123
  615. package/dist/message-formatting.js +0 -788
  616. package/dist/message-formatting.test.js +0 -1132
  617. package/dist/message-preprocessing.js +0 -419
  618. package/dist/oauth-rotation-shared.js +0 -253
  619. package/dist/onboarding-tutorial.js +0 -163
  620. package/dist/onboarding-welcome.js +0 -37
  621. package/dist/openai-auth-plugin.js +0 -125
  622. package/dist/openai-auth-state.js +0 -237
  623. package/dist/openai-realtime.js +0 -224
  624. package/dist/opencode-command-detection.js +0 -65
  625. package/dist/opencode-command-detection.test.js +0 -240
  626. package/dist/opencode-command.js +0 -181
  627. package/dist/opencode-command.test.js +0 -218
  628. package/dist/opencode-interrupt-plugin.js +0 -253
  629. package/dist/opencode-interrupt-plugin.test.js +0 -293
  630. package/dist/opencode.js +0 -1217
  631. package/dist/parse-permission-rules.test.js +0 -117
  632. package/dist/patch-text-parser.js +0 -97
  633. package/dist/plugin-logger.js +0 -105
  634. package/dist/plugin-opencode-client.js +0 -54
  635. package/dist/privacy-sanitizer.js +0 -105
  636. package/dist/project-add.test.js +0 -62
  637. package/dist/question-abort-clears-dropdown.e2e.test.js +0 -89
  638. package/dist/question-abort-resume.e2e.test.js +0 -100
  639. package/dist/question-abort-retry-text-before-dropdown.e2e.test.js +0 -150
  640. package/dist/question-text-before-dropdown.e2e.test.js +0 -52
  641. package/dist/queue-advanced-abort.e2e.test.js +0 -348
  642. package/dist/queue-advanced-action-buttons.e2e.test.js +0 -209
  643. package/dist/queue-advanced-e2e-setup.js +0 -1043
  644. package/dist/queue-advanced-footer.e2e.test.js +0 -286
  645. package/dist/queue-advanced-model-switch.e2e.test.js +0 -297
  646. package/dist/queue-advanced-permissions-typing.e2e.test.js +0 -189
  647. package/dist/queue-advanced-question.e2e.test.js +0 -266
  648. package/dist/queue-advanced-typing-interrupt.e2e.test.js +0 -113
  649. package/dist/queue-advanced-typing.e2e.test.js +0 -151
  650. package/dist/queue-delete-message.e2e.test.js +0 -216
  651. package/dist/queue-drain-after-interactive-ui.e2e.test.js +0 -120
  652. package/dist/queue-interrupt-drain.e2e.test.js +0 -256
  653. package/dist/queue-question-select-drain.e2e.test.js +0 -162
  654. package/dist/runtime-idle-sweeper.js +0 -52
  655. package/dist/runtime-lifecycle.e2e.test.js +0 -570
  656. package/dist/sentry.js +0 -23
  657. package/dist/session-handler/agent-utils.js +0 -65
  658. package/dist/session-handler/event-stream-state.js +0 -1225
  659. package/dist/session-handler/event-stream-state.test.js +0 -3160
  660. package/dist/session-handler/global-event-listener.js +0 -212
  661. package/dist/session-handler/model-utils.js +0 -311
  662. package/dist/session-handler/model-utils.test.js +0 -445
  663. package/dist/session-handler/opencode-session-event-log.js +0 -121
  664. package/dist/session-handler/thread-ingress.test.js +0 -41
  665. package/dist/session-handler/thread-runtime-state.js +0 -209
  666. package/dist/session-handler/thread-session-runtime-summary.test.js +0 -121
  667. package/dist/session-handler/thread-session-runtime.js +0 -4320
  668. package/dist/session-handler.js +0 -9
  669. package/dist/session-search.js +0 -219
  670. package/dist/session-search.test.js +0 -287
  671. package/dist/session-sleep.test.js +0 -224
  672. package/dist/session-title-rename.test.js +0 -128
  673. package/dist/skill-filter.js +0 -43
  674. package/dist/skill-filter.test.js +0 -86
  675. package/dist/startup-service.js +0 -153
  676. package/dist/startup-time.e2e.test.js +0 -297
  677. package/dist/system-message.js +0 -806
  678. package/dist/system-message.test.js +0 -917
  679. package/dist/task-id-plugin.js +0 -16
  680. package/dist/task-runner.js +0 -554
  681. package/dist/task-schedule.js +0 -298
  682. package/dist/task-schedule.test.js +0 -366
  683. package/dist/test-utils.js +0 -385
  684. package/dist/thinking-utils.js +0 -45
  685. package/dist/thinking-utils.test.js +0 -35
  686. package/dist/thread-message-queue.e2e.test.js +0 -1227
  687. package/dist/tools.js +0 -357
  688. package/dist/undo-redo.e2e.test.js +0 -171
  689. package/dist/unnest-code-blocks.js +0 -146
  690. package/dist/unnest-code-blocks.test.js +0 -673
  691. package/dist/upgrade.js +0 -114
  692. package/dist/utils.js +0 -148
  693. package/dist/voice-attachment.js +0 -56
  694. package/dist/voice-handler.js +0 -727
  695. package/dist/voice-message.e2e.test.js +0 -1254
  696. package/dist/voice-routing-input.e2e.test.js +0 -195
  697. package/dist/voice-routing-question.e2e.test.js +0 -182
  698. package/dist/voice.test.js +0 -500
  699. package/dist/wait-session.js +0 -193
  700. package/dist/websockify.js +0 -69
  701. package/dist/worker-types.js +0 -4
  702. package/dist/worktree-clone-isolation.e2e.test.js +0 -188
  703. package/dist/worktree-lifecycle.e2e.test.js +0 -735
  704. package/dist/worktree-utils.js +0 -3
  705. package/dist/xai-auth-plugin.js +0 -238
  706. package/dist/xai-auth-state.js +0 -234
  707. package/dist/xai-auth-state.test.js +0 -183
  708. package/dist/xml.js +0 -92
  709. package/dist/xml.test.js +0 -32
  710. package/skills/bump-holocron-consumers/SKILL.md +0 -137
  711. package/skills/critique/SKILL.md +0 -116
  712. package/skills/egaki/SKILL.md +0 -86
  713. package/skills/errore/SKILL.md +0 -501
  714. package/skills/goke/SKILL.md +0 -695
  715. package/skills/holocron/SKILL.md +0 -942
  716. package/skills/lintcn/SKILL.md +0 -873
  717. package/skills/new-skill/SKILL.md +0 -339
  718. package/skills/npm-package/SKILL.md +0 -692
  719. package/skills/opensrc/SKILL.md +0 -102
  720. package/skills/playwriter/SKILL.md +0 -35
  721. package/skills/profano/SKILL.md +0 -33
  722. package/skills/readme.md +0 -20
  723. package/skills/sigillo/SKILL.md +0 -370
  724. package/skills/spiceflow/SKILL.md +0 -80
  725. package/skills/strada/SKILL.md +0 -104
  726. package/skills/termcast/SKILL.md +0 -133
  727. package/skills/tuistory/SKILL.md +0 -237
  728. package/skills/usecomputer/SKILL.md +0 -264
  729. package/skills/zele/SKILL.md +0 -81
  730. package/src/agent-model.e2e.test.ts +0 -1557
  731. package/src/ai-tool-to-genai.test.ts +0 -296
  732. package/src/ai-tool-to-genai.ts +0 -283
  733. package/src/ai-tool.ts +0 -39
  734. package/src/anthropic-account-identity.test.ts +0 -52
  735. package/src/anthropic-account-identity.ts +0 -96
  736. package/src/anthropic-auth-plugin.test.ts +0 -135
  737. package/src/anthropic-auth-plugin.ts +0 -1180
  738. package/src/anthropic-auth-state.test.ts +0 -259
  739. package/src/anthropic-auth-state.ts +0 -272
  740. package/src/bash-tool-schema-plugin.test.ts +0 -84
  741. package/src/bash-tool-schema-plugin.ts +0 -77
  742. package/src/bin.ts +0 -173
  743. package/src/bot-lifecycle.test.ts +0 -252
  744. package/src/btw-prefix-detection.test.ts +0 -142
  745. package/src/btw-prefix-detection.ts +0 -30
  746. package/src/cache-drift-plugin.ts +0 -249
  747. package/src/cache-rewrite.test.ts +0 -49
  748. package/src/cache-rewrite.ts +0 -96
  749. package/src/channel-management.ts +0 -494
  750. package/src/cli-commands/bot.ts +0 -374
  751. package/src/cli-commands/maintenance.ts +0 -237
  752. package/src/cli-commands/misc.ts +0 -208
  753. package/src/cli-commands/project.ts +0 -680
  754. package/src/cli-commands/send.ts +0 -885
  755. package/src/cli-commands/session.ts +0 -1181
  756. package/src/cli-commands/task.ts +0 -358
  757. package/src/cli-commands/thread.ts +0 -86
  758. package/src/cli-commands/user.ts +0 -195
  759. package/src/cli-parsing.test.ts +0 -305
  760. package/src/cli-runner.test.ts +0 -166
  761. package/src/cli-runner.ts +0 -2157
  762. package/src/cli-send-thread.e2e.test.ts +0 -609
  763. package/src/cloudflare-transcription.ts +0 -76
  764. package/src/commands/abort.ts +0 -113
  765. package/src/commands/action-buttons.ts +0 -371
  766. package/src/commands/add-project.ts +0 -146
  767. package/src/commands/agent.ts +0 -911
  768. package/src/commands/ask-question.test.ts +0 -177
  769. package/src/commands/ask-question.ts +0 -532
  770. package/src/commands/btw.ts +0 -356
  771. package/src/commands/compact.ts +0 -154
  772. package/src/commands/context-usage.test.ts +0 -57
  773. package/src/commands/context-usage.ts +0 -267
  774. package/src/commands/create-new-project.ts +0 -203
  775. package/src/commands/diff.ts +0 -91
  776. package/src/commands/file-upload.ts +0 -398
  777. package/src/commands/fork-subagent.ts +0 -262
  778. package/src/commands/fork.ts +0 -421
  779. package/src/commands/gemini-apikey.ts +0 -205
  780. package/src/commands/last-sessions.ts +0 -176
  781. package/src/commands/login.ts +0 -1182
  782. package/src/commands/mcp.ts +0 -307
  783. package/src/commands/memory-snapshot.ts +0 -30
  784. package/src/commands/mention-mode.ts +0 -66
  785. package/src/commands/merge-worktree.ts +0 -282
  786. package/src/commands/model-variant.ts +0 -522
  787. package/src/commands/model.ts +0 -1377
  788. package/src/commands/multioauth.ts +0 -508
  789. package/src/commands/new-worktree.ts +0 -835
  790. package/src/commands/paginated-select.ts +0 -81
  791. package/src/commands/permissions.ts +0 -458
  792. package/src/commands/queue.test.ts +0 -19
  793. package/src/commands/queue.ts +0 -471
  794. package/src/commands/remove-project.ts +0 -152
  795. package/src/commands/restart-opencode-server.ts +0 -173
  796. package/src/commands/resume.ts +0 -229
  797. package/src/commands/run-command.ts +0 -123
  798. package/src/commands/screenshare.test.ts +0 -30
  799. package/src/commands/screenshare.ts +0 -388
  800. package/src/commands/session-id.ts +0 -109
  801. package/src/commands/session.ts +0 -319
  802. package/src/commands/share.ts +0 -106
  803. package/src/commands/tasks.ts +0 -399
  804. package/src/commands/types.ts +0 -25
  805. package/src/commands/undo-redo.ts +0 -394
  806. package/src/commands/unset-model.ts +0 -152
  807. package/src/commands/upgrade.ts +0 -51
  808. package/src/commands/user-command.ts +0 -260
  809. package/src/commands/verbosity.ts +0 -172
  810. package/src/commands/vscode.ts +0 -378
  811. package/src/commands/worktrees.ts +0 -762
  812. package/src/condense-memory.ts +0 -36
  813. package/src/config.ts +0 -147
  814. package/src/context-awareness-plugin.test.ts +0 -144
  815. package/src/context-awareness-plugin.ts +0 -508
  816. package/src/cpu-profiler.test.ts +0 -183
  817. package/src/cpu-profiler.ts +0 -293
  818. package/src/critique-utils.ts +0 -139
  819. package/src/database.ts +0 -1484
  820. package/src/debounce-timeout.ts +0 -43
  821. package/src/debounced-process-flush.ts +0 -104
  822. package/src/default-channel-provisioning.test.ts +0 -156
  823. package/src/discord-bot.ts +0 -1852
  824. package/src/discord-command-registration.test.ts +0 -20
  825. package/src/discord-command-registration.ts +0 -704
  826. package/src/discord-urls.ts +0 -88
  827. package/src/discord-utils.test.ts +0 -470
  828. package/src/discord-utils.ts +0 -1079
  829. package/src/escape-backticks.test.ts +0 -469
  830. package/src/event-stream-real-capture.e2e.test.ts +0 -692
  831. package/src/eventsource-parser.test.ts +0 -351
  832. package/src/exec-async.ts +0 -44
  833. package/src/external-directory-permissions.e2e.test.ts +0 -103
  834. package/src/external-directory-project-deny.e2e.test.ts +0 -84
  835. package/src/external-opencode-sync.test.ts +0 -248
  836. package/src/external-opencode-sync.ts +0 -867
  837. package/src/extract-sdk-error-message.test.ts +0 -18
  838. package/src/format-tables.test.ts +0 -988
  839. package/src/format-tables.ts +0 -1031
  840. package/src/forum-sync/config.ts +0 -92
  841. package/src/forum-sync/discord-operations.ts +0 -245
  842. package/src/forum-sync/index.ts +0 -9
  843. package/src/forum-sync/markdown.ts +0 -172
  844. package/src/forum-sync/sync-to-discord.ts +0 -595
  845. package/src/forum-sync/sync-to-files.ts +0 -294
  846. package/src/forum-sync/types.ts +0 -175
  847. package/src/forum-sync/watchers.ts +0 -474
  848. package/src/gateway-proxy-reconnect.e2e.test.ts +0 -553
  849. package/src/gateway-proxy.e2e.test.ts +0 -648
  850. package/src/genai-worker-wrapper.ts +0 -164
  851. package/src/genai-worker.ts +0 -385
  852. package/src/genai.ts +0 -318
  853. package/src/git-worktree-core.ts +0 -616
  854. package/src/guild-categories.test.ts +0 -260
  855. package/src/heap-monitor.ts +0 -152
  856. package/src/hrana-server.test.ts +0 -130
  857. package/src/hrana-server.ts +0 -399
  858. package/src/html-actions.test.ts +0 -87
  859. package/src/html-actions.ts +0 -174
  860. package/src/html-components.test.ts +0 -38
  861. package/src/html-components.ts +0 -177
  862. package/src/image-optimizer-plugin.ts +0 -194
  863. package/src/image-utils.ts +0 -150
  864. package/src/interaction-handler.ts +0 -775
  865. package/src/ipc-polling.ts +0 -325
  866. package/src/ipc-tools-plugin.ts +0 -306
  867. package/src/kimaki-digital-twin.e2e.test.ts +0 -199
  868. package/src/kimaki-opencode-plugin-loading.e2e.test.ts +0 -208
  869. package/src/kimaki-opencode-plugin.test.ts +0 -142
  870. package/src/kimaki-opencode-plugin.ts +0 -34
  871. package/src/kimaki-workspace-adaptor.ts +0 -144
  872. package/src/limit-heading-depth.test.ts +0 -116
  873. package/src/limit-heading-depth.ts +0 -26
  874. package/src/list-channel-threads.test.ts +0 -90
  875. package/src/list-channel-threads.ts +0 -252
  876. package/src/markdown.test.ts +0 -498
  877. package/src/markdown.ts +0 -577
  878. package/src/memory-overview-plugin.ts +0 -159
  879. package/src/message-formatting.test.ts +0 -1401
  880. package/src/message-formatting.ts +0 -999
  881. package/src/message-preprocessing.ts +0 -557
  882. package/src/oauth-rotation-shared.ts +0 -332
  883. package/src/onboarding-tutorial.ts +0 -167
  884. package/src/onboarding-welcome.ts +0 -49
  885. package/src/openai-auth-plugin.ts +0 -158
  886. package/src/openai-auth-state.ts +0 -297
  887. package/src/openai-realtime.ts +0 -358
  888. package/src/opencode-command-detection.test.ts +0 -307
  889. package/src/opencode-command-detection.ts +0 -76
  890. package/src/opencode-command.test.ts +0 -290
  891. package/src/opencode-command.ts +0 -251
  892. package/src/opencode-interrupt-plugin.test.ts +0 -419
  893. package/src/opencode-interrupt-plugin.ts +0 -306
  894. package/src/opencode.ts +0 -1590
  895. package/src/parse-permission-rules.test.ts +0 -127
  896. package/src/patch-text-parser.ts +0 -107
  897. package/src/plugin-logger.ts +0 -139
  898. package/src/plugin-opencode-client.ts +0 -71
  899. package/src/privacy-sanitizer.ts +0 -142
  900. package/src/project-add.test.ts +0 -80
  901. package/src/question-abort-clears-dropdown.e2e.test.ts +0 -109
  902. package/src/question-abort-resume.e2e.test.ts +0 -121
  903. package/src/question-abort-retry-text-before-dropdown.e2e.test.ts +0 -172
  904. package/src/question-text-before-dropdown.e2e.test.ts +0 -67
  905. package/src/queue-advanced-abort.e2e.test.ts +0 -449
  906. package/src/queue-advanced-action-buttons.e2e.test.ts +0 -271
  907. package/src/queue-advanced-e2e-setup.ts +0 -1164
  908. package/src/queue-advanced-footer.e2e.test.ts +0 -357
  909. package/src/queue-advanced-model-switch.e2e.test.ts +0 -382
  910. package/src/queue-advanced-permissions-typing.e2e.test.ts +0 -256
  911. package/src/queue-advanced-question.e2e.test.ts +0 -322
  912. package/src/queue-advanced-typing-interrupt.e2e.test.ts +0 -147
  913. package/src/queue-advanced-typing.e2e.test.ts +0 -199
  914. package/src/queue-delete-message.e2e.test.ts +0 -262
  915. package/src/queue-drain-after-interactive-ui.e2e.test.ts +0 -152
  916. package/src/queue-interrupt-drain.e2e.test.ts +0 -299
  917. package/src/queue-question-select-drain.e2e.test.ts +0 -209
  918. package/src/runtime-idle-sweeper.ts +0 -76
  919. package/src/runtime-lifecycle.e2e.test.ts +0 -714
  920. package/src/schema.sql +0 -251
  921. package/src/sentry.ts +0 -26
  922. package/src/session-handler/agent-utils.ts +0 -104
  923. package/src/session-handler/event-stream-fixtures/real-session-action-buttons.jsonl +0 -45
  924. package/src/session-handler/event-stream-fixtures/real-session-footer-suppressed-on-pre-idle-interrupt.jsonl +0 -40
  925. package/src/session-handler/event-stream-fixtures/real-session-permission-external-file.jsonl +0 -23
  926. package/src/session-handler/event-stream-fixtures/real-session-task-normal.jsonl +0 -22
  927. package/src/session-handler/event-stream-fixtures/real-session-task-three-parallel-sleeps.jsonl +0 -277
  928. package/src/session-handler/event-stream-fixtures/real-session-task-user-interruption.jsonl +0 -46
  929. package/src/session-handler/event-stream-fixtures/session-abort-after-idle-race.jsonl +0 -21
  930. package/src/session-handler/event-stream-fixtures/session-concurrent-messages-serialized.jsonl +0 -56
  931. package/src/session-handler/event-stream-fixtures/session-explicit-abort.jsonl +0 -44
  932. package/src/session-handler/event-stream-fixtures/session-normal-completion.jsonl +0 -29
  933. package/src/session-handler/event-stream-fixtures/session-tool-call-noisy-stream.jsonl +0 -29
  934. package/src/session-handler/event-stream-fixtures/session-two-completions-same-session.jsonl +0 -50
  935. package/src/session-handler/event-stream-fixtures/session-user-interruption.jsonl +0 -59
  936. package/src/session-handler/event-stream-fixtures/session-voice-queued-followup.jsonl +0 -52
  937. package/src/session-handler/event-stream-state.test.ts +0 -3431
  938. package/src/session-handler/event-stream-state.ts +0 -1792
  939. package/src/session-handler/global-event-listener.ts +0 -258
  940. package/src/session-handler/model-utils.test.ts +0 -537
  941. package/src/session-handler/model-utils.ts +0 -489
  942. package/src/session-handler/opencode-session-event-log.ts +0 -159
  943. package/src/session-handler/thread-ingress.test.ts +0 -54
  944. package/src/session-handler/thread-runtime-state.ts +0 -358
  945. package/src/session-handler/thread-session-runtime-summary.test.ts +0 -169
  946. package/src/session-handler/thread-session-runtime.ts +0 -5696
  947. package/src/session-handler.ts +0 -15
  948. package/src/session-search.test.ts +0 -331
  949. package/src/session-search.ts +0 -382
  950. package/src/session-sleep.test.ts +0 -294
  951. package/src/session-title-rename.test.ts +0 -186
  952. package/src/skill-filter.test.ts +0 -110
  953. package/src/skill-filter.ts +0 -63
  954. package/src/startup-service.ts +0 -200
  955. package/src/startup-time.e2e.test.ts +0 -377
  956. package/src/system-message.test.ts +0 -1013
  957. package/src/system-message.ts +0 -1043
  958. package/src/task-id-plugin.ts +0 -17
  959. package/src/task-runner.ts +0 -768
  960. package/src/task-schedule.test.ts +0 -424
  961. package/src/task-schedule.ts +0 -470
  962. package/src/test-utils.ts +0 -549
  963. package/src/thinking-utils.test.ts +0 -46
  964. package/src/thinking-utils.ts +0 -82
  965. package/src/thread-message-queue.e2e.test.ts +0 -1468
  966. package/src/tools.ts +0 -430
  967. package/src/undici.d.ts +0 -12
  968. package/src/undo-redo.e2e.test.ts +0 -219
  969. package/src/unnest-code-blocks.test.ts +0 -713
  970. package/src/unnest-code-blocks.ts +0 -185
  971. package/src/upgrade.ts +0 -127
  972. package/src/utils.ts +0 -216
  973. package/src/voice-attachment.ts +0 -79
  974. package/src/voice-handler.ts +0 -1000
  975. package/src/voice-message.e2e.test.ts +0 -1513
  976. package/src/voice-routing-input.e2e.test.ts +0 -203
  977. package/src/voice-routing-question.e2e.test.ts +0 -188
  978. package/src/voice.test.ts +0 -565
  979. package/src/wait-session.ts +0 -291
  980. package/src/websockify.ts +0 -101
  981. package/src/worker-types.ts +0 -64
  982. package/src/worktree-clone-isolation.e2e.test.ts +0 -213
  983. package/src/worktree-lifecycle.e2e.test.ts +0 -900
  984. package/src/worktree-utils.ts +0 -4
  985. package/src/xai-auth-plugin.ts +0 -303
  986. package/src/xai-auth-state.test.ts +0 -224
  987. package/src/xai-auth-state.ts +0 -294
  988. package/src/xml.test.ts +0 -38
  989. package/src/xml.ts +0 -121
@@ -0,0 +1,520 @@
1
+ import { execFile } from 'node:child_process';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import { promisify } from 'node:util';
5
+ import { afterAll, beforeAll, expect, test } from 'vitest';
6
+ import { seedProjectChannel, startOpencodeTestServer, startTestBot, startTwin, tempDataDir, waitFor, waitForFooter, warmUp } from "./test/harness.js";
7
+ const exec = promisify(execFile);
8
+ const dataDir = tempDataDir();
9
+ let server;
10
+ let twin;
11
+ let bot;
12
+ beforeAll(async () => {
13
+ ;
14
+ [server, twin] = await Promise.all([startOpencodeTestServer(), startTwin()]);
15
+ await seedProjectChannel({ dataDir, channelId: twin.channelId, guildId: twin.discord.guildId, directory: server.projectDirectory });
16
+ bot = await startTestBot({ dataDir, twin, server });
17
+ await warmUp({ server });
18
+ }, 60_000);
19
+ afterAll(async () => {
20
+ await bot?.stop();
21
+ await Promise.all([server?.stop(), twin?.stop()]);
22
+ fs.rmSync(dataDir, { recursive: true, force: true });
23
+ });
24
+ function cli(args) {
25
+ return exec(process.execPath, ['--import', 'tsx', path.resolve('src/cli.ts'), ...args, '--data-dir', dataDir], {
26
+ env: { ...process.env, KIMAKI_LOCK_PORT: String(bot.lock.port), KIMAKI_OPENCODE_SERVICE_FILE: server.serviceFile },
27
+ });
28
+ }
29
+ test('CLI send starts and continues a session through the authenticated bot API', async () => {
30
+ const first = await cli(['send', '--channel', twin.channelId, '--prompt', 'CLI first']);
31
+ const ids = JSON.parse(first.stdout);
32
+ await waitForFooter({ discord: twin.discord, threadId: ids.threadId });
33
+ await cli(['send', '--thread', ids.threadId, '--prompt', 'CLI second. queue']);
34
+ await waitForFooter({ discord: twin.discord, threadId: ids.threadId, count: 2 });
35
+ expect(await twin.discord.thread(ids.threadId).text()).toMatchInlineSnapshot(`
36
+ "--- from: assistant (TestBot)
37
+ » **CLI:** CLI first
38
+ -# *using deterministic-provider/deterministic-v2 ⋅ build*
39
+ ok
40
+ -# *project ⋅ main ⋅ Ns ⋅ deterministic-v2*
41
+ ok
42
+ -# *project ⋅ main ⋅ Ns ⋅ deterministic-v2*"
43
+ `);
44
+ expect(ids.sessionId).toMatch(/^ses_/);
45
+ const tokenFile = path.join(dataDir, 'lock-token');
46
+ expect(fs.statSync(tokenFile).mode & 0o777).toBe(0o600);
47
+ const unauthorized = await fetch(`http://127.0.0.1:${bot.lock.port}/kimaki/send`, { method: 'POST', body: '{}' });
48
+ expect(unauthorized.status).toBe(401);
49
+ const token = fs.readFileSync(tokenFile, 'utf8');
50
+ const invalid = await fetch(`http://127.0.0.1:${bot.lock.port}/kimaki/send`, {
51
+ method: 'POST', headers: { authorization: `Bearer ${token}` }, body: JSON.stringify({ channelId: { gt: '0' }, prompt: 'unsafe' }),
52
+ });
53
+ expect(invalid.status).toBe(400);
54
+ });
55
+ test('CLI help documents the supported P7 commands', async () => {
56
+ const output = await cli(['--help']);
57
+ expect(output.stdout).toContain('send');
58
+ expect(output.stdout).toContain('upload-request');
59
+ expect(output.stdout).toMatchInlineSnapshot(`
60
+ "kimaki
61
+
62
+ Usage:
63
+ $ kimaki [options]
64
+
65
+ Commands:
66
+ kimaki Start the bot. Runs onboarding on first start
67
+
68
+ Project:
69
+ project list List project directories and their channels
70
+ --data-dir <path> Data directory (default: ~/.kimaki)
71
+ --json Output as JSON
72
+
73
+ project add [directory] Create a channel for a directory (default: current directory)
74
+ --data-dir <path> Data directory (default: ~/.kimaki)
75
+ -g, --guild <guildId> Server (default: the one with Kimaki channels)
76
+ --machine-name <name> Machine name of a new category and of a channel name suffix (default: hostname)
77
+
78
+ Session:
79
+ session list List sessions with native status and token counts
80
+ --data-dir <path> Data directory (default: ~/.kimaki)
81
+ --project <path> Project (default: current directory)
82
+ --all All projects
83
+ --active Only busy sessions, never the caller; exit 1 when none remain, 64 on errors
84
+ --exclude <id> Exclude session (repeatable)
85
+ --json Output as JSON
86
+
87
+ session search <query> Search titles, then real message content
88
+ --data-dir <path> Data directory (default: ~/.kimaki)
89
+ --project <path> Project (default: current directory)
90
+ -c, --channel <id> Project of this Discord channel
91
+ --all All projects
92
+ --days <n> Recent days (default: 14; 0 = all)
93
+ --json Output as JSON
94
+
95
+ session wait <id> Wait until idle or waiting for input, then print the session
96
+ --data-dir <path> Data directory (default: ~/.kimaki)
97
+ --timeout <duration> Timeout, for example 30m or 2h
98
+
99
+ session editors <file> List sessions that last edited a file, newest first
100
+ --data-dir <path> Data directory (default: ~/.kimaki)
101
+ --json Output as JSON
102
+ --limit <n> Max sessions to show (default: 20)
103
+
104
+ session diff Upload the git diff of the session folder to critique.work and print the URL
105
+ --data-dir <path> Data directory (default: ~/.kimaki)
106
+ -s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
107
+
108
+ session url <id> Print the Discord URL of a session or thread
109
+ --data-dir <path> Data directory (default: ~/.kimaki)
110
+
111
+ channel agent [value] Set channel agent through the running bot
112
+ --data-dir <path> Data directory (default: ~/.kimaki)
113
+ -c, --channel <id> Target channel (default: current project)
114
+ --clear Clear the saved agent
115
+
116
+ channel model [value] Set channel model through the running bot
117
+ --data-dir <path> Data directory (default: ~/.kimaki)
118
+ -c, --channel <id> Target channel (default: current project)
119
+ --variant <name> Thinking variant for model
120
+ --global Default of all channels without their own model
121
+ --clear Clear the saved model
122
+
123
+ channel verbosity [value] Set channel verbosity through the running bot
124
+ --data-dir <path> Data directory (default: ~/.kimaki)
125
+ -c, --channel <id> Target channel (default: current project)
126
+
127
+ session abort [id] Stop the running turn and clear its queue
128
+ --data-dir <path> Data directory (default: ~/.kimaki)
129
+
130
+ session archive [id] Archive a session thread
131
+ --data-dir <path> Data directory (default: ~/.kimaki)
132
+
133
+ session title <title> Rename the session and its Discord thread
134
+ --data-dir <path> Data directory (default: ~/.kimaki)
135
+ -s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
136
+
137
+ session queue add <value> add native queued prompts
138
+ --data-dir <path> Data directory (default: ~/.kimaki)
139
+ -s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
140
+ --json Output as JSON
141
+
142
+ session queue remove <value> remove native queued prompts
143
+ --data-dir <path> Data directory (default: ~/.kimaki)
144
+ -s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
145
+ --json Output as JSON
146
+
147
+ session queue list list native queued prompts
148
+ --data-dir <path> Data directory (default: ~/.kimaki)
149
+ -s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
150
+ --json Output as JSON
151
+
152
+ session queue clear clear native queued prompts
153
+ --data-dir <path> Data directory (default: ~/.kimaki)
154
+ -s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
155
+ --json Output as JSON
156
+
157
+ session command <name> [...args] Run an OpenCode command, skill, or MCP prompt
158
+ --data-dir <path> Data directory (default: ~/.kimaki)
159
+ -s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
160
+ --queue Run after the current turn instead of interrupting
161
+
162
+ session shell <text> Run shell through the shared session action
163
+ --data-dir <path> Data directory (default: ~/.kimaki)
164
+ -s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
165
+ --queue Queue an OpenCode command
166
+
167
+ session btw <text> Run btw through the shared session action
168
+ --data-dir <path> Data directory (default: ~/.kimaki)
169
+ -s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
170
+ --queue Queue an OpenCode command
171
+
172
+ session fork [id] Fork a root or child session into a new thread
173
+ --data-dir <path> Data directory (default: ~/.kimaki)
174
+ --before <messageId> Fork before this user message
175
+ -n, --name <name> Thread name
176
+
177
+ session resume <id> Bind an existing session to a new thread in its project channel
178
+ --data-dir <path> Data directory (default: ~/.kimaki)
179
+ -c, --channel <id> Destination channel (default: channel of the session folder)
180
+
181
+ buttons Show 1-3 action buttons. Call last, after visible text
182
+ --data-dir <path> Data directory (default: ~/.kimaki)
183
+ -s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
184
+ -b, --button <spec> Repeatable: Label[:white|blue|green|red]
185
+
186
+ upload-request Ask for file uploads; waits up to 6 minutes. Shell timeout must be 10 minutes
187
+ --data-dir <path> Data directory (default: ~/.kimaki)
188
+ -s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
189
+ -p, --prompt <text> Text above the upload button
190
+ --max-files <n> 1 to 10 (default: 5)
191
+
192
+ login <provider> Connect a provider using OpenCode integration credentials
193
+ --data-dir <path> Data directory (default: ~/.kimaki)
194
+ --key <key> API key to store in OpenCode
195
+ --method <id> OAuth method ID; without flags, list login methods
196
+ --attempt <id> Check or complete this native OAuth attempt
197
+ --code <code> Authorization code for the attempt
198
+ --cancel Cancel the native OAuth attempt
199
+
200
+ login credential <id> Activate, remove, or label an OpenCode credential
201
+ --data-dir <path> Data directory (default: ~/.kimaki)
202
+ --operation <name> activate | remove | label
203
+ --label <text> Credential label
204
+
205
+ send Start a session in a channel, or continue a thread
206
+ --data-dir <path> Data directory (default: ~/.kimaki)
207
+ -c, --channel <id> New thread in this channel
208
+ -d, --project <path> Project directory of the new thread
209
+ --thread <id> Continue this thread (ID or URL)
210
+ -s, --session <id> Continue this session: session ID, thread ID or thread URL
211
+ -p, --prompt <text> Prompt; thread suffixes . queue and . btw are supported
212
+ -f, --file <path> Attach a local file (repeatable)
213
+ -n, --name <text> Thread name
214
+ --agent <name> Agent ID
215
+ --model <provider/model> Model for the new session
216
+ -u, --user <id> Add this Discord user to the thread (repeatable)
217
+ --cwd <path> Existing project subfolder or linked Git worktree
218
+ --worktree [name] Create a custom Git worktree (automatic name when omitted)
219
+ --base-branch <ref> Starting ref for --worktree (default: project HEAD)
220
+ --parent-session <id> Record the parent session in session metadata
221
+ --permission <rule> Repeatable: tool[:pattern]:allow|deny|ask
222
+ --notify-only Post a notification thread without a model turn
223
+ --wait Wait until idle or input is needed, then print the session
224
+ --send-at <when> Schedule: UTC ISO date ending in Z, or cron expression (UTC)
225
+ --pre-run <command> Scheduled only: run first in the project. Exit 0 starts, stdout is appended
226
+ --allow-concurrency Scheduled only: allow overlapping runs of this routine
227
+
228
+ session events <id> Print the recorded OpenCode events of a thread as JSONL (root + subagents)
229
+ --data-dir <path> Data directory (default: ~/.kimaki)
230
+
231
+ session read <id> Print the messages of a session from OpenCode as markdown
232
+ --data-dir <path> Data directory (default: ~/.kimaki)
233
+ --thinking Include reasoning
234
+ --verbose Include full tool inputs and outputs
235
+ --json Print raw OpenCode messages
236
+
237
+ session cwd [directory] Show or change the working directory at a native safe boundary
238
+ --data-dir <path> Data directory (default: ~/.kimaki)
239
+ -s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
240
+
241
+ Channel:
242
+ channel worktrees <value> Set automatic worktrees: on | off
243
+ --data-dir <path> Data directory (default: ~/.kimaki)
244
+ -c, --channel <id> Project channel (default: current directory)
245
+
246
+ Worktree:
247
+ worktree list List linked Git worktrees
248
+ --data-dir <path> Data directory (default: ~/.kimaki)
249
+ -c, --channel <id> Project channel
250
+ -p, --project <path> Project directory (default: current directory)
251
+
252
+ worktree create [name] Create an isolated worktree session
253
+ --data-dir <path> Data directory (default: ~/.kimaki)
254
+ -c, --channel <id> Project channel
255
+ -p, --project <path> Project directory (default: current directory)
256
+ --base-branch <ref> Starting Git ref (default: project HEAD)
257
+
258
+ worktree remove <directory> Remove a clean, merged worktree checkout; retain branch refs
259
+ --data-dir <path> Data directory (default: ~/.kimaki)
260
+ -c, --channel <id> Project channel
261
+ -p, --project <path> Project directory (default: current directory)
262
+ --target-branch <branch> Local merge target branch
263
+ --strategy <name> Merge strategy: rebase | squash
264
+
265
+ worktree merge <directory> Merge into a local target branch
266
+ --data-dir <path> Data directory (default: ~/.kimaki)
267
+ -c, --channel <id> Project channel
268
+ -p, --project <path> Project directory (default: current directory)
269
+ --target-branch <branch> Local merge target branch
270
+ --strategy <name> Merge strategy: rebase | squash
271
+
272
+ Schedule:
273
+ routine list List routines (planned, running, failed)
274
+ --data-dir <path> Data directory (default: ~/.kimaki)
275
+ --json Output as JSON
276
+ --all Also list finished and cancelled V1 routines
277
+
278
+ routine edit <routineId> Change a planned routine. An empty string clears a value
279
+ --data-dir <path> Data directory (default: ~/.kimaki)
280
+ --prompt <text> New prompt
281
+ --send-at <when> New schedule: UTC ISO date ending in Z, or cron (UTC)
282
+ --agent <name> Agent for the scheduled session
283
+ --model <provider/model> Model for the scheduled session
284
+ -u, --user <id> Discord user ID added to each run's thread
285
+ --pre-run <command> Command to run before each run
286
+ --allow-concurrency <bool> true | false
287
+
288
+ routine delete <routineId> Delete a routine
289
+ --data-dir <path> Data directory (default: ~/.kimaki)
290
+
291
+ routine run <routineId> Run a routine now
292
+ --data-dir <path> Data directory (default: ~/.kimaki)
293
+
294
+ sleep Wake this session later with a new message in the same thread. Run it last, after your text. To monitor slow events (email replies, PR reviews), wait 2h or more; never poll every few minutes
295
+ --data-dir <path> Data directory (default: ~/.kimaki)
296
+ --duration <duration> Relative wait, e.g. 30m, 2h, 1d
297
+ --until <date> UTC ISO date ending in Z
298
+ --reason <text> Shown in Discord and in the wake message
299
+ -s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
300
+
301
+ Discord:
302
+ thread list List active and optionally archived threads in a channel
303
+ --data-dir <path> Data directory (default: ~/.kimaki)
304
+ -c, --channel <id> Channel to list
305
+ --archived Include archived threads
306
+ --json Output as JSON
307
+
308
+ user list Find Discord users for mentions
309
+ --data-dir <path> Data directory (default: ~/.kimaki)
310
+ -g, --guild <id> Guild to search
311
+ -q, --query <text> Name filter
312
+ --json Output as JSON
313
+
314
+ upload-to-discord <...files> Attach local files to a session thread or the Kimaki voice channel chat
315
+ --data-dir <path> Data directory (default: ~/.kimaki)
316
+ -s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
317
+ -c, --channel <id> Kimaki voice channel to post in (default in voice calls: KIMAKI_CHANNEL_ID)
318
+
319
+ Tools:
320
+ tunnel Run a command and expose its local port with a public URL. The child gets TRAFORO_URL
321
+ -p, --port <port> Local port (default: read from the command output)
322
+ -t, --tunnel-id <id> Fixed tunnel ID (default: random). Only for public-safe services
323
+ --host <host> Local host (default: localhost)
324
+ -k, --kill Kill the process on --port first
325
+
326
+ tts [text] Text to speech with OpenAI or Gemini. Reads stdin if no text is given
327
+ --data-dir <path> Data directory (default: ~/.kimaki)
328
+ -o, --output <path> Output file (default: speech.mp3 or speech.wav)
329
+ -p, --provider <name> openai | gemini (default: from the stored key)
330
+ -v, --voice <voice> Voice ID (default: alloy for OpenAI, Kore for Gemini)
331
+ -i, --instructions <text> Style instructions (OpenAI only)
332
+ --speed <n> 0.25 to 4.0 (OpenAI only, default: 1.25)
333
+
334
+ Bot:
335
+ status Bot health: running, pid, uptime, OpenCode URL and version, guilds
336
+ --data-dir <path> Data directory (default: ~/.kimaki)
337
+ --json Output as JSON
338
+
339
+ logs Print the log file path. The bot resets the file on every start
340
+ --data-dir <path> Data directory (default: ~/.kimaki)
341
+ -f, --follow Print the log and keep printing new lines
342
+
343
+ restart Restart the running bot with the code on disk. Sessions keep running in OpenCode
344
+ --data-dir <path> Data directory (default: ~/.kimaki)
345
+
346
+ profile cpu Record a CPU profile of the running bot and print the .cpuprofile path
347
+ --data-dir <path> Data directory (default: ~/.kimaki)
348
+ -d, --duration <duration> How long to record, e.g. 20s or 2m (default: 20s)
349
+
350
+ profile heap Write a heap snapshot of the running bot and print the .heapsnapshot path
351
+ --data-dir <path> Data directory (default: ~/.kimaki)
352
+
353
+ bot token Print saved bot credentials for automation
354
+ --data-dir <path> Data directory (default: ~/.kimaki)
355
+
356
+ bot keys set Store OpenAI or Gemini API keys for voice transcription and kimaki tts
357
+ --data-dir <path> Data directory (default: ~/.kimaki)
358
+ --openai <key> OpenAI API key
359
+ --gemini <key> Gemini API key
360
+
361
+ bot install-url Print the Discord bot install URL
362
+ --data-dir <path> Data directory (default: ~/.kimaki)
363
+ --gateway-callback-url <url> Gateway only: redirect here after the install
364
+
365
+ Options:
366
+ --data-dir <path> Data directory (default: ~/.kimaki)
367
+ -g, --guild <guildId> Server to onboard when the bot is in several
368
+ --gateway Use the shared Kimaki bot, no Discord app needed
369
+ --gateway-callback-url <url> Redirect here after the gateway install (appends ?guild_id=<id>)
370
+ --install-url Print the install URL and exit (non-interactive onboarding)
371
+ --machine-name <name> Name in this machine's category "Kimaki <name>" (default: hostname)
372
+ --restart-onboarding Choose credentials again
373
+ --worktrees Use a fresh Git worktree for new sessions unless the channel overrides it
374
+ --voice <name> Voice of voice calls, saved for later starts (e.g. cove, juniper, sol). "default" resets it
375
+ --no-analytics Disable anonymous usage analytics (same as KIMAKI_STRADA_ENABLED=0)
376
+ --if-not-running Start only if no bot runs; never stop the running one (used by autostart)
377
+ -h, --help Display this message
378
+ "
379
+ `);
380
+ });
381
+ test('CLI registry shares thread actions, preferences, title and archive', async () => {
382
+ const started = JSON.parse((await cli(['send', '--channel', twin.channelId, '-p', 'Registry first'])).stdout);
383
+ await waitForFooter({ discord: twin.discord, threadId: started.threadId });
384
+ await cli(['channel', 'agent', 'plan', '--channel', twin.channelId]);
385
+ await cli(['channel', 'model', 'deterministic-provider/deterministic-v2', '--channel', twin.channelId]);
386
+ await cli(['channel', 'verbosity', 'text', '--channel', twin.channelId]);
387
+ await cli(['channel', 'model', 'deterministic-provider/deterministic-v2', '--global', '--variant', 'fast']);
388
+ const global = await bot.db.query.global_models.findFirst();
389
+ expect({ app: global?.app_id === bot.appId, model: global?.model_id, variant: global?.variant }).toMatchInlineSnapshot(`
390
+ {
391
+ "app": true,
392
+ "model": "deterministic-provider/deterministic-v2",
393
+ "variant": "fast",
394
+ }
395
+ `);
396
+ await cli(['channel', 'model', '--global', '--clear']);
397
+ expect(await bot.db.query.global_models.findFirst()).toBeUndefined();
398
+ // --session takes a session ID, a thread ID or a thread URL.
399
+ await cli(['session', 'title', 'CLI renamed', '--session', `https://discord.com/channels/${twin.discord.guildId}/${started.threadId}`]);
400
+ await cli(['session', 'queue', 'add', 'Registry queued', '--session', started.threadId]);
401
+ await expect(cli(['session', 'queue', 'list', '--session', 'not-an-id'])).rejects.toThrow('Not a session ID, Discord thread ID or thread URL: not-an-id');
402
+ await waitForFooter({ discord: twin.discord, threadId: started.threadId, count: 2 });
403
+ await cli(['session', 'abort', started.sessionId]);
404
+ await cli(['session', 'archive', started.threadId]);
405
+ expect(await twin.discord.thread(started.threadId).text()).toMatchInlineSnapshot(`
406
+ "--- from: assistant (TestBot)
407
+ » **CLI:** Registry first
408
+ -# *using deterministic-provider/deterministic-v2 ⋅ build*
409
+ ok
410
+ -# *project ⋅ main ⋅ Ns ⋅ deterministic-v2*
411
+ ok
412
+ -# *project ⋅ main ⋅ Ns ⋅ deterministic-v2*"
413
+ `);
414
+ expect((await twin.discord.channel(twin.channelId).getThreads()).find((thread) => thread.id === started.threadId)?.name).toBe('CLI renamed');
415
+ });
416
+ test('send settings reach native session creation; notifications create no session', async () => {
417
+ const subdir = path.join(server.projectDirectory, 'subfolder');
418
+ fs.mkdirSync(subdir);
419
+ const result = await cli(['send', '--channel', twin.channelId, '-p', 'Send settings', '--cwd', subdir, '--permission', 'shell:deny', '--parent-session', 'ses_parent', '--agent', 'build', '--wait']);
420
+ const ids = JSON.parse(result.stdout.split('\n')[0]);
421
+ await waitForFooter({ discord: twin.discord, threadId: ids.threadId });
422
+ expect(await twin.discord.thread(ids.threadId).text()).toMatchInlineSnapshot(`
423
+ "--- from: assistant (TestBot)
424
+ » **CLI:** Send settings
425
+ -# *using deterministic-provider/deterministic-v2 ⋅ build*
426
+ ok
427
+ -# *subfolder ⋅ main ⋅ Ns ⋅ deterministic-v2*"
428
+ `);
429
+ const info = await (await server.client()).session.get({ sessionID: ids.sessionId });
430
+ expect(info.location.directory).toBe(subdir);
431
+ expect(info.permissions).toEqual([
432
+ { action: 'question', resource: '*', effect: 'deny' },
433
+ { action: 'shell', resource: '*', effect: 'deny' },
434
+ ]);
435
+ await expect(cli(['send', '--thread', ids.threadId, '-p', 'Must not run', '--permission', 'shell:deny']))
436
+ .rejects.toMatchObject({ stderr: expect.stringContaining('--permission applies only to new sessions') });
437
+ expect(info.metadata?.['kimaki']).toMatchObject({ parentSessionId: 'ses_parent' });
438
+ expect(result.stdout).toContain('# Send settings');
439
+ const notice = JSON.parse((await cli(['send', '--channel', twin.channelId, '-p', 'Notification only', '--notify-only'])).stdout);
440
+ expect(await twin.discord.thread(notice.threadId).text()).toMatchInlineSnapshot(`
441
+ "--- from: assistant (TestBot)
442
+ Notification only"
443
+ `);
444
+ expect(notice.sessionId).toBe(null);
445
+ expect(bot.store.getState().roots[notice.threadId]).toBeUndefined();
446
+ });
447
+ test('status reports the running bot, logs prints and follows the log file', async () => {
448
+ const running = JSON.parse((await cli(['status', '--json'])).stdout);
449
+ const opencode = running['opencode'];
450
+ expect({ ...running, mode: running['mode'] === (twin.discord.botToken.includes(':') ? 'gateway' : 'self_hosted'), guilds: running['guilds'].map((guild) => ({ ...guild, id: guild.id === twin.discord.guildId })), pid: typeof running['pid'], uptimeSec: typeof running['uptimeSec'], dataDir: running['dataDir'] === dataDir, opencode: { ...opencode, url: opencode.url === bot.opencode.endpoint?.url, version: typeof opencode.version } }).toMatchInlineSnapshot(`
451
+ {
452
+ "analytics": false,
453
+ "dataDir": true,
454
+ "guilds": [
455
+ {
456
+ "id": true,
457
+ "name": "Kimaki Test",
458
+ },
459
+ ],
460
+ "mode": true,
461
+ "opencode": {
462
+ "connected": true,
463
+ "url": true,
464
+ "version": "string",
465
+ },
466
+ "pid": "number",
467
+ "running": true,
468
+ "uptimeSec": "number",
469
+ }
470
+ `);
471
+ // A data dir without a running bot.
472
+ const otherDir = tempDataDir();
473
+ const stopped = await exec(process.execPath, ['--import', 'tsx', path.resolve('src/cli.ts'), 'status', '--json', '--data-dir', otherDir]).catch((error) => error);
474
+ fs.rmSync(otherDir, { recursive: true, force: true });
475
+ expect({ code: 'code' in stopped ? stopped.code : 0, stdout: JSON.parse(stopped.stdout) }).toMatchInlineSnapshot(`
476
+ {
477
+ "code": 1,
478
+ "stdout": {
479
+ "reason": "Kimaki bot is not running. Start kimaki first.",
480
+ "running": false,
481
+ },
482
+ }
483
+ `);
484
+ expect((await cli(['logs'])).stdout.trim()).toBe(path.join(dataDir, 'kimaki.log'));
485
+ const follow = execFile(process.execPath, ['--import', 'tsx', path.resolve('src/cli.ts'), 'logs', '--follow', '--data-dir', dataDir]);
486
+ const output = { text: '' };
487
+ follow.stdout?.on('data', (chunk) => (output.text += chunk.toString()));
488
+ fs.appendFileSync(path.join(dataDir, 'kimaki.log'), 'follow-marker-line\n');
489
+ await waitFor({ label: 'followed log line', check: async () => output.text.includes('follow-marker-line') });
490
+ follow.kill();
491
+ });
492
+ test('profile cpu and profile heap write owner-only files; restart needs the supervisor', async () => {
493
+ const cpu = (await cli(['profile', 'cpu', '--duration', '200ms'])).stdout.trim();
494
+ const heap = (await cli(['profile', 'heap'])).stdout.trim();
495
+ const profile = JSON.parse(fs.readFileSync(cpu, 'utf8'));
496
+ expect({
497
+ cpu: path.relative(dataDir, cpu).replace(/cpu-.*/, 'cpu-<time>.cpuprofile'),
498
+ heap: path.relative(dataDir, heap).replace(/heap-.*/, 'heap-<time>.heapsnapshot'),
499
+ cpuMode: (fs.statSync(cpu).mode & 0o777).toString(8),
500
+ heapMode: (fs.statSync(heap).mode & 0o777).toString(8),
501
+ hasNodes: profile.nodes.length > 0,
502
+ }).toMatchInlineSnapshot(`
503
+ {
504
+ "cpu": "profiles/cpu-<time>.cpuprofile",
505
+ "cpuMode": "600",
506
+ "hasNodes": true,
507
+ "heap": "profiles/heap-<time>.heapsnapshot",
508
+ "heapMode": "600",
509
+ }
510
+ `);
511
+ // The test bot runs in-process, not under the `kimaki` supervisor.
512
+ const restart = await cli(['restart']).catch((error) => error);
513
+ expect('code' in restart ? { code: restart.code, stderr: restart.stderr.trim() } : restart).toMatchInlineSnapshot(`
514
+ {
515
+ "code": 1,
516
+ "stderr": "This bot was not started by the \`kimaki\` command, so nothing would start it again. Stop it and start it yourself.",
517
+ }
518
+ `);
519
+ }, 60_000);
520
+ //# sourceMappingURL=cli-lock.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-lock.e2e.test.js","sourceRoot":"","sources":["../src/cli-lock.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,81 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { execFile } from 'node:child_process';
4
+ import { promisify } from 'node:util';
5
+ import { afterAll, beforeAll, expect, test } from 'vitest';
6
+ import { scriptedTurn, seedProjectChannel, startOpencodeTestServer, startTestBot, startTwin, tempDataDir, waitForFooter, waitForSelectMenu, warmUp } from "./test/harness.js";
7
+ import { abort, send } from "./prompt.js";
8
+ const exec = promisify(execFile);
9
+ const dataDir = tempDataDir();
10
+ let server;
11
+ let twin;
12
+ let bot;
13
+ beforeAll(async () => {
14
+ ;
15
+ [server, twin] = await Promise.all([startOpencodeTestServer({ matchers: scriptedTurn({ marker: 'wait-form-marker', steps: [{ id: 'wait-question', tool: 'question', input: { questions: [{ question: 'Continue?', header: 'Next', options: [{ label: 'Yes', description: 'Continue' }] }] } }], finalText: 'Question answered' }) }), startTwin()]);
16
+ await seedProjectChannel({ dataDir, channelId: twin.channelId, guildId: twin.discord.guildId, directory: server.projectDirectory });
17
+ bot = await startTestBot({ dataDir, twin, server });
18
+ await warmUp({ server });
19
+ }, 60_000);
20
+ afterAll(async () => {
21
+ await bot?.stop();
22
+ await Promise.all([server?.stop(), twin?.stop()]);
23
+ fs.rmSync(dataDir, { recursive: true, force: true });
24
+ });
25
+ function cli(args) {
26
+ return exec(process.execPath, ['--import', 'tsx', path.resolve('src/cli.ts'), ...args, '--data-dir', dataDir], {
27
+ cwd: process.cwd(), env: { ...process.env, KIMAKI_LOCK_PORT: String(bot.lock.port), KIMAKI_OPENCODE_SERVICE_FILE: server.serviceFile, KIMAKI_DISCORD_REST_URL: twin.discord.restUrl },
28
+ });
29
+ }
30
+ test('session read, list, search, wait, url and events read real session history', async () => {
31
+ const first = await send(bot, { channelId: twin.channelId, prompt: 'Reader content marker' });
32
+ if (first instanceof Error)
33
+ throw first;
34
+ if (!first.sessionId)
35
+ throw new Error('Expected an AI session');
36
+ await waitForFooter({ discord: twin.discord, threadId: first.threadId });
37
+ const list = await cli(['session', 'list', '--project', server.projectDirectory, '--json']);
38
+ const search = await cli(['session', 'search', 'Reader content', '--project', server.projectDirectory, '--json']);
39
+ const read = await cli(['session', 'read', first.threadId]);
40
+ const wait = await cli(['session', 'wait', first.sessionId, '--timeout', '10s']);
41
+ const url = await cli(['session', 'url', first.sessionId]);
42
+ const events = await cli(['session', 'events', first.sessionId]);
43
+ expect(await twin.discord.thread(first.threadId).text()).toMatchInlineSnapshot(`
44
+ "--- from: assistant (TestBot)
45
+ » **CLI:** Reader content marker
46
+ -# *using deterministic-provider/deterministic-v2 ⋅ build*
47
+ ok
48
+ -# *project ⋅ main ⋅ Ns ⋅ deterministic-v2*"
49
+ `);
50
+ expect(list.stdout).toContain(first.sessionId);
51
+ expect(search.stdout).toContain(first.sessionId);
52
+ expect(read.stdout).toContain('Reader content marker');
53
+ expect(wait.stdout).toContain('Reader content marker');
54
+ expect(url.stdout).toContain(first.threadId);
55
+ expect(events.stdout).toContain('session.execution.succeeded');
56
+ const none = await cli(['session', 'list', '--active', '--all']).catch((error) => error);
57
+ expect(none instanceof Error && none.code).toBe(1);
58
+ });
59
+ test('session wait returns for a real pending question; active discovery errors use exit 64', async () => {
60
+ const first = await send(bot, { channelId: twin.channelId, prompt: 'wait-form-marker', permissions: ['question:allow'] });
61
+ if (first instanceof Error || !first.sessionId)
62
+ throw new Error('Expected a session');
63
+ await waitForSelectMenu({ discord: twin.discord, channelId: first.threadId, prefix: 'form:' });
64
+ const result = await cli(['session', 'wait', first.sessionId, '--timeout', '3s']);
65
+ expect(await twin.discord.thread(first.threadId).text()).toMatchInlineSnapshot(`
66
+ "--- from: assistant (TestBot)
67
+ » **CLI:** wait-form-marker
68
+ -# *using deterministic-provider/deterministic-v2 ⋅ build*
69
+ **Next**
70
+ Continue?"
71
+ `);
72
+ expect(result.stdout).toContain('Continue?');
73
+ const failure = await exec(process.execPath, ['--import', 'tsx', path.resolve('src/cli.ts'), 'session', 'list', '--active'], {
74
+ env: { ...process.env, KIMAKI_OPENCODE_SERVICE_FILE: path.join(server.root, 'missing-service.json') },
75
+ }).catch((error) => error);
76
+ expect(failure instanceof Error && failure.code).toBe(64);
77
+ const aborted = await abort(bot, { threadId: first.threadId });
78
+ if (aborted instanceof Error)
79
+ throw aborted;
80
+ });
81
+ //# sourceMappingURL=cli-read.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-read.e2e.test.js","sourceRoot":"","sources":["../src/cli-read.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};