kimaki 1.3.0 → 1.5.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 (346) 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 +13 -6
  15. package/dist/bot.js +17 -15
  16. package/dist/bot.js.map +1 -1
  17. package/dist/btw.e2e.test.js +3 -3
  18. package/dist/builtin-skills.d.ts +3 -0
  19. package/dist/builtin-skills.js +29 -0
  20. package/dist/builtin-skills.js.map +1 -1
  21. package/dist/builtin-skills.test.js +72 -1
  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.d.ts +1 -1
  25. package/dist/cli/bot.js +33 -18
  26. package/dist/cli/bot.js.map +1 -1
  27. package/dist/cli/discord.js +32 -6
  28. package/dist/cli/discord.js.map +1 -1
  29. package/dist/cli/schedule.js +23 -9
  30. package/dist/cli/schedule.js.map +1 -1
  31. package/dist/cli/session.js +37 -12
  32. package/dist/cli/session.js.map +1 -1
  33. package/dist/cli/shared.d.ts +5 -3
  34. package/dist/cli/shared.js +45 -10
  35. package/dist/cli/shared.js.map +1 -1
  36. package/dist/cli-discord.e2e.test.js +13 -8
  37. package/dist/cli-discord.e2e.test.js.map +1 -1
  38. package/dist/cli-lock.e2e.test.js +87 -20
  39. package/dist/cli-lock.e2e.test.js.map +1 -1
  40. package/dist/cli-read.e2e.test.js +18 -9
  41. package/dist/cli-read.e2e.test.js.map +1 -1
  42. package/dist/cli-sessions.e2e.test.js +4 -3
  43. package/dist/cli-sessions.e2e.test.js.map +1 -1
  44. package/dist/cli.js +2 -0
  45. package/dist/cli.js.map +1 -1
  46. package/dist/commands/preference-commands.d.ts +4 -0
  47. package/dist/commands/preference-commands.js +38 -4
  48. package/dist/commands/preference-commands.js.map +1 -1
  49. package/dist/commands/session-commands.js +11 -8
  50. package/dist/commands/session-commands.js.map +1 -1
  51. package/dist/commands/thread-commands.js +94 -24
  52. package/dist/commands/thread-commands.js.map +1 -1
  53. package/dist/commands/worktree-commands.d.ts +5 -6
  54. package/dist/commands/worktree-commands.js +8 -7
  55. package/dist/commands/worktree-commands.js.map +1 -1
  56. package/dist/commands.e2e.test.js +25 -21
  57. package/dist/commands.e2e.test.js.map +1 -1
  58. package/dist/coordinator-agents.e2e.test.d.ts +1 -0
  59. package/dist/coordinator-agents.e2e.test.js +113 -0
  60. package/dist/coordinator-agents.e2e.test.js.map +1 -0
  61. package/dist/coordinator-idle.e2e.test.d.ts +1 -0
  62. package/dist/coordinator-idle.e2e.test.js +100 -0
  63. package/dist/coordinator-idle.e2e.test.js.map +1 -0
  64. package/dist/coordinator-queue.e2e.test.d.ts +1 -0
  65. package/dist/coordinator-queue.e2e.test.js +244 -0
  66. package/dist/coordinator-queue.e2e.test.js.map +1 -0
  67. package/dist/coordinator-warmup.e2e.test.d.ts +1 -0
  68. package/dist/coordinator-warmup.e2e.test.js +131 -0
  69. package/dist/coordinator-warmup.e2e.test.js.map +1 -0
  70. package/dist/coordinator.d.ts +6 -0
  71. package/dist/coordinator.e2e.test.d.ts +1 -0
  72. package/dist/coordinator.e2e.test.js +505 -0
  73. package/dist/coordinator.e2e.test.js.map +1 -0
  74. package/dist/coordinator.js +164 -0
  75. package/dist/coordinator.js.map +1 -0
  76. package/dist/db.d.ts +78 -3
  77. package/dist/db.test.js +1 -0
  78. package/dist/db.test.js.map +1 -1
  79. package/dist/diagram.d.ts +11 -0
  80. package/dist/diagram.js +232 -0
  81. package/dist/diagram.js.map +1 -0
  82. package/dist/diagram.test.d.ts +1 -0
  83. package/dist/diagram.test.js +52 -0
  84. package/dist/diagram.test.js.map +1 -0
  85. package/dist/duration.js +13 -5
  86. package/dist/duration.js.map +1 -1
  87. package/dist/effects.d.ts +6 -1
  88. package/dist/effects.js +97 -26
  89. package/dist/effects.js.map +1 -1
  90. package/dist/event-loop.d.ts +2 -3
  91. package/dist/event-loop.js +74 -44
  92. package/dist/event-loop.js.map +1 -1
  93. package/dist/format-parts.d.ts +21 -4
  94. package/dist/format-parts.js +40 -23
  95. package/dist/format-parts.js.map +1 -1
  96. package/dist/gateway-replay.e2e.test.js +4 -4
  97. package/dist/harness.e2e.test.js +2 -2
  98. package/dist/harness.e2e.test.js.map +1 -1
  99. package/dist/hello-thread.e2e.test.js +56 -5
  100. package/dist/hello-thread.e2e.test.js.map +1 -1
  101. package/dist/ingress.js +47 -12
  102. package/dist/ingress.js.map +1 -1
  103. package/dist/interaction-context.d.ts +4 -4
  104. package/dist/interaction-context.js +9 -7
  105. package/dist/interaction-context.js.map +1 -1
  106. package/dist/interrupt.e2e.test.js +8 -5
  107. package/dist/interrupt.e2e.test.js.map +1 -1
  108. package/dist/legacy.e2e.test.js +1 -1
  109. package/dist/lock-routes.d.ts +83 -31
  110. package/dist/lock-routes.js +68 -8
  111. package/dist/lock-routes.js.map +1 -1
  112. package/dist/lock-server.d.ts +3 -2
  113. package/dist/lock-server.js +23 -7
  114. package/dist/lock-server.js.map +1 -1
  115. package/dist/main.d.ts +6 -3
  116. package/dist/main.js +14 -4
  117. package/dist/main.js.map +1 -1
  118. package/dist/mainmast-idle.e2e.test.d.ts +1 -0
  119. package/dist/mainmast-idle.e2e.test.js +99 -0
  120. package/dist/mainmast-idle.e2e.test.js.map +1 -0
  121. package/dist/mainmast-queue.e2e.test.d.ts +1 -0
  122. package/dist/mainmast-queue.e2e.test.js +244 -0
  123. package/dist/mainmast-queue.e2e.test.js.map +1 -0
  124. package/dist/mainmast-warmup.e2e.test.d.ts +1 -0
  125. package/dist/mainmast-warmup.e2e.test.js +130 -0
  126. package/dist/mainmast-warmup.e2e.test.js.map +1 -0
  127. package/dist/mainmast.d.ts +6 -0
  128. package/dist/mainmast.e2e.test.d.ts +1 -0
  129. package/dist/mainmast.e2e.test.js +428 -0
  130. package/dist/mainmast.e2e.test.js.map +1 -0
  131. package/dist/mainmast.js +156 -0
  132. package/dist/mainmast.js.map +1 -0
  133. package/dist/markdown/markdown.test.js +14 -4
  134. package/dist/markdown/markdown.test.js.map +1 -1
  135. package/dist/markdown/render-markdown.js +9 -6
  136. package/dist/markdown/render-markdown.js.map +1 -1
  137. package/dist/onboarding-cli.e2e.test.js +7 -6
  138. package/dist/onboarding-cli.e2e.test.js.map +1 -1
  139. package/dist/onboarding.d.ts +3 -10
  140. package/dist/onboarding.e2e.test.js +8 -10
  141. package/dist/onboarding.e2e.test.js.map +1 -1
  142. package/dist/onboarding.js +14 -24
  143. package/dist/onboarding.js.map +1 -1
  144. package/dist/permissions.e2e.test.js +3 -3
  145. package/dist/plugin/coordinator.d.ts +4 -0
  146. package/dist/plugin/coordinator.js +389 -0
  147. package/dist/plugin/coordinator.js.map +1 -0
  148. package/dist/plugin/index.js +93 -61
  149. package/dist/plugin/index.js.map +1 -1
  150. package/dist/plugin/mainmast.d.ts +4 -0
  151. package/dist/plugin/mainmast.js +379 -0
  152. package/dist/plugin/mainmast.js.map +1 -0
  153. package/dist/plugin.e2e.test.js +1 -1
  154. package/dist/preference-commands.e2e.test.js +103 -24
  155. package/dist/preference-commands.e2e.test.js.map +1 -1
  156. package/dist/project.d.ts +1 -1
  157. package/dist/prompt.d.ts +22 -9
  158. package/dist/prompt.js +64 -48
  159. package/dist/prompt.js.map +1 -1
  160. package/dist/questions.e2e.test.js +13 -13
  161. package/dist/queue-sources.e2e.test.d.ts +1 -0
  162. package/dist/queue-sources.e2e.test.js +168 -0
  163. package/dist/queue-sources.e2e.test.js.map +1 -0
  164. package/dist/queue.d.ts +9 -1
  165. package/dist/queue.e2e.test.js +48 -30
  166. package/dist/queue.e2e.test.js.map +1 -1
  167. package/dist/queue.js +97 -24
  168. package/dist/queue.js.map +1 -1
  169. package/dist/queue.test.d.ts +1 -0
  170. package/dist/queue.test.js +57 -0
  171. package/dist/queue.test.js.map +1 -0
  172. package/dist/remote-send.e2e.test.js +6 -6
  173. package/dist/remote-send.js +2 -1
  174. package/dist/remote-send.js.map +1 -1
  175. package/dist/renderer.e2e.test.js +7 -7
  176. package/dist/restart.e2e.test.js +2 -2
  177. package/dist/routines.e2e.test.js +2 -2
  178. package/dist/scheduler.d.ts +3 -3
  179. package/dist/scheduler.e2e.test.js +43 -20
  180. package/dist/scheduler.e2e.test.js.map +1 -1
  181. package/dist/scheduler.js +4 -2
  182. package/dist/scheduler.js.map +1 -1
  183. package/dist/schema-sql.d.ts +1 -1
  184. package/dist/schema-sql.js +1 -1
  185. package/dist/schema-sql.js.map +1 -1
  186. package/dist/schema.d.ts +152 -6
  187. package/dist/schema.js +12 -0
  188. package/dist/schema.js.map +1 -1
  189. package/dist/session-commands.e2e.test.js +36 -11
  190. package/dist/session-commands.e2e.test.js.map +1 -1
  191. package/dist/session-events.d.ts +18 -6
  192. package/dist/session-events.js +175 -27
  193. package/dist/session-events.js.map +1 -1
  194. package/dist/session-ops.e2e.test.js +63 -12
  195. package/dist/session-ops.e2e.test.js.map +1 -1
  196. package/dist/sessions.d.ts +44 -21
  197. package/dist/sessions.js +177 -65
  198. package/dist/sessions.js.map +1 -1
  199. package/dist/shell.e2e.test.js +4 -4
  200. package/dist/slash-commands.js +6 -4
  201. package/dist/slash-commands.js.map +1 -1
  202. package/dist/slash-commands.test.js +2 -0
  203. package/dist/slash-commands.test.js.map +1 -1
  204. package/dist/sleep.e2e.test.js +29 -14
  205. package/dist/sleep.e2e.test.js.map +1 -1
  206. package/dist/sleeps.d.ts +2 -1
  207. package/dist/sleeps.js +21 -3
  208. package/dist/sleeps.js.map +1 -1
  209. package/dist/store.d.ts +1 -0
  210. package/dist/store.js +3 -2
  211. package/dist/store.js.map +1 -1
  212. package/dist/system-prompt.d.ts +5 -15
  213. package/dist/system-prompt.js +180 -131
  214. package/dist/system-prompt.js.map +1 -1
  215. package/dist/test/generate-log-plugin/index.d.ts +3 -0
  216. package/dist/test/generate-log-plugin/index.js +15 -0
  217. package/dist/test/generate-log-plugin/index.js.map +1 -0
  218. package/dist/test/harness.d.ts +20 -2
  219. package/dist/test/harness.js +51 -11
  220. package/dist/test/harness.js.map +1 -1
  221. package/dist/test/replay.js +11 -8
  222. package/dist/test/replay.js.map +1 -1
  223. package/dist/thread-reducer.d.ts +29 -6
  224. package/dist/thread-reducer.fixtures.test.js +58 -51
  225. package/dist/thread-reducer.fixtures.test.js.map +1 -1
  226. package/dist/thread-reducer.js +109 -50
  227. package/dist/thread-reducer.js.map +1 -1
  228. package/dist/thread-reducer.test.js +190 -48
  229. package/dist/thread-reducer.test.js.map +1 -1
  230. package/dist/tunnel.d.ts +9 -0
  231. package/dist/tunnel.js +117 -28
  232. package/dist/tunnel.js.map +1 -1
  233. package/dist/tunnel.test.js +81 -5
  234. package/dist/tunnel.test.js.map +1 -1
  235. package/dist/voice-attachments.e2e.test.js +108 -18
  236. package/dist/voice-attachments.e2e.test.js.map +1 -1
  237. package/dist/voice-call.e2e.test.js +9 -9
  238. package/dist/voice-call.js +6 -6
  239. package/dist/voice-call.js.map +1 -1
  240. package/dist/voice-openai.e2e.test.js +59 -23
  241. package/dist/voice-openai.e2e.test.js.map +1 -1
  242. package/dist/voice.d.ts +1 -1
  243. package/dist/voice.js +72 -24
  244. package/dist/voice.js.map +1 -1
  245. package/dist/working-directory.e2e.test.js +11 -11
  246. package/dist/working-directory.e2e.test.js.map +1 -1
  247. package/package.json +11 -5
  248. package/skills/kimaki-tunnel/SKILL.md +3 -2
  249. package/src/agent-ui.e2e.test.ts +27 -13
  250. package/src/agent-ui.ts +2 -1
  251. package/src/analytics.e2e.test.ts +1 -1
  252. package/src/autostart.ts +55 -10
  253. package/src/bot.ts +36 -19
  254. package/src/btw.e2e.test.ts +3 -3
  255. package/src/builtin-skills.test.ts +73 -1
  256. package/src/builtin-skills.ts +33 -0
  257. package/src/catalog-refresh.e2e.test.ts +2 -2
  258. package/src/cli/bot.ts +30 -19
  259. package/src/cli/discord.ts +30 -6
  260. package/src/cli/schedule.ts +23 -9
  261. package/src/cli/session.ts +35 -12
  262. package/src/cli/shared.ts +43 -8
  263. package/src/cli-discord.e2e.test.ts +13 -8
  264. package/src/cli-lock.e2e.test.ts +88 -20
  265. package/src/cli-read.e2e.test.ts +17 -8
  266. package/src/cli-sessions.e2e.test.ts +4 -3
  267. package/src/cli.ts +2 -0
  268. package/src/commands/preference-commands.ts +38 -4
  269. package/src/commands/session-commands.ts +12 -7
  270. package/src/commands/thread-commands.ts +92 -24
  271. package/src/commands/worktree-commands.ts +10 -9
  272. package/src/commands.e2e.test.ts +25 -21
  273. package/src/coordinator-agents.e2e.test.ts +145 -0
  274. package/src/coordinator-idle.e2e.test.ts +122 -0
  275. package/src/coordinator-queue.e2e.test.ts +279 -0
  276. package/src/coordinator-warmup.e2e.test.ts +158 -0
  277. package/src/coordinator.e2e.test.ts +545 -0
  278. package/src/coordinator.ts +168 -0
  279. package/src/db.test.ts +1 -0
  280. package/src/diagram.test.ts +56 -0
  281. package/src/diagram.ts +243 -0
  282. package/src/duration.ts +13 -5
  283. package/src/effects.ts +99 -27
  284. package/src/event-loop.ts +71 -45
  285. package/src/format-parts.ts +53 -22
  286. package/src/gateway-replay.e2e.test.ts +4 -4
  287. package/src/harness.e2e.test.ts +2 -2
  288. package/src/hello-thread.e2e.test.ts +59 -5
  289. package/src/ingress.ts +44 -11
  290. package/src/interaction-context.ts +12 -11
  291. package/src/interrupt.e2e.test.ts +8 -5
  292. package/src/legacy.e2e.test.ts +1 -1
  293. package/src/lock-routes.ts +62 -8
  294. package/src/lock-server.ts +23 -7
  295. package/src/main.ts +26 -10
  296. package/src/markdown/markdown.test.ts +15 -4
  297. package/src/markdown/render-markdown.ts +9 -6
  298. package/src/onboarding-cli.e2e.test.ts +7 -6
  299. package/src/onboarding.e2e.test.ts +8 -10
  300. package/src/onboarding.ts +13 -29
  301. package/src/permissions.e2e.test.ts +3 -3
  302. package/src/plugin/coordinator.ts +401 -0
  303. package/src/plugin/index.ts +86 -59
  304. package/src/plugin.e2e.test.ts +1 -1
  305. package/src/preference-commands.e2e.test.ts +103 -23
  306. package/src/prompt.ts +87 -43
  307. package/src/questions.e2e.test.ts +13 -13
  308. package/src/queue-sources.e2e.test.ts +197 -0
  309. package/src/queue.e2e.test.ts +48 -30
  310. package/src/queue.test.ts +59 -0
  311. package/src/queue.ts +104 -24
  312. package/src/remote-send.e2e.test.ts +6 -6
  313. package/src/remote-send.ts +2 -1
  314. package/src/renderer.e2e.test.ts +7 -7
  315. package/src/restart.e2e.test.ts +2 -2
  316. package/src/routines.e2e.test.ts +2 -2
  317. package/src/scheduler.e2e.test.ts +45 -19
  318. package/src/scheduler.ts +4 -2
  319. package/src/schema-sql.ts +1 -1
  320. package/src/schema.ts +13 -0
  321. package/src/session-commands.e2e.test.ts +38 -11
  322. package/src/session-events.ts +168 -25
  323. package/src/session-ops.e2e.test.ts +64 -11
  324. package/src/sessions.ts +217 -67
  325. package/src/shell.e2e.test.ts +4 -4
  326. package/src/slash-commands.test.ts +2 -0
  327. package/src/slash-commands.ts +6 -4
  328. package/src/sleep.e2e.test.ts +30 -13
  329. package/src/sleeps.ts +20 -3
  330. package/src/store.ts +5 -2
  331. package/src/system-prompt.ts +190 -134
  332. package/src/test/generate-log-plugin/index.ts +16 -0
  333. package/src/test/harness.ts +77 -17
  334. package/src/test/replay.ts +12 -7
  335. package/src/thread-reducer.fixtures.test.ts +58 -51
  336. package/src/thread-reducer.test.ts +199 -49
  337. package/src/thread-reducer.ts +135 -66
  338. package/src/tunnel.test.ts +81 -5
  339. package/src/tunnel.ts +124 -25
  340. package/src/voice-attachments.e2e.test.ts +110 -18
  341. package/src/voice-call.e2e.test.ts +9 -9
  342. package/src/voice-call.ts +6 -6
  343. package/src/voice-openai.e2e.test.ts +64 -24
  344. package/src/voice.ts +93 -26
  345. package/src/working-directory.e2e.test.ts +11 -11
  346. package/src/message-tool.e2e.test.ts +0 -45
