@geminixiang/mikan 1.0.0-beta.39 → 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 (397) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +50 -23
  3. package/dist/adapter.d.ts +1 -1
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/adapter.js.map +1 -1
  6. package/dist/adapters/discord/bot.d.ts +2 -1
  7. package/dist/adapters/discord/bot.d.ts.map +1 -1
  8. package/dist/adapters/discord/bot.js +3 -3
  9. package/dist/adapters/discord/bot.js.map +1 -1
  10. package/dist/adapters/discord/context.d.ts +2 -1
  11. package/dist/adapters/discord/context.d.ts.map +1 -1
  12. package/dist/adapters/discord/context.js +1 -1
  13. package/dist/adapters/discord/context.js.map +1 -1
  14. package/dist/adapters/github/bot.d.ts +2 -1
  15. package/dist/adapters/github/bot.d.ts.map +1 -1
  16. package/dist/adapters/github/bot.js +11 -7
  17. package/dist/adapters/github/bot.js.map +1 -1
  18. package/dist/adapters/github/client.js +2 -2
  19. package/dist/adapters/github/client.js.map +1 -1
  20. package/dist/adapters/github/context.d.ts +4 -2
  21. package/dist/adapters/github/context.d.ts.map +1 -1
  22. package/dist/adapters/github/context.js +2 -2
  23. package/dist/adapters/github/context.js.map +1 -1
  24. package/dist/adapters/github/gcp-auth.js +2 -2
  25. package/dist/adapters/github/gcp-auth.js.map +1 -1
  26. package/dist/adapters/github/github-ops.d.ts +3 -2
  27. package/dist/adapters/github/github-ops.d.ts.map +1 -1
  28. package/dist/adapters/github/github-ops.js +1 -1
  29. package/dist/adapters/github/github-ops.js.map +1 -1
  30. package/dist/adapters/github/ids.d.ts.map +1 -1
  31. package/dist/adapters/github/ids.js +7 -3
  32. package/dist/adapters/github/ids.js.map +1 -1
  33. package/dist/adapters/github/repo.js +3 -3
  34. package/dist/adapters/github/repo.js.map +1 -1
  35. package/dist/adapters/github/types.d.ts +2 -1
  36. package/dist/adapters/github/types.d.ts.map +1 -1
  37. package/dist/adapters/github/types.js.map +1 -1
  38. package/dist/adapters/progressive-renderer.js +1 -1
  39. package/dist/adapters/progressive-renderer.js.map +1 -1
  40. package/dist/adapters/shared.js +4 -4
  41. package/dist/adapters/shared.js.map +1 -1
  42. package/dist/adapters/slack/blocks.d.ts.map +1 -1
  43. package/dist/adapters/slack/blocks.js +3 -1
  44. package/dist/adapters/slack/blocks.js.map +1 -1
  45. package/dist/adapters/slack/bot.d.ts +12 -2
  46. package/dist/adapters/slack/bot.d.ts.map +1 -1
  47. package/dist/adapters/slack/bot.js +70 -9
  48. package/dist/adapters/slack/bot.js.map +1 -1
  49. package/dist/adapters/slack/context.d.ts +2 -1
  50. package/dist/adapters/slack/context.d.ts.map +1 -1
  51. package/dist/adapters/slack/context.js +1 -0
  52. package/dist/adapters/slack/context.js.map +1 -1
  53. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  54. package/dist/adapters/slack/response-lifecycle.js +4 -4
  55. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  56. package/dist/adapters/slack/session.d.ts.map +1 -1
  57. package/dist/adapters/slack/session.js +2 -3
  58. package/dist/adapters/slack/session.js.map +1 -1
  59. package/dist/adapters/slack/tools/attach.js +1 -1
  60. package/dist/adapters/slack/tools/attach.js.map +1 -1
  61. package/dist/adapters/telegram/bot.d.ts +2 -1
  62. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  63. package/dist/adapters/telegram/bot.js +6 -6
  64. package/dist/adapters/telegram/bot.js.map +1 -1
  65. package/dist/adapters/telegram/context.d.ts +2 -1
  66. package/dist/adapters/telegram/context.d.ts.map +1 -1
  67. package/dist/adapters/telegram/context.js.map +1 -1
  68. package/dist/adapters/telegram/html.d.ts.map +1 -1
  69. package/dist/adapters/telegram/html.js +10 -7
  70. package/dist/adapters/telegram/html.js.map +1 -1
  71. package/dist/adapters/types.d.ts +4 -2
  72. package/dist/adapters/types.d.ts.map +1 -1
  73. package/dist/adapters/types.js.map +1 -1
  74. package/dist/agent-events.d.ts +3 -2
  75. package/dist/agent-events.d.ts.map +1 -1
  76. package/dist/agent-events.js +19 -1
  77. package/dist/agent-events.js.map +1 -1
  78. package/dist/agent.d.ts.map +1 -1
  79. package/dist/agent.js +34 -9
  80. package/dist/agent.js.map +1 -1
  81. package/dist/cli/arg-grammar.d.ts.map +1 -1
  82. package/dist/cli/arg-grammar.js +5 -3
  83. package/dist/cli/arg-grammar.js.map +1 -1
  84. package/dist/cli/boot.d.ts.map +1 -1
  85. package/dist/cli/boot.js +5 -3
  86. package/dist/cli/boot.js.map +1 -1
  87. package/dist/cli/download.d.ts.map +1 -1
  88. package/dist/cli/download.js +2 -0
  89. package/dist/cli/download.js.map +1 -1
  90. package/dist/cli/ext-dev.d.ts.map +1 -1
  91. package/dist/cli/ext-dev.js +4 -1
  92. package/dist/cli/ext-dev.js.map +1 -1
  93. package/dist/cli/ext.d.ts.map +1 -1
  94. package/dist/cli/ext.js +123 -23
  95. package/dist/cli/ext.js.map +1 -1
  96. package/dist/cli/office.d.ts.map +1 -1
  97. package/dist/cli/office.js +2 -0
  98. package/dist/cli/office.js.map +1 -1
  99. package/dist/cli/types.d.ts +0 -6
  100. package/dist/cli/types.d.ts.map +1 -1
  101. package/dist/cli/types.js.map +1 -1
  102. package/dist/commands/admin.js +1 -1
  103. package/dist/commands/admin.js.map +1 -1
  104. package/dist/commands/auto-reply.js +2 -2
  105. package/dist/commands/auto-reply.js.map +1 -1
  106. package/dist/commands/extensions.js +1 -1
  107. package/dist/commands/extensions.js.map +1 -1
  108. package/dist/commands/login.js +1 -1
  109. package/dist/commands/login.js.map +1 -1
  110. package/dist/commands/manifest.d.ts +7 -0
  111. package/dist/commands/manifest.d.ts.map +1 -1
  112. package/dist/commands/manifest.js +28 -0
  113. package/dist/commands/manifest.js.map +1 -1
  114. package/dist/commands/model.d.ts.map +1 -1
  115. package/dist/commands/model.js +4 -1
  116. package/dist/commands/model.js.map +1 -1
  117. package/dist/commands/new.js +1 -1
  118. package/dist/commands/new.js.map +1 -1
  119. package/dist/commands/sandbox.js +3 -3
  120. package/dist/commands/sandbox.js.map +1 -1
  121. package/dist/commands/session-view.d.ts.map +1 -1
  122. package/dist/commands/session-view.js +5 -2
  123. package/dist/commands/session-view.js.map +1 -1
  124. package/dist/commands/types.d.ts +1 -1
  125. package/dist/commands/types.d.ts.map +1 -1
  126. package/dist/commands/types.js.map +1 -1
  127. package/dist/config.js +4 -4
  128. package/dist/config.js.map +1 -1
  129. package/dist/env-manifest.d.ts +2 -0
  130. package/dist/env-manifest.d.ts.map +1 -1
  131. package/dist/env-manifest.js +11 -1
  132. package/dist/env-manifest.js.map +1 -1
  133. package/dist/events.d.ts.map +1 -1
  134. package/dist/events.js +7 -6
  135. package/dist/events.js.map +1 -1
  136. package/dist/execution-resolver.d.ts.map +1 -1
  137. package/dist/execution-resolver.js +3 -2
  138. package/dist/execution-resolver.js.map +1 -1
  139. package/dist/extension-schedules.d.ts +31 -0
  140. package/dist/extension-schedules.d.ts.map +1 -0
  141. package/dist/extension-schedules.js +229 -0
  142. package/dist/extension-schedules.js.map +1 -0
  143. package/dist/harness/auth.js +5 -5
  144. package/dist/harness/auth.js.map +1 -1
  145. package/dist/harness/event-format.d.ts +2 -0
  146. package/dist/harness/event-format.d.ts.map +1 -1
  147. package/dist/harness/event-format.js +2 -1
  148. package/dist/harness/event-format.js.map +1 -1
  149. package/dist/harness/extensions/loader.d.ts +2 -2
  150. package/dist/harness/extensions/loader.d.ts.map +1 -1
  151. package/dist/harness/extensions/loader.js +135 -33
  152. package/dist/harness/extensions/loader.js.map +1 -1
  153. package/dist/harness/extensions/registry.d.ts +33 -1
  154. package/dist/harness/extensions/registry.d.ts.map +1 -1
  155. package/dist/harness/extensions/registry.js +79 -2
  156. package/dist/harness/extensions/registry.js.map +1 -1
  157. package/dist/harness/extensions/types.d.ts +165 -21
  158. package/dist/harness/extensions/types.d.ts.map +1 -1
  159. package/dist/harness/extensions/types.js.map +1 -1
  160. package/dist/harness/index.d.ts +2 -2
  161. package/dist/harness/index.d.ts.map +1 -1
  162. package/dist/harness/index.js +1 -1
  163. package/dist/harness/index.js.map +1 -1
  164. package/dist/harness/models.d.ts.map +1 -1
  165. package/dist/harness/models.js +36 -24
  166. package/dist/harness/models.js.map +1 -1
  167. package/dist/harness/runner.js +2 -2
  168. package/dist/harness/runner.js.map +1 -1
  169. package/dist/harness/session-store.d.ts.map +1 -1
  170. package/dist/harness/session-store.js +9 -7
  171. package/dist/harness/session-store.js.map +1 -1
  172. package/dist/harness/skills.js +3 -3
  173. package/dist/harness/skills.js.map +1 -1
  174. package/dist/harness/subagent-profiles.js +2 -2
  175. package/dist/harness/subagent-profiles.js.map +1 -1
  176. package/dist/harness/subagent-runner.js +3 -3
  177. package/dist/harness/subagent-runner.js.map +1 -1
  178. package/dist/index.d.ts +8 -8
  179. package/dist/index.d.ts.map +1 -1
  180. package/dist/index.js +5 -5
  181. package/dist/index.js.map +1 -1
  182. package/dist/main.js +58 -9
  183. package/dist/main.js.map +1 -1
  184. package/dist/observability/instrument.js +1 -1
  185. package/dist/observability/instrument.js.map +1 -1
  186. package/dist/observability/sentry.js +1 -1
  187. package/dist/observability/sentry.js.map +1 -1
  188. package/dist/office/index.d.ts +1 -1
  189. package/dist/office/index.d.ts.map +1 -1
  190. package/dist/office/index.js +1 -1
  191. package/dist/office/index.js.map +1 -1
  192. package/dist/office/layout.d.ts +7 -0
  193. package/dist/office/layout.d.ts.map +1 -1
  194. package/dist/office/layout.js +10 -1
  195. package/dist/office/layout.js.map +1 -1
  196. package/dist/office/registry.d.ts.map +1 -1
  197. package/dist/office/registry.js +7 -5
  198. package/dist/office/registry.js.map +1 -1
  199. package/dist/packages/materialize.js +10 -3
  200. package/dist/packages/materialize.js.map +1 -1
  201. package/dist/packages/source.d.ts +6 -0
  202. package/dist/packages/source.d.ts.map +1 -1
  203. package/dist/packages/source.js +14 -2
  204. package/dist/packages/source.js.map +1 -1
  205. package/dist/packages/types.d.ts +5 -3
  206. package/dist/packages/types.d.ts.map +1 -1
  207. package/dist/packages/types.js.map +1 -1
  208. package/dist/provisioner.js +5 -5
  209. package/dist/provisioner.js.map +1 -1
  210. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  211. package/dist/runtime/conversation-runtime.js +44 -2
  212. package/dist/runtime/conversation-runtime.js.map +1 -1
  213. package/dist/runtime/types.d.ts +10 -2
  214. package/dist/runtime/types.d.ts.map +1 -1
  215. package/dist/runtime/types.js.map +1 -1
  216. package/dist/sandbox/cloudflare.js +1 -1
  217. package/dist/sandbox/cloudflare.js.map +1 -1
  218. package/dist/sandbox/container.js +1 -2
  219. package/dist/sandbox/container.js.map +1 -1
  220. package/dist/sandbox/firecracker.js +1 -1
  221. package/dist/sandbox/firecracker.js.map +1 -1
  222. package/dist/sandbox/gondolin.d.ts.map +1 -1
  223. package/dist/sandbox/gondolin.js +1 -2
  224. package/dist/sandbox/gondolin.js.map +1 -1
  225. package/dist/sandbox/host.d.ts.map +1 -1
  226. package/dist/sandbox/host.js +4 -5
  227. package/dist/sandbox/host.js.map +1 -1
  228. package/dist/sandbox/index.js +1 -1
  229. package/dist/sandbox/index.js.map +1 -1
  230. package/dist/sandbox/utils.d.ts +2 -0
  231. package/dist/sandbox/utils.d.ts.map +1 -1
  232. package/dist/sandbox/utils.js +30 -1
  233. package/dist/sandbox/utils.js.map +1 -1
  234. package/dist/sessions/chat-history-sync.d.ts.map +1 -1
  235. package/dist/sessions/chat-history-sync.js +9 -8
  236. package/dist/sessions/chat-history-sync.js.map +1 -1
  237. package/dist/sessions/conversation-log.d.ts.map +1 -1
  238. package/dist/sessions/conversation-log.js +5 -2
  239. package/dist/sessions/conversation-log.js.map +1 -1
  240. package/dist/sessions/history-line.d.ts +9 -0
  241. package/dist/sessions/history-line.d.ts.map +1 -1
  242. package/dist/sessions/history-line.js +22 -1
  243. package/dist/sessions/history-line.js.map +1 -1
  244. package/dist/sessions/session-key.d.ts +5 -12
  245. package/dist/sessions/session-key.d.ts.map +1 -1
  246. package/dist/sessions/session-key.js +23 -0
  247. package/dist/sessions/session-key.js.map +1 -1
  248. package/dist/sessions/store.d.ts +2 -6
  249. package/dist/sessions/store.d.ts.map +1 -1
  250. package/dist/sessions/store.js +16 -16
  251. package/dist/sessions/store.js.map +1 -1
  252. package/dist/sessions/types.d.ts +2 -1
  253. package/dist/sessions/types.d.ts.map +1 -1
  254. package/dist/sessions/types.js.map +1 -1
  255. package/dist/tools/bash.js +1 -1
  256. package/dist/tools/bash.js.map +1 -1
  257. package/dist/tools/edit.d.ts.map +1 -1
  258. package/dist/tools/edit.js +4 -1
  259. package/dist/tools/edit.js.map +1 -1
  260. package/dist/tools/event.js +1 -1
  261. package/dist/tools/event.js.map +1 -1
  262. package/dist/tools/generate-image.js +3 -3
  263. package/dist/tools/generate-image.js.map +1 -1
  264. package/dist/tools/read.js +4 -4
  265. package/dist/tools/read.js.map +1 -1
  266. package/dist/tools/subagent.d.ts.map +1 -1
  267. package/dist/tools/subagent.js +9 -2
  268. package/dist/tools/subagent.js.map +1 -1
  269. package/dist/tools/types.d.ts +0 -26
  270. package/dist/tools/types.d.ts.map +1 -1
  271. package/dist/tools/types.js.map +1 -1
  272. package/dist/trigger.d.ts +2 -1
  273. package/dist/trigger.d.ts.map +1 -1
  274. package/dist/trigger.js.map +1 -1
  275. package/dist/types.d.ts +108 -16
  276. package/dist/types.d.ts.map +1 -1
  277. package/dist/types.js +2 -2
  278. package/dist/types.js.map +1 -1
  279. package/dist/utils/file-guards.d.ts +9 -0
  280. package/dist/utils/file-guards.d.ts.map +1 -1
  281. package/dist/utils/file-guards.js +44 -1
  282. package/dist/utils/file-guards.js.map +1 -1
  283. package/dist/vault/disabled.d.ts.map +1 -1
  284. package/dist/vault/disabled.js +3 -0
  285. package/dist/vault/disabled.js.map +1 -1
  286. package/dist/vault/index.d.ts +29 -0
  287. package/dist/vault/index.d.ts.map +1 -1
  288. package/dist/vault/index.js +68 -4
  289. package/dist/vault/index.js.map +1 -1
  290. package/dist/vault/types.d.ts +2 -0
  291. package/dist/vault/types.d.ts.map +1 -1
  292. package/dist/vault/types.js.map +1 -1
  293. package/dist/web/admin/portal.d.ts +1 -1
  294. package/dist/web/admin/portal.d.ts.map +1 -1
  295. package/dist/web/admin/portal.js +194 -22
  296. package/dist/web/admin/portal.js.map +1 -1
  297. package/dist/web/admin/provider-models.js +1 -1
  298. package/dist/web/admin/provider-models.js.map +1 -1
  299. package/dist/web/login/oauth.js +1 -1
  300. package/dist/web/login/oauth.js.map +1 -1
  301. package/dist/web/login/portal.d.ts +1 -1
  302. package/dist/web/login/portal.d.ts.map +1 -1
  303. package/dist/web/login/portal.js +13 -36
  304. package/dist/web/login/portal.js.map +1 -1
  305. package/dist/web/portal-shell.d.ts +17 -0
  306. package/dist/web/portal-shell.d.ts.map +1 -1
  307. package/dist/web/portal-shell.js +66 -1
  308. package/dist/web/portal-shell.js.map +1 -1
  309. package/dist/web/server.d.ts +3 -2
  310. package/dist/web/server.d.ts.map +1 -1
  311. package/dist/web/server.js +3 -3
  312. package/dist/web/server.js.map +1 -1
  313. package/dist/web/session-view/portal.d.ts +1 -1
  314. package/dist/web/session-view/portal.d.ts.map +1 -1
  315. package/dist/web/session-view/portal.js +10 -12
  316. package/dist/web/session-view/portal.js.map +1 -1
  317. package/dist/web/session-view/service.d.ts.map +1 -1
  318. package/dist/web/session-view/service.js +11 -6
  319. package/dist/web/session-view/service.js.map +1 -1
  320. package/dist/web/session-view/types.d.ts +0 -4
  321. package/dist/web/session-view/types.d.ts.map +1 -1
  322. package/dist/web/session-view/types.js.map +1 -1
  323. package/dist/web/token-store.js +1 -1
  324. package/dist/web/token-store.js.map +1 -1
  325. package/package.json +8 -17
  326. package/dist/cli/ext-git.d.ts +0 -17
  327. package/dist/cli/ext-git.d.ts.map +0 -1
  328. package/dist/cli/ext-git.js +0 -107
  329. package/dist/cli/ext-git.js.map +0 -1
  330. package/dist/commands/parse.d.ts +0 -7
  331. package/dist/commands/parse.d.ts.map +0 -1
  332. package/dist/commands/parse.js +0 -14
  333. package/dist/commands/parse.js.map +0 -1
  334. package/dist/commands/text.d.ts +0 -2
  335. package/dist/commands/text.d.ts.map +0 -1
  336. package/dist/commands/text.js +0 -16
  337. package/dist/commands/text.js.map +0 -1
  338. package/dist/harness/extensions/blockkit.d.ts +0 -19
  339. package/dist/harness/extensions/blockkit.d.ts.map +0 -1
  340. package/dist/harness/extensions/blockkit.js +0 -42
  341. package/dist/harness/extensions/blockkit.js.map +0 -1
  342. package/dist/sandbox/path-context.d.ts +0 -3
  343. package/dist/sandbox/path-context.d.ts.map +0 -1
  344. package/dist/sandbox/path-context.js +0 -30
  345. package/dist/sandbox/path-context.js.map +0 -1
  346. package/dist/sessions/metadata.d.ts +0 -3
  347. package/dist/sessions/metadata.d.ts.map +0 -1
  348. package/dist/sessions/metadata.js +0 -11
  349. package/dist/sessions/metadata.js.map +0 -1
  350. package/dist/sessions/policy.d.ts +0 -6
  351. package/dist/sessions/policy.d.ts.map +0 -1
  352. package/dist/sessions/policy.js +0 -25
  353. package/dist/sessions/policy.js.map +0 -1
  354. package/dist/tools/truncate.d.ts +0 -33
  355. package/dist/tools/truncate.d.ts.map +0 -1
  356. package/dist/tools/truncate.js +0 -184
  357. package/dist/tools/truncate.js.map +0 -1
  358. package/dist/utils/date.d.ts +0 -10
  359. package/dist/utils/date.d.ts.map +0 -1
  360. package/dist/utils/date.js +0 -23
  361. package/dist/utils/date.js.map +0 -1
  362. package/dist/utils/env.d.ts +0 -3
  363. package/dist/utils/env.d.ts.map +0 -1
  364. package/dist/utils/env.js +0 -12
  365. package/dist/utils/env.js.map +0 -1
  366. package/dist/utils/fs-atomic.d.ts +0 -10
  367. package/dist/utils/fs-atomic.d.ts.map +0 -1
  368. package/dist/utils/fs-atomic.js +0 -45
  369. package/dist/utils/fs-atomic.js.map +0 -1
  370. package/dist/utils/html.d.ts +0 -2
  371. package/dist/utils/html.d.ts.map +0 -1
  372. package/dist/utils/html.js +0 -4
  373. package/dist/utils/html.js.map +0 -1
  374. package/dist/utils/http-body.d.ts +0 -10
  375. package/dist/utils/http-body.d.ts.map +0 -1
  376. package/dist/utils/http-body.js +0 -34
  377. package/dist/utils/http-body.js.map +0 -1
  378. package/dist/vault/injection.d.ts +0 -12
  379. package/dist/vault/injection.d.ts.map +0 -1
  380. package/dist/vault/injection.js +0 -30
  381. package/dist/vault/injection.js.map +0 -1
  382. package/dist/vault/policy.d.ts +0 -20
  383. package/dist/vault/policy.d.ts.map +0 -1
  384. package/dist/vault/policy.js +0 -20
  385. package/dist/vault/policy.js.map +0 -1
  386. package/dist/web/agent-events/portal.d.ts +0 -3
  387. package/dist/web/agent-events/portal.d.ts.map +0 -1
  388. package/dist/web/agent-events/portal.js +0 -19
  389. package/dist/web/agent-events/portal.js.map +0 -1
  390. package/dist/web/request.d.ts +0 -3
  391. package/dist/web/request.d.ts.map +0 -1
  392. package/dist/web/request.js +0 -13
  393. package/dist/web/request.js.map +0 -1
  394. package/dist/web/session-view/command.d.ts +0 -4
  395. package/dist/web/session-view/command.d.ts.map +0 -1
  396. package/dist/web/session-view/command.js +0 -10
  397. package/dist/web/session-view/command.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"html.js","sourceRoot":"","sources":["../../../src/adapters/telegram/html.ts"],"names":[],"mappings":"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","sourcesContent":["function htmlTableToText(tableHtml: string): string {\n const rows: string[][] = [];\n for (const rowMatch of tableHtml.matchAll(/<tr[^>]*>([\\s\\S]*?)<\\/tr>/gi)) {\n const cells: string[] = [];\n for (const cellMatch of rowMatch[1].matchAll(/<t[dh][^>]*>([\\s\\S]*?)<\\/t[dh]>/gi)) {\n cells.push(cellMatch[1].replace(/<[^>]+>/g, \"\").trim());\n }\n if (cells.length > 0) rows.push(cells);\n }\n\n if (rows.length === 0) return \"\";\n\n const numCols = Math.max(...rows.map((r) => r.length));\n const colWidths: number[] = Array(numCols).fill(0);\n for (const row of rows) {\n for (let i = 0; i < row.length; i++) {\n colWidths[i] = Math.max(colWidths[i], (row[i] ?? \"\").length);\n }\n }\n\n const sep = \"+\" + colWidths.map((w) => \"-\".repeat(w + 2)).join(\"+\") + \"+\";\n const lines: string[] = [sep];\n for (let i = 0; i < rows.length; i++) {\n const cells = colWidths.map((w, j) => ` ${(rows[i][j] ?? \"\").padEnd(w)} `);\n lines.push(\"|\" + cells.join(\"|\") + \"|\");\n if (i === 0) lines.push(sep);\n }\n lines.push(sep);\n return lines.join(\"\\n\");\n}\n\nconst SIMPLE_TAG_ALIASES: Record<string, string> = {\n b: \"b\",\n strong: \"b\",\n i: \"i\",\n em: \"i\",\n u: \"u\",\n ins: \"u\",\n s: \"s\",\n strike: \"s\",\n del: \"s\",\n code: \"code\",\n pre: \"pre\",\n blockquote: \"blockquote\",\n \"tg-spoiler\": \"tg-spoiler\",\n};\n\nexport function escapeTelegramHtml(text: string): string {\n return text\n .replace(/&(?!(?:amp|lt|gt|quot|apos|#39|#\\d+|#x[\\da-f]+);)/gi, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction escapeTelegramAttribute(text: string): string {\n return escapeTelegramHtml(text).replace(/\"/g, \"&quot;\");\n}\n\nfunction sanitizeTelegramTag(tag: string): string {\n const trimmed = tag.trim();\n\n if (/^<br\\s*\\/?>$/i.test(trimmed)) return \"\\n\";\n if (/^<(p|div)\\s*>$/i.test(trimmed)) return \"\";\n if (/^<\\/(p|div)\\s*>$/i.test(trimmed)) return \"\\n\";\n\n const match = trimmed.match(/^<\\s*(\\/?)\\s*([a-z0-9-]+)([^>]*)>$/i);\n if (!match) return escapeTelegramHtml(tag);\n\n const [, closing, rawName, rawAttrs] = match;\n const name = rawName.toLowerCase();\n const aliasedName = SIMPLE_TAG_ALIASES[name];\n\n if (aliasedName) {\n return `<${closing}${aliasedName}>`;\n }\n\n if (name === \"a\") {\n if (closing) return \"</a>\";\n const hrefMatch = rawAttrs.match(/\\bhref\\s*=\\s*([\"'])(.*?)\\1/i);\n if (!hrefMatch) return escapeTelegramHtml(tag);\n return `<a href=\"${escapeTelegramAttribute(hrefMatch[2])}\">`;\n }\n\n return escapeTelegramHtml(tag);\n}\n\nexport function sanitizeTelegramHtml(text: string): string {\n const withAsciiTables = text.replace(/<table[\\s\\S]*?<\\/table>/gi, (tableHtml) => {\n const ascii = htmlTableToText(tableHtml);\n return ascii ? `<pre>${ascii}</pre>` : \"\";\n });\n\n return withAsciiTables\n .split(/(<[^>]+>)/g)\n .filter(Boolean)\n .map((segment) => {\n if (segment.startsWith(\"<\") && segment.endsWith(\">\")) {\n return sanitizeTelegramTag(segment);\n }\n return escapeTelegramHtml(segment);\n })\n .join(\"\");\n}\n"]}
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../../src/adapters/telegram/html.ts"],"names":[],"mappings":"AAAA,SAAS,eAAe,CAAC,SAAiB;IACxC,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;QACzE,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,SAAS,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EAAE,CAAC;YAC1F,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACvD,MAAM,SAAS,GAAa,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAC1E,MAAM,KAAK,GAAa,CAAC,GAAG,CAAC,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7E,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,kBAAkB,GAA2B;IACjD,CAAC,EAAE,GAAG;IACN,MAAM,EAAE,GAAG;IACX,CAAC,EAAE,GAAG;IACN,EAAE,EAAE,GAAG;IACP,CAAC,EAAE,GAAG;IACN,GAAG,EAAE,GAAG;IACR,CAAC,EAAE,GAAG;IACN,MAAM,EAAE,GAAG;IACX,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,UAAU,EAAE,YAAY;IACxB,YAAY,EAAE,YAAY;CAC3B,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI;SACR,OAAO,CAAC,qDAAqD,EAAE,OAAO,CAAC;SACvE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAY;IAC3C,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW;IACtC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAE3B,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAC/C,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAE3C,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC;IAC7C,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACnC,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAE7C,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,IAAI,OAAO,GAAG,WAAW,GAAG,CAAC;IACtC,CAAC;IAED,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QACjB,IAAI,OAAO;YAAE,OAAO,MAAM,CAAC;QAC3B,MAAM,SAAS,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACvD,OAAO,YAAY,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;IACvD,CAAC;IAED,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,CAAC,SAAS,EAAE,EAAE;QAC9E,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,OAAO,eAAe;SACnB,KAAK,CAAC,YAAY,CAAC;SACnB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACf,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACrD,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC","sourcesContent":["function htmlTableToText(tableHtml: string): string {\n const rows: string[][] = [];\n for (const rowMatch of tableHtml.matchAll(/<tr[^>]*>([\\s\\S]*?)<\\/tr>/gi)) {\n const cells: string[] = [];\n for (const cellMatch of (rowMatch[1] ?? \"\").matchAll(/<t[dh][^>]*>([\\s\\S]*?)<\\/t[dh]>/gi)) {\n cells.push((cellMatch[1] ?? \"\").replace(/<[^>]+>/g, \"\").trim());\n }\n if (cells.length > 0) rows.push(cells);\n }\n\n if (rows.length === 0) return \"\";\n\n const numCols = Math.max(...rows.map((r) => r.length));\n const colWidths: number[] = Array(numCols).fill(0);\n for (const row of rows) {\n for (let i = 0; i < row.length; i++) {\n colWidths[i] = Math.max(colWidths[i] ?? 0, (row[i] ?? \"\").length);\n }\n }\n\n const sep = \"+\" + colWidths.map((w) => \"-\".repeat(w + 2)).join(\"+\") + \"+\";\n const lines: string[] = [sep];\n for (let i = 0; i < rows.length; i++) {\n const cells = colWidths.map((w, j) => ` ${(rows[i]?.[j] ?? \"\").padEnd(w)} `);\n lines.push(\"|\" + cells.join(\"|\") + \"|\");\n if (i === 0) lines.push(sep);\n }\n lines.push(sep);\n return lines.join(\"\\n\");\n}\n\nconst SIMPLE_TAG_ALIASES: Record<string, string> = {\n b: \"b\",\n strong: \"b\",\n i: \"i\",\n em: \"i\",\n u: \"u\",\n ins: \"u\",\n s: \"s\",\n strike: \"s\",\n del: \"s\",\n code: \"code\",\n pre: \"pre\",\n blockquote: \"blockquote\",\n \"tg-spoiler\": \"tg-spoiler\",\n};\n\nexport function escapeTelegramHtml(text: string): string {\n return text\n .replace(/&(?!(?:amp|lt|gt|quot|apos|#39|#\\d+|#x[\\da-f]+);)/gi, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction escapeTelegramAttribute(text: string): string {\n return escapeTelegramHtml(text).replace(/\"/g, \"&quot;\");\n}\n\nfunction sanitizeTelegramTag(tag: string): string {\n const trimmed = tag.trim();\n\n if (/^<br\\s*\\/?>$/i.test(trimmed)) return \"\\n\";\n if (/^<(p|div)\\s*>$/i.test(trimmed)) return \"\";\n if (/^<\\/(p|div)\\s*>$/i.test(trimmed)) return \"\\n\";\n\n const match = trimmed.match(/^<\\s*(\\/?)\\s*([a-z0-9-]+)([^>]*)>$/i);\n if (!match) return escapeTelegramHtml(tag);\n\n const [, closing, rawName, rawAttrs] = match;\n if (rawName === undefined) return escapeTelegramHtml(tag);\n const name = rawName.toLowerCase();\n const aliasedName = SIMPLE_TAG_ALIASES[name];\n\n if (aliasedName) {\n return `<${closing}${aliasedName}>`;\n }\n\n if (name === \"a\") {\n if (closing) return \"</a>\";\n const hrefMatch = (rawAttrs ?? \"\").match(/\\bhref\\s*=\\s*([\"'])(.*?)\\1/i);\n const href = hrefMatch?.[2];\n if (href === undefined) return escapeTelegramHtml(tag);\n return `<a href=\"${escapeTelegramAttribute(href)}\">`;\n }\n\n return escapeTelegramHtml(tag);\n}\n\nexport function sanitizeTelegramHtml(text: string): string {\n const withAsciiTables = text.replace(/<table[\\s\\S]*?<\\/table>/gi, (tableHtml) => {\n const ascii = htmlTableToText(tableHtml);\n return ascii ? `<pre>${ascii}</pre>` : \"\";\n });\n\n return withAsciiTables\n .split(/(<[^>]+>)/g)\n .filter(Boolean)\n .map((segment) => {\n if (segment.startsWith(\"<\") && segment.endsWith(\">\")) {\n return sanitizeTelegramTag(segment);\n }\n return escapeTelegramHtml(segment);\n })\n .join(\"\");\n}\n"]}
@@ -1,4 +1,6 @@
1
1
  import type { ChatToolResult, MessagingBot, ConversationContext, ConversationEvent, MessagingEventHandler, OfficeAddress, SubagentProgressSnapshot } from "../adapter.js";
2
+ import type { Office } from "../office/types.js";
3
+ import type { Attachment } from "../types.js";
2
4
  export type ChatResponseErrorOperation = "respond" | "replace_response" | "respond_diagnostic" | "set_working";
3
5
  export interface ChatResponseErrorContext {
4
6
  platform: string;
@@ -122,7 +124,7 @@ export interface IncomingAttachment {
122
124
  }
123
125
  /** Outcome of saving incoming attachments; error policy stays with the adapter. */
124
126
  export interface SavedAttachments {
125
- saved: import("../types.js").Attachment[];
127
+ saved: Attachment[];
126
128
  failed: {
127
129
  name: string;
128
130
  error: unknown;
@@ -131,7 +133,7 @@ export interface SavedAttachments {
131
133
  export interface MessageIntakeOptions<TEvent extends ConversationEvent> {
132
134
  eventBase: TEvent;
133
135
  /** The event's Conversation office; absent when auto-reply is unconfigured (embedders). */
134
- office: import("../office/types.js").Office | undefined;
136
+ office: Office | undefined;
135
137
  isAutoReplyCandidate: boolean;
136
138
  magicWord: MagicWordIntakeOptions;
137
139
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n ChatToolResult,\n MessagingBot,\n ConversationContext,\n ConversationEvent,\n MessagingEventHandler,\n OfficeAddress,\n SubagentProgressSnapshot,\n} from \"../adapter.js\";\n\nexport type ChatResponseErrorOperation =\n | \"respond\"\n | \"replace_response\"\n | \"respond_diagnostic\"\n | \"set_working\";\n\nexport interface ChatResponseErrorContext {\n platform: string;\n conversationId: string;\n messageId: string;\n sessionKey: string;\n conversationKind: string;\n operation: ChatResponseErrorOperation;\n channelId?: string;\n chatId?: number;\n responseMessageId?: string | number | null;\n threadTs?: string;\n replyTargetId?: string;\n replyToId?: number | null;\n isThreaded?: boolean;\n extra?: Record<string, unknown>;\n}\n\nexport type ChatResponseErrorReporter = (\n err: unknown,\n operation: ChatResponseErrorOperation,\n extra?: Record<string, unknown>,\n) => void;\n\nexport interface RetryOptions {\n /** Predicate that returns true when an error is worth retrying (rate limit, transient 5xx, etc.). */\n isRateLimited: (err: Error) => boolean;\n /** Total attempts including the first call. */\n maxAttempts?: number;\n baseDelayMs?: number;\n}\n\nexport interface ResolveStopTargetInput {\n handler: MessagingEventHandler;\n /** The office whose runtime state may be stopped. */\n address: OfficeAddress;\n /** Session key derived from the current message; checked first when present. */\n sessionKey?: string;\n}\n\ninterface ProgressiveStreamTransport {\n start(text: string): Promise<string>;\n append(messageId: string, delta: string): Promise<void>;\n stop(messageId: string): Promise<void>;\n}\n\nexport interface ProgressiveRendererPlatform {\n label: string;\n maxLength: number;\n initialResponseId?: string | null;\n formatContinuation: (partNum: number) => string;\n errorPrefix: string;\n sanitize?: (text: string) => string;\n workingIndicator?: string;\n formatProvisional?: (text: string, working: boolean) => string;\n prepareSource?: (text: string, working: boolean) => string;\n onWorkingChanged?: (working: boolean, responseId: string | null) => Promise<void>;\n setTyping?: (isTyping: boolean, responseId: string | null) => Promise<void>;\n onFinish?: (text: string, responseId: string | null) => void;\n /** Whether `respond` calls are complete messages that should be logged immediately. */\n logIntermediateResponses?: boolean;\n /** Whether the platform accepts incremental response deltas. */\n supportsDeltas?: boolean;\n /** Native stream operations, when this reply target supports them. */\n stream?: ProgressiveStreamTransport;\n /** Re-render a finished response when the provisional stream lacked structure. */\n needsCanonicalRender?: (text: string) => boolean;\n formatSubagentProgress?: (progress: SubagentProgressSnapshot) => string;\n typing?: {\n send: () => Promise<unknown>;\n intervalMs: number;\n stopOnSend?: boolean;\n };\n formatToolResult: (result: ChatToolResult) => string;\n /** Stable platform context plus the current response identity for error reporting. */\n responseErrorContext?: (\n responseId: string | null,\n ) => Omit<ChatResponseErrorContext, \"operation\" | \"extra\">;\n /** @deprecated Provide `responseErrorContext`; the renderer now owns reporting. */\n reportError?: (\n err: unknown,\n operation: ChatResponseErrorOperation,\n extra: Record<string, unknown>,\n responseId: string | null,\n ) => void;\n notifySendFailure?: (errorMessage: string) => Promise<void>;\n post: (text: string) => Promise<string>;\n update: (id: string, text: string) => Promise<void>;\n postExtra: (text: string, responseId: string | null) => Promise<string | number | void>;\n postDiagnostic?: (\n text: string,\n options: { style?: \"muted\" | \"error\" },\n responseId: string | null,\n ) => Promise<Array<string | number>>;\n delete?: (id: string) => Promise<void>;\n deleteExtra?: (id: string | number) => Promise<void>;\n logBotResponse?: (text: string, id: string) => void;\n uploadFile?: (filePath: string, title?: string) => Promise<void>;\n uploadFallbackNote?: (name: string) => string;\n react?: (emoji: string) => Promise<void>;\n /** Handle a Slack-style length rejection and return the canonical fallback text. */\n handleTooLong?: (\n text: string,\n operation: \"render\" | \"replace\",\n options: { createOverflowLink?: () => string } | undefined,\n responseId: string | null,\n write: (text: string) => Promise<void>,\n getResponseId: () => string | null,\n ) => Promise<{ text: string; prefixLength?: number }>;\n}\n\n/** How intake resolved a message. Callers branch on this instead of passing callbacks. */\nexport type MessageIntakeOutcome = \"magic-word\" | \"not-triggered\" | \"rejected-busy\" | \"enqueued\";\n\n/** Platform policy for the magic-word step, stated as data. */\nexport interface MagicWordIntakeOptions {\n /**\n * Raw user-typed text to match when `eventBase.text` is decorated for the\n * agent (e.g. GitHub review-comment framing). Defaults to `eventBase.text`.\n */\n text?: string;\n /**\n * Whether the message addressed the bot (mention, DM, slash form). The idle\n * \"Nothing running.\" reply is suppressed for unaddressed messages.\n */\n addressed: boolean;\n /**\n * How far a stop may widen when the direct session key is not running:\n * \"top-level\" widens to the single running scoped session only from the\n * persistent conversation session, \"always\" widens unconditionally,\n * \"never\" stops only exact matches.\n */\n scopeFallback: \"top-level\" | \"always\" | \"never\";\n}\n\n/** One platform file to save into an office's attachments directory. */\nexport interface IncomingAttachment {\n /** Original file name as the platform reports it. */\n name: string;\n /** Epoch ms used in the stored filename; defaults to the time of saving. */\n timestampMs?: number;\n /** Fetch the file and write it to destPath (the parent directory exists). */\n download(destPath: string): Promise<void>;\n}\n\n/** Outcome of saving incoming attachments; error policy stays with the adapter. */\nexport interface SavedAttachments {\n saved: import(\"../types.js\").Attachment[];\n failed: { name: string; error: unknown }[];\n}\n\nexport interface MessageIntakeOptions<TEvent extends ConversationEvent> {\n eventBase: TEvent;\n /** The event's Conversation office; absent when auto-reply is unconfigured (embedders). */\n office: import(\"../office/types.js\").Office | undefined;\n isAutoReplyCandidate: boolean;\n magicWord: MagicWordIntakeOptions;\n /**\n * \"reject\" bounces a new message while its session is already running\n * (with an \"Already working\" reply); \"queue\" lines it up behind the run.\n */\n busyPolicy: \"queue\" | \"reject\";\n logEntryBase: Record<string, unknown>;\n log?: (entry: Record<string, unknown>) => void;\n processAttachments: () => Promise<unknown[]>;\n queueKey: string;\n enqueue: (queueKey: string, work: () => Promise<void>) => void;\n handler: MessagingEventHandler;\n bot: MessagingBot;\n createContext: (event: TEvent) => ConversationContext;\n deferAttachmentsUntilRun?: boolean;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n ChatToolResult,\n MessagingBot,\n ConversationContext,\n ConversationEvent,\n MessagingEventHandler,\n OfficeAddress,\n SubagentProgressSnapshot,\n} from \"../adapter.js\";\nimport type { Office } from \"../office/types.js\";\nimport type { Attachment } from \"../types.js\";\n\nexport type ChatResponseErrorOperation =\n | \"respond\"\n | \"replace_response\"\n | \"respond_diagnostic\"\n | \"set_working\";\n\nexport interface ChatResponseErrorContext {\n platform: string;\n conversationId: string;\n messageId: string;\n sessionKey: string;\n conversationKind: string;\n operation: ChatResponseErrorOperation;\n channelId?: string;\n chatId?: number;\n responseMessageId?: string | number | null;\n threadTs?: string;\n replyTargetId?: string;\n replyToId?: number | null;\n isThreaded?: boolean;\n extra?: Record<string, unknown>;\n}\n\nexport type ChatResponseErrorReporter = (\n err: unknown,\n operation: ChatResponseErrorOperation,\n extra?: Record<string, unknown>,\n) => void;\n\nexport interface RetryOptions {\n /** Predicate that returns true when an error is worth retrying (rate limit, transient 5xx, etc.). */\n isRateLimited: (err: Error) => boolean;\n /** Total attempts including the first call. */\n maxAttempts?: number;\n baseDelayMs?: number;\n}\n\nexport interface ResolveStopTargetInput {\n handler: MessagingEventHandler;\n /** The office whose runtime state may be stopped. */\n address: OfficeAddress;\n /** Session key derived from the current message; checked first when present. */\n sessionKey?: string;\n}\n\ninterface ProgressiveStreamTransport {\n start(text: string): Promise<string>;\n append(messageId: string, delta: string): Promise<void>;\n stop(messageId: string): Promise<void>;\n}\n\nexport interface ProgressiveRendererPlatform {\n label: string;\n maxLength: number;\n initialResponseId?: string | null;\n formatContinuation: (partNum: number) => string;\n errorPrefix: string;\n sanitize?: (text: string) => string;\n workingIndicator?: string;\n formatProvisional?: (text: string, working: boolean) => string;\n prepareSource?: (text: string, working: boolean) => string;\n onWorkingChanged?: (working: boolean, responseId: string | null) => Promise<void>;\n setTyping?: (isTyping: boolean, responseId: string | null) => Promise<void>;\n onFinish?: (text: string, responseId: string | null) => void;\n /** Whether `respond` calls are complete messages that should be logged immediately. */\n logIntermediateResponses?: boolean;\n /** Whether the platform accepts incremental response deltas. */\n supportsDeltas?: boolean;\n /** Native stream operations, when this reply target supports them. */\n stream?: ProgressiveStreamTransport;\n /** Re-render a finished response when the provisional stream lacked structure. */\n needsCanonicalRender?: (text: string) => boolean;\n formatSubagentProgress?: (progress: SubagentProgressSnapshot) => string;\n typing?: {\n send: () => Promise<unknown>;\n intervalMs: number;\n stopOnSend?: boolean;\n };\n formatToolResult: (result: ChatToolResult) => string;\n /** Stable platform context plus the current response identity for error reporting. */\n responseErrorContext?: (\n responseId: string | null,\n ) => Omit<ChatResponseErrorContext, \"operation\" | \"extra\">;\n /** @deprecated Provide `responseErrorContext`; the renderer now owns reporting. */\n reportError?: (\n err: unknown,\n operation: ChatResponseErrorOperation,\n extra: Record<string, unknown>,\n responseId: string | null,\n ) => void;\n notifySendFailure?: (errorMessage: string) => Promise<void>;\n post: (text: string) => Promise<string>;\n update: (id: string, text: string) => Promise<void>;\n postExtra: (text: string, responseId: string | null) => Promise<string | number | void>;\n postDiagnostic?: (\n text: string,\n options: { style?: \"muted\" | \"error\" },\n responseId: string | null,\n ) => Promise<Array<string | number>>;\n delete?: (id: string) => Promise<void>;\n deleteExtra?: (id: string | number) => Promise<void>;\n logBotResponse?: (text: string, id: string) => void;\n uploadFile?: (filePath: string, title?: string) => Promise<void>;\n uploadFallbackNote?: (name: string) => string;\n react?: (emoji: string) => Promise<void>;\n /** Handle a Slack-style length rejection and return the canonical fallback text. */\n handleTooLong?: (\n text: string,\n operation: \"render\" | \"replace\",\n options: { createOverflowLink?: () => string } | undefined,\n responseId: string | null,\n write: (text: string) => Promise<void>,\n getResponseId: () => string | null,\n ) => Promise<{ text: string; prefixLength?: number }>;\n}\n\n/** How intake resolved a message. Callers branch on this instead of passing callbacks. */\nexport type MessageIntakeOutcome = \"magic-word\" | \"not-triggered\" | \"rejected-busy\" | \"enqueued\";\n\n/** Platform policy for the magic-word step, stated as data. */\nexport interface MagicWordIntakeOptions {\n /**\n * Raw user-typed text to match when `eventBase.text` is decorated for the\n * agent (e.g. GitHub review-comment framing). Defaults to `eventBase.text`.\n */\n text?: string;\n /**\n * Whether the message addressed the bot (mention, DM, slash form). The idle\n * \"Nothing running.\" reply is suppressed for unaddressed messages.\n */\n addressed: boolean;\n /**\n * How far a stop may widen when the direct session key is not running:\n * \"top-level\" widens to the single running scoped session only from the\n * persistent conversation session, \"always\" widens unconditionally,\n * \"never\" stops only exact matches.\n */\n scopeFallback: \"top-level\" | \"always\" | \"never\";\n}\n\n/** One platform file to save into an office's attachments directory. */\nexport interface IncomingAttachment {\n /** Original file name as the platform reports it. */\n name: string;\n /** Epoch ms used in the stored filename; defaults to the time of saving. */\n timestampMs?: number;\n /** Fetch the file and write it to destPath (the parent directory exists). */\n download(destPath: string): Promise<void>;\n}\n\n/** Outcome of saving incoming attachments; error policy stays with the adapter. */\nexport interface SavedAttachments {\n saved: Attachment[];\n failed: { name: string; error: unknown }[];\n}\n\nexport interface MessageIntakeOptions<TEvent extends ConversationEvent> {\n eventBase: TEvent;\n /** The event's Conversation office; absent when auto-reply is unconfigured (embedders). */\n office: Office | undefined;\n isAutoReplyCandidate: boolean;\n magicWord: MagicWordIntakeOptions;\n /**\n * \"reject\" bounces a new message while its session is already running\n * (with an \"Already working\" reply); \"queue\" lines it up behind the run.\n */\n busyPolicy: \"queue\" | \"reject\";\n logEntryBase: Record<string, unknown>;\n log?: (entry: Record<string, unknown>) => void;\n processAttachments: () => Promise<unknown[]>;\n queueKey: string;\n enqueue: (queueKey: string, work: () => Promise<void>) => void;\n handler: MessagingEventHandler;\n bot: MessagingBot;\n createContext: (event: TEvent) => ConversationContext;\n deferAttachmentsUntilRun?: boolean;\n}\n"]}
@@ -1,5 +1,6 @@
1
- import type { ServerResponse } from "http";
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
2
  import type { AgentEventEnvelope } from "./types.js";
3
3
  export declare function emitAgentEvent(event: AgentEventEnvelope): void;
4
- export declare function addAgentEventStreamClient(res: ServerResponse): () => void;
4
+ /** The `/api/agent-events/stream` SSE endpoint (optionally token-gated). */
5
+ export declare function handleAgentEventsRequest(req: IncomingMessage, res: ServerResponse, url: URL): boolean;
5
6
  //# sourceMappingURL=agent-events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-events.d.ts","sourceRoot":"","sources":["../src/agent-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAKrD,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAK9D;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,IAAI,CAkBzE"}
1
+ {"version":3,"file":"agent-events.d.ts","sourceRoot":"","sources":["../src/agent-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAKrD,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAK9D;AAsBD,4EAA4E;AAC5E,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,GAAG,GACP,OAAO,CAiBT"}
@@ -1,3 +1,4 @@
1
+ import { readEnv } from "./env-manifest.js";
1
2
  const clients = new Set();
2
3
  let nextEventId = 1;
3
4
  export function emitAgentEvent(event) {
@@ -6,7 +7,7 @@ export function emitAgentEvent(event) {
6
7
  client.write(payload);
7
8
  }
8
9
  }
9
- export function addAgentEventStreamClient(res) {
10
+ function addAgentEventStreamClient(res) {
10
11
  clients.add(res);
11
12
  res.writeHead(200, {
12
13
  "Content-Type": "text/event-stream",
@@ -23,4 +24,21 @@ export function addAgentEventStreamClient(res) {
23
24
  res.end();
24
25
  };
25
26
  }
27
+ /** The `/api/agent-events/stream` SSE endpoint (optionally token-gated). */
28
+ export function handleAgentEventsRequest(req, res, url) {
29
+ if (req.method !== "GET" || url.pathname !== "/api/agent-events/stream") {
30
+ return false;
31
+ }
32
+ const expectedToken = readEnv("AGENT_EVENTS_TOKEN");
33
+ const auth = req.headers.authorization ?? "";
34
+ const queryToken = url.searchParams.get("token") ?? "";
35
+ if (expectedToken && auth !== `Bearer ${expectedToken}` && queryToken !== expectedToken) {
36
+ res.writeHead(401, { "Content-Type": "text/plain; charset=utf-8" });
37
+ res.end("unauthorized");
38
+ return true;
39
+ }
40
+ const cleanup = addAgentEventStreamClient(res);
41
+ req.on("close", cleanup);
42
+ return true;
43
+ }
26
44
  //# sourceMappingURL=agent-events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-events.js","sourceRoot":"","sources":["../src/agent-events.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;AAC1C,IAAI,WAAW,GAAG,CAAC,CAAC;AAEpB,MAAM,UAAU,cAAc,CAAC,KAAyB;IACtD,MAAM,OAAO,GAAG,OAAO,WAAW,EAAE,yBAAyB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;IACzF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,GAAmB;IAC3D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,cAAc,EAAE,mBAAmB;QACnC,eAAe,EAAE,wBAAwB;QACzC,UAAU,EAAE,YAAY;QACxB,mBAAmB,EAAE,IAAI;KAC1B,CAAC,CAAC;IACH,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAE7B,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1E,SAAS,CAAC,KAAK,EAAE,CAAC;IAElB,OAAO,GAAG,EAAE;QACV,aAAa,CAAC,SAAS,CAAC,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { ServerResponse } from \"http\";\nimport type { AgentEventEnvelope } from \"./types.js\";\n\nconst clients = new Set<ServerResponse>();\nlet nextEventId = 1;\n\nexport function emitAgentEvent(event: AgentEventEnvelope): void {\n const payload = `id: ${nextEventId++}\\nevent: agent\\ndata: ${JSON.stringify(event)}\\n\\n`;\n for (const client of clients) {\n client.write(payload);\n }\n}\n\nexport function addAgentEventStreamClient(res: ServerResponse): () => void {\n clients.add(res);\n res.writeHead(200, {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache, no-transform\",\n Connection: \"keep-alive\",\n \"X-Accel-Buffering\": \"no\",\n });\n res.write(`: connected\\n\\n`);\n\n const keepAlive = setInterval(() => res.write(`: keepalive\\n\\n`), 25_000);\n keepAlive.unref();\n\n return () => {\n clearInterval(keepAlive);\n clients.delete(res);\n res.end();\n };\n}\n"]}
1
+ {"version":3,"file":"agent-events.js","sourceRoot":"","sources":["../src/agent-events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG5C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;AAC1C,IAAI,WAAW,GAAG,CAAC,CAAC;AAEpB,MAAM,UAAU,cAAc,CAAC,KAAyB;IACtD,MAAM,OAAO,GAAG,OAAO,WAAW,EAAE,yBAAyB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;IACzF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAAC,GAAmB;IACpD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,cAAc,EAAE,mBAAmB;QACnC,eAAe,EAAE,wBAAwB;QACzC,UAAU,EAAE,YAAY;QACxB,mBAAmB,EAAE,IAAI;KAC1B,CAAC,CAAC;IACH,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAE7B,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1E,SAAS,CAAC,KAAK,EAAE,CAAC;IAElB,OAAO,GAAG,EAAE;QACV,aAAa,CAAC,SAAS,CAAC,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,wBAAwB,CACtC,GAAoB,EACpB,GAAmB,EACnB,GAAQ;IAER,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,QAAQ,KAAK,0BAA0B,EAAE,CAAC;QACxE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;IAC7C,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACvD,IAAI,aAAa,IAAI,IAAI,KAAK,UAAU,aAAa,EAAE,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;QACxF,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,2BAA2B,EAAE,CAAC,CAAC;QACpE,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAC/C,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { readEnv } from \"./env-manifest.js\";\nimport type { AgentEventEnvelope } from \"./types.js\";\n\nconst clients = new Set<ServerResponse>();\nlet nextEventId = 1;\n\nexport function emitAgentEvent(event: AgentEventEnvelope): void {\n const payload = `id: ${nextEventId++}\\nevent: agent\\ndata: ${JSON.stringify(event)}\\n\\n`;\n for (const client of clients) {\n client.write(payload);\n }\n}\n\nfunction addAgentEventStreamClient(res: ServerResponse): () => void {\n clients.add(res);\n res.writeHead(200, {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache, no-transform\",\n Connection: \"keep-alive\",\n \"X-Accel-Buffering\": \"no\",\n });\n res.write(`: connected\\n\\n`);\n\n const keepAlive = setInterval(() => res.write(`: keepalive\\n\\n`), 25_000);\n keepAlive.unref();\n\n return () => {\n clearInterval(keepAlive);\n clients.delete(res);\n res.end();\n };\n}\n\n/** The `/api/agent-events/stream` SSE endpoint (optionally token-gated). */\nexport function handleAgentEventsRequest(\n req: IncomingMessage,\n res: ServerResponse,\n url: URL,\n): boolean {\n if (req.method !== \"GET\" || url.pathname !== \"/api/agent-events/stream\") {\n return false;\n }\n\n const expectedToken = readEnv(\"AGENT_EVENTS_TOKEN\");\n const auth = req.headers.authorization ?? \"\";\n const queryToken = url.searchParams.get(\"token\") ?? \"\";\n if (expectedToken && auth !== `Bearer ${expectedToken}` && queryToken !== expectedToken) {\n res.writeHead(401, { \"Content-Type\": \"text/plain; charset=utf-8\" });\n res.end(\"unauthorized\");\n return true;\n }\n\n const cleanup = addAgentEventStreamClient(res);\n req.on(\"close\", cleanup);\n return true;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAiB,cAAc,EAAE,MAAM,YAAY,CAAC;AAIrF,OAAO,EAAY,KAAK,YAAY,EAAc,MAAM,uBAAuB,CAAC;AA6BhF,OAAO,KAAK,EAEV,mBAAmB,EAKpB,MAAM,cAAc,CAAC;AAgBtB,OAAO,EAKL,KAAK,kBAAkB,EAExB,MAAM,oBAAoB,CAAC;AAiC5B,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,kBAAkB,GAC9B,MAAM,CAER;AAcD,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,kBAAkB,GAC9B,MAAM,CA2BR;AAgGD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,aAAa,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,kBAAkB,EAChC,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GACxD,OAAO,CAAC;IACT,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,YAAY,EAAE,CAAC;CAClC,CAAC,CAcD;AAwKD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,MAAM,GAAG,UAAU,CAAC,GAC7D,MAAM,GAAG,SAAS,CAOpB;AAsMD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,cAAc,EAAE,OAAO,EACvB,kBAAkB,EAAE,MAAM,GAAG,SAAS,EACtC,YAAY,EAAE,MAAM,GACnB,MAAM,CAkBR;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,kBAAkB,EAAE,MAAM,GAAG,SAAS,EACtC,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAYR;AAs0CD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAiYxF"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAiB,cAAc,EAAE,MAAM,YAAY,CAAC;AAIrF,OAAO,EAAY,KAAK,YAAY,EAAc,MAAM,uBAAuB,CAAC;AA+BhF,OAAO,KAAK,EAEV,mBAAmB,EAKpB,MAAM,cAAc,CAAC;AAmBtB,OAAO,EAKL,KAAK,kBAAkB,EAExB,MAAM,oBAAoB,CAAC;AAiC5B,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,kBAAkB,GAC9B,MAAM,CAER;AAcD,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,kBAAkB,GAC9B,MAAM,CA2BR;AAgGD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,aAAa,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,kBAAkB,EAChC,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GACxD,OAAO,CAAC;IACT,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,YAAY,EAAE,CAAC;CAClC,CAAC,CAcD;AAwKD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,MAAM,GAAG,UAAU,CAAC,GAC7D,MAAM,GAAG,SAAS,CAOpB;AAsMD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,cAAc,EAAE,OAAO,EACvB,kBAAkB,EAAE,MAAM,GAAG,SAAS,EACtC,YAAY,EAAE,MAAM,GACnB,MAAM,CAkBR;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,kBAAkB,EAAE,MAAM,GAAG,SAAS,EACtC,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAYR;AAy2CD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAiZxF"}
package/dist/agent.js CHANGED
@@ -2,15 +2,16 @@
2
2
  * Agent runner: prompt construction, path translation, run lifecycle, and createRunner.
3
3
  * Single module — do not split helpers that only this file uses.
4
4
  */
5
+ import {} from "@earendil-works/pi-ai";
5
6
  import { DEFAULT_EVENT_BUDGET, formatSkillsForPrompt, loadExtensions, loadSkillsFromDir, MikanAgentSession, MikanModels, parseCommandInput, } from "./harness/index.js";
6
7
  import { runSubagent } from "./harness/subagent-runner.js";
7
8
  import { loadSubagentProfiles } from "./harness/subagent-profiles.js";
8
9
  import { mergeSubagentProgress, parseSubagentProgressSnapshot, renderSubagentDashboard, settleSubagentProgress, } from "./subagent-progress.js";
9
- import { createHash } from "crypto";
10
- import { existsSync, lstatSync } from "fs";
11
- import { chmod, mkdtemp, mkdir, readFile, rm, writeFile } from "fs/promises";
12
- import { tmpdir } from "os";
13
- import { basename, isAbsolute, join, posix, relative, resolve, sep } from "path";
10
+ import { createHash } from "node:crypto";
11
+ import { existsSync, lstatSync } from "node:fs";
12
+ import { chmod, mkdtemp, mkdir, readFile, rm, writeFile } from "node:fs/promises";
13
+ import { tmpdir } from "node:os";
14
+ import { basename, isAbsolute, join, posix, relative, resolve, sep } from "node:path";
14
15
  import { resolveConversationSettings } from "./config.js";
15
16
  import { resolveWorkspaceProjection } from "./workspace-projection/index.js";
16
17
  import { packageSkillRuntimeDir, resolveConversationPackages } from "./packages/index.js";
@@ -270,7 +271,7 @@ function buildRuntimePaths(runtimeWorkspaceRoot, office) {
270
271
  function buildEnvDescription(sandboxType, workspaceRoot) {
271
272
  switch (sandboxType) {
272
273
  case "image":
273
- return `You are running inside a managed per-user container.
274
+ return `You are running inside a managed per-conversation container.
274
275
  - Runtime workspace root: ${workspaceRoot}
275
276
  - Bash commands start in: ${workspaceRoot}
276
277
  - Install tools with the image's package manager
@@ -931,7 +932,7 @@ function createRunnerExecutionContext(sandboxConfig, vaultManager, provisioner,
931
932
  * notify posts through the platform bots when main.ts provides a notifier.
932
933
  */
933
934
  function buildExtensionHostServices(params) {
934
- const { workspace, vaultManager, platformNotifier, platformReactor, platformUploader, platformBlockKit, runSubagentService, } = params;
935
+ const { workspace, address, vaultManager, platformNotifier, platformReactor, platformUploader, platformBlockKit, platformDmOpener, platformHistoryFetcher, platformUserLister, extensionScheduleEngine, runSubagentService, } = params;
935
936
  const eventStore = HostEventStore.fromWorkspaceDir(workspace.root);
936
937
  return {
937
938
  stateDir: workspace.stateDir,
@@ -945,6 +946,18 @@ function buildExtensionHostServices(params) {
945
946
  ...(platformNotifier ? { postMessage: platformNotifier } : {}),
946
947
  ...(platformReactor ? { addReaction: platformReactor } : {}),
947
948
  ...(platformUploader ? { uploadFile: platformUploader } : {}),
949
+ ...(platformDmOpener ? { openDirectConversation: platformDmOpener } : {}),
950
+ ...(platformHistoryFetcher ? { fetchHistory: platformHistoryFetcher } : {}),
951
+ ...(platformUserLister ? { listUsers: platformUserLister } : {}),
952
+ ...(extensionScheduleEngine
953
+ ? {
954
+ callbackScheduleStore: {
955
+ upsert: (slug, name, spec) => extensionScheduleEngine.upsert(address, slug, name, spec),
956
+ delete: (slug, name) => extensionScheduleEngine.delete(address, slug, name),
957
+ list: (slug) => extensionScheduleEngine.list(address, slug),
958
+ },
959
+ }
960
+ : {}),
948
961
  ...(platformBlockKit
949
962
  ? { postBlocks: platformBlockKit.postBlocks, updateBlocks: platformBlockKit.updateBlocks }
950
963
  : {}),
@@ -957,7 +970,7 @@ function buildExtensionHostServices(params) {
957
970
  };
958
971
  }
959
972
  async function createConfiguredAgentSession(params) {
960
- const { office, systemPrompt, model, thinkingLevel, tools, sessionStore, models, vaultManager, platformNotifier, platformReactor, platformUploader, platformBlockKit, } = params;
973
+ const { office, systemPrompt, model, thinkingLevel, tools, sessionStore, models, vaultManager, platformNotifier, platformReactor, platformUploader, platformBlockKit, platformDmOpener, platformHistoryFetcher, platformUserLister, extensionScheduleEngine, } = params;
961
974
  const { address } = office;
962
975
  const conversationId = address.conversationId;
963
976
  const workspaceDir = office.workspace.root;
@@ -986,11 +999,16 @@ async function createConfiguredAgentSession(params) {
986
999
  context: { address, conversationId, workspaceDir, model, thinkingLevel },
987
1000
  services: buildExtensionHostServices({
988
1001
  workspace: office.workspace,
1002
+ address,
989
1003
  vaultManager,
990
1004
  platformNotifier,
991
1005
  platformReactor,
992
1006
  platformUploader,
993
1007
  platformBlockKit,
1008
+ platformDmOpener,
1009
+ platformHistoryFetcher,
1010
+ platformUserLister,
1011
+ extensionScheduleEngine,
994
1012
  runSubagentService: (request, extensionTools) => {
995
1013
  const activeParent = session?.isActiveRun ? session : undefined;
996
1014
  return runSubagent({
@@ -1501,7 +1519,7 @@ function attachSessionEventHandlers(params) {
1501
1519
  * This is a stateless factory function.
1502
1520
  */
1503
1521
  export async function createRunner(options) {
1504
- const { sandboxConfig, sessionKey, office, sessionScope, vaultManager, provisioner, resourceController, sessionView, platformNotifier, platformReactor, platformUploader, platformBlockKit, platformToolPackFactories, } = options;
1522
+ const { sandboxConfig, sessionKey, office, sessionScope, vaultManager, provisioner, resourceController, sessionView, platformNotifier, platformReactor, platformUploader, platformBlockKit, platformDmOpener, platformHistoryFetcher, platformUserLister, extensionScheduleEngine, platformToolPackFactories, } = options;
1505
1523
  const conversationId = office.address.conversationId;
1506
1524
  const conversationDir = office.dir;
1507
1525
  const workspaceDir = office.workspace.root;
@@ -1560,6 +1578,10 @@ export async function createRunner(options) {
1560
1578
  platformReactor,
1561
1579
  platformUploader,
1562
1580
  platformBlockKit,
1581
+ platformDmOpener,
1582
+ platformHistoryFetcher,
1583
+ platformUserLister,
1584
+ extensionScheduleEngine,
1563
1585
  });
1564
1586
  // Mutable per-run state - event handler references this
1565
1587
  const runState = createRunState();
@@ -1773,6 +1795,9 @@ export async function createRunner(options) {
1773
1795
  async tryExtensionAction(slug, action) {
1774
1796
  return extensionRegistry.dispatchAction(slug, action);
1775
1797
  },
1798
+ async tryExtensionScheduleCallback(slug, callback, event) {
1799
+ return extensionRegistry.dispatchScheduleCallback(slug, callback, event);
1800
+ },
1776
1801
  async dispose() {
1777
1802
  await disposeExtensions();
1778
1803
  },