@geminixiang/mikan 1.0.0-beta.6 → 1.0.0-beta.60

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 (791) hide show
  1. package/CHANGELOG.md +926 -0
  2. package/README.md +95 -37
  3. package/dist/adapter.d.ts +11 -1
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/adapter.js +18 -1
  6. package/dist/adapter.js.map +1 -1
  7. package/dist/adapters/commands/admin.d.ts.map +1 -0
  8. package/dist/{commands → adapters/commands}/admin.js +11 -8
  9. package/dist/adapters/commands/admin.js.map +1 -0
  10. package/dist/{commands → adapters/commands}/auto-reply.d.ts +0 -3
  11. package/dist/adapters/commands/auto-reply.d.ts.map +1 -0
  12. package/dist/adapters/commands/auto-reply.js +38 -0
  13. package/dist/adapters/commands/auto-reply.js.map +1 -0
  14. package/dist/adapters/commands/login.d.ts +6 -0
  15. package/dist/adapters/commands/login.d.ts.map +1 -0
  16. package/dist/adapters/commands/login.js +166 -0
  17. package/dist/adapters/commands/login.js.map +1 -0
  18. package/dist/adapters/commands/manifest.d.ts +37 -0
  19. package/dist/adapters/commands/manifest.d.ts.map +1 -0
  20. package/dist/adapters/commands/manifest.js +155 -0
  21. package/dist/adapters/commands/manifest.js.map +1 -0
  22. package/dist/adapters/commands/model.d.ts +15 -0
  23. package/dist/adapters/commands/model.d.ts.map +1 -0
  24. package/dist/adapters/commands/model.js +153 -0
  25. package/dist/adapters/commands/model.js.map +1 -0
  26. package/dist/adapters/commands/new.d.ts.map +1 -0
  27. package/dist/adapters/commands/new.js +41 -0
  28. package/dist/adapters/commands/new.js.map +1 -0
  29. package/dist/adapters/commands/registry.d.ts +5 -0
  30. package/dist/adapters/commands/registry.d.ts.map +1 -0
  31. package/dist/adapters/commands/registry.js +43 -0
  32. package/dist/adapters/commands/registry.js.map +1 -0
  33. package/dist/adapters/commands/sandbox.d.ts.map +1 -0
  34. package/dist/adapters/commands/sandbox.js +148 -0
  35. package/dist/adapters/commands/sandbox.js.map +1 -0
  36. package/dist/adapters/commands/session-view.d.ts.map +1 -0
  37. package/dist/{commands → adapters/commands}/session-view.js +23 -16
  38. package/dist/adapters/commands/session-view.js.map +1 -0
  39. package/dist/adapters/commands/types.d.ts +145 -0
  40. package/dist/adapters/commands/types.d.ts.map +1 -0
  41. package/dist/adapters/commands/types.js.map +1 -0
  42. package/dist/adapters/commands/utils.d.ts +14 -0
  43. package/dist/adapters/commands/utils.d.ts.map +1 -0
  44. package/dist/{commands → adapters/commands}/utils.js +18 -1
  45. package/dist/adapters/commands/utils.js.map +1 -0
  46. package/dist/adapters/discord/bot.d.ts +11 -8
  47. package/dist/adapters/discord/bot.d.ts.map +1 -1
  48. package/dist/adapters/discord/bot.js +218 -252
  49. package/dist/adapters/discord/bot.js.map +1 -1
  50. package/dist/adapters/discord/components.d.ts +28 -0
  51. package/dist/adapters/discord/components.d.ts.map +1 -0
  52. package/dist/adapters/discord/components.js +32 -0
  53. package/dist/adapters/discord/components.js.map +1 -0
  54. package/dist/adapters/discord/context.d.ts +2 -6
  55. package/dist/adapters/discord/context.d.ts.map +1 -1
  56. package/dist/adapters/discord/context.js +63 -218
  57. package/dist/adapters/discord/context.js.map +1 -1
  58. package/dist/adapters/discord/format.d.ts +3 -0
  59. package/dist/adapters/discord/format.d.ts.map +1 -0
  60. package/dist/adapters/discord/format.js +84 -0
  61. package/dist/adapters/discord/format.js.map +1 -0
  62. package/dist/adapters/discord/types.d.ts +7 -0
  63. package/dist/adapters/discord/types.d.ts.map +1 -1
  64. package/dist/adapters/discord/types.js.map +1 -1
  65. package/dist/adapters/github/bot.d.ts +102 -0
  66. package/dist/adapters/github/bot.d.ts.map +1 -0
  67. package/dist/adapters/github/bot.js +720 -0
  68. package/dist/adapters/github/bot.js.map +1 -0
  69. package/dist/adapters/github/client.d.ts +122 -0
  70. package/dist/adapters/github/client.d.ts.map +1 -0
  71. package/dist/adapters/github/client.js +301 -0
  72. package/dist/adapters/github/client.js.map +1 -0
  73. package/dist/adapters/github/context.d.ts +5 -0
  74. package/dist/adapters/github/context.d.ts.map +1 -0
  75. package/dist/adapters/github/context.js +101 -0
  76. package/dist/adapters/github/context.js.map +1 -0
  77. package/dist/adapters/github/github-ops.d.ts +78 -0
  78. package/dist/adapters/github/github-ops.d.ts.map +1 -0
  79. package/dist/adapters/github/github-ops.js +337 -0
  80. package/dist/adapters/github/github-ops.js.map +1 -0
  81. package/dist/adapters/github/ids.d.ts +34 -0
  82. package/dist/adapters/github/ids.d.ts.map +1 -0
  83. package/dist/adapters/github/ids.js +57 -0
  84. package/dist/adapters/github/ids.js.map +1 -0
  85. package/dist/adapters/github/repo.d.ts +33 -0
  86. package/dist/adapters/github/repo.d.ts.map +1 -0
  87. package/dist/adapters/github/repo.js +141 -0
  88. package/dist/adapters/github/repo.js.map +1 -0
  89. package/dist/adapters/github/tool-pack.d.ts +14 -0
  90. package/dist/adapters/github/tool-pack.d.ts.map +1 -0
  91. package/dist/adapters/github/tool-pack.js +55 -0
  92. package/dist/adapters/github/tool-pack.js.map +1 -0
  93. package/dist/adapters/github/tools/checks.d.ts +18 -0
  94. package/dist/adapters/github/tools/checks.d.ts.map +1 -0
  95. package/dist/adapters/github/tools/checks.js +86 -0
  96. package/dist/adapters/github/tools/checks.js.map +1 -0
  97. package/dist/adapters/github/tools/issue.d.ts +21 -0
  98. package/dist/adapters/github/tools/issue.d.ts.map +1 -0
  99. package/dist/adapters/github/tools/issue.js +48 -0
  100. package/dist/adapters/github/tools/issue.js.map +1 -0
  101. package/dist/adapters/github/tools/pr.d.ts +22 -0
  102. package/dist/adapters/github/tools/pr.d.ts.map +1 -0
  103. package/dist/adapters/github/tools/pr.js +48 -0
  104. package/dist/adapters/github/tools/pr.js.map +1 -0
  105. package/dist/adapters/github/tools/read.d.ts +21 -0
  106. package/dist/adapters/github/tools/read.d.ts.map +1 -0
  107. package/dist/adapters/github/tools/read.js +141 -0
  108. package/dist/adapters/github/tools/read.js.map +1 -0
  109. package/dist/adapters/github/tools/review-reply.d.ts +17 -0
  110. package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
  111. package/dist/adapters/github/tools/review-reply.js +38 -0
  112. package/dist/adapters/github/tools/review-reply.js.map +1 -0
  113. package/dist/adapters/github/tools/sync.d.ts +17 -0
  114. package/dist/adapters/github/tools/sync.d.ts.map +1 -0
  115. package/dist/adapters/github/tools/sync.js +34 -0
  116. package/dist/adapters/github/tools/sync.js.map +1 -0
  117. package/dist/adapters/github/types.d.ts +345 -0
  118. package/dist/adapters/github/types.d.ts.map +1 -0
  119. package/dist/adapters/github/types.js.map +1 -0
  120. package/dist/adapters/github/webhook.d.ts +20 -0
  121. package/dist/adapters/github/webhook.d.ts.map +1 -0
  122. package/dist/adapters/github/webhook.js +78 -0
  123. package/dist/adapters/github/webhook.js.map +1 -0
  124. package/dist/adapters/intake.d.ts +16 -5
  125. package/dist/adapters/intake.d.ts.map +1 -1
  126. package/dist/adapters/intake.js +86 -27
  127. package/dist/adapters/intake.js.map +1 -1
  128. package/dist/adapters/markdown-tables.d.ts +19 -0
  129. package/dist/adapters/markdown-tables.d.ts.map +1 -0
  130. package/dist/adapters/markdown-tables.js +152 -0
  131. package/dist/adapters/markdown-tables.js.map +1 -0
  132. package/dist/adapters/progressive-renderer.d.ts +7 -0
  133. package/dist/adapters/progressive-renderer.d.ts.map +1 -0
  134. package/dist/adapters/progressive-renderer.js +439 -0
  135. package/dist/adapters/progressive-renderer.js.map +1 -0
  136. package/dist/adapters/shared.d.ts +35 -11
  137. package/dist/adapters/shared.d.ts.map +1 -1
  138. package/dist/adapters/shared.js +105 -24
  139. package/dist/adapters/shared.js.map +1 -1
  140. package/dist/adapters/slack/assistant.d.ts +73 -0
  141. package/dist/adapters/slack/assistant.d.ts.map +1 -0
  142. package/dist/adapters/slack/assistant.js +205 -0
  143. package/dist/adapters/slack/assistant.js.map +1 -0
  144. package/dist/adapters/slack/blocks.d.ts +14 -0
  145. package/dist/adapters/slack/blocks.d.ts.map +1 -1
  146. package/dist/adapters/slack/blocks.js +104 -148
  147. package/dist/adapters/slack/blocks.js.map +1 -1
  148. package/dist/adapters/slack/bot.d.ts +116 -18
  149. package/dist/adapters/slack/bot.d.ts.map +1 -1
  150. package/dist/adapters/slack/bot.js +760 -468
  151. package/dist/adapters/slack/bot.js.map +1 -1
  152. package/dist/adapters/slack/context.d.ts +2 -6
  153. package/dist/adapters/slack/context.d.ts.map +1 -1
  154. package/dist/adapters/slack/context.js +11 -17
  155. package/dist/adapters/slack/context.js.map +1 -1
  156. package/dist/adapters/slack/markdown.d.ts +3 -0
  157. package/dist/adapters/slack/markdown.d.ts.map +1 -0
  158. package/dist/adapters/slack/markdown.js +48 -0
  159. package/dist/adapters/slack/markdown.js.map +1 -0
  160. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  161. package/dist/adapters/slack/response-lifecycle.js +240 -345
  162. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  163. package/dist/adapters/slack/session.d.ts.map +1 -1
  164. package/dist/adapters/slack/session.js +7 -11
  165. package/dist/adapters/slack/session.js.map +1 -1
  166. package/dist/adapters/slack/stream-limits.d.ts +35 -0
  167. package/dist/adapters/slack/stream-limits.d.ts.map +1 -0
  168. package/dist/adapters/slack/stream-limits.js +56 -0
  169. package/dist/adapters/slack/stream-limits.js.map +1 -0
  170. package/dist/adapters/slack/tool-pack.d.ts +11 -0
  171. package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
  172. package/dist/adapters/slack/tool-pack.js +45 -0
  173. package/dist/adapters/slack/tool-pack.js.map +1 -0
  174. package/dist/adapters/slack/tools/blockkit.d.ts +14 -0
  175. package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
  176. package/dist/adapters/slack/tools/blockkit.js +106 -0
  177. package/dist/adapters/slack/tools/blockkit.js.map +1 -0
  178. package/dist/adapters/slack/types.d.ts +73 -2
  179. package/dist/adapters/slack/types.d.ts.map +1 -1
  180. package/dist/adapters/slack/types.js.map +1 -1
  181. package/dist/adapters/slack/update-diagnostics.d.ts +14 -0
  182. package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -0
  183. package/dist/adapters/slack/update-diagnostics.js +134 -0
  184. package/dist/adapters/slack/update-diagnostics.js.map +1 -0
  185. package/dist/adapters/telegram/bot.d.ts +10 -9
  186. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  187. package/dist/adapters/telegram/bot.js +129 -198
  188. package/dist/adapters/telegram/bot.js.map +1 -1
  189. package/dist/adapters/telegram/context.d.ts +2 -6
  190. package/dist/adapters/telegram/context.d.ts.map +1 -1
  191. package/dist/adapters/telegram/context.js +52 -190
  192. package/dist/adapters/telegram/context.js.map +1 -1
  193. package/dist/adapters/types.d.ts +144 -13
  194. package/dist/adapters/types.d.ts.map +1 -1
  195. package/dist/adapters/types.js.map +1 -1
  196. package/dist/adapters/web/admin/portal.d.ts +44 -0
  197. package/dist/adapters/web/admin/portal.d.ts.map +1 -0
  198. package/dist/adapters/web/admin/portal.js +3284 -0
  199. package/dist/adapters/web/admin/portal.js.map +1 -0
  200. package/dist/{web → adapters/web}/admin/provider-models.d.ts +1 -1
  201. package/dist/adapters/web/admin/provider-models.d.ts.map +1 -0
  202. package/dist/{web → adapters/web}/admin/provider-models.js +1 -1
  203. package/dist/adapters/web/admin/provider-models.js.map +1 -0
  204. package/dist/adapters/web/admin/types.d.ts +50 -0
  205. package/dist/adapters/web/admin/types.d.ts.map +1 -0
  206. package/dist/adapters/web/admin/types.js.map +1 -0
  207. package/dist/adapters/web/login/oauth.d.ts +5 -0
  208. package/dist/adapters/web/login/oauth.d.ts.map +1 -0
  209. package/dist/{web → adapters/web}/login/oauth.js +50 -85
  210. package/dist/adapters/web/login/oauth.js.map +1 -0
  211. package/dist/{web → adapters/web}/login/portal.d.ts +9 -3
  212. package/dist/adapters/web/login/portal.d.ts.map +1 -0
  213. package/dist/{web → adapters/web}/login/portal.js +161 -119
  214. package/dist/adapters/web/login/portal.js.map +1 -0
  215. package/dist/{web → adapters/web}/login/types.d.ts +1 -12
  216. package/dist/adapters/web/login/types.d.ts.map +1 -0
  217. package/dist/adapters/web/login/types.js.map +1 -0
  218. package/dist/adapters/web/portal-shell.d.ts +22 -0
  219. package/dist/adapters/web/portal-shell.d.ts.map +1 -0
  220. package/dist/{portal-shell.js → adapters/web/portal-shell.js} +78 -2
  221. package/dist/adapters/web/portal-shell.js.map +1 -0
  222. package/dist/{web → adapters/web}/server.d.ts +11 -8
  223. package/dist/adapters/web/server.d.ts.map +1 -0
  224. package/dist/{web → adapters/web}/server.js +16 -7
  225. package/dist/adapters/web/server.js.map +1 -0
  226. package/dist/adapters/web/session-view/portal.d.ts +20 -0
  227. package/dist/adapters/web/session-view/portal.d.ts.map +1 -0
  228. package/dist/{web → adapters/web}/session-view/portal.js +632 -162
  229. package/dist/adapters/web/session-view/portal.js.map +1 -0
  230. package/dist/{web → adapters/web}/session-view/types.d.ts +11 -6
  231. package/dist/adapters/web/session-view/types.d.ts.map +1 -0
  232. package/dist/adapters/web/session-view/types.js.map +1 -0
  233. package/dist/adapters/web/token-store.d.ts.map +1 -0
  234. package/dist/{web → adapters/web}/token-store.js +1 -1
  235. package/dist/adapters/web/token-store.js.map +1 -0
  236. package/dist/adapters/web/types.d.ts.map +1 -0
  237. package/dist/adapters/web/types.js.map +1 -0
  238. package/dist/cli/arg-grammar.d.ts +11 -0
  239. package/dist/cli/arg-grammar.d.ts.map +1 -0
  240. package/dist/cli/arg-grammar.js +50 -0
  241. package/dist/cli/arg-grammar.js.map +1 -0
  242. package/dist/cli/boot.d.ts +5 -0
  243. package/dist/cli/boot.d.ts.map +1 -0
  244. package/dist/cli/boot.js +90 -0
  245. package/dist/cli/boot.js.map +1 -0
  246. package/dist/cli/download.d.ts.map +1 -0
  247. package/dist/cli/download.js +88 -0
  248. package/dist/cli/download.js.map +1 -0
  249. package/dist/cli/office.d.ts +2 -0
  250. package/dist/cli/office.d.ts.map +1 -0
  251. package/dist/cli/office.js +83 -0
  252. package/dist/cli/office.js.map +1 -0
  253. package/dist/cli/onboard.d.ts +10 -0
  254. package/dist/cli/onboard.d.ts.map +1 -0
  255. package/dist/cli/onboard.js +225 -0
  256. package/dist/cli/onboard.js.map +1 -0
  257. package/dist/cli/sessions.d.ts +2 -0
  258. package/dist/cli/sessions.d.ts.map +1 -0
  259. package/dist/cli/sessions.js +88 -0
  260. package/dist/cli/sessions.js.map +1 -0
  261. package/dist/cli/types.d.ts +25 -0
  262. package/dist/cli/types.d.ts.map +1 -0
  263. package/dist/cli/types.js.map +1 -0
  264. package/dist/config.d.ts +38 -39
  265. package/dist/config.d.ts.map +1 -1
  266. package/dist/config.js +256 -215
  267. package/dist/config.js.map +1 -1
  268. package/dist/dream/index.d.ts +20 -0
  269. package/dist/dream/index.d.ts.map +1 -0
  270. package/dist/dream/index.js +264 -0
  271. package/dist/dream/index.js.map +1 -0
  272. package/dist/dream/types.d.ts +30 -0
  273. package/dist/dream/types.d.ts.map +1 -0
  274. package/dist/dream/types.js +2 -0
  275. package/dist/dream/types.js.map +1 -0
  276. package/dist/env-manifest.d.ts +32 -0
  277. package/dist/env-manifest.d.ts.map +1 -0
  278. package/dist/env-manifest.js +244 -0
  279. package/dist/env-manifest.js.map +1 -0
  280. package/dist/events/index.d.ts +150 -0
  281. package/dist/events/index.d.ts.map +1 -0
  282. package/dist/events/index.js +249 -0
  283. package/dist/events/index.js.map +1 -0
  284. package/dist/{events.d.ts → events/watcher.d.ts} +4 -4
  285. package/dist/events/watcher.d.ts.map +1 -0
  286. package/dist/{events.js → events/watcher.js} +23 -84
  287. package/dist/events/watcher.js.map +1 -0
  288. package/dist/{utils/file-guards.d.ts → file-guards.d.ts} +9 -0
  289. package/dist/file-guards.d.ts.map +1 -0
  290. package/dist/{utils/file-guards.js → file-guards.js} +44 -1
  291. package/dist/file-guards.js.map +1 -0
  292. package/dist/harness/execution-env.d.ts +19 -0
  293. package/dist/harness/execution-env.d.ts.map +1 -0
  294. package/dist/harness/execution-env.js +262 -0
  295. package/dist/harness/execution-env.js.map +1 -0
  296. package/dist/harness/execution-resolver.d.ts +25 -0
  297. package/dist/harness/execution-resolver.d.ts.map +1 -0
  298. package/dist/harness/execution-resolver.js +156 -0
  299. package/dist/harness/execution-resolver.js.map +1 -0
  300. package/dist/harness/index.d.ts +17 -13
  301. package/dist/harness/index.d.ts.map +1 -1
  302. package/dist/harness/index.js +10 -11
  303. package/dist/harness/index.js.map +1 -1
  304. package/dist/harness/mcp.d.ts +38 -0
  305. package/dist/harness/mcp.d.ts.map +1 -0
  306. package/dist/harness/mcp.js +306 -0
  307. package/dist/harness/mcp.js.map +1 -0
  308. package/dist/harness/models.d.ts +7 -4
  309. package/dist/harness/models.d.ts.map +1 -1
  310. package/dist/harness/models.js +54 -55
  311. package/dist/harness/models.js.map +1 -1
  312. package/dist/harness/open-connector.d.ts +14 -0
  313. package/dist/harness/open-connector.d.ts.map +1 -0
  314. package/dist/harness/open-connector.js +204 -0
  315. package/dist/harness/open-connector.js.map +1 -0
  316. package/dist/harness/presenter.d.ts +30 -0
  317. package/dist/harness/presenter.d.ts.map +1 -0
  318. package/dist/harness/presenter.js +804 -0
  319. package/dist/harness/presenter.js.map +1 -0
  320. package/dist/harness/prompt.d.ts +30 -0
  321. package/dist/harness/prompt.d.ts.map +1 -0
  322. package/dist/harness/prompt.js +426 -0
  323. package/dist/harness/prompt.js.map +1 -0
  324. package/dist/harness/runner.d.ts +2 -123
  325. package/dist/harness/runner.d.ts.map +1 -1
  326. package/dist/harness/runner.js +505 -417
  327. package/dist/harness/runner.js.map +1 -1
  328. package/dist/harness/session.d.ts +119 -0
  329. package/dist/harness/session.d.ts.map +1 -0
  330. package/dist/harness/session.js +561 -0
  331. package/dist/harness/session.js.map +1 -0
  332. package/dist/harness/skills.d.ts +17 -28
  333. package/dist/harness/skills.d.ts.map +1 -1
  334. package/dist/harness/skills.js +104 -39
  335. package/dist/harness/skills.js.map +1 -1
  336. package/dist/harness/subagent-profiles.d.ts +8 -0
  337. package/dist/harness/subagent-profiles.d.ts.map +1 -0
  338. package/dist/harness/subagent-profiles.js +284 -0
  339. package/dist/harness/subagent-profiles.js.map +1 -0
  340. package/dist/harness/subagent.d.ts +64 -0
  341. package/dist/harness/subagent.d.ts.map +1 -0
  342. package/dist/harness/subagent.js +687 -0
  343. package/dist/harness/subagent.js.map +1 -0
  344. package/dist/harness/tools/attach.d.ts.map +1 -0
  345. package/dist/{adapters/slack → harness}/tools/attach.js +1 -1
  346. package/dist/harness/tools/attach.js.map +1 -0
  347. package/dist/{tools → harness/tools}/event.d.ts +3 -32
  348. package/dist/harness/tools/event.d.ts.map +1 -0
  349. package/dist/harness/tools/event.js +178 -0
  350. package/dist/harness/tools/event.js.map +1 -0
  351. package/dist/harness/tools/generate-image.d.ts +23 -0
  352. package/dist/harness/tools/generate-image.d.ts.map +1 -0
  353. package/dist/harness/tools/generate-image.js +65 -0
  354. package/dist/harness/tools/generate-image.js.map +1 -0
  355. package/dist/harness/tools/host-fn-tool.d.ts +21 -0
  356. package/dist/harness/tools/host-fn-tool.d.ts.map +1 -0
  357. package/dist/harness/tools/host-fn-tool.js +32 -0
  358. package/dist/harness/tools/host-fn-tool.js.map +1 -0
  359. package/dist/harness/tools/index.d.ts +38 -0
  360. package/dist/harness/tools/index.d.ts.map +1 -0
  361. package/dist/harness/tools/index.js +45 -0
  362. package/dist/harness/tools/index.js.map +1 -0
  363. package/dist/harness/tools/pi-tools.d.ts +18 -0
  364. package/dist/harness/tools/pi-tools.d.ts.map +1 -0
  365. package/dist/harness/tools/pi-tools.js +84 -0
  366. package/dist/harness/tools/pi-tools.js.map +1 -0
  367. package/dist/harness/tools/react.d.ts.map +1 -0
  368. package/dist/{tools → harness/tools}/react.js +6 -17
  369. package/dist/harness/tools/react.js.map +1 -0
  370. package/dist/{tools → harness/tools}/sandbox.d.ts +4 -4
  371. package/dist/harness/tools/sandbox.d.ts.map +1 -0
  372. package/dist/{tools → harness/tools}/sandbox.js +12 -8
  373. package/dist/harness/tools/sandbox.js.map +1 -0
  374. package/dist/harness/tools/subagent.d.ts +88 -0
  375. package/dist/harness/tools/subagent.d.ts.map +1 -0
  376. package/dist/harness/tools/subagent.js +681 -0
  377. package/dist/harness/tools/subagent.js.map +1 -0
  378. package/dist/harness/tools/types.d.ts +29 -0
  379. package/dist/harness/tools/types.d.ts.map +1 -0
  380. package/dist/harness/tools/types.js +2 -0
  381. package/dist/harness/tools/types.js.map +1 -0
  382. package/dist/harness/types.d.ts +384 -25
  383. package/dist/harness/types.d.ts.map +1 -1
  384. package/dist/harness/types.js +1 -1
  385. package/dist/harness/types.js.map +1 -1
  386. package/dist/index.d.ts +33 -9
  387. package/dist/index.d.ts.map +1 -1
  388. package/dist/index.js +19 -6
  389. package/dist/index.js.map +1 -1
  390. package/dist/main.js +344 -188
  391. package/dist/main.js.map +1 -1
  392. package/dist/observability/index.d.ts +33 -0
  393. package/dist/observability/index.d.ts.map +1 -0
  394. package/dist/observability/index.js +257 -0
  395. package/dist/observability/index.js.map +1 -0
  396. package/dist/observability/instrument.js +14 -6
  397. package/dist/observability/instrument.js.map +1 -1
  398. package/dist/observability/otel.d.ts +10 -0
  399. package/dist/observability/otel.d.ts.map +1 -0
  400. package/dist/observability/otel.js +183 -0
  401. package/dist/observability/otel.js.map +1 -0
  402. package/dist/observability/sentry.d.ts +40 -7
  403. package/dist/observability/sentry.d.ts.map +1 -1
  404. package/dist/observability/sentry.js +176 -32
  405. package/dist/observability/sentry.js.map +1 -1
  406. package/dist/observability/types.d.ts +24 -3
  407. package/dist/observability/types.d.ts.map +1 -1
  408. package/dist/observability/types.js.map +1 -1
  409. package/dist/office/index.d.ts +138 -0
  410. package/dist/office/index.d.ts.map +1 -0
  411. package/dist/office/index.js +1084 -0
  412. package/dist/office/index.js.map +1 -0
  413. package/dist/office/projection.d.ts +22 -0
  414. package/dist/office/projection.d.ts.map +1 -0
  415. package/dist/office/projection.js +208 -0
  416. package/dist/office/projection.js.map +1 -0
  417. package/dist/office/types.d.ts +116 -0
  418. package/dist/office/types.d.ts.map +1 -0
  419. package/dist/office/types.js +2 -0
  420. package/dist/office/types.js.map +1 -0
  421. package/dist/platform-messages.d.ts +1 -0
  422. package/dist/platform-messages.d.ts.map +1 -1
  423. package/dist/platform-messages.js +3 -0
  424. package/dist/platform-messages.js.map +1 -1
  425. package/dist/process-lifecycle.d.ts +19 -0
  426. package/dist/process-lifecycle.d.ts.map +1 -0
  427. package/dist/process-lifecycle.js +67 -0
  428. package/dist/process-lifecycle.js.map +1 -0
  429. package/dist/runtime/conversation-runtime.d.ts +1 -1
  430. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  431. package/dist/runtime/conversation-runtime.js +398 -149
  432. package/dist/runtime/conversation-runtime.js.map +1 -1
  433. package/dist/runtime/session-lifecycle.d.ts +76 -0
  434. package/dist/runtime/session-lifecycle.d.ts.map +1 -0
  435. package/dist/runtime/session-lifecycle.js +404 -0
  436. package/dist/runtime/session-lifecycle.js.map +1 -0
  437. package/dist/runtime/types.d.ts +58 -14
  438. package/dist/runtime/types.d.ts.map +1 -1
  439. package/dist/runtime/types.js.map +1 -1
  440. package/dist/sandbox/cloudflare.d.ts +4 -0
  441. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  442. package/dist/sandbox/cloudflare.js +54 -52
  443. package/dist/sandbox/cloudflare.js.map +1 -1
  444. package/dist/sandbox/container.d.ts +3 -0
  445. package/dist/sandbox/container.d.ts.map +1 -1
  446. package/dist/sandbox/container.js +19 -7
  447. package/dist/sandbox/container.js.map +1 -1
  448. package/dist/sandbox/host.d.ts +3 -0
  449. package/dist/sandbox/host.d.ts.map +1 -1
  450. package/dist/sandbox/host.js +44 -35
  451. package/dist/sandbox/host.js.map +1 -1
  452. package/dist/sandbox/identity.d.ts +42 -0
  453. package/dist/sandbox/identity.d.ts.map +1 -0
  454. package/dist/sandbox/identity.js +77 -0
  455. package/dist/sandbox/identity.js.map +1 -0
  456. package/dist/sandbox/index.d.ts +16 -6
  457. package/dist/sandbox/index.d.ts.map +1 -1
  458. package/dist/sandbox/index.js +73 -17
  459. package/dist/sandbox/index.js.map +1 -1
  460. package/dist/sandbox/provisioner.d.ts +121 -0
  461. package/dist/sandbox/provisioner.d.ts.map +1 -0
  462. package/dist/{provisioner.js → sandbox/provisioner.js} +352 -20
  463. package/dist/sandbox/provisioner.js.map +1 -0
  464. package/dist/sandbox/types.d.ts +43 -9
  465. package/dist/sandbox/types.d.ts.map +1 -1
  466. package/dist/sandbox/types.js.map +1 -1
  467. package/dist/sandbox/utils.d.ts +24 -0
  468. package/dist/sandbox/utils.d.ts.map +1 -1
  469. package/dist/sandbox/utils.js +92 -1
  470. package/dist/sandbox/utils.js.map +1 -1
  471. package/dist/sessions/chat-history-sync.d.ts +23 -0
  472. package/dist/sessions/chat-history-sync.d.ts.map +1 -0
  473. package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +234 -175
  474. package/dist/sessions/chat-history-sync.js.map +1 -0
  475. package/dist/sessions/history-line.d.ts +29 -0
  476. package/dist/sessions/history-line.d.ts.map +1 -0
  477. package/dist/sessions/history-line.js +45 -0
  478. package/dist/sessions/history-line.js.map +1 -0
  479. package/dist/sessions/migrate-common.d.ts +43 -0
  480. package/dist/sessions/migrate-common.d.ts.map +1 -0
  481. package/dist/sessions/migrate-common.js +99 -0
  482. package/dist/sessions/migrate-common.js.map +1 -0
  483. package/dist/sessions/migrate-pi-084.d.ts +8 -0
  484. package/dist/sessions/migrate-pi-084.d.ts.map +1 -0
  485. package/dist/sessions/migrate-pi-084.js +302 -0
  486. package/dist/sessions/migrate-pi-084.js.map +1 -0
  487. package/dist/sessions/migrate-v3.d.ts +15 -0
  488. package/dist/sessions/migrate-v3.d.ts.map +1 -0
  489. package/dist/sessions/migrate-v3.js +419 -0
  490. package/dist/sessions/migrate-v3.js.map +1 -0
  491. package/dist/sessions/session-key.d.ts +33 -0
  492. package/dist/sessions/session-key.d.ts.map +1 -0
  493. package/dist/sessions/session-key.js +115 -0
  494. package/dist/sessions/session-key.js.map +1 -0
  495. package/dist/sessions/session-store.d.ts +51 -0
  496. package/dist/sessions/session-store.d.ts.map +1 -0
  497. package/dist/sessions/session-store.js +658 -0
  498. package/dist/sessions/session-store.js.map +1 -0
  499. package/dist/sessions/store.d.ts +17 -10
  500. package/dist/sessions/store.d.ts.map +1 -1
  501. package/dist/sessions/store.js +182 -47
  502. package/dist/sessions/store.js.map +1 -1
  503. package/dist/sessions/types.d.ts +73 -7
  504. package/dist/sessions/types.d.ts.map +1 -1
  505. package/dist/sessions/types.js +1 -1
  506. package/dist/sessions/types.js.map +1 -1
  507. package/dist/settings-mutation.d.ts +40 -0
  508. package/dist/settings-mutation.d.ts.map +1 -0
  509. package/dist/settings-mutation.js +66 -0
  510. package/dist/settings-mutation.js.map +1 -0
  511. package/dist/types.d.ts +331 -140
  512. package/dist/types.d.ts.map +1 -1
  513. package/dist/types.js +2 -2
  514. package/dist/types.js.map +1 -1
  515. package/dist/vault/index.d.ts +52 -2
  516. package/dist/vault/index.d.ts.map +1 -1
  517. package/dist/vault/index.js +218 -86
  518. package/dist/vault/index.js.map +1 -1
  519. package/dist/vault/types.d.ts +6 -2
  520. package/dist/vault/types.d.ts.map +1 -1
  521. package/dist/vault/types.js.map +1 -1
  522. package/package.json +77 -39
  523. package/dist/adapters/slack/tools/attach.d.ts.map +0 -1
  524. package/dist/adapters/slack/tools/attach.js.map +0 -1
  525. package/dist/adapters/streaming.d.ts +0 -18
  526. package/dist/adapters/streaming.d.ts.map +0 -1
  527. package/dist/adapters/streaming.js +0 -44
  528. package/dist/adapters/streaming.js.map +0 -1
  529. package/dist/adapters/telegram/html.d.ts +0 -3
  530. package/dist/adapters/telegram/html.d.ts.map +0 -1
  531. package/dist/adapters/telegram/html.js +0 -98
  532. package/dist/adapters/telegram/html.js.map +0 -1
  533. package/dist/agent-events.d.ts +0 -5
  534. package/dist/agent-events.d.ts.map +0 -1
  535. package/dist/agent-events.js +0 -26
  536. package/dist/agent-events.js.map +0 -1
  537. package/dist/agent.d.ts +0 -39
  538. package/dist/agent.d.ts.map +0 -1
  539. package/dist/agent.js +0 -1291
  540. package/dist/agent.js.map +0 -1
  541. package/dist/commands/admin.d.ts.map +0 -1
  542. package/dist/commands/admin.js.map +0 -1
  543. package/dist/commands/auto-reply.d.ts.map +0 -1
  544. package/dist/commands/auto-reply.js +0 -76
  545. package/dist/commands/auto-reply.js.map +0 -1
  546. package/dist/commands/extensions.d.ts +0 -14
  547. package/dist/commands/extensions.d.ts.map +0 -1
  548. package/dist/commands/extensions.js +0 -55
  549. package/dist/commands/extensions.js.map +0 -1
  550. package/dist/commands/login.d.ts +0 -5
  551. package/dist/commands/login.d.ts.map +0 -1
  552. package/dist/commands/login.js +0 -115
  553. package/dist/commands/login.js.map +0 -1
  554. package/dist/commands/model.d.ts +0 -10
  555. package/dist/commands/model.d.ts.map +0 -1
  556. package/dist/commands/model.js +0 -102
  557. package/dist/commands/model.js.map +0 -1
  558. package/dist/commands/new.d.ts.map +0 -1
  559. package/dist/commands/new.js +0 -25
  560. package/dist/commands/new.js.map +0 -1
  561. package/dist/commands/parse.d.ts +0 -7
  562. package/dist/commands/parse.d.ts.map +0 -1
  563. package/dist/commands/parse.js +0 -14
  564. package/dist/commands/parse.js.map +0 -1
  565. package/dist/commands/registry.d.ts +0 -5
  566. package/dist/commands/registry.d.ts.map +0 -1
  567. package/dist/commands/registry.js +0 -31
  568. package/dist/commands/registry.js.map +0 -1
  569. package/dist/commands/sandbox.d.ts.map +0 -1
  570. package/dist/commands/sandbox.js +0 -78
  571. package/dist/commands/sandbox.js.map +0 -1
  572. package/dist/commands/session-view.d.ts.map +0 -1
  573. package/dist/commands/session-view.js.map +0 -1
  574. package/dist/commands/types.d.ts +0 -66
  575. package/dist/commands/types.d.ts.map +0 -1
  576. package/dist/commands/types.js.map +0 -1
  577. package/dist/commands/utils.d.ts +0 -11
  578. package/dist/commands/utils.d.ts.map +0 -1
  579. package/dist/commands/utils.js.map +0 -1
  580. package/dist/download.d.ts.map +0 -1
  581. package/dist/download.js +0 -89
  582. package/dist/download.js.map +0 -1
  583. package/dist/events.d.ts.map +0 -1
  584. package/dist/events.js.map +0 -1
  585. package/dist/execution-resolver.d.ts +0 -21
  586. package/dist/execution-resolver.d.ts.map +0 -1
  587. package/dist/execution-resolver.js +0 -170
  588. package/dist/execution-resolver.js.map +0 -1
  589. package/dist/harness/auth.d.ts +0 -16
  590. package/dist/harness/auth.d.ts.map +0 -1
  591. package/dist/harness/auth.js +0 -86
  592. package/dist/harness/auth.js.map +0 -1
  593. package/dist/harness/extensions/loader.d.ts +0 -62
  594. package/dist/harness/extensions/loader.d.ts.map +0 -1
  595. package/dist/harness/extensions/loader.js +0 -374
  596. package/dist/harness/extensions/loader.js.map +0 -1
  597. package/dist/harness/extensions/registry.d.ts +0 -23
  598. package/dist/harness/extensions/registry.d.ts.map +0 -1
  599. package/dist/harness/extensions/registry.js +0 -45
  600. package/dist/harness/extensions/registry.js.map +0 -1
  601. package/dist/harness/extensions/types.d.ts +0 -248
  602. package/dist/harness/extensions/types.d.ts.map +0 -1
  603. package/dist/harness/extensions/types.js.map +0 -1
  604. package/dist/harness/session-store.d.ts +0 -77
  605. package/dist/harness/session-store.d.ts.map +0 -1
  606. package/dist/harness/session-store.js +0 -248
  607. package/dist/harness/session-store.js.map +0 -1
  608. package/dist/harness/settings.d.ts +0 -47
  609. package/dist/harness/settings.d.ts.map +0 -1
  610. package/dist/harness/settings.js +0 -29
  611. package/dist/harness/settings.js.map +0 -1
  612. package/dist/model-registry.d.ts +0 -4
  613. package/dist/model-registry.d.ts.map +0 -1
  614. package/dist/model-registry.js +0 -7
  615. package/dist/model-registry.js.map +0 -1
  616. package/dist/portal-shell.d.ts +0 -4
  617. package/dist/portal-shell.d.ts.map +0 -1
  618. package/dist/portal-shell.js.map +0 -1
  619. package/dist/provisioner.d.ts +0 -61
  620. package/dist/provisioner.d.ts.map +0 -1
  621. package/dist/provisioner.js.map +0 -1
  622. package/dist/runtime/agent-run-controller.d.ts +0 -31
  623. package/dist/runtime/agent-run-controller.d.ts.map +0 -1
  624. package/dist/runtime/agent-run-controller.js +0 -195
  625. package/dist/runtime/agent-run-controller.js.map +0 -1
  626. package/dist/sandbox/errors.d.ts +0 -6
  627. package/dist/sandbox/errors.d.ts.map +0 -1
  628. package/dist/sandbox/errors.js +0 -11
  629. package/dist/sandbox/errors.js.map +0 -1
  630. package/dist/sandbox/firecracker.d.ts +0 -15
  631. package/dist/sandbox/firecracker.d.ts.map +0 -1
  632. package/dist/sandbox/firecracker.js +0 -212
  633. package/dist/sandbox/firecracker.js.map +0 -1
  634. package/dist/sandbox/image.d.ts +0 -3
  635. package/dist/sandbox/image.d.ts.map +0 -1
  636. package/dist/sandbox/image.js +0 -27
  637. package/dist/sandbox/image.js.map +0 -1
  638. package/dist/sandbox/path-context.d.ts +0 -3
  639. package/dist/sandbox/path-context.d.ts.map +0 -1
  640. package/dist/sandbox/path-context.js +0 -20
  641. package/dist/sandbox/path-context.js.map +0 -1
  642. package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
  643. package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
  644. package/dist/sessions/agent-memory-file-manager.js.map +0 -1
  645. package/dist/sessions/metadata.d.ts +0 -3
  646. package/dist/sessions/metadata.d.ts.map +0 -1
  647. package/dist/sessions/metadata.js +0 -11
  648. package/dist/sessions/metadata.js.map +0 -1
  649. package/dist/sessions/policy.d.ts +0 -6
  650. package/dist/sessions/policy.d.ts.map +0 -1
  651. package/dist/sessions/policy.js +0 -23
  652. package/dist/sessions/policy.js.map +0 -1
  653. package/dist/store.d.ts +0 -46
  654. package/dist/store.d.ts.map +0 -1
  655. package/dist/store.js +0 -177
  656. package/dist/store.js.map +0 -1
  657. package/dist/tools/bash.d.ts +0 -10
  658. package/dist/tools/bash.d.ts.map +0 -1
  659. package/dist/tools/bash.js +0 -80
  660. package/dist/tools/bash.js.map +0 -1
  661. package/dist/tools/edit.d.ts +0 -11
  662. package/dist/tools/edit.d.ts.map +0 -1
  663. package/dist/tools/edit.js +0 -131
  664. package/dist/tools/edit.js.map +0 -1
  665. package/dist/tools/event.d.ts.map +0 -1
  666. package/dist/tools/event.js +0 -252
  667. package/dist/tools/event.js.map +0 -1
  668. package/dist/tools/index.d.ts +0 -24
  669. package/dist/tools/index.d.ts.map +0 -1
  670. package/dist/tools/index.js +0 -31
  671. package/dist/tools/index.js.map +0 -1
  672. package/dist/tools/react.d.ts.map +0 -1
  673. package/dist/tools/react.js.map +0 -1
  674. package/dist/tools/read.d.ts +0 -11
  675. package/dist/tools/read.d.ts.map +0 -1
  676. package/dist/tools/read.js +0 -134
  677. package/dist/tools/read.js.map +0 -1
  678. package/dist/tools/sandbox.d.ts.map +0 -1
  679. package/dist/tools/sandbox.js.map +0 -1
  680. package/dist/tools/truncate.d.ts +0 -33
  681. package/dist/tools/truncate.d.ts.map +0 -1
  682. package/dist/tools/truncate.js +0 -184
  683. package/dist/tools/truncate.js.map +0 -1
  684. package/dist/tools/types.d.ts +0 -54
  685. package/dist/tools/types.d.ts.map +0 -1
  686. package/dist/tools/types.js.map +0 -1
  687. package/dist/tools/write.d.ts +0 -10
  688. package/dist/tools/write.d.ts.map +0 -1
  689. package/dist/tools/write.js +0 -29
  690. package/dist/tools/write.js.map +0 -1
  691. package/dist/trigger.d.ts +0 -22
  692. package/dist/trigger.d.ts.map +0 -1
  693. package/dist/trigger.js +0 -100
  694. package/dist/trigger.js.map +0 -1
  695. package/dist/utils/date.d.ts +0 -10
  696. package/dist/utils/date.d.ts.map +0 -1
  697. package/dist/utils/date.js +0 -23
  698. package/dist/utils/date.js.map +0 -1
  699. package/dist/utils/env.d.ts +0 -3
  700. package/dist/utils/env.d.ts.map +0 -1
  701. package/dist/utils/env.js +0 -12
  702. package/dist/utils/env.js.map +0 -1
  703. package/dist/utils/file-guards.d.ts.map +0 -1
  704. package/dist/utils/file-guards.js.map +0 -1
  705. package/dist/utils/fs-atomic.d.ts +0 -10
  706. package/dist/utils/fs-atomic.d.ts.map +0 -1
  707. package/dist/utils/fs-atomic.js +0 -45
  708. package/dist/utils/fs-atomic.js.map +0 -1
  709. package/dist/utils/html.d.ts +0 -2
  710. package/dist/utils/html.d.ts.map +0 -1
  711. package/dist/utils/html.js +0 -4
  712. package/dist/utils/html.js.map +0 -1
  713. package/dist/utils/http-body.d.ts +0 -10
  714. package/dist/utils/http-body.d.ts.map +0 -1
  715. package/dist/utils/http-body.js +0 -34
  716. package/dist/utils/http-body.js.map +0 -1
  717. package/dist/vault/routing.d.ts +0 -3
  718. package/dist/vault/routing.d.ts.map +0 -1
  719. package/dist/vault/routing.js +0 -13
  720. package/dist/vault/routing.js.map +0 -1
  721. package/dist/web/admin/portal.d.ts +0 -5
  722. package/dist/web/admin/portal.d.ts.map +0 -1
  723. package/dist/web/admin/portal.js +0 -2572
  724. package/dist/web/admin/portal.js.map +0 -1
  725. package/dist/web/admin/provider-models.d.ts.map +0 -1
  726. package/dist/web/admin/provider-models.js.map +0 -1
  727. package/dist/web/admin/store.d.ts +0 -13
  728. package/dist/web/admin/store.d.ts.map +0 -1
  729. package/dist/web/admin/store.js +0 -14
  730. package/dist/web/admin/store.js.map +0 -1
  731. package/dist/web/admin/types.d.ts +0 -30
  732. package/dist/web/admin/types.d.ts.map +0 -1
  733. package/dist/web/admin/types.js.map +0 -1
  734. package/dist/web/agent-events/portal.d.ts +0 -3
  735. package/dist/web/agent-events/portal.d.ts.map +0 -1
  736. package/dist/web/agent-events/portal.js +0 -18
  737. package/dist/web/agent-events/portal.js.map +0 -1
  738. package/dist/web/login/oauth.d.ts +0 -6
  739. package/dist/web/login/oauth.d.ts.map +0 -1
  740. package/dist/web/login/oauth.js.map +0 -1
  741. package/dist/web/login/portal.d.ts.map +0 -1
  742. package/dist/web/login/portal.js.map +0 -1
  743. package/dist/web/login/store.d.ts +0 -8
  744. package/dist/web/login/store.d.ts.map +0 -1
  745. package/dist/web/login/store.js +0 -15
  746. package/dist/web/login/store.js.map +0 -1
  747. package/dist/web/login/types.d.ts.map +0 -1
  748. package/dist/web/login/types.js.map +0 -1
  749. package/dist/web/request.d.ts +0 -3
  750. package/dist/web/request.d.ts.map +0 -1
  751. package/dist/web/request.js +0 -13
  752. package/dist/web/request.js.map +0 -1
  753. package/dist/web/server.d.ts.map +0 -1
  754. package/dist/web/server.js.map +0 -1
  755. package/dist/web/session-view/command.d.ts +0 -4
  756. package/dist/web/session-view/command.d.ts.map +0 -1
  757. package/dist/web/session-view/command.js +0 -7
  758. package/dist/web/session-view/command.js.map +0 -1
  759. package/dist/web/session-view/portal.d.ts +0 -13
  760. package/dist/web/session-view/portal.d.ts.map +0 -1
  761. package/dist/web/session-view/portal.js.map +0 -1
  762. package/dist/web/session-view/service.d.ts +0 -6
  763. package/dist/web/session-view/service.d.ts.map +0 -1
  764. package/dist/web/session-view/service.js +0 -498
  765. package/dist/web/session-view/service.js.map +0 -1
  766. package/dist/web/session-view/store.d.ts +0 -8
  767. package/dist/web/session-view/store.d.ts.map +0 -1
  768. package/dist/web/session-view/store.js +0 -15
  769. package/dist/web/session-view/store.js.map +0 -1
  770. package/dist/web/session-view/types.d.ts.map +0 -1
  771. package/dist/web/session-view/types.js.map +0 -1
  772. package/dist/web/token-store.d.ts.map +0 -1
  773. package/dist/web/token-store.js.map +0 -1
  774. package/dist/web/types.d.ts.map +0 -1
  775. package/dist/web/types.js.map +0 -1
  776. /package/dist/{commands → adapters/commands}/admin.d.ts +0 -0
  777. /package/dist/{commands → adapters/commands}/new.d.ts +0 -0
  778. /package/dist/{commands → adapters/commands}/sandbox.d.ts +0 -0
  779. /package/dist/{commands → adapters/commands}/session-view.d.ts +0 -0
  780. /package/dist/{commands → adapters/commands}/types.js +0 -0
  781. /package/dist/{harness/extensions → adapters/github}/types.js +0 -0
  782. /package/dist/{tools → adapters/web/admin}/types.js +0 -0
  783. /package/dist/{web/admin → adapters/web/login}/types.js +0 -0
  784. /package/dist/{web/login → adapters/web/session-view}/types.js +0 -0
  785. /package/dist/{web → adapters/web}/token-store.d.ts +0 -0
  786. /package/dist/{web → adapters/web}/types.d.ts +0 -0
  787. /package/dist/{web/session-view → adapters/web}/types.js +0 -0
  788. /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
  789. /package/dist/{web → cli}/types.js +0 -0
  790. /package/dist/{adapters/slack → harness}/tools/attach.d.ts +0 -0
  791. /package/dist/{tools → harness/tools}/react.d.ts +0 -0