@@ -9,7 +9,8 @@ test('text-only turn: banner, text, typing, footer with context percent', () =>
9
9
  expect(effects).toMatchInlineSnapshot(`
10
10
  [
11
11
  {
12
- "text": "» **user:** Do these steps with tools, one by one: 1) run \`ls cli/src | head -5\` with bash, 2) write a file tmp-events/hello.txt containing "hello", 3) edit that file to replace hello with "hello world", 4) glob for **/*.txt under tmp-events, 5) read the file. Then reply with one short line.",
12
+ "echo": true,
13
+ "text": "-# » **user:** Do these steps with tools, one by one: 1) run \`ls cli/src | head -5\` with bash, 2) write a file tmp-events/hello.txt containing "hello", 3) edit that file to replace hello with "hello world", 4) glob for **/*.txt under tmp-events, 5) read the file. Then reply with one short line.",
13
14
  "type": "send",
14
15
  },
15
16
  {
@@ -22,6 +23,7 @@ test('text-only turn: banner, text, typing, footer with context percent', () =>
22
23
  },
23
24
  {
24
25
  "blankLineBefore": false,
26
+ "replyTo": null,
25
27
  "text": "Done. \`tmp-events/hello.txt\` contains \`hello world\`.",
26
28
  "type": "markdown",
27
29
  },
@@ -31,6 +33,7 @@ test('text-only turn: banner, text, typing, footer with context percent', () =>
31
33
  },
32
34
  {
33
35
  "agent": "build",
36
+ "channelId": "channel",
34
37
  "contextPercent": 6,
35
38
  "directory": "/project",
36
39
  "durationMs": 17597,
@@ -50,33 +53,62 @@ test('text-only turn: banner, text, typing, footer with context percent', () =>
50
53
  `);
51
54
  expect(view.turn).toBe(null);
52
55
  });
