@geminixiang/mikan 1.0.0-beta.4 → 1.0.0-beta.40

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 (639) hide show
  1. package/CHANGELOG.md +688 -0
  2. package/README.md +99 -36
  3. package/dist/adapter.d.ts +11 -1
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/adapter.js +18 -1
  6. package/dist/adapter.js.map +1 -1
  7. package/dist/adapters/discord/bot.d.ts +6 -7
  8. package/dist/adapters/discord/bot.d.ts.map +1 -1
  9. package/dist/adapters/discord/bot.js +82 -117
  10. package/dist/adapters/discord/bot.js.map +1 -1
  11. package/dist/adapters/discord/context.d.ts +3 -1
  12. package/dist/adapters/discord/context.d.ts.map +1 -1
  13. package/dist/adapters/discord/context.js +54 -215
  14. package/dist/adapters/discord/context.js.map +1 -1
  15. package/dist/adapters/github/bot.d.ts +89 -0
  16. package/dist/adapters/github/bot.d.ts.map +1 -0
  17. package/dist/adapters/github/bot.js +653 -0
  18. package/dist/adapters/github/bot.js.map +1 -0
  19. package/dist/adapters/github/client.d.ts +122 -0
  20. package/dist/adapters/github/client.d.ts.map +1 -0
  21. package/dist/adapters/github/client.js +314 -0
  22. package/dist/adapters/github/client.js.map +1 -0
  23. package/dist/adapters/github/cloudbuild.d.ts +19 -0
  24. package/dist/adapters/github/cloudbuild.d.ts.map +1 -0
  25. package/dist/adapters/github/cloudbuild.js +71 -0
  26. package/dist/adapters/github/cloudbuild.js.map +1 -0
  27. package/dist/adapters/github/context.d.ts +12 -0
  28. package/dist/adapters/github/context.d.ts.map +1 -0
  29. package/dist/adapters/github/context.js +101 -0
  30. package/dist/adapters/github/context.js.map +1 -0
  31. package/dist/adapters/github/gcp-auth.d.ts +28 -0
  32. package/dist/adapters/github/gcp-auth.d.ts.map +1 -0
  33. package/dist/adapters/github/gcp-auth.js +196 -0
  34. package/dist/adapters/github/gcp-auth.js.map +1 -0
  35. package/dist/adapters/github/github-ops.d.ts +91 -0
  36. package/dist/adapters/github/github-ops.d.ts.map +1 -0
  37. package/dist/adapters/github/github-ops.js +406 -0
  38. package/dist/adapters/github/github-ops.js.map +1 -0
  39. package/dist/adapters/github/ids.d.ts +34 -0
  40. package/dist/adapters/github/ids.d.ts.map +1 -0
  41. package/dist/adapters/github/ids.js +57 -0
  42. package/dist/adapters/github/ids.js.map +1 -0
  43. package/dist/adapters/github/repo.d.ts +33 -0
  44. package/dist/adapters/github/repo.d.ts.map +1 -0
  45. package/dist/adapters/github/repo.js +141 -0
  46. package/dist/adapters/github/repo.js.map +1 -0
  47. package/dist/adapters/github/tool-pack.d.ts +14 -0
  48. package/dist/adapters/github/tool-pack.d.ts.map +1 -0
  49. package/dist/adapters/github/tool-pack.js +56 -0
  50. package/dist/adapters/github/tool-pack.js.map +1 -0
  51. package/dist/adapters/github/tools/checks.d.ts +19 -0
  52. package/dist/adapters/github/tools/checks.d.ts.map +1 -0
  53. package/dist/adapters/github/tools/checks.js +105 -0
  54. package/dist/adapters/github/tools/checks.js.map +1 -0
  55. package/dist/adapters/github/tools/issue.d.ts +21 -0
  56. package/dist/adapters/github/tools/issue.d.ts.map +1 -0
  57. package/dist/adapters/github/tools/issue.js +48 -0
  58. package/dist/adapters/github/tools/issue.js.map +1 -0
  59. package/dist/adapters/github/tools/pr.d.ts +22 -0
  60. package/dist/adapters/github/tools/pr.d.ts.map +1 -0
  61. package/dist/adapters/github/tools/pr.js +48 -0
  62. package/dist/adapters/github/tools/pr.js.map +1 -0
  63. package/dist/adapters/github/tools/read.d.ts +21 -0
  64. package/dist/adapters/github/tools/read.d.ts.map +1 -0
  65. package/dist/adapters/github/tools/read.js +141 -0
  66. package/dist/adapters/github/tools/read.js.map +1 -0
  67. package/dist/adapters/github/tools/review-reply.d.ts +17 -0
  68. package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
  69. package/dist/adapters/github/tools/review-reply.js +38 -0
  70. package/dist/adapters/github/tools/review-reply.js.map +1 -0
  71. package/dist/adapters/github/tools/sync.d.ts +17 -0
  72. package/dist/adapters/github/tools/sync.d.ts.map +1 -0
  73. package/dist/adapters/github/tools/sync.js +34 -0
  74. package/dist/adapters/github/tools/sync.js.map +1 -0
  75. package/dist/adapters/github/types.d.ts +373 -0
  76. package/dist/adapters/github/types.d.ts.map +1 -0
  77. package/dist/adapters/github/types.js +2 -0
  78. package/dist/adapters/github/types.js.map +1 -0
  79. package/dist/adapters/intake.d.ts +16 -5
  80. package/dist/adapters/intake.d.ts.map +1 -1
  81. package/dist/adapters/intake.js +86 -23
  82. package/dist/adapters/intake.js.map +1 -1
  83. package/dist/adapters/progressive-renderer.d.ts +7 -0
  84. package/dist/adapters/progressive-renderer.d.ts.map +1 -0
  85. package/dist/adapters/progressive-renderer.js +383 -0
  86. package/dist/adapters/progressive-renderer.js.map +1 -0
  87. package/dist/adapters/shared.d.ts +23 -10
  88. package/dist/adapters/shared.d.ts.map +1 -1
  89. package/dist/adapters/shared.js +60 -22
  90. package/dist/adapters/shared.js.map +1 -1
  91. package/dist/adapters/slack/blocks.d.ts +14 -0
  92. package/dist/adapters/slack/blocks.d.ts.map +1 -1
  93. package/dist/adapters/slack/blocks.js +147 -111
  94. package/dist/adapters/slack/blocks.js.map +1 -1
  95. package/dist/adapters/slack/bot.d.ts +43 -13
  96. package/dist/adapters/slack/bot.d.ts.map +1 -1
  97. package/dist/adapters/slack/bot.js +385 -207
  98. package/dist/adapters/slack/bot.js.map +1 -1
  99. package/dist/adapters/slack/context.d.ts +3 -1
  100. package/dist/adapters/slack/context.d.ts.map +1 -1
  101. package/dist/adapters/slack/context.js +11 -17
  102. package/dist/adapters/slack/context.js.map +1 -1
  103. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  104. package/dist/adapters/slack/response-lifecycle.js +126 -323
  105. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  106. package/dist/adapters/slack/session.d.ts.map +1 -1
  107. package/dist/adapters/slack/session.js +7 -11
  108. package/dist/adapters/slack/session.js.map +1 -1
  109. package/dist/adapters/slack/tool-pack.d.ts +11 -0
  110. package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
  111. package/dist/adapters/slack/tool-pack.js +45 -0
  112. package/dist/adapters/slack/tool-pack.js.map +1 -0
  113. package/dist/adapters/slack/tools/attach.js +1 -1
  114. package/dist/adapters/slack/tools/attach.js.map +1 -1
  115. package/dist/adapters/slack/tools/blockkit.d.ts +14 -0
  116. package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
  117. package/dist/adapters/slack/tools/blockkit.js +106 -0
  118. package/dist/adapters/slack/tools/blockkit.js.map +1 -0
  119. package/dist/adapters/slack/types.d.ts +40 -2
  120. package/dist/adapters/slack/types.d.ts.map +1 -1
  121. package/dist/adapters/slack/types.js.map +1 -1
  122. package/dist/adapters/telegram/bot.d.ts +8 -9
  123. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  124. package/dist/adapters/telegram/bot.js +90 -117
  125. package/dist/adapters/telegram/bot.js.map +1 -1
  126. package/dist/adapters/telegram/context.d.ts +2 -0
  127. package/dist/adapters/telegram/context.d.ts.map +1 -1
  128. package/dist/adapters/telegram/context.js +61 -184
  129. package/dist/adapters/telegram/context.js.map +1 -1
  130. package/dist/adapters/telegram/html.d.ts.map +1 -1
  131. package/dist/adapters/telegram/html.js +10 -7
  132. package/dist/adapters/telegram/html.js.map +1 -1
  133. package/dist/adapters/types.d.ts +109 -12
  134. package/dist/adapters/types.d.ts.map +1 -1
  135. package/dist/adapters/types.js.map +1 -1
  136. package/dist/agent-events.d.ts +3 -2
  137. package/dist/agent-events.d.ts.map +1 -1
  138. package/dist/agent-events.js +19 -1
  139. package/dist/agent-events.js.map +1 -1
  140. package/dist/agent.d.ts +14 -19
  141. package/dist/agent.d.ts.map +1 -1
  142. package/dist/agent.js +840 -298
  143. package/dist/agent.js.map +1 -1
  144. package/dist/cli/arg-grammar.d.ts +25 -0
  145. package/dist/cli/arg-grammar.d.ts.map +1 -0
  146. package/dist/cli/arg-grammar.js +61 -0
  147. package/dist/cli/arg-grammar.js.map +1 -0
  148. package/dist/cli/boot.d.ts +5 -0
  149. package/dist/cli/boot.d.ts.map +1 -0
  150. package/dist/cli/boot.js +117 -0
  151. package/dist/cli/boot.js.map +1 -0
  152. package/dist/cli/download.d.ts.map +1 -0
  153. package/dist/{download.js → cli/download.js} +2 -0
  154. package/dist/cli/download.js.map +1 -0
  155. package/dist/cli/ext-dev.d.ts +2 -0
  156. package/dist/cli/ext-dev.d.ts.map +1 -0
  157. package/dist/cli/ext-dev.js +188 -0
  158. package/dist/cli/ext-dev.js.map +1 -0
  159. package/dist/cli/ext.d.ts +2 -0
  160. package/dist/cli/ext.d.ts.map +1 -0
  161. package/dist/cli/ext.js +324 -0
  162. package/dist/cli/ext.js.map +1 -0
  163. package/dist/cli/office.d.ts +2 -0
  164. package/dist/cli/office.d.ts.map +1 -0
  165. package/dist/cli/office.js +91 -0
  166. package/dist/cli/office.js.map +1 -0
  167. package/dist/cli/types.d.ts +16 -0
  168. package/dist/cli/types.d.ts.map +1 -0
  169. package/dist/cli/types.js +2 -0
  170. package/dist/cli/types.js.map +1 -0
  171. package/dist/commands/admin.d.ts.map +1 -1
  172. package/dist/commands/admin.js +3 -2
  173. package/dist/commands/admin.js.map +1 -1
  174. package/dist/commands/auto-reply.d.ts.map +1 -1
  175. package/dist/commands/auto-reply.js +5 -9
  176. package/dist/commands/auto-reply.js.map +1 -1
  177. package/dist/commands/extensions.d.ts.map +1 -1
  178. package/dist/commands/extensions.js +9 -6
  179. package/dist/commands/extensions.js.map +1 -1
  180. package/dist/commands/login.d.ts +2 -1
  181. package/dist/commands/login.d.ts.map +1 -1
  182. package/dist/commands/login.js +40 -5
  183. package/dist/commands/login.js.map +1 -1
  184. package/dist/commands/manifest.d.ts +37 -0
  185. package/dist/commands/manifest.d.ts.map +1 -0
  186. package/dist/commands/manifest.js +151 -0
  187. package/dist/commands/manifest.js.map +1 -0
  188. package/dist/commands/model.d.ts +2 -3
  189. package/dist/commands/model.d.ts.map +1 -1
  190. package/dist/commands/model.js +63 -24
  191. package/dist/commands/model.js.map +1 -1
  192. package/dist/commands/new.d.ts.map +1 -1
  193. package/dist/commands/new.js +15 -3
  194. package/dist/commands/new.js.map +1 -1
  195. package/dist/commands/registry.d.ts +2 -2
  196. package/dist/commands/registry.d.ts.map +1 -1
  197. package/dist/commands/registry.js +1 -2
  198. package/dist/commands/registry.js.map +1 -1
  199. package/dist/commands/sandbox.d.ts.map +1 -1
  200. package/dist/commands/sandbox.js +83 -33
  201. package/dist/commands/sandbox.js.map +1 -1
  202. package/dist/commands/session-view.d.ts.map +1 -1
  203. package/dist/commands/session-view.js +6 -3
  204. package/dist/commands/session-view.js.map +1 -1
  205. package/dist/commands/types.d.ts +79 -7
  206. package/dist/commands/types.d.ts.map +1 -1
  207. package/dist/commands/types.js.map +1 -1
  208. package/dist/config.d.ts +23 -8
  209. package/dist/config.d.ts.map +1 -1
  210. package/dist/config.js +222 -135
  211. package/dist/config.js.map +1 -1
  212. package/dist/env-manifest.d.ts +30 -0
  213. package/dist/env-manifest.d.ts.map +1 -0
  214. package/dist/env-manifest.js +229 -0
  215. package/dist/env-manifest.js.map +1 -0
  216. package/dist/events.d.ts.map +1 -1
  217. package/dist/events.js +20 -81
  218. package/dist/events.js.map +1 -1
  219. package/dist/execution-resolver.d.ts +7 -8
  220. package/dist/execution-resolver.d.ts.map +1 -1
  221. package/dist/execution-resolver.js +106 -110
  222. package/dist/execution-resolver.js.map +1 -1
  223. package/dist/extension-schedules.d.ts +31 -0
  224. package/dist/extension-schedules.d.ts.map +1 -0
  225. package/dist/extension-schedules.js +229 -0
  226. package/dist/extension-schedules.js.map +1 -0
  227. package/dist/harness/auth.d.ts +2 -1
  228. package/dist/harness/auth.d.ts.map +1 -1
  229. package/dist/harness/auth.js +11 -5
  230. package/dist/harness/auth.js.map +1 -1
  231. package/dist/harness/event-format.d.ts +27 -0
  232. package/dist/harness/event-format.d.ts.map +1 -0
  233. package/dist/harness/event-format.js +160 -0
  234. package/dist/harness/event-format.js.map +1 -0
  235. package/dist/harness/extensions/loader.d.ts +27 -49
  236. package/dist/harness/extensions/loader.d.ts.map +1 -1
  237. package/dist/harness/extensions/loader.js +486 -130
  238. package/dist/harness/extensions/loader.js.map +1 -1
  239. package/dist/harness/extensions/registry.d.ts +107 -2
  240. package/dist/harness/extensions/registry.d.ts.map +1 -1
  241. package/dist/harness/extensions/registry.js +316 -0
  242. package/dist/harness/extensions/registry.js.map +1 -1
  243. package/dist/harness/extensions/types.d.ts +482 -42
  244. package/dist/harness/extensions/types.d.ts.map +1 -1
  245. package/dist/harness/extensions/types.js.map +1 -1
  246. package/dist/harness/index.d.ts +18 -8
  247. package/dist/harness/index.d.ts.map +1 -1
  248. package/dist/harness/index.js +7 -4
  249. package/dist/harness/index.js.map +1 -1
  250. package/dist/harness/models.d.ts +7 -4
  251. package/dist/harness/models.d.ts.map +1 -1
  252. package/dist/harness/models.js +46 -24
  253. package/dist/harness/models.js.map +1 -1
  254. package/dist/harness/runner.d.ts +50 -54
  255. package/dist/harness/runner.d.ts.map +1 -1
  256. package/dist/harness/runner.js +232 -46
  257. package/dist/harness/runner.js.map +1 -1
  258. package/dist/harness/session-store.d.ts +11 -5
  259. package/dist/harness/session-store.d.ts.map +1 -1
  260. package/dist/harness/session-store.js +141 -36
  261. package/dist/harness/session-store.js.map +1 -1
  262. package/dist/harness/settings.d.ts +2 -20
  263. package/dist/harness/settings.d.ts.map +1 -1
  264. package/dist/harness/settings.js +12 -1
  265. package/dist/harness/settings.js.map +1 -1
  266. package/dist/harness/skills.d.ts +10 -29
  267. package/dist/harness/skills.d.ts.map +1 -1
  268. package/dist/harness/skills.js +48 -6
  269. package/dist/harness/skills.js.map +1 -1
  270. package/dist/harness/subagent-profiles.d.ts +8 -0
  271. package/dist/harness/subagent-profiles.d.ts.map +1 -0
  272. package/dist/harness/subagent-profiles.js +299 -0
  273. package/dist/harness/subagent-profiles.js.map +1 -0
  274. package/dist/harness/subagent-runner.d.ts +39 -0
  275. package/dist/harness/subagent-runner.d.ts.map +1 -0
  276. package/dist/harness/subagent-runner.js +617 -0
  277. package/dist/harness/subagent-runner.js.map +1 -0
  278. package/dist/harness/types.d.ts +267 -1
  279. package/dist/harness/types.d.ts.map +1 -1
  280. package/dist/harness/types.js.map +1 -1
  281. package/dist/harness/usage.d.ts +6 -0
  282. package/dist/harness/usage.d.ts.map +1 -0
  283. package/dist/harness/usage.js +32 -0
  284. package/dist/harness/usage.js.map +1 -0
  285. package/dist/index.d.ts +36 -8
  286. package/dist/index.d.ts.map +1 -1
  287. package/dist/index.js +22 -6
  288. package/dist/index.js.map +1 -1
  289. package/dist/main.js +391 -127
  290. package/dist/main.js.map +1 -1
  291. package/dist/observability/instrument.js +7 -5
  292. package/dist/observability/instrument.js.map +1 -1
  293. package/dist/observability/sentry.d.ts +2 -0
  294. package/dist/observability/sentry.d.ts.map +1 -1
  295. package/dist/observability/sentry.js +10 -2
  296. package/dist/observability/sentry.js.map +1 -1
  297. package/dist/office/address.d.ts +31 -0
  298. package/dist/office/address.d.ts.map +1 -0
  299. package/dist/office/address.js +113 -0
  300. package/dist/office/address.js.map +1 -0
  301. package/dist/office/index.d.ts +11 -0
  302. package/dist/office/index.d.ts.map +1 -0
  303. package/dist/office/index.js +11 -0
  304. package/dist/office/index.js.map +1 -0
  305. package/dist/office/layout.d.ts +27 -0
  306. package/dist/office/layout.d.ts.map +1 -0
  307. package/dist/office/layout.js +97 -0
  308. package/dist/office/layout.js.map +1 -0
  309. package/dist/office/migration.d.ts +44 -0
  310. package/dist/office/migration.d.ts.map +1 -0
  311. package/dist/office/migration.js +255 -0
  312. package/dist/office/migration.js.map +1 -0
  313. package/dist/office/registry.d.ts +75 -0
  314. package/dist/office/registry.d.ts.map +1 -0
  315. package/dist/office/registry.js +646 -0
  316. package/dist/office/registry.js.map +1 -0
  317. package/dist/office/types.d.ts +71 -0
  318. package/dist/office/types.d.ts.map +1 -0
  319. package/dist/office/types.js +2 -0
  320. package/dist/office/types.js.map +1 -0
  321. package/dist/packages/admin.d.ts +17 -0
  322. package/dist/packages/admin.d.ts.map +1 -0
  323. package/dist/packages/admin.js +98 -0
  324. package/dist/packages/admin.js.map +1 -0
  325. package/dist/packages/index.d.ts +6 -0
  326. package/dist/packages/index.d.ts.map +1 -0
  327. package/dist/packages/index.js +6 -0
  328. package/dist/packages/index.js.map +1 -0
  329. package/dist/packages/inspect.d.ts +11 -0
  330. package/dist/packages/inspect.d.ts.map +1 -0
  331. package/dist/packages/inspect.js +98 -0
  332. package/dist/packages/inspect.js.map +1 -0
  333. package/dist/packages/materialize.d.ts +40 -0
  334. package/dist/packages/materialize.d.ts.map +1 -0
  335. package/dist/packages/materialize.js +297 -0
  336. package/dist/packages/materialize.js.map +1 -0
  337. package/dist/packages/resolve.d.ts +25 -0
  338. package/dist/packages/resolve.d.ts.map +1 -0
  339. package/dist/packages/resolve.js +208 -0
  340. package/dist/packages/resolve.js.map +1 -0
  341. package/dist/packages/source.d.ts +39 -0
  342. package/dist/packages/source.d.ts.map +1 -0
  343. package/dist/packages/source.js +189 -0
  344. package/dist/packages/source.js.map +1 -0
  345. package/dist/packages/types.d.ts +104 -0
  346. package/dist/packages/types.d.ts.map +1 -0
  347. package/dist/packages/types.js +2 -0
  348. package/dist/packages/types.js.map +1 -0
  349. package/dist/provisioner.d.ts +66 -0
  350. package/dist/provisioner.d.ts.map +1 -1
  351. package/dist/provisioner.js +335 -13
  352. package/dist/provisioner.js.map +1 -1
  353. package/dist/runtime/conversation-runtime.d.ts +1 -1
  354. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  355. package/dist/runtime/conversation-runtime.js +562 -118
  356. package/dist/runtime/conversation-runtime.js.map +1 -1
  357. package/dist/runtime/session-lifecycle.d.ts +38 -0
  358. package/dist/runtime/session-lifecycle.d.ts.map +1 -0
  359. package/dist/runtime/session-lifecycle.js +193 -0
  360. package/dist/runtime/session-lifecycle.js.map +1 -0
  361. package/dist/runtime/types.d.ts +66 -7
  362. package/dist/runtime/types.d.ts.map +1 -1
  363. package/dist/runtime/types.js.map +1 -1
  364. package/dist/sandbox/cloudflare.d.ts +3 -0
  365. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  366. package/dist/sandbox/cloudflare.js +13 -1
  367. package/dist/sandbox/cloudflare.js.map +1 -1
  368. package/dist/sandbox/container.d.ts +4 -0
  369. package/dist/sandbox/container.d.ts.map +1 -1
  370. package/dist/sandbox/container.js +13 -3
  371. package/dist/sandbox/container.js.map +1 -1
  372. package/dist/sandbox/firecracker.d.ts +3 -0
  373. package/dist/sandbox/firecracker.d.ts.map +1 -1
  374. package/dist/sandbox/firecracker.js +13 -2
  375. package/dist/sandbox/firecracker.js.map +1 -1
  376. package/dist/sandbox/gondolin.d.ts +57 -0
  377. package/dist/sandbox/gondolin.d.ts.map +1 -0
  378. package/dist/sandbox/gondolin.js +764 -0
  379. package/dist/sandbox/gondolin.js.map +1 -0
  380. package/dist/sandbox/host.d.ts +3 -0
  381. package/dist/sandbox/host.d.ts.map +1 -1
  382. package/dist/sandbox/host.js +18 -3
  383. package/dist/sandbox/host.js.map +1 -1
  384. package/dist/sandbox/identity.d.ts +44 -0
  385. package/dist/sandbox/identity.d.ts.map +1 -0
  386. package/dist/sandbox/identity.js +68 -0
  387. package/dist/sandbox/identity.js.map +1 -0
  388. package/dist/sandbox/image.d.ts.map +1 -1
  389. package/dist/sandbox/image.js +2 -0
  390. package/dist/sandbox/image.js.map +1 -1
  391. package/dist/sandbox/index.d.ts +17 -4
  392. package/dist/sandbox/index.d.ts.map +1 -1
  393. package/dist/sandbox/index.js +37 -3
  394. package/dist/sandbox/index.js.map +1 -1
  395. package/dist/sandbox/types.d.ts +65 -1
  396. package/dist/sandbox/types.d.ts.map +1 -1
  397. package/dist/sandbox/types.js.map +1 -1
  398. package/dist/sandbox/utils.d.ts +14 -0
  399. package/dist/sandbox/utils.d.ts.map +1 -1
  400. package/dist/sandbox/utils.js +68 -1
  401. package/dist/sandbox/utils.js.map +1 -1
  402. package/dist/sessions/chat-history-sync.d.ts +25 -0
  403. package/dist/sessions/chat-history-sync.d.ts.map +1 -0
  404. package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +135 -131
  405. package/dist/sessions/chat-history-sync.js.map +1 -0
  406. package/dist/sessions/conversation-log.d.ts +9 -0
  407. package/dist/sessions/conversation-log.d.ts.map +1 -0
  408. package/dist/sessions/conversation-log.js +50 -0
  409. package/dist/sessions/conversation-log.js.map +1 -0
  410. package/dist/sessions/history-line.d.ts +29 -0
  411. package/dist/sessions/history-line.d.ts.map +1 -0
  412. package/dist/sessions/history-line.js +45 -0
  413. package/dist/sessions/history-line.js.map +1 -0
  414. package/dist/sessions/rotation.d.ts +2 -0
  415. package/dist/sessions/rotation.d.ts.map +1 -0
  416. package/dist/sessions/rotation.js +39 -0
  417. package/dist/sessions/rotation.js.map +1 -0
  418. package/dist/sessions/session-key.d.ts +33 -0
  419. package/dist/sessions/session-key.d.ts.map +1 -0
  420. package/dist/sessions/session-key.js +115 -0
  421. package/dist/sessions/session-key.js.map +1 -0
  422. package/dist/sessions/store.d.ts +15 -7
  423. package/dist/sessions/store.d.ts.map +1 -1
  424. package/dist/sessions/store.js +127 -36
  425. package/dist/sessions/store.js.map +1 -1
  426. package/dist/sessions/types.d.ts +19 -5
  427. package/dist/sessions/types.d.ts.map +1 -1
  428. package/dist/sessions/types.js.map +1 -1
  429. package/dist/settings-mutation.d.ts +40 -0
  430. package/dist/settings-mutation.d.ts.map +1 -0
  431. package/dist/settings-mutation.js +61 -0
  432. package/dist/settings-mutation.js.map +1 -0
  433. package/dist/subagent-progress.d.ts +43 -0
  434. package/dist/subagent-progress.d.ts.map +1 -0
  435. package/dist/subagent-progress.js +220 -0
  436. package/dist/subagent-progress.js.map +1 -0
  437. package/dist/tools/bash.d.ts +3 -1
  438. package/dist/tools/bash.d.ts.map +1 -1
  439. package/dist/tools/bash.js +26 -18
  440. package/dist/tools/bash.js.map +1 -1
  441. package/dist/tools/edit.d.ts.map +1 -1
  442. package/dist/tools/edit.js +14 -13
  443. package/dist/tools/edit.js.map +1 -1
  444. package/dist/tools/event.d.ts +1 -1
  445. package/dist/tools/event.d.ts.map +1 -1
  446. package/dist/tools/event.js +58 -45
  447. package/dist/tools/event.js.map +1 -1
  448. package/dist/tools/generate-image.d.ts +23 -0
  449. package/dist/tools/generate-image.d.ts.map +1 -0
  450. package/dist/tools/generate-image.js +65 -0
  451. package/dist/tools/generate-image.js.map +1 -0
  452. package/dist/tools/host-fn-tool.d.ts +21 -0
  453. package/dist/tools/host-fn-tool.d.ts.map +1 -0
  454. package/dist/tools/host-fn-tool.js +32 -0
  455. package/dist/tools/host-fn-tool.js.map +1 -0
  456. package/dist/tools/index.d.ts +19 -2
  457. package/dist/tools/index.d.ts.map +1 -1
  458. package/dist/tools/index.js +25 -2
  459. package/dist/tools/index.js.map +1 -1
  460. package/dist/tools/react.d.ts +15 -0
  461. package/dist/tools/react.d.ts.map +1 -0
  462. package/dist/tools/react.js +29 -0
  463. package/dist/tools/react.js.map +1 -0
  464. package/dist/tools/read.d.ts +1 -0
  465. package/dist/tools/read.d.ts.map +1 -1
  466. package/dist/tools/read.js +39 -33
  467. package/dist/tools/read.js.map +1 -1
  468. package/dist/tools/sandbox.d.ts +2 -2
  469. package/dist/tools/sandbox.d.ts.map +1 -1
  470. package/dist/tools/sandbox.js +14 -9
  471. package/dist/tools/sandbox.js.map +1 -1
  472. package/dist/tools/subagent-slots.d.ts +28 -0
  473. package/dist/tools/subagent-slots.d.ts.map +1 -0
  474. package/dist/tools/subagent-slots.js +72 -0
  475. package/dist/tools/subagent-slots.js.map +1 -0
  476. package/dist/tools/subagent.d.ts +54 -0
  477. package/dist/tools/subagent.d.ts.map +1 -0
  478. package/dist/tools/subagent.js +411 -0
  479. package/dist/tools/subagent.js.map +1 -0
  480. package/dist/tools/types.d.ts +40 -32
  481. package/dist/tools/types.d.ts.map +1 -1
  482. package/dist/tools/types.js.map +1 -1
  483. package/dist/tools/write.d.ts.map +1 -1
  484. package/dist/tools/write.js +2 -8
  485. package/dist/tools/write.js.map +1 -1
  486. package/dist/trigger.d.ts +2 -1
  487. package/dist/trigger.d.ts.map +1 -1
  488. package/dist/trigger.js +6 -9
  489. package/dist/trigger.js.map +1 -1
  490. package/dist/types.d.ts +403 -59
  491. package/dist/types.d.ts.map +1 -1
  492. package/dist/types.js +2 -2
  493. package/dist/types.js.map +1 -1
  494. package/dist/utils/file-guards.d.ts +9 -0
  495. package/dist/utils/file-guards.d.ts.map +1 -1
  496. package/dist/utils/file-guards.js +44 -1
  497. package/dist/utils/file-guards.js.map +1 -1
  498. package/dist/vault/disabled.d.ts +9 -0
  499. package/dist/vault/disabled.d.ts.map +1 -0
  500. package/dist/vault/disabled.js +25 -0
  501. package/dist/vault/disabled.js.map +1 -0
  502. package/dist/vault/index.d.ts +45 -2
  503. package/dist/vault/index.d.ts.map +1 -1
  504. package/dist/vault/index.js +127 -36
  505. package/dist/vault/index.js.map +1 -1
  506. package/dist/vault/types.d.ts +6 -2
  507. package/dist/vault/types.d.ts.map +1 -1
  508. package/dist/vault/types.js.map +1 -1
  509. package/dist/web/admin/portal.d.ts +31 -3
  510. package/dist/web/admin/portal.d.ts.map +1 -1
  511. package/dist/web/admin/portal.js +846 -345
  512. package/dist/web/admin/portal.js.map +1 -1
  513. package/dist/web/admin/provider-models.js +1 -1
  514. package/dist/web/admin/provider-models.js.map +1 -1
  515. package/dist/web/admin/types.d.ts +23 -3
  516. package/dist/web/admin/types.d.ts.map +1 -1
  517. package/dist/web/admin/types.js.map +1 -1
  518. package/dist/web/login/oauth.d.ts +2 -3
  519. package/dist/web/login/oauth.d.ts.map +1 -1
  520. package/dist/web/login/oauth.js +1 -32
  521. package/dist/web/login/oauth.js.map +1 -1
  522. package/dist/web/login/portal.d.ts +1 -1
  523. package/dist/web/login/portal.d.ts.map +1 -1
  524. package/dist/web/login/portal.js +13 -36
  525. package/dist/web/login/portal.js.map +1 -1
  526. package/dist/web/login/types.d.ts +0 -11
  527. package/dist/web/login/types.d.ts.map +1 -1
  528. package/dist/web/login/types.js.map +1 -1
  529. package/dist/web/portal-shell.d.ts +21 -0
  530. package/dist/web/portal-shell.d.ts.map +1 -0
  531. package/dist/{portal-shell.js → web/portal-shell.js} +67 -2
  532. package/dist/web/portal-shell.js.map +1 -0
  533. package/dist/web/server.d.ts +3 -2
  534. package/dist/web/server.d.ts.map +1 -1
  535. package/dist/web/server.js +11 -4
  536. package/dist/web/server.js.map +1 -1
  537. package/dist/web/session-view/portal.d.ts +1 -1
  538. package/dist/web/session-view/portal.d.ts.map +1 -1
  539. package/dist/web/session-view/portal.js +37 -28
  540. package/dist/web/session-view/portal.js.map +1 -1
  541. package/dist/web/session-view/service.d.ts +1 -1
  542. package/dist/web/session-view/service.d.ts.map +1 -1
  543. package/dist/web/session-view/service.js +61 -18
  544. package/dist/web/session-view/service.js.map +1 -1
  545. package/dist/web/session-view/types.d.ts +0 -3
  546. package/dist/web/session-view/types.d.ts.map +1 -1
  547. package/dist/web/session-view/types.js.map +1 -1
  548. package/dist/web/token-store.js +1 -1
  549. package/dist/web/token-store.js.map +1 -1
  550. package/dist/workspace-projection/index.d.ts +10 -0
  551. package/dist/workspace-projection/index.d.ts.map +1 -0
  552. package/dist/workspace-projection/index.js +120 -0
  553. package/dist/workspace-projection/index.js.map +1 -0
  554. package/dist/workspace-projection/types.d.ts +16 -0
  555. package/dist/workspace-projection/types.d.ts.map +1 -0
  556. package/dist/workspace-projection/types.js +2 -0
  557. package/dist/workspace-projection/types.js.map +1 -0
  558. package/package.json +67 -37
  559. package/dist/adapters/streaming.d.ts +0 -18
  560. package/dist/adapters/streaming.d.ts.map +0 -1
  561. package/dist/adapters/streaming.js +0 -44
  562. package/dist/adapters/streaming.js.map +0 -1
  563. package/dist/commands/parse.d.ts +0 -7
  564. package/dist/commands/parse.d.ts.map +0 -1
  565. package/dist/commands/parse.js +0 -14
  566. package/dist/commands/parse.js.map +0 -1
  567. package/dist/download.d.ts.map +0 -1
  568. package/dist/download.js.map +0 -1
  569. package/dist/model-registry.d.ts +0 -4
  570. package/dist/model-registry.d.ts.map +0 -1
  571. package/dist/model-registry.js +0 -7
  572. package/dist/model-registry.js.map +0 -1
  573. package/dist/portal-shell.d.ts +0 -4
  574. package/dist/portal-shell.d.ts.map +0 -1
  575. package/dist/portal-shell.js.map +0 -1
  576. package/dist/runtime/agent-run-controller.d.ts +0 -31
  577. package/dist/runtime/agent-run-controller.d.ts.map +0 -1
  578. package/dist/runtime/agent-run-controller.js +0 -195
  579. package/dist/runtime/agent-run-controller.js.map +0 -1
  580. package/dist/sandbox/path-context.d.ts +0 -3
  581. package/dist/sandbox/path-context.d.ts.map +0 -1
  582. package/dist/sandbox/path-context.js +0 -20
  583. package/dist/sandbox/path-context.js.map +0 -1
  584. package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
  585. package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
  586. package/dist/sessions/agent-memory-file-manager.js.map +0 -1
  587. package/dist/sessions/metadata.d.ts +0 -3
  588. package/dist/sessions/metadata.d.ts.map +0 -1
  589. package/dist/sessions/metadata.js +0 -11
  590. package/dist/sessions/metadata.js.map +0 -1
  591. package/dist/sessions/policy.d.ts +0 -6
  592. package/dist/sessions/policy.d.ts.map +0 -1
  593. package/dist/sessions/policy.js +0 -23
  594. package/dist/sessions/policy.js.map +0 -1
  595. package/dist/store.d.ts +0 -46
  596. package/dist/store.d.ts.map +0 -1
  597. package/dist/store.js +0 -177
  598. package/dist/store.js.map +0 -1
  599. package/dist/tools/truncate.d.ts +0 -33
  600. package/dist/tools/truncate.d.ts.map +0 -1
  601. package/dist/tools/truncate.js +0 -184
  602. package/dist/tools/truncate.js.map +0 -1
  603. package/dist/utils/date.d.ts +0 -10
  604. package/dist/utils/date.d.ts.map +0 -1
  605. package/dist/utils/date.js +0 -23
  606. package/dist/utils/date.js.map +0 -1
  607. package/dist/utils/env.d.ts +0 -3
  608. package/dist/utils/env.d.ts.map +0 -1
  609. package/dist/utils/env.js +0 -12
  610. package/dist/utils/env.js.map +0 -1
  611. package/dist/utils/fs-atomic.d.ts +0 -10
  612. package/dist/utils/fs-atomic.d.ts.map +0 -1
  613. package/dist/utils/fs-atomic.js +0 -45
  614. package/dist/utils/fs-atomic.js.map +0 -1
  615. package/dist/utils/html.d.ts +0 -2
  616. package/dist/utils/html.d.ts.map +0 -1
  617. package/dist/utils/html.js +0 -4
  618. package/dist/utils/html.js.map +0 -1
  619. package/dist/utils/http-body.d.ts +0 -10
  620. package/dist/utils/http-body.d.ts.map +0 -1
  621. package/dist/utils/http-body.js +0 -34
  622. package/dist/utils/http-body.js.map +0 -1
  623. package/dist/vault/routing.d.ts +0 -3
  624. package/dist/vault/routing.d.ts.map +0 -1
  625. package/dist/vault/routing.js +0 -13
  626. package/dist/vault/routing.js.map +0 -1
  627. package/dist/web/agent-events/portal.d.ts +0 -3
  628. package/dist/web/agent-events/portal.d.ts.map +0 -1
  629. package/dist/web/agent-events/portal.js +0 -18
  630. package/dist/web/agent-events/portal.js.map +0 -1
  631. package/dist/web/request.d.ts +0 -3
  632. package/dist/web/request.d.ts.map +0 -1
  633. package/dist/web/request.js +0 -13
  634. package/dist/web/request.js.map +0 -1
  635. package/dist/web/session-view/command.d.ts +0 -4
  636. package/dist/web/session-view/command.d.ts.map +0 -1
  637. package/dist/web/session-view/command.js +0 -7
  638. package/dist/web/session-view/command.js.map +0 -1
  639. /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
