@geminixiang/mikan 1.0.0-beta.8 → 1.0.0-beta.80

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 (900) hide show
  1. package/CHANGELOG.md +1149 -0
  2. package/README.md +98 -38
  3. package/dist/adapters/commands/admin.d.ts.map +1 -0
  4. package/dist/{commands → adapters/commands}/admin.js +12 -9
  5. package/dist/adapters/commands/admin.js.map +1 -0
  6. package/dist/{commands → adapters/commands}/auto-reply.d.ts +0 -3
  7. package/dist/adapters/commands/auto-reply.d.ts.map +1 -0
  8. package/dist/adapters/commands/auto-reply.js +47 -0
  9. package/dist/adapters/commands/auto-reply.js.map +1 -0
  10. package/dist/adapters/commands/login.d.ts +6 -0
  11. package/dist/adapters/commands/login.d.ts.map +1 -0
  12. package/dist/adapters/commands/login.js +158 -0
  13. package/dist/adapters/commands/login.js.map +1 -0
  14. package/dist/adapters/commands/manifest.d.ts +17 -0
  15. package/dist/adapters/commands/manifest.d.ts.map +1 -0
  16. package/dist/adapters/commands/manifest.js +121 -0
  17. package/dist/adapters/commands/manifest.js.map +1 -0
  18. package/dist/adapters/commands/model.d.ts +9 -0
  19. package/dist/adapters/commands/model.d.ts.map +1 -0
  20. package/dist/adapters/commands/model.js +136 -0
  21. package/dist/adapters/commands/model.js.map +1 -0
  22. package/dist/adapters/commands/new.d.ts.map +1 -0
  23. package/dist/adapters/commands/new.js +39 -0
  24. package/dist/adapters/commands/new.js.map +1 -0
  25. package/dist/adapters/commands/registry.d.ts +4 -0
  26. package/dist/adapters/commands/registry.d.ts.map +1 -0
  27. package/dist/adapters/commands/registry.js +35 -0
  28. package/dist/adapters/commands/registry.js.map +1 -0
  29. package/dist/{commands → adapters/commands}/sandbox.d.ts +0 -1
  30. package/dist/adapters/commands/sandbox.d.ts.map +1 -0
  31. package/dist/adapters/commands/sandbox.js +125 -0
  32. package/dist/adapters/commands/sandbox.js.map +1 -0
  33. package/dist/adapters/commands/session-view.d.ts.map +1 -0
  34. package/dist/{commands → adapters/commands}/session-view.js +21 -16
  35. package/dist/adapters/commands/session-view.js.map +1 -0
  36. package/dist/adapters/commands/types.d.ts +105 -0
  37. package/dist/adapters/commands/types.d.ts.map +1 -0
  38. package/dist/adapters/commands/types.js.map +1 -0
  39. package/dist/adapters/commands/utils.d.ts +11 -0
  40. package/dist/adapters/commands/utils.d.ts.map +1 -0
  41. package/dist/{commands → adapters/commands}/utils.js +15 -1
  42. package/dist/adapters/commands/utils.js.map +1 -0
  43. package/dist/adapters/discord/bot.d.ts +10 -17
  44. package/dist/adapters/discord/bot.d.ts.map +1 -1
  45. package/dist/adapters/discord/bot.js +232 -297
  46. package/dist/adapters/discord/bot.js.map +1 -1
  47. package/dist/adapters/discord/components.d.ts +4 -0
  48. package/dist/adapters/discord/components.d.ts.map +1 -0
  49. package/dist/adapters/discord/components.js +9 -0
  50. package/dist/adapters/discord/components.js.map +1 -0
  51. package/dist/adapters/discord/context.d.ts +3 -7
  52. package/dist/adapters/discord/context.d.ts.map +1 -1
  53. package/dist/adapters/discord/context.js +55 -219
  54. package/dist/adapters/discord/context.js.map +1 -1
  55. package/dist/adapters/discord/format.d.ts +2 -0
  56. package/dist/adapters/discord/format.d.ts.map +1 -0
  57. package/dist/adapters/discord/format.js +47 -0
  58. package/dist/adapters/discord/format.js.map +1 -0
  59. package/dist/adapters/discord/types.d.ts +90 -1
  60. package/dist/adapters/discord/types.d.ts.map +1 -1
  61. package/dist/adapters/discord/types.js.map +1 -1
  62. package/dist/adapters/github/bot.d.ts +25 -9
  63. package/dist/adapters/github/bot.d.ts.map +1 -1
  64. package/dist/adapters/github/bot.js +326 -154
  65. package/dist/adapters/github/bot.js.map +1 -1
  66. package/dist/adapters/github/client.d.ts +35 -23
  67. package/dist/adapters/github/client.d.ts.map +1 -1
  68. package/dist/adapters/github/client.js +121 -28
  69. package/dist/adapters/github/client.js.map +1 -1
  70. package/dist/adapters/github/context.d.ts +3 -8
  71. package/dist/adapters/github/context.d.ts.map +1 -1
  72. package/dist/adapters/github/context.js +64 -131
  73. package/dist/adapters/github/context.js.map +1 -1
  74. package/dist/adapters/github/github-ops.d.ts +22 -0
  75. package/dist/adapters/github/github-ops.d.ts.map +1 -0
  76. package/dist/adapters/github/github-ops.js +277 -0
  77. package/dist/adapters/github/github-ops.js.map +1 -0
  78. package/dist/adapters/github/ids.d.ts +2 -23
  79. package/dist/adapters/github/ids.d.ts.map +1 -1
  80. package/dist/adapters/github/ids.js +6 -36
  81. package/dist/adapters/github/ids.js.map +1 -1
  82. package/dist/adapters/github/repo.d.ts +8 -0
  83. package/dist/adapters/github/repo.d.ts.map +1 -0
  84. package/dist/adapters/github/repo.js +92 -0
  85. package/dist/adapters/github/repo.js.map +1 -0
  86. package/dist/adapters/github/tool-pack.d.ts +4 -0
  87. package/dist/adapters/github/tool-pack.d.ts.map +1 -0
  88. package/dist/adapters/github/tool-pack.js +45 -0
  89. package/dist/adapters/github/tool-pack.js.map +1 -0
  90. package/dist/adapters/github/tools/checks.d.ts +14 -0
  91. package/dist/adapters/github/tools/checks.d.ts.map +1 -0
  92. package/dist/adapters/github/tools/checks.js +80 -0
  93. package/dist/adapters/github/tools/checks.js.map +1 -0
  94. package/dist/adapters/github/tools/issue.d.ts +18 -0
  95. package/dist/adapters/github/tools/issue.d.ts.map +1 -0
  96. package/dist/adapters/github/tools/issue.js +44 -0
  97. package/dist/adapters/github/tools/issue.js.map +1 -0
  98. package/dist/adapters/github/tools/pr.d.ts +17 -0
  99. package/dist/adapters/github/tools/pr.d.ts.map +1 -0
  100. package/dist/adapters/github/tools/pr.js +42 -0
  101. package/dist/adapters/github/tools/pr.js.map +1 -0
  102. package/dist/adapters/github/tools/read.d.ts +17 -0
  103. package/dist/adapters/github/tools/read.d.ts.map +1 -0
  104. package/dist/adapters/github/tools/read.js +134 -0
  105. package/dist/adapters/github/tools/read.js.map +1 -0
  106. package/dist/adapters/github/tools/review-reply.d.ts +14 -0
  107. package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
  108. package/dist/adapters/github/tools/review-reply.js +34 -0
  109. package/dist/adapters/github/tools/review-reply.js.map +1 -0
  110. package/dist/adapters/github/tools/sync.d.ts +13 -0
  111. package/dist/adapters/github/tools/sync.d.ts.map +1 -0
  112. package/dist/adapters/github/tools/sync.js +29 -0
  113. package/dist/adapters/github/tools/sync.js.map +1 -0
  114. package/dist/adapters/github/types.d.ts +197 -18
  115. package/dist/adapters/github/types.d.ts.map +1 -1
  116. package/dist/adapters/github/types.js.map +1 -1
  117. package/dist/adapters/github/webhook.d.ts +6 -0
  118. package/dist/adapters/github/webhook.d.ts.map +1 -0
  119. package/dist/adapters/github/webhook.js +62 -0
  120. package/dist/adapters/github/webhook.js.map +1 -0
  121. package/dist/adapters/intake.d.ts +4 -10
  122. package/dist/adapters/intake.d.ts.map +1 -1
  123. package/dist/adapters/intake.js +74 -31
  124. package/dist/adapters/intake.js.map +1 -1
  125. package/dist/adapters/markdown-tables.d.ts +8 -0
  126. package/dist/adapters/markdown-tables.d.ts.map +1 -0
  127. package/dist/adapters/markdown-tables.js +111 -0
  128. package/dist/adapters/markdown-tables.js.map +1 -0
  129. package/dist/{platform-messages.d.ts → adapters/messages.d.ts} +3 -2
  130. package/dist/adapters/messages.d.ts.map +1 -0
  131. package/dist/{platform-messages.js → adapters/messages.js} +4 -1
  132. package/dist/adapters/messages.js.map +1 -0
  133. package/dist/adapters/progressive-renderer.d.ts +7 -0
  134. package/dist/adapters/progressive-renderer.d.ts.map +1 -0
  135. package/dist/adapters/progressive-renderer.js +423 -0
  136. package/dist/adapters/progressive-renderer.js.map +1 -0
  137. package/dist/adapters/shared.d.ts +24 -53
  138. package/dist/adapters/shared.d.ts.map +1 -1
  139. package/dist/adapters/shared.js +140 -91
  140. package/dist/adapters/shared.js.map +1 -1
  141. package/dist/adapters/slack/assistant.d.ts +23 -0
  142. package/dist/adapters/slack/assistant.d.ts.map +1 -0
  143. package/dist/adapters/slack/assistant.js +109 -0
  144. package/dist/adapters/slack/assistant.js.map +1 -0
  145. package/dist/adapters/slack/auto-reply-context.d.ts +14 -0
  146. package/dist/adapters/slack/auto-reply-context.d.ts.map +1 -0
  147. package/dist/adapters/slack/auto-reply-context.js +21 -0
  148. package/dist/adapters/slack/auto-reply-context.js.map +1 -0
  149. package/dist/adapters/slack/blocks.d.ts +5 -0
  150. package/dist/adapters/slack/blocks.d.ts.map +1 -1
  151. package/dist/adapters/slack/blocks.js +84 -148
  152. package/dist/adapters/slack/blocks.js.map +1 -1
  153. package/dist/adapters/slack/bot.d.ts +51 -39
  154. package/dist/adapters/slack/bot.d.ts.map +1 -1
  155. package/dist/adapters/slack/bot.js +892 -567
  156. package/dist/adapters/slack/bot.js.map +1 -1
  157. package/dist/adapters/slack/context.d.ts +3 -9
  158. package/dist/adapters/slack/context.d.ts.map +1 -1
  159. package/dist/adapters/slack/context.js +8 -17
  160. package/dist/adapters/slack/context.js.map +1 -1
  161. package/dist/adapters/slack/jev-context.d.ts +17 -0
  162. package/dist/adapters/slack/jev-context.d.ts.map +1 -0
  163. package/dist/adapters/slack/jev-context.js +57 -0
  164. package/dist/adapters/slack/jev-context.js.map +1 -0
  165. package/dist/adapters/slack/markdown.d.ts +2 -0
  166. package/dist/adapters/slack/markdown.d.ts.map +1 -0
  167. package/dist/adapters/slack/markdown.js +43 -0
  168. package/dist/adapters/slack/markdown.js.map +1 -0
  169. package/dist/adapters/slack/persona.d.ts +6 -0
  170. package/dist/adapters/slack/persona.d.ts.map +1 -0
  171. package/dist/adapters/slack/persona.js +13 -0
  172. package/dist/adapters/slack/persona.js.map +1 -0
  173. package/dist/adapters/slack/response-lifecycle.d.ts +3 -4
  174. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  175. package/dist/adapters/slack/response-lifecycle.js +221 -347
  176. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  177. package/dist/adapters/slack/session.d.ts +3 -2
  178. package/dist/adapters/slack/session.d.ts.map +1 -1
  179. package/dist/adapters/slack/session.js +9 -13
  180. package/dist/adapters/slack/session.js.map +1 -1
  181. package/dist/adapters/slack/stream-limits.d.ts +10 -0
  182. package/dist/adapters/slack/stream-limits.d.ts.map +1 -0
  183. package/dist/adapters/slack/stream-limits.js +22 -0
  184. package/dist/adapters/slack/stream-limits.js.map +1 -0
  185. package/dist/adapters/slack/task-intent.d.ts +19 -0
  186. package/dist/adapters/slack/task-intent.d.ts.map +1 -0
  187. package/dist/adapters/slack/task-intent.js +65 -0
  188. package/dist/adapters/slack/task-intent.js.map +1 -0
  189. package/dist/adapters/slack/task-status.d.ts +6 -0
  190. package/dist/adapters/slack/task-status.d.ts.map +1 -0
  191. package/dist/adapters/slack/task-status.js +100 -0
  192. package/dist/adapters/slack/task-status.js.map +1 -0
  193. package/dist/adapters/slack/tool-pack.d.ts +4 -0
  194. package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
  195. package/dist/adapters/slack/tool-pack.js +40 -0
  196. package/dist/adapters/slack/tool-pack.js.map +1 -0
  197. package/dist/adapters/slack/tools/blockkit.d.ts +17 -0
  198. package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
  199. package/dist/adapters/slack/tools/blockkit.js +98 -0
  200. package/dist/adapters/slack/tools/blockkit.js.map +1 -0
  201. package/dist/adapters/slack/types.d.ts +91 -5
  202. package/dist/adapters/slack/types.d.ts.map +1 -1
  203. package/dist/adapters/slack/types.js.map +1 -1
  204. package/dist/adapters/slack/update-diagnostics.d.ts +13 -0
  205. package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -0
  206. package/dist/adapters/slack/update-diagnostics.js +128 -0
  207. package/dist/adapters/slack/update-diagnostics.js.map +1 -0
  208. package/dist/adapters/telegram/bot.d.ts +8 -18
  209. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  210. package/dist/adapters/telegram/bot.js +114 -232
  211. package/dist/adapters/telegram/bot.js.map +1 -1
  212. package/dist/adapters/telegram/context.d.ts +3 -7
  213. package/dist/adapters/telegram/context.d.ts.map +1 -1
  214. package/dist/adapters/telegram/context.js +47 -191
  215. package/dist/adapters/telegram/context.js.map +1 -1
  216. package/dist/adapters/telegram/types.d.ts +24 -1
  217. package/dist/adapters/telegram/types.d.ts.map +1 -1
  218. package/dist/adapters/telegram/types.js.map +1 -1
  219. package/dist/adapters/types.d.ts +89 -16
  220. package/dist/adapters/types.d.ts.map +1 -1
  221. package/dist/adapters/types.js.map +1 -1
  222. package/dist/adapters/web/admin/client-assets.d.ts +4 -0
  223. package/dist/adapters/web/admin/client-assets.d.ts.map +1 -0
  224. package/dist/adapters/web/admin/client-assets.js +1766 -0
  225. package/dist/adapters/web/admin/client-assets.js.map +1 -0
  226. package/dist/adapters/web/admin/portal.d.ts +27 -0
  227. package/dist/adapters/web/admin/portal.d.ts.map +1 -0
  228. package/dist/adapters/web/admin/portal.js +1506 -0
  229. package/dist/adapters/web/admin/portal.js.map +1 -0
  230. package/dist/{web → adapters/web}/admin/provider-models.d.ts +1 -1
  231. package/dist/adapters/web/admin/provider-models.d.ts.map +1 -0
  232. package/dist/{web → adapters/web}/admin/provider-models.js +1 -1
  233. package/dist/adapters/web/admin/provider-models.js.map +1 -0
  234. package/dist/adapters/web/admin/types.d.ts +56 -0
  235. package/dist/adapters/web/admin/types.d.ts.map +1 -0
  236. package/dist/adapters/web/admin/types.js.map +1 -0
  237. package/dist/adapters/web/login/oauth.d.ts +4 -0
  238. package/dist/adapters/web/login/oauth.d.ts.map +1 -0
  239. package/dist/{web → adapters/web}/login/oauth.js +61 -100
  240. package/dist/adapters/web/login/oauth.js.map +1 -0
  241. package/dist/adapters/web/login/portal.d.ts +10 -0
  242. package/dist/adapters/web/login/portal.d.ts.map +1 -0
  243. package/dist/{web → adapters/web}/login/portal.js +169 -159
  244. package/dist/adapters/web/login/portal.js.map +1 -0
  245. package/dist/{web → adapters/web}/login/types.d.ts +1 -17
  246. package/dist/adapters/web/login/types.d.ts.map +1 -0
  247. package/dist/adapters/web/login/types.js.map +1 -0
  248. package/dist/adapters/web/portal-shell.d.ts +9 -0
  249. package/dist/adapters/web/portal-shell.d.ts.map +1 -0
  250. package/dist/{portal-shell.js → adapters/web/portal-shell.js} +73 -11
  251. package/dist/adapters/web/portal-shell.js.map +1 -0
  252. package/dist/adapters/web/server.d.ts +33 -0
  253. package/dist/adapters/web/server.d.ts.map +1 -0
  254. package/dist/{web → adapters/web}/server.js +15 -9
  255. package/dist/adapters/web/server.js.map +1 -0
  256. package/dist/adapters/web/session-view/portal.d.ts +19 -0
  257. package/dist/adapters/web/session-view/portal.d.ts.map +1 -0
  258. package/dist/{web → adapters/web}/session-view/portal.js +641 -181
  259. package/dist/adapters/web/session-view/portal.js.map +1 -0
  260. package/dist/{web → adapters/web}/session-view/types.d.ts +1 -6
  261. package/dist/adapters/web/session-view/types.d.ts.map +1 -0
  262. package/dist/adapters/web/session-view/types.js.map +1 -0
  263. package/dist/{web → adapters/web}/token-store.d.ts +0 -3
  264. package/dist/adapters/web/token-store.d.ts.map +1 -0
  265. package/dist/{web → adapters/web}/token-store.js +1 -3
  266. package/dist/adapters/web/token-store.js.map +1 -0
  267. package/dist/adapters/web/types.d.ts.map +1 -0
  268. package/dist/adapters/web/types.js.map +1 -0
  269. package/dist/cli/arg-grammar.d.ts +8 -0
  270. package/dist/cli/arg-grammar.d.ts.map +1 -0
  271. package/dist/cli/arg-grammar.js +47 -0
  272. package/dist/cli/arg-grammar.js.map +1 -0
  273. package/dist/cli/boot.d.ts +4 -0
  274. package/dist/cli/boot.d.ts.map +1 -0
  275. package/dist/cli/boot.js +81 -0
  276. package/dist/cli/boot.js.map +1 -0
  277. package/dist/cli/download.d.ts.map +1 -0
  278. package/dist/cli/download.js +84 -0
  279. package/dist/cli/download.js.map +1 -0
  280. package/dist/cli/office.d.ts +2 -0
  281. package/dist/cli/office.d.ts.map +1 -0
  282. package/dist/cli/office.js +151 -0
  283. package/dist/cli/office.js.map +1 -0
  284. package/dist/cli/onboard.d.ts +8 -0
  285. package/dist/cli/onboard.d.ts.map +1 -0
  286. package/dist/cli/onboard.js +195 -0
  287. package/dist/cli/onboard.js.map +1 -0
  288. package/dist/cli/process-lifecycle.d.ts +14 -0
  289. package/dist/cli/process-lifecycle.d.ts.map +1 -0
  290. package/dist/cli/process-lifecycle.js +61 -0
  291. package/dist/cli/process-lifecycle.js.map +1 -0
  292. package/dist/cli/sandbox.d.ts +3 -0
  293. package/dist/cli/sandbox.d.ts.map +1 -0
  294. package/dist/cli/sandbox.js +80 -0
  295. package/dist/cli/sandbox.js.map +1 -0
  296. package/dist/cli/sessions.d.ts +2 -0
  297. package/dist/cli/sessions.d.ts.map +1 -0
  298. package/dist/cli/sessions.js +78 -0
  299. package/dist/cli/sessions.js.map +1 -0
  300. package/dist/cli/types.d.ts +21 -0
  301. package/dist/cli/types.d.ts.map +1 -0
  302. package/dist/cli/types.js.map +1 -0
  303. package/dist/env-manifest.d.ts +17 -0
  304. package/dist/env-manifest.d.ts.map +1 -0
  305. package/dist/env-manifest.js +249 -0
  306. package/dist/env-manifest.js.map +1 -0
  307. package/dist/events/index.d.ts +122 -0
  308. package/dist/events/index.d.ts.map +1 -0
  309. package/dist/events/index.js +299 -0
  310. package/dist/events/index.js.map +1 -0
  311. package/dist/events/scheduler.d.ts +25 -0
  312. package/dist/events/scheduler.d.ts.map +1 -0
  313. package/dist/events/scheduler.js +223 -0
  314. package/dist/events/scheduler.js.map +1 -0
  315. package/dist/file-guards.d.ts +13 -0
  316. package/dist/file-guards.d.ts.map +1 -0
  317. package/dist/file-guards.js +104 -0
  318. package/dist/file-guards.js.map +1 -0
  319. package/dist/harness/execution-env.d.ts +4 -0
  320. package/dist/harness/execution-env.d.ts.map +1 -0
  321. package/dist/harness/execution-env.js +245 -0
  322. package/dist/harness/execution-env.js.map +1 -0
  323. package/dist/harness/execution-resolver.d.ts +23 -0
  324. package/dist/harness/execution-resolver.d.ts.map +1 -0
  325. package/dist/harness/execution-resolver.js +156 -0
  326. package/dist/harness/execution-resolver.js.map +1 -0
  327. package/dist/harness/http.d.ts +0 -12
  328. package/dist/harness/http.d.ts.map +1 -1
  329. package/dist/harness/http.js +0 -34
  330. package/dist/harness/http.js.map +1 -1
  331. package/dist/harness/index.d.ts +19 -17
  332. package/dist/harness/index.d.ts.map +1 -1
  333. package/dist/harness/index.js +12 -15
  334. package/dist/harness/index.js.map +1 -1
  335. package/dist/harness/jev.d.ts +67 -0
  336. package/dist/harness/jev.d.ts.map +1 -0
  337. package/dist/harness/jev.js +135 -0
  338. package/dist/harness/jev.js.map +1 -0
  339. package/dist/harness/mcp-result.d.ts +20 -0
  340. package/dist/harness/mcp-result.d.ts.map +1 -0
  341. package/dist/harness/mcp-result.js +179 -0
  342. package/dist/harness/mcp-result.js.map +1 -0
  343. package/dist/harness/mcp.d.ts +17 -0
  344. package/dist/harness/mcp.d.ts.map +1 -0
  345. package/dist/harness/mcp.js +243 -0
  346. package/dist/harness/mcp.js.map +1 -0
  347. package/dist/harness/models.d.ts +2 -19
  348. package/dist/harness/models.d.ts.map +1 -1
  349. package/dist/harness/models.js +42 -94
  350. package/dist/harness/models.js.map +1 -1
  351. package/dist/harness/open-connector.d.ts +12 -0
  352. package/dist/harness/open-connector.d.ts.map +1 -0
  353. package/dist/harness/open-connector.js +160 -0
  354. package/dist/harness/open-connector.js.map +1 -0
  355. package/dist/harness/presenter.d.ts +11 -0
  356. package/dist/harness/presenter.d.ts.map +1 -0
  357. package/dist/harness/presenter.js +824 -0
  358. package/dist/harness/presenter.js.map +1 -0
  359. package/dist/harness/prompt.d.ts +18 -0
  360. package/dist/harness/prompt.d.ts.map +1 -0
  361. package/dist/harness/prompt.js +403 -0
  362. package/dist/harness/prompt.js.map +1 -0
  363. package/dist/harness/runner.d.ts +2 -123
  364. package/dist/harness/runner.d.ts.map +1 -1
  365. package/dist/harness/runner.js +547 -415
  366. package/dist/harness/runner.js.map +1 -1
  367. package/dist/harness/session.d.ts +98 -0
  368. package/dist/harness/session.d.ts.map +1 -0
  369. package/dist/harness/session.js +645 -0
  370. package/dist/harness/session.js.map +1 -0
  371. package/dist/harness/skills.d.ts +7 -41
  372. package/dist/harness/skills.d.ts.map +1 -1
  373. package/dist/harness/skills.js +101 -55
  374. package/dist/harness/skills.js.map +1 -1
  375. package/dist/harness/subagent-profiles.d.ts +3 -0
  376. package/dist/harness/subagent-profiles.d.ts.map +1 -0
  377. package/dist/harness/subagent-profiles.js +260 -0
  378. package/dist/harness/subagent-profiles.js.map +1 -0
  379. package/dist/harness/subagent.d.ts +39 -0
  380. package/dist/harness/subagent.d.ts.map +1 -0
  381. package/dist/harness/subagent.js +618 -0
  382. package/dist/harness/subagent.js.map +1 -0
  383. package/dist/harness/tool-args.d.ts +2 -0
  384. package/dist/harness/tool-args.d.ts.map +1 -0
  385. package/dist/harness/tool-args.js +20 -0
  386. package/dist/harness/tool-args.js.map +1 -0
  387. package/dist/harness/tools/attach.d.ts +13 -0
  388. package/dist/harness/tools/attach.d.ts.map +1 -0
  389. package/dist/{adapters/slack → harness}/tools/attach.js +2 -2
  390. package/dist/harness/tools/attach.js.map +1 -0
  391. package/dist/harness/tools/event.d.ts +28 -0
  392. package/dist/harness/tools/event.d.ts.map +1 -0
  393. package/dist/harness/tools/event.js +166 -0
  394. package/dist/harness/tools/event.js.map +1 -0
  395. package/dist/harness/tools/generate-image.d.ts +20 -0
  396. package/dist/harness/tools/generate-image.d.ts.map +1 -0
  397. package/dist/harness/tools/generate-image.js +68 -0
  398. package/dist/harness/tools/generate-image.js.map +1 -0
  399. package/dist/harness/tools/host-fn-tool.d.ts +14 -0
  400. package/dist/harness/tools/host-fn-tool.d.ts.map +1 -0
  401. package/dist/harness/tools/host-fn-tool.js +39 -0
  402. package/dist/harness/tools/host-fn-tool.js.map +1 -0
  403. package/dist/harness/tools/index.d.ts +34 -0
  404. package/dist/harness/tools/index.d.ts.map +1 -0
  405. package/dist/harness/tools/index.js +49 -0
  406. package/dist/harness/tools/index.js.map +1 -0
  407. package/dist/harness/tools/jev-browser.d.ts +42 -0
  408. package/dist/harness/tools/jev-browser.d.ts.map +1 -0
  409. package/dist/harness/tools/jev-browser.js +547 -0
  410. package/dist/harness/tools/jev-browser.js.map +1 -0
  411. package/dist/harness/tools/jev.d.ts +15 -0
  412. package/dist/harness/tools/jev.d.ts.map +1 -0
  413. package/dist/harness/tools/jev.js +98 -0
  414. package/dist/harness/tools/jev.js.map +1 -0
  415. package/dist/harness/tools/pi-tools.d.ts +8 -0
  416. package/dist/harness/tools/pi-tools.d.ts.map +1 -0
  417. package/dist/harness/tools/pi-tools.js +55 -0
  418. package/dist/harness/tools/pi-tools.js.map +1 -0
  419. package/dist/harness/tools/react.d.ts +11 -0
  420. package/dist/harness/tools/react.d.ts.map +1 -0
  421. package/dist/harness/tools/react.js +24 -0
  422. package/dist/harness/tools/react.js.map +1 -0
  423. package/dist/harness/tools/sandbox.d.ts +24 -0
  424. package/dist/harness/tools/sandbox.d.ts.map +1 -0
  425. package/dist/{tools → harness/tools}/sandbox.js +15 -9
  426. package/dist/harness/tools/sandbox.js.map +1 -0
  427. package/dist/harness/tools/secret-redaction.d.ts +9 -0
  428. package/dist/harness/tools/secret-redaction.d.ts.map +1 -0
  429. package/dist/harness/tools/secret-redaction.js +44 -0
  430. package/dist/harness/tools/secret-redaction.js.map +1 -0
  431. package/dist/harness/tools/subagent.d.ts +51 -0
  432. package/dist/harness/tools/subagent.d.ts.map +1 -0
  433. package/dist/harness/tools/subagent.js +581 -0
  434. package/dist/harness/tools/subagent.js.map +1 -0
  435. package/dist/harness/tools/task.d.ts +22 -0
  436. package/dist/harness/tools/task.d.ts.map +1 -0
  437. package/dist/harness/tools/task.js +80 -0
  438. package/dist/harness/tools/task.js.map +1 -0
  439. package/dist/harness/tools/types.d.ts +14 -0
  440. package/dist/harness/tools/types.d.ts.map +1 -0
  441. package/dist/harness/tools/types.js.map +1 -0
  442. package/dist/harness/types.d.ts +345 -29
  443. package/dist/harness/types.d.ts.map +1 -1
  444. package/dist/harness/types.js +1 -1
  445. package/dist/harness/types.js.map +1 -1
  446. package/dist/index.d.ts +36 -9
  447. package/dist/index.d.ts.map +1 -1
  448. package/dist/index.js +19 -7
  449. package/dist/index.js.map +1 -1
  450. package/dist/log.d.ts +0 -1
  451. package/dist/log.d.ts.map +1 -1
  452. package/dist/log.js +3 -13
  453. package/dist/log.js.map +1 -1
  454. package/dist/main.js +300 -217
  455. package/dist/main.js.map +1 -1
  456. package/dist/memory-capture/index.d.ts +15 -0
  457. package/dist/memory-capture/index.d.ts.map +1 -0
  458. package/dist/memory-capture/index.js +199 -0
  459. package/dist/memory-capture/index.js.map +1 -0
  460. package/dist/memory-capture/types.d.ts +27 -0
  461. package/dist/memory-capture/types.d.ts.map +1 -0
  462. package/dist/memory-capture/types.js +2 -0
  463. package/dist/memory-capture/types.js.map +1 -0
  464. package/dist/observability/index.d.ts +30 -0
  465. package/dist/observability/index.d.ts.map +1 -0
  466. package/dist/observability/index.js +273 -0
  467. package/dist/observability/index.js.map +1 -0
  468. package/dist/observability/instrument.js +9 -6
  469. package/dist/observability/instrument.js.map +1 -1
  470. package/dist/observability/otel.d.ts +10 -0
  471. package/dist/observability/otel.d.ts.map +1 -0
  472. package/dist/observability/otel.js +182 -0
  473. package/dist/observability/otel.js.map +1 -0
  474. package/dist/observability/sentry.d.ts +32 -13
  475. package/dist/observability/sentry.d.ts.map +1 -1
  476. package/dist/observability/sentry.js +85 -58
  477. package/dist/observability/sentry.js.map +1 -1
  478. package/dist/observability/types.d.ts +30 -3
  479. package/dist/observability/types.d.ts.map +1 -1
  480. package/dist/observability/types.js.map +1 -1
  481. package/dist/office/index.d.ts +74 -0
  482. package/dist/office/index.d.ts.map +1 -0
  483. package/dist/office/index.js +971 -0
  484. package/dist/office/index.js.map +1 -0
  485. package/dist/office/projection.d.ts +11 -0
  486. package/dist/office/projection.d.ts.map +1 -0
  487. package/dist/office/projection.js +146 -0
  488. package/dist/office/projection.js.map +1 -0
  489. package/dist/office/types.d.ts +55 -0
  490. package/dist/office/types.d.ts.map +1 -0
  491. package/dist/office/types.js +2 -0
  492. package/dist/office/types.js.map +1 -0
  493. package/dist/runtime/conversation-runtime.d.ts +0 -1
  494. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  495. package/dist/runtime/conversation-runtime.js +375 -152
  496. package/dist/runtime/conversation-runtime.js.map +1 -1
  497. package/dist/runtime/session-lifecycle.d.ts +66 -0
  498. package/dist/runtime/session-lifecycle.d.ts.map +1 -0
  499. package/dist/runtime/session-lifecycle.js +393 -0
  500. package/dist/runtime/session-lifecycle.js.map +1 -0
  501. package/dist/runtime/types.d.ts +41 -17
  502. package/dist/runtime/types.d.ts.map +1 -1
  503. package/dist/runtime/types.js.map +1 -1
  504. package/dist/sandbox/cloudflare.d.ts +4 -0
  505. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  506. package/dist/sandbox/cloudflare.js +59 -55
  507. package/dist/sandbox/cloudflare.js.map +1 -1
  508. package/dist/sandbox/container.d.ts +3 -0
  509. package/dist/sandbox/container.d.ts.map +1 -1
  510. package/dist/sandbox/container.js +39 -20
  511. package/dist/sandbox/container.js.map +1 -1
  512. package/dist/sandbox/host.d.ts +3 -0
  513. package/dist/sandbox/host.d.ts.map +1 -1
  514. package/dist/sandbox/host.js +42 -35
  515. package/dist/sandbox/host.js.map +1 -1
  516. package/dist/sandbox/identity.d.ts +13 -0
  517. package/dist/sandbox/identity.d.ts.map +1 -0
  518. package/dist/sandbox/identity.js +49 -0
  519. package/dist/sandbox/identity.js.map +1 -0
  520. package/dist/sandbox/index.d.ts +5 -15
  521. package/dist/sandbox/index.d.ts.map +1 -1
  522. package/dist/sandbox/index.js +5 -51
  523. package/dist/sandbox/index.js.map +1 -1
  524. package/dist/sandbox/layout.d.ts +7 -0
  525. package/dist/sandbox/layout.d.ts.map +1 -0
  526. package/dist/sandbox/layout.js +13 -0
  527. package/dist/sandbox/layout.js.map +1 -0
  528. package/dist/{provisioner.d.ts → sandbox/provisioner.d.ts} +41 -4
  529. package/dist/sandbox/provisioner.d.ts.map +1 -0
  530. package/dist/sandbox/provisioner.js +971 -0
  531. package/dist/sandbox/provisioner.js.map +1 -0
  532. package/dist/sandbox/registry.d.ts +12 -0
  533. package/dist/sandbox/registry.d.ts.map +1 -0
  534. package/dist/sandbox/registry.js +93 -0
  535. package/dist/sandbox/registry.js.map +1 -0
  536. package/dist/sandbox/types.d.ts +23 -25
  537. package/dist/sandbox/types.d.ts.map +1 -1
  538. package/dist/sandbox/types.js.map +1 -1
  539. package/dist/sandbox/utils.d.ts +21 -0
  540. package/dist/sandbox/utils.d.ts.map +1 -1
  541. package/dist/sandbox/utils.js +100 -8
  542. package/dist/sandbox/utils.js.map +1 -1
  543. package/dist/sessions/chat-history-sync.d.ts +17 -0
  544. package/dist/sessions/chat-history-sync.d.ts.map +1 -0
  545. package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +224 -183
  546. package/dist/sessions/chat-history-sync.js.map +1 -0
  547. package/dist/sessions/history-line.d.ts +9 -0
  548. package/dist/sessions/history-line.d.ts.map +1 -0
  549. package/dist/sessions/history-line.js +25 -0
  550. package/dist/sessions/history-line.js.map +1 -0
  551. package/dist/sessions/migrate-common.d.ts +28 -0
  552. package/dist/sessions/migrate-common.d.ts.map +1 -0
  553. package/dist/sessions/migrate-common.js +80 -0
  554. package/dist/sessions/migrate-common.js.map +1 -0
  555. package/dist/sessions/migrate-pi-084.d.ts +7 -0
  556. package/dist/sessions/migrate-pi-084.d.ts.map +1 -0
  557. package/dist/sessions/migrate-pi-084.js +293 -0
  558. package/dist/sessions/migrate-pi-084.js.map +1 -0
  559. package/dist/sessions/migrate-v3.d.ts +7 -0
  560. package/dist/sessions/migrate-v3.d.ts.map +1 -0
  561. package/dist/sessions/migrate-v3.js +351 -0
  562. package/dist/sessions/migrate-v3.js.map +1 -0
  563. package/dist/sessions/session-key.d.ts +18 -0
  564. package/dist/sessions/session-key.d.ts.map +1 -0
  565. package/dist/sessions/session-key.js +88 -0
  566. package/dist/sessions/session-key.js.map +1 -0
  567. package/dist/sessions/session-store.d.ts +55 -0
  568. package/dist/sessions/session-store.d.ts.map +1 -0
  569. package/dist/sessions/session-store.js +635 -0
  570. package/dist/sessions/session-store.js.map +1 -0
  571. package/dist/sessions/store.d.ts +7 -61
  572. package/dist/sessions/store.d.ts.map +1 -1
  573. package/dist/sessions/store.js +126 -102
  574. package/dist/sessions/store.js.map +1 -1
  575. package/dist/sessions/types.d.ts +59 -8
  576. package/dist/sessions/types.d.ts.map +1 -1
  577. package/dist/sessions/types.js +2 -1
  578. package/dist/sessions/types.js.map +1 -1
  579. package/dist/settings/apply.d.ts +9 -0
  580. package/dist/settings/apply.d.ts.map +1 -0
  581. package/dist/settings/apply.js +31 -0
  582. package/dist/settings/apply.js.map +1 -0
  583. package/dist/settings/index.d.ts +76 -0
  584. package/dist/settings/index.d.ts.map +1 -0
  585. package/dist/settings/index.js +351 -0
  586. package/dist/settings/index.js.map +1 -0
  587. package/dist/settings/migrate.d.ts +16 -0
  588. package/dist/settings/migrate.d.ts.map +1 -0
  589. package/dist/settings/migrate.js +70 -0
  590. package/dist/settings/migrate.js.map +1 -0
  591. package/dist/types.d.ts +231 -173
  592. package/dist/types.d.ts.map +1 -1
  593. package/dist/types.js +1 -3
  594. package/dist/types.js.map +1 -1
  595. package/dist/unknown-values.d.ts +3 -0
  596. package/dist/unknown-values.d.ts.map +1 -0
  597. package/dist/unknown-values.js +7 -0
  598. package/dist/unknown-values.js.map +1 -0
  599. package/dist/vault/index.d.ts +35 -11
  600. package/dist/vault/index.d.ts.map +1 -1
  601. package/dist/vault/index.js +326 -115
  602. package/dist/vault/index.js.map +1 -1
  603. package/dist/vault/types.d.ts +5 -16
  604. package/dist/vault/types.d.ts.map +1 -1
  605. package/dist/vault/types.js.map +1 -1
  606. package/package.json +82 -41
  607. package/dist/adapter.d.ts +0 -2
  608. package/dist/adapter.d.ts.map +0 -1
  609. package/dist/adapter.js +0 -2
  610. package/dist/adapter.js.map +0 -1
  611. package/dist/adapters/slack/tools/attach.d.ts +0 -12
  612. package/dist/adapters/slack/tools/attach.d.ts.map +0 -1
  613. package/dist/adapters/slack/tools/attach.js.map +0 -1
  614. package/dist/adapters/streaming.d.ts +0 -18
  615. package/dist/adapters/streaming.d.ts.map +0 -1
  616. package/dist/adapters/streaming.js +0 -44
  617. package/dist/adapters/streaming.js.map +0 -1
  618. package/dist/adapters/telegram/html.d.ts +0 -3
  619. package/dist/adapters/telegram/html.d.ts.map +0 -1
  620. package/dist/adapters/telegram/html.js +0 -98
  621. package/dist/adapters/telegram/html.js.map +0 -1
  622. package/dist/agent-events.d.ts +0 -5
  623. package/dist/agent-events.d.ts.map +0 -1
  624. package/dist/agent-events.js +0 -26
  625. package/dist/agent-events.js.map +0 -1
  626. package/dist/agent.d.ts +0 -39
  627. package/dist/agent.d.ts.map +0 -1
  628. package/dist/agent.js +0 -1291
  629. package/dist/agent.js.map +0 -1
  630. package/dist/cli/ext-git.d.ts +0 -22
  631. package/dist/cli/ext-git.d.ts.map +0 -1
  632. package/dist/cli/ext-git.js +0 -76
  633. package/dist/cli/ext-git.js.map +0 -1
  634. package/dist/cli/ext.d.ts +0 -2
  635. package/dist/cli/ext.d.ts.map +0 -1
  636. package/dist/cli/ext.js +0 -217
  637. package/dist/cli/ext.js.map +0 -1
  638. package/dist/commands/admin.d.ts.map +0 -1
  639. package/dist/commands/admin.js.map +0 -1
  640. package/dist/commands/auto-reply.d.ts.map +0 -1
  641. package/dist/commands/auto-reply.js +0 -76
  642. package/dist/commands/auto-reply.js.map +0 -1
  643. package/dist/commands/extensions.d.ts +0 -14
  644. package/dist/commands/extensions.d.ts.map +0 -1
  645. package/dist/commands/extensions.js +0 -55
  646. package/dist/commands/extensions.js.map +0 -1
  647. package/dist/commands/login.d.ts +0 -5
  648. package/dist/commands/login.d.ts.map +0 -1
  649. package/dist/commands/login.js +0 -115
  650. package/dist/commands/login.js.map +0 -1
  651. package/dist/commands/model.d.ts +0 -10
  652. package/dist/commands/model.d.ts.map +0 -1
  653. package/dist/commands/model.js +0 -102
  654. package/dist/commands/model.js.map +0 -1
  655. package/dist/commands/new.d.ts.map +0 -1
  656. package/dist/commands/new.js +0 -25
  657. package/dist/commands/new.js.map +0 -1
  658. package/dist/commands/parse.d.ts +0 -7
  659. package/dist/commands/parse.d.ts.map +0 -1
  660. package/dist/commands/parse.js +0 -14
  661. package/dist/commands/parse.js.map +0 -1
  662. package/dist/commands/registry.d.ts +0 -5
  663. package/dist/commands/registry.d.ts.map +0 -1
  664. package/dist/commands/registry.js +0 -31
  665. package/dist/commands/registry.js.map +0 -1
  666. package/dist/commands/sandbox.d.ts.map +0 -1
  667. package/dist/commands/sandbox.js +0 -78
  668. package/dist/commands/sandbox.js.map +0 -1
  669. package/dist/commands/session-view.d.ts.map +0 -1
  670. package/dist/commands/session-view.js.map +0 -1
  671. package/dist/commands/types.d.ts +0 -66
  672. package/dist/commands/types.d.ts.map +0 -1
  673. package/dist/commands/types.js.map +0 -1
  674. package/dist/commands/utils.d.ts +0 -11
  675. package/dist/commands/utils.d.ts.map +0 -1
  676. package/dist/commands/utils.js.map +0 -1
  677. package/dist/config.d.ts +0 -78
  678. package/dist/config.d.ts.map +0 -1
  679. package/dist/config.js +0 -450
  680. package/dist/config.js.map +0 -1
  681. package/dist/download.d.ts.map +0 -1
  682. package/dist/download.js +0 -89
  683. package/dist/download.js.map +0 -1
  684. package/dist/events.d.ts +0 -43
  685. package/dist/events.d.ts.map +0 -1
  686. package/dist/events.js +0 -456
  687. package/dist/events.js.map +0 -1
  688. package/dist/execution-resolver.d.ts +0 -21
  689. package/dist/execution-resolver.d.ts.map +0 -1
  690. package/dist/execution-resolver.js +0 -170
  691. package/dist/execution-resolver.js.map +0 -1
  692. package/dist/harness/auth.d.ts +0 -16
  693. package/dist/harness/auth.d.ts.map +0 -1
  694. package/dist/harness/auth.js +0 -86
  695. package/dist/harness/auth.js.map +0 -1
  696. package/dist/harness/extensions/loader.d.ts +0 -86
  697. package/dist/harness/extensions/loader.d.ts.map +0 -1
  698. package/dist/harness/extensions/loader.js +0 -525
  699. package/dist/harness/extensions/loader.js.map +0 -1
  700. package/dist/harness/extensions/registry.d.ts +0 -23
  701. package/dist/harness/extensions/registry.d.ts.map +0 -1
  702. package/dist/harness/extensions/registry.js +0 -45
  703. package/dist/harness/extensions/registry.js.map +0 -1
  704. package/dist/harness/extensions/types.d.ts +0 -248
  705. package/dist/harness/extensions/types.d.ts.map +0 -1
  706. package/dist/harness/extensions/types.js.map +0 -1
  707. package/dist/harness/session-store.d.ts +0 -77
  708. package/dist/harness/session-store.d.ts.map +0 -1
  709. package/dist/harness/session-store.js +0 -248
  710. package/dist/harness/session-store.js.map +0 -1
  711. package/dist/harness/settings.d.ts +0 -47
  712. package/dist/harness/settings.d.ts.map +0 -1
  713. package/dist/harness/settings.js +0 -29
  714. package/dist/harness/settings.js.map +0 -1
  715. package/dist/model-registry.d.ts +0 -4
  716. package/dist/model-registry.d.ts.map +0 -1
  717. package/dist/model-registry.js +0 -7
  718. package/dist/model-registry.js.map +0 -1
  719. package/dist/platform-messages.d.ts.map +0 -1
  720. package/dist/platform-messages.js.map +0 -1
  721. package/dist/portal-shell.d.ts +0 -4
  722. package/dist/portal-shell.d.ts.map +0 -1
  723. package/dist/portal-shell.js.map +0 -1
  724. package/dist/provisioner.d.ts.map +0 -1
  725. package/dist/provisioner.js +0 -517
  726. package/dist/provisioner.js.map +0 -1
  727. package/dist/runtime/agent-run-controller.d.ts +0 -31
  728. package/dist/runtime/agent-run-controller.d.ts.map +0 -1
  729. package/dist/runtime/agent-run-controller.js +0 -195
  730. package/dist/runtime/agent-run-controller.js.map +0 -1
  731. package/dist/sandbox/errors.d.ts +0 -6
  732. package/dist/sandbox/errors.d.ts.map +0 -1
  733. package/dist/sandbox/errors.js +0 -11
  734. package/dist/sandbox/errors.js.map +0 -1
  735. package/dist/sandbox/firecracker.d.ts +0 -15
  736. package/dist/sandbox/firecracker.d.ts.map +0 -1
  737. package/dist/sandbox/firecracker.js +0 -212
  738. package/dist/sandbox/firecracker.js.map +0 -1
  739. package/dist/sandbox/image.d.ts +0 -3
  740. package/dist/sandbox/image.d.ts.map +0 -1
  741. package/dist/sandbox/image.js +0 -27
  742. package/dist/sandbox/image.js.map +0 -1
  743. package/dist/sandbox/path-context.d.ts +0 -3
  744. package/dist/sandbox/path-context.d.ts.map +0 -1
  745. package/dist/sandbox/path-context.js +0 -20
  746. package/dist/sandbox/path-context.js.map +0 -1
  747. package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
  748. package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
  749. package/dist/sessions/agent-memory-file-manager.js.map +0 -1
  750. package/dist/sessions/metadata.d.ts +0 -3
  751. package/dist/sessions/metadata.d.ts.map +0 -1
  752. package/dist/sessions/metadata.js +0 -11
  753. package/dist/sessions/metadata.js.map +0 -1
  754. package/dist/sessions/policy.d.ts +0 -6
  755. package/dist/sessions/policy.d.ts.map +0 -1
  756. package/dist/sessions/policy.js +0 -24
  757. package/dist/sessions/policy.js.map +0 -1
  758. package/dist/store.d.ts +0 -46
  759. package/dist/store.d.ts.map +0 -1
  760. package/dist/store.js +0 -177
  761. package/dist/store.js.map +0 -1
  762. package/dist/tools/bash.d.ts +0 -10
  763. package/dist/tools/bash.d.ts.map +0 -1
  764. package/dist/tools/bash.js +0 -80
  765. package/dist/tools/bash.js.map +0 -1
  766. package/dist/tools/edit.d.ts +0 -11
  767. package/dist/tools/edit.d.ts.map +0 -1
  768. package/dist/tools/edit.js +0 -131
  769. package/dist/tools/edit.js.map +0 -1
  770. package/dist/tools/event.d.ts +0 -56
  771. package/dist/tools/event.d.ts.map +0 -1
  772. package/dist/tools/event.js +0 -252
  773. package/dist/tools/event.js.map +0 -1
  774. package/dist/tools/index.d.ts +0 -24
  775. package/dist/tools/index.d.ts.map +0 -1
  776. package/dist/tools/index.js +0 -31
  777. package/dist/tools/index.js.map +0 -1
  778. package/dist/tools/react.d.ts +0 -15
  779. package/dist/tools/react.d.ts.map +0 -1
  780. package/dist/tools/react.js +0 -40
  781. package/dist/tools/react.js.map +0 -1
  782. package/dist/tools/read.d.ts +0 -11
  783. package/dist/tools/read.d.ts.map +0 -1
  784. package/dist/tools/read.js +0 -134
  785. package/dist/tools/read.js.map +0 -1
  786. package/dist/tools/sandbox.d.ts +0 -22
  787. package/dist/tools/sandbox.d.ts.map +0 -1
  788. package/dist/tools/sandbox.js.map +0 -1
  789. package/dist/tools/truncate.d.ts +0 -33
  790. package/dist/tools/truncate.d.ts.map +0 -1
  791. package/dist/tools/truncate.js +0 -184
  792. package/dist/tools/truncate.js.map +0 -1
  793. package/dist/tools/types.d.ts +0 -54
  794. package/dist/tools/types.d.ts.map +0 -1
  795. package/dist/tools/types.js.map +0 -1
  796. package/dist/tools/write.d.ts +0 -10
  797. package/dist/tools/write.d.ts.map +0 -1
  798. package/dist/tools/write.js +0 -29
  799. package/dist/tools/write.js.map +0 -1
  800. package/dist/trigger.d.ts +0 -22
  801. package/dist/trigger.d.ts.map +0 -1
  802. package/dist/trigger.js +0 -100
  803. package/dist/trigger.js.map +0 -1
  804. package/dist/utils/date.d.ts +0 -10
  805. package/dist/utils/date.d.ts.map +0 -1
  806. package/dist/utils/date.js +0 -23
  807. package/dist/utils/date.js.map +0 -1
  808. package/dist/utils/env.d.ts +0 -3
  809. package/dist/utils/env.d.ts.map +0 -1
  810. package/dist/utils/env.js +0 -12
  811. package/dist/utils/env.js.map +0 -1
  812. package/dist/utils/file-guards.d.ts +0 -9
  813. package/dist/utils/file-guards.d.ts.map +0 -1
  814. package/dist/utils/file-guards.js +0 -59
  815. package/dist/utils/file-guards.js.map +0 -1
  816. package/dist/utils/fs-atomic.d.ts +0 -10
  817. package/dist/utils/fs-atomic.d.ts.map +0 -1
  818. package/dist/utils/fs-atomic.js +0 -45
  819. package/dist/utils/fs-atomic.js.map +0 -1
  820. package/dist/utils/html.d.ts +0 -2
  821. package/dist/utils/html.d.ts.map +0 -1
  822. package/dist/utils/html.js +0 -4
  823. package/dist/utils/html.js.map +0 -1
  824. package/dist/utils/http-body.d.ts +0 -10
  825. package/dist/utils/http-body.d.ts.map +0 -1
  826. package/dist/utils/http-body.js +0 -34
  827. package/dist/utils/http-body.js.map +0 -1
  828. package/dist/vault/routing.d.ts +0 -3
  829. package/dist/vault/routing.d.ts.map +0 -1
  830. package/dist/vault/routing.js +0 -13
  831. package/dist/vault/routing.js.map +0 -1
  832. package/dist/web/admin/portal.d.ts +0 -5
  833. package/dist/web/admin/portal.d.ts.map +0 -1
  834. package/dist/web/admin/portal.js +0 -2572
  835. package/dist/web/admin/portal.js.map +0 -1
  836. package/dist/web/admin/provider-models.d.ts.map +0 -1
  837. package/dist/web/admin/provider-models.js.map +0 -1
  838. package/dist/web/admin/store.d.ts +0 -13
  839. package/dist/web/admin/store.d.ts.map +0 -1
  840. package/dist/web/admin/store.js +0 -14
  841. package/dist/web/admin/store.js.map +0 -1
  842. package/dist/web/admin/types.d.ts +0 -30
  843. package/dist/web/admin/types.d.ts.map +0 -1
  844. package/dist/web/admin/types.js.map +0 -1
  845. package/dist/web/agent-events/portal.d.ts +0 -3
  846. package/dist/web/agent-events/portal.d.ts.map +0 -1
  847. package/dist/web/agent-events/portal.js +0 -18
  848. package/dist/web/agent-events/portal.js.map +0 -1
  849. package/dist/web/login/oauth.d.ts +0 -6
  850. package/dist/web/login/oauth.d.ts.map +0 -1
  851. package/dist/web/login/oauth.js.map +0 -1
  852. package/dist/web/login/portal.d.ts +0 -17
  853. package/dist/web/login/portal.d.ts.map +0 -1
  854. package/dist/web/login/portal.js.map +0 -1
  855. package/dist/web/login/store.d.ts +0 -8
  856. package/dist/web/login/store.d.ts.map +0 -1
  857. package/dist/web/login/store.js +0 -15
  858. package/dist/web/login/store.js.map +0 -1
  859. package/dist/web/login/types.d.ts.map +0 -1
  860. package/dist/web/login/types.js.map +0 -1
  861. package/dist/web/request.d.ts +0 -3
  862. package/dist/web/request.d.ts.map +0 -1
  863. package/dist/web/request.js +0 -13
  864. package/dist/web/request.js.map +0 -1
  865. package/dist/web/server.d.ts +0 -28
  866. package/dist/web/server.d.ts.map +0 -1
  867. package/dist/web/server.js.map +0 -1
  868. package/dist/web/session-view/command.d.ts +0 -4
  869. package/dist/web/session-view/command.d.ts.map +0 -1
  870. package/dist/web/session-view/command.js +0 -7
  871. package/dist/web/session-view/command.js.map +0 -1
  872. package/dist/web/session-view/portal.d.ts +0 -13
  873. package/dist/web/session-view/portal.d.ts.map +0 -1
  874. package/dist/web/session-view/portal.js.map +0 -1
  875. package/dist/web/session-view/service.d.ts +0 -6
  876. package/dist/web/session-view/service.d.ts.map +0 -1
  877. package/dist/web/session-view/service.js +0 -498
  878. package/dist/web/session-view/service.js.map +0 -1
  879. package/dist/web/session-view/store.d.ts +0 -8
  880. package/dist/web/session-view/store.d.ts.map +0 -1
  881. package/dist/web/session-view/store.js +0 -15
  882. package/dist/web/session-view/store.js.map +0 -1
  883. package/dist/web/session-view/types.d.ts.map +0 -1
  884. package/dist/web/session-view/types.js.map +0 -1
  885. package/dist/web/token-store.d.ts.map +0 -1
  886. package/dist/web/token-store.js.map +0 -1
  887. package/dist/web/types.d.ts.map +0 -1
  888. package/dist/web/types.js.map +0 -1
  889. /package/dist/{commands → adapters/commands}/admin.d.ts +0 -0
  890. /package/dist/{commands → adapters/commands}/new.d.ts +0 -0
  891. /package/dist/{commands → adapters/commands}/session-view.d.ts +0 -0
  892. /package/dist/{commands → adapters/commands}/types.js +0 -0
  893. /package/dist/{harness/extensions → adapters/web/admin}/types.js +0 -0
  894. /package/dist/{tools → adapters/web/login}/types.js +0 -0
  895. /package/dist/{web/admin → adapters/web/session-view}/types.js +0 -0
  896. /package/dist/{web → adapters/web}/types.d.ts +0 -0
  897. /package/dist/{web/login → adapters/web}/types.js +0 -0
  898. /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
  899. /package/dist/{web/session-view → cli}/types.js +0 -0
  900. /package/dist/{web → harness/tools}/types.js +0 -0