53
- test('message mode: send_message shows as markdown, plain text only when the turn sent nothing', () => {
56
+ test('a turn that posts nothing visible ends without a footer', () => {
57
+ const events = loadFixture('tools.events.jsonl');
58
+ // Read-only tools are hidden at the default verbosity.
59
+ const hiddenTools = new Set(events.flatMap((event) => (event.type === 'session.tool.input.started' && ['read', 'glob'].includes(event.data.name) ? [event.data.id] : [])));
60
+ const quiet = events.filter((event) => {
61
+ if (event.type.startsWith('session.text.'))
62
+ return false;
63
+ if (!event.type.startsWith('session.tool.'))
64
+ return true;
65
+ const data = event.data;
66
+ return typeof data['id'] === 'string' && hiddenTools.has(data['id']);
67
+ });
68
+ const footers = (input) => replay({ events: input }).effects.filter((effect) => effect.type === 'footer').length;
69
+ expect(hiddenTools.size).toBe(2);
70
+ expect({ quiet: footers(quiet), normal: footers(events) }).toMatchInlineSnapshot(`
71
+ {
72
+ "normal": 1,
73
+ "quiet": 0,
74
+ }
75
+ `);
76
+ });
77
+ test('any turn that answers IDLE posts no text and no footer', () => {
54
78
  const turn = loadFixture('tools.events.jsonl').filter((event) => !event.type.startsWith('session.tool.'));
55
- const prefs = { ...DEFAULT_PREFS, messageTool: true };
56
- const textIndex = turn.findIndex((event) => event.type === 'session.text.ended');
57
- const text = turn[textIndex];
58
- if (text.type !== 'session.text.ended')
59
- throw new Error('Expected text');
60
- const call = { sessionID: text.data.sessionID, assistantMessageID: text.data.assistantMessageID, id: 'call_message' };
61
- const durable = { aggregateID: text.data.sessionID, seq: 1, version: 1 };
62
- const message = [
63
- { id: 'evt_message_input', created: text.created, durable, type: 'session.tool.input.started', data: { ...call, name: 'send_message' } },
64
- { id: 'evt_message_called', created: text.created, durable, type: 'session.tool.called', data: { ...call, executed: false, input: { text: 'Visible **reply**' } } },
65
- ];
66
- const sent = replay({ prefs, events: [...turn.slice(0, textIndex), ...message, ...turn.slice(textIndex)] });
67
- const silent = replay({ prefs, events: turn });
68
- const lines = (effects) => effectLines(effects).filter((line) => !line.startsWith('»') && !line.startsWith('[typing'));
69
- expect({ sent: lines(sent.effects), silent: lines(silent.effects) }).toMatchInlineSnapshot(`
79
+ const idle = turn.map((event) => (event.type === 'session.text.ended' ? { ...event, data: { ...event.data, text: 'IDLE' } } : event));
80
+ const visible = replay({ events: idle }).effects.filter((effect) => effect.type === 'markdown' || effect.type === 'footer');
81
+ expect(visible).toEqual([]);
82
+ });
83
+ test('a coordinator turn with tool lines but no text (or only IDLE) posts no footer; a thread turn does', () => {
84
+ const events = loadFixture('tools.events.jsonl');
85
+ const idle = events.map((event) => (event.type === 'session.text.ended' ? { ...event, data: { ...event.data, text: 'IDLE' } } : event));
86
+ const silent = events.filter((event) => !event.type.startsWith('session.text.'));
87
+ const sessionId = rootSessionId(events.filter((event) => !event.type.startsWith('kimaki.')));
88
+ const shown = (input, coordinator) => replay({ events: input, view: emptyView({ sessionId, channelId: 'channel', directory: '/project', isNew: true, coordinator }) }).effects.flatMap((effect) => effect.type === 'footer' ? ['footer'] : effect.type === 'send' && effect.text.includes('┣') ? ['tool'] : []);
89
+ expect({ coordinatorIdle: shown(idle, true), coordinatorNoText: shown(silent, true), threadIdle: shown(idle, false) }).toMatchInlineSnapshot(`
70
90
  {
71
- "sent": [
72
- "-# *using openai/gpt-6-luna low ⋅ build*",
73
- "Visible **reply**",
74
- "-# *project ⋅ main ⋅ 17s ⋅ 6% ⋅ gpt-6-luna*",
91
+ "coordinatorIdle": [
92
+ "tool",
93
+ "tool",
94
+ "tool",
95
+ "tool",
96
+ "tool",
75
97
  ],
76
- "silent": [
77
- "-# *using openai/gpt-6-luna low ⋅ build*",
78
- "Done. \`tmp-events/hello.txt\` contains \`hello world\`.",
79
- "-# *project ⋅ main ⋅ 17s ⋅ 6% ⋅ gpt-6-luna*",
98
+ "coordinatorNoText": [
99
+ "tool",
100
+ "tool",
101
+ "tool",
102
+ "tool",
103
+ "tool",
104
+ ],
105
+ "threadIdle": [
106
+ "tool",
107
+ "tool",
108
+ "tool",
109
+ "tool",
110
+ "tool",
111
+ "footer",
80
112
  ],
81
113
  }
82
114
  `);
@@ -94,11 +126,26 @@ test('kimaki sleep in a turn makes its footer silent, the next turn notifies aga
94
126
  ]
95
127
  `);
96
128
  });
129
+ test('root model and agent switches after the banner show as subtext lines', () => {
130
+ const events = loadFixture('switch-model.events.jsonl');
131
+ const switches = events.filter((event) => event.type === 'session.model.selected' || event.type === 'session.agent.selected');
132
+ // Before the first step the banner shows the model and agent; a re-select of the same model shows nothing.
133
+ const sameModel = switches.flatMap((event) => (event.type === 'session.model.selected' ? [{ ...event, data: { ...event.data, previous: event.data.model } }] : []));
134
+ const created = events.findIndex((event) => event.type === 'session.created');
135
+ const lines = effectLines(replay({ events: [...events.slice(0, created + 1), ...switches, ...events.slice(created + 1), ...sameModel] }).effects);
136
+ expect(lines.filter((line) => /Switched|using/.test(line))).toMatchInlineSnapshot(`
137
+ [
138
+ "-# *using openai/gpt-6-luna low ⋅ build*",
139
+ "-# Switched model to GPT 6 Luna (medium)",
140
+ "-# Switched agent to Plan",
141
+ ]
142
+ `);
143
+ });
97
144
  test('execution failure shows the error and no footer, interrupt shows nothing', () => {
98
145
  const events = loadFixture('abort.events.jsonl');
99
146
  const sessionID = rootSessionId(events);
100
147
  const started = events.find((event) => event.type === 'session.execution.started');
101
- const view = emptyView({ sessionId: sessionID, channelId: 'channel', directory: '/project', isNew: false });
148
+ const view = emptyView({ sessionId: sessionID, channelId: 'channel', directory: '/project', isNew: false, coordinator: false });
102
149
  const busy = reduce({ view, event: started, prefs: DEFAULT_PREFS }).view;
103
150
  const failed = reduce({
104
151
  view: busy,
@@ -132,7 +179,8 @@ test('execution failure shows the error and no footer, interrupt shows nothing',
132
179
  expect(replay({ events, view }).effects).toMatchInlineSnapshot(`
133
180
  [
134
181
  {
135
- "text": "» **user:** Run \`sleep 30 && echo never\` with bash, then summarize.",
182
+ "echo": true,
183
+ "text": "-# » **user:** Run \`sleep 30 && echo never\` with bash, then summarize.",
136
184
  "type": "send",
137
185
  },
138
186
  {
@@ -153,7 +201,8 @@ test('execution failure shows the error and no footer, interrupt shows nothing',
153
201
  "type": "viewed",
154
202
  },
155
203
  {
156
- "text": "» **user:** Say only: resumed after abort.",
204
+ "echo": true,
205
+ "text": "-# » **user:** Say only: resumed after abort.",
157
206
  "type": "send",
158
207
  },
159
208
  {
@@ -162,6 +211,7 @@ test('execution failure shows the error and no footer, interrupt shows nothing',
162
211
  },
163
212
  {
164
213
  "blankLineBefore": false,
214
+ "replyTo": null,
165
215
  "text": "resumed after abort",
166
216
  "type": "markdown",
167
217
  },
@@ -171,6 +221,7 @@ test('execution failure shows the error and no footer, interrupt shows nothing',
171
221
  },
172
222
  {
173
223
  "agent": "build",
224
+ "channelId": "channel",
174
225
  "contextPercent": 6,
175
226
  "directory": "/project",
176
227
  "durationMs": 1387,
@@ -204,7 +255,7 @@ test('only these event types produce effects for the root session', () => {
204
255
  for (const file of files) {
205
256
  const events = loadFixture(file);
206
257
  const sessionId = rootSessionId(events);
207
- let view = emptyView({ sessionId, channelId: 'channel', directory: '/project', isNew: true });
258
+ let view = emptyView({ sessionId, channelId: 'channel', directory: '/project', isNew: true, coordinator: false });
208
259
  for (const event of events) {
209
260
  const result = reduce({ view, event, prefs: DEFAULT_PREFS });
210
261
  view = result.view;
@@ -213,11 +264,13 @@ test('only these event types produce effects for the root session', () => {
213
264
  }
214
265
  expect([...producing].sort()).toMatchInlineSnapshot(`
215
266
  [
267
+ "session.agent.selected",
216
268
  "session.execution.interrupted",
217
269
  "session.execution.started",
218
270
  "session.execution.succeeded",
219
271
  "session.inbox.delivered",
220
272
  "session.inbox.enqueued",
273
+ "session.model.selected",
221
274
  "session.shell.ended",
222
275
  "session.shell.started",
223
276
  "session.step.started",
@@ -237,14 +290,12 @@ test('only these event types produce effects for the root session', () => {
237
290
  "provider.updated",
238
291
  "reference.updated",
239
292
  "server.connected",
240
- "session.agent.selected",
241
293
  "session.compaction.delta",
242
294
  "session.compaction.ended",
243
295
  "session.compaction.started",
244
296
  "session.created",
245
297
  "session.forked",
246
298
  "session.instructions.updated",
247
- "session.model.selected",
248
299
  "session.renamed",
249
300
  "session.step.ended",
250
301
  "session.step.failed",
@@ -269,7 +320,7 @@ test('only these event types produce effects for the root session', () => {
269
320
  test('retry notices are throttled to one per 10s', () => {
270
321
  const events = loadFixture('abort.events.jsonl');
271
322
  const sessionID = rootSessionId(events);
272
- const view = emptyView({ sessionId: sessionID, channelId: 'channel', directory: '/project', isNew: false });
323
+ const view = emptyView({ sessionId: sessionID, channelId: 'channel', directory: '/project', isNew: false, coordinator: false });
273
324
  const retry = (created, attempt) => ({
274
325
  id: `evt_retry_${attempt}`,
275
326
  created,
@@ -286,8 +337,8 @@ test('retry notices are throttled to one per 10s', () => {
286
337
  const { effects } = replay({ events: [retry(1_000, 1), retry(6_000, 2), retry(12_000, 3)], view });
287
338
  expect(effectLines(effects)).toMatchInlineSnapshot(`
288
339
  [
289
- "-# ⬦ retrying in 5s (attempt 1): rate limited",
290
- "-# ⬦ retrying in 5s (attempt 3): rate limited",
340
+ "-# retrying in 5s (attempt 1): rate limited",
341
+ "-# retrying in 5s (attempt 3): rate limited",
291
342
  ]
292
343
  `);
293
344
  });
@@ -300,36 +351,126 @@ test('cache miss notice when the cached prefix shrinks, e.g. after the cache TTL
300
351
  if (last?.type !== 'session.step.ended')
301
352
  return expect.fail('fixture has no root step.ended');
302
353
  // Same turn, but the last request found nothing in cache 10 minutes later.
303
- const missed = events.map((event, index) => index === lastIndex ? { ...last, created: last.created + 600_000, data: { ...last.data, tokens: { ...last.data.tokens, cache: { read: 0, write: 0 } } } } : event);
304
- expect(effectLines(replay({ events: missed }).effects).filter((line) => line.includes('cache'))).toMatchInlineSnapshot(`
354
+ const withCache = (cache, input = last.data.tokens.input) => events.map((event, index) => index === lastIndex ? { ...last, created: last.created + 600_000, data: { ...last.data, tokens: { ...last.data.tokens, input, cache } } } : event);
355
+ const cacheLines = (stream) => effectLines(replay({ events: stream }).effects).filter((line) => line.includes('cache'));
356
+ // Everything was written again: a full loss.
357
+ expect(cacheLines(withCache({ read: 0, write: 25_000 }, 0))).toMatchInlineSnapshot(`
305
358
  [
306
- "\\n-# ⬦ prompt cache miss: 0 of 25k tokens cached, 10m 1s after the last request",
359
+ "\\n-# prompt cache miss: 0 of 25k tokens cached, 10m 1s after the last request",
307
360
  ]
308
361
  `);
362
+ // Less than half of the prompt was written: a partial miss shows nothing.
363
+ expect(cacheLines(withCache({ read: 0, write: 5_000 }, 20_000))).toEqual([]);
309
364
  expect(effectLines(replay({ events }).effects).filter((line) => line.includes('cache'))).toEqual([]);
310
365
  });
366
+ test('compaction posts the new context size from the next root step', () => {
367
+ const events = loadFixture('tools.events.jsonl');
368
+ const sessionID = rootSessionId(events);
369
+ const lastIndex = events.findLastIndex((event) => event.type === 'session.step.ended' && event.data.sessionID === sessionID);
370
+ const compacted = {
371
+ id: 'evt_compacted',
372
+ created: 0,
373
+ type: 'session.compaction.ended',
374
+ durable: { aggregateID: sessionID, seq: 0, version: 1 },
375
+ data: { sessionID, reason: 'auto', text: '## Objective', recent: '' },
376
+ };
377
+ const withCompaction = [...events.slice(0, lastIndex), compacted, ...events.slice(lastIndex)];
378
+ expect(effectLines(replay({ events: withCompaction }).effects).filter((line) => line.includes('compacted'))).toMatchInlineSnapshot(`
379
+ [
380
+ "\\n-# context compacted to 26k tokens (6%)",
381
+ ]
382
+ `);
383
+ // `/compact` alone: the execution ends with no step after it.
384
+ const end = events.findLastIndex((event) => event.type === 'session.execution.succeeded');
385
+ const manual = [...events.slice(0, end), compacted, ...events.slice(end)];
386
+ expect(effectLines(replay({ events: manual }).effects).filter((line) => line.includes('compacted'))).toMatchInlineSnapshot(`
387
+ [
388
+ "\\n-# context compacted",
389
+ ]
390
+ `);
391
+ });
311
392
  test('prompts from other clients echo, except the expanded prompt of a command Kimaki ran', () => {
312
393
  const events = loadFixture('queue-plain.events.jsonl');
313
- const echoes = (before) => effectLines(replay({ events: [...before, ...events] }).effects).filter((line) => line.startsWith('»'));
314
- const command = { type: 'kimaki.command', text: '/review auth', username: 'tommy' };
394
+ // Queued ones show in their ack (`[show queue:...]`), a reply to it marks the run.
395
+ const echoes = (before) => effectLines(replay({ events: [...before, ...events] }).effects).filter((line) => line.includes('» ') || line.startsWith('[reply to'));
396
+ const command = { type: 'kimaki.command', text: '/review auth', username: 'tommy', messageId: null, echo: null };
315
397
  expect(echoes([])).toMatchInlineSnapshot(`
316
398
  [
317
- "» **user:** Run \`sleep 6 && echo slow-done\` with bash, then say done.",
318
- "» **user:** QUEUED-1: reply with the word apple.",
319
- "» **user:** QUEUED-2: reply with the word cherry.",
399
+ "-# » **user:** Run \`sleep 6 && echo slow-done\` with bash, then say done.",
400
+ "[show queue:msg_0f20347e1001nsJ7W4hOvhBpQb] -# » **user:** QUEUED-1: reply with the word apple.
401
+ -# Queued at position 1. Remove it with /clear-queue position:1",
402
+ "[show queue:msg_0f20347e500196F4o0voD7LGMV] -# » **user:** QUEUED-2: reply with the word cherry.
403
+ -# Queued at position 2. Remove it with /clear-queue position:2",
404
+ "[edit queue:msg_0f20347e1001nsJ7W4hOvhBpQb] -# » **user:** QUEUED-1: reply with the word apple.",
405
+ "[reply to queue:msg_0f20347e1001nsJ7W4hOvhBpQb] -# Queued message sent",
406
+ "[edit queue:msg_0f20347e500196F4o0voD7LGMV] -# » **user:** QUEUED-2: reply with the word cherry.",
407
+ "[reply to queue:msg_0f20347e500196F4o0voD7LGMV] -# Queued message sent",
320
408
  ]
321
409
  `);
322
- // The first prompt is the command's template: hidden. The queued ones still echo.
410
+ // The first prompt is the command's template: hidden. The queued ones still show.
323
411
  expect(echoes([command])).toMatchInlineSnapshot(`
324
412
  [
325
- "» **user:** QUEUED-1: reply with the word apple.",
326
- "» **user:** QUEUED-2: reply with the word cherry.",
413
+ "[show queue:msg_0f20347e1001nsJ7W4hOvhBpQb] -# » **user:** QUEUED-1: reply with the word apple.
414
+ -# Queued at position 1. Remove it with /clear-queue position:1",
415
+ "[show queue:msg_0f20347e500196F4o0voD7LGMV] -# » **user:** QUEUED-2: reply with the word cherry.
416
+ -# Queued at position 2. Remove it with /clear-queue position:2",
417
+ "[edit queue:msg_0f20347e1001nsJ7W4hOvhBpQb] -# » **user:** QUEUED-1: reply with the word apple.",
418
+ "[reply to queue:msg_0f20347e1001nsJ7W4hOvhBpQb] -# Queued message sent",
419
+ "[edit queue:msg_0f20347e500196F4o0voD7LGMV] -# » **user:** QUEUED-2: reply with the word cherry.",
420
+ "[reply to queue:msg_0f20347e500196F4o0voD7LGMV] -# Queued message sent",
327
421
  ]
328
422
  `);
423
+ // A command sent with `kimaki send` has no Discord message: its echo stands in for the template.
424
+ expect(echoes([{ ...command, echo: '-# » **CLI:** /review auth' }])[0]).toMatchInlineSnapshot(`"-# » **CLI:** /review auth"`);
329
425
  // A failed command leaves nothing pending.
330
426
  expect(echoes([command, { type: 'kimaki.command-failed' }])).toEqual(echoes([]));
331
427
  });
332
- test('snapshot closes the ack of an item promoted while disconnected, without an echo', () => {
428
+ test('coordinator: a prompt reply goes to its Discord message, a queued one gets "Queued message sent" even when it answers IDLE', () => {
429
+ // The fixture's prompts get Discord metadata, like prompt.ts writes it: messages 101, 102, 103.
430
+ const withDiscord = (threadId) => {
431
+ let next = 101;
432
+ return loadFixture('queue-plain.events.jsonl').map((event) => {
433
+ if (event.type !== 'session.inbox.enqueued' || event.data.item.type !== 'user')
434
+ return event;
435
+ const discord = { messageId: String(next++), threadId, username: 'tommy' };
436
+ const item = { ...event.data.item, payload: { ...event.data.item.payload, metadata: { discord } } };
437
+ return { ...event, data: { ...event.data, item } };
438
+ });
439
+ };
440
+ // replay() binds the view to channel `channel`: a prompt whose conversation is that channel is a coordinator prompt.
441
+ expect(effectLines(replay({ events: withDiscord('channel') }).effects)).toMatchInlineSnapshot(`
442
+ [
443
+ "[typing on]",
444
+ "-# *using openai/gpt-6-luna low ⋅ build*",
445
+ "-# ┣ shell _sleep 6 && echo slow-done_",
446
+ "[show queue:msg_0f20347e1001nsJ7W4hOvhBpQb reply to 102] -# Queued at position 1. Delete the original message to remove it, or use /clear-queue position:1",
447
+ "[show queue:msg_0f20347e500196F4o0voD7LGMV reply to 103] -# Queued at position 2. Delete the original message to remove it, or use /clear-queue position:2",
448
+ "[reply to 101] Done.",
449
+ "[silent] -# *main ⋅ 10s ⋅ 6% ⋅ gpt-6-luna*",
450
+ "[edit queue:msg_0f20347e1001nsJ7W4hOvhBpQb] -# Queued",
451
+ "[reply to 102] -# Queued message sent",
452
+ "apple",
453
+ "[silent] -# *main ⋅ 2s ⋅ 6% ⋅ gpt-6-luna*",
454
+ "[edit queue:msg_0f20347e500196F4o0voD7LGMV] -# Queued",
455
+ "[reply to 103] -# Queued message sent",
456
+ "cherry",
457
+ "[typing off]",
458
+ "-# *main ⋅ 2s ⋅ 6% ⋅ gpt-6-luna*",
459
+ ]
460
+ `);
461
+ // A coordinator that starts a worker answers IDLE: the queued prompt still shows that it started.
462
+ const idle = withDiscord('channel').map((event) => (event.type === 'session.text.ended' && event.data.text.trim() === 'apple' ? { ...event, data: { ...event.data, text: 'IDLE' } } : event));
463
+ expect(effectLines(replay({ events: idle }).effects).filter((line) => line.includes('queue:msg_0f20347e1001') || line.startsWith('[reply to 102]'))).toMatchInlineSnapshot(`
464
+ [
465
+ "[show queue:msg_0f20347e1001nsJ7W4hOvhBpQb reply to 102] -# Queued at position 1. Delete the original message to remove it, or use /clear-queue position:1",
466
+ "[edit queue:msg_0f20347e1001nsJ7W4hOvhBpQb] -# Queued",
467
+ "[reply to 102] -# Queued message sent",
468
+ ]
469
+ `);
470
+ const thread = replay({ events: withDiscord('thread') }).effects;
471
+ expect(thread.filter((effect) => effect.type === 'markdown').map((effect) => effect.replyTo)).toEqual([null, null, null]);
472
+ });
473
+ test('snapshot marks an item promoted while disconnected as started, without an echo', () => {
333
474
  const events = loadFixture('queue-plain.events.jsonl');
334
475
  const index = events.findIndex((event) => event.type === 'session.inbox.enqueued' && event.data.item.delivery === 'queue');
335
476
  const enqueued = events[index];
@@ -352,7 +493,8 @@ test('snapshot closes the ack of an item promoted while disconnected, without an
352
493
  const hydrated = reduce({ view, event: snapshot, prefs: DEFAULT_PREFS });
353
494
  expect(effectLines(hydrated.effects)).toMatchInlineSnapshot(`
354
495
  [
355
- "[edit queue:msg_0f20347e1001nsJ7W4hOvhBpQb] -# Queued message sent",
496
+ "[edit queue:msg_0f20347e1001nsJ7W4hOvhBpQb] -# » **user:** QUEUED-1: reply with the word apple.",
497
+ "[reply to queue:msg_0f20347e1001nsJ7W4hOvhBpQb] -# Queued message sent",
356
498
  ]
357
499
  `);
358
500
  expect(hydrated.effects.map((effect) => effect.type)).toEqual(['edit']);
@@ -362,7 +504,7 @@ test('snapshot closes the ack of an item promoted while disconnected, without an
362
504
  test('execute: final metadata shows inner calls whose progress was missed, then failures', () => {
363
505
  const events = loadFixture('abort.events.jsonl');
364
506
  const sessionID = rootSessionId(events);
365
- const view = emptyView({ sessionId: sessionID, channelId: 'channel', directory: '/project', isNew: false });
507
+ const view = emptyView({ sessionId: sessionID, channelId: 'channel', directory: '/project', isNew: false, coordinator: false });
366
508
  const base = { created: 1_000 };
367
509
  const durable = (version) => ({ aggregateID: sessionID, seq: 1, version });
368
510
  const call = { sessionID, assistantMessageID: 'msg_a', id: 'call_1' };
@@ -1 +1 @@
1
- {"version":3,"file":"thread-reducer.test.js","sourceRoot":"","sources":["../src/thread-reducer.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"thread-reducer.test.js","sourceRoot":"","sources":["../src/thread-reducer.test.ts"],"names":[],"mappings":"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"}
package/dist/tunnel.d.ts CHANGED
@@ -1,8 +1,17 @@
1
+ import http from 'node:http';
1
2
  export declare function detectPortFromText(text: string): number | null;
2
3
  export declare function routeName({ name, tuistorySessionId }: {
3
4
  name?: string;
4
5
  tuistorySessionId?: string;
5
6
  }): string | Error;
7
+ export declare function parseNetstatListeningPids({ stdout, port }: {
8
+ stdout: string;
9
+ port: number;
10
+ }): number[];
11
+ export declare function startHostProxy({ host, port }: {
12
+ host: string;
13
+ port: number;
14
+ }): Promise<http.Server | Error>;
6
15
  export declare function runTunnel(options: {
7
16
  port?: number;
8
17
  command?: string[];