@@ -1,48 +1,21 @@
1
- import * as log from "../../log.js";
2
- import { resolveChatSessionKey } from "../../sessions/policy.js";
3
- import { createChatResponseErrorReporter, formatToolArgs, splitText, } from "../shared.js";
4
- import { BufferedResponseStream } from "../streaming.js";
5
- const DISCORD_FORMATTING_GUIDE = `## Discord Formatting (Markdown)
6
- Bold: **text**, Italic: *text*, Code: \`code\`, Block: \`\`\`language\ncode\`\`\`
7
- Links: [text](url), Spoiler: ||text||
8
- Keep messages under 2000 characters. Use code blocks for code.`;
1
+ import { createConversationMessage, } from "../../adapter.js";
2
+ import { resolveChatSessionKey } from "../../sessions/session-key.js";
3
+ import { createProgressiveRenderer, formatMarkdownToolResult } from "../progressive-renderer.js";
9
4
  // Discord hard limit is 2000 chars; 1900 leaves headroom for working indicator.
10
5
  const MAX_LENGTH = 1900;
11
6
  const formatDiscordContinuation = (partNum) => `*(continued ${partNum})*`;
12
7
  function isDiscordMessageReference(id) {
13
8
  return typeof id === "string" && id !== "" && !id.startsWith("event:");
14
9
  }
