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
@@ -0,0 +1,164 @@
1
+ // Coordinator notes: when a thread session finishes a run, its coordinator learns
2
+ // about it, so the coordinator always knows what happened in its project.
3
+ //
4
+ // thread run ends ─▶ `kimaki send --wait` prompt, wait not over, target busy? ─▶ no note: the wait prints the answer
5
+ // ├─▶ run prompt sent by a coordinator (`sender`)? ─▶ note + wake that coordinator
6
+ // └─▶ else (user steered, routine), channel coordinator? ─▶ silent note (read at next prompt)
7
+ //
8
+ // Who sent the prompt is in its metadata (`sender`, prompt.ts), read from the
9
+ // run's messages: no state of its own. The note is a synthetic inbox item, like
10
+ // OpenCode's own subagent completion (core/src/session/subagent-completion.ts):
11
+ // `resume` decides if it wakes the session.
12
+ import { isCoordinatorChannel, oc, projectOf, readMarker } from "./bot.js";
13
+ import { createLogger } from "./logger.js";
14
+ import { IDLE_REPLY } from "./plugin/coordinator.js";
15
+ import { finalAnswer, formatDuration, formatTokens, sessionUsage } from "./session-events.js";
16
+ import { escapeAttribute } from "./system-prompt.js";
17
+ const logger = createLogger('COORDINATOR');
18
+ // A woken coordinator reads the whole answer; a silent note only says what happened.
19
+ const WAKE_ANSWER_CHARS = 2_000;
20
+ const NOTE_ANSWER_CHARS = 400;
21
+ const USER_PROMPT_CHARS = 1_000;
22
+ const RUN_PAGE_MESSAGES = 30;
23
+ // A run longer than this only loses uploads from its first steps.
24
+ const MAX_RUN_PAGES = 10;
25
+ // The messages of the last run, oldest first: pages back until its user prompt.
26
+ async function lastRunMessages(bot, sessionId) {
27
+ const messages = [];
28
+ let cursor;
29
+ for (let page = 0; page < MAX_RUN_PAGES; page++) {
30
+ const result = await oc(bot, 'message.list', (client) => client.message.list({ sessionID: sessionId, limit: RUN_PAGE_MESSAGES, ...(cursor ? { cursor } : { order: 'desc' }) }));
31
+ if (result instanceof Error)
32
+ return result;
33
+ messages.push(...result.data);
34
+ cursor = result.cursor.next ?? undefined;
35
+ if (!cursor || result.data.some((message) => message.type === 'user'))
36
+ break;
37
+ }
38
+ return messages.reverse();
39
+ }
40
+ // Who wrote the run's prompt, from its metadata (prompt.ts): a sender
41
+ // (`kimaki send`, routine, sleep wake) or a person in Discord.
42
+ function runPrompt(messages) {
43
+ const prompt = messages.findLast((message) => message.type === 'user');
44
+ if (prompt?.type !== 'user')
45
+ return { sender: null, user: null };
46
+ const sender = prompt.metadata?.['sender'];
47
+ if (sender && typeof sender === 'object') {
48
+ const sessionId = Reflect.get(sender, 'sessionId');
49
+ const waitUntil = Reflect.get(sender, 'waitUntil');
50
+ return { sender: { ...(typeof sessionId === 'string' && { sessionId }), ...(typeof waitUntil === 'number' && { waitUntil }) }, user: null };
51
+ }
52
+ const discord = prompt.metadata?.['discord'];
53
+ const username = discord && typeof discord === 'object' ? Reflect.get(discord, 'username') : null;
54
+ return { sender: null, user: typeof username === 'string' ? { username, text: prompt.text } : null };
55
+ }
56
+ // The coordinator a session belongs to: the root of its conversation when that is
57
+ // a coordinator channel. The sender may be a subagent of that coordinator.
58
+ async function coordinatorOf(bot, sessionId) {
59
+ const { sessionThreads, roots } = bot.store.getState();
60
+ const conversation = sessionThreads[sessionId];
61
+ if (!conversation || !(await holdsCoordinator(bot, conversation)))
62
+ return null;
63
+ return roots[conversation] ?? null;
64
+ }
65
+ function cut(text, max) {
66
+ return text.length <= max ? text : `${text.slice(0, max)}…`;
67
+ }
68
+ // A conversation that is a project channel in coordinator mode holds a coordinator.
69
+ async function holdsCoordinator(bot, conversationId) {
70
+ if (!isCoordinatorChannel(bot, conversationId))
71
+ return false;
72
+ const project = await projectOf(bot, conversationId);
73
+ return !(project instanceof Error) && project !== null;
74
+ }
75
+ // The project channel of a session thread, from its view or from Discord.
76
+ async function channelOfThread(bot, threadId) {
77
+ const view = bot.store.getState().threads[threadId];
78
+ if (view)
79
+ return view.channelId;
80
+ const channel = await bot.discord.channels.fetch(threadId).catch(() => null);
81
+ return channel?.isThread() ? channel.parentId : null;
82
+ }
83
+ // The run's prompt came from `kimaki send --wait`, the run ended before the wait
84
+ // ran out and the target still runs: it is waiting in that shell call, which
85
+ // prints the answer. A target that is idle lost its wait (shell timeout,
86
+ // interrupt), so it gets the note.
87
+ async function isWaiting(bot, target) {
88
+ const active = await oc(bot, 'session.active', (client) => client.session.active());
89
+ // On a failed check the note goes out: a duplicate is better than a lost result.
90
+ if (active instanceof Error) {
91
+ logger.warn(`wait check of ${target}`, active);
92
+ return false;
93
+ }
94
+ return target in active;
95
+ }
96
+ async function noteRunEnded(bot, run) {
97
+ const channelId = await channelOfThread(bot, run.threadId);
98
+ // The coordinator's own runs, and threads outside any project channel.
99
+ if (!channelId || channelId === run.threadId)
100
+ return;
101
+ const [info, messages] = await Promise.all([
102
+ oc(bot, 'session.get', (client) => client.session.get({ sessionID: run.sessionId })),
103
+ lastRunMessages(bot, run.sessionId),
104
+ ]);
105
+ if (info instanceof Error)
106
+ return logger.warn(`note of ${run.sessionId}`, info);
107
+ if (messages instanceof Error)
108
+ return logger.warn(`answer of ${run.sessionId}`, messages);
109
+ const marker = readMarker(info.metadata);
110
+ const { sender, user } = runPrompt(messages);
111
+ // TODO: also note sessions on other machines (remote `kimaki send`, OpenCode workspaces).
112
+ // Their bot cannot reach this OpenCode server: relay the note through a Discord envelope
113
+ // in the coordinator channel, like remote-send.ts does for prompts.
114
+ // Only a run a coordinator prompted wakes it. The user steering the thread, routines and
115
+ // other senders leave a silent note in the channel's coordinator.
116
+ const sentBy = sender?.sessionId ? await coordinatorOf(bot, sender.sessionId) : null;
117
+ const wake = sentBy !== null;
118
+ const target = sentBy ?? (isCoordinatorChannel(bot, channelId) ? bot.store.getState().roots[channelId] : undefined);
119
+ if (!target || target === run.sessionId)
120
+ return;
121
+ if (sender?.waitUntil !== undefined && Date.now() < sender.waitUntil && (await isWaiting(bot, target)))
122
+ return;
123
+ const answer = run.error ?? finalAnswer(messages) ?? 'Finished without a text answer.';
124
+ const state = run.error ? 'error' : 'completed';
125
+ const title = info.title || 'Untitled';
126
+ const routine = marker?.task ? ` routine="#${marker.task.id}"` : '';
127
+ // Context size and run length, so the coordinator knows when a follow-up would rewrite a big cache.
128
+ const usage = sessionUsage(messages);
129
+ const stats = usage ? ` context="${formatTokens(usage.contextTokens)} tokens"${usage.runMs === null ? '' : ` duration="${formatDuration(usage.runMs)}"`}` : '';
130
+ const text = [
131
+ `<session-finished sessionID="${run.sessionId}" threadID="${run.threadId}" state="${state}" title="${escapeAttribute(title)}"${routine}${stats} wake="${wake}">`,
132
+ // The user steered this thread directly: the coordinator must know what they asked.
133
+ ...(user ? [`<user-prompt username="${escapeAttribute(user.username)}">\n${cut(user.text, USER_PROMPT_CHARS)}\n</user-prompt>`] : []),
134
+ cut(answer, wake ? WAKE_ANSWER_CHARS : NOTE_ANSWER_CHARS),
135
+ `More: kimaki session read ${run.sessionId}`,
136
+ ...(wake ? [`The user sees nothing else about this. When it is work they asked for, a failure or a decision they must make, tell them the outcome in a few plain sentences, with the thread link <#${run.threadId}> once. Otherwise reply exactly ${IDLE_REPLY}.`] : []),
137
+ '</session-finished>',
138
+ ].join('\n');
139
+ const sent = await oc(bot, 'session.synthetic', (client) => client.session.synthetic({
140
+ sessionID: target,
141
+ text,
142
+ description: `${title} finished`,
143
+ metadata: { source: 'kimaki-session', sessionID: run.sessionId, threadID: run.threadId, title, state, wake },
144
+ resume: wake,
145
+ }));
146
+ if (sent instanceof Error)
147
+ return logger.warn(`note of ${run.sessionId} to ${target}`, sent);
148
+ logger.log(`${wake ? 'woke' : 'noted'} coordinator ${target}: ${run.sessionId} ${state}`);
149
+ }
150
+ export function createCoordinatorNotes() {
151
+ const registered = { bot: null };
152
+ return {
153
+ register(bot) {
154
+ registered.bot = bot;
155
+ },
156
+ runEnded(run) {
157
+ const bot = registered.bot;
158
+ // No channel in coordinator mode: no note to send, so no OpenCode reads.
159
+ if (bot && (bot.coordinatorDefault || Object.values(bot.store.getState().coordinator).includes(true)))
160
+ void noteRunEnded(bot, run);
161
+ },
162
+ };
163
+ }
164
+ //# sourceMappingURL=coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../src/coordinator.ts"],"names":[],"mappings":"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"}
package/dist/db.d.ts CHANGED
@@ -28,6 +28,7 @@ declare function createDrizzle(client: Client): import("drizzle-orm/libsql").Lib
28
28
  channel_worktree: orm.One<"channel_worktrees", true>;