@@ -1,440 +1,528 @@
1
- /**
2
- * MikanAgentSession — mikan's agent run loop.
3
- *
4
- * Owns a pi-agent-core `Agent` and layers on the behaviors mikan needs for
5
- * long-lived chat conversations:
6
- *
7
- * - message persistence into the conversation's {@link SessionStore}
8
- * - automatic context compaction (threshold and overflow recovery), using
9
- * pi-agent-core's compaction pipeline over the session tree
10
- * - automatic retry with exponential backoff on transient provider errors
11
- * - extension hook dispatch ({@link ExtensionRegistry})
12
- *
13
- * Events mirror the agent's lifecycle events plus `compaction_start/_end`
14
- * and `auto_retry_start/_end`, preserving the event surface mikan's
15
- * platform adapters already render.
16
- */
17
- import { Agent, calculateContextTokens, compact, convertToLlm, estimateContextTokens, getOrThrow, prepareCompaction, shouldCompact, } from "@earendil-works/pi-agent-core";
18
- import { isContextOverflow, } from "@earendil-works/pi-ai";
1
+ import { MikanModels } from "./models.js";
2
+ import { MikanAgentSession, DEFAULT_EVENT_BUDGET } from "./session.js";
3
+ import { runSubagent, DEFAULT_GLOBAL_SUBAGENT_SLOTS, SubagentSlotPool } from "./subagent.js";
4
+ import { loadSubagentProfiles } from "./subagent-profiles.js";
5
+ import { createMikanTools, createSubagentTool } from "./tools/index.js";
6
+ import { adaptAgentTool } from "./tools/pi-tools.js";
7
+ import { createSandboxExecutionEnv } from "./execution-env.js";
8
+ import { mkdir } from "node:fs/promises";
9
+ import { join } from "node:path";
10
+ import { ActorExecutionResolver } from "./execution-resolver.js";
11
+ import { assertSandboxSupportsWorkspacePolicy, createExecutor, getUnresolvedSandboxPathContext, } from "../sandbox/index.js";
12
+ import { resolveWorkspaceProjection } from "../office/projection.js";
13
+ import { createHash } from "node:crypto";
14
+ import { resolveConversationSettings } from "../config.js";
15
+ import { provisionOfficeOpenConnectorToken } from "./open-connector.js";
16
+ import { addLifecycleEvent, updateActiveSpanAttribution } from "../observability/index.js";
17
+ import { ChatHistorySync } from "../sessions/chat-history-sync.js";
18
+ import { conversationIdOf, isThreadSessionKey } from "../sessions/session-key.js";
19
+ import { extractSessionUuid, openManagedSession, } from "../sessions/store.js";
20
+ import { loadMikanSkills } from "./skills.js";
21
+ import { normalizeAttachRuntimePath, withStagedRuntimeFile, buildPromptPayload, buildSystemPrompt, buildTurnInstructions, getMemory, resolveTriggerAttribution, } from "./prompt.js";
22
+ import { attachSessionEventHandlers, activateRunPresentation, createRunState, finalizeRunResponse, isEventTriggerAttribution, reportUsageSummary, } from "./presenter.js";
19
23
  import * as log from "../log.js";
