@geminixiang/mikan 1.0.0-beta.9 → 1.0.0-beta.90

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