@@ -1,36 +1,45 @@
1
- import { existsSync } from "fs";
2
- import { dirname, join } from "path";
3
- import { Type } from "@sinclair/typebox";
1
+ import { existsSync } from "node:fs";
2
+ import { dirname } from "node:path";
3
+ import { Type } from "typebox";
4
4
  import * as log from "../../log.js";
5
- import { ensureDirExists, readJsonSchemaFileIfExists } from "../../utils/file-guards.js";
6
- import { atomicWritePrivateFile } from "../../utils/fs-atomic.js";
7
- import { resolveChatSessionKey } from "../../sessions/policy.js";
8
- import { formatNothingRunning } from "../../platform-messages.js";
9
- import { appendBotResponseLog, appendChannelLog, MessagingEventQueue, resolveStopTarget, splitText, withRetry, } from "../shared.js";
10
- import { processMessageIntake } from "../intake.js";
11
- import { GithubClient, githubIsRateLimited } from "./client.js";
5
+ import { ensureDirExists, readJsonSchemaFileIfExists } from "../../file-guards.js";
6
+ import { atomicWritePrivateFile } from "../../file-guards.js";
7
+ import { resolveChatSessionKey } from "../../sessions/session-key.js";
8
+ import { appendBotResponseLog, appendChannelLog, MessagingEventQueue, splitText, } from "../shared.js";
9
+ import { matchMagicWord, processMessageIntake } from "../intake.js";
10
+ import { GithubClient, GITHUB_MAX_COMMENT_LENGTH, githubRetry } from "./client.js";
12
11
  import { createGithubAdapters } from "./context.js";