20
- import { resolveHarnessSettings } from "./settings.js";
21
- // Transient provider failures worth retrying: overload/rate-limit responses,
22
- // 5xx statuses, and network/stream interruptions.
23
- const RETRYABLE_ERROR_PATTERN = /overloaded|provider.?returned.?error|rate.?limit|too many requests|429|500|502|503|504|service.?unavailable|server.?error|internal.?error|network.?error|connection.?error|connection.?refused|connection.?lost|websocket.?closed|websocket.?error|other side closed|fetch failed|upstream.?connect|reset before headers|socket hang up|ended without|stream ended before message_stop|http2 request did not get a response|timed? out|timeout|terminated|retry delay/i;
24
- function sleep(ms, signal) {
25
- return new Promise((resolve, reject) => {
26
- if (signal.aborted) {
27
- reject(new Error("aborted"));
28
- return;
29
- }
30
- const timer = setTimeout(() => {
31
- signal.removeEventListener("abort", onAbort);
32
- resolve();
33
- }, ms);
34
- const onAbort = () => {
35
- clearTimeout(timer);
36
- reject(new Error("aborted"));
37
- };
38
- signal.addEventListener("abort", onAbort, { once: true });
24
+ // One process-wide fan-out account: per-conversation queues serialize runs,
25
+ // but each run can fan out up to the per-run cap — without this shared
26
+ // ceiling, N busy conversations hold N × cap live subagent sessions.
27
+ const globalSubagentSlots = new SubagentSlotPool(DEFAULT_GLOBAL_SUBAGENT_SLOTS);
28
+ async function createConfiguredAgentSession(params) {
29
+ const { workspaceDir, systemPrompt, model, thinkingLevel, tools, toolContext, sessionStore, models, } = params;
30
+ const loadedProfiles = loadSubagentProfiles(workspaceDir);
31
+ for (const diagnostic of loadedProfiles.diagnostics) {
32
+ log.logWarning(`Subagent profile ignored: ${diagnostic.path}`, diagnostic.message);
33
+ }
34
+ const availableToolNames = new Set(tools.map((tool) => tool.name));
35
+ const runnableProfiles = new Map([...loadedProfiles.profiles].filter(([, profile]) => profile.tools.every((tool) => availableToolNames.has(tool))));
36
+ let session;
37
+ const subagentTool = createSubagentTool((request, hooks) => runSubagent({
38
+ request,
39
+ ...(hooks?.onActivity ? { onActivity: hooks.onActivity } : {}),
40
+ defaultModel: model,
41
+ thinkingLevel,
42
+ models,
43
+ workspaceDir,
44
+ availableTools: tools,
45
+ profiles: runnableProfiles,
46
+ slots: globalSubagentSlots,
47
+ toolContext,
48
+ parentMessages: [...session.messages],
49
+ onUsage: session.captureExternalUsageSink(),
50
+ }), runnableProfiles);
51
+ session = new MikanAgentSession({
52
+ systemPrompt,
53
+ model,
54
+ thinkingLevel,
55
+ tools: [...tools, adaptAgentTool(subagentTool)],
56
+ toolContext,
57
+ models,
58
+ sessionStore,
39
59
  });
60
+ const reloaded = await session.reloadFromSession();
61
+ if (reloaded > 0)
62
+ log.logInfo(`Reloaded ${reloaded} messages from session context`);
63
+ return session;
40
64
  }
41
- export class MikanAgentSession {
42
- constructor(options) {
43
- this.listeners = new Set();
44
- this.retryAttempt = 0;
45
- this.overflowRecoveryAttempted = false;
46
- this.tally = { tokens: 0, costUsd: 0, llmCalls: 0, startedAt: 0 };
47
- this.runBudget = {};
48
- this.models = options.models;
49
- this.sessionStore = options.sessionStore;
50
- this.settings = resolveHarnessSettings(options.settings);
51
- this.extensions = options.extensions;
52
- const tools = [...options.tools, ...(options.extensions?.getContributedTools() ?? [])];
53
- this.agent = new Agent({
54
- initialState: {
55
- systemPrompt: options.systemPrompt,
56
- model: options.model,
57
- thinkingLevel: options.thinkingLevel,
58
- tools,
59
- },
60
- convertToLlm,
61
- streamFn: (model, context, streamOptions) => this.models.models.streamSimple(model, context, streamOptions),
62
- beforeToolCall: async ({ toolCall, args }) => {
63
- if (!this.extensions?.hasHandlers("tool_call"))
64
- return undefined;
65
- const result = await this.extensions.emit("tool_call", {
66
- toolCallId: toolCall.id,
67
- toolName: toolCall.name,
68
- args,
69
- });
70
- return result ?? undefined;
71
- },
72
- afterToolCall: async ({ toolCall, args, result, isError }) => {
73
- if (this.extensions?.hasHandlers("tool_result")) {
74
- await this.extensions.emit("tool_result", {
75
- toolCallId: toolCall.id,
76
- toolName: toolCall.name,
77
- args,
78
- content: result.content,
79
- isError,
80
- });
81
- }
82
- return undefined;
83
- },
84
- });
85
- this.agent.subscribe(async (event) => {
86
- await this.handleAgentEvent(event);
87
- });
88
- }
89
- /** Conversation transcript currently held by the agent. */
90
- get messages() {
91
- return this.agent.state.messages;
92
- }
93
- get model() {
94
- return this.agent.state.model;
95
- }
96
- subscribe(listener) {
97
- this.listeners.add(listener);
98
- return () => this.listeners.delete(listener);
99
- }
100
- /** Replace the agent transcript from the persisted session tree. */
101
- reloadFromSession() {
102
- const context = this.sessionStore.buildSessionContext();
103
- if (context.messages.length > 0) {
104
- this.agent.state.messages = context.messages;
105
- }
106
- return context.messages.length;
107
- }
108
- /**
109
- * Send a user prompt and run the agent loop to completion, including
110
- * automatic retries and compaction. Resolves when the turn (and any
111
- * recovery continuations) settles.
112
- *
113
- * @param options.budget Per-run resource ceilings that override the session
114
- * defaults. Autonomous (event / trigger) runs should pass a budget so a
115
- * runaway loop is stopped even with no human watching.
116
- */
117
- async prompt(text, options) {
118
- if (this.agent.state.isStreaming) {
119
- throw new Error("Agent is already processing a prompt");
120
- }
121
- const model = this.agent.state.model;
122
- await this.ensureAuthConfigured(model);
123
- this.retryAttempt = 0;
124
- this.overflowRecoveryAttempted = false;
125
- this.runBudget = { ...this.settings.budget, ...options?.budget };
126
- this.budgetExceededReason = undefined;
127
- this.tally = { tokens: 0, costUsd: 0, llmCalls: 0, startedAt: Date.now() };
128
- // A previous turn may have ended over the threshold (for example after an
129
- // abort); compact before adding new context on top.
130
- const lastAssistant = this.findLastAssistantMessage();
131
- if (lastAssistant && lastAssistant.stopReason !== "error") {
132
- await this.checkThresholdCompaction(lastAssistant);
133
- }
134
- let systemPrompt = this.agent.state.systemPrompt;
135
- if (this.extensions?.hasHandlers("before_agent_start")) {
136
- const result = await this.extensions.emit("before_agent_start", {
137
- prompt: text,
138
- images: options?.images,
139
- systemPrompt,
140
- });
141
- if (result?.systemPrompt && result.systemPrompt !== systemPrompt) {
142
- // An extension rewrote the system prompt for this turn. Log the new
143
- // size so the diagnostic in agent.ts (which logs the pre-hook prompt)
144
- // isn't mistaken for the final prompt sent to the model.
145
- log.logInfo(`Extension rewrote system prompt: ${systemPrompt.length} → ${result.systemPrompt.length} chars`);
146
- systemPrompt = result.systemPrompt;
147
- this.agent.state.systemPrompt = systemPrompt;
65
+ function createRunnerExecutionContext(sandboxConfig, vaultManager, provisioner, workspace) {
66
+ const executionResolver = vaultManager && sandboxConfig.type !== "host"
67
+ ? new ActorExecutionResolver(sandboxConfig, vaultManager, provisioner, workspace)
68
+ : undefined;
69
+ // activeExecutor is replaced at the start of each run() call when executionResolver
70
+ // is present, so the stable `executor` wrapper always delegates to the latest resolved value.
71
+ let activeExecutor = executionResolver !== undefined
72
+ ? createExecutor({ type: "host" })
73
+ : createExecutor(sandboxConfig);
74
+ const executor = {
75
+ exec(command, options) {
76
+ return activeExecutor.exec(command, options);
77
+ },
78
+ readFile(path, options) {
79
+ return activeExecutor.readFile(path, options);
80
+ },
81
+ readFileBase64(path, options) {
82
+ return activeExecutor.readFileBase64(path, options);
83
+ },
84
+ writeFile(path, content, options) {
85
+ return activeExecutor.writeFile(path, content, options);
86
+ },
87
+ getWorkspacePath(hostPath) {
88
+ return activeExecutor.getWorkspacePath(hostPath);
89
+ },
90
+ getSandboxConfig() {
91
+ return activeExecutor.getSandboxConfig();
92
+ },
93
+ getPathContext(hostWorkspaceRoot) {
94
+ return activeExecutor.getPathContext(hostWorkspaceRoot);
95
+ },
96
+ };
97
+ return {
98
+ executor,
99
+ async resolveForRun(context) {
100
+ if (executionResolver) {
101
+ const decision = await executionResolver.resolve(context);
102
+ activeExecutor = decision.executor;
103
+ return {
104
+ pathContext: decision.pathContext,
105
+ projection: decision.projection,
106
+ };
148
107
  }
149
- }
150
- const userMessage = {
151
- role: "user",
152
- content: [{ type: "text", text }, ...(options?.images ?? [])],
153
- timestamp: Date.now(),
154
- };
155
- await this.agent.prompt([userMessage]);
156
- while (await this.handlePostRun()) {
157
- await this.agent.continue();
158
- }
159
- if (this.extensions?.hasHandlers("turn_end")) {
160
- await this.extensions.emit("turn_end", { messages: this.agent.state.messages });
161
- }
162
- }
163
- /** Abort the active run, pending retry backoff, and in-flight compaction. */
164
- abort() {
165
- this.retryAbortController?.abort();
166
- this.compactionAbortController?.abort();
167
- this.agent.abort();
108
+ const office = workspace.office(context.address);
109
+ const projection = resolveWorkspaceProjection(office);
110
+ assertSandboxSupportsWorkspacePolicy(sandboxConfig, projection.doorPolicy, projection.promptSources.globalMemoryReadOnly === true);
111
+ return {
112
+ pathContext: executor.getPathContext(workspace.root),
113
+ projection,
114
+ };
115
+ },
116
+ };
117
+ }
118
+ function buildThreadSessionName(message) {
119
+ const text = message?.text?.trim();
120
+ if (!text)
121
+ return undefined;
122
+ const userLabel = message?.userName || message?.user || "unknown";
123
+ return `[${userLabel}]: ${text}`;
124
+ }
125
+ async function resolveRunnerMcpServers(options) {
126
+ if (options.trustModel === "open-trigger")
127
+ return {};
128
+ return provisionOfficeOpenConnectorToken(options.office, options.platformWorkspaceId, options.servers, options.openConnector, options.signal);
129
+ }
130
+ async function preparePromptContext(params) {
131
+ const { message, platform, office, executor, resolveForRun, session } = params;
132
+ const conversationId = office.address.conversationId;
133
+ const decision = await resolveForRun({
134
+ address: message.address,
135
+ userId: message.userId,
136
+ trustModel: platform.trustModel,
137
+ });
138
+ const { pathContext, projection } = decision;
139
+ const reloaded = await session.reloadFromSession();
140
+ if (reloaded > 0) {
141
+ log.logInfo(`[${conversationId}] Reloaded ${reloaded} messages from context`);
168
142
  }
169
- async ensureAuthConfigured(model) {
170
- const auth = await this.models.getAuth(model);
171
- if (!auth) {
172
- throw new Error(`No credentials for provider "${model.provider}". Set the provider API key environment variable or add it to auth.json.`);
173
- }
143
+ const memory = await getMemory(projection);
144
+ const conversationSkillLoad = loadMikanSkills(office, pathContext.runtimeWorkspaceRoot, projection);
145
+ const triggerAttribution = resolveTriggerAttribution(message);
146
+ const systemPrompt = buildSystemPrompt({
147
+ workspacePath: pathContext.runtimeWorkspaceRoot,
148
+ office,
149
+ memory,
150
+ sandboxConfig: executor.getSandboxConfig(),
151
+ platform,
152
+ skills: conversationSkillLoad.skills,
153
+ projection,
154
+ skippedSkillLinks: conversationSkillLoad.skippedSkillLinks,
155
+ });
156
+ session.setSystemPrompt(systemPrompt);
157
+ // A stable hash across turns verifies that turn-specific data did not leak
158
+ // into the provider-cacheable system prompt.
159
+ const promptHash = createHash("sha256").update(systemPrompt).digest("hex").slice(0, 8);
160
+ log.logInfo(`[${conversationId}] System prompt (base): ${systemPrompt.length} chars, sha ${promptHash}`);
161
+ return { pathContext, memory, systemPrompt, triggerAttribution };
162
+ }
163
+ function bindRunCapabilities(params, pathContext) {
164
+ const { message, responder, platform, office, executor, setEventContext, setSandboxContext, setUploadFunction, setImageUploadFunction, setReactFunction, bindPlatformToolPacks, } = params;
165
+ setEventContext({
166
+ platform: platform.name,
167
+ conversationId: office.address.conversationId,
168
+ conversationKind: message.conversationKind,
169
+ userId: message.userId,
170
+ });
171
+ setSandboxContext({ address: message.address, userId: message.userId });
172
+ setUploadFunction(async (filePath, title) => {
173
+ const runtimePath = normalizeAttachRuntimePath(filePath, pathContext.runtimeWorkspaceRoot);
174
+ await withStagedRuntimeFile(executor, runtimePath, (stagedPath) => responder.uploadFile(stagedPath, title));
175
+ });
176
+ // Generated images already live host-side and must not be staged through a sandbox.
177
+ setImageUploadFunction(async (hostPath, title) => {
178
+ await responder.uploadFile(hostPath, title);
179
+ });
180
+ // Unset reaction support when the active responder cannot react.
181
+ setReactFunction(responder.react ? async (emoji) => responder.react(emoji) : null);
182
+ bindPlatformToolPacks({
183
+ conversationId: office.address.conversationId,
184
+ platformName: platform.name,
185
+ threadTs: message.threadTs,
186
+ });
187
+ }
188
+ async function prepareRunContext(params) {
189
+ const { message, platform, office, executor } = params;
190
+ const sessionConversation = conversationIdOf(message.sessionKey);
191
+ await mkdir(join(office.dir, "scratch"), { recursive: true });
192
+ const { pathContext, memory, systemPrompt, triggerAttribution } = await preparePromptContext(params);
193
+ bindRunCapabilities(params, pathContext);
194
+ log.logInfo(`Context sizes - system: ${systemPrompt.length} chars, memory: ${memory.length} chars`);
195
+ log.logInfo(`Channels: ${platform.channels.length}, Users: ${platform.users.length}`);
196
+ const { userMessage, imageAttachments } = await buildPromptPayload(message, pathContext.runtimeWorkspaceRoot, pathContext, (runtimePath) => executor.readFileBase64(runtimePath));
197
+ const turnInstructions = buildTurnInstructions(message.id.startsWith("event:"), triggerAttribution, platform.name);
198
+ const finalUserMessage = turnInstructions ? `${turnInstructions}\n\n${userMessage}` : userMessage;
199
+ return {
200
+ sessionConversation,
201
+ userMessage: finalUserMessage,
202
+ imageAttachments,
203
+ triggerAttribution,
204
+ };
205
+ }
206
+ async function buildInitialSystemPrompt(params) {
207
+ const { office, pathContext, projection, sandboxConfig } = params;
208
+ const memory = await getMemory(projection);
209
+ const { skills, skippedSkillLinks } = loadMikanSkills(office, pathContext.runtimeWorkspaceRoot, projection);
210
+ return buildSystemPrompt({
211
+ workspacePath: pathContext.runtimeWorkspaceRoot,
212
+ office,
213
+ memory,
214
+ sandboxConfig,
215
+ platform: {
216
+ name: "chat",
217
+ formattingGuide: "",
218
+ channels: [],
219
+ users: [],
220
+ trustModel: "membership",
221
+ },
222
+ skills,
223
+ projection,
224
+ skippedSkillLinks,
225
+ });
226
+ }
227
+ async function rollbackRunnerResource(label, cleanup) {
228
+ try {
229
+ await cleanup();
174
230
  }
175
- async emit(event) {
176
- for (const listener of this.listeners) {
177
- try {
178
- await listener(event);
179
- }
180
- catch (err) {
181
- log.logWarning("Harness event listener failed", err instanceof Error ? err.message : String(err));
182
- }
183
- }
231
+ catch (error) {
232
+ log.logWarning(`Runner rollback failed to ${label}`, String(error));
184
233
  }
185
- async handleAgentEvent(event) {
186
- await this.emit(event);
187
- if (event.type !== "message_end")
188
- return;
189
- const message = event.message;
190
- if (message.role === "user" || message.role === "assistant" || message.role === "toolResult") {
191
- this.sessionStore.appendMessage(message);
192
- }
193
- else if (message.role === "custom") {
194
- const custom = message;
195
- this.sessionStore.appendCustomMessageEntry(custom.customType, custom.content, custom.display, custom.details);
196
- }
197
- if (this.extensions?.hasHandlers("message_end")) {
198
- await this.extensions.emit("message_end", { message });
199
- }
200
- if (message.role === "assistant") {
201
- this.recordUsage(message);
202
- await this.enforceBudget();
203
- if (message.stopReason !== "error") {
204
- this.overflowRecoveryAttempted = false;
205
- if (this.retryAttempt > 0) {
206
- await this.emit({ type: "auto_retry_end", success: true, attempt: this.retryAttempt });
207
- this.retryAttempt = 0;
208
- }
209
- }
234
+ }
235
+ async function openRunnerSessionManager(params) {
236
+ const { contextFile, runtimeWorkspaceRoot, sessionKey, threadRootMessage } = params;
237
+ const sessionManager = await openManagedSession(contextFile, runtimeWorkspaceRoot);
238
+ try {
239
+ const threadSessionName = buildThreadSessionName(threadRootMessage);
240
+ if (isThreadSessionKey(sessionKey) &&
241
+ threadSessionName &&
242
+ (await sessionManager.getSessionName()) !== threadSessionName) {
243
+ await sessionManager.setSessionName(threadSessionName);
210
244
  }
245
+ return sessionManager;
211
246
  }
212
- /** Fold one assistant turn's usage into the running per-run tally. */
213
- recordUsage(message) {
214
- this.tally.llmCalls += 1;
215
- const usage = message.usage;
216
- if (!usage)
217
- return;
218
- this.tally.tokens += usage.input + usage.output + usage.cacheRead + usage.cacheWrite;
219
- this.tally.costUsd += usage.cost?.total ?? 0;
220
- }
221
- /** Compare the tally against the run budget; abort the run when a cap is exceeded. */
222
- async enforceBudget() {
223
- if (this.budgetExceededReason)
224
- return;
225
- const reason = this.overBudgetReason();
226
- if (!reason)
227
- return;
228
- this.budgetExceededReason = reason;
229
- await this.emit({
230
- type: "budget_exceeded",
231
- reason,
232
- tokens: this.tally.tokens,
233
- costUsd: this.tally.costUsd,
234
- llmCalls: this.tally.llmCalls,
235
- durationMs: Date.now() - this.tally.startedAt,
236
- });
237
- log.logWarning("Run budget exceeded — aborting", reason);
238
- this.agent.abort();
247
+ catch (error) {
248
+ await rollbackRunnerResource("close the session writer", () => sessionManager.close());
249
+ throw error;
239
250
  }
240
- overBudgetReason() {
241
- const { maxTokens, maxCostUsd, maxDurationMs, maxLlmCalls } = this.runBudget;
242
- if (maxLlmCalls !== undefined && this.tally.llmCalls >= maxLlmCalls) {
243
- return `${this.tally.llmCalls} LLM calls >= ${maxLlmCalls} limit`;
244
- }
245
- if (maxTokens !== undefined && this.tally.tokens >= maxTokens) {
246
- return `${this.tally.tokens} tokens >= ${maxTokens} limit`;
247
- }
248
- if (maxCostUsd !== undefined && this.tally.costUsd >= maxCostUsd) {
249
- return `cost ${this.tally.costUsd.toFixed(2)} USD >= ${maxCostUsd} USD limit`;
250
- }
251
- if (maxDurationMs !== undefined && Date.now() - this.tally.startedAt >= maxDurationMs) {
252
- return `${Date.now() - this.tally.startedAt}ms >= ${maxDurationMs}ms limit`;
253
- }
254
- return undefined;
255
- }
256
- findLastAssistantMessage() {
257
- const messages = this.agent.state.messages;
258
- for (let i = messages.length - 1; i >= 0; i--) {
259
- const message = messages[i];
260
- if (message.role === "assistant")
261
- return message;
262
- }
263
- return undefined;
251
+ }
252
+ async function createRunnerAgentSession(params) {
253
+ const { workspaceDir, systemPrompt, model, agentConfig, tools, toolContext, sessionManager, modelRegistry, signal, } = params;
254
+ const mcpTools = await sessionManager.connectMcp(agentConfig.mcpServers ?? {}, signal);
255
+ return createConfiguredAgentSession({
256
+ workspaceDir,
257
+ systemPrompt,
258
+ model,
259
+ thinkingLevel: agentConfig.thinkingLevel,
260
+ tools: [...tools, ...mcpTools.map(adaptAgentTool)],
261
+ toolContext,
262
+ sessionStore: sessionManager,
263
+ models: modelRegistry,
264
+ });
265
+ }
266
+ async function runPreparedTurn(params) {
267
+ const { prepared, presentation, message, responder, platform, runState, session, model, agentConfig, sessionUuid, conversationId, contextFile, sessionView, } = params;
268
+ if (runState.logCtx) {
269
+ log.logAgentRunStart(runState.logCtx, model.provider, model.id, model.name);
264
270
  }
265
- /** Decide what to do after a run settles. Returns true when the agent should continue. */
266
- async handlePostRun() {
267
- // A run stopped for going over budget must not be retried or compacted back
268
- // into another continuation — that would defeat the circuit breaker.
269
- if (this.budgetExceededReason)
270
- return false;
271
- const lastAssistant = this.findLastAssistantMessage();
272
- if (!lastAssistant)
273
- return false;
274
- if (lastAssistant.stopReason === "error") {
275
- const contextWindow = this.agent.state.model.contextWindow || 0;
276
- if (isContextOverflow(lastAssistant, contextWindow)) {
277
- return this.handleOverflow();
278
- }
279
- if (this.isRetryableError(lastAssistant)) {
280
- return this.prepareRetry(lastAssistant);
271
+ updateActiveSpanAttribution({
272
+ provider: model.provider,
273
+ model: model.id,
274
+ channel_id: prepared.sessionConversation,
275
+ session_id: sessionUuid,
276
+ "mikan.input.message_count": 1,
277
+ "mikan.input.characters": prepared.userMessage.length,
278
+ "mikan.input.attachment_count": message.attachments?.length ?? 0,
279
+ "mikan.input.image_count": prepared.imageAttachments.length,
280
+ "mikan.input.has_text": prepared.userMessage.length > 0,
281
+ });
282
+ addLifecycleEvent("agent.prompt.sent", {
283
+ provider: model.provider,
284
+ model: agentConfig.model,
285
+ channel_id: prepared.sessionConversation,
286
+ session_id: sessionUuid,
287
+ attachment_count: message.attachments?.length ?? 0,
288
+ image_attachment_count: prepared.imageAttachments.length,
289
+ });
290
+ const isEventRun = message.id.startsWith("event:");
291
+ await session.prompt(prepared.userMessage, {
292
+ ...(prepared.imageAttachments.length > 0 ? { images: prepared.imageAttachments } : {}),
293
+ ...(isEventRun ? { budget: DEFAULT_EVENT_BUDGET } : {}),
294
+ });
295
+ await presentation.wait();
296
+ const sessionViewTokenStore = sessionView?.tokenStore;
297
+ const sessionViewPortalBaseUrl = sessionView?.portalBaseUrl;
298
+ let sessionViewLink;
299
+ const createSessionViewLink = sessionViewTokenStore && sessionViewPortalBaseUrl
300
+ ? () => {
301
+ if (!sessionViewLink) {
302
+ const token = sessionViewTokenStore.create({
303
+ platform: platform.name,
304
+ platformUserId: message.userId,
305
+ conversationId,
306
+ sessionKey: message.sessionKey,
307
+ sessionFile: contextFile,
308
+ platformUserName: message.userName,
309
+ });
310
+ sessionViewLink = `${sessionViewPortalBaseUrl}/session?token=${token.token}`;
281
311
  }
282
- return false;
312
+ return sessionViewLink;
283
313
  }
284
- return this.checkThresholdCompaction(lastAssistant);
285
- }
286
- async handleOverflow() {
287
- if (this.overflowRecoveryAttempted) {
288
- await this.emit({
289
- type: "compaction_end",
290
- reason: "overflow",
291
- aborted: false,
292
- errorMessage: "Context overflow recovery failed after one compact-and-retry attempt. Try /new or a larger-context model.",
314
+ : undefined;
315
+ await finalizeRunResponse(responder, session, runState, {
316
+ triggerSessionLink: isEventTriggerAttribution(prepared.triggerAttribution)
317
+ ? createSessionViewLink?.()
318
+ : undefined,
319
+ createOverflowLink: createSessionViewLink,
320
+ platform: platform.name,
321
+ model,
322
+ sessionConversation: prepared.sessionConversation,
323
+ sessionUuid,
324
+ });
325
+ await reportUsageSummary({
326
+ session,
327
+ runState,
328
+ responder,
329
+ platform,
330
+ model,
331
+ agentConfig,
332
+ sessionConversation: prepared.sessionConversation,
333
+ sessionUuid,
334
+ waitForQueue: presentation.wait,
335
+ });
336
+ return { stopReason: runState.stopReason, errorMessage: runState.errorMessage };
337
+ }
338
+ function createRunnerInterface(params) {
339
+ const { conversationId, conversationDir, sessionKey, office, sessionUuid, contextFile, sessionView, runState, executor, resolveForRun, session, model, agentConfig, sessionManager, chatSessionManager, toolBindings, } = params;
340
+ return {
341
+ async syncChatHistory(currentMessageId) {
342
+ await chatSessionManager.syncSessionManager({
343
+ conversationDir,
344
+ sessionKey,
345
+ sessionManager,
346
+ currentMessageId,
293
347
  });
294
- return false;
295
- }
296
- this.overflowRecoveryAttempted = true;
297
- this.dropTrailingErrorMessage();
298
- return this.runCompaction("overflow", true);
299
- }
300
- async checkThresholdCompaction(lastAssistant) {
301
- const settings = this.settings.compaction;
302
- if (!settings.enabled)
303
- return false;
304
- const contextWindow = this.agent.state.model.contextWindow || 0;
305
- if (contextWindow <= 0)
306
- return false;
307
- let contextTokens = lastAssistant.usage ? calculateContextTokens(lastAssistant.usage) : 0;
308
- if (contextTokens === 0) {
309
- const estimate = estimateContextTokens(this.agent.state.messages);
310
- if (estimate.lastUsageIndex === null)
311
- return false;
312
- contextTokens = estimate.tokens;
313
- }
314
- if (!shouldCompact(contextTokens, contextWindow, settings))
315
- return false;
316
- return this.runCompaction("threshold", false);
317
- }
318
- async runCompaction(reason, willRetry) {
319
- let started = false;
320
- try {
321
- const pathEntries = this.sessionStore.getBranch();
322
- const preparation = getOrThrow(prepareCompaction(pathEntries, this.settings.compaction));
323
- if (!preparation)
324
- return false;
325
- await this.emit({ type: "compaction_start", reason });
326
- started = true;
327
- this.compactionAbortController = new AbortController();
328
- const signal = this.compactionAbortController.signal;
329
- const result = getOrThrow(await compact(preparation, this.models.models, this.agent.state.model, undefined, signal, this.agent.state.thinkingLevel));
330
- if (signal.aborted) {
331
- await this.emit({ type: "compaction_end", reason, aborted: true });
332
- return false;
333
- }
334
- const entryId = this.sessionStore.appendCompaction(result.summary, result.firstKeptEntryId, result.tokensBefore, result.details);
335
- const context = this.sessionStore.buildSessionContext();
336
- this.agent.state.messages = context.messages;
337
- if (this.extensions?.hasHandlers("session_compact")) {
338
- const entry = this.sessionStore.getEntry(entryId);
339
- if (entry?.type === "compaction") {
340
- await this.extensions.emit("session_compact", {
341
- entry: entry,
342
- reason,
343
- });
344
- }
345
- }
346
- await this.emit({
347
- type: "compaction_end",
348
- reason,
349
- result: {
350
- summary: result.summary,
351
- firstKeptEntryId: result.firstKeptEntryId,
352
- tokensBefore: result.tokensBefore,
353
- },
354
- aborted: false,
348
+ },
349
+ async run(message, responder, platform) {
350
+ const prepared = await prepareRunContext({
351
+ message,
352
+ responder,
353
+ platform,
354
+ office,
355
+ executor,
356
+ resolveForRun,
357
+ session,
358
+ setEventContext: toolBindings.setEventContext,
359
+ setSandboxContext: toolBindings.setSandboxContext,
360
+ setUploadFunction: toolBindings.setUploadFunction,
361
+ setImageUploadFunction: toolBindings.setImageUploadFunction,
362
+ setReactFunction: toolBindings.setReactFunction,
363
+ bindPlatformToolPacks: toolBindings.bindPlatformToolPacks,
355
364
  });
356
- if (willRetry) {
357
- this.dropTrailingErrorMessage();
358
- return true;
359
- }
360
- return this.agent.hasQueuedMessages();
361
- }
362
- catch (error) {
363
- const errorMessage = error instanceof Error ? error.message : "compaction failed";
364
- if (started) {
365
- await this.emit({
366
- type: "compaction_end",
367
- reason,
368
- aborted: false,
369
- errorMessage: reason === "overflow"
370
- ? `Context overflow recovery failed: ${errorMessage}`
371
- : `Auto-compaction failed: ${errorMessage}`,
365
+ const presentation = activateRunPresentation(runState, {
366
+ responder,
367
+ sessionConversation: prepared.sessionConversation,
368
+ userName: message.userName,
369
+ sessionUuid,
370
+ triggerAttribution: prepared.triggerAttribution,
371
+ });
372
+ try {
373
+ return await runPreparedTurn({
374
+ prepared,
375
+ presentation,
376
+ message,
377
+ responder,
378
+ platform,
379
+ runState,
380
+ session,
381
+ model,
382
+ agentConfig,
383
+ sessionUuid,
384
+ conversationId,
385
+ contextFile,
386
+ sessionView,
372
387
  });
373
388
  }
374
- else {
375
- log.logWarning("Compaction preparation failed", errorMessage);
389
+ finally {
390
+ presentation.dispose();
376
391
  }
377
- return false;
378
- }
379
- finally {
380
- this.compactionAbortController = undefined;
381
- }
382
- }
383
- isRetryableError(message) {
384
- if (message.stopReason !== "error" || !message.errorMessage)
385
- return false;
386
- return RETRYABLE_ERROR_PATTERN.test(message.errorMessage);
387
- }
388
- async prepareRetry(message) {
389
- const settings = this.settings.retry;
390
- if (!settings.enabled)
391
- return false;
392
- this.retryAttempt++;
393
- if (this.retryAttempt > settings.maxRetries) {
394
- this.retryAttempt--;
395
- await this.emit({
396
- type: "auto_retry_end",
397
- success: false,
398
- attempt: this.retryAttempt,
399
- finalError: message.errorMessage,
400
- });
401
- this.retryAttempt = 0;
402
- return false;
403
- }
404
- const delayMs = settings.baseDelayMs * 2 ** (this.retryAttempt - 1);
405
- await this.emit({
406
- type: "auto_retry_start",
407
- attempt: this.retryAttempt,
408
- maxAttempts: settings.maxRetries,
409
- delayMs,
410
- errorMessage: message.errorMessage || "Unknown error",
392
+ },
393
+ abort() {
394
+ session.abort();
395
+ },
396
+ async dispose() {
397
+ await sessionManager.close();
398
+ },
399
+ getCurrentStep() {
400
+ const first = runState.pendingTools.values().next().value;
401
+ if (!first)
402
+ return undefined;
403
+ return {
404
+ toolName: first.toolName,
405
+ label: first.args?.label,
406
+ };
407
+ },
408
+ };
409
+ }
410
+ async function finishRunnerCreation(params) {
411
+ const { options, conversationId, conversationDir, workspaceDir, executor, resolveForRun, model, modelRegistry, agentConfig, systemPrompt, sessionManager, toolBindings, toolContext, } = params;
412
+ const { sessionKey, office, sessionScope, sessionView } = options;
413
+ const { contextFile } = sessionScope;
414
+ try {
415
+ const sessionUuid = extractSessionUuid(contextFile);
416
+ const chatSessionManager = new ChatHistorySync();
417
+ const session = await createRunnerAgentSession({
418
+ workspaceDir,
419
+ systemPrompt,
420
+ model,
421
+ agentConfig,
422
+ tools: toolBindings.tools,
423
+ toolContext,
424
+ sessionManager,
425
+ modelRegistry,
426
+ conversationId,
427
+ signal: options.signal,
428
+ });
429
+ options.signal?.throwIfAborted();
430
+ const runState = createRunState();
431
+ attachSessionEventHandlers({ session, runState, model, agentConfig });
432
+ return createRunnerInterface({
433
+ conversationId,
434
+ conversationDir,
435
+ sessionKey,
436
+ office,
437
+ sessionUuid,
438
+ contextFile,
439
+ sessionView,
440
+ runState,
441
+ executor,
442
+ resolveForRun,
443
+ session,
444
+ model,
445
+ agentConfig,
446
+ sessionManager,
447
+ chatSessionManager,
448
+ toolBindings,
411
449
  });
412
- this.dropTrailingErrorMessage();
413
- this.retryAbortController = new AbortController();
414
- try {
415
- await sleep(delayMs, this.retryAbortController.signal);
416
- }
417
- catch {
418
- const attempt = this.retryAttempt;
419
- this.retryAttempt = 0;
420
- await this.emit({
421
- type: "auto_retry_end",
422
- success: false,
423
- attempt,
424
- finalError: "Retry cancelled",
425
- });
426
- return false;
427
- }
428
- finally {
429
- this.retryAbortController = undefined;
430
- }
431
- return true;
432
450
  }
433
- dropTrailingErrorMessage() {
434
- const messages = this.agent.state.messages;
435
- if (messages.length > 0 && messages[messages.length - 1].role === "assistant") {
436
- this.agent.state.messages = messages.slice(0, -1);
437
- }
451
+ catch (error) {
452
+ await rollbackRunnerResource("close the session writer", () => sessionManager.close());
453
+ throw error;
454
+ }
455
+ }
456
+ export async function createRunner(options) {
457
+ options.signal?.throwIfAborted();
458
+ const { sandboxConfig, sessionKey, office, trustModel, sessionScope, vaultManager, provisioner, resourceController, platformToolPackFactories, } = options;
459
+ const conversationId = office.address.conversationId;
460
+ const conversationDir = office.dir;
461
+ const workspaceDir = office.workspace.root;
462
+ const resolvedAgentConfig = resolveConversationSettings(office);
463
+ const mcpServers = await resolveRunnerMcpServers({
464
+ office,
465
+ trustModel,
466
+ platformWorkspaceId: options.platformWorkspaceId,
467
+ servers: resolvedAgentConfig.mcpServers,
468
+ openConnector: options.openConnector,
469
+ signal: options.signal,
470
+ });
471
+ options.signal?.throwIfAborted();
472
+ const agentConfig = { ...resolvedAgentConfig, mcpServers };
473
+ const projection = resolveWorkspaceProjection(office);
474
+ // Bootstrap validation fails runner creation early. resolveForRun repeats
475
+ // the check against the actor-specific decision before any provider call.
476
+ assertSandboxSupportsWorkspacePolicy(sandboxConfig, projection.doorPolicy, projection.promptSources.globalMemoryReadOnly === true);
477
+ const { executor, resolveForRun } = createRunnerExecutionContext(sandboxConfig, vaultManager, provisioner, office.workspace);
478
+ const pathContext = getUnresolvedSandboxPathContext(sandboxConfig, workspaceDir);
479
+ // The env wraps the stable executor wrapper, which delegates to the
480
+ // actor-resolved executor per call, so one env serves every run.
481
+ const toolContext = {
482
+ env: createSandboxExecutionEnv(executor, sandboxConfig.type, pathContext.runtimeWorkspaceRoot),
483
+ };
484
+ const modelRegistry = options.models ?? MikanModels.create();
485
+ if (modelRegistry.getError()) {
486
+ log.logWarning("models.json load error", modelRegistry.getError());
438
487
  }
488
+ const model = modelRegistry.resolve(agentConfig.provider, agentConfig.model);
489
+ // Create tools (per-runner, with per-runner upload function setter)
490
+ const toolBindings = createMikanTools(executor, workspaceDir, { sandbox: sandboxConfig, resourceController: resourceController ?? provisioner }, platformToolPackFactories ?? [], {
491
+ model,
492
+ getApiKey: () => modelRegistry.getApiKeyForProvider(model.provider),
493
+ // The conversation's own office dir: mounted into the sandbox, unlike
494
+ // the workspace base — generated images must land somewhere the agent
495
+ // (and a future run) can still reach.
496
+ outputDir: conversationDir,
497
+ });
498
+ const systemPrompt = await buildInitialSystemPrompt({
499
+ office,
500
+ pathContext,
501
+ projection,
502
+ sandboxConfig,
503
+ });
504
+ options.signal?.throwIfAborted();
505
+ const { contextFile, threadRootMessage } = sessionScope;
506
+ const sessionManager = await openRunnerSessionManager({
507
+ contextFile,
508
+ runtimeWorkspaceRoot: pathContext.runtimeWorkspaceRoot,
509
+ sessionKey,
510
+ threadRootMessage,
511
+ });
512
+ return finishRunnerCreation({
513
+ options,
514
+ conversationId,
515
+ conversationDir,
516
+ workspaceDir,
517
+ executor,
518
+ resolveForRun,
519
+ model,
520
+ modelRegistry,
521
+ agentConfig,
522
+ systemPrompt,
523
+ sessionManager,
524
+ toolBindings,
525
+ toolContext,
526
+ });
439
527
  }
440
528
  //# sourceMappingURL=runner.js.map