29
29
  channel_verbosity: orm.One<"channel_verbosity", true>;
30
30
  channel_mention_mode: orm.One<"channel_mention_mode", true>;
31
+ channel_coordinator: orm.One<"channel_coordinator", true>;
31
32
  scheduled_tasks: orm.Many<"scheduled_tasks">;
32
33
  };
33
34
  channel_models: {
@@ -45,6 +46,9 @@ declare function createDrizzle(client: Client): import("drizzle-orm/libsql").Lib
45
46
  channel_mention_mode: {
46
47
  channel: orm.One<"channel_directories", true>;
47
48
  };
49
+ channel_coordinator: {
50
+ channel: orm.One<"channel_directories", true>;
51
+ };
48
52
  scheduled_tasks: {
49
53
  channel: orm.One<"channel_directories", true>;
50
54
  thread: orm.One<"thread_sessions", true>;
@@ -210,7 +214,7 @@ declare function createDrizzle(client: Client): import("drizzle-orm/libsql").Lib
210
214
  name: string;
211
215
  tableName: "bot_tokens";
212
216
  dataType: "string enum";
213
- data: "gateway" | "self_hosted";
217
+ data: "self_hosted" | "gateway";
214
218
  driverParam: string;
215
219
  notNull: true;
216
220
  hasDefault: true;
@@ -1063,6 +1067,77 @@ declare function createDrizzle(client: Client): import("drizzle-orm/libsql").Lib
1063
1067
  };
1064
1068
  dialect: "sqlite";
1065
1069
  }>;
