@geminixiang/mikan 1.0.0-beta.7 → 1.0.0-beta.71

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 (856) hide show
  1. package/CHANGELOG.md +1052 -0
  2. package/README.md +98 -38
  3. package/dist/adapters/commands/admin.d.ts.map +1 -0
  4. package/dist/{commands → adapters/commands}/admin.js +11 -8
  5. package/dist/adapters/commands/admin.js.map +1 -0
  6. package/dist/{commands → adapters/commands}/auto-reply.d.ts +0 -3
  7. package/dist/adapters/commands/auto-reply.d.ts.map +1 -0
  8. package/dist/adapters/commands/auto-reply.js +47 -0
  9. package/dist/adapters/commands/auto-reply.js.map +1 -0
  10. package/dist/adapters/commands/login.d.ts +6 -0
  11. package/dist/adapters/commands/login.d.ts.map +1 -0
  12. package/dist/adapters/commands/login.js +166 -0
  13. package/dist/adapters/commands/login.js.map +1 -0
  14. package/dist/adapters/commands/manifest.d.ts +37 -0
  15. package/dist/adapters/commands/manifest.d.ts.map +1 -0
  16. package/dist/adapters/commands/manifest.js +155 -0
  17. package/dist/adapters/commands/manifest.js.map +1 -0
  18. package/dist/adapters/commands/model.d.ts +15 -0
  19. package/dist/adapters/commands/model.d.ts.map +1 -0
  20. package/dist/adapters/commands/model.js +153 -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 +41 -0
  24. package/dist/adapters/commands/new.js.map +1 -0
  25. package/dist/adapters/commands/registry.d.ts +5 -0
  26. package/dist/adapters/commands/registry.d.ts.map +1 -0
  27. package/dist/adapters/commands/registry.js +43 -0
  28. package/dist/adapters/commands/registry.js.map +1 -0
  29. package/dist/adapters/commands/sandbox.d.ts.map +1 -0
  30. package/dist/adapters/commands/sandbox.js +125 -0
  31. package/dist/adapters/commands/sandbox.js.map +1 -0
  32. package/dist/adapters/commands/session-view.d.ts.map +1 -0
  33. package/dist/{commands → adapters/commands}/session-view.js +23 -16
  34. package/dist/adapters/commands/session-view.js.map +1 -0
  35. package/dist/adapters/commands/types.d.ts +145 -0
  36. package/dist/adapters/commands/types.d.ts.map +1 -0
  37. package/dist/adapters/commands/types.js.map +1 -0
  38. package/dist/adapters/commands/utils.d.ts +14 -0
  39. package/dist/adapters/commands/utils.d.ts.map +1 -0
  40. package/dist/{commands → adapters/commands}/utils.js +18 -1
  41. package/dist/adapters/commands/utils.js.map +1 -0
  42. package/dist/adapters/discord/bot.d.ts +11 -8
  43. package/dist/adapters/discord/bot.d.ts.map +1 -1
  44. package/dist/adapters/discord/bot.js +223 -256
  45. package/dist/adapters/discord/bot.js.map +1 -1
  46. package/dist/adapters/discord/components.d.ts +28 -0
  47. package/dist/adapters/discord/components.d.ts.map +1 -0
  48. package/dist/adapters/discord/components.js +32 -0
  49. package/dist/adapters/discord/components.js.map +1 -0
  50. package/dist/adapters/discord/context.d.ts +2 -6
  51. package/dist/adapters/discord/context.d.ts.map +1 -1
  52. package/dist/adapters/discord/context.js +64 -218
  53. package/dist/adapters/discord/context.js.map +1 -1
  54. package/dist/adapters/discord/format.d.ts +3 -0
  55. package/dist/adapters/discord/format.d.ts.map +1 -0
  56. package/dist/adapters/discord/format.js +84 -0
  57. package/dist/adapters/discord/format.js.map +1 -0
  58. package/dist/adapters/discord/types.d.ts +8 -1
  59. package/dist/adapters/discord/types.d.ts.map +1 -1
  60. package/dist/adapters/discord/types.js.map +1 -1
  61. package/dist/adapters/github/bot.d.ts +102 -0
  62. package/dist/adapters/github/bot.d.ts.map +1 -0
  63. package/dist/adapters/github/bot.js +720 -0
  64. package/dist/adapters/github/bot.js.map +1 -0
  65. package/dist/adapters/github/client.d.ts +122 -0
  66. package/dist/adapters/github/client.d.ts.map +1 -0
  67. package/dist/adapters/github/client.js +301 -0
  68. package/dist/adapters/github/client.js.map +1 -0
  69. package/dist/adapters/github/context.d.ts +5 -0
  70. package/dist/adapters/github/context.d.ts.map +1 -0
  71. package/dist/adapters/github/context.js +101 -0
  72. package/dist/adapters/github/context.js.map +1 -0
  73. package/dist/adapters/github/github-ops.d.ts +78 -0
  74. package/dist/adapters/github/github-ops.d.ts.map +1 -0
  75. package/dist/adapters/github/github-ops.js +337 -0
  76. package/dist/adapters/github/github-ops.js.map +1 -0
  77. package/dist/adapters/github/ids.d.ts +34 -0
  78. package/dist/adapters/github/ids.d.ts.map +1 -0
  79. package/dist/adapters/github/ids.js +57 -0
  80. package/dist/adapters/github/ids.js.map +1 -0
  81. package/dist/adapters/github/repo.d.ts +33 -0
  82. package/dist/adapters/github/repo.d.ts.map +1 -0
  83. package/dist/adapters/github/repo.js +141 -0
  84. package/dist/adapters/github/repo.js.map +1 -0
  85. package/dist/adapters/github/tool-pack.d.ts +14 -0
  86. package/dist/adapters/github/tool-pack.d.ts.map +1 -0
  87. package/dist/adapters/github/tool-pack.js +55 -0
  88. package/dist/adapters/github/tool-pack.js.map +1 -0
  89. package/dist/adapters/github/tools/checks.d.ts +18 -0
  90. package/dist/adapters/github/tools/checks.d.ts.map +1 -0
  91. package/dist/adapters/github/tools/checks.js +86 -0
  92. package/dist/adapters/github/tools/checks.js.map +1 -0
  93. package/dist/adapters/github/tools/issue.d.ts +21 -0
  94. package/dist/adapters/github/tools/issue.d.ts.map +1 -0
  95. package/dist/adapters/github/tools/issue.js +48 -0
  96. package/dist/adapters/github/tools/issue.js.map +1 -0
  97. package/dist/adapters/github/tools/pr.d.ts +22 -0
  98. package/dist/adapters/github/tools/pr.d.ts.map +1 -0
  99. package/dist/adapters/github/tools/pr.js +48 -0
  100. package/dist/adapters/github/tools/pr.js.map +1 -0
  101. package/dist/adapters/github/tools/read.d.ts +21 -0
  102. package/dist/adapters/github/tools/read.d.ts.map +1 -0
  103. package/dist/adapters/github/tools/read.js +141 -0
  104. package/dist/adapters/github/tools/read.js.map +1 -0
  105. package/dist/adapters/github/tools/review-reply.d.ts +17 -0
  106. package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
  107. package/dist/adapters/github/tools/review-reply.js +38 -0
  108. package/dist/adapters/github/tools/review-reply.js.map +1 -0
  109. package/dist/adapters/github/tools/sync.d.ts +17 -0
  110. package/dist/adapters/github/tools/sync.d.ts.map +1 -0
  111. package/dist/adapters/github/tools/sync.js +34 -0
  112. package/dist/adapters/github/tools/sync.js.map +1 -0
  113. package/dist/adapters/github/types.d.ts +345 -0
  114. package/dist/adapters/github/types.d.ts.map +1 -0
  115. package/dist/adapters/github/types.js.map +1 -0
  116. package/dist/adapters/github/webhook.d.ts +20 -0
  117. package/dist/adapters/github/webhook.d.ts.map +1 -0
  118. package/dist/adapters/github/webhook.js +78 -0
  119. package/dist/adapters/github/webhook.js.map +1 -0
  120. package/dist/adapters/index.d.ts +12 -0
  121. package/dist/adapters/index.d.ts.map +1 -0
  122. package/dist/adapters/index.js +19 -0
  123. package/dist/adapters/index.js.map +1 -0
  124. package/dist/adapters/intake.d.ts +17 -6
  125. package/dist/adapters/intake.d.ts.map +1 -1
  126. package/dist/adapters/intake.js +96 -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/{platform-messages.d.ts → adapters/messages.d.ts} +3 -2
  133. package/dist/adapters/messages.d.ts.map +1 -0
  134. package/dist/{platform-messages.js → adapters/messages.js} +4 -1
  135. package/dist/adapters/messages.js.map +1 -0
  136. package/dist/adapters/progressive-renderer.d.ts +7 -0
  137. package/dist/adapters/progressive-renderer.d.ts.map +1 -0
  138. package/dist/adapters/progressive-renderer.js +443 -0
  139. package/dist/adapters/progressive-renderer.js.map +1 -0
  140. package/dist/adapters/shared.d.ts +37 -11
  141. package/dist/adapters/shared.d.ts.map +1 -1
  142. package/dist/adapters/shared.js +130 -24
  143. package/dist/adapters/shared.js.map +1 -1
  144. package/dist/adapters/slack/assistant.d.ts +73 -0
  145. package/dist/adapters/slack/assistant.d.ts.map +1 -0
  146. package/dist/adapters/slack/assistant.js +205 -0
  147. package/dist/adapters/slack/assistant.js.map +1 -0
  148. package/dist/adapters/slack/auto-reply-context.d.ts +21 -0
  149. package/dist/adapters/slack/auto-reply-context.d.ts.map +1 -0
  150. package/dist/adapters/slack/auto-reply-context.js +28 -0
  151. package/dist/adapters/slack/auto-reply-context.js.map +1 -0
  152. package/dist/adapters/slack/blocks.d.ts +14 -0
  153. package/dist/adapters/slack/blocks.d.ts.map +1 -1
  154. package/dist/adapters/slack/blocks.js +104 -148
  155. package/dist/adapters/slack/blocks.js.map +1 -1
  156. package/dist/adapters/slack/bot.d.ts +154 -21
  157. package/dist/adapters/slack/bot.d.ts.map +1 -1
  158. package/dist/adapters/slack/bot.js +1037 -484
  159. package/dist/adapters/slack/bot.js.map +1 -1
  160. package/dist/adapters/slack/context.d.ts +2 -6
  161. package/dist/adapters/slack/context.d.ts.map +1 -1
  162. package/dist/adapters/slack/context.js +11 -17
  163. package/dist/adapters/slack/context.js.map +1 -1
  164. package/dist/adapters/slack/jev-context.d.ts +30 -0
  165. package/dist/adapters/slack/jev-context.d.ts.map +1 -0
  166. package/dist/adapters/slack/jev-context.js +67 -0
  167. package/dist/adapters/slack/jev-context.js.map +1 -0
  168. package/dist/adapters/slack/markdown.d.ts +3 -0
  169. package/dist/adapters/slack/markdown.d.ts.map +1 -0
  170. package/dist/adapters/slack/markdown.js +48 -0
  171. package/dist/adapters/slack/markdown.js.map +1 -0
  172. package/dist/adapters/slack/persona.d.ts +15 -0
  173. package/dist/adapters/slack/persona.d.ts.map +1 -0
  174. package/dist/adapters/slack/persona.js +22 -0
  175. package/dist/adapters/slack/persona.js.map +1 -0
  176. package/dist/adapters/slack/response-lifecycle.d.ts +1 -1
  177. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  178. package/dist/adapters/slack/response-lifecycle.js +261 -345
  179. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  180. package/dist/adapters/slack/session.d.ts.map +1 -1
  181. package/dist/adapters/slack/session.js +7 -11
  182. package/dist/adapters/slack/session.js.map +1 -1
  183. package/dist/adapters/slack/stream-limits.d.ts +35 -0
  184. package/dist/adapters/slack/stream-limits.d.ts.map +1 -0
  185. package/dist/adapters/slack/stream-limits.js +56 -0
  186. package/dist/adapters/slack/stream-limits.js.map +1 -0
  187. package/dist/adapters/slack/task-intent.d.ts +32 -0
  188. package/dist/adapters/slack/task-intent.d.ts.map +1 -0
  189. package/dist/adapters/slack/task-intent.js +72 -0
  190. package/dist/adapters/slack/task-intent.js.map +1 -0
  191. package/dist/adapters/slack/task-status.d.ts +7 -0
  192. package/dist/adapters/slack/task-status.d.ts.map +1 -0
  193. package/dist/adapters/slack/task-status.js +107 -0
  194. package/dist/adapters/slack/task-status.js.map +1 -0
  195. package/dist/adapters/slack/tool-pack.d.ts +11 -0
  196. package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
  197. package/dist/adapters/slack/tool-pack.js +45 -0
  198. package/dist/adapters/slack/tool-pack.js.map +1 -0
  199. package/dist/adapters/slack/tools/blockkit.d.ts +14 -0
  200. package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
  201. package/dist/adapters/slack/tools/blockkit.js +106 -0
  202. package/dist/adapters/slack/tools/blockkit.js.map +1 -0
  203. package/dist/adapters/slack/types.d.ts +73 -2
  204. package/dist/adapters/slack/types.d.ts.map +1 -1
  205. package/dist/adapters/slack/types.js.map +1 -1
  206. package/dist/adapters/slack/update-diagnostics.d.ts +14 -0
  207. package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -0
  208. package/dist/adapters/slack/update-diagnostics.js +134 -0
  209. package/dist/adapters/slack/update-diagnostics.js.map +1 -0
  210. package/dist/adapters/telegram/bot.d.ts +10 -9
  211. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  212. package/dist/adapters/telegram/bot.js +133 -202
  213. package/dist/adapters/telegram/bot.js.map +1 -1
  214. package/dist/adapters/telegram/context.d.ts +2 -6
  215. package/dist/adapters/telegram/context.d.ts.map +1 -1
  216. package/dist/adapters/telegram/context.js +53 -190
  217. package/dist/adapters/telegram/context.js.map +1 -1
  218. package/dist/adapters/telegram/types.d.ts +1 -1
  219. package/dist/adapters/telegram/types.d.ts.map +1 -1
  220. package/dist/adapters/telegram/types.js.map +1 -1
  221. package/dist/adapters/types.d.ts +144 -13
  222. package/dist/adapters/types.d.ts.map +1 -1
  223. package/dist/adapters/types.js.map +1 -1
  224. package/dist/adapters/web/admin/portal.d.ts +44 -0
  225. package/dist/adapters/web/admin/portal.d.ts.map +1 -0
  226. package/dist/adapters/web/admin/portal.js +3207 -0
  227. package/dist/adapters/web/admin/portal.js.map +1 -0
  228. package/dist/{web → adapters/web}/admin/provider-models.d.ts +1 -1
  229. package/dist/adapters/web/admin/provider-models.d.ts.map +1 -0
  230. package/dist/{web → adapters/web}/admin/provider-models.js +1 -1
  231. package/dist/adapters/web/admin/provider-models.js.map +1 -0
  232. package/dist/adapters/web/admin/types.d.ts +53 -0
  233. package/dist/adapters/web/admin/types.d.ts.map +1 -0
  234. package/dist/adapters/web/admin/types.js.map +1 -0
  235. package/dist/adapters/web/login/oauth.d.ts +5 -0
  236. package/dist/adapters/web/login/oauth.d.ts.map +1 -0
  237. package/dist/{web → adapters/web}/login/oauth.js +50 -85
  238. package/dist/adapters/web/login/oauth.js.map +1 -0
  239. package/dist/{web → adapters/web}/login/portal.d.ts +9 -3
  240. package/dist/adapters/web/login/portal.d.ts.map +1 -0
  241. package/dist/{web → adapters/web}/login/portal.js +161 -119
  242. package/dist/adapters/web/login/portal.js.map +1 -0
  243. package/dist/{web → adapters/web}/login/types.d.ts +1 -12
  244. package/dist/adapters/web/login/types.d.ts.map +1 -0
  245. package/dist/adapters/web/login/types.js.map +1 -0
  246. package/dist/adapters/web/portal-shell.d.ts +22 -0
  247. package/dist/adapters/web/portal-shell.d.ts.map +1 -0
  248. package/dist/{portal-shell.js → adapters/web/portal-shell.js} +78 -2
  249. package/dist/adapters/web/portal-shell.js.map +1 -0
  250. package/dist/{web → adapters/web}/server.d.ts +14 -8
  251. package/dist/adapters/web/server.d.ts.map +1 -0
  252. package/dist/{web → adapters/web}/server.js +14 -7
  253. package/dist/adapters/web/server.js.map +1 -0
  254. package/dist/adapters/web/session-view/portal.d.ts +20 -0
  255. package/dist/adapters/web/session-view/portal.d.ts.map +1 -0
  256. package/dist/{web → adapters/web}/session-view/portal.js +633 -162
  257. package/dist/adapters/web/session-view/portal.js.map +1 -0
  258. package/dist/{web → adapters/web}/session-view/types.d.ts +11 -6
  259. package/dist/adapters/web/session-view/types.d.ts.map +1 -0
  260. package/dist/adapters/web/session-view/types.js.map +1 -0
  261. package/dist/adapters/web/token-store.d.ts.map +1 -0
  262. package/dist/{web → adapters/web}/token-store.js +1 -1
  263. package/dist/adapters/web/token-store.js.map +1 -0
  264. package/dist/adapters/web/types.d.ts.map +1 -0
  265. package/dist/adapters/web/types.js.map +1 -0
  266. package/dist/cli/arg-grammar.d.ts +11 -0
  267. package/dist/cli/arg-grammar.d.ts.map +1 -0
  268. package/dist/cli/arg-grammar.js +50 -0
  269. package/dist/cli/arg-grammar.js.map +1 -0
  270. package/dist/cli/boot.d.ts +5 -0
  271. package/dist/cli/boot.d.ts.map +1 -0
  272. package/dist/cli/boot.js +90 -0
  273. package/dist/cli/boot.js.map +1 -0
  274. package/dist/cli/download.d.ts.map +1 -0
  275. package/dist/cli/download.js +88 -0
  276. package/dist/cli/download.js.map +1 -0
  277. package/dist/cli/office.d.ts +2 -0
  278. package/dist/cli/office.d.ts.map +1 -0
  279. package/dist/cli/office.js +181 -0
  280. package/dist/cli/office.js.map +1 -0
  281. package/dist/cli/onboard.d.ts +10 -0
  282. package/dist/cli/onboard.d.ts.map +1 -0
  283. package/dist/cli/onboard.js +225 -0
  284. package/dist/cli/onboard.js.map +1 -0
  285. package/dist/cli/process-lifecycle.d.ts +19 -0
  286. package/dist/cli/process-lifecycle.d.ts.map +1 -0
  287. package/dist/cli/process-lifecycle.js +67 -0
  288. package/dist/cli/process-lifecycle.js.map +1 -0
  289. package/dist/cli/sessions.d.ts +2 -0
  290. package/dist/cli/sessions.d.ts.map +1 -0
  291. package/dist/cli/sessions.js +88 -0
  292. package/dist/cli/sessions.js.map +1 -0
  293. package/dist/cli/types.d.ts +25 -0
  294. package/dist/cli/types.d.ts.map +1 -0
  295. package/dist/cli/types.js.map +1 -0
  296. package/dist/dream/index.d.ts +20 -0
  297. package/dist/dream/index.d.ts.map +1 -0
  298. package/dist/dream/index.js +264 -0
  299. package/dist/dream/index.js.map +1 -0
  300. package/dist/dream/types.d.ts +30 -0
  301. package/dist/dream/types.d.ts.map +1 -0
  302. package/dist/dream/types.js +2 -0
  303. package/dist/dream/types.js.map +1 -0
  304. package/dist/env-manifest.d.ts +38 -0
  305. package/dist/env-manifest.d.ts.map +1 -0
  306. package/dist/env-manifest.js +260 -0
  307. package/dist/env-manifest.js.map +1 -0
  308. package/dist/events/index.d.ts +172 -0
  309. package/dist/events/index.d.ts.map +1 -0
  310. package/dist/events/index.js +340 -0
  311. package/dist/events/index.js.map +1 -0
  312. package/dist/events/scheduler.d.ts +34 -0
  313. package/dist/events/scheduler.d.ts.map +1 -0
  314. package/dist/events/scheduler.js +231 -0
  315. package/dist/events/scheduler.js.map +1 -0
  316. package/dist/file-guards.d.ts +26 -0
  317. package/dist/file-guards.d.ts.map +1 -0
  318. package/dist/file-guards.js +133 -0
  319. package/dist/file-guards.js.map +1 -0
  320. package/dist/harness/execution-env.d.ts +19 -0
  321. package/dist/harness/execution-env.d.ts.map +1 -0
  322. package/dist/harness/execution-env.js +262 -0
  323. package/dist/harness/execution-env.js.map +1 -0
  324. package/dist/harness/execution-resolver.d.ts +25 -0
  325. package/dist/harness/execution-resolver.d.ts.map +1 -0
  326. package/dist/harness/execution-resolver.js +156 -0
  327. package/dist/harness/execution-resolver.js.map +1 -0
  328. package/dist/harness/index.d.ts +18 -13
  329. package/dist/harness/index.d.ts.map +1 -1
  330. package/dist/harness/index.js +11 -11
  331. package/dist/harness/index.js.map +1 -1
  332. package/dist/harness/jev.d.ts +86 -0
  333. package/dist/harness/jev.d.ts.map +1 -0
  334. package/dist/harness/jev.js +167 -0
  335. package/dist/harness/jev.js.map +1 -0
  336. package/dist/harness/mcp.d.ts +38 -0
  337. package/dist/harness/mcp.d.ts.map +1 -0
  338. package/dist/harness/mcp.js +304 -0
  339. package/dist/harness/mcp.js.map +1 -0
  340. package/dist/harness/models.d.ts +7 -4
  341. package/dist/harness/models.d.ts.map +1 -1
  342. package/dist/harness/models.js +54 -55
  343. package/dist/harness/models.js.map +1 -1
  344. package/dist/harness/open-connector.d.ts +25 -0
  345. package/dist/harness/open-connector.d.ts.map +1 -0
  346. package/dist/harness/open-connector.js +178 -0
  347. package/dist/harness/open-connector.js.map +1 -0
  348. package/dist/harness/presenter.d.ts +31 -0
  349. package/dist/harness/presenter.d.ts.map +1 -0
  350. package/dist/harness/presenter.js +859 -0
  351. package/dist/harness/presenter.js.map +1 -0
  352. package/dist/harness/prompt.d.ts +30 -0
  353. package/dist/harness/prompt.d.ts.map +1 -0
  354. package/dist/harness/prompt.js +420 -0
  355. package/dist/harness/prompt.js.map +1 -0
  356. package/dist/harness/runner.d.ts +2 -123
  357. package/dist/harness/runner.d.ts.map +1 -1
  358. package/dist/harness/runner.js +551 -416
  359. package/dist/harness/runner.js.map +1 -1
  360. package/dist/harness/session.d.ts +122 -0
  361. package/dist/harness/session.d.ts.map +1 -0
  362. package/dist/harness/session.js +581 -0
  363. package/dist/harness/session.js.map +1 -0
  364. package/dist/harness/skills.d.ts +17 -28
  365. package/dist/harness/skills.d.ts.map +1 -1
  366. package/dist/harness/skills.js +104 -39
  367. package/dist/harness/skills.js.map +1 -1
  368. package/dist/harness/subagent-profiles.d.ts +8 -0
  369. package/dist/harness/subagent-profiles.d.ts.map +1 -0
  370. package/dist/harness/subagent-profiles.js +293 -0
  371. package/dist/harness/subagent-profiles.js.map +1 -0
  372. package/dist/harness/subagent.d.ts +64 -0
  373. package/dist/harness/subagent.d.ts.map +1 -0
  374. package/dist/harness/subagent.js +687 -0
  375. package/dist/harness/subagent.js.map +1 -0
  376. package/dist/harness/tools/attach.d.ts.map +1 -0
  377. package/dist/{adapters/slack → harness}/tools/attach.js +1 -1
  378. package/dist/harness/tools/attach.js.map +1 -0
  379. package/dist/{tools → harness/tools}/event.d.ts +4 -33
  380. package/dist/harness/tools/event.d.ts.map +1 -0
  381. package/dist/harness/tools/event.js +175 -0
  382. package/dist/harness/tools/event.js.map +1 -0
  383. package/dist/harness/tools/generate-image.d.ts +23 -0
  384. package/dist/harness/tools/generate-image.d.ts.map +1 -0
  385. package/dist/harness/tools/generate-image.js +65 -0
  386. package/dist/harness/tools/generate-image.js.map +1 -0
  387. package/dist/harness/tools/host-fn-tool.d.ts +21 -0
  388. package/dist/harness/tools/host-fn-tool.d.ts.map +1 -0
  389. package/dist/harness/tools/host-fn-tool.js +32 -0
  390. package/dist/harness/tools/host-fn-tool.js.map +1 -0
  391. package/dist/harness/tools/index.d.ts +41 -0
  392. package/dist/harness/tools/index.d.ts.map +1 -0
  393. package/dist/harness/tools/index.js +51 -0
  394. package/dist/harness/tools/index.js.map +1 -0
  395. package/dist/harness/tools/jev.d.ts +21 -0
  396. package/dist/harness/tools/jev.d.ts.map +1 -0
  397. package/dist/harness/tools/jev.js +109 -0
  398. package/dist/harness/tools/jev.js.map +1 -0
  399. package/dist/harness/tools/pi-tools.d.ts +18 -0
  400. package/dist/harness/tools/pi-tools.d.ts.map +1 -0
  401. package/dist/harness/tools/pi-tools.js +84 -0
  402. package/dist/harness/tools/pi-tools.js.map +1 -0
  403. package/dist/harness/tools/react.d.ts.map +1 -0
  404. package/dist/{tools → harness/tools}/react.js +6 -17
  405. package/dist/harness/tools/react.js.map +1 -0
  406. package/dist/{tools → harness/tools}/sandbox.d.ts +4 -4
  407. package/dist/harness/tools/sandbox.d.ts.map +1 -0
  408. package/dist/{tools → harness/tools}/sandbox.js +12 -8
  409. package/dist/harness/tools/sandbox.js.map +1 -0
  410. package/dist/harness/tools/subagent.d.ts +85 -0
  411. package/dist/harness/tools/subagent.d.ts.map +1 -0
  412. package/dist/harness/tools/subagent.js +677 -0
  413. package/dist/harness/tools/subagent.js.map +1 -0
  414. package/dist/harness/tools/task.d.ts +20 -0
  415. package/dist/harness/tools/task.d.ts.map +1 -0
  416. package/dist/harness/tools/task.js +79 -0
  417. package/dist/harness/tools/task.js.map +1 -0
  418. package/dist/harness/tools/types.d.ts +29 -0
  419. package/dist/harness/tools/types.d.ts.map +1 -0
  420. package/dist/harness/tools/types.js +2 -0
  421. package/dist/harness/tools/types.js.map +1 -0
  422. package/dist/harness/types.d.ts +384 -25
  423. package/dist/harness/types.d.ts.map +1 -1
  424. package/dist/harness/types.js +1 -1
  425. package/dist/harness/types.js.map +1 -1
  426. package/dist/index.d.ts +33 -9
  427. package/dist/index.d.ts.map +1 -1
  428. package/dist/index.js +19 -6
  429. package/dist/index.js.map +1 -1
  430. package/dist/log.d.ts.map +1 -1
  431. package/dist/log.js +4 -1
  432. package/dist/log.js.map +1 -1
  433. package/dist/main.js +357 -198
  434. package/dist/main.js.map +1 -1
  435. package/dist/observability/index.d.ts +33 -0
  436. package/dist/observability/index.d.ts.map +1 -0
  437. package/dist/observability/index.js +257 -0
  438. package/dist/observability/index.js.map +1 -0
  439. package/dist/observability/instrument.js +14 -6
  440. package/dist/observability/instrument.js.map +1 -1
  441. package/dist/observability/otel.d.ts +10 -0
  442. package/dist/observability/otel.d.ts.map +1 -0
  443. package/dist/observability/otel.js +183 -0
  444. package/dist/observability/otel.js.map +1 -0
  445. package/dist/observability/sentry.d.ts +40 -7
  446. package/dist/observability/sentry.d.ts.map +1 -1
  447. package/dist/observability/sentry.js +176 -32
  448. package/dist/observability/sentry.js.map +1 -1
  449. package/dist/observability/types.d.ts +24 -3
  450. package/dist/observability/types.d.ts.map +1 -1
  451. package/dist/observability/types.js.map +1 -1
  452. package/dist/office/index.d.ts +139 -0
  453. package/dist/office/index.d.ts.map +1 -0
  454. package/dist/office/index.js +1084 -0
  455. package/dist/office/index.js.map +1 -0
  456. package/dist/office/projection.d.ts +42 -0
  457. package/dist/office/projection.d.ts.map +1 -0
  458. package/dist/office/projection.js +182 -0
  459. package/dist/office/projection.js.map +1 -0
  460. package/dist/office/types.d.ts +116 -0
  461. package/dist/office/types.d.ts.map +1 -0
  462. package/dist/office/types.js +2 -0
  463. package/dist/office/types.js.map +1 -0
  464. package/dist/runtime/conversation-runtime.d.ts +1 -1
  465. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  466. package/dist/runtime/conversation-runtime.js +423 -152
  467. package/dist/runtime/conversation-runtime.js.map +1 -1
  468. package/dist/runtime/session-lifecycle.d.ts +76 -0
  469. package/dist/runtime/session-lifecycle.d.ts.map +1 -0
  470. package/dist/runtime/session-lifecycle.js +404 -0
  471. package/dist/runtime/session-lifecycle.js.map +1 -0
  472. package/dist/runtime/types.d.ts +63 -15
  473. package/dist/runtime/types.d.ts.map +1 -1
  474. package/dist/runtime/types.js.map +1 -1
  475. package/dist/sandbox/cloudflare.d.ts +4 -0
  476. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  477. package/dist/sandbox/cloudflare.js +54 -52
  478. package/dist/sandbox/cloudflare.js.map +1 -1
  479. package/dist/sandbox/container.d.ts +3 -0
  480. package/dist/sandbox/container.d.ts.map +1 -1
  481. package/dist/sandbox/container.js +19 -7
  482. package/dist/sandbox/container.js.map +1 -1
  483. package/dist/sandbox/host.d.ts +3 -0
  484. package/dist/sandbox/host.d.ts.map +1 -1
  485. package/dist/sandbox/host.js +44 -35
  486. package/dist/sandbox/host.js.map +1 -1
  487. package/dist/sandbox/identity.d.ts +42 -0
  488. package/dist/sandbox/identity.d.ts.map +1 -0
  489. package/dist/sandbox/identity.js +77 -0
  490. package/dist/sandbox/identity.js.map +1 -0
  491. package/dist/sandbox/index.d.ts +24 -6
  492. package/dist/sandbox/index.d.ts.map +1 -1
  493. package/dist/sandbox/index.js +77 -17
  494. package/dist/sandbox/index.js.map +1 -1
  495. package/dist/sandbox/provisioner.d.ts +139 -0
  496. package/dist/sandbox/provisioner.d.ts.map +1 -0
  497. package/dist/{provisioner.js → sandbox/provisioner.js} +378 -24
  498. package/dist/sandbox/provisioner.js.map +1 -0
  499. package/dist/sandbox/types.d.ts +43 -9
  500. package/dist/sandbox/types.d.ts.map +1 -1
  501. package/dist/sandbox/types.js.map +1 -1
  502. package/dist/sandbox/utils.d.ts +24 -0
  503. package/dist/sandbox/utils.d.ts.map +1 -1
  504. package/dist/sandbox/utils.js +92 -1
  505. package/dist/sandbox/utils.js.map +1 -1
  506. package/dist/sessions/chat-history-sync.d.ts +23 -0
  507. package/dist/sessions/chat-history-sync.d.ts.map +1 -0
  508. package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +239 -175
  509. package/dist/sessions/chat-history-sync.js.map +1 -0
  510. package/dist/sessions/history-line.d.ts +29 -0
  511. package/dist/sessions/history-line.d.ts.map +1 -0
  512. package/dist/sessions/history-line.js +45 -0
  513. package/dist/sessions/history-line.js.map +1 -0
  514. package/dist/sessions/migrate-common.d.ts +43 -0
  515. package/dist/sessions/migrate-common.d.ts.map +1 -0
  516. package/dist/sessions/migrate-common.js +99 -0
  517. package/dist/sessions/migrate-common.js.map +1 -0
  518. package/dist/sessions/migrate-pi-084.d.ts +8 -0
  519. package/dist/sessions/migrate-pi-084.d.ts.map +1 -0
  520. package/dist/sessions/migrate-pi-084.js +302 -0
  521. package/dist/sessions/migrate-pi-084.js.map +1 -0
  522. package/dist/sessions/migrate-v3.d.ts +15 -0
  523. package/dist/sessions/migrate-v3.d.ts.map +1 -0
  524. package/dist/sessions/migrate-v3.js +419 -0
  525. package/dist/sessions/migrate-v3.js.map +1 -0
  526. package/dist/sessions/session-key.d.ts +33 -0
  527. package/dist/sessions/session-key.d.ts.map +1 -0
  528. package/dist/sessions/session-key.js +115 -0
  529. package/dist/sessions/session-key.js.map +1 -0
  530. package/dist/sessions/session-store.d.ts +61 -0
  531. package/dist/sessions/session-store.d.ts.map +1 -0
  532. package/dist/sessions/session-store.js +684 -0
  533. package/dist/sessions/session-store.js.map +1 -0
  534. package/dist/sessions/store.d.ts +17 -10
  535. package/dist/sessions/store.d.ts.map +1 -1
  536. package/dist/sessions/store.js +182 -47
  537. package/dist/sessions/store.js.map +1 -1
  538. package/dist/sessions/types.d.ts +74 -8
  539. package/dist/sessions/types.d.ts.map +1 -1
  540. package/dist/sessions/types.js +1 -1
  541. package/dist/sessions/types.js.map +1 -1
  542. package/dist/settings/apply.d.ts +16 -0
  543. package/dist/settings/apply.d.ts.map +1 -0
  544. package/dist/settings/apply.js +60 -0
  545. package/dist/settings/apply.js.map +1 -0
  546. package/dist/settings/index.d.ts +126 -0
  547. package/dist/settings/index.d.ts.map +1 -0
  548. package/dist/settings/index.js +422 -0
  549. package/dist/settings/index.js.map +1 -0
  550. package/dist/settings/migrate.d.ts +21 -0
  551. package/dist/settings/migrate.d.ts.map +1 -0
  552. package/dist/settings/migrate.js +86 -0
  553. package/dist/settings/migrate.js.map +1 -0
  554. package/dist/types.d.ts +330 -141
  555. package/dist/types.d.ts.map +1 -1
  556. package/dist/types.js +2 -2
  557. package/dist/types.js.map +1 -1
  558. package/dist/vault/index.d.ts +52 -2
  559. package/dist/vault/index.d.ts.map +1 -1
  560. package/dist/vault/index.js +218 -86
  561. package/dist/vault/index.js.map +1 -1
  562. package/dist/vault/types.d.ts +6 -2
  563. package/dist/vault/types.d.ts.map +1 -1
  564. package/dist/vault/types.js.map +1 -1
  565. package/package.json +79 -40
  566. package/dist/adapter.d.ts +0 -2
  567. package/dist/adapter.d.ts.map +0 -1
  568. package/dist/adapter.js +0 -2
  569. package/dist/adapter.js.map +0 -1
  570. package/dist/adapters/slack/tools/attach.d.ts.map +0 -1
  571. package/dist/adapters/slack/tools/attach.js.map +0 -1
  572. package/dist/adapters/streaming.d.ts +0 -18
  573. package/dist/adapters/streaming.d.ts.map +0 -1
  574. package/dist/adapters/streaming.js +0 -44
  575. package/dist/adapters/streaming.js.map +0 -1
  576. package/dist/adapters/telegram/html.d.ts +0 -3
  577. package/dist/adapters/telegram/html.d.ts.map +0 -1
  578. package/dist/adapters/telegram/html.js +0 -98
  579. package/dist/adapters/telegram/html.js.map +0 -1
  580. package/dist/agent-events.d.ts +0 -5
  581. package/dist/agent-events.d.ts.map +0 -1
  582. package/dist/agent-events.js +0 -26
  583. package/dist/agent-events.js.map +0 -1
  584. package/dist/agent.d.ts +0 -39
  585. package/dist/agent.d.ts.map +0 -1
  586. package/dist/agent.js +0 -1291
  587. package/dist/agent.js.map +0 -1
  588. package/dist/cli/ext-git.d.ts +0 -22
  589. package/dist/cli/ext-git.d.ts.map +0 -1
  590. package/dist/cli/ext-git.js +0 -76
  591. package/dist/cli/ext-git.js.map +0 -1
  592. package/dist/cli/ext.d.ts +0 -2
  593. package/dist/cli/ext.d.ts.map +0 -1
  594. package/dist/cli/ext.js +0 -217
  595. package/dist/cli/ext.js.map +0 -1
  596. package/dist/commands/admin.d.ts.map +0 -1
  597. package/dist/commands/admin.js.map +0 -1
  598. package/dist/commands/auto-reply.d.ts.map +0 -1
  599. package/dist/commands/auto-reply.js +0 -76
  600. package/dist/commands/auto-reply.js.map +0 -1
  601. package/dist/commands/extensions.d.ts +0 -14
  602. package/dist/commands/extensions.d.ts.map +0 -1
  603. package/dist/commands/extensions.js +0 -55
  604. package/dist/commands/extensions.js.map +0 -1
  605. package/dist/commands/login.d.ts +0 -5
  606. package/dist/commands/login.d.ts.map +0 -1
  607. package/dist/commands/login.js +0 -115
  608. package/dist/commands/login.js.map +0 -1
  609. package/dist/commands/model.d.ts +0 -10
  610. package/dist/commands/model.d.ts.map +0 -1
  611. package/dist/commands/model.js +0 -102
  612. package/dist/commands/model.js.map +0 -1
  613. package/dist/commands/new.d.ts.map +0 -1
  614. package/dist/commands/new.js +0 -25
  615. package/dist/commands/new.js.map +0 -1
  616. package/dist/commands/parse.d.ts +0 -7
  617. package/dist/commands/parse.d.ts.map +0 -1
  618. package/dist/commands/parse.js +0 -14
  619. package/dist/commands/parse.js.map +0 -1
  620. package/dist/commands/registry.d.ts +0 -5
  621. package/dist/commands/registry.d.ts.map +0 -1
  622. package/dist/commands/registry.js +0 -31
  623. package/dist/commands/registry.js.map +0 -1
  624. package/dist/commands/sandbox.d.ts.map +0 -1
  625. package/dist/commands/sandbox.js +0 -78
  626. package/dist/commands/sandbox.js.map +0 -1
  627. package/dist/commands/session-view.d.ts.map +0 -1
  628. package/dist/commands/session-view.js.map +0 -1
  629. package/dist/commands/types.d.ts +0 -66
  630. package/dist/commands/types.d.ts.map +0 -1
  631. package/dist/commands/types.js.map +0 -1
  632. package/dist/commands/utils.d.ts +0 -11
  633. package/dist/commands/utils.d.ts.map +0 -1
  634. package/dist/commands/utils.js.map +0 -1
  635. package/dist/config.d.ts +0 -78
  636. package/dist/config.d.ts.map +0 -1
  637. package/dist/config.js +0 -450
  638. package/dist/config.js.map +0 -1
  639. package/dist/download.d.ts.map +0 -1
  640. package/dist/download.js +0 -89
  641. package/dist/download.js.map +0 -1
  642. package/dist/events.d.ts +0 -43
  643. package/dist/events.d.ts.map +0 -1
  644. package/dist/events.js +0 -456
  645. package/dist/events.js.map +0 -1
  646. package/dist/execution-resolver.d.ts +0 -21
  647. package/dist/execution-resolver.d.ts.map +0 -1
  648. package/dist/execution-resolver.js +0 -170
  649. package/dist/execution-resolver.js.map +0 -1
  650. package/dist/harness/auth.d.ts +0 -16
  651. package/dist/harness/auth.d.ts.map +0 -1
  652. package/dist/harness/auth.js +0 -86
  653. package/dist/harness/auth.js.map +0 -1
  654. package/dist/harness/extensions/loader.d.ts +0 -86
  655. package/dist/harness/extensions/loader.d.ts.map +0 -1
  656. package/dist/harness/extensions/loader.js +0 -525
  657. package/dist/harness/extensions/loader.js.map +0 -1
  658. package/dist/harness/extensions/registry.d.ts +0 -23
  659. package/dist/harness/extensions/registry.d.ts.map +0 -1
  660. package/dist/harness/extensions/registry.js +0 -45
  661. package/dist/harness/extensions/registry.js.map +0 -1
  662. package/dist/harness/extensions/types.d.ts +0 -248
  663. package/dist/harness/extensions/types.d.ts.map +0 -1
  664. package/dist/harness/extensions/types.js.map +0 -1
  665. package/dist/harness/session-store.d.ts +0 -77
  666. package/dist/harness/session-store.d.ts.map +0 -1
  667. package/dist/harness/session-store.js +0 -248
  668. package/dist/harness/session-store.js.map +0 -1
  669. package/dist/harness/settings.d.ts +0 -47
  670. package/dist/harness/settings.d.ts.map +0 -1
  671. package/dist/harness/settings.js +0 -29
  672. package/dist/harness/settings.js.map +0 -1
  673. package/dist/model-registry.d.ts +0 -4
  674. package/dist/model-registry.d.ts.map +0 -1
  675. package/dist/model-registry.js +0 -7
  676. package/dist/model-registry.js.map +0 -1
  677. package/dist/platform-messages.d.ts.map +0 -1
  678. package/dist/platform-messages.js.map +0 -1
  679. package/dist/portal-shell.d.ts +0 -4
  680. package/dist/portal-shell.d.ts.map +0 -1
  681. package/dist/portal-shell.js.map +0 -1
  682. package/dist/provisioner.d.ts +0 -61
  683. package/dist/provisioner.d.ts.map +0 -1
  684. package/dist/provisioner.js.map +0 -1
  685. package/dist/runtime/agent-run-controller.d.ts +0 -31
  686. package/dist/runtime/agent-run-controller.d.ts.map +0 -1
  687. package/dist/runtime/agent-run-controller.js +0 -195
  688. package/dist/runtime/agent-run-controller.js.map +0 -1
  689. package/dist/sandbox/errors.d.ts +0 -6
  690. package/dist/sandbox/errors.d.ts.map +0 -1
  691. package/dist/sandbox/errors.js +0 -11
  692. package/dist/sandbox/errors.js.map +0 -1
  693. package/dist/sandbox/firecracker.d.ts +0 -15
  694. package/dist/sandbox/firecracker.d.ts.map +0 -1
  695. package/dist/sandbox/firecracker.js +0 -212
  696. package/dist/sandbox/firecracker.js.map +0 -1
  697. package/dist/sandbox/image.d.ts +0 -3
  698. package/dist/sandbox/image.d.ts.map +0 -1
  699. package/dist/sandbox/image.js +0 -27
  700. package/dist/sandbox/image.js.map +0 -1
  701. package/dist/sandbox/path-context.d.ts +0 -3
  702. package/dist/sandbox/path-context.d.ts.map +0 -1
  703. package/dist/sandbox/path-context.js +0 -20
  704. package/dist/sandbox/path-context.js.map +0 -1
  705. package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
  706. package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
  707. package/dist/sessions/agent-memory-file-manager.js.map +0 -1
  708. package/dist/sessions/metadata.d.ts +0 -3
  709. package/dist/sessions/metadata.d.ts.map +0 -1
  710. package/dist/sessions/metadata.js +0 -11
  711. package/dist/sessions/metadata.js.map +0 -1
  712. package/dist/sessions/policy.d.ts +0 -6
  713. package/dist/sessions/policy.d.ts.map +0 -1
  714. package/dist/sessions/policy.js +0 -23
  715. package/dist/sessions/policy.js.map +0 -1
  716. package/dist/store.d.ts +0 -46
  717. package/dist/store.d.ts.map +0 -1
  718. package/dist/store.js +0 -177
  719. package/dist/store.js.map +0 -1
  720. package/dist/tools/bash.d.ts +0 -10
  721. package/dist/tools/bash.d.ts.map +0 -1
  722. package/dist/tools/bash.js +0 -80
  723. package/dist/tools/bash.js.map +0 -1
  724. package/dist/tools/edit.d.ts +0 -11
  725. package/dist/tools/edit.d.ts.map +0 -1
  726. package/dist/tools/edit.js +0 -131
  727. package/dist/tools/edit.js.map +0 -1
  728. package/dist/tools/event.d.ts.map +0 -1
  729. package/dist/tools/event.js +0 -252
  730. package/dist/tools/event.js.map +0 -1
  731. package/dist/tools/index.d.ts +0 -24
  732. package/dist/tools/index.d.ts.map +0 -1
  733. package/dist/tools/index.js +0 -31
  734. package/dist/tools/index.js.map +0 -1
  735. package/dist/tools/react.d.ts.map +0 -1
  736. package/dist/tools/react.js.map +0 -1
  737. package/dist/tools/read.d.ts +0 -11
  738. package/dist/tools/read.d.ts.map +0 -1
  739. package/dist/tools/read.js +0 -134
  740. package/dist/tools/read.js.map +0 -1
  741. package/dist/tools/sandbox.d.ts.map +0 -1
  742. package/dist/tools/sandbox.js.map +0 -1
  743. package/dist/tools/truncate.d.ts +0 -33
  744. package/dist/tools/truncate.d.ts.map +0 -1
  745. package/dist/tools/truncate.js +0 -184
  746. package/dist/tools/truncate.js.map +0 -1
  747. package/dist/tools/types.d.ts +0 -54
  748. package/dist/tools/types.d.ts.map +0 -1
  749. package/dist/tools/types.js.map +0 -1
  750. package/dist/tools/write.d.ts +0 -10
  751. package/dist/tools/write.d.ts.map +0 -1
  752. package/dist/tools/write.js +0 -29
  753. package/dist/tools/write.js.map +0 -1
  754. package/dist/trigger.d.ts +0 -22
  755. package/dist/trigger.d.ts.map +0 -1
  756. package/dist/trigger.js +0 -100
  757. package/dist/trigger.js.map +0 -1
  758. package/dist/utils/date.d.ts +0 -10
  759. package/dist/utils/date.d.ts.map +0 -1
  760. package/dist/utils/date.js +0 -23
  761. package/dist/utils/date.js.map +0 -1
  762. package/dist/utils/env.d.ts +0 -3
  763. package/dist/utils/env.d.ts.map +0 -1
  764. package/dist/utils/env.js +0 -12
  765. package/dist/utils/env.js.map +0 -1
  766. package/dist/utils/file-guards.d.ts +0 -9
  767. package/dist/utils/file-guards.d.ts.map +0 -1
  768. package/dist/utils/file-guards.js +0 -59
  769. package/dist/utils/file-guards.js.map +0 -1
  770. package/dist/utils/fs-atomic.d.ts +0 -10
  771. package/dist/utils/fs-atomic.d.ts.map +0 -1
  772. package/dist/utils/fs-atomic.js +0 -45
  773. package/dist/utils/fs-atomic.js.map +0 -1
  774. package/dist/utils/html.d.ts +0 -2
  775. package/dist/utils/html.d.ts.map +0 -1
  776. package/dist/utils/html.js +0 -4
  777. package/dist/utils/html.js.map +0 -1
  778. package/dist/utils/http-body.d.ts +0 -10
  779. package/dist/utils/http-body.d.ts.map +0 -1
  780. package/dist/utils/http-body.js +0 -34
  781. package/dist/utils/http-body.js.map +0 -1
  782. package/dist/vault/routing.d.ts +0 -3
  783. package/dist/vault/routing.d.ts.map +0 -1
  784. package/dist/vault/routing.js +0 -13
  785. package/dist/vault/routing.js.map +0 -1
  786. package/dist/web/admin/portal.d.ts +0 -5
  787. package/dist/web/admin/portal.d.ts.map +0 -1
  788. package/dist/web/admin/portal.js +0 -2572
  789. package/dist/web/admin/portal.js.map +0 -1
  790. package/dist/web/admin/provider-models.d.ts.map +0 -1
  791. package/dist/web/admin/provider-models.js.map +0 -1
  792. package/dist/web/admin/store.d.ts +0 -13
  793. package/dist/web/admin/store.d.ts.map +0 -1
  794. package/dist/web/admin/store.js +0 -14
  795. package/dist/web/admin/store.js.map +0 -1
  796. package/dist/web/admin/types.d.ts +0 -30
  797. package/dist/web/admin/types.d.ts.map +0 -1
  798. package/dist/web/admin/types.js.map +0 -1
  799. package/dist/web/agent-events/portal.d.ts +0 -3
  800. package/dist/web/agent-events/portal.d.ts.map +0 -1
  801. package/dist/web/agent-events/portal.js +0 -18
  802. package/dist/web/agent-events/portal.js.map +0 -1
  803. package/dist/web/login/oauth.d.ts +0 -6
  804. package/dist/web/login/oauth.d.ts.map +0 -1
  805. package/dist/web/login/oauth.js.map +0 -1
  806. package/dist/web/login/portal.d.ts.map +0 -1
  807. package/dist/web/login/portal.js.map +0 -1
  808. package/dist/web/login/store.d.ts +0 -8
  809. package/dist/web/login/store.d.ts.map +0 -1
  810. package/dist/web/login/store.js +0 -15
  811. package/dist/web/login/store.js.map +0 -1
  812. package/dist/web/login/types.d.ts.map +0 -1
  813. package/dist/web/login/types.js.map +0 -1
  814. package/dist/web/request.d.ts +0 -3
  815. package/dist/web/request.d.ts.map +0 -1
  816. package/dist/web/request.js +0 -13
  817. package/dist/web/request.js.map +0 -1
  818. package/dist/web/server.d.ts.map +0 -1
  819. package/dist/web/server.js.map +0 -1
  820. package/dist/web/session-view/command.d.ts +0 -4
  821. package/dist/web/session-view/command.d.ts.map +0 -1
  822. package/dist/web/session-view/command.js +0 -7
  823. package/dist/web/session-view/command.js.map +0 -1
  824. package/dist/web/session-view/portal.d.ts +0 -13
  825. package/dist/web/session-view/portal.d.ts.map +0 -1
  826. package/dist/web/session-view/portal.js.map +0 -1
  827. package/dist/web/session-view/service.d.ts +0 -6
  828. package/dist/web/session-view/service.d.ts.map +0 -1
  829. package/dist/web/session-view/service.js +0 -498
  830. package/dist/web/session-view/service.js.map +0 -1
  831. package/dist/web/session-view/store.d.ts +0 -8
  832. package/dist/web/session-view/store.d.ts.map +0 -1
  833. package/dist/web/session-view/store.js +0 -15
  834. package/dist/web/session-view/store.js.map +0 -1
  835. package/dist/web/session-view/types.d.ts.map +0 -1
  836. package/dist/web/session-view/types.js.map +0 -1
  837. package/dist/web/token-store.d.ts.map +0 -1
  838. package/dist/web/token-store.js.map +0 -1
  839. package/dist/web/types.d.ts.map +0 -1
  840. package/dist/web/types.js.map +0 -1
  841. /package/dist/{commands → adapters/commands}/admin.d.ts +0 -0
  842. /package/dist/{commands → adapters/commands}/new.d.ts +0 -0
  843. /package/dist/{commands → adapters/commands}/sandbox.d.ts +0 -0
  844. /package/dist/{commands → adapters/commands}/session-view.d.ts +0 -0
  845. /package/dist/{commands → adapters/commands}/types.js +0 -0
  846. /package/dist/{harness/extensions → adapters/github}/types.js +0 -0
  847. /package/dist/{tools → adapters/web/admin}/types.js +0 -0
  848. /package/dist/{web/admin → adapters/web/login}/types.js +0 -0
  849. /package/dist/{web/login → adapters/web/session-view}/types.js +0 -0
  850. /package/dist/{web → adapters/web}/token-store.d.ts +0 -0
  851. /package/dist/{web → adapters/web}/types.d.ts +0 -0
  852. /package/dist/{web/session-view → adapters/web}/types.js +0 -0
  853. /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
  854. /package/dist/{web → cli}/types.js +0 -0
  855. /package/dist/{adapters/slack → harness}/tools/attach.d.ts +0 -0
  856. /package/dist/{tools → harness/tools}/react.d.ts +0 -0
