kimaki 1.4.0 → 1.6.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 (326) hide show
  1. package/assets/fonts/Geist-Bold.ttf +0 -0
  2. package/assets/fonts/Geist-Regular.ttf +0 -0
  3. package/assets/fonts/GeistMono-Regular.ttf +0 -0
  4. package/assets/fonts/OFL.txt +92 -0
  5. package/dist/agent-ui.e2e.test.js +27 -13
  6. package/dist/agent-ui.e2e.test.js.map +1 -1
  7. package/dist/agent-ui.js +2 -1
  8. package/dist/agent-ui.js.map +1 -1
  9. package/dist/analytics.e2e.test.js +1 -1
  10. package/dist/analytics.e2e.test.js.map +1 -1
  11. package/dist/autostart.d.ts +4 -0
  12. package/dist/autostart.js +55 -10
  13. package/dist/autostart.js.map +1 -1
  14. package/dist/bot.d.ts +10 -1
  15. package/dist/bot.js +14 -6
  16. package/dist/bot.js.map +1 -1
  17. package/dist/btw.e2e.test.js +3 -3
  18. package/dist/builtin-skills.d.ts +1 -1
  19. package/dist/builtin-skills.js +1 -1
  20. package/dist/builtin-skills.js.map +1 -1
  21. package/dist/builtin-skills.test.js +3 -4
  22. package/dist/builtin-skills.test.js.map +1 -1
  23. package/dist/catalog-refresh.e2e.test.js +2 -2
  24. package/dist/cli/bot.js +25 -14
  25. package/dist/cli/bot.js.map +1 -1
  26. package/dist/cli/discord.js +32 -6
  27. package/dist/cli/discord.js.map +1 -1
  28. package/dist/cli/schedule.js +23 -9
  29. package/dist/cli/schedule.js.map +1 -1
  30. package/dist/cli/session.js +37 -12
  31. package/dist/cli/session.js.map +1 -1
  32. package/dist/cli/shared.d.ts +5 -3
  33. package/dist/cli/shared.js +45 -10
  34. package/dist/cli/shared.js.map +1 -1
  35. package/dist/cli-discord.e2e.test.js +13 -8
  36. package/dist/cli-discord.e2e.test.js.map +1 -1
  37. package/dist/cli-lock.e2e.test.js +87 -20
  38. package/dist/cli-lock.e2e.test.js.map +1 -1
  39. package/dist/cli-read.e2e.test.js +18 -9
  40. package/dist/cli-read.e2e.test.js.map +1 -1
  41. package/dist/cli-sessions.e2e.test.js +4 -3
  42. package/dist/cli-sessions.e2e.test.js.map +1 -1
  43. package/dist/cli.js +2 -0
  44. package/dist/cli.js.map +1 -1
  45. package/dist/commands/preference-commands.d.ts +4 -0
  46. package/dist/commands/preference-commands.js +38 -4
  47. package/dist/commands/preference-commands.js.map +1 -1
  48. package/dist/commands/session-commands.js +11 -8
  49. package/dist/commands/session-commands.js.map +1 -1
  50. package/dist/commands/thread-commands.js +94 -24
  51. package/dist/commands/thread-commands.js.map +1 -1
  52. package/dist/commands/worktree-commands.d.ts +4 -5
  53. package/dist/commands/worktree-commands.js +8 -7
  54. package/dist/commands/worktree-commands.js.map +1 -1
  55. package/dist/commands.e2e.test.js +25 -21
  56. package/dist/commands.e2e.test.js.map +1 -1
  57. package/dist/coordinator-agents.e2e.test.js +135 -0
  58. package/dist/coordinator-agents.e2e.test.js.map +1 -0
  59. package/dist/coordinator-idle.e2e.test.js +100 -0
  60. package/dist/coordinator-idle.e2e.test.js.map +1 -0
  61. package/dist/coordinator-queue.e2e.test.js +244 -0
  62. package/dist/coordinator-queue.e2e.test.js.map +1 -0
  63. package/dist/coordinator-warmup.e2e.test.d.ts +1 -0
  64. package/dist/coordinator-warmup.e2e.test.js +131 -0
  65. package/dist/coordinator-warmup.e2e.test.js.map +1 -0
  66. package/dist/coordinator.d.ts +6 -0
  67. package/dist/coordinator.e2e.test.d.ts +1 -0
  68. package/dist/coordinator.e2e.test.js +505 -0
  69. package/dist/coordinator.e2e.test.js.map +1 -0
  70. package/dist/coordinator.js +164 -0
  71. package/dist/coordinator.js.map +1 -0
  72. package/dist/db.d.ts +75 -0
  73. package/dist/db.test.js +1 -0
  74. package/dist/db.test.js.map +1 -1
  75. package/dist/diagram.d.ts +11 -0
  76. package/dist/diagram.js +232 -0
  77. package/dist/diagram.js.map +1 -0
  78. package/dist/diagram.test.d.ts +1 -0
  79. package/dist/diagram.test.js +52 -0
  80. package/dist/diagram.test.js.map +1 -0
  81. package/dist/duration.js +13 -5
  82. package/dist/duration.js.map +1 -1
  83. package/dist/effects.d.ts +6 -1
  84. package/dist/effects.js +97 -26
  85. package/dist/effects.js.map +1 -1
  86. package/dist/event-loop.d.ts +1 -1
  87. package/dist/event-loop.js +73 -43
  88. package/dist/event-loop.js.map +1 -1
  89. package/dist/format-parts.d.ts +21 -4
  90. package/dist/format-parts.js +40 -23
  91. package/dist/format-parts.js.map +1 -1
  92. package/dist/gateway-replay.e2e.test.js +4 -4
  93. package/dist/harness.e2e.test.js +2 -2
  94. package/dist/harness.e2e.test.js.map +1 -1
  95. package/dist/hello-thread.e2e.test.js +56 -5
  96. package/dist/hello-thread.e2e.test.js.map +1 -1
  97. package/dist/ingress.js +68 -13
  98. package/dist/ingress.js.map +1 -1
  99. package/dist/interaction-context.d.ts +4 -4
  100. package/dist/interaction-context.js +9 -7
  101. package/dist/interaction-context.js.map +1 -1
  102. package/dist/interrupt.e2e.test.js +8 -5
  103. package/dist/interrupt.e2e.test.js.map +1 -1
  104. package/dist/legacy.e2e.test.js +1 -1
  105. package/dist/lock-routes.d.ts +68 -16
  106. package/dist/lock-routes.js +68 -8
  107. package/dist/lock-routes.js.map +1 -1
  108. package/dist/lock-server.d.ts +3 -2
  109. package/dist/lock-server.js +23 -7
  110. package/dist/lock-server.js.map +1 -1
  111. package/dist/main.d.ts +4 -2
  112. package/dist/main.js +13 -3
  113. package/dist/main.js.map +1 -1
  114. package/dist/markdown/markdown.test.js +4 -4
  115. package/dist/markdown/render-markdown.js +6 -5
  116. package/dist/markdown/render-markdown.js.map +1 -1
  117. package/dist/onboarding-cli.e2e.test.js +7 -6
  118. package/dist/onboarding-cli.e2e.test.js.map +1 -1
  119. package/dist/onboarding.d.ts +3 -10
  120. package/dist/onboarding.e2e.test.js +8 -10
  121. package/dist/onboarding.e2e.test.js.map +1 -1
  122. package/dist/onboarding.js +14 -24
  123. package/dist/onboarding.js.map +1 -1
  124. package/dist/permissions.e2e.test.js +3 -3
  125. package/dist/plugin/coordinator.d.ts +4 -0
  126. package/dist/plugin/coordinator.js +389 -0
  127. package/dist/plugin/coordinator.js.map +1 -0
  128. package/dist/plugin/index.js +76 -17
  129. package/dist/plugin/index.js.map +1 -1
  130. package/dist/plugin.e2e.test.js +1 -1
  131. package/dist/preference-commands.e2e.test.js +103 -24
  132. package/dist/preference-commands.e2e.test.js.map +1 -1
  133. package/dist/prompt.d.ts +21 -8
  134. package/dist/prompt.js +64 -48
  135. package/dist/prompt.js.map +1 -1
  136. package/dist/questions.e2e.test.js +13 -13
  137. package/dist/queue-sources.e2e.test.d.ts +1 -0
  138. package/dist/queue-sources.e2e.test.js +168 -0
  139. package/dist/queue-sources.e2e.test.js.map +1 -0
  140. package/dist/queue.d.ts +9 -1
  141. package/dist/queue.e2e.test.js +48 -30
  142. package/dist/queue.e2e.test.js.map +1 -1
  143. package/dist/queue.js +97 -24
  144. package/dist/queue.js.map +1 -1
  145. package/dist/queue.test.d.ts +1 -0
  146. package/dist/queue.test.js +57 -0
  147. package/dist/queue.test.js.map +1 -0
  148. package/dist/remote-send.e2e.test.js +6 -6
  149. package/dist/remote-send.js +2 -1
  150. package/dist/remote-send.js.map +1 -1
  151. package/dist/renderer.e2e.test.js +7 -7
  152. package/dist/restart.e2e.test.js +2 -2
  153. package/dist/routines.e2e.test.js +2 -2
  154. package/dist/scheduler.d.ts +1 -1
  155. package/dist/scheduler.e2e.test.js +43 -20
  156. package/dist/scheduler.e2e.test.js.map +1 -1
  157. package/dist/scheduler.js +4 -2
  158. package/dist/scheduler.js.map +1 -1
  159. package/dist/schema-sql.d.ts +1 -1
  160. package/dist/schema-sql.js +1 -1
  161. package/dist/schema-sql.js.map +1 -1
  162. package/dist/schema.d.ts +146 -0
  163. package/dist/schema.js +12 -0
  164. package/dist/schema.js.map +1 -1
  165. package/dist/session-commands.e2e.test.js +36 -11
  166. package/dist/session-commands.e2e.test.js.map +1 -1
  167. package/dist/session-events.d.ts +19 -7
  168. package/dist/session-events.js +166 -22
  169. package/dist/session-events.js.map +1 -1
  170. package/dist/session-ops.e2e.test.js +88 -11
  171. package/dist/session-ops.e2e.test.js.map +1 -1
  172. package/dist/sessions.d.ts +41 -18
  173. package/dist/sessions.js +174 -63
  174. package/dist/sessions.js.map +1 -1
  175. package/dist/shell.e2e.test.js +4 -4
  176. package/dist/slash-commands.js +12 -6
  177. package/dist/slash-commands.js.map +1 -1
  178. package/dist/slash-commands.test.js +2 -0
  179. package/dist/slash-commands.test.js.map +1 -1
  180. package/dist/sleep.e2e.test.js +29 -14
  181. package/dist/sleep.e2e.test.js.map +1 -1
  182. package/dist/sleeps.d.ts +1 -0
  183. package/dist/sleeps.js +21 -3
  184. package/dist/sleeps.js.map +1 -1
  185. package/dist/store.d.ts +1 -0
  186. package/dist/store.js +3 -2
  187. package/dist/store.js.map +1 -1
  188. package/dist/system-prompt.d.ts +3 -1
  189. package/dist/system-prompt.js +138 -64
  190. package/dist/system-prompt.js.map +1 -1
  191. package/dist/test/generate-log-plugin/index.js +15 -0
  192. package/dist/test/generate-log-plugin/index.js.map +1 -0
  193. package/dist/test/harness.d.ts +20 -1
  194. package/dist/test/harness.js +51 -10
  195. package/dist/test/harness.js.map +1 -1
  196. package/dist/test/replay.js +11 -7
  197. package/dist/test/replay.js.map +1 -1
  198. package/dist/thread-reducer.d.ts +29 -3
  199. package/dist/thread-reducer.fixtures.test.js +58 -51
  200. package/dist/thread-reducer.fixtures.test.js.map +1 -1
  201. package/dist/thread-reducer.js +112 -25
  202. package/dist/thread-reducer.js.map +1 -1
  203. package/dist/thread-reducer.test.js +197 -24
  204. package/dist/thread-reducer.test.js.map +1 -1
  205. package/dist/voice-attachments.e2e.test.js +108 -18
  206. package/dist/voice-attachments.e2e.test.js.map +1 -1
  207. package/dist/voice-call.e2e.test.js +9 -9
  208. package/dist/voice-call.js +6 -6
  209. package/dist/voice-call.js.map +1 -1
  210. package/dist/voice-openai.e2e.test.js +59 -23
  211. package/dist/voice-openai.e2e.test.js.map +1 -1
  212. package/dist/voice.js +80 -24
  213. package/dist/voice.js.map +1 -1
  214. package/dist/working-directory.e2e.test.js +11 -11
  215. package/dist/working-directory.e2e.test.js.map +1 -1
  216. package/package.json +12 -6
  217. package/src/agent-ui.e2e.test.ts +27 -13
  218. package/src/agent-ui.ts +2 -1
  219. package/src/analytics.e2e.test.ts +1 -1
  220. package/src/autostart.ts +55 -10
  221. package/src/bot.ts +29 -5
  222. package/src/btw.e2e.test.ts +3 -3
  223. package/src/builtin-skills.test.ts +3 -4
  224. package/src/builtin-skills.ts +1 -1
  225. package/src/catalog-refresh.e2e.test.ts +2 -2
  226. package/src/cli/bot.ts +23 -14
  227. package/src/cli/discord.ts +30 -6
  228. package/src/cli/schedule.ts +23 -9
  229. package/src/cli/session.ts +35 -12
  230. package/src/cli/shared.ts +43 -8
  231. package/src/cli-discord.e2e.test.ts +13 -8
  232. package/src/cli-lock.e2e.test.ts +88 -20
  233. package/src/cli-read.e2e.test.ts +17 -8
  234. package/src/cli-sessions.e2e.test.ts +4 -3
  235. package/src/cli.ts +2 -0
  236. package/src/commands/preference-commands.ts +38 -4
  237. package/src/commands/session-commands.ts +12 -7
  238. package/src/commands/thread-commands.ts +92 -24
  239. package/src/commands/worktree-commands.ts +10 -9
  240. package/src/commands.e2e.test.ts +25 -21
  241. package/src/coordinator-agents.e2e.test.ts +168 -0
  242. package/src/coordinator-idle.e2e.test.ts +122 -0
  243. package/src/coordinator-queue.e2e.test.ts +279 -0
  244. package/src/coordinator-warmup.e2e.test.ts +158 -0
  245. package/src/coordinator.e2e.test.ts +545 -0
  246. package/src/coordinator.ts +168 -0
  247. package/src/db.test.ts +1 -0
  248. package/src/diagram.test.ts +56 -0
  249. package/src/diagram.ts +243 -0
  250. package/src/duration.ts +13 -5
  251. package/src/effects.ts +99 -27
  252. package/src/event-loop.ts +71 -42
  253. package/src/format-parts.ts +53 -22
  254. package/src/gateway-replay.e2e.test.ts +4 -4
  255. package/src/harness.e2e.test.ts +2 -2
  256. package/src/hello-thread.e2e.test.ts +59 -5
  257. package/src/ingress.ts +62 -12
  258. package/src/interaction-context.ts +12 -11
  259. package/src/interrupt.e2e.test.ts +8 -5
  260. package/src/legacy.e2e.test.ts +1 -1
  261. package/src/lock-routes.ts +62 -8
  262. package/src/lock-server.ts +23 -7
  263. package/src/main.ts +22 -7
  264. package/src/markdown/markdown.test.ts +4 -4
  265. package/src/markdown/render-markdown.ts +6 -5
  266. package/src/onboarding-cli.e2e.test.ts +7 -6
  267. package/src/onboarding.e2e.test.ts +8 -10
  268. package/src/onboarding.ts +13 -29
  269. package/src/permissions.e2e.test.ts +3 -3
  270. package/src/plugin/coordinator.ts +401 -0
  271. package/src/plugin/index.ts +68 -15
  272. package/src/plugin.e2e.test.ts +1 -1
  273. package/src/preference-commands.e2e.test.ts +103 -23
  274. package/src/prompt.ts +87 -43
  275. package/src/questions.e2e.test.ts +13 -13
  276. package/src/queue-sources.e2e.test.ts +197 -0
  277. package/src/queue.e2e.test.ts +48 -30
  278. package/src/queue.test.ts +59 -0
  279. package/src/queue.ts +104 -24
  280. package/src/remote-send.e2e.test.ts +6 -6
  281. package/src/remote-send.ts +2 -1
  282. package/src/renderer.e2e.test.ts +7 -7
  283. package/src/restart.e2e.test.ts +2 -2
  284. package/src/routines.e2e.test.ts +2 -2
  285. package/src/scheduler.e2e.test.ts +45 -19
  286. package/src/scheduler.ts +4 -2
  287. package/src/schema-sql.ts +1 -1
  288. package/src/schema.ts +13 -0
  289. package/src/session-commands.e2e.test.ts +38 -11
  290. package/src/session-events.ts +160 -21
  291. package/src/session-ops.e2e.test.ts +90 -10
  292. package/src/sessions.ts +214 -64
  293. package/src/shell.e2e.test.ts +4 -4
  294. package/src/slash-commands.test.ts +2 -0
  295. package/src/slash-commands.ts +12 -6
  296. package/src/sleep.e2e.test.ts +30 -13
  297. package/src/sleeps.ts +20 -3
  298. package/src/store.ts +5 -2
  299. package/src/system-prompt.ts +143 -63
  300. package/src/test/generate-log-plugin/index.ts +16 -0
  301. package/src/test/harness.ts +77 -14
  302. package/src/test/replay.ts +12 -6
  303. package/src/thread-reducer.fixtures.test.ts +58 -51
  304. package/src/thread-reducer.test.ts +207 -26
  305. package/src/thread-reducer.ts +138 -37
  306. package/src/voice-attachments.e2e.test.ts +110 -18
  307. package/src/voice-call.e2e.test.ts +9 -9
  308. package/src/voice-call.ts +6 -6
  309. package/src/voice-openai.e2e.test.ts +64 -24
  310. package/src/voice.ts +101 -26
  311. package/src/working-directory.e2e.test.ts +11 -11
  312. package/dist/message-tool.e2e.test.js +0 -39
  313. package/dist/message-tool.e2e.test.js.map +0 -1
  314. package/dist/plugin/read-media.d.ts +0 -23
  315. package/dist/plugin/read-media.js +0 -72
  316. package/dist/plugin/read-media.js.map +0 -1
  317. package/dist/plugin/session-id/index.js +0 -18
  318. package/dist/plugin/session-id/index.js.map +0 -1
  319. package/dist/probe-live.tmp.js +0 -82
  320. package/dist/probe-live.tmp.js.map +0 -1
  321. package/dist/tasks.e2e.test.js +0 -173
  322. package/dist/tasks.e2e.test.js.map +0 -1
  323. /package/dist/{message-tool.e2e.test.d.ts → coordinator-agents.e2e.test.d.ts} +0 -0
  324. /package/dist/{probe-live.tmp.d.ts → coordinator-idle.e2e.test.d.ts} +0 -0
  325. /package/dist/{tasks.e2e.test.d.ts → coordinator-queue.e2e.test.d.ts} +0 -0
  326. /package/dist/{plugin/session-id → test/generate-log-plugin}/index.d.ts +0 -0
