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
@@ -10,8 +10,8 @@ export type Turn = {
10
10
  agent: string | null;
11
11
  tokens: number;
12
12
  slept: boolean;
13
- messaged: boolean;
14
- unsent: string | null;
13
+ replyTo: string | null;
14
+ texted: boolean;
15
15
  };
16
16
  export type Child = {
17
17
  agent: string;
@@ -44,6 +44,7 @@ export type ToolCall = {
44
44
  export type ThreadView = {
45
45
  sessionId: string;
46
46
  channelId: string;
47
+ coordinator: boolean;
47
48
  directory: string;
48
49
  bannerPending: boolean;
49
50
  turn: Turn | null;
@@ -57,10 +58,13 @@ export type ThreadView = {
57
58
  tokens: number;
58
59
  at: number;
59
60
  } | null;
61
+ compacted: boolean;
60
62
  inbox: readonly PendingInput[];
61
63
  commandPending: {
62
64
  text: string;
63
65
  username: string;
66
+ messageId: string | null;
67
+ echo: string | null;
64
68
  } | null;
65
69
  forms: Readonly<Record<string, PendingForm>>;
66
70
  permissions: Readonly<Record<string, PendingPermission>>;
@@ -74,19 +78,22 @@ export type Effect = {
74
78
  type: 'send';
75
79
  text: string;
76
80
  notify?: boolean;
81
+ echo?: boolean;
77
82
  } | {
78
83
  type: 'markdown';
79
84
  text: string;
80
85
  blankLineBefore: boolean;
86
+ replyTo: string | null;
81
87
  } | {
82
88
  type: 'typing';
83
89
  on: boolean;
84
90
  } | {
85
91
  type: 'attachments';
86
92
  files: readonly UploadFile[];
87
- settle: (error: Error | null) => void;
93
+ settle: (result: Error | string[]) => void;
88
94
  } | {
89
95
  type: 'footer';
96
+ channelId: string;
90
97
  directory: string;
91
98
  durationMs: number;
92
99
  contextPercent: number | null;
@@ -99,10 +106,13 @@ export type Effect = {
99
106
  messages: readonly UiMessage[];
100
107
  replyTo: string | null;
101
108
  notify: boolean;
109
+ echo?: boolean;
102
110
  } | {
103
111
  type: 'edit';
104
112
  key: string;
105
113
  messages: readonly UiMessage[];
114
+ reply?: string;
115
+ replyTo?: string | null;
106
116
  } | {
107
117
  type: 'viewed';
108
118
  sessionId: string;
@@ -128,6 +138,8 @@ export type KimakiEvent = {
128
138
  type: 'kimaki.command';
129
139
  text: string;
130
140
  username: string;
141
+ messageId: string | null;
142
+ echo: string | null;
131
143
  } | {
132
144
  type: 'kimaki.command-failed';
133
145
  } | {
@@ -149,16 +161,27 @@ export type ThreadEvent = V2Event | KimakiEvent;
149
161
  export declare function isKimakiEvent(event: ThreadEvent): event is KimakiEvent;
150
162
  export type Prefs = {
151
163
  verbosity: Verbosity;
152
- contextLimits: Readonly<Record<string, number>>;
153
- messageTool: boolean;
164
+ models: Readonly<Record<string, {
165
+ name: string;
166
+ context: number;
167
+ }>>;
154
168
  };
155
- export declare function emptyView({ sessionId, channelId, directory, isNew, }: {
169
+ export declare function emptyView({ sessionId, channelId, directory, isNew, coordinator, }: {
156
170
  sessionId: string;
157
171
  channelId: string;
158
172
  directory: string;
159
173
  isNew: boolean;
174
+ coordinator: boolean;
160
175
  }): ThreadView;
161
176
  export declare function isBusy(view: ThreadView): boolean;
177
+ export declare function conversationTyping({ threads, threadId }: {
178
+ threads: Readonly<Record<string, ThreadView>>;
179
+ threadId: string;
180
+ }): boolean;
181
+ export declare function workersTyping({ threads, channelId }: {
182
+ threads: Readonly<Record<string, ThreadView>>;
183
+ channelId: string;
184
+ }): boolean;
162
185
  export declare function eventSessionId(event: V2Event): string | null;
163
186
  export declare function reduce({ view, event, prefs }: {
164
187
  view: ThreadView;
@@ -8,7 +8,7 @@ test('tools: names from tool.input.started, failed tool lines, read-only tools h
8
8
  const { effects } = replay({ events: loadFixture('tools.events.jsonl') });
9
9
  expect(effectLines(effects)).toMatchInlineSnapshot(`
10
10
  [
11
- "» **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.",
11
+ "-# » **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
12
  "[typing on]",
13
13
  "-# *using openai/gpt-6-luna low ⋅ build*",
14
14
  "-# ┣ shell _ls cli/src \\| head -5_",
@@ -20,25 +20,25 @@ test('tools: names from tool.input.started, failed tool lines, read-only tools h
20
20
  "-# ┣ shell _python3 -c "from pathlib import Path; p=Path('tmp-events/hello.txt'); p.write\\_t…_",
21
21
  "\\nDone. \`tmp-events/hello.txt\` contains \`hello world\`.",
22
22
  "[typing off]",
23
- "-# *project ⋅ main ⋅ 17s ⋅ 6% ⋅ gpt-6-luna*",
23
+ "-# *main ⋅ 17s ⋅ 6% ⋅ gpt-6-luna*",
24
24
  ]
25
25
  `);
26
26
  });
27
27
  test('tools at text verbosity: text, edits and errors only', () => {
28
28
  const { effects } = replay({
29
29
  events: loadFixture('tools.events.jsonl'),
30
- prefs: { verbosity: 'text', contextLimits: {}, messageTool: false },
30
+ prefs: { verbosity: 'text', models: {} },
31
31
  });
32
32
  expect(effectLines(effects)).toMatchInlineSnapshot(`
33
33
  [
34
- "» **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.",
34
+ "-# » **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.",
35
35
  "[typing on]",
36
36
  "-# *using openai/gpt-6-luna low ⋅ build*",
37
37
  "-# ⨯ shell _Invalid arguments for tool "shell":_",
38
38
  "-# ⨯ shell _Invalid arguments for tool "shell":_",
39
39
  "\\nDone. \`tmp-events/hello.txt\` contains \`hello world\`.",
40
40
  "[typing off]",
41
- "-# *project ⋅ main ⋅ 17s ⋅ gpt-6-luna*",
41
+ "-# *main ⋅ 17s ⋅ gpt-6-luna*",
42
42
  ]
43
43
  `);
44
44
  });
@@ -46,13 +46,13 @@ test('task-subagent: child tool lines labelled with the agent, no child text, fo
46
46
  const { effects, view } = replay({ events: loadFixture('task-subagent.events.jsonl') });
47
47
  expect(effectLines(effects)).toMatchInlineSnapshot(`
48
48
  [
49
- "» **user:** Use the subagent tool with agent "general" to find which file defines the Drizzle SQLite schema in cli/src (the subagent should use glob and read). Then read the first 10 lines of that file yourself with the read tool and answer in 2 short sentences.",
49
+ "-# » **user:** Use the subagent tool with agent "general" to find which file defines the Drizzle SQLite schema in cli/src (the subagent should use glob and read). Then read the first 10 lines of that file yourself with the read tool and answer in 2 short sentences.",
50
50
  "[typing on]",
51
51
  "-# *using openai/gpt-6-luna low ⋅ build*",
52
52
  "-# ┣ general **Find SQLite schema file**",
53
53
  "\\nThe Drizzle SQLite schema is defined in \`cli/src/schema.ts\`. Its first lines confirm it defines tables for Kimaki’s local SQLite database.",
54
54
  "[typing off]",
55
- "-# *project ⋅ main ⋅ 12s ⋅ 6% ⋅ gpt-6-luna*",
55
+ "-# *main ⋅ 12s ⋅ 6% ⋅ gpt-6-luna*",
56
56
  ]
57
57
  `);
58
58
  expect(view.children).toMatchInlineSnapshot(`
@@ -70,12 +70,12 @@ test('task-parallel: background children show start and end lines only, no foote
70
70
  const { effects, view } = replay({ events: loadFixture('task-parallel.events.jsonl') });
71
71
  expect(effectLines(effects)).toMatchInlineSnapshot(`
72
72
  [
73
- "» **user:** In a single step, call the subagent tool twice in parallel, both with agent "general": one to count the .ts files in cli/src/commands using a shell command, one to list the top-level folders of the repo with a shell command. Then reply with both results in 2 lines.",
73
+ "-# » **user:** In a single step, call the subagent tool twice in parallel, both with agent "general": one to count the .ts files in cli/src/commands using a shell command, one to list the top-level folders of the repo with a shell command. Then reply with both results in 2 lines.",
74
74
  "[typing on]",
75
75
  "-# *using openai/gpt-6-luna low ⋅ build*",
76
76
  "-# ┣ general **Count command TypeScript** (background)",
77
77
  "-# ┣ general **List repo folders** (background)",
78
- "-# ⬦ general finished: Count command TypeScript",
78
+ "-# general finished: Count command TypeScript",
79
79
  "\\nBoth tasks are running. I’ll report the two results when they finish.",
80
80
  "\\n-# ┣ general **List repo folders**",
81
81
  "-# ┣ general ⋅ shell _find . -maxdepth 1 -type d -not -name . -print \\| sed 's#^./##' \\| sort_",
@@ -108,16 +108,16 @@ test('abort: no error line for the aborted tool, no footer, next turn is normal'
108
108
  const { effects } = replay({ events: loadFixture('abort.events.jsonl') });
109
109
  expect(effectLines(effects)).toMatchInlineSnapshot(`
110
110
  [
111
- "» **user:** Run \`sleep 30 && echo never\` with bash, then summarize.",
111
+ "-# » **user:** Run \`sleep 30 && echo never\` with bash, then summarize.",
112
112
  "[typing on]",
113
113
  "-# *using openai/gpt-6-luna low ⋅ build*",
114
114
  "-# ┣ shell _sleep 30 && echo never_",
115
115
  "[typing off]",
116
- "» **user:** Say only: resumed after abort.",
116
+ "-# » **user:** Say only: resumed after abort.",
117
117
  "[typing on]",
118
118
  "resumed after abort",
119
119
  "[typing off]",
120
- "-# *project ⋅ main ⋅ 1s ⋅ 6% ⋅ gpt-6-luna*",
120
+ "-# *main ⋅ 1s ⋅ 6% ⋅ gpt-6-luna*",
121
121
  ]
122
122
  `);
123
123
  });
@@ -176,23 +176,25 @@ test('queue-plain: acks with positions while busy, silent footer before each del
176
176
  const { effects, view } = replay({ events: loadFixture('queue-plain.events.jsonl') });
177
177
  expect(effectLines(effects)).toMatchInlineSnapshot(`
178
178
  [
179
- "» **user:** Run \`sleep 6 && echo slow-done\` with bash, then say done.",
179
+ "-# » **user:** Run \`sleep 6 && echo slow-done\` with bash, then say done.",
180
180
  "[typing on]",
181
181
  "-# *using openai/gpt-6-luna low ⋅ build*",
182
182
  "-# ┣ shell _sleep 6 && echo slow-done_",
183
- "[show queue:msg_0f20347e1001nsJ7W4hOvhBpQb] -# Queued at position 1. Delete the original message to remove it, or use /clear-queue position:1",
184
- "[show queue:msg_0f20347e500196F4o0voD7LGMV] -# Queued at position 2. Delete the original message to remove it, or use /clear-queue position:2",
183
+ "[show queue:msg_0f20347e1001nsJ7W4hOvhBpQb] -# » **user:** QUEUED-1: reply with the word apple.
184
+ -# Queued at position 1. Remove it with /clear-queue position:1",
185
+ "[show queue:msg_0f20347e500196F4o0voD7LGMV] -# » **user:** QUEUED-2: reply with the word cherry.
186
+ -# Queued at position 2. Remove it with /clear-queue position:2",
185
187
  "\\nDone.",
186
- "[silent] -# *project ⋅ main ⋅ 10s ⋅ 6% ⋅ gpt-6-luna*",
187
- "[edit queue:msg_0f20347e1001nsJ7W4hOvhBpQb] -# Queued message sent",
188
- "» **user:** QUEUED-1: reply with the word apple.",
188
+ "[silent] -# *main ⋅ 10s ⋅ 6% ⋅ gpt-6-luna*",
189
+ "[edit queue:msg_0f20347e1001nsJ7W4hOvhBpQb] -# » **user:** QUEUED-1: reply with the word apple.",
190
+ "[reply to queue:msg_0f20347e1001nsJ7W4hOvhBpQb] -# Queued message sent",
189
191
  "apple",
190
- "[silent] -# *project ⋅ main ⋅ 2s ⋅ 6% ⋅ gpt-6-luna*",
191
- "[edit queue:msg_0f20347e500196F4o0voD7LGMV] -# Queued message sent",
192
- "» **user:** QUEUED-2: reply with the word cherry.",
192
+ "[silent] -# *main ⋅ 2s ⋅ 6% ⋅ gpt-6-luna*",
193
+ "[edit queue:msg_0f20347e500196F4o0voD7LGMV] -# » **user:** QUEUED-2: reply with the word cherry.",
194
+ "[reply to queue:msg_0f20347e500196F4o0voD7LGMV] -# Queued message sent",
193
195
  "cherry",
194
196
  "[typing off]",
195
- "-# *project ⋅ main ⋅ 2s ⋅ 6% ⋅ gpt-6-luna*",
197
+ "-# *main ⋅ 2s ⋅ 6% ⋅ gpt-6-luna*",
196
198
  ]
197
199
  `);
198
200
  expect(view.inbox).toMatchInlineSnapshot(`[]`);
@@ -201,21 +203,25 @@ test('steer-queue: cancelled item edits its ack, interrupted run has no footer',
201
203
  const { effects, view } = replay({ events: loadFixture('steer-queue.events.jsonl') });
202
204
  expect(effectLines(effects)).toMatchInlineSnapshot(`
203
205
  [
204
- "» **user:** Run \`sleep 8 && echo slow-done\` with bash, then say done.",
206
+ "-# » **user:** Run \`sleep 8 && echo slow-done\` with bash, then say done.",
205
207
  "[typing on]",
206
208
  "-# *using openai/gpt-6-luna low ⋅ build*",
207
209
  "-# ┣ shell _sleep 8 && echo slow-done_",
208
- "[show queue:msg_0f200f884001tIpWlHhNB8Y5bv] -# Queued at position 1. Delete the original message to remove it, or use /clear-queue position:1",
209
- "[show queue:msg_kimaki_queued_b_test1] -# Queued at position 2. Delete the original message to remove it, or use /clear-queue position:2",
210
- "[show queue:msg_0f200f88a001SXny4FyIMuMPS6] -# Queued at position 3. Delete the original message to remove it, or use /clear-queue position:3",
211
- "[edit queue:msg_kimaki_queued_b_test1] -# Removed from queue",
212
- "» **user:** STEER: actually also tell me the current date using bash \`date\`.",
210
+ "[show queue:msg_0f200f884001tIpWlHhNB8Y5bv] -# » **user:** QUEUED-A: after everything, reply with the word apple.
211
+ -# Queued at position 1. Remove it with /clear-queue position:1",
212
+ "[show queue:msg_kimaki_queued_b_test1] -# » **user:** QUEUED-B: reply with the word banana.
213
+ -# Queued at position 2. Remove it with /clear-queue position:2",
214
+ "[show queue:msg_0f200f88a001SXny4FyIMuMPS6] -# » **user:** QUEUED-C: reply with the word cherry.
215
+ -# Queued at position 3. Remove it with /clear-queue position:3",
216
+ "[edit queue:msg_kimaki_queued_b_test1] -# » **user:** QUEUED-B: reply with the word banana.
217
+ -# Removed from queue",
218
+ "-# » **user:** STEER: actually also tell me the current date using bash \`date\`.",
213
219
  "[typing off]",
214
220
  "[typing on]",
215
221
  "-# ┣ shell _date_",
216
222
  "\\nDone. The current date is Wed Sep 30 2026.",
217
223
  "[typing off]",
218
- "-# *project ⋅ main ⋅ 3s ⋅ 6% ⋅ gpt-6-luna*",
224
+ "-# *main ⋅ 3s ⋅ 6% ⋅ gpt-6-luna*",
219
225
  ]
220
226
  `);
221
227
  // The recorded order (prompt, then interrupt with resume) parks queued items.
@@ -230,21 +236,22 @@ test('queue-parked: parked item runs and echoes after the next prompt, with a fo
230
236
  const { effects } = replay({ events: loadFixture('queue-parked.events.jsonl') });
231
237
  expect(effectLines(effects)).toMatchInlineSnapshot(`
232
238
  [
233
- "» **user:** Run \`sleep 6 && echo slow-done\` with bash, then say done.",
239
+ "-# » **user:** Run \`sleep 6 && echo slow-done\` with bash, then say done.",
234
240
  "[typing on]",
235
241
  "-# *using openai/gpt-6-luna low ⋅ build*",
236
242
  "-# ┣ shell _sleep 6 && echo slow-done_",
237
- "[show queue:msg_0f2039909001oR0GJKPGqxOjml] -# Queued at position 1. Delete the original message to remove it, or use /clear-queue position:1",
243
+ "[show queue:msg_0f2039909001oR0GJKPGqxOjml] -# » **user:** PARKED-1: reply with the word apple.
244
+ -# Queued at position 1. Remove it with /clear-queue position:1",
238
245
  "[typing off]",
239
- "» **user:** NEW: reply with the word kiwi.",
246
+ "-# » **user:** NEW: reply with the word kiwi.",
240
247
  "[typing on]",
241
248
  "kiwi",
242
- "[silent] -# *project ⋅ main ⋅ 3s ⋅ 6% ⋅ gpt-6-luna*",
243
- "[edit queue:msg_0f2039909001oR0GJKPGqxOjml] -# Queued message sent",
244
- "» **user:** PARKED-1: reply with the word apple.",
249
+ "[silent] -# *main ⋅ 3s ⋅ 6% ⋅ gpt-6-luna*",
250
+ "[edit queue:msg_0f2039909001oR0GJKPGqxOjml] -# » **user:** PARKED-1: reply with the word apple.",
251
+ "[reply to queue:msg_0f2039909001oR0GJKPGqxOjml] -# Queued message sent",
245
252
  "apple",
246
253
  "[typing off]",
247
- "-# *project ⋅ main ⋅ 3s ⋅ 6% ⋅ gpt-6-luna*",
254
+ "-# *main ⋅ 3s ⋅ 6% ⋅ gpt-6-luna*",
248
255
  ]
249
256
  `);
250
257
  });
@@ -252,7 +259,7 @@ test('question: one dropdown per question, typing off while waiting, edited on r
252
259
  const { effects, view } = replay({ events: loadFixture('question.events.jsonl') });
253
260
  expect(effectLines(effects)).toMatchInlineSnapshot(`
254
261
  [
255
- "» **user:** Use the question tool to ask me which color I prefer, with options red, green, blue (single choice), and in the same question tool call add a second question asking which fruits I like with options apple, pear, kiwi (multiple choice). After my answer, reply with one line.",
262
+ "-# » **user:** Use the question tool to ask me which color I prefer, with options red, green, blue (single choice), and in the same question tool call add a second question asking which fruits I like with options apple, pear, kiwi (multiple choice). After my answer, reply with one line.",
256
263
  "[typing on]",
257
264
  "-# *using openai/gpt-6-luna low ⋅ build*",
258
265
  "[typing off]",
@@ -267,7 +274,7 @@ test('question: one dropdown per question, typing off while waiting, edited on r
267
274
  ✓ _apple, kiwi_",
268
275
  "You prefer green, and you like apples and kiwi.",
269
276
  "[typing off]",
270
- "-# *project ⋅ main ⋅ 5s ⋅ 6% ⋅ gpt-6-luna*",
277
+ "-# *main ⋅ 5s ⋅ 6% ⋅ gpt-6-luna*",
271
278
  ]
272
279
  `);
273
280
  expect(view.forms).toMatchInlineSnapshot(`{}`);
@@ -276,7 +283,7 @@ test('permission: two requests, the rejected one fails its tool call', () => {
276
283
  const { effects, view } = replay({ events: loadFixture('permission.events.jsonl') });
277
284
  expect(effectLines(effects)).toMatchInlineSnapshot(`
278
285
  [
279
- "» **user:** Run \`echo first\` with bash. Then run \`echo second\` with bash. Then reply with one line describing what happened.",
286
+ "-# » **user:** Run \`echo first\` with bash. Then run \`echo second\` with bash. Then reply with one line describing what happened.",
280
287
  "[typing on]",
281
288
  "-# *using openai/gpt-6-luna low ⋅ build*",
282
289
  "-# ┣ shell _echo first_",
@@ -302,33 +309,33 @@ test('permission: two requests, the rejected one fails its tool call', () => {
302
309
  "-# ⨯ shell _Unable to execute command: echo second_",
303
310
  "\\n\`echo first\` printed \`first\`; \`echo second\` failed to execute.",
304
311
  "[typing off]",
305
- "-# *project ⋅ main ⋅ 5s ⋅ 6% ⋅ gpt-6-luna*",
312
+ "-# *main ⋅ 5s ⋅ 6% ⋅ gpt-6-luna*",
306
313
  ]
307
314
  `);
308
315
  expect(view.permissions).toMatchInlineSnapshot(`{}`);
309
316
  });
310
317
  test('shell-background: background shell line even without side effects, finished line when its job ends', () => {
311
318
  const events = loadFixture('shell-background.events.jsonl');
312
- const view = emptyView({ sessionId: 'ses_ee56d6caeffech0rMI5NTnkky1', channelId: 'channel', directory: '/project', isNew: false });
313
- const { effects, view: end } = replay({ events, view, prefs: { verbosity: 'tools', contextLimits: {}, messageTool: false } });
319
+ const view = emptyView({ sessionId: 'ses_ee56d6caeffech0rMI5NTnkky1', channelId: 'channel', directory: '/project', isNew: false, coordinator: false });
320
+ const { effects, view: end } = replay({ events, view, prefs: { verbosity: 'tools', models: {} } });
314
321
  expect(effectLines(effects)).toMatchInlineSnapshot(`
315
322
  [
316
- "» **user:** start a task in background that runs sleep 100",
323
+ "-# » **user:** start a task in background that runs sleep 100",
317
324
  "[typing on]",
318
325
  "-# ┣ shell _Run sleep 100 in background_ (background)",
319
326
  "\\nI started \`sleep 100\` in the background (shell ID \`sh_11a929cf5001mAukdL6rQFIbLg\`). It ends in about 100 seconds, and I get a notification when it does.",
320
327
  "[typing off]",
321
- "-# *project ⋅ main ⋅ 4s ⋅ claude-opus-5-5 ⋅ opus*",
322
- "» **user:** is it still running",
328
+ "-# *main ⋅ 4s ⋅ claude-opus-5-5 ⋅ opus*",
329
+ "-# » **user:** is it still running",
323
330
  "[typing on]",
324
331
  "Yes, it is still running (PID 47861). I have not had the completion notification yet.",
325
332
  "[typing off]",
326
- "-# *project ⋅ main ⋅ 5s ⋅ claude-opus-5-5 ⋅ opus*",
327
- "-# ⬦ background shell finished: _Run sleep 100 in background_",
333
+ "-# *main ⋅ 5s ⋅ claude-opus-5-5 ⋅ opus*",
334
+ "-# background shell finished: _Run sleep 100 in background_",
328
335
  "[typing on]",
329
336
  "\\nThe background \`sleep 100\` has finished. It printed no output.",
330
337
  "[typing off]",
331
- "-# *project ⋅ main ⋅ 2s ⋅ claude-opus-5-5 ⋅ opus*",
338
+ "-# *main ⋅ 2s ⋅ claude-opus-5-5 ⋅ opus*",
332
339
  ]
333
340
  `);
334
341
  expect(end.shells).toMatchInlineSnapshot(`{}`);
@@ -342,8 +349,8 @@ test('shell: user !cmd output while idle and while busy, synthetic items render
342
349
  user-shell-idle
343
350
  05de62d feat: make external opencode session sync opt-in via --enable-sync
344
351
  \`\`\`",
345
- "» **user:** CONTEXT ONLY: the deploy tag is v9.9.9",
346
- "» **user:** What did my shell command print, and what is the deploy tag? Also run \`sleep 5\` with bash first.",
352
+ "-# » **user:** CONTEXT ONLY: the deploy tag is v9.9.9",
353
+ "-# » **user:** What did my shell command print, and what is the deploy tag? Also run \`sleep 5\` with bash first.",
347
354
  "[typing on]",
348
355
  "-# *using openai/gpt-6-luna low ⋅ build*",
349
356
  "-# ┣ shell _sleep 5_",
@@ -353,7 +360,7 @@ test('shell: user !cmd output while idle and while busy, synthetic items render
353
360
  \`\`\`",
354
361
  "\\nYour shell command printed \`user-shell-idle\` and \`05de62d feat: make external opencode session sync opt-in via --enable-sync\`. The deploy tag is \`v9.9.9\`.",
355
362
  "[typing off]",
356
- "-# *project ⋅ main ⋅ 9s ⋅ 6% ⋅ gpt-6-luna*",
363
+ "-# *main ⋅ 9s ⋅ 6% ⋅ gpt-6-luna*",
357
364
  ]
358
365
  `);
359
366
  });
@@ -1 +1 @@
1
- {"version":3,"file":"thread-reducer.fixtures.test.js","sourceRoot":"","sources":["../src/thread-reducer.fixtures.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"thread-reducer.fixtures.test.js","sourceRoot":"","sources":["../src/thread-reducer.fixtures.test.ts"],"names":[],"mappings":"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"}