@@ -1,440 +1,575 @@
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 "../settings/index.js";
15
+ import { ensureDefaultOpenConnector } from "./open-connector.js";
16
+ import { OfficeEventStore } from "../events/index.js";
17
+ import { addLifecycleEvent, updateActiveSpanAttribution } from "../observability/index.js";
18
+ import { ChatHistorySync } from "../sessions/chat-history-sync.js";
19
+ import { conversationIdOf, isThreadSessionKey } from "../sessions/session-key.js";
20
+ import { extractSessionUuid, openManagedSession, } from "../sessions/store.js";
21
+ import { loadMikanSkills } from "./skills.js";
22
+ import { normalizeAttachRuntimePath, withStagedRuntimeFile, buildPromptPayload, buildSystemPrompt, buildTurnInstructions, getMemory, resolveTriggerAttribution, } from "./prompt.js";
23
+ import { attachSessionEventHandlers, activateRunPresentation, createRunState, finalizeRunResponse, isEventTriggerAttribution, reportUsageSummary, } from "./presenter.js";
19
24
  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 });
25
+ // One process-wide fan-out account: per-conversation queues serialize runs,
26
+ // but each run can fan out up to the per-run cap — without this shared
27
+ // ceiling, N busy conversations hold N × cap live subagent sessions.
28
+ const globalSubagentSlots = new SubagentSlotPool(DEFAULT_GLOBAL_SUBAGENT_SLOTS);
29
+ async function createConfiguredAgentSession(params) {
30
+ const { workspaceDir, systemPrompt, model, thinkingLevel, tools, toolContext, sessionStore, models, } = params;
31
+ const loadedProfiles = loadSubagentProfiles(workspaceDir);
32
+ for (const diagnostic of loadedProfiles.diagnostics) {
33
+ log.logWarning(`Subagent profile ignored: ${diagnostic.path}`, diagnostic.message);
34
+ }
35
+ const availableToolNames = new Set(tools.map((tool) => tool.name));
36
+ const runnableProfiles = new Map([...loadedProfiles.profiles].filter(([, profile]) => profile.tools.every((tool) => availableToolNames.has(tool))));
37
+ let session;
38
+ const subagentTool = createSubagentTool((request, hooks) => runSubagent({
39
+ request,
40
+ ...(hooks?.onActivity ? { onActivity: hooks.onActivity } : {}),
41
+ defaultModel: model,
42
+ thinkingLevel,
43
+ models,
44
+ workspaceDir,
45
+ availableTools: tools.filter((tool) => !["start_task", "task_status"].includes(tool.name)),
46
+ profiles: runnableProfiles,
47
+ slots: globalSubagentSlots,
48
+ toolContext,
49
+ parentMessages: [...session.messages],
50
+ onUsage: session.captureExternalUsageSink(),
51
+ }), runnableProfiles);
52
+ session = new MikanAgentSession({
53
+ systemPrompt,
54
+ model,
55
+ thinkingLevel,
56
+ tools: [...tools, adaptAgentTool(subagentTool)],
57
+ toolContext,
58
+ models,
59
+ sessionStore,
39
60
  });
61
+ const reloaded = await session.reloadFromSession();
62
+ if (reloaded > 0)
63
+ log.logInfo(`Reloaded ${reloaded} messages from session context`);
64
+ return session;
40
65
  }
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;
66
+ function createRunnerExecutionContext(sandboxConfig, vaultManager, provisioner, workspace) {
67
+ const executionResolver = vaultManager && sandboxConfig.type !== "host"
68
+ ? new ActorExecutionResolver(sandboxConfig, vaultManager, provisioner, workspace)
69
+ : undefined;
70
+ // activeExecutor is replaced at the start of each run() call when executionResolver
71
+ // is present, so the stable `executor` wrapper always delegates to the latest resolved value.
72
+ let activeExecutor = executionResolver !== undefined
73
+ ? createExecutor({ type: "host" })
74
+ : createExecutor(sandboxConfig);
75
+ const executor = {
76
+ exec(command, options) {
77
+ return activeExecutor.exec(command, options);
78
+ },
79
+ readFile(path, options) {
80
+ return activeExecutor.readFile(path, options);
81
+ },
82
+ readFileBase64(path, options) {
83
+ return activeExecutor.readFileBase64(path, options);
84
+ },
85
+ writeFile(path, content, options) {
86
+ return activeExecutor.writeFile(path, content, options);
87
+ },
88
+ getWorkspacePath(hostPath) {
89
+ return activeExecutor.getWorkspacePath(hostPath);
90
+ },
91
+ getSandboxConfig() {
92
+ return activeExecutor.getSandboxConfig();
93
+ },
94
+ getPathContext(hostWorkspaceRoot) {
95
+ return activeExecutor.getPathContext(hostWorkspaceRoot);
96
+ },
97
+ };
98
+ return {
99
+ executor,
100
+ async resolveForRun(context) {
101
+ if (executionResolver) {
102
+ const decision = await executionResolver.resolve(context);
103
+ activeExecutor = decision.executor;
104
+ return {
105
+ pathContext: decision.pathContext,
106
+ projection: decision.projection,
107
+ };
148
108
  }
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();
168
- }
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
- }
109
+ const office = workspace.office(context.address);
110
+ const projection = resolveWorkspaceProjection(office);
111
+ assertSandboxSupportsWorkspacePolicy(sandboxConfig, projection.visibility, office.key);
112
+ return {
113
+ pathContext: executor.getPathContext(workspace.root),
114
+ projection,
115
+ };
116
+ },
117
+ };
118
+ }
119
+ function buildThreadSessionName(message) {
120
+ const text = message?.text?.trim();
121
+ if (!text)
122
+ return undefined;
123
+ const userLabel = message?.userName || message?.user || "unknown";
124
+ return `[${userLabel}]: ${text}`;
125
+ }
126
+ /**
127
+ * Fill in the deployment's default OpenConnector entry before settings are
128
+ * read, so the runner then sees only ordinary MCP configuration. A failed
129
+ * default is reported and skipped; the office keeps its other servers.
130
+ */
131
+ async function ensureDefaultMcpServers(options) {
132
+ if (options.trustModel === "open-trigger")
133
+ return;
134
+ try {
135
+ await ensureDefaultOpenConnector(options.office, options.platformWorkspaceId, options.openConnector, options.signal);
174
136
  }
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
- }
137
+ catch (error) {
138
+ options.signal?.throwIfAborted();
139
+ log.logWarning(`[${options.office.address.conversationId}] OpenConnector default provisioning failed`, error instanceof Error ? error.message : String(error));
184
140
  }
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
- }
210
- }
141
+ }
142
+ async function preparePromptContext(params) {
143
+ const { message, platform, office, executor, resolveForRun, session } = params;
144
+ const conversationId = office.address.conversationId;
145
+ const decision = await resolveForRun({
146
+ address: message.address,
147
+ userId: message.userId,
148
+ trustModel: platform.trustModel,
149
+ });
150
+ const { pathContext, projection } = decision;
151
+ const reloaded = await session.reloadFromSession();
152
+ if (reloaded > 0) {
153
+ log.logInfo(`[${conversationId}] Reloaded ${reloaded} messages from context`);
211
154
  }
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;
155
+ const memory = await getMemory(projection);
156
+ const conversationSkillLoad = loadMikanSkills(office, pathContext.runtimeWorkspaceRoot, projection);
157
+ const triggerAttribution = resolveTriggerAttribution(message);
158
+ const systemPrompt = buildSystemPrompt({
159
+ workspacePath: pathContext.runtimeWorkspaceRoot,
160
+ office,
161
+ memory,
162
+ sandboxConfig: executor.getSandboxConfig(),
163
+ platform,
164
+ skills: conversationSkillLoad.skills,
165
+ projection,
166
+ skippedSkillLinks: conversationSkillLoad.skippedSkillLinks,
167
+ });
168
+ session.setSystemPrompt(systemPrompt);
169
+ // A stable hash across turns verifies that turn-specific data did not leak
170
+ // into the provider-cacheable system prompt.
171
+ const promptHash = createHash("sha256").update(systemPrompt).digest("hex").slice(0, 8);
172
+ log.logInfo(`[${conversationId}] System prompt (base): ${systemPrompt.length} chars, sha ${promptHash}`);
173
+ return { pathContext, memory, systemPrompt, triggerAttribution };
174
+ }
175
+ function bindRunCapabilities(params, pathContext) {
176
+ const { message, responder, platform, office, executor, setEventContext, setSandboxContext, setUploadFunction, setImageUploadFunction, setReactFunction, bindTasks, bindPlatformToolPacks, } = params;
177
+ setEventContext({
178
+ platform: platform.name,
179
+ conversationId: office.address.conversationId,
180
+ conversationKind: message.conversationKind,
181
+ userId: message.userId,
182
+ });
183
+ setSandboxContext({ address: message.address, userId: message.userId });
184
+ setUploadFunction(async (filePath, title) => {
185
+ const runtimePath = normalizeAttachRuntimePath(filePath, pathContext.runtimeWorkspaceRoot);
186
+ await withStagedRuntimeFile(executor, runtimePath, (stagedPath) => responder.uploadFile(stagedPath, title));
187
+ });
188
+ // Generated images already live host-side and must not be staged through a sandbox.
189
+ setImageUploadFunction(async (hostPath, title) => {
190
+ await responder.uploadFile(hostPath, title);
191
+ });
192
+ // Unset reaction support when the active responder cannot react.
193
+ bindTasks(responder);
194
+ setReactFunction(responder.react ? async (emoji) => responder.react(emoji) : null);
195
+ bindPlatformToolPacks({
196
+ conversationId: office.address.conversationId,
197
+ platformName: platform.name,
198
+ threadTs: message.threadTs,
199
+ });
200
+ }
201
+ async function prepareRunContext(params) {
202
+ const { message, platform, office, executor } = params;
203
+ const sessionConversation = conversationIdOf(message.sessionKey);
204
+ await mkdir(join(office.dir, "scratch"), { recursive: true });
205
+ const { pathContext, memory, systemPrompt, triggerAttribution } = await preparePromptContext(params);
206
+ bindRunCapabilities(params, pathContext);
207
+ log.logInfo(`Context sizes - system: ${systemPrompt.length} chars, memory: ${memory.length} chars`);
208
+ log.logInfo(`Channels: ${platform.channels.length}, Users: ${platform.users.length}`);
209
+ const { userMessage, imageAttachments } = await buildPromptPayload(message, pathContext.runtimeWorkspaceRoot, pathContext, (runtimePath) => executor.readFileBase64(runtimePath));
210
+ const turnInstructions = buildTurnInstructions(message.id.startsWith("event:"), triggerAttribution, platform.name);
211
+ const finalUserMessage = turnInstructions ? `${turnInstructions}\n\n${userMessage}` : userMessage;
212
+ return {
213
+ sessionConversation,
214
+ userMessage: finalUserMessage,
215
+ imageAttachments,
216
+ triggerAttribution,
217
+ };
218
+ }
219
+ async function buildInitialSystemPrompt(params) {
220
+ const { office, pathContext, projection, sandboxConfig } = params;
221
+ const memory = await getMemory(projection);
222
+ const { skills, skippedSkillLinks } = loadMikanSkills(office, pathContext.runtimeWorkspaceRoot, projection);
223
+ return buildSystemPrompt({
224
+ workspacePath: pathContext.runtimeWorkspaceRoot,
225
+ office,
226
+ memory,
227
+ sandboxConfig,
228
+ platform: {
229
+ name: "chat",
230
+ formattingGuide: "",
231
+ channels: [],
232
+ users: [],
233
+ trustModel: "membership",
234
+ },
235
+ skills,
236
+ projection,
237
+ skippedSkillLinks,
238
+ });
239
+ }
240
+ async function rollbackRunnerResource(label, cleanup) {
241
+ try {
242
+ await cleanup();
220
243
  }
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();
244
+ catch (error) {
245
+ log.logWarning(`Runner rollback failed to ${label}`, String(error));
239
246
  }
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`;
247
+ }
248
+ async function openRunnerSessionManager(params) {
249
+ const { contextFile, runtimeWorkspaceRoot, sessionKey, threadRootMessage } = params;
250
+ const sessionManager = await openManagedSession(contextFile, runtimeWorkspaceRoot);
251
+ try {
252
+ const threadSessionName = buildThreadSessionName(threadRootMessage);
253
+ if (isThreadSessionKey(sessionKey) &&
254
+ threadSessionName &&
255
+ (await sessionManager.getSessionName()) !== threadSessionName) {
256
+ await sessionManager.setSessionName(threadSessionName);
253
257
  }
254
- return undefined;
258
+ return sessionManager;
255
259
  }
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;
260
+ catch (error) {
261
+ await rollbackRunnerResource("close the session writer", () => sessionManager.close());
262
+ throw error;
264
263
  }
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);
281
- }
282
- return false;
283
- }
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.",
293
- });
294
- return false;
295
- }
296
- this.overflowRecoveryAttempted = true;
297
- this.dropTrailingErrorMessage();
298
- return this.runCompaction("overflow", true);
264
+ }
265
+ async function createRunnerAgentSession(params) {
266
+ const { workspaceDir, systemPrompt, model, agentConfig, tools, toolContext, sessionManager, modelRegistry, signal, } = params;
267
+ const mcpTools = await sessionManager.connectMcp(agentConfig.mcpServers ?? {}, signal);
268
+ return createConfiguredAgentSession({
269
+ workspaceDir,
270
+ systemPrompt,
271
+ model,
272
+ thinkingLevel: agentConfig.thinkingLevel,
273
+ tools: [...tools, ...mcpTools.map(adaptAgentTool)],
274
+ toolContext,
275
+ sessionStore: sessionManager,
276
+ models: modelRegistry,
277
+ });
278
+ }
279
+ async function runPreparedTurn(params) {
280
+ const { prepared, presentation, message, responder, platform, runState, session, model, agentConfig, sessionUuid, conversationId, contextFile, sessionView, } = params;
281
+ if (runState.logCtx) {
282
+ log.logAgentRunStart(runState.logCtx, model.provider, model.id, model.name);
299
283
  }
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;
284
+ updateActiveSpanAttribution({
285
+ provider: model.provider,
286
+ model: model.id,
287
+ channel_id: prepared.sessionConversation,
288
+ session_id: sessionUuid,
289
+ "mikan.input.message_count": 1,
290
+ "mikan.input.characters": prepared.userMessage.length,
291
+ "mikan.input.attachment_count": message.attachments?.length ?? 0,
292
+ "mikan.input.image_count": prepared.imageAttachments.length,
293
+ "mikan.input.has_text": prepared.userMessage.length > 0,
294
+ });
295
+ addLifecycleEvent("agent.prompt.sent", {
296
+ provider: model.provider,
297
+ model: agentConfig.model,
298
+ channel_id: prepared.sessionConversation,
299
+ session_id: sessionUuid,
300
+ attachment_count: message.attachments?.length ?? 0,
301
+ image_attachment_count: prepared.imageAttachments.length,
302
+ });
303
+ const isEventRun = message.id.startsWith("event:");
304
+ await session.prompt(prepared.userMessage, {
305
+ allowTaskHandoff: responder.startTask !== undefined,
306
+ allowTaskStatus: responder.getTaskStatus !== undefined,
307
+ ...(prepared.imageAttachments.length > 0 ? { images: prepared.imageAttachments } : {}),
308
+ ...(isEventRun ? { budget: DEFAULT_EVENT_BUDGET } : {}),
309
+ });
310
+ await presentation.wait();
311
+ const sessionViewTokenStore = sessionView?.tokenStore;
312
+ const sessionViewPortalBaseUrl = sessionView?.portalBaseUrl;
313
+ let sessionViewLink;
314
+ const createSessionViewLink = sessionViewTokenStore && sessionViewPortalBaseUrl
315
+ ? () => {
316
+ if (!sessionViewLink) {
317
+ const token = sessionViewTokenStore.create({
318
+ platform: platform.name,
319
+ platformUserId: message.userId,
320
+ conversationId,
321
+ sessionKey: message.sessionKey,
322
+ sessionFile: contextFile,
323
+ platformUserName: message.userName,
324
+ });
325
+ sessionViewLink = `${sessionViewPortalBaseUrl}/session?token=${token.token}`;
326
+ }
327
+ return sessionViewLink;
313
328
  }
314
- if (!shouldCompact(contextTokens, contextWindow, settings))
315
- return false;
316
- return this.runCompaction("threshold", false);
329
+ : undefined;
330
+ await finalizeRunResponse(responder, session, runState, {
331
+ initialTask: message.id.startsWith("task:"),
332
+ triggerSessionLink: isEventTriggerAttribution(prepared.triggerAttribution)
333
+ ? createSessionViewLink?.()
334
+ : undefined,
335
+ createOverflowLink: createSessionViewLink,
336
+ platform: platform.name,
337
+ model,
338
+ sessionConversation: prepared.sessionConversation,
339
+ sessionUuid,
340
+ });
341
+ await reportUsageSummary({
342
+ session,
343
+ runState,
344
+ responder,
345
+ platform,
346
+ model,
347
+ agentConfig,
348
+ sessionConversation: prepared.sessionConversation,
349
+ sessionUuid,
350
+ waitForQueue: presentation.wait,
351
+ });
352
+ return { stopReason: runState.stopReason, errorMessage: runState.errorMessage };
353
+ }
354
+ async function steerRun(session, activeMessage, message) {
355
+ if (!activeMessage)
356
+ return false;
357
+ // Claimed by the control path, including rejected/cancelled inputs: history sync
358
+ // must not turn a rejected control into a new instruction on the next run.
359
+ await session.sessionStore.appendCustomEntry("mikan.control_input", { messageId: message.id });
360
+ if (!session.isActiveRun)
361
+ throw new Error("Task is preparing or settling. Please retry this update shortly.");
362
+ if (message.userId !== activeMessage.userId)
363
+ throw new Error("Only the task's current actor can guide this run.");
364
+ if (message.attachments?.length)
365
+ throw new Error("Stop the task before continuing with new attachments.");
366
+ if (!(await session.steer(`[${message.userName ?? message.userId}]: ${message.text}`))) {
367
+ throw new Error("Task settled while receiving this update. Please send it again to continue.");
317
368
  }
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,
369
+ return true;
370
+ }
371
+ function createRunnerInterface(params) {
372
+ const { conversationId, conversationDir, sessionKey, office, sessionUuid, contextFile, sessionView, runState, executor, resolveForRun, session, model, agentConfig, sessionManager, chatSessionManager, toolBindings, } = params;
373
+ let activeMessage;
374
+ let stopped = false;
375
+ return {
376
+ steer: (message) => steerRun(session, activeMessage, message),
377
+ async syncChatHistory(currentMessageId) {
378
+ await chatSessionManager.syncSessionManager({
379
+ conversationDir,
380
+ sessionKey,
381
+ sessionManager,
382
+ currentMessageId,
355
383
  });
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}`,
384
+ },
385
+ async run(message, responder, platform) {
386
+ activeMessage = message;
387
+ stopped = false;
388
+ let presentation;
389
+ try {
390
+ const prepared = await prepareRunContext({
391
+ message,
392
+ responder,
393
+ platform,
394
+ office,
395
+ executor,
396
+ resolveForRun,
397
+ session,
398
+ setEventContext: toolBindings.setEventContext,
399
+ setSandboxContext: toolBindings.setSandboxContext,
400
+ setUploadFunction: toolBindings.setUploadFunction,
401
+ setImageUploadFunction: toolBindings.setImageUploadFunction,
402
+ setReactFunction: toolBindings.setReactFunction,
403
+ bindTasks: toolBindings.bindTasks,
404
+ bindPlatformToolPacks: toolBindings.bindPlatformToolPacks,
405
+ });
406
+ if (stopped)
407
+ return { stopReason: "aborted" };
408
+ presentation = activateRunPresentation(runState, {
409
+ responder,
410
+ sessionConversation: prepared.sessionConversation,
411
+ userName: message.userName,
412
+ sessionUuid,
413
+ triggerAttribution: prepared.triggerAttribution,
414
+ });
415
+ return await runPreparedTurn({
416
+ prepared,
417
+ presentation,
418
+ message,
419
+ responder,
420
+ platform,
421
+ runState,
422
+ session,
423
+ model,
424
+ agentConfig,
425
+ sessionUuid,
426
+ conversationId,
427
+ contextFile,
428
+ sessionView,
372
429
  });
373
430
  }
374
- else {
375
- log.logWarning("Compaction preparation failed", errorMessage);
431
+ finally {
432
+ activeMessage = undefined;
433
+ presentation?.dispose();
376
434
  }
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",
435
+ },
436
+ abort() {
437
+ stopped = true;
438
+ session.abort();
439
+ },
440
+ async dispose() {
441
+ await sessionManager.close();
442
+ },
443
+ getCurrentStep() {
444
+ const first = runState.pendingTools.values().next().value;
445
+ if (!first)
446
+ return undefined;
447
+ return {
448
+ toolName: first.toolName,
449
+ label: first.args?.label,
450
+ };
451
+ },
452
+ };
453
+ }
454
+ async function finishRunnerCreation(params) {
455
+ const { options, conversationId, conversationDir, workspaceDir, executor, resolveForRun, model, modelRegistry, agentConfig, systemPrompt, sessionManager, toolBindings, toolContext, } = params;
456
+ const { sessionKey, office, sessionScope, sessionView } = options;
457
+ const { contextFile } = sessionScope;
458
+ try {
459
+ const sessionUuid = extractSessionUuid(contextFile);
460
+ const chatSessionManager = new ChatHistorySync();
461
+ const session = await createRunnerAgentSession({
462
+ workspaceDir,
463
+ systemPrompt,
464
+ model,
465
+ agentConfig,
466
+ tools: toolBindings.tools,
467
+ toolContext,
468
+ sessionManager,
469
+ modelRegistry,
470
+ conversationId,
471
+ signal: options.signal,
472
+ });
473
+ options.signal?.throwIfAborted();
474
+ const runState = createRunState();
475
+ attachSessionEventHandlers({ session, runState, model, agentConfig });
476
+ return createRunnerInterface({
477
+ conversationId,
478
+ conversationDir,
479
+ sessionKey,
480
+ office,
481
+ sessionUuid,
482
+ contextFile,
483
+ sessionView,
484
+ runState,
485
+ executor,
486
+ resolveForRun,
487
+ session,
488
+ model,
489
+ agentConfig,
490
+ sessionManager,
491
+ chatSessionManager,
492
+ toolBindings,
411
493
  });
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
494
  }
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
- }
495
+ catch (error) {
496
+ await rollbackRunnerResource("close the session writer", () => sessionManager.close());
497
+ throw error;
498
+ }
499
+ }
500
+ export async function createRunner(options) {
501
+ options.signal?.throwIfAborted();
502
+ const { sandboxConfig, sessionKey, office, trustModel, sessionScope, vaultManager, provisioner, resourceController, platformToolPackFactories, } = options;
503
+ const conversationId = office.address.conversationId;
504
+ const conversationDir = office.dir;
505
+ const workspaceDir = office.workspace.root;
506
+ await ensureDefaultMcpServers({
507
+ office,
508
+ trustModel,
509
+ platformWorkspaceId: options.platformWorkspaceId,
510
+ openConnector: options.openConnector,
511
+ signal: options.signal,
512
+ });
513
+ options.signal?.throwIfAborted();
514
+ const resolvedAgentConfig = resolveConversationSettings(office);
515
+ // open-trigger conversations get no MCP tools at all (see ARCHITECTURE.md).
516
+ const agentConfig = {
517
+ ...resolvedAgentConfig,
518
+ mcpServers: trustModel === "open-trigger" ? {} : (resolvedAgentConfig.mcpServers ?? {}),
519
+ };
520
+ const projection = resolveWorkspaceProjection(office);
521
+ // Bootstrap validation fails runner creation early. resolveForRun repeats
522
+ // the check against the actor-specific decision before any provider call.
523
+ assertSandboxSupportsWorkspacePolicy(sandboxConfig, projection.visibility, office.key);
524
+ const { executor, resolveForRun } = createRunnerExecutionContext(sandboxConfig, vaultManager, provisioner, office.workspace);
525
+ const pathContext = getUnresolvedSandboxPathContext(sandboxConfig, workspaceDir);
526
+ // The env wraps the stable executor wrapper, which delegates to the
527
+ // actor-resolved executor per call, so one env serves every run.
528
+ const toolContext = {
529
+ env: createSandboxExecutionEnv(executor, sandboxConfig.type, pathContext.runtimeWorkspaceRoot),
530
+ };
531
+ const modelRegistry = options.models ?? MikanModels.create();
532
+ if (modelRegistry.getError()) {
533
+ log.logWarning("models.json load error", modelRegistry.getError());
438
534
  }
535
+ const model = modelRegistry.resolve(agentConfig.provider, agentConfig.model);
536
+ // Create tools (per-runner, with per-runner upload function setter)
537
+ const toolBindings = createMikanTools(executor, new OfficeEventStore(office, options.eventScheduler), { sandbox: sandboxConfig, resourceController: resourceController ?? provisioner }, platformToolPackFactories ?? [], {
538
+ model,
539
+ getApiKey: () => modelRegistry.getApiKeyForProvider(model.provider),
540
+ // The conversation's own office dir: mounted into the sandbox, unlike
541
+ // the workspace base — generated images must land somewhere the agent
542
+ // (and a future run) can still reach.
543
+ outputDir: conversationDir,
544
+ });
545
+ const systemPrompt = await buildInitialSystemPrompt({
546
+ office,
547
+ pathContext,
548
+ projection,
549
+ sandboxConfig,
550
+ });
551
+ options.signal?.throwIfAborted();
552
+ const { contextFile, threadRootMessage } = sessionScope;
553
+ const sessionManager = await openRunnerSessionManager({
554
+ contextFile,
555
+ runtimeWorkspaceRoot: pathContext.runtimeWorkspaceRoot,
556
+ sessionKey,
557
+ threadRootMessage,
558
+ });
559
+ return finishRunnerCreation({
560
+ options,
561
+ conversationId,
562
+ conversationDir,
563
+ workspaceDir,
564
+ executor,
565
+ resolveForRun,
566
+ model,
567
+ modelRegistry,
568
+ agentConfig,
569
+ systemPrompt,
570
+ sessionManager,
571
+ toolBindings,
572
+ toolContext,
573
+ });
439
574
  }
440
575
  //# sourceMappingURL=runner.js.map