@@ -10,7 +10,7 @@ import { parseDuration } from "../duration.js";
10
10
  import { OpenCodeError } from "../errors.js";
11
11
  import { editorsForFile, loadFileEditEvents } from "../file-edit-log.js";
12
12
  import { allMessages, allSessions, readSessionMarkdown, sessionEventsFile, syncTranscripts, transcriptsDir } from "../session-events.js";
13
- import { action, DATA_DIR_HELP, dataDirOrDefault, discordApi, fail, isThread, printJson, printRows, projectDirectory, readClient, SESSION_HELP, resolveTarget, targetOrEnv, waitAndPrintSession, } from "./shared.js";
13
+ import { action, DATA_DIR_HELP, dataDirOrDefault, discordApi, fail, isThread, printJson, printRows, projectDirectory, readClient, SESSION_HELP, resolveTarget, targetOrEnv, waitAndPrintSessions, } from "./shared.js";
14
14
  const execFileAsync = promisify(execFile);
15
15
  // list, sync, wait, editors, diff, url
16
16
  export function registerSessionQueryCommands(cli) {
@@ -25,8 +25,12 @@ export function registerSessionQueryCommands(cli) {
25
25
  const errorCode = options.active ? 64 : 1;
26
26
  const client = await readClient(errorCode);
27
27
  const directory = options.all ? undefined : await projectDirectory({ project: options.project, channel: undefined, dataDir: options.dataDir });
28
+ // By project ID, not directory: sessions in linked worktrees of the same clone belong to the project too.
29
+ const location = directory ? await client.location.get({ location: { directory } }).catch((error) => error) : undefined;
30
+ if (location instanceof Error)
31
+ fail(location, errorCode);
28
32
  const [sessions, active, forms, permissions] = await Promise.all([
29
- allSessions({ client, directory }),
33
+ allSessions({ client, project: location?.project.id }),
30
34
  client.session.active().catch((error) => error),
31
35
  client.form.list().catch((error) => error),
32
36
  client.permission.request.list().catch((error) => error),
@@ -70,16 +74,33 @@ export function registerSessionQueryCommands(cli) {
70
74
  return printJson({ dir: transcriptsDir({ dataDir }), ...result });
71
75
  process.stdout.write(`${transcriptsDir({ dataDir })}: ${result.written} written, ${result.skipped} skipped, ${result.failed} failed\n`);
72
76
  });
73
- cli.command('session wait <id>', 'Wait until idle or waiting for input, then print the session')
77
+ cli.command('session wait [...ids]', 'Wait until every session is idle or waits for the user, then print each one and why it returned')
78
+ .example('kimaki session wait ses_abc 1495130000000000000')
79
+ .example(`kimaki session wait $(kimaki session list --all --active | awk '{print $1}')`)
74
80
  .option('--data-dir <path>', DATA_DIR_HELP)
75
- .option('--timeout <duration>', 'Timeout, for example 30m or 2h')
76
- .action(async (id, options) => {
77
- const { sessionId } = await resolveTarget(id, options.dataDir);
81
+ .option('--timeout <duration>', 'Timeout, for example 30m or 2h; exit 1 when a session still runs')
82
+ .action(async (ids, options) => {
78
83
  const timeout = options.timeout ? parseDuration(options.timeout) : undefined;
79
84
  if (timeout instanceof Error)
80
85
  fail(new Error('Use --timeout 30m, 2h, or another positive duration'));
86
+ // Empty when `$(kimaki session list --active)` found nothing.
87
+ if (ids.length === 0) {
88
+ process.stdout.write('No sessions to wait for\n');
89
+ return;
90
+ }
91
+ const sessionIds = [];
92
+ for (const id of ids)
93
+ sessionIds.push((await resolveTarget(id, options.dataDir)).sessionId);
81
94
  const client = await readClient();
82
- await waitAndPrintSession({ client, sessionId, signal: timeout === undefined ? undefined : AbortSignal.timeout(timeout) });
95
+ const done = await waitAndPrintSessions({
96
+ client,
97
+ sessionIds: [...new Set(sessionIds)],
98
+ dataDir: options.dataDir,
99
+ signal: timeout === undefined ? undefined : AbortSignal.timeout(timeout),
100
+ timeout: options.timeout ?? '',
101
+ });
102
+ if (!done)
103
+ process.exitCode = 1;
83
104
  });
84
105
  cli.command('session editors <file>', 'List sessions that last edited a file, newest first')
85
106
  .option('--data-dir <path>', DATA_DIR_HELP)
@@ -144,7 +165,7 @@ export function registerSessionQueryCommands(cli) {
144
165
  process.stdout.write(`https://discord.com/channels/${thread.guild_id}/${result.threadId}\n`);
145
166
  });
146
167
  }
147
- // abort, archive, title, queue, command, shell, btw, fork, resume: all through the bot.
168
+ // abort, archive, compact, title, queue, command, shell, btw, fork, resume: all through the bot.
148
169
  export function registerSessionActionCommands(cli) {
149
170
  cli.command('session abort [id]', 'Stop the running turn and clear its queue')
150
171
  .option('--data-dir <path>', DATA_DIR_HELP)
@@ -152,6 +173,9 @@ export function registerSessionActionCommands(cli) {
152
173
  cli.command('session archive [id]', 'Archive a session thread')
153
174
  .option('--data-dir <path>', DATA_DIR_HELP)
154
175
  .action(async (id, options) => action({ route: 'session.archive', dataDir: options.dataDir, input: targetOrEnv(id) }));
176
+ cli.command('session compact [id]', 'Summarize the session history after its current turn (default: this session)')
177
+ .option('--data-dir <path>', DATA_DIR_HELP)
178
+ .action(async (id, options) => action({ route: 'session.compact', dataDir: options.dataDir, input: targetOrEnv(id) }));
155
179
  cli.command('session title <title>', 'Rename the session and its Discord thread')
156
180
  .option('--data-dir <path>', DATA_DIR_HELP)
157
181
  .option('-s, --session <id>', SESSION_HELP)
@@ -215,10 +239,11 @@ export function registerSessionHistoryCommands(cli) {
215
239
  fail(new Error(`No events recorded for thread ${resolved.threadId} yet (${file})`));
216
240
  await pipeline(fs.createReadStream(file), process.stdout);
217
241
  });
218
- cli.command('session read <id>', 'Print the messages of a session from OpenCode as markdown')
242
+ cli.command('session read <id>', 'Print the prompts and final answers of a session as markdown')
219
243
  .option('--data-dir <path>', DATA_DIR_HELP)
220
- .option('--thinking', 'Include reasoning')
221
- .option('--verbose', 'Include full tool inputs and outputs')
244
+ .option('--full', 'Every message with tool calls')
245
+ .option('--thinking', 'Full output with reasoning')
246
+ .option('--verbose', 'Full output with tool inputs and outputs')
222
247
  .option('--json', 'Print raw OpenCode messages')
223
248
  .action(async (id, options) => {
224
249
  // Subagent sessions are not in SQLite: resolveTarget keeps their ID.
@@ -230,7 +255,7 @@ export function registerSessionHistoryCommands(cli) {
230
255
  fail(messages);
231
256
  return printJson(messages);
232
257
  }
233
- const markdown = await readSessionMarkdown({ client, sessionId, thinking: options.thinking, verbose: options.verbose });
258
+ const markdown = await readSessionMarkdown({ client, sessionId, full: options.full, thinking: options.thinking, verbose: options.verbose });
234
259
  if (markdown instanceof Error)
235
260
  fail(markdown);
236
261
  process.stdout.write(`${markdown}\n`);
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/cli/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/cli/session.ts"],"names":[],"mappings":"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"}
@@ -26,11 +26,13 @@ export declare function resolveTarget(value: string, dataDir: string | undefined
26
26
  sessionId: string;
27
27
  threadId: string | null;
28
28
  }>;
29
- export declare function waitAndPrintSession({ client, sessionId, signal }: {
29
+ export declare function waitAndPrintSessions({ client, sessionIds, dataDir, signal, timeout }: {
30
30
  client: OpenCodeClient;
31
- sessionId: string;
31
+ sessionIds: readonly string[];
32
+ dataDir: string | undefined;
32
33
  signal?: AbortSignal;
33
- }): Promise<void>;
34
+ timeout: string;
35
+ }): Promise<boolean>;
34
36
  export declare function discordApi(dataDir: string | undefined): Promise<{
35
37
  credentials: import("../credentials.ts").Credentials;
36
38
  api: import("@discordjs/core/http-only").API;
@@ -7,11 +7,11 @@
7
7
  import os from 'node:os';
8
8
  import path from 'node:path';
9
9
  import { ChannelType } from 'discord-api-types/v10';
10
- import { DbError } from "../errors.js";
10
+ import { BotNotRunningError, DbError } from "../errors.js";
11
11
  import { canonicalPath } from "../file-edit-log.js";
12
12
  import { callBot } from "../lock-server.js";
13
13
  import { resolveOpencode } from "../opencode-server.js";
14
- import { readSessionMarkdown, resolveSession, waitForSessionReady } from "../session-events.js";
14
+ import { readSessionMarkdown, resolveSession, waitForSessions } from "../session-events.js";
15
15
  export const DATA_DIR_HELP = 'Data directory (default: ~/.kimaki)';
16
16
  export const SESSION_HELP = 'Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)';
17
17
  // Prints the error and its cause chain: "Discord login failed" alone hides why.
@@ -85,14 +85,49 @@ export async function resolveTarget(value, dataDir) {
85
85
  return { sessionId: target.sessionId, threadId: null };
86
86
  fail(result);
87
87
  }
88
- export async function waitAndPrintSession({ client, sessionId, signal }) {
89
- const waited = await waitForSessionReady({ client, sessionId, signal });
90
- if (waited instanceof Error)
91
- fail(waited);
92
- const markdown = await readSessionMarkdown({ client, sessionId });
93
- if (markdown instanceof Error)
94
- fail(markdown);
95
- process.stdout.write(`${markdown}\n`);
88
+ function statusText({ sessionId, status, buttons, timeout }) {
89
+ // `kimaki buttons` ends the turn, so the run looks finished while the session waits for a click.
90
+ if (buttons.length > 0 && status !== 'running' && status !== 'question' && status !== 'permission') {
91
+ return `is paused: it showed buttons (${buttons.join(', ')}) and waits for the user to click one, so its work may not be done`;
92
+ }
93
+ if (status === 'finished')
94
+ return 'finished its run';
95
+ if (status === 'failed')
96
+ return 'ended its run with an error';
97
+ if (status === 'interrupted')
98
+ return 'was interrupted, by an abort or by a new user message that started another run';
99
+ if (status === 'idle')
100
+ return 'was already idle: its last run ended before the wait started';
101
+ if (status === 'question')
102
+ return 'is paused: it waits for the user to answer a question, so its work is not done';
103
+ if (status === 'permission')
104
+ return 'is paused: it waits for the user to allow a permission, so its work is not done';
105
+ return `is still running after ${timeout}. Run kimaki session wait ${sessionId} to wait for the rest`;
106
+ }
107
+ // Waits until every session ended its run or paused for the user, then prints each one in
108
+ // order under a header that says why it returned. Returns false when `signal` ended the wait first.
109
+ export async function waitAndPrintSessions({ client, sessionIds, dataDir, signal, timeout }) {
110
+ const statuses = await waitForSessions({ client, sessionIds, signal });
111
+ if (statuses instanceof Error)
112
+ fail(statuses);
113
+ // Buttons live in the bot's memory. Without a bot nothing can show them.
114
+ const buttons = await callBot({ dataDir: dataDirOrDefault(dataDir), route: 'session.buttons', input: { sessionIds: [...sessionIds] } });
115
+ if (buttons instanceof Error && !(buttons instanceof BotNotRunningError))
116
+ process.stderr.write(`cannot read pending buttons: ${buttons.message}\n`);
117
+ for (const sessionId of sessionIds) {
118
+ const status = statuses.get(sessionId) ?? 'running';
119
+ const text = statusText({ sessionId, status, buttons: buttons instanceof Error ? [] : buttons.data[sessionId] ?? [], timeout });
120
+ const header = `=== ${sessionId} ${text} ===`;
121
+ if (status === 'running') {
122
+ process.stdout.write(`${header}\n\n`);
123
+ continue;
124
+ }
125
+ const markdown = await readSessionMarkdown({ client, sessionId });
126
+ if (markdown instanceof Error)
127
+ fail(markdown);
128
+ process.stdout.write(`${header}\n\n${markdown}\n\n`);
129
+ }
130
+ return [...statuses.values()].every((status) => status !== 'running');
96
131
  }
97
132
  // Discord REST with the bot token: KIMAKI_BOT_TOKEN (no kimaki.db needed, e.g. CI), else saved credentials.
98
133
  export async function discordApi(dataDir) {
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/cli/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/cli/shared.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,qEAAqE;AACrE,wEAAwE;AACxE,qEAAqE;AACrE,+EAA+E;AAC/E,uEAAuE;AAEvE,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAEnD,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,eAAe,EAAmB,MAAM,sBAAsB,CAAA;AAE5G,MAAM,CAAC,MAAM,aAAa,GAAG,qCAAqC,CAAA;AAClE,MAAM,CAAC,MAAM,YAAY,GAAG,4EAA4E,CAAA;AAExG,gFAAgF;AAChF,MAAM,UAAU,IAAI,CAAC,KAAY,EAAE,IAAI,GAAG,CAAC;IACzC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC7B,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,YAAY,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IACtH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAA2B;IAC1D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC,CAAA;AACtG,CAAC;AAID,4EAA4E;AAC5E,sEAAsE;AACtE,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,gFAAgF,CAAC,CAAA;IAC3G,IAAI,GAAG;QAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAE,EAAE,CAAA;IACrC,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;IAC7D,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;IAC7D,OAAO,IAAI,KAAK,CAAC,sDAAsD,KAAK,EAAE,CAAC,CAAA;AACjF,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,WAAW,CAAC,KAAyB;IACnD,MAAM,EAAE,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;IACtD,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAA;IAClB,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAA;IAC9B,IAAI,MAAM,YAAY,KAAK;QAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACzC,OAAO,MAAM,CAAA;AACf,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAA2B;IACzD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAA;IAC3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IACnF,IAAI,MAAM,YAAY,KAAK;QAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACzC,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;AAC7D,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,SAAS,CAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAsE;IACnH,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAA;IAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;AACpE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,SAAS,GAAG,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAA;IACnH,IAAI,QAAQ,YAAY,KAAK;QAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IACxD,OAAO,QAAQ,CAAC,MAAM,CAAA;AACxB,CAAC;AAED,4FAA4F;AAC5F,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAa,EAAE,OAA2B;IAC5E,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;IACjC,IAAI,MAAM,YAAY,KAAK;QAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACzC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAA;IACvC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC/F,MAAM,CAAC,KAAK,EAAE,CAAA;IACd,IAAI,CAAC,CAAC,MAAM,YAAY,KAAK,CAAC;QAAE,OAAO,MAAM,CAAA;IAC7C,IAAI,MAAM,CAAC,SAAS;QAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;IAC5E,IAAI,CAAC,MAAM,CAAC,CAAA;AACd,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAiF;IACxI,iGAAiG;IACjG,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QACnG,OAAO,iCAAiC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,oEAAoE,CAAA;IAChI,CAAC;IACD,IAAI,MAAM,KAAK,UAAU;QAAE,OAAO,kBAAkB,CAAA;IACpD,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,6BAA6B,CAAA;IAC7D,IAAI,MAAM,KAAK,aAAa;QAAE,OAAO,gFAAgF,CAAA;IACrH,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,8DAA8D,CAAA;IAC5F,IAAI,MAAM,KAAK,UAAU;QAAE,OAAO,gFAAgF,CAAA;IAClH,IAAI,MAAM,KAAK,YAAY;QAAE,OAAO,iFAAiF,CAAA;IACrH,OAAO,0BAA0B,OAAO,6BAA6B,SAAS,uBAAuB,CAAA;AACvG,CAAC;AAED,0FAA0F;AAC1F,oGAAoG;AACpG,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAMxF;IACC,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;IACtE,IAAI,QAAQ,YAAY,KAAK;QAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC7C,yEAAyE;IACzE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,CAAC,CAAA;IACvI,IAAI,OAAO,YAAY,KAAK,IAAI,CAAC,CAAC,OAAO,YAAY,kBAAkB,CAAC;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAA;IACnJ,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS,CAAA;QACnD,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;QAC/H,MAAM,MAAM,GAAG,OAAO,SAAS,IAAI,IAAI,MAAM,CAAA;QAC7C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,MAAM,CAAC,CAAA;YACrC,SAAQ;QACV,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;QACjE,IAAI,QAAQ,YAAY,KAAK;YAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,OAAO,QAAQ,MAAM,CAAC,CAAA;IACtD,CAAC;IACD,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAA;AACvE,CAAC;AAED,4GAA4G;AAC5G,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA2B;IAC1D,MAAM,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IAC3K,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE;QACpC,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAA;QAC9D,IAAI,OAAO;YAAE,OAAO,OAAO,CAAA;QAC3B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAA;QACvC,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAA;QAC3D,MAAM,CAAC,KAAK,EAAE,CAAA;QACd,OAAO,KAAK,CAAA;IACd,CAAC,CAAC,EAAE,CAAA;IACJ,IAAI,WAAW,YAAY,KAAK;QAAE,IAAI,CAAC,WAAW,CAAC,CAAA;IACnD,IAAI,CAAC,WAAW;QAAE,IAAI,CAAC,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC,CAAA;IAC3G,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAA;AAClJ,CAAC;AAID,MAAM,UAAU,QAAQ,CAAkC,OAAU;IAClE,OAAO,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,aAAa,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,kBAAkB,CAAA;AACnJ,CAAC;AAED,oGAAoG;AACpG,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAA6F;IAC7J,IAAI,CAAC,OAAO;QAAE,OAAO,aAAa,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAC5D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAA;IACvC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IACvK,MAAM,CAAC,KAAK,EAAE,CAAA;IACd,IAAI,GAAG,YAAY,KAAK;QAAE,IAAI,CAAC,GAAG,CAAC,CAAA;IACnC,IAAI,CAAC,GAAG;QAAE,IAAI,CAAC,IAAI,KAAK,CAAC,oCAAoC,OAAO,EAAE,CAAC,CAAC,CAAA;IACxE,OAAO,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AACrC,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,MAAM,CAA0B,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAA6F;IAChL,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IAC1F,IAAI,MAAM,YAAY,KAAK;QAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC1D,CAAC"}
@@ -42,7 +42,12 @@ test('independent Discord CLI lists threads and users, uploads a file, and reads
42
42
  fs.mkdirSync(path.join(server.root, 'other'), { recursive: true });
43
43
  for (const name of ['b.png', 'my shot.png', 'other/b.png'])
44
44
  fs.writeFileSync(path.join(server.root, name), 'png');
45
- await cli(['upload-to-discord', ...['b.png', 'report.txt', 'my shot.png', 'other/b.png'].map((name) => path.join(server.root, name)), '--session', started.sessionId]);
45
+ const uploaded = await cli(['upload-to-discord', ...['b.png', 'report.txt', 'my shot.png', 'other/b.png'].map((name) => path.join(server.root, name)), '--session', started.sessionId]);
46
+ // Each file with its Discord URL, in argument order, so a coordinator can repost them (the twin uses data: URLs).
47
+ expect(uploaded.stdout).toMatchInlineSnapshot(`
48
+ "{"uploaded":[{"name":"b.png","url":"data:application/octet-stream;base64,cG5n"},{"name":"report.txt","url":"data:application/octet-stream;base64,cmVwb3J0"},{"name":"my shot.png","url":"data:application/octet-stream;base64,cG5n"},{"name":"b.png","url":"data:application/octet-stream;base64,cG5n"}]}
49
+ "
50
+ `);
46
51
  // The agent learns that nothing was posted.
47
52
  const missing = await cli(['upload-to-discord', path.join(server.root, 'missing.png'), '--session', started.sessionId]).catch((error) => error);
48
53
  expect(missing.stderr.replace(server.root, '<root>')).toMatchInlineSnapshot(`
@@ -53,20 +58,20 @@ test('independent Discord CLI lists threads and users, uploads a file, and reads
53
58
  const install = await cli(['bot', 'install-url']);
54
59
  expect(await twin.discord.thread(started.threadId).text()).toMatchInlineSnapshot(`
55
60
  "--- from: assistant (TestBot)
56
- » **CLI:** Discord CLI flow
61
+ -# » **CLI:** Discord CLI flow
57
62
  -# *using deterministic-provider/deterministic-v2 ⋅ build*
58
63
  ok
59
- -# *project ⋅ main ⋅ Ns ⋅ deterministic-v2*
60
- [file: attachment://report.txt]
64
+ -# *main ⋅ Ns ⋅ deterministic-v2*
65
+ [file: data:application/octet-stream;base64,cmVwb3J0]
61
66
  [attachment: report.txt]
62
67
  -# 1. \`b.png\`
63
- [media: attachment://b.png]
68
+ [media: data:application/octet-stream;base64,cG5n]
64
69
  -# 2. \`report.txt\`
65
- [file: attachment://report.txt]
70
+ [file: data:application/octet-stream;base64,cmVwb3J0]
66
71
  -# 3. \`my shot.png\`
67
- [media: attachment://my_shot.png]
72
+ [media: data:application/octet-stream;base64,cG5n]
68
73
  -# 4. \`b.png\`
69
- [media: attachment://4-b.png]
74
+ [media: data:application/octet-stream;base64,cG5n]
70
75
  [attachment: b.png]
71
76
  [attachment: report.txt]
72
77
  [attachment: my_shot.png]
@@ -1 +1 @@
1
- {"version":3,"file":"cli-discord.e2e.test.js","sourceRoot":"","sources":["../src/cli-discord.e2e.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-discord.e2e.test.js","sourceRoot":"","sources":["../src/cli-discord.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -30,16 +30,23 @@ test('CLI send starts and continues a session through the authenticated bot API'
30
30
  const first = await cli(['send', '--channel', twin.channelId, '--prompt', 'CLI first']);
31
31
  const ids = JSON.parse(first.stdout);
32
32
  await waitForFooter({ discord: twin.discord, threadId: ids.threadId });
33
+ // Follow-ups into an idle thread have no Discord message: the thread must still show them.
33
34
  await cli(['send', '--thread', ids.threadId, '--prompt', 'CLI second. queue']);
34
35
  await waitForFooter({ discord: twin.discord, threadId: ids.threadId, count: 2 });
36
+ await cli(['send', '--thread', ids.threadId, '--prompt', 'CLI third']);
37
+ await waitForFooter({ discord: twin.discord, threadId: ids.threadId, count: 3 });
35
38
  expect(await twin.discord.thread(ids.threadId).text()).toMatchInlineSnapshot(`
36
39
  "--- from: assistant (TestBot)
37
- » **CLI:** CLI first
40
+ -# » **CLI:** CLI first
38
41
  -# *using deterministic-provider/deterministic-v2 ⋅ build*
39
42
  ok
40
- -# *project ⋅ main ⋅ Ns ⋅ deterministic-v2*
43
+ -# *main ⋅ Ns ⋅ deterministic-v2*
44
+ -# » **CLI:** CLI second
41
45
  ok
42
- -# *project ⋅ main ⋅ Ns ⋅ deterministic-v2*"
46
+ -# *main ⋅ Ns ⋅ deterministic-v2*
47
+ -# » **CLI:** CLI third
48
+ ok
49
+ -# *main ⋅ Ns ⋅ deterministic-v2*"
43
50
  `);
44
51
  expect(ids.sessionId).toMatch(/^ses_/);
45
52
  const tokenFile = path.join(dataDir, 'lock-token');
@@ -52,12 +59,57 @@ test('CLI send starts and continues a session through the authenticated bot API'
52
59
  });
53
60
  expect(invalid.status).toBe(400);
54
61
  });
62
+ test('CLI send shows a prompt over 2000 chars in full, split into messages', async () => {
63
+ const prompt = Array.from({ length: 30 }, (_, index) => `line ${String(index).padStart(2, '0')}: ${'x'.repeat(70)}`).join('\n');
64
+ const sent = await cli(['send', '--channel', twin.channelId, '--prompt', prompt]);
65
+ const ids = JSON.parse(sent.stdout);
66
+ await waitForFooter({ discord: twin.discord, threadId: ids.threadId });
67
+ expect(await twin.discord.thread(ids.threadId).text()).toMatchInlineSnapshot(`
68
+ "--- from: assistant (TestBot)
69
+ -# » **CLI:** line 00: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
70
+ -# line 01: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
71
+ -# line 02: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
72
+ -# line 03: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
73
+ -# line 04: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
74
+ -# line 05: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
75
+ -# line 06: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
76
+ -# line 07: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
77
+ -# line 08: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
78
+ -# line 09: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
79
+ -# line 10: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
80
+ -# line 11: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
81
+ -# line 12: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
82
+ -# line 13: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
83
+ -# line 14: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
84
+ -# line 15: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
85
+ -# line 16: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
86
+ -# line 17: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
87
+ -# line 18: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
88
+ -# line 19: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
89
+ -# line 20: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
90
+ -# line 21: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
91
+ -# line 22: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
92
+ -# line 23: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
93
+ -# line 24: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
94
+ -# line 25: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
95
+ -# line 26: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
96
+ -# line 27: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
97
+ -# line 28: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
98
+ -# line 29: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
99
+ -# *using deterministic-provider/deterministic-v2 ⋅ build*
100
+ ok
101
+ -# *main ⋅ Ns ⋅ deterministic-v2*"
102
+ `);
103
+ const messages = await twin.discord.thread(ids.threadId).getMessages();
104
+ expect(messages.every((message) => message.content.length <= 2000)).toBe(true);
105
+ });
55
106
  test('CLI help documents the supported P7 commands', async () => {
56
107
  const output = await cli(['--help']);
57
108
  expect(output.stdout).toContain('send');
58
109
  expect(output.stdout).toContain('upload-request');
59
- expect(output.stdout).toMatchInlineSnapshot(`
60
- "kimaki
110
+ // The header is `kimaki/<version>`; keep the snapshot stable across releases.
111
+ expect(output.stdout.replace(/^kimaki\/[^\n]+/, 'kimaki/<version>')).toMatchInlineSnapshot(`
112
+ "kimaki/<version>
61
113
 
62
114
  Usage:
63
115
  $ kimaki [options]
@@ -91,9 +143,9 @@ test('CLI help documents the supported P7 commands', async () => {
91
143
  --rebuild Write transcripts again, also current ones
92
144
  --json Output as JSON
93
145
 
94
- session wait <id> Wait until idle or waiting for input, then print the session
146
+ session wait [...ids] Wait until every session is idle or waits for the user, then print each one and why it returned
95
147
  --data-dir <path> Data directory (default: ~/.kimaki)
96
- --timeout <duration> Timeout, for example 30m or 2h
148
+ --timeout <duration> Timeout, for example 30m or 2h; exit 1 when a session still runs
97
149
 
98
150
  session editors <file> List sessions that last edited a file, newest first
99
151
  --data-dir <path> Data directory (default: ~/.kimaki)
@@ -129,6 +181,9 @@ test('CLI help documents the supported P7 commands', async () => {
129
181
  session archive [id] Archive a session thread
130
182
  --data-dir <path> Data directory (default: ~/.kimaki)
131
183
 
184
+ session compact [id] Summarize the session history after its current turn (default: this session)
185
+ --data-dir <path> Data directory (default: ~/.kimaki)
186
+
132
187
  session title <title> Rename the session and its Discord thread
133
188
  --data-dir <path> Data directory (default: ~/.kimaki)
134
189
  -s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
@@ -177,7 +232,7 @@ test('CLI help documents the supported P7 commands', async () => {
177
232
  --data-dir <path> Data directory (default: ~/.kimaki)
178
233
  -c, --channel <id> Destination channel (default: channel of the session folder)
179
234
 
180
- buttons Show 1-3 action buttons. Call last, after visible text
235
+ buttons Show 1-3 action buttons. Explain them in your text
181
236
  --data-dir <path> Data directory (default: ~/.kimaki)
182
237
  -s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
183
238
  -b, --button <spec> Repeatable: Label[:white|blue|green|red]
@@ -207,7 +262,7 @@ test('CLI help documents the supported P7 commands', async () => {
207
262
  -d, --project <path> Project directory of the new thread
208
263
  --thread <id> Continue this thread (ID or URL)
209
264
  -s, --session <id> Continue this session: session ID, thread ID or thread URL
210
- -p, --prompt <text> Prompt; thread suffixes . queue and . btw are supported
265
+ -p, --prompt <text> Prompt; thread suffixes . queue and . btw are supported (required)
211
266
  -f, --file <path> Attach a local file (repeatable)
212
267
  -n, --name <text> Thread name
213
268
  --agent <name> Agent ID
@@ -219,7 +274,7 @@ test('CLI help documents the supported P7 commands', async () => {
219
274
  --parent-session <id> Record the parent session in session metadata
220
275
  --permission <rule> Repeatable: tool[:pattern]:allow|deny|ask
221
276
  --notify-only Post a notification thread without a model turn
222
- --wait Wait until idle or input is needed, then print the session
277
+ --wait [seconds] Wait until idle or input is needed (at most this many seconds, default 1 day), then print the session
223
278
  --send-at <when> Schedule: UTC ISO date ending in Z, or cron expression (UTC)
224
279
  --pre-run <command> Scheduled only: run first in the project. Exit 0 starts, stdout is appended
225
280
  --allow-concurrency Scheduled only: allow overlapping runs of this routine
@@ -227,10 +282,11 @@ test('CLI help documents the supported P7 commands', async () => {
227
282
  session events <id> Print the recorded OpenCode events of a thread as JSONL (root + subagents)
228
283
  --data-dir <path> Data directory (default: ~/.kimaki)
229
284
 
230
- session read <id> Print the messages of a session from OpenCode as markdown
285
+ session read <id> Print the prompts and final answers of a session as markdown
231
286
  --data-dir <path> Data directory (default: ~/.kimaki)
232
- --thinking Include reasoning
233
- --verbose Include full tool inputs and outputs
287
+ --full Every message with tool calls
288
+ --thinking Full output with reasoning
289
+ --verbose Full output with tool inputs and outputs
234
290
  --json Print raw OpenCode messages
235
291
 
236
292
  session cwd [directory] Show or change the working directory at a native safe boundary
@@ -290,7 +346,7 @@ test('CLI help documents the supported P7 commands', async () => {
290
346
  routine run <routineId> Run a routine now
291
347
  --data-dir <path> Data directory (default: ~/.kimaki)
292
348
 
293
- 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
349
+ 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. When blocked on a user action outside the chat (a sudo or permission dialog, a login), ask for it, assume they will do it, and sleep 5m, then check and continue on your own
294
350
  --data-dir <path> Data directory (default: ~/.kimaki)
295
351
  --duration <duration> Relative wait, e.g. 30m, 2h, 1d
296
352
  --until <date> UTC ISO date ending in Z
@@ -315,6 +371,10 @@ test('CLI help documents the supported P7 commands', async () => {
315
371
  -s, --session <id> Session ID, Discord thread ID or thread URL (default: OPENCODE_SESSION_ID)
316
372
  -c, --channel <id> Kimaki voice channel to post in (default in voice calls: KIMAKI_CHANNEL_ID)
317
373
 
374
+ diagram <input> Render a Mermaid diagram (file path, or - for stdin) to a light themed PNG. Upload it with upload-to-discord
375
+ -o, --output <path> PNG file to write (default: input path with .png, or a temp file for stdin)
376
+ --dark Dark theme instead of light
377
+
318
378
  Tools:
319
379
  tunnel Run a command and expose its local port with a public opentunnel.xyz URL. The child gets KIMAKI_TUNNEL_URL
320
380
  -p, --port <port> Local port (default: read from the command output)
@@ -373,10 +433,13 @@ test('CLI help documents the supported P7 commands', async () => {
373
433
  --allow-all-users Every server member can use the bot (role "no-kimaki" still denies; provider login stays admin-only)
374
434
  --voice <name> Voice of voice calls, saved for later starts (e.g. cove, juniper, sol). "default" resets it
375
435
  --disable-skills <list> Built-in Kimaki skills to turn off: "all" or a comma separated list (kimaki-debug,kimaki-tunnel)
376
- --disable-prompt <section> System prompt section to remove from new sessions (repeatable): discord-permissions, kimaki-debugging, file-upload-requests, action-buttons, session-sleep, session-abort, cross-project-commands, waiting-sessions, critique-diffs, markdown-formatting, discord-callouts, search-result-urls, ascii-diagrams
436
+ --disable-prompt <section> System prompt section to remove from new sessions (repeatable): discord-permissions, kimaki-debugging, file-upload-requests, action-buttons, session-sleep, session-abort, cross-project-commands, waiting-sessions, critique-diffs, markdown-formatting, discord-callouts, search-result-urls, diagrams
377
437
  --no-analytics Disable anonymous usage analytics (same as KIMAKI_STRADA_ENABLED=0)
438
+ --coordinator [enabled] Channel messages go to one long coordinator session that starts threads for the work. "false" turns it off (/toggle-coordinator sets one channel) (default: true)
439
+ --no-autostart Do not open a terminal with the bot when OpenCode starts (for bots run by launchd, systemd or pm2)
378
440
  --if-not-running Start only if no bot runs; never stop the running one (used by autostart)
379
441
  -h, --help Display this message
442
+ -V, --version Display version number
380
443
  "
381
444
  `);
382
445
  });
@@ -402,16 +465,20 @@ test('CLI registry shares thread actions, preferences, title and archive', async
402
465
  await cli(['session', 'queue', 'add', 'Registry queued', '--session', started.threadId]);
403
466
  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');
404
467
  await waitForFooter({ discord: twin.discord, threadId: started.threadId, count: 2 });
468
+ // The deterministic model writes no summary template, so the compaction runs and fails.
469
+ expect(JSON.parse((await cli(['session', 'compact', started.threadId])).stdout)).toEqual({ sessionId: started.sessionId, queued: true });
405
470
  await cli(['session', 'abort', started.sessionId]);
406
471
  await cli(['session', 'archive', started.threadId]);
407
472
  expect(await twin.discord.thread(started.threadId).text()).toMatchInlineSnapshot(`
408
473
  "--- from: assistant (TestBot)
409
- » **CLI:** Registry first
474
+ -# » **CLI:** Registry first
410
475
  -# *using deterministic-provider/deterministic-v2 ⋅ build*
411
476
  ok
412
- -# *project ⋅ main ⋅ Ns ⋅ deterministic-v2*
477
+ -# *main ⋅ Ns ⋅ deterministic-v2*
478
+ -# » **CLI:** Registry queued
413
479
  ok
414
- -# *project ⋅ main ⋅ Ns ⋅ deterministic-v2*"
480
+ -# *main ⋅ Ns ⋅ deterministic-v2 ⋅ build*
481
+ ✗ compaction failed: Compaction summary did not match the required template"
415
482
  `);
416
483
  expect((await twin.discord.channel(twin.channelId).getThreads()).find((thread) => thread.id === started.threadId)?.name).toBe('CLI renamed');
417
484
  });
@@ -423,10 +490,10 @@ test('send settings reach native session creation; notifications create no sessi
423
490
  await waitForFooter({ discord: twin.discord, threadId: ids.threadId });
424
491
  expect(await twin.discord.thread(ids.threadId).text()).toMatchInlineSnapshot(`
425
492
  "--- from: assistant (TestBot)
426
- » **CLI:** Send settings
493
+ -# » **CLI:** Send settings
427
494
  -# *using deterministic-provider/deterministic-v2 ⋅ build*
428
495
  ok
429
- -# *subfolder ⋅ main ⋅ Ns ⋅ deterministic-v2*"
496
+ -# *subfolder ⋅ main ⋅ Ns ⋅ deterministic-v2 ⋅ build*"
430
497
  `);
431
498
  const info = await (await server.client()).session.get({ sessionID: ids.sessionId });
432
499
  expect(info.location.directory).toBe(subdir);