15
- function formatToolResult(result) {
16
- const argsFormatted = formatToolArgs(result.args);
17
- const duration = (result.durationMs / 1000).toFixed(1);
18
- let text = `**${result.isError ? "Error" : "Done"} ${result.toolName}**`;
19
- if (result.label)
20
- text += `: ${result.label}`;
21
- text += ` (${duration}s)\n`;
22
- if (argsFormatted)
23
- text += `\`\`\`\n${argsFormatted}\n\`\`\`\n`;
24
- text += `**Result:**\n\`\`\`\n${result.result}\n\`\`\``;
25
- return text;
26
- }
27
10
  export function createDiscordAdapters(event, bot) {
28
- let messageId = null;
29
- let accumulatedText = "";
30
- let isWorking = true;
31
- const workingIndicator = " ...";
32
- let updatePromise = Promise.resolve();
33
- let typingInterval = null;
34
- let typingFailureWarned = false;
35
- function stopTyping() {
36
- if (typingInterval !== null) {
37
- clearInterval(typingInterval);
38
- typingInterval = null;
39
- }
40
- }
41
11
  const conversationId = event.conversationId;
42
12
  const channelId = conversationId;
43
13
  const threadTargetId = isDiscordMessageReference(event.thread_ts) ? event.thread_ts : undefined;
44
14
  const replyTargetId = isDiscordMessageReference(event.ts) ? event.ts : undefined;
45
- const message = {
15
+ const message = createConversationMessage({
16
+ platform: "discord",
17
+ conversationId,
18
+ address: event.address,
46
19
  id: event.ts,
47
20
  sessionKey: event.sessionKey ??
48
21
  resolveChatSessionKey({
@@ -58,194 +31,60 @@ export function createDiscordAdapters(event, bot) {
58
31
  text: event.text,
59
32
  attachments: event.attachments,
60
33
  threadTs: event.thread_ts,
61
- };
62
- const platform = {
63
- name: "discord",
64
- formattingGuide: DISCORD_FORMATTING_GUIDE,
65
- channels: bot.getAllChannels(),
66
- users: bot.getAllUsers(),
67
- diagnostics: {
68
- showUsageSummary: false,
69
- },
70
- };
71
- async function postDiagnosticMessage(text) {
72
- stopTyping();
73
- if (threadTargetId) {
34
+ });
35
+ // The bot's getMessagingInfo() is the single authority for platform info.
36
+ const platform = bot.getMessagingInfo();
37
+ function postFirst(text) {
38
+ if (threadTargetId)
74
39
  return bot.postInThread(channelId, threadTargetId, text);
75
- }
76
- if (replyTargetId) {
40
+ if (replyTargetId)
77
41
  return bot.postReply(channelId, replyTargetId, text);
78
- }
79
- if (messageId !== null) {
80
- return bot.postReply(channelId, messageId, text);
81
- }
82
42
  return bot.postMessage(channelId, text);
83
43
  }
84
- const reportResponseError = createChatResponseErrorReporter(() => ({
85
- platform: "discord",
86
- conversationId,
87
- channelId,
88
- messageId: message.id,
89
- sessionKey: message.sessionKey,
90
- responseMessageId: messageId,
91
- threadTs: threadTargetId,
92
- replyTargetId,
93
- conversationKind: message.conversationKind,
94
- }));
95
- async function postOrUpdateResponse(displayText) {
96
- if (messageId !== null) {
97
- await bot.updateMessageRaw(channelId, messageId, displayText);
98
- return;
99
- }
100
- stopTyping();
101
- if (threadTargetId) {
102
- messageId = await bot.postInThread(channelId, threadTargetId, displayText);
103
- }
104
- else if (replyTargetId) {
105
- messageId = await bot.postReply(channelId, replyTargetId, displayText);
106
- }
107
- else {
108
- messageId = await bot.postMessage(channelId, displayText);
109
- }
110
- }
111
- async function postSplitResponse(text) {
112
- const [displayText, ...extraParts] = splitText(text, MAX_LENGTH, formatDiscordContinuation);
113
- await postOrUpdateResponse(displayText);
114
- for (const part of extraParts) {
115
- await postDiagnosticMessage(part);
116
- }
117
- }
118
- const stream = new BufferedResponseStream({
119
- flush: async (text) => {
120
- await postSplitResponse(isWorking ? text + workingIndicator : text);
44
+ const { responder } = createProgressiveRenderer({
45
+ label: "Discord",
46
+ maxLength: MAX_LENGTH,
47
+ formatContinuation: formatDiscordContinuation,
48
+ errorPrefix: "*Error:* ",
49
+ workingIndicator: " ...",
50
+ supportsDeltas: true,
51
+ typing: {
52
+ // Send immediately and repeat every 8s (Discord clears indicator after ~10s)
53
+ send: () => bot.sendTyping(channelId),
54
+ intervalMs: 8000,
55
+ stopOnSend: true,
121
56
  },
122
- finish: async (text) => {
123
- isWorking = false;
124
- stopTyping();
125
- await postSplitResponse(text);
57
+ formatToolResult: formatMarkdownToolResult,
58
+ responseErrorContext: (responseId) => ({
59
+ platform: "discord",
60
+ conversationId,
61
+ channelId,
62
+ messageId: message.id,
63
+ sessionKey: message.sessionKey,
64
+ responseMessageId: responseId,
65
+ threadTs: threadTargetId,
66
+ replyTargetId,
67
+ conversationKind: message.conversationKind,
68
+ }),
69
+ post: async (text) => {
70
+ return postFirst(text);
126
71
  },
127
- });
128
- async function queueDiscordResponse(label, operation, work, report) {
129
- updatePromise = updatePromise.then(async () => {
130
- try {
131
- await work();
132
- }
133
- catch (err) {
134
- log.logWarning(`Discord ${label} error`, err instanceof Error ? err.message : String(err));
135
- reportResponseError(err, operation, report(err));
136
- }
137
- });
138
- await updatePromise;
139
- }
140
- const responder = {
141
- respond: async (text) => {
142
- await queueDiscordResponse("respond", "respond", async () => {
143
- accumulatedText = accumulatedText ? `${accumulatedText}\n${text}` : text;
144
- stream.setText(accumulatedText);
145
- await postSplitResponse(isWorking ? accumulatedText + workingIndicator : accumulatedText);
146
- if (messageId !== null) {
147
- bot.logBotResponse(channelId, text, messageId);
148
- }
149
- }, () => ({
150
- phase: messageId ? "update" : "initial_post",
151
- textLength: text.length,
152
- accumulatedLength: accumulatedText.length,
153
- }));
154
- },
155
- appendResponseDelta: async (delta) => {
156
- await queueDiscordResponse("appendResponseDelta", "respond", async () => {
157
- await stream.append(delta);
158
- accumulatedText = stream.getText();
159
- if (messageId !== null) {
160
- bot.logBotResponse(channelId, delta, messageId);
161
- }
162
- }, () => ({ textLength: delta.length, accumulatedLength: stream.getText().length }));
163
- },
164
- finishResponse: async (finalText) => {
165
- await queueDiscordResponse("finishResponse", "set_working", async () => {
166
- await stream.finish(finalText);
167
- accumulatedText = stream.getText();
168
- }, () => ({ finalTextLength: finalText?.length }));
169
- },
170
- replaceResponse: async (text) => {
171
- await queueDiscordResponse("replaceResponse", "replace_response", async () => {
172
- accumulatedText = text;
173
- stream.setText(accumulatedText);
174
- await postSplitResponse(accumulatedText);
175
- }, () => ({
176
- textLength: text.length,
177
- hadExistingResponse: Boolean(messageId),
178
- }));
179
- },
180
- respondDiagnostic: async (text, options) => {
181
- await queueDiscordResponse("respondDiagnostic", "respond_diagnostic", async () => {
182
- const prefix = options?.style === "error" ? "*Error:* " : "";
183
- for (const part of splitText(`${prefix}${text}`, MAX_LENGTH, formatDiscordContinuation)) {
184
- await postDiagnosticMessage(part);
185
- }
186
- }, () => ({
187
- textLength: text.length,
188
- style: options?.style,
189
- }));
72
+ update: (id, text) => bot.updateMessageRaw(channelId, id, text),
73
+ postExtra: async (text, responseId) => {
74
+ if (threadTargetId)
75
+ return void (await bot.postInThread(channelId, threadTargetId, text));
76
+ if (replyTargetId)
77
+ return void (await bot.postReply(channelId, replyTargetId, text));
78
+ if (responseId !== null)
79
+ return void (await bot.postReply(channelId, responseId, text));
80
+ return void (await bot.postMessage(channelId, text));
190
81
  },
191
- respondToolResult: async (result) => {
192
- await responder.respondDiagnostic(formatToolResult(result));
82
+ delete: async (id) => {
83
+ await bot.deleteMessageRaw(channelId, id);
193
84
  },
194
- setTyping: async (isTyping) => {
195
- const onTypingError = (err) => {
196
- if (typingFailureWarned)
197
- return;
198
- typingFailureWarned = true;
199
- log.logWarning("Discord sendTyping failed (further occurrences suppressed for this session)", err instanceof Error ? err.message : String(err));
200
- };
201
- if (isTyping && typingInterval === null) {
202
- // Send immediately and repeat every 8s (Discord clears indicator after ~10s)
203
- bot.sendTyping(channelId).catch(onTypingError);
204
- typingInterval = setInterval(() => {
205
- bot.sendTyping(channelId).catch(onTypingError);
206
- }, 8000);
207
- }
208
- else if (!isTyping) {
209
- stopTyping();
210
- }
211
- },
212
- setWorking: async (working) => {
213
- updatePromise = updatePromise.then(async () => {
214
- try {
215
- isWorking = working;
216
- if (!working)
217
- stopTyping();
218
- if (messageId !== null) {
219
- const [displayText] = splitText(isWorking ? accumulatedText + workingIndicator : accumulatedText, MAX_LENGTH, formatDiscordContinuation);
220
- await bot.updateMessageRaw(channelId, messageId, displayText);
221
- }
222
- }
223
- catch (err) {
224
- log.logWarning("Discord setWorking error", err instanceof Error ? err.message : String(err));
225
- reportResponseError(err, "set_working", { working });
226
- }
227
- });
228
- await updatePromise;
229
- },
230
- uploadFile: async (filePath, title) => {
231
- await bot.uploadFile(channelId, filePath, title);
232
- },
233
- deleteResponse: async () => {
234
- updatePromise = updatePromise.then(async () => {
235
- stopTyping();
236
- if (messageId !== null) {
237
- try {
238
- await bot.deleteMessageRaw(channelId, messageId);
239
- }
240
- catch {
241
- // Ignore errors
242
- }
243
- messageId = null;
244
- }
245
- });
246
- await updatePromise;
247
- },
248
- };
249
- return { message, responder, platform };
85
+ logBotResponse: (text, id) => bot.logBotResponse(channelId, text, id),
86
+ uploadFile: (filePath, title) => bot.uploadFile(channelId, filePath, title),
87
+ });
88
+ return { address: message.address, message, responder, platform };
250
89
  }
251
90
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/adapters/discord/context.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ConversationMessage,\n ConversationResponder,\n ChatToolResult,\n MessagingInfo,\n} from \"../../adapter.js\";\nimport * as log from \"../../log.js\";\nimport { resolveChatSessionKey } from \"../../sessions/policy.js\";\nimport {\n createChatResponseErrorReporter,\n formatToolArgs,\n splitText,\n type ChatResponseErrorOperation,\n} from \"../shared.js\";\nimport { BufferedResponseStream } from \"../streaming.js\";\nimport type { DiscordMessagingBot, DiscordEvent } from \"./bot.js\";\n\nconst DISCORD_FORMATTING_GUIDE = `## Discord Formatting (Markdown)\nBold: **text**, Italic: *text*, Code: \\`code\\`, Block: \\`\\`\\`language\\ncode\\`\\`\\`\nLinks: [text](url), Spoiler: ||text||\nKeep messages under 2000 characters. Use code blocks for code.`;\n\n// Discord hard limit is 2000 chars; 1900 leaves headroom for working indicator.\nconst MAX_LENGTH = 1900;\n\nconst formatDiscordContinuation = (partNum: number): string => `*(continued ${partNum})*`;\n\nfunction isDiscordMessageReference(id: string | undefined): id is string {\n return typeof id === \"string\" && id !== \"\" && !id.startsWith(\"event:\");\n}\n\nfunction formatToolResult(result: ChatToolResult): string {\n const argsFormatted = formatToolArgs(result.args);\n const duration = (result.durationMs / 1000).toFixed(1);\n let text = `**${result.isError ? \"Error\" : \"Done\"} ${result.toolName}**`;\n if (result.label) text += `: ${result.label}`;\n text += ` (${duration}s)\\n`;\n if (argsFormatted) text += `\\`\\`\\`\\n${argsFormatted}\\n\\`\\`\\`\\n`;\n text += `**Result:**\\n\\`\\`\\`\\n${result.result}\\n\\`\\`\\``;\n return text;\n}\n\nexport function createDiscordAdapters(\n event: DiscordEvent,\n bot: DiscordMessagingBot,\n): {\n message: ConversationMessage;\n responder: ConversationResponder;\n platform: MessagingInfo;\n} {\n let messageId: string | null = null;\n let accumulatedText = \"\";\n let isWorking = true;\n const workingIndicator = \" ...\";\n let updatePromise = Promise.resolve();\n let typingInterval: ReturnType<typeof setInterval> | null = null;\n let typingFailureWarned = false;\n\n function stopTyping(): void {\n if (typingInterval !== null) {\n clearInterval(typingInterval);\n typingInterval = null;\n }\n }\n\n const conversationId = event.conversationId;\n const channelId = conversationId;\n const threadTargetId = isDiscordMessageReference(event.thread_ts) ? event.thread_ts : undefined;\n const replyTargetId = isDiscordMessageReference(event.ts) ? event.ts : undefined;\n\n const message: ConversationMessage = {\n id: event.ts,\n sessionKey:\n event.sessionKey ??\n resolveChatSessionKey({\n conversationId,\n conversationKind: event.conversationKind,\n messageId: event.ts,\n persistentTopLevel: true,\n threadTs: event.thread_ts,\n }),\n conversationKind: event.conversationKind,\n userId: event.user,\n userName: event.userName,\n text: event.text,\n attachments: event.attachments,\n threadTs: event.thread_ts,\n };\n\n const platform: MessagingInfo = {\n name: \"discord\",\n formattingGuide: DISCORD_FORMATTING_GUIDE,\n channels: bot.getAllChannels(),\n users: bot.getAllUsers(),\n diagnostics: {\n showUsageSummary: false,\n },\n };\n\n async function postDiagnosticMessage(text: string): Promise<string> {\n stopTyping();\n if (threadTargetId) {\n return bot.postInThread(channelId, threadTargetId, text);\n }\n if (replyTargetId) {\n return bot.postReply(channelId, replyTargetId, text);\n }\n if (messageId !== null) {\n return bot.postReply(channelId, messageId, text);\n }\n return bot.postMessage(channelId, text);\n }\n\n const reportResponseError = createChatResponseErrorReporter(() => ({\n platform: \"discord\",\n conversationId,\n channelId,\n messageId: message.id,\n sessionKey: message.sessionKey,\n responseMessageId: messageId,\n threadTs: threadTargetId,\n replyTargetId,\n conversationKind: message.conversationKind,\n }));\n\n async function postOrUpdateResponse(displayText: string): Promise<void> {\n if (messageId !== null) {\n await bot.updateMessageRaw(channelId, messageId, displayText);\n return;\n }\n stopTyping();\n if (threadTargetId) {\n messageId = await bot.postInThread(channelId, threadTargetId, displayText);\n } else if (replyTargetId) {\n messageId = await bot.postReply(channelId, replyTargetId, displayText);\n } else {\n messageId = await bot.postMessage(channelId, displayText);\n }\n }\n\n async function postSplitResponse(text: string): Promise<void> {\n const [displayText, ...extraParts] = splitText(text, MAX_LENGTH, formatDiscordContinuation);\n await postOrUpdateResponse(displayText);\n for (const part of extraParts) {\n await postDiagnosticMessage(part);\n }\n }\n\n const stream = new BufferedResponseStream({\n flush: async (text) => {\n await postSplitResponse(isWorking ? text + workingIndicator : text);\n },\n finish: async (text) => {\n isWorking = false;\n stopTyping();\n await postSplitResponse(text);\n },\n });\n\n async function queueDiscordResponse(\n label: string,\n operation: ChatResponseErrorOperation,\n work: () => Promise<void>,\n report: (err: unknown) => Record<string, unknown>,\n ): Promise<void> {\n updatePromise = updatePromise.then(async () => {\n try {\n await work();\n } catch (err) {\n log.logWarning(`Discord ${label} error`, err instanceof Error ? err.message : String(err));\n reportResponseError(err, operation, report(err));\n }\n });\n await updatePromise;\n }\n\n const responder: ConversationResponder = {\n respond: async (text: string) => {\n await queueDiscordResponse(\n \"respond\",\n \"respond\",\n async () => {\n accumulatedText = accumulatedText ? `${accumulatedText}\\n${text}` : text;\n stream.setText(accumulatedText);\n await postSplitResponse(isWorking ? accumulatedText + workingIndicator : accumulatedText);\n if (messageId !== null) {\n bot.logBotResponse(channelId, text, messageId);\n }\n },\n () => ({\n phase: messageId ? \"update\" : \"initial_post\",\n textLength: text.length,\n accumulatedLength: accumulatedText.length,\n }),\n );\n },\n\n appendResponseDelta: async (delta: string) => {\n await queueDiscordResponse(\n \"appendResponseDelta\",\n \"respond\",\n async () => {\n await stream.append(delta);\n accumulatedText = stream.getText();\n if (messageId !== null) {\n bot.logBotResponse(channelId, delta, messageId);\n }\n },\n () => ({ textLength: delta.length, accumulatedLength: stream.getText().length }),\n );\n },\n\n finishResponse: async (finalText?: string) => {\n await queueDiscordResponse(\n \"finishResponse\",\n \"set_working\",\n async () => {\n await stream.finish(finalText);\n accumulatedText = stream.getText();\n },\n () => ({ finalTextLength: finalText?.length }),\n );\n },\n\n replaceResponse: async (text: string) => {\n await queueDiscordResponse(\n \"replaceResponse\",\n \"replace_response\",\n async () => {\n accumulatedText = text;\n stream.setText(accumulatedText);\n await postSplitResponse(accumulatedText);\n },\n () => ({\n textLength: text.length,\n hadExistingResponse: Boolean(messageId),\n }),\n );\n },\n\n respondDiagnostic: async (text: string, options?: { style?: \"muted\" | \"error\" }) => {\n await queueDiscordResponse(\n \"respondDiagnostic\",\n \"respond_diagnostic\",\n async () => {\n const prefix = options?.style === \"error\" ? \"*Error:* \" : \"\";\n for (const part of splitText(`${prefix}${text}`, MAX_LENGTH, formatDiscordContinuation)) {\n await postDiagnosticMessage(part);\n }\n },\n () => ({\n textLength: text.length,\n style: options?.style,\n }),\n );\n },\n\n respondToolResult: async (result: ChatToolResult) => {\n await responder.respondDiagnostic(formatToolResult(result));\n },\n\n setTyping: async (isTyping: boolean) => {\n const onTypingError = (err: unknown): void => {\n if (typingFailureWarned) return;\n typingFailureWarned = true;\n log.logWarning(\n \"Discord sendTyping failed (further occurrences suppressed for this session)\",\n err instanceof Error ? err.message : String(err),\n );\n };\n if (isTyping && typingInterval === null) {\n // Send immediately and repeat every 8s (Discord clears indicator after ~10s)\n bot.sendTyping(channelId).catch(onTypingError);\n typingInterval = setInterval(() => {\n bot.sendTyping(channelId).catch(onTypingError);\n }, 8000);\n } else if (!isTyping) {\n stopTyping();\n }\n },\n\n setWorking: async (working: boolean) => {\n updatePromise = updatePromise.then(async () => {\n try {\n isWorking = working;\n if (!working) stopTyping();\n if (messageId !== null) {\n const [displayText] = splitText(\n isWorking ? accumulatedText + workingIndicator : accumulatedText,\n MAX_LENGTH,\n formatDiscordContinuation,\n );\n await bot.updateMessageRaw(channelId, messageId, displayText);\n }\n } catch (err) {\n log.logWarning(\n \"Discord setWorking error\",\n err instanceof Error ? err.message : String(err),\n );\n reportResponseError(err, \"set_working\", { working });\n }\n });\n await updatePromise;\n },\n\n uploadFile: async (filePath: string, title?: string) => {\n await bot.uploadFile(channelId, filePath, title);\n },\n\n deleteResponse: async () => {\n updatePromise = updatePromise.then(async () => {\n stopTyping();\n if (messageId !== null) {\n try {\n await bot.deleteMessageRaw(channelId, messageId);\n } catch {\n // Ignore errors\n }\n messageId = null;\n }\n });\n await updatePromise;\n },\n };\n\n return { message, responder, platform };\n}\n"]}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/adapters/discord/context.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createConversationMessage,\n type ConversationMessage,\n type ConversationResponder,\n type MessagingInfo,\n} from \"../../adapter.js\";\nimport { resolveChatSessionKey } from \"../../sessions/session-key.js\";\nimport { createProgressiveRenderer, formatMarkdownToolResult } from \"../progressive-renderer.js\";\nimport type { DiscordMessagingBot, DiscordEvent } from \"./bot.js\";\nimport type { OfficeAddress } from \"../../adapter.js\";\n\n// Discord hard limit is 2000 chars; 1900 leaves headroom for working indicator.\nconst MAX_LENGTH = 1900;\n\nconst formatDiscordContinuation = (partNum: number): string => `*(continued ${partNum})*`;\n\nfunction isDiscordMessageReference(id: string | undefined): id is string {\n return typeof id === \"string\" && id !== \"\" && !id.startsWith(\"event:\");\n}\n\nexport function createDiscordAdapters(\n event: DiscordEvent,\n bot: DiscordMessagingBot,\n): {\n address: OfficeAddress;\n message: ConversationMessage;\n responder: ConversationResponder;\n platform: MessagingInfo;\n} {\n const conversationId = event.conversationId;\n const channelId = conversationId;\n const threadTargetId = isDiscordMessageReference(event.thread_ts) ? event.thread_ts : undefined;\n const replyTargetId = isDiscordMessageReference(event.ts) ? event.ts : undefined;\n\n const message = createConversationMessage({\n platform: \"discord\",\n conversationId,\n address: event.address,\n id: event.ts,\n sessionKey:\n event.sessionKey ??\n resolveChatSessionKey({\n conversationId,\n conversationKind: event.conversationKind,\n messageId: event.ts,\n persistentTopLevel: true,\n threadTs: event.thread_ts,\n }),\n conversationKind: event.conversationKind,\n userId: event.user,\n userName: event.userName,\n text: event.text,\n attachments: event.attachments,\n threadTs: event.thread_ts,\n });\n\n // The bot's getMessagingInfo() is the single authority for platform info.\n const platform: MessagingInfo = bot.getMessagingInfo();\n\n function postFirst(text: string): Promise<string> {\n if (threadTargetId) return bot.postInThread(channelId, threadTargetId, text);\n if (replyTargetId) return bot.postReply(channelId, replyTargetId, text);\n return bot.postMessage(channelId, text);\n }\n\n const { responder } = createProgressiveRenderer({\n label: \"Discord\",\n maxLength: MAX_LENGTH,\n formatContinuation: formatDiscordContinuation,\n errorPrefix: \"*Error:* \",\n workingIndicator: \" ...\",\n supportsDeltas: true,\n typing: {\n // Send immediately and repeat every 8s (Discord clears indicator after ~10s)\n send: () => bot.sendTyping(channelId),\n intervalMs: 8000,\n stopOnSend: true,\n },\n formatToolResult: formatMarkdownToolResult,\n responseErrorContext: (responseId) => ({\n platform: \"discord\",\n conversationId,\n channelId,\n messageId: message.id,\n sessionKey: message.sessionKey,\n responseMessageId: responseId,\n threadTs: threadTargetId,\n replyTargetId,\n conversationKind: message.conversationKind,\n }),\n post: async (text) => {\n return postFirst(text);\n },\n update: (id, text) => bot.updateMessageRaw(channelId, id, text),\n postExtra: async (text, responseId) => {\n if (threadTargetId) return void (await bot.postInThread(channelId, threadTargetId, text));\n if (replyTargetId) return void (await bot.postReply(channelId, replyTargetId, text));\n if (responseId !== null) return void (await bot.postReply(channelId, responseId, text));\n return void (await bot.postMessage(channelId, text));\n },\n delete: async (id) => {\n await bot.deleteMessageRaw(channelId, id);\n },\n logBotResponse: (text, id) => bot.logBotResponse(channelId, text, id),\n uploadFile: (filePath, title) => bot.uploadFile(channelId, filePath, title),\n });\n\n return { address: message.address, message, responder, platform };\n}\n"]}
@@ -0,0 +1,89 @@
1
+ import type { MessagingBot, MessagingEventHandler, MessagingInfo } from "../../adapter.js";
2
+ import { type ConversationEvent } from "../../adapter.js";
3
+ import { GithubClient } from "./client.js";
4
+ import { GithubOps } from "./github-ops.js";
5
+ import type { GithubBotConfig, GithubConversationRef, GithubSyncState } from "./types.js";
6
+ export declare const formatGithubContinuation: (partNum: number) => string;
7
+ export declare class GithubMessagingBot implements MessagingBot {
8
+ private readonly client;
9
+ private readonly handler;
10
+ private readonly config;
11
+ /** Host-side backend for the github_* tool pack; standalone from polling. */
12
+ readonly ops: GithubOps;
13
+ private appSlug;
14
+ private botEmail;
15
+ private watchedRepos;
16
+ private queues;
17
+ private repoState;
18
+ private permissionCache;
19
+ private pollInFlight;
20
+ constructor(handler: MessagingEventHandler, config: GithubBotConfig, client?: GithubClient);
21
+ start(): Promise<void>;
22
+ postMessage(channel: string, text: string): Promise<string>;
23
+ updateMessage(channel: string, ts: string, text: string): Promise<void>;
24
+ addReaction(channel: string, messageTs: string, emoji: string): Promise<void>;
25
+ enqueueEvent(event: ConversationEvent): boolean;
26
+ getMessagingInfo(): MessagingInfo;
27
+ postComment(ref: GithubConversationRef, text: string): Promise<number>;
28
+ deleteComment(ref: GithubConversationRef, commentId: number): Promise<void>;
29
+ logToFile(conversationId: string, entry: object): void;
30
+ logBotResponse(conversationId: string, text: string, ts: string): void;
31
+ private getQueue;
32
+ /** One poll tick over every watched repo. Public for tests. */
33
+ poll(): Promise<void>;
34
+ private pollRepo;
35
+ /**
36
+ * One feed's watermark advance — the same discipline for all three feeds:
37
+ * bump the cursor on any fresher updated_at, then let the id watermark plus
38
+ * the creation baseline decide what actually triggers (edits re-surface old
39
+ * items with a fresh updated_at). Bot-authored items advance the watermark
40
+ * without triggering.
41
+ */
42
+ private advanceFeed;
43
+ private loadSyncState;
44
+ /** The persisted form of the current watermarks; the test/inspection surface. */
45
+ syncStateSnapshot(): GithubSyncState;
46
+ private persistSyncState;
47
+ /** Fresh regex per call: the `g` flag makes `test`/`replace` stateful. */
48
+ private mentionPattern;
49
+ private isMentioned;
50
+ private stripMention;
51
+ /** The Conversation office for a GitHub conversation id (one PR/issue). */
52
+ private office;
53
+ private isParticipating;
54
+ /**
55
+ * True when `user` holds at least write permission on the repo. Fails
56
+ * closed: a failed lookup denies the trigger (and logs) rather than
57
+ * letting an unverified commenter drive the agent.
58
+ */
59
+ private hasTriggerPermission;
60
+ private handleIncoming;
61
+ /**
62
+ * First contact: log the issue title/body ahead of the comment so the
63
+ * session history starts with what the thread is about. The clone is
64
+ * (re)attempted on every trigger while ./repo is missing — a no-op once
65
+ * it exists — so a failed first clone (e.g. App permissions granted
66
+ * later) heals on the next mention instead of wedging the conversation.
67
+ */
68
+ private prepareConversation;
69
+ /**
70
+ * Decorates an inline review comment with its diff anchor and (for replies)
71
+ * the thread's earlier turns, so the agent knows which code the feedback is
72
+ * about without hunting through the PR. The rc-<id> in the header is what
73
+ * github_review_reply takes to answer in-thread.
74
+ */
75
+ private formatReviewMessage;
76
+ /**
77
+ * Earlier turns of one review thread (root + replies before the trigger),
78
+ * newest-truncated. Fail-soft: context is a nicety, the trigger is not.
79
+ */
80
+ private reviewThreadContext;
81
+ private logIssueContext;
82
+ /**
83
+ * Clone the conversation's repo into its dir (bind-mounted into the
84
+ * sandbox) using an ephemeral contents:read token that never leaves the
85
+ * host. Non-fatal: a failed clone degrades to the pre-clone experience.
86
+ */
87
+ private ensureRepoClone;
88
+ }
89
+ //# sourceMappingURL=bot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../../src/adapters/github/bot.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAYnF,OAAO,EAAE,YAAY,EAA0C,MAAM,aAAa,CAAC;AAEnF,OAAO,EAAgC,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAU1E,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EAKrB,eAAe,EAChB,MAAM,YAAY,CAAC;AA4DpB,eAAO,MAAM,wBAAwB,YAAa,MAAM,KAAG,MAAoC,CAAC;AAmFhG,qBAAa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,6EAA6E;IAC7E,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,eAAe,CAA0D;IACjF,OAAO,CAAC,YAAY,CAAS;IAE7B,YAAY,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,YAAY,EAczF;IAMK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA0D3B;IAEK,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhE;IAEK,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5E;IAEK,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBlF;IAED,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAe9C;IAED,gBAAgB,IAAI,aAAa,CAWhC;IAMK,WAAW,CAAC,GAAG,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAK3E;IAEK,aAAa,CAAC,GAAG,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhF;IAED,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAErD;IAED,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAErE;IAMD,OAAO,CAAC,QAAQ;IAShB,+DAA+D;IACzD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAqB1B;YAEa,QAAQ;IA2DtB;;;;;;OAMG;YACW,WAAW;IAgCzB,OAAO,CAAC,aAAa;IAkBrB,iFAAiF;IACjF,iBAAiB,IAAI,eAAe,CAYnC;IAED,OAAO,CAAC,gBAAgB;IASxB,0EAA0E;IAC1E,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,YAAY;IAKpB,2EAA2E;IAC3E,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,eAAe;IAIvB;;;;OAIG;YACW,oBAAoB;YA4BpB,cAAc;IAyE5B;;;;;;OAMG;YACW,mBAAmB;IAkBjC;;;;;OAKG;YACW,mBAAmB;IAqBjC;;;OAGG;YACW,mBAAmB;YA+BnB,eAAe;IAqC7B;;;;OAIG;YACW,eAAe;CAiC9B"}