13
- import { buildGithubConversationId, GITHUB_ISSUE_BODY_TS, parseGithubConversationId, } from "./ids.js";
12
+ import { fetchIsPr, fetchPrHeadBranch, GithubOps } from "./github-ops.js";
13
+ import { cloneRepo, conversationRepoDir } from "./repo.js";
14
+ import { buildGithubConversationId, createConversationEvent, createOfficeAddress, parseGithubConversationId, } from "../../office/index.js";
15
+ import { GITHUB_ISSUE_BODY_TS, githubReviewCommentTs, parseReviewCommentTs } from "./ids.js";
16
+ import { errorMessage } from "../../unknown-values.js";
14
17
  const SyncStateSchema = Type.Object({
15
18
  repos: Type.Record(Type.String(), Type.Object({
16
19
  baseline: Type.String(),
17
20
  cursor: Type.String(),
18
21
  seenComments: Type.Array(Type.Number()),
19
22
  seenIssues: Type.Array(Type.Number()),
23
+ seenReviewComments: Type.Optional(Type.Array(Type.Number())),
20
24
  })),
21
25
  });
22
- /**
23
- * Re-fetch this far behind the cursor each poll. Dedup is by id (the
24
- * watermark), so the overlap only costs bandwidth and closes the boundary
25
- * races of a bare `since` timestamp (DESIGN.md § Event source).
26
- */
27
26
  const POLL_OVERLAP_MS = 5 * 60 * 1000;