1070
+ channel_coordinator: s.SQLiteTableWithColumns<{
1071
+ name: "channel_coordinator";
1072
+ schema: undefined;
1073
+ columns: {
1074
+ channel_id: s.SQLiteColumn<{
1075
+ name: string;
1076
+ tableName: "channel_coordinator";
1077
+ dataType: "string";
1078
+ data: string;
1079
+ driverParam: string;
1080
+ notNull: true;
1081
+ hasDefault: false;
1082
+ isPrimaryKey: true;
1083
+ isAutoincrement: false;
1084
+ hasRuntimeDefault: false;
1085
+ enumValues: [string, ...string[]];
1086
+ baseColumn: never;
1087
+ identity: undefined;
1088
+ generated: undefined;
1089
+ }, {}>;
1090
+ enabled: s.SQLiteColumn<{
1091
+ name: string;
1092
+ tableName: "channel_coordinator";
1093
+ dataType: "number int53";
1094
+ data: number;
1095
+ driverParam: number;
1096
+ notNull: true;
1097
+ hasDefault: false;
1098
+ isPrimaryKey: false;
1099
+ isAutoincrement: false;
1100
+ hasRuntimeDefault: false;
1101
+ enumValues: undefined;
1102
+ baseColumn: never;
1103
+ identity: undefined;
1104
+ generated: undefined;
1105
+ }, {}>;
1106
+ created_at: s.SQLiteColumn<{
1107
+ name: string;
1108
+ tableName: "channel_coordinator";
1109
+ dataType: "custom";
1110
+ data: Date;
1111
+ driverParam: string;
1112
+ notNull: false;
1113
+ hasDefault: true;
1114
+ isPrimaryKey: false;
1115
+ isAutoincrement: false;
1116
+ hasRuntimeDefault: false;
1117
+ enumValues: undefined;
1118
+ baseColumn: never;
1119
+ identity: undefined;
1120
+ generated: undefined;
1121
+ }, {}>;
1122
+ updated_at: s.SQLiteColumn<{
1123
+ name: string;
1124
+ tableName: "channel_coordinator";
1125
+ dataType: "custom";
1126
+ data: Date;
1127
+ driverParam: string;
1128
+ notNull: false;
1129
+ hasDefault: true;
1130
+ isPrimaryKey: false;
1131
+ isAutoincrement: false;
1132
+ hasRuntimeDefault: false;
1133
+ enumValues: undefined;
1134
+ baseColumn: never;
1135
+ identity: undefined;
1136
+ generated: undefined;
1137
+ }, {}>;
1138
+ };
1139
+ dialect: "sqlite";
1140
+ }>;
1066
1141
  scheduled_tasks: s.SQLiteTableWithColumns<{
1067
1142
  name: "scheduled_tasks";
1068
1143
  schema: undefined;
@@ -1087,7 +1162,7 @@ declare function createDrizzle(client: Client): import("drizzle-orm/libsql").Lib
1087
1162
  name: string;
1088
1163
  tableName: "scheduled_tasks";
1089
1164
  dataType: "string enum";
1090
- data: "failed" | "planned" | "running" | "completed" | "cancelled";
1165
+ data: "planned" | "running" | "completed" | "cancelled" | "failed";
1091
1166
  driverParam: string;
1092
1167
  notNull: true;
1093
1168
  hasDefault: true;
@@ -1430,7 +1505,7 @@ declare function createDrizzle(client: Client): import("drizzle-orm/libsql").Lib
1430
1505
  name: string;
1431
1506
  tableName: "session_sleeps";
1432
1507
  dataType: "string enum";
1433
- data: "failed" | "planned" | "cancelled" | "consumed";
1508
+ data: "planned" | "cancelled" | "failed" | "consumed";
1434
1509
  driverParam: string;
1435
1510
  notNull: true;
1436
1511
  hasDefault: true;
package/dist/db.test.js CHANGED
@@ -76,6 +76,7 @@ test('fresh install gets kimaki.db with the kimaki tables; subcommands never cre
76
76
  "bot_settings",
77
77
  "bot_tokens",
78
78
  "channel_agents",
79
+ "channel_coordinator",
79
80
  "channel_directories",
80
81
  "channel_mention_mode",
81
82
  "channel_models",
@@ -1 +1 @@
1
- {"version":3,"file":"db.test.js","sourceRoot":"","sources":["../src/db.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.test.js","sourceRoot":"","sources":["../src/db.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import * as errore from 'errore';
2
+ export type DiagramTheme = 'light' | 'dark';
3
+ declare const DiagramError_base: errore.FactoryTaggedErrorClass<"DiagramError", "$reason", Error>;
4
+ export declare class DiagramError extends DiagramError_base {
5
+ }
6
+ export declare function computeCustomProperties(svg: string, vars?: ReadonlyMap<string, string>): string;
7
+ export declare function withColorClasses(source: string, theme?: DiagramTheme): string;
8
+ export declare function renderDiagram(source: string, { theme }?: {
9
+ theme?: DiagramTheme;
10
+ }): DiagramError | Buffer;
11
+ export {};
@@ -0,0 +1,232 @@
1
+ // `kimaki diagram`: renders Mermaid source to a PNG for Discord, which shows
2
+ // SVG attachments as code, not as images. pele (https://pele.run) lays out
3
+ // the diagram as SVG in pure JS; resvg rasterizes it with the bundled Geist fonts.
4
+ // Loaded lazily by the CLI command, so the static imports cost nothing at startup.
5
+ import fs from 'node:fs';
6
+ import path from 'node:path';
7
+ import { fileURLToPath } from 'node:url';
8
+ import { Resvg } from '@resvg/resvg-js';
9
+ import * as errore from 'errore';
10
+ import { DomUtils, parseDocument } from 'htmlparser2';
11
+ import { detectType, render } from 'pele';
12
+ import postcss from 'postcss';
13
+ import valueParser, {} from 'postcss-value-parser';
14
+ const FONTS_DIR = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', 'assets', 'fonts');
15
+ const SCALE = 2;
16
+ const PADDING = 24;
17
+ // Inherited by every shape without its own width, edges included.
18
+ const STROKE_WIDTH = 1.5;
19
+ // Share of the hue in a color class border; the rest is its fill, for soft borders.
20
+ const BORDER_HUE = 0.5;
21
+ // Discord shrinks long images until labels are unreadable; a square one reads best.
22
+ // The compact candidate asks pele for the narrowest layout: wrapped labels and `LR`
23
+ // turned into `TB` (https://pele.run/api#narrow-screens).
24
+ const SQUARE_CANDIDATES = [{ autoDirection: false }, { maxWidth: 1, autoDirection: true, directionBreakpoint: Infinity }];
25
+ // Category hues, built in as classDefs so diagrams only write `node:::blue`.
26
+ // Light: the claude-style palette of the diagrams-and-charts skill. Dark: Vercel/Next.js docs.
27
+ const LIGHT_COLORS = {
28
+ blue: { fill: '#edf5fb', stroke: '#5290c8' },
29
+ green: { fill: '#eef6f0', stroke: '#5f9a6d' },
30
+ purple: { fill: '#f3effa', stroke: '#8a72c2' },
31
+ pink: { fill: '#fbeef3', stroke: '#c4688a' },
32
+ amber: { fill: '#fbf5e8', stroke: '#c99a3e' },
33
+ red: { fill: '#fbeeee', stroke: '#c8524f' },
34
+ teal: { fill: '#ebf6f4', stroke: '#3f9a8f' },
35
+ };
36
+ const DARK_COLORS = {
37
+ blue: { fill: '#0b1f38', stroke: '#1d68c5' },
38
+ green: { fill: '#1a2c1e', stroke: '#49a45f' },
39
+ purple: { fill: '#251931', stroke: '#8955a7' },
40
+ pink: { fill: '#371523', stroke: '#c14c70' },
41
+ amber: { fill: '#4c3d20', stroke: '#f2b342' },
42
+ red: { fill: '#3c1618', stroke: '#e5484d' },
43
+ teal: { fill: '#0d2d2a', stroke: '#12a594' },
44
+ };
45
+ // pele's CSS variables (https://pele.run/theming).
46
+ function theme({ colors, base }) {
47
+ const vars = new Map(Object.entries({
48
+ ...base,
49
+ '--pele-radius': '10px',
50
+ '--pele-font': 'Geist, sans-serif',
51
+ '--pele-font-mono': 'Geist Mono, monospace',
52
+ '--pele-series-1': colors.blue.stroke,
53
+ '--pele-series-2': colors.amber.stroke,
54
+ '--pele-series-3': colors.green.stroke,
55
+ '--pele-series-4': colors.pink.stroke,
56
+ '--pele-series-5': colors.purple.stroke,
57
+ '--pele-series-6': base['--pele-accent'],
58
+ '--pele-series-7': colors.red.stroke,
59
+ '--pele-series-8': colors.teal.stroke,
60
+ }));
61
+ return { colors, vars };
62
+ }
63
+ const THEMES = {
64
+ light: theme({
65
+ colors: LIGHT_COLORS,
66
+ base: {
67
+ '--pele-bg': '#faf9f5',
68
+ '--pele-fg': '#141413',
69
+ '--pele-muted': '#72736e',
70
+ '--pele-line': '#8c8b85',
71
+ '--pele-surface': '#ffffff',
72
+ '--pele-surface-alt': '#efeee5',
73
+ '--pele-border': '#d1cfc5',
74
+ '--pele-accent': '#d97757',
75
+ '--pele-critical': LIGHT_COLORS.pink.stroke,
76
+ '--pele-error': LIGHT_COLORS.red.stroke,
77
+ },
78
+ }),
79
+ dark: theme({
80
+ colors: DARK_COLORS,
81
+ base: {
82
+ '--pele-bg': '#0a0a0a',
83
+ '--pele-fg': '#ededed',
84
+ '--pele-muted': '#8f8f8f',
85
+ '--pele-line': '#878787',
86
+ '--pele-surface': '#171717',
87
+ '--pele-surface-alt': '#232323',
88
+ '--pele-border': '#3d3d3d',
89
+ '--pele-accent': '#4a8fe7',
90
+ '--pele-critical': DARK_COLORS.pink.stroke,
91
+ '--pele-error': DARK_COLORS.red.stroke,
92
+ },
93
+ }),
94
+ };
95
+ export class DiagramError extends errore.createTaggedError({
96
+ name: 'DiagramError',
97
+ message: '$reason',
98
+ }) {
99
+ }
100
+ // resvg and librsvg do not support CSS custom properties, which pele uses for
101
+ // every color. This does the browser's job on the parsed SVG: custom properties
102
+ // inherit down the element tree, and every var() and color-mix() in attributes
103
+ // and inline styles is computed to a plain value. resvg also ignores rx/ry in
104
+ // style (pele writes rx:var(--_r)), so they move to attributes.
105
+ // TODO: drop this once resvg resolves var(). https://github.com/linebender/resvg/issues/821
106
+ export function computeCustomProperties(svg, vars = THEMES.light.vars) {
107
+ const document = parseDocument(svg, { xmlMode: true });
108
+ for (const child of document.children)
109
+ visit(child, vars);
110
+ return DomUtils.getOuterHTML(document, { xmlMode: true });
111
+ }
112
+ function visit(node, inherited) {
113
+ if (!DomUtils.isTag(node))
114
+ return;
115
+ const vars = new Map(inherited);
116
+ const { style, ...attributes } = node.attribs;
117
+ if (style) {
118
+ const declarations = postcss.parse(style).nodes.filter((child) => child.type === 'decl');
119
+ // Custom properties first: they apply to this element's own declarations too.
120
+ for (const decl of declarations)
121
+ if (decl.prop.startsWith('--'))
122
+ vars.set(decl.prop, computeValue(decl.value, vars));
123
+ for (const decl of declarations)
124
+ if (decl.prop === 'rx' || decl.prop === 'ry')
125
+ node.attribs[decl.prop] = computeValue(decl.value, vars);
126
+ const kept = declarations
127
+ .filter((decl) => !decl.prop.startsWith('--') && decl.prop !== 'rx' && decl.prop !== 'ry')
128
+ .map((decl) => `${decl.prop}:${computeValue(decl.value, vars)}`);
129
+ if (kept.length > 0)
130
+ node.attribs.style = kept.join(';');
131
+ else
132
+ delete node.attribs.style;
133
+ }
134
+ for (const [name, value] of Object.entries(attributes))
135
+ node.attribs[name] = computeValue(value, vars);
136
+ for (const child of node.children)
137
+ visit(child, vars);
138
+ }
139
+ function computeValue(value, vars) {
140
+ if (!value.includes('var(') && !value.includes('color-mix('))
141
+ return value;
142
+ const parsed = valueParser(value);
143
+ computeNodes(parsed.nodes, vars);
144
+ return parsed.toString();
145
+ }
146
+ // Replaces var() and color-mix() function nodes in place with word nodes.
147
+ function computeNodes(nodes, vars) {
148
+ for (const node of nodes) {
149
+ if (node.type !== 'function')
150
+ continue;
151
+ computeNodes(node.nodes, vars);
152
+ if (node.value === 'var') {
153
+ const [name, ...rest] = splitArgs(node.nodes);
154
+ const fallback = rest.length > 0 ? rest.join(',') : undefined;
155
+ replaceWithWord(node, vars.get(name ?? '') ?? fallback ?? 'initial');
156
+ }
157
+ else if (node.value === 'color-mix') {
158
+ const mixed = colorMix(splitArgs(node.nodes));
159
+ if (mixed)
160
+ replaceWithWord(node, mixed);
161
+ }
162
+ }
163
+ }
164
+ function splitArgs(nodes) {
165
+ const args = [[]];
166
+ for (const node of nodes) {
167
+ if (node.type === 'div' && node.value === ',')
168
+ args.push([]);
169
+ else
170
+ args.at(-1).push(node);
171
+ }
172
+ return args.map((arg) => valueParser.stringify(arg).trim());
173
+ }
174
+ function replaceWithWord(node, value) {
175
+ Object.assign(node, { type: 'word', value, nodes: undefined });
176
+ }
177
+ // color-mix(in srgb, <hex> [<pct>], <hex> [<pct>]): the only form pele emits.
178
+ function colorMix([space, first, second]) {
179
+ if (space !== 'in srgb' || !first || !second)
180
+ return undefined;
181
+ const [colorA, percentA] = first.split(/\s+/);
182
+ const [colorB, percentB] = second.split(/\s+/);
183
+ const weightA = percentA ? parseFloat(percentA) / 100 : percentB ? 1 - parseFloat(percentB) / 100 : 0.5;
184
+ return mixHex({ a: colorA, b: colorB, weightA });
185
+ }
186
+ function mixHex({ a, b, weightA }) {
187
+ const channelsA = hexChannels(a);
188
+ const channelsB = hexChannels(b);
189
+ if (!channelsA || !channelsB)
190
+ return undefined;
191
+ return `#${channelsA.map((channel, i) => Math.round(channel * weightA + channelsB[i] * (1 - weightA)).toString(16).padStart(2, '0')).join('')}`;
192
+ }
193
+ function hexChannels(color) {
194
+ if (!color || !/^#[0-9a-f]{6}$/i.test(color))
195
+ return undefined;
196
+ return [1, 3, 5].map((i) => parseInt(color.slice(i, i + 2), 16));
197
+ }
198
+ // Renders Mermaid source to PNG bytes. pele syntax errors already include the line and a pointer.
199
+ // Diagram types whose grammar accepts classDef lines.
200
+ const CLASS_DEF_TYPES = new Set(['flowchart', 'swimlane', 'state', 'class', 'er', 'requirement']);
201
+ // Appends a classDef per color the source does not define itself.
202
+ export function withColorClasses(source, theme = 'light') {
203
+ const type = detectType(source);
204
+ if (!type || !CLASS_DEF_TYPES.has(type))
205
+ return source;
206
+ const { colors, vars } = THEMES[theme];
207
+ const defined = new Set(source.split('\n').flatMap((line) => line.trim().match(/^classDef\s+(\S+)/)?.[1]?.split(',') ?? []));
208
+ const lines = Object.entries(colors)
209
+ .filter(([name]) => !defined.has(name))
210
+ .map(([name, { fill, stroke }]) => ` classDef ${name} fill:${fill},stroke:${mixHex({ a: stroke, b: fill, weightA: BORDER_HUE })},color:${vars.get('--pele-fg')}`);
211
+ return [source.trimEnd(), ...lines].join('\n');
212
+ }
213
+ export function renderDiagram(source, { theme = 'light' } = {}) {
214
+ const { vars } = THEMES[theme];
215
+ const colored = withColorClasses(source, theme);
216
+ const renders = errore.try(() => SQUARE_CANDIDATES.map((layout) => render(colored, { fontFamily: 'Geist', fontFamilyMono: 'Geist Mono', padding: PADDING, responsive: false, links: false, images: false, ...layout })), (error) => new DiagramError({ reason: error instanceof Error ? error.message : String(error) }));
217
+ if (renders instanceof Error)
218
+ return renders;
219
+ const squareness = ({ width, height }) => Math.abs(Math.log(width / height));
220
+ const result = renders.reduce((best, candidate) => (squareness(candidate) < squareness(best) ? candidate : best));
221
+ const fontFiles = fs.readdirSync(FONTS_DIR).filter((file) => file.endsWith('.ttf')).map((file) => path.join(FONTS_DIR, file));
222
+ return errore.try(() => {
223
+ const svg = result.svg.replace('<svg ', `<svg stroke-width="${STROKE_WIDTH}" `);
224
+ const resvg = new Resvg(computeCustomProperties(svg, vars), {
225
+ background: vars.get('--pele-bg'),
226
+ fitTo: { mode: 'zoom', value: SCALE },
227
+ font: { loadSystemFonts: false, fontFiles, defaultFontFamily: 'Geist', sansSerifFamily: 'Geist', monospaceFamily: 'Geist Mono' },
228
+ });
229
+ return resvg.render().asPng();
230
+ }, (error) => new DiagramError({ reason: `Rasterizing failed: ${error instanceof Error ? error.message : String(error)}`, cause: error }));
231
+ }
232
+ //# sourceMappingURL=diagram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagram.js","sourceRoot":"","sources":["../src/diagram.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};