28
27
  const MAX_SEEN_IDS = 5000;
29
- const githubRetry = (fn) => withRetry(fn, { isRateLimited: githubIsRateLimited });
30
- /** GitHub comment bodies cap at 65536 chars; leave headroom for markup. */
31
- export const GITHUB_MAX_COMMENT_LENGTH = 60000;
28
+ const REQUEST_POLL_DEBOUNCE_MS = 1500;
29
+ const PERMISSION_RANK = {
30
+ none: 0,
31
+ read: 1,
32
+ triage: 2,
33
+ write: 3,
34
+ maintain: 4,
35
+ admin: 5,
36
+ };
37
+ const REQUIRED_TRIGGER_RANK = PERMISSION_RANK.write;
38
+ function rankOfPermission(name) {
39
+ return PERMISSION_RANK[name] ?? 0;
40
+ }
41
+ const PERMISSION_CACHE_TTL_MS = 5 * 60 * 1000;
32
42
  export const formatGithubContinuation = (partNum) => `*(continued ${partNum})*`;
33
- /** Slack-style emoji short names → GitHub reaction content values. */
34
43
  const GITHUB_REACTIONS = {
35
44
  "+1": "+1",
36
45
  thumbsup: "+1",
@@ -45,9 +54,6 @@ const GITHUB_REACTIONS = {
45
54
  rocket: "rocket",
46
55
  eyes: "eyes",
47
56
  };
48
- // Repo refs are lowercased at every entry point (env config here, the
49
- // installation API in start()) so conversation ids and sync-state keys never
50
- // depend on how a repo's name was spelled — GitHub is case-insensitive.
51
57
  function parseRepoList(repos) {
52
58
  return repos.map((entry) => {
53
59
  const [owner, repo, ...rest] = entry.split("/");
@@ -57,7 +63,6 @@ function parseRepoList(repos) {
57
63
  return { owner: owner.toLowerCase(), repo: repo.toLowerCase() };
58
64
  });
59
65
  }
60
- /** Sets iterate in insertion order; drop the oldest ids once over the cap. */
61
66
  function pruneSeen(seen) {
62
67
  if (seen.size <= MAX_SEEN_IDS)
63
68
  return;
@@ -68,7 +73,6 @@ function pruneSeen(seen) {
68
73
  seen.delete(id);
69
74
  }
70
75
  }
71
- /** Issue number from a comment's `issue_url` (…/repos/o/r/issues/42). */
72
76
  function issueNumberFromUrl(issueUrl) {
73
77
  const match = /\/issues\/(\d+)$/.exec(issueUrl);
74
78
  if (!match) {
@@ -76,13 +80,30 @@ function issueNumberFromUrl(issueUrl) {
76
80
  }
77
81
  return Number(match[1]);
78
82
  }
83
+ function prNumberFromUrl(pullRequestUrl) {
84
+ const match = /\/pulls\/(\d+)$/.exec(pullRequestUrl);
85
+ if (!match) {
86
+ throw new Error(`Cannot parse PR number from ${pullRequestUrl}`);
87
+ }
88
+ return Number(match[1]);
89
+ }
90
+ const MAX_DIFF_HUNK_CHARS = 1500;
91
+ const MAX_THREAD_TURNS = 10;
92
+ const MAX_THREAD_TURN_CHARS = 500;
79
93
  export class GithubMessagingBot {
80
94
  constructor(handler, config, client) {
81
95
  this.appSlug = null;
96
+ this.botEmail = null;
82
97
  this.watchedRepos = [];
83
98
  this.queues = new Map();
84
99
  this.repoState = new Map();
85
- this.pollInFlight = false;
100
+ this.permissionCache = new Map();
101
+ this.stopped = true;
102
+ this.stopping = false;
103
+ this.activePoll = null;
104
+ this.pollPending = false;
105
+ this.pollIntervalTimer = null;
106
+ this.requestPollTimer = null;
86
107
  this.handler = handler;
87
108
  this.config = config;
88
109
  this.client =
@@ -92,12 +113,19 @@ export class GithubMessagingBot {
92
113
  privateKey: config.privateKey,
93
114
  installationId: config.installationId,
94
115
  });
116
+ this.ops = new GithubOps(this.client, { workspace: config.workspace });
95
117
  }
96
- // ==========================================================================
97
- // Public API (implements MessagingBot)
98
- // ==========================================================================
99
118
  async start() {
119
+ this.stopped = false;
120
+ this.stopping = false;
100
121
  this.appSlug = await this.client.getAppSlug();
122
+ try {
123
+ const botUserId = await this.client.getUserId(`${this.appSlug}[bot]`);
124
+ this.botEmail = `${botUserId}+${this.appSlug}[bot]@users.noreply.github.com`;
125
+ }
126
+ catch {
127
+ this.botEmail = `${this.appSlug}[bot]@users.noreply.github.com`;
128
+ }
101
129
  this.watchedRepos =
102
130
  this.config.repos.length > 0
103
131
  ? parseRepoList(this.config.repos)
@@ -108,8 +136,6 @@ export class GithubMessagingBot {
108
136
  if (this.watchedRepos.length === 0) {
109
137
  log.logWarning("GitHub: installation has no repositories; nothing to poll");
110
138
  }
111
- // Restore persisted watermarks; a repo watched for the first time gets a
112
- // baseline of "now" so history never triggers (DESIGN.md § Event source).
113
139
  const persisted = this.loadSyncState();
114
140
  const now = new Date().toISOString();
115
141
  for (const repo of this.watchedRepos) {
@@ -121,20 +147,49 @@ export class GithubMessagingBot {
121
147
  cursor: saved.cursor,
122
148
  seenComments: new Set(saved.seenComments),
123
149
  seenIssues: new Set(saved.seenIssues),
150
+ seenReviewComments: new Set(saved.seenReviewComments ?? []),
124
151
  }
125
- : { baseline: now, cursor: now, seenComments: new Set(), seenIssues: new Set() });
152
+ : {
153
+ baseline: now,
154
+ cursor: now,
155
+ seenComments: new Set(),
156
+ seenIssues: new Set(),
157
+ seenReviewComments: new Set(),
158
+ });
126
159
  }
127
160
  this.persistSyncState();
128
- setInterval(() => {
161
+ if (this.stopping)
162
+ return;
163
+ this.stopped = false;
164
+ this.pollIntervalTimer = setInterval(() => {
129
165
  void this.poll();
130
- }, this.config.pollIntervalMs).unref();
166
+ }, this.config.pollIntervalMs);
167
+ this.pollIntervalTimer.unref();
131
168
  log.logConnected("GitHub");
132
169
  log.logInfo(`GitHub bot started as @${this.appSlug}[bot], polling ${this.watchedRepos.length} repo(s) every ${Math.round(this.config.pollIntervalMs / 1000)}s`);
133
170
  }
171
+ async stop() {
172
+ this.stopping = true;
173
+ this.pollPending = false;
174
+ if (this.pollIntervalTimer)
175
+ clearInterval(this.pollIntervalTimer);
176
+ if (this.requestPollTimer)
177
+ clearTimeout(this.requestPollTimer);
178
+ this.pollIntervalTimer = null;
179
+ this.requestPollTimer = null;
180
+ try {
181
+ if (this.activePoll)
182
+ await this.activePoll;
183
+ }
184
+ finally {
185
+ this.stopped = true;
186
+ await Promise.all([...this.queues.values()].map((queue) => queue.close()));
187
+ }
188
+ }
134
189
  async postMessage(channel, text) {
135
190
  const ref = parseGithubConversationId(channel);
136
191
  const parts = splitText(text, GITHUB_MAX_COMMENT_LENGTH, formatGithubContinuation);
137
- const firstId = await this.postComment(ref, parts[0]);
192
+ const firstId = await this.postComment(ref, parts[0] ?? text);
138
193
  for (const part of parts.slice(1)) {
139
194
  await this.postComment(ref, part);
140
195
  }
@@ -150,37 +205,43 @@ export class GithubMessagingBot {
150
205
  if (!content) {
151
206
  throw new Error(`GitHub does not support reaction '${emoji}' (supported: ${Object.keys(GITHUB_REACTIONS).join(", ")})`);
152
207
  }
153
- await githubRetry(() => messageTs === GITHUB_ISSUE_BODY_TS
154
- ? this.client.createIssueReaction(ref.owner, ref.repo, ref.number, content)
155
- : this.client.createCommentReaction(ref.owner, ref.repo, Number(messageTs), content));
208
+ const reviewCommentId = parseReviewCommentTs(messageTs);
209
+ await githubRetry(() => {
210
+ if (messageTs === GITHUB_ISSUE_BODY_TS) {
211
+ return this.client.createIssueReaction(ref.owner, ref.repo, ref.number, content);
212
+ }
213
+ if (reviewCommentId !== null) {
214
+ return this.client.createReviewCommentReaction(ref.owner, ref.repo, reviewCommentId, content);
215
+ }
216
+ return this.client.createCommentReaction(ref.owner, ref.repo, Number(messageTs), content);
217
+ });
156
218
  }
157
219
  enqueueEvent(event) {
158
- const conversationId = event.conversationId;
220
+ if (this.stopped)
221
+ return false;
222
+ const conversationId = event.address.conversationId;
159
223
  const queue = this.getQueue(conversationId);
160
224
  if (queue.size() >= 5) {
161
225
  log.logWarning(`Event queue full for ${conversationId}, discarding: ${event.text.substring(0, 50)}`);
162
226
  return false;
163
227
  }
164
228
  log.logInfo(`Enqueueing event for ${conversationId}: ${event.text.substring(0, 50)}`);
165
- queue.enqueue(() => {
229
+ return queue.enqueue(() => {
166
230
  const context = createGithubAdapters(event, this);
167
231
  return this.handler.handleEvent(event, this, context);
168
232
  });
169
- return true;
170
233
  }
171
234
  getMessagingInfo() {
172
235
  return {
173
236
  name: "github",
237
+ trustModel: "open-trigger",
174
238
  formattingGuide: "## GitHub Formatting (GitHub Flavored Markdown)\n" +
175
- "Standard Markdown plus tables, task lists, and ```suggestion blocks.\n" +
176
- "Reference issues/PRs as #123 and users as @login.",
239
+ "Standard Markdown plus tables, task lists, fenced code blocks, and ```suggestion blocks.\n" +
240
+ "Reference issues/PRs as #123 and users as @login (mentions notify people — use sparingly).",
177
241
  channels: [],
178
242
  users: [],
179
243
  };
180
244
  }
181
- // ==========================================================================
182
- // Internal helpers (used by context.ts)
183
- // ==========================================================================
184
245
  async postComment(ref, text) {
185
246
  const comment = await githubRetry(() => this.client.createIssueComment(ref.owner, ref.repo, ref.number, text));
186
247
  return comment.id;
@@ -189,14 +250,11 @@ export class GithubMessagingBot {
189
250
  await githubRetry(() => this.client.deleteIssueComment(ref.owner, ref.repo, commentId));
190
251
  }
191
252
  logToFile(conversationId, entry) {
192
- appendChannelLog(this.config.workingDir, conversationId, entry);
253
+ appendChannelLog(this.office(conversationId), entry);
193
254
  }
194
255
  logBotResponse(conversationId, text, ts) {
195
- appendBotResponseLog(this.config.workingDir, conversationId, text, ts);
256
+ appendBotResponseLog(this.office(conversationId), text, ts);
196
257
  }
197
- // ==========================================================================
198
- // Private - polling
199
- // ==========================================================================
200
258
  getQueue(conversationId) {
201
259
  let queue = this.queues.get(conversationId);
202
260
  if (!queue) {
@@ -205,29 +263,54 @@ export class GithubMessagingBot {
205
263
  }
206
264
  return queue;
207
265
  }
208
- /** One poll tick over every watched repo. Public for tests. */
266
+ requestPoll(debounceMs = REQUEST_POLL_DEBOUNCE_MS) {
267
+ if (this.stopped || this.stopping)
268
+ return;
269
+ if (this.activePoll) {
270
+ this.pollPending = true;
271
+ return;
272
+ }
273
+ if (this.requestPollTimer)
274
+ return;
275
+ this.requestPollTimer = setTimeout(() => {
276
+ this.requestPollTimer = null;
277
+ void this.poll();
278
+ }, debounceMs);
279
+ this.requestPollTimer.unref();
280
+ }
209
281
  async poll() {
210
- if (this.pollInFlight)
282
+ if (this.stopped || this.stopping)
283
+ return;
284
+ if (this.activePoll) {
285
+ this.pollPending = true;
211
286
  return;
212
- this.pollInFlight = true;
287
+ }
288
+ const activePoll = this.pollWatchedRepos();
289
+ this.activePoll = activePoll;
213
290
  try {
214
- let changed = false;
215
- for (const repo of this.watchedRepos) {
216
- try {
217
- changed = (await this.pollRepo(repo)) || changed;
218
- }
219
- catch (err) {
220
- log.logWarning(`GitHub poll failed for ${repo.owner}/${repo.repo}`, err instanceof Error ? err.message : String(err));
221
- }
222
- }
223
- if (changed) {
224
- this.persistSyncState();
225
- }
291
+ await activePoll;
226
292
  }
227
293
  finally {
228
- this.pollInFlight = false;
294
+ this.activePoll = null;
295
+ if (this.pollPending) {
296
+ this.pollPending = false;
297
+ this.requestPoll();
298
+ }
229
299
  }
230
300
  }
301
+ async pollWatchedRepos() {
302
+ let changed = false;
303
+ for (const repo of this.watchedRepos) {
304
+ try {
305
+ changed = (await this.pollRepo(repo)) || changed;
306
+ }
307
+ catch (err) {
308
+ log.logWarning(`GitHub poll failed for ${repo.owner}/${repo.repo}`, errorMessage(err));
309
+ }
310
+ }
311
+ if (changed)
312
+ this.persistSyncState();
313
+ }
231
314
  async pollRepo(repo) {
232
315
  const repoKey = `${repo.owner}/${repo.repo}`;
233
316
  const state = this.repoState.get(repoKey);
@@ -235,70 +318,74 @@ export class GithubMessagingBot {
235
318
  return false;
236
319
  const since = new Date(Date.parse(state.cursor) - POLL_OVERLAP_MS).toISOString();
237
320
  let changed = false;
238
- // Comment activity also bumps the parent issue's updated_at, so the issues
239
- // list mostly echoes the comments list; only issues *created* since the
240
- // baseline are new conversations (their body is the first message).
241
321
  const issues = (await this.client.listIssuesSince(repo.owner, repo.repo, since)) ?? [];
242
- for (const issue of issues) {
243
- if (issue.updated_at > state.cursor) {
244
- state.cursor = issue.updated_at;
245
- changed = true;
246
- }
247
- // Edits re-surface old items with a fresh updated_at; the id watermark
248
- // plus the creation baseline decide what actually triggers.
249
- if (issue.created_at < state.baseline || state.seenIssues.has(issue.id))
250
- continue;
251
- state.seenIssues.add(issue.id);
252
- changed = true;
253
- if (issue.user.type === "Bot")
254
- continue;
255
- await this.handleIncoming({
322
+ changed =
323
+ (await this.advanceFeed(state, state.seenIssues, issues, (issue) => ({
256
324
  ref: { ...repo, number: issue.number },
257
325
  ts: GITHUB_ISSUE_BODY_TS,
258
326
  user: issue.user.login,
259
327
  text: `# ${issue.title}\n\n${issue.body ?? ""}`.trim(),
260
328
  createdAt: issue.created_at,
261
- });
262
- }
329
+ isPr: Boolean(issue.pull_request),
330
+ }))) || changed;
263
331
  const comments = (await this.client.listIssueCommentsSince(repo.owner, repo.repo, since)) ?? [];
264
- for (const comment of comments) {
265
- if (comment.updated_at > state.cursor) {
266
- state.cursor = comment.updated_at;
267
- changed = true;
268
- }
269
- if (comment.created_at < state.baseline || state.seenComments.has(comment.id))
270
- continue;
271
- state.seenComments.add(comment.id);
272
- changed = true;
273
- if (comment.user.type === "Bot")
274
- continue;
275
- await this.handleIncoming({
332
+ changed =
333
+ (await this.advanceFeed(state, state.seenComments, comments, (comment) => ({
276
334
  ref: { ...repo, number: issueNumberFromUrl(comment.issue_url) },
277
335
  ts: String(comment.id),
278
336
  user: comment.user.login,
279
337
  text: comment.body,
280
338
  createdAt: comment.created_at,
281
- });
282
- }
339
+ }))) || changed;
340
+ const reviewComments = (await this.client.listPullReviewCommentsSince(repo.owner, repo.repo, since)) ?? [];
341
+ changed =
342
+ (await this.advanceFeed(state, state.seenReviewComments, reviewComments, (comment) => ({
343
+ ref: { ...repo, number: prNumberFromUrl(comment.pull_request_url) },
344
+ ts: githubReviewCommentTs(comment.id),
345
+ user: comment.user.login,
346
+ text: comment.body,
347
+ createdAt: comment.created_at,
348
+ isPr: true,
349
+ review: {
350
+ commentId: comment.id,
351
+ path: comment.path,
352
+ line: comment.line,
353
+ diffHunk: comment.diff_hunk,
354
+ inReplyToId: comment.in_reply_to_id,
355
+ },
356
+ }))) || changed;
283
357
  pruneSeen(state.seenComments);
284
358
  pruneSeen(state.seenIssues);
359
+ pruneSeen(state.seenReviewComments);
360
+ return changed;
361
+ }
362
+ async advanceFeed(state, seen, items, toIncoming) {
363
+ let changed = false;
364
+ for (const item of items) {
365
+ if (item.updated_at > state.cursor) {
366
+ state.cursor = item.updated_at;
367
+ changed = true;
368
+ }
369
+ if (item.created_at < state.baseline || seen.has(item.id))
370
+ continue;
371
+ seen.add(item.id);
372
+ changed = true;
373
+ if (item.user.type === "Bot")
374
+ continue;
375
+ await this.handleIncoming(toIncoming(item));
376
+ }
285
377
  return changed;
286
378
  }
287
- // ==========================================================================
288
- // Private - watermark persistence
289
- // ==========================================================================
290
379
  loadSyncState() {
291
380
  try {
292
381
  return readJsonSchemaFileIfExists(this.config.syncStatePath, SyncStateSchema, (detail) => `Malformed GitHub sync state at ${this.config.syncStatePath}: ${detail}`);
293
382
  }
294
383
  catch (err) {
295
- // A bad state file re-baselines (history won't trigger) rather than
296
- // blocking startup; the next persist overwrites it.
297
- log.logWarning("GitHub: ignoring unreadable sync state", err instanceof Error ? err.message : String(err));
384
+ log.logWarning("GitHub: ignoring unreadable sync state", errorMessage(err));
298
385
  return undefined;
299
386
  }
300
387
  }
301
- persistSyncState() {
388
+ syncStateSnapshot() {
302
389
  const state = { repos: {} };
303
390
  for (const [repoKey, watermark] of this.repoState) {
304
391
  state.repos[repoKey] = {
@@ -306,15 +393,15 @@ export class GithubMessagingBot {
306
393
  cursor: watermark.cursor,
307
394
  seenComments: [...watermark.seenComments],
308
395
  seenIssues: [...watermark.seenIssues],
396
+ seenReviewComments: [...watermark.seenReviewComments],
309
397
  };
310
398
  }
399
+ return state;
400
+ }
401
+ persistSyncState() {
311
402
  ensureDirExists(dirname(this.config.syncStatePath));
312
- atomicWritePrivateFile(this.config.syncStatePath, JSON.stringify(state));
403
+ atomicWritePrivateFile(this.config.syncStatePath, JSON.stringify(this.syncStateSnapshot()));
313
404
  }
314
- // ==========================================================================
315
- // Private - triggering
316
- // ==========================================================================
317
- /** Fresh regex per call: the `g` flag makes `test`/`replace` stateful. */
318
405
  mentionPattern() {
319
406
  return this.appSlug ? new RegExp(`@${this.appSlug}(?![\\w-])`, "gi") : null;
320
407
  }
@@ -326,18 +413,43 @@ export class GithubMessagingBot {
326
413
  const pattern = this.mentionPattern();
327
414
  return (pattern ? text.replace(pattern, "") : text).trim();
328
415
  }
416
+ office(conversationId) {
417
+ return this.config.workspace.office(createOfficeAddress("github", conversationId));
418
+ }
329
419
  isParticipating(conversationId) {
330
- return existsSync(join(this.config.workingDir, conversationId, "log.jsonl"));
420
+ return existsSync(this.office(conversationId).logPath);
421
+ }
422
+ async hasTriggerPermission(ref, user) {
423
+ const cacheKey = `${ref.owner}/${ref.repo}#${user}`;
424
+ const cached = this.permissionCache.get(cacheKey);
425
+ if (cached && Date.now() < cached.expiresAt) {
426
+ return cached.rank >= REQUIRED_TRIGGER_RANK;
427
+ }
428
+ let rank;
429
+ try {
430
+ const role = await githubRetry(() => this.client.getCollaboratorPermission(ref.owner, ref.repo, user));
431
+ rank = Math.max(rankOfPermission(role.role_name ?? ""), rankOfPermission(role.permission));
432
+ }
433
+ catch (err) {
434
+ log.logWarning(`GitHub: permission lookup failed for ${user} on ${ref.owner}/${ref.repo}; denying trigger`, errorMessage(err));
435
+ return false;
436
+ }
437
+ this.permissionCache.set(cacheKey, {
438
+ rank,
439
+ expiresAt: Date.now() + PERMISSION_CACHE_TTL_MS,
440
+ });
441
+ return rank >= REQUIRED_TRIGGER_RANK;
331
442
  }
332
443
  async handleIncoming(item) {
333
444
  const conversationId = buildGithubConversationId(item.ref);
334
445
  const mentioned = this.isMentioned(item.text);
335
446
  const participating = this.isParticipating(conversationId);
336
- // Narrow trigger (DESIGN.md): only threads the bot is mentioned in or
337
- // already participates in. Everything else is ignored without logging so
338
- // busy repos don't grow conversation dirs for untouched issues.
339
447
  if (!mentioned && !participating)
340
448
  return;
449
+ if (!(await this.hasTriggerPermission(item.ref, item.user))) {
450
+ log.logInfo(`GitHub: ignoring ${conversationId} comment from ${item.user} (below write permission)`);
451
+ return;
452
+ }
341
453
  const cleanedText = this.stripMention(item.text);
342
454
  const sessionKey = resolveChatSessionKey({
343
455
  conversationId,
@@ -345,31 +457,11 @@ export class GithubMessagingBot {
345
457
  messageId: item.ts,
346
458
  persistentTopLevel: true,
347
459
  });
348
- if (/^stop$/i.test(cleanedText)) {
349
- this.logToFile(conversationId, {
350
- date: item.createdAt,
351
- ts: item.ts,
352
- user: item.user,
353
- userName: item.user,
354
- text: cleanedText,
355
- attachments: [],
356
- isMessagingBot: false,
357
- });
358
- const stopTarget = resolveStopTarget({ handler: this.handler, conversationId, sessionKey });
359
- if (stopTarget) {
360
- await this.handler.handleStop(stopTarget, conversationId, this);
361
- }
362
- else if (mentioned) {
363
- await this.postMessage(conversationId, formatNothingRunning("github"));
364
- }
365
- return;
366
- }
367
- // First contact via a comment: log the issue title/body first so the
368
- // session history starts with what the thread is about.
369
- if (!participating && item.ts !== GITHUB_ISSUE_BODY_TS) {
370
- await this.logIssueContext(item.ref, conversationId, item.createdAt);
371
- }
372
- const eventBase = {
460
+ const messageText = item.review
461
+ ? await this.formatReviewMessage(item, cleanedText)
462
+ : cleanedText;
463
+ const eventBase = createConversationEvent({
464
+ platform: "github",
373
465
  type: item.ts === GITHUB_ISSUE_BODY_TS ? "issue" : "message",
374
466
  conversationId,
375
467
  conversationKind: "shared",
@@ -377,22 +469,30 @@ export class GithubMessagingBot {
377
469
  sessionKey,
378
470
  user: item.user,
379
471
  userName: item.user,
380
- text: cleanedText,
381
- };
472
+ text: messageText,
473
+ });
382
474
  await processMessageIntake({
383
475
  eventBase,
384
- workingDir: this.config.workingDir,
385
- isAutoReplyCandidate: false,
476
+ addressed: true,
477
+ magicWord: { text: cleanedText, addressed: mentioned, scopeFallback: "never" },
478
+ busyPolicy: "queue",
386
479
  logEntryBase: {
387
480
  date: item.createdAt,
388
481
  ts: item.ts,
389
482
  user: item.user,
390
483
  userName: item.user,
391
- text: cleanedText,
484
+ text: messageText,
392
485
  isMessagingBot: false,
393
486
  },
394
- log: (entry) => this.logToFile(conversationId, entry),
395
- processAttachments: async () => [],
487
+ log: (entry) => {
488
+ if (!participating && matchMagicWord(cleanedText) === "stop")
489
+ return;
490
+ this.logToFile(conversationId, entry);
491
+ },
492
+ processAttachments: async () => {
493
+ await this.prepareConversation(item, conversationId, participating);
494
+ return [];
495
+ },
396
496
  queueKey: conversationId,
397
497
  enqueue: (queueKey, work) => this.getQueue(queueKey).enqueue(work),
398
498
  handler: this.handler,
@@ -400,19 +500,64 @@ export class GithubMessagingBot {
400
500
  createContext: (event) => createGithubAdapters(event, this),
401
501
  });
402
502
  }
503
+ async prepareConversation(item, conversationId, participating) {
504
+ let isPrHint = item.isPr;
505
+ if (!participating && item.ts !== GITHUB_ISSUE_BODY_TS) {
506
+ const issue = await this.logIssueContext(item.ref, conversationId, item.createdAt);
507
+ if (issue && isPrHint === undefined)
508
+ isPrHint = Boolean(issue.pull_request);
509
+ }
510
+ if (!existsSync(conversationRepoDir(this.office(conversationId)))) {
511
+ const isPr = isPrHint ?? (await fetchIsPr(this.client, item.ref));
512
+ await this.ensureRepoClone(item.ref, conversationId, isPr);
513
+ }
514
+ }
515
+ async formatReviewMessage(item, cleanedText) {
516
+ const review = item.review;
517
+ const location = review.line !== null ? `${review.path}:${review.line}` : review.path;
518
+ const parts = [`[PR review comment ${githubReviewCommentTs(review.commentId)} on ${location}]`];
519
+ if (review.diffHunk) {
520
+ const hunk = review.diffHunk.length > MAX_DIFF_HUNK_CHARS
521
+ ? `…${review.diffHunk.slice(-MAX_DIFF_HUNK_CHARS)}`
522
+ : review.diffHunk;
523
+ parts.push(`\`\`\`diff\n${hunk}\n\`\`\``);
524
+ }
525
+ if (review.inReplyToId !== undefined) {
526
+ const turns = await this.reviewThreadContext(item.ref, review.inReplyToId, review.commentId);
527
+ if (turns.length > 0) {
528
+ parts.push(`Thread so far:\n${turns.join("\n")}`);
529
+ }
530
+ }
531
+ parts.push(cleanedText);
532
+ return parts.join("\n");
533
+ }
534
+ async reviewThreadContext(ref, rootId, beforeId) {
535
+ try {
536
+ const all = await githubRetry(() => this.client.listPullReviewComments(ref.owner, ref.repo, ref.number));
537
+ return all
538
+ .filter((comment) => (comment.id === rootId || comment.in_reply_to_id === rootId) && comment.id < beforeId)
539
+ .slice(-MAX_THREAD_TURNS)
540
+ .map((comment) => {
541
+ const body = comment.body.length > MAX_THREAD_TURN_CHARS
542
+ ? `${comment.body.slice(0, MAX_THREAD_TURN_CHARS)}…`
543
+ : comment.body;
544
+ return `@${comment.user.login}: ${body}`;
545
+ });
546
+ }
547
+ catch (err) {
548
+ log.logWarning(`GitHub: could not fetch review thread context for ${ref.owner}/${ref.repo}#${ref.number}`, errorMessage(err));
549
+ return [];
550
+ }
551
+ }
403
552
  async logIssueContext(ref, conversationId, triggerCreatedAt) {
404
553
  let issue;
405
554
  try {
406
555
  issue = await githubRetry(() => this.client.getIssue(ref.owner, ref.repo, ref.number));
407
556
  }
408
557
  catch (err) {
409
- log.logWarning(`GitHub: could not fetch issue context for ${conversationId}`, err instanceof Error ? err.message : String(err));
410
- return;
558
+ log.logWarning(`GitHub: could not fetch issue context for ${conversationId}`, errorMessage(err));
559
+ return null;
411
560
  }
412
- // Dated just before the triggering comment, NOT issue.created_at: history
413
- // sync date-sorts entries and drops anything older than its recency
414
- // window, so an old issue's real creation date would silently evict the
415
- // one message that says what the thread is about.
416
561
  const triggerMs = Date.parse(triggerCreatedAt);
417
562
  const contextDate = new Date((Number.isFinite(triggerMs) ? triggerMs : Date.now()) - 1000);
418
563
  this.logToFile(conversationId, {
@@ -424,6 +569,33 @@ export class GithubMessagingBot {
424
569
  attachments: [],
425
570
  isMessagingBot: false,
426
571
  });
572
+ return issue;
573
+ }
574
+ async ensureRepoClone(ref, conversationId, isPr) {
575
+ const office = this.office(conversationId);
576
+ const dir = conversationRepoDir(office);
577
+ if (existsSync(dir))
578
+ return;
579
+ try {
580
+ office.ensure();
581
+ const token = await this.client.createScopedInstallationToken(ref.repo, {
582
+ contents: "read",
583
+ });
584
+ const prHeadBranch = isPr ? await fetchPrHeadBranch(this.client, ref) : undefined;
585
+ await cloneRepo({
586
+ url: `https://github.com/${ref.owner}/${ref.repo}.git`,
587
+ dir,
588
+ token,
589
+ botLogin: `${this.appSlug}[bot]`,
590
+ botEmail: this.botEmail ?? `${this.appSlug}[bot]@users.noreply.github.com`,
591
+ prNumber: isPr ? ref.number : undefined,
592
+ prHeadBranch,
593
+ });
594
+ log.logInfo(`[${conversationId}] Cloned ${ref.owner}/${ref.repo}${isPr ? ` and checked out PR #${ref.number} head as ${prHeadBranch ?? `pr-${ref.number}`}` : ""}`);
595
+ }
596
+ catch (err) {
597
+ log.logWarning(`GitHub: repo clone failed for ${conversationId}`, errorMessage(err));
598
+ }
427
599
  }
428
600
  }
429
601
  //# sourceMappingURL=bot.js.map