@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,47 +0,0 @@
1
- import type { CompactionSettings } from "@earendil-works/pi-agent-core";
2
- export type { CompactionSettings };
3
- export interface RetrySettings {
4
- enabled: boolean;
5
- maxRetries: number;
6
- baseDelayMs: number;
7
- }
8
- export declare const DEFAULT_RETRY_SETTINGS: RetrySettings;
9
- /**
10
- * Per-run resource ceilings — the harness's external circuit breakers.
11
- *
12
- * An LLM cannot reliably decide on its own when to stop (the halting problem),
13
- * so a runaway run has to be stopped from the outside. When any populated cap
14
- * is exceeded, the run is aborted and a `budget_exceeded` event is emitted.
15
- * Every field is a cap on a single `prompt()` call; an undefined field means
16
- * "no cap on that axis". Interactive runs are gated turn-by-turn by a human,
17
- * so they default to uncapped; autonomous runs (scheduled events, triggers)
18
- * pass {@link DEFAULT_EVENT_BUDGET}, where nobody is watching the loop.
19
- */
20
- export interface BudgetSettings {
21
- /** Max cumulative tokens processed this run (input + output + cache read/write). */
22
- maxTokens?: number;
23
- /** Max cumulative provider cost (USD) this run. Requires a populated model cost table. */
24
- maxCostUsd?: number;
25
- /** Max wall-clock duration for the run, in milliseconds. */
26
- maxDurationMs?: number;
27
- /** Max number of LLM calls (assistant turns) this run. */
28
- maxLlmCalls?: number;
29
- }
30
- /** Interactive runs are human-gated per turn — no automatic ceiling by default. */
31
- export declare const DEFAULT_BUDGET_SETTINGS: BudgetSettings;
32
- /**
33
- * Ceiling for autonomous (event / trigger) runs, where no human is watching
34
- * the loop. Deliberately generous — it is a stop-loss, not a target.
35
- */
36
- export declare const DEFAULT_EVENT_BUDGET: BudgetSettings;
37
- export interface HarnessSettings {
38
- compaction: CompactionSettings;
39
- retry: RetrySettings;
40
- budget: BudgetSettings;
41
- }
42
- export declare function resolveHarnessSettings(overrides?: {
43
- compaction?: Partial<CompactionSettings>;
44
- retry?: Partial<RetrySettings>;
45
- budget?: Partial<BudgetSettings>;
46
- }): HarnessSettings;
47
- //# sourceMappingURL=settings.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/harness/settings.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAExE,YAAY,EAAE,kBAAkB,EAAE,CAAC;AAEnC,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,sBAAsB,EAAE,aAIpC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;IAC7B,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0FAA0F;IAC1F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,mFAAmF;AACnF,eAAO,MAAM,uBAAuB,EAAE,cAAmB,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,cAIlC,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,wBAAgB,sBAAsB,CAAC,SAAS,CAAC,EAAE;IACjD,UAAU,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CAClC,GAAG,eAAe,CAMlB"}
@@ -1,29 +0,0 @@
1
- /**
2
- * Runtime settings for the mikan harness. mikan runs headless, so these are
3
- * plain values with defaults matching the behavior mikan shipped with.
4
- */
5
- import { DEFAULT_COMPACTION_SETTINGS } from "@earendil-works/pi-agent-core";
6
- export const DEFAULT_RETRY_SETTINGS = {
7
- enabled: true,
8
- maxRetries: 3,
9
- baseDelayMs: 2000,
10
- };
11
- /** Interactive runs are human-gated per turn — no automatic ceiling by default. */
12
- export const DEFAULT_BUDGET_SETTINGS = {};
13
- /**
14
- * Ceiling for autonomous (event / trigger) runs, where no human is watching
15
- * the loop. Deliberately generous — it is a stop-loss, not a target.
16
- */
17
- export const DEFAULT_EVENT_BUDGET = {
18
- maxDurationMs: 10 * 60 * 1000,
19
- maxLlmCalls: 50,
20
- maxCostUsd: 2,
21
- };
22
- export function resolveHarnessSettings(overrides) {
23
- return {
24
- compaction: { ...DEFAULT_COMPACTION_SETTINGS, ...overrides?.compaction },
25
- retry: { ...DEFAULT_RETRY_SETTINGS, ...overrides?.retry },
26
- budget: { ...DEFAULT_BUDGET_SETTINGS, ...overrides?.budget },
27
- };
28
- }
29
- //# sourceMappingURL=settings.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/harness/settings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAW5E,MAAM,CAAC,MAAM,sBAAsB,GAAkB;IACnD,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,IAAI;CAClB,CAAC;AAwBF,mFAAmF;AACnF,MAAM,CAAC,MAAM,uBAAuB,GAAmB,EAAE,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAmB;IAClD,aAAa,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;IAC7B,WAAW,EAAE,EAAE;IACf,UAAU,EAAE,CAAC;CACd,CAAC;AAQF,MAAM,UAAU,sBAAsB,CAAC,SAItC;IACC,OAAO;QACL,UAAU,EAAE,EAAE,GAAG,2BAA2B,EAAE,GAAG,SAAS,EAAE,UAAU,EAAE;QACxE,KAAK,EAAE,EAAE,GAAG,sBAAsB,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE;QACzD,MAAM,EAAE,EAAE,GAAG,uBAAuB,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE;KAC7D,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Runtime settings for the mikan harness. mikan runs headless, so these are\n * plain values with defaults matching the behavior mikan shipped with.\n */\nimport { DEFAULT_COMPACTION_SETTINGS } from \"@earendil-works/pi-agent-core\";\nimport type { CompactionSettings } from \"@earendil-works/pi-agent-core\";\n\nexport type { CompactionSettings };\n\nexport interface RetrySettings {\n enabled: boolean;\n maxRetries: number;\n baseDelayMs: number;\n}\n\nexport const DEFAULT_RETRY_SETTINGS: RetrySettings = {\n enabled: true,\n maxRetries: 3,\n baseDelayMs: 2000,\n};\n\n/**\n * Per-run resource ceilings — the harness's external circuit breakers.\n *\n * An LLM cannot reliably decide on its own when to stop (the halting problem),\n * so a runaway run has to be stopped from the outside. When any populated cap\n * is exceeded, the run is aborted and a `budget_exceeded` event is emitted.\n * Every field is a cap on a single `prompt()` call; an undefined field means\n * \"no cap on that axis\". Interactive runs are gated turn-by-turn by a human,\n * so they default to uncapped; autonomous runs (scheduled events, triggers)\n * pass {@link DEFAULT_EVENT_BUDGET}, where nobody is watching the loop.\n */\nexport interface BudgetSettings {\n /** Max cumulative tokens processed this run (input + output + cache read/write). */\n maxTokens?: number;\n /** Max cumulative provider cost (USD) this run. Requires a populated model cost table. */\n maxCostUsd?: number;\n /** Max wall-clock duration for the run, in milliseconds. */\n maxDurationMs?: number;\n /** Max number of LLM calls (assistant turns) this run. */\n maxLlmCalls?: number;\n}\n\n/** Interactive runs are human-gated per turn — no automatic ceiling by default. */\nexport const DEFAULT_BUDGET_SETTINGS: BudgetSettings = {};\n\n/**\n * Ceiling for autonomous (event / trigger) runs, where no human is watching\n * the loop. Deliberately generous — it is a stop-loss, not a target.\n */\nexport const DEFAULT_EVENT_BUDGET: BudgetSettings = {\n maxDurationMs: 10 * 60 * 1000,\n maxLlmCalls: 50,\n maxCostUsd: 2,\n};\n\nexport interface HarnessSettings {\n compaction: CompactionSettings;\n retry: RetrySettings;\n budget: BudgetSettings;\n}\n\nexport function resolveHarnessSettings(overrides?: {\n compaction?: Partial<CompactionSettings>;\n retry?: Partial<RetrySettings>;\n budget?: Partial<BudgetSettings>;\n}): HarnessSettings {\n return {\n compaction: { ...DEFAULT_COMPACTION_SETTINGS, ...overrides?.compaction },\n retry: { ...DEFAULT_RETRY_SETTINGS, ...overrides?.retry },\n budget: { ...DEFAULT_BUDGET_SETTINGS, ...overrides?.budget },\n };\n}\n"]}
@@ -1,4 +0,0 @@
1
- import { type Api, type Model } from "@earendil-works/pi-ai";
2
- import type { MikanModels } from "./harness/index.js";
3
- export declare function resolveConfiguredModel(modelRegistry: MikanModels, provider: string, modelId: string): Model<Api>;
4
- //# sourceMappingURL=model-registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-registry.d.ts","sourceRoot":"","sources":["../src/model-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,WAAW,EAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,KAAK,CAAC,GAAG,CAAC,CAOZ"}
@@ -1,7 +0,0 @@
1
- export function resolveConfiguredModel(modelRegistry, provider, modelId) {
2
- const model = modelRegistry.find(provider, modelId);
3
- if (model)
4
- return model;
5
- throw new Error(`Unknown model "${provider}/${modelId}". Configure it in pi models.json or choose a registered model.`);
6
- }
7
- //# sourceMappingURL=model-registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-registry.js","sourceRoot":"","sources":["../src/model-registry.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,sBAAsB,CACpC,aAA0B,EAC1B,QAAgB,EAChB,OAAe;IAEf,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IAExB,MAAM,IAAI,KAAK,CACb,kBAAkB,QAAQ,IAAI,OAAO,iEAAiE,CACvG,CAAC;AACJ,CAAC","sourcesContent":["import { type Api, type Model } from \"@earendil-works/pi-ai\";\nimport type { MikanModels } from \"./harness/index.js\";\n\nexport function resolveConfiguredModel(\n modelRegistry: MikanModels,\n provider: string,\n modelId: string,\n): Model<Api> {\n const model = modelRegistry.find(provider, modelId);\n if (model) return model;\n\n throw new Error(\n `Unknown model \"${provider}/${modelId}\". Configure it in pi models.json or choose a registered model.`,\n );\n}\n"]}
@@ -1,4 +0,0 @@
1
- export type { PortalShellOptions } from "./types.js";
2
- import type { PortalShellOptions } from "./types.js";
3
- export declare function renderPortalShell(options: PortalShellOptions): string;
4
- //# sourceMappingURL=portal-shell.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"portal-shell.d.ts","sourceRoot":"","sources":["../src/portal-shell.ts"],"names":[],"mappings":"AAcA,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAiFrD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CA8BrE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"portal-shell.js","sourceRoot":"","sources":["../src/portal-shell.ts"],"names":[],"mappings":"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","sourcesContent":["import { escapeHtml } from \"./utils/html.js\";\nimport { PRODUCT_NAME } from \"./platform-messages.js\";\n\n// ── Shared portal shell ────────────────────────────────────────────────────────\n//\n// Three portals (admin / session / vault aka login) share the same chrome:\n// - Fixed left rail with three round icon buttons (admin, session, vault)\n// - Compact topbar (product wordmark + identity + optional conversation switcher)\n// - Main content area\n//\n// Each portal renders its own page-head + body inside <main class=\"shell\">.\n// Sidebar buttons whose target token isn't available are rendered as anchors\n// only when href is provided; otherwise they are buttons in a disabled state.\n\nexport type { PortalShellOptions } from \"./types.js\";\nimport type { PortalShellOptions } from \"./types.js\";\n\ntype PortalView = \"admin\" | \"session\" | \"vault\";\n\nconst NAV_ICONS: Record<PortalView, { label: string; svg: string }> = {\n admin: {\n label: \"Admin\",\n svg: `<svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"3\"/>\n <path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09a1.65 1.65 0 0 0-1-1.51 1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09a1.65 1.65 0 0 0 1.51-1 1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33h.01a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82v.01a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z\"/>\n </svg>`,\n },\n session: {\n label: \"Session\",\n svg: `<svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z\"/>\n </svg>`,\n },\n vault: {\n label: \"Vault\",\n svg: `<svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"/>\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/>\n </svg>`,\n },\n};\n\nfunction renderNav(activeView: PortalView, navLinks: Partial<Record<PortalView, string>>): string {\n const views: PortalView[] = [\"admin\", \"session\", \"vault\"];\n const buttons = views.map((view) => {\n const meta = NAV_ICONS[view];\n const isActive = view === activeView;\n const href = navLinks[view];\n const baseClass = `view-nav-btn${isActive ? \" active\" : \"\"}${!href && !isActive ? \" disabled\" : \"\"}`;\n const attrs = `data-view=\"${view}\" aria-label=\"${escapeHtml(meta.label)}\" data-tooltip=\"${escapeHtml(meta.label)}\"`;\n if (href && !isActive) {\n return `<a class=\"${baseClass}\" href=\"${escapeHtml(href)}\" ${attrs}>${meta.svg}</a>`;\n }\n if (isActive) {\n return `<span class=\"${baseClass}\" aria-current=\"page\" ${attrs}>${meta.svg}</span>`;\n }\n return `<span class=\"${baseClass}\" aria-disabled=\"true\" ${attrs} data-tooltip=\"${escapeHtml(meta.label)} (no token)\">${meta.svg}</span>`;\n });\n return `<nav class=\"floating-view-nav\" aria-label=\"Primary views\">${buttons.join(\"\")}</nav>`;\n}\n\nfunction renderTopbar(options: PortalShellOptions): string {\n const identity = options.identity\n ? `<span class=\"topbar-user\">${escapeHtml(options.identity.primary)}${options.identity.secondary ? ` · ${escapeHtml(options.identity.secondary)}` : \"\"}</span>`\n : \"\";\n\n let switcher = \"\";\n if (options.conversationSwitcher) {\n const { currentId, options: convOptions } = options.conversationSwitcher;\n if (convOptions && convOptions.length > 0) {\n const opts = convOptions\n .map((c) => {\n const label = `${c.label}${c.running ? \" (running)\" : \"\"}`;\n const selected = c.id === currentId ? \" selected\" : \"\";\n return `<option value=\"${escapeHtml(c.id)}\"${selected}>${escapeHtml(label)}</option>`;\n })\n .join(\"\");\n switcher = `<select id=\"conv-switcher\" class=\"conv-inline-select\" aria-label=\"Switch conversation\">${opts}</select>`;\n } else {\n switcher = `<select id=\"conv-switcher\" class=\"conv-inline-select\" aria-label=\"Switch conversation\"><option>${escapeHtml(currentId)}</option></select>`;\n }\n }\n\n return `<header class=\"topbar\">\n <div class=\"topbar-brand\">\n <span class=\"topbar-wordmark\">${PRODUCT_NAME}</span>\n <span class=\"topbar-sep\">·</span>\n <span class=\"topbar-title\">${escapeHtml(options.pageTitle)}</span>\n </div>\n <div class=\"topbar-meta\">\n ${identity}\n ${switcher}\n </div>\n </header>`;\n}\n\nexport function renderPortalShell(options: PortalShellOptions): string {\n const bodyAttrs = Object.entries(options.bodyAttributes ?? {})\n .map(([key, value]) => `${escapeHtml(key)}=\"${escapeHtml(value)}\"`)\n .join(\" \");\n const titleText = `${options.pageTitle} — ${PRODUCT_NAME}`;\n const nav = renderNav(options.activeView, options.navLinks ?? {});\n const topbar = renderTopbar(options);\n const extraStyles = options.extraStyles ? `<style>${options.extraStyles}</style>` : \"\";\n const inlineScript = options.inlineScript ? `<script>${options.inlineScript}</script>` : \"\";\n const extraHead = options.extraHead ?? \"\";\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <title>${escapeHtml(titleText)}</title>\n <style>${portalShellStyles}</style>\n ${extraStyles}\n ${extraHead}\n</head>\n<body${bodyAttrs ? ` ${bodyAttrs}` : \"\"}>\n ${nav}\n <main class=\"shell\">\n ${topbar}\n ${options.body}\n </main>\n ${inlineScript}\n</body>\n</html>`;\n}\n\n// ── Shared stylesheet ──────────────────────────────────────────────────────────\n\nconst portalShellStyles = `\n @import url('https://fonts.googleapis.com/css2?family=Lora:wght@400;600&family=DM+Sans:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap');\n\n :root {\n --bg: #f0ece3;\n --surface: #ffffff;\n --border: rgba(0, 0, 0, 0.08);\n --text: #18181b;\n --muted: #71717a;\n --subtle: #a1a1aa;\n --accent: #d97706;\n\n --ok-bg: #f0fdf4;\n --ok-text: #15803d;\n --ok-border: rgba(21, 128, 61, 0.16);\n --warn-bg: #fffbeb;\n --warn-text: #92400e;\n --err-bg: #fef2f2;\n --err-text: #b91c1c;\n --err-border: rgba(185, 28, 28, 0.14);\n }\n\n *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n body {\n min-height: 100vh;\n padding: 28px 24px 60px;\n display: flex;\n flex-direction: column;\n align-items: center;\n background-color: var(--bg);\n background-image: radial-gradient(ellipse 80% 40% at 50% -10%, rgba(255,255,255,0.65) 0%, transparent 70%);\n color: var(--text);\n font-family: 'DM Sans', 'Segoe UI', system-ui, sans-serif;\n font-size: 15px;\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n }\n\n .shell {\n width: 100%;\n max-width: 960px;\n margin-left: 72px;\n display: flex;\n flex-direction: column;\n gap: 18px;\n }\n\n /* ── Topbar ─────────────────────────────────────────────────────────── */\n\n .topbar {\n display: flex; align-items: center; justify-content: space-between;\n gap: 16px; padding: 10px 18px;\n border: 1px solid var(--border); border-radius: 14px;\n background: rgba(255,255,255,0.7); backdrop-filter: blur(8px);\n }\n .topbar-brand { display: flex; align-items: baseline; gap: 8px; min-width: 0; }\n .topbar-wordmark {\n font-family: 'Lora', Georgia, serif; font-size: 1.05rem; font-weight: 600;\n color: var(--text); letter-spacing: -0.01em;\n }\n .topbar-sep { color: var(--subtle); font-size: 0.9rem; }\n .topbar-title { font-size: 0.86rem; color: var(--muted); font-weight: 500; }\n .topbar-meta {\n display: flex; align-items: center; gap: 12px; min-width: 0; flex-wrap: wrap;\n justify-content: flex-end;\n }\n .topbar-user {\n font-size: 0.8rem; color: var(--muted);\n padding: 4px 10px; border-radius: 999px; background: rgba(0,0,0,0.04);\n white-space: nowrap;\n }\n .conv-inline-select {\n max-width: min(360px, 100%);\n padding: 6px 10px; border: 1px solid var(--border); border-radius: 10px;\n background: #fff; font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 0.76rem;\n color: var(--text); cursor: pointer;\n transition: border-color 120ms;\n }\n .conv-inline-select:hover { border-color: rgba(0,0,0,0.18); }\n .conv-inline-select:focus-visible { outline: 2px solid var(--text); outline-offset: 1px; }\n\n /* ── Floating icon nav ──────────────────────────────────────────────── */\n\n .floating-view-nav {\n position: fixed;\n left: 20px;\n top: 50%;\n transform: translateY(-50%);\n z-index: 20;\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 6px;\n border: 1px solid var(--border);\n border-radius: 999px;\n background: rgba(255,255,255,0.88);\n box-shadow: 0 10px 32px rgba(0,0,0,0.10), 0 2px 6px rgba(0,0,0,0.04);\n backdrop-filter: blur(14px);\n }\n .view-nav-btn {\n position: relative;\n display: flex; align-items: center; justify-content: center;\n width: 40px; height: 40px;\n border: none; border-radius: 999px; background: transparent;\n color: var(--muted); cursor: pointer;\n text-decoration: none;\n transition: background 160ms, color 160ms, transform 160ms;\n }\n .view-nav-btn:hover { background: rgba(0,0,0,0.05); color: var(--text); }\n .view-nav-btn:active { transform: scale(0.94); }\n .view-nav-btn.active {\n background: var(--text); color: #fff;\n box-shadow: 0 2px 8px rgba(0,0,0,0.18);\n cursor: default;\n }\n .view-nav-btn.disabled {\n opacity: 0.4; cursor: not-allowed;\n }\n .view-nav-btn.disabled:hover { background: transparent; color: var(--muted); }\n .view-nav-btn svg { display: block; }\n\n /* Tooltip */\n .view-nav-btn::after {\n content: attr(data-tooltip);\n position: absolute;\n left: calc(100% + 12px);\n top: 50%;\n transform: translateY(-50%) translateX(-4px);\n padding: 5px 10px;\n border-radius: 8px;\n background: var(--text);\n color: #fff;\n font: 500 0.76rem/1 'DM Sans', sans-serif;\n white-space: nowrap;\n opacity: 0;\n pointer-events: none;\n transition: opacity 140ms, transform 140ms;\n box-shadow: 0 4px 12px rgba(0,0,0,0.16);\n }\n .view-nav-btn::before {\n content: '';\n position: absolute;\n left: calc(100% + 6px);\n top: 50%;\n transform: translateY(-50%);\n border: 5px solid transparent;\n border-right-color: var(--text);\n opacity: 0;\n pointer-events: none;\n transition: opacity 140ms;\n }\n .view-nav-btn:hover::after,\n .view-nav-btn:focus-visible::after {\n opacity: 1;\n transform: translateY(-50%) translateX(0);\n }\n .view-nav-btn:hover::before,\n .view-nav-btn:focus-visible::before {\n opacity: 1;\n }\n\n /* ── Generic page-head ───────────────────────────────────────────────── */\n\n .page-head {\n display: flex; justify-content: space-between; align-items: flex-start; gap: 14px;\n padding: 2px 4px;\n }\n .page-title {\n font-family: 'Lora', Georgia, serif;\n font-size: clamp(1.35rem, 2.4vw, 1.6rem);\n font-weight: 600; line-height: 1.2; letter-spacing: -0.01em;\n }\n .page-desc { color: var(--muted); font-size: 0.9rem; margin-top: 4px; }\n .eyebrow {\n color: var(--subtle); font-size: 0.72rem; font-weight: 600;\n letter-spacing: 0.12em; text-transform: uppercase; margin-bottom: 6px;\n }\n\n /* ── Cards ──────────────────────────────────────────────────────────── */\n\n .card {\n padding: 24px 28px;\n border: 1px solid var(--border);\n border-radius: 20px;\n background: var(--surface);\n box-shadow: 0 1px 2px rgba(0,0,0,0.04), 0 4px 16px rgba(0,0,0,0.06);\n }\n .card-title {\n font-family: 'Lora', Georgia, serif;\n font-size: clamp(1.1rem, 2vw, 1.3rem);\n font-weight: 600; line-height: 1.25; letter-spacing: -0.01em;\n margin-bottom: 10px;\n }\n .card-subtitle { font-size: 1rem; font-weight: 650; margin-bottom: 10px; line-height: 1.3; }\n\n code {\n font-family: 'JetBrains Mono', ui-monospace, monospace;\n font-size: 0.82em; padding: 0.14em 0.36em;\n border-radius: 6px; background: rgba(0,0,0,0.05); color: var(--text);\n }\n\n button:focus-visible { outline: 2px solid var(--text); outline-offset: 2px; }\n\n .primary-action-btn {\n padding: 9px 16px;\n border: none; border-radius: 10px;\n background: var(--text); color: #fff;\n font: 500 0.86rem/1.2 'DM Sans', sans-serif;\n cursor: pointer;\n transition: opacity 120ms;\n }\n .primary-action-btn:hover:not(:disabled) { opacity: 0.85; }\n .primary-action-btn:disabled { opacity: 0.5; cursor: wait; }\n\n .loading-msg { color: var(--muted); font-size: 0.9rem; padding: 8px 0; }\n .err-msg {\n padding: 12px 16px; border-radius: 10px;\n background: var(--err-bg); color: var(--err-text);\n border: 1px solid var(--err-border); font-size: 0.88rem;\n }\n .empty-state {\n padding: 18px 8px; text-align: center; color: var(--muted);\n font-size: 0.88rem;\n }\n .inline-result {\n padding: 8px 12px; border-radius: 8px; font-size: 0.82rem; margin-top: 4px;\n }\n .inline-result.ok { background: var(--ok-bg); color: var(--ok-text); border: 1px solid var(--ok-border); }\n .inline-result.err { background: var(--err-bg); color: var(--err-text); border: 1px solid var(--err-border); }\n\n @media (max-width: 900px) {\n .shell { margin-left: 0; }\n .floating-view-nav {\n left: 50%; right: auto; top: auto; bottom: 18px;\n transform: translateX(-50%); flex-direction: row;\n }\n .view-nav-btn::after {\n left: 50%; top: auto; bottom: calc(100% + 10px);\n transform: translateX(-50%) translateY(4px);\n }\n .view-nav-btn::before {\n left: 50%; top: auto; bottom: calc(100% + 4px);\n transform: translateX(-50%);\n border-right-color: transparent;\n border-top-color: var(--text);\n }\n .view-nav-btn:hover::after,\n .view-nav-btn:focus-visible::after { transform: translateX(-50%) translateY(0); }\n }\n\n @media (max-width: 640px) {\n body { padding: 16px 12px 96px; }\n .topbar { padding: 10px 14px; border-radius: 12px; }\n .topbar-meta { gap: 8px; }\n .page-head { padding-inline: 2px; }\n .card { padding: 18px; border-radius: 16px; }\n }\n`;\n"]}
@@ -1,61 +0,0 @@
1
- export type { ContainerMount, DockerContainerManagerOptions, ProvisionOptions, ResourceLimits, SandboxLimitStatus, } from "./types.js";
2
- import type { DockerContainerManagerOptions, ProvisionOptions, ResourceLimits, SandboxLimitStatus } from "./types.js";
3
- export declare class DockerContainerManager {
4
- private readonly image;
5
- private state;
6
- private inflight;
7
- private static readonly MANAGED_LABEL;
8
- private static readonly IMAGE_MODE_LABEL;
9
- private static readonly VAULT_ID_LABEL_KEY;
10
- private static readonly CONVERSATION_ID_LABEL_KEY;
11
- private static readonly MOUNT_SIGNATURE_LABEL_KEY;
12
- private readonly limits?;
13
- private readonly boostLimits?;
14
- private readonly boostedKeys;
15
- private readonly overrideLimits;
16
- private readonly execFileImpl;
17
- constructor(image: string, options?: DockerContainerManagerOptions);
18
- static sanitizeSegment(value: string): string;
19
- static containerName(containerKey: string): string;
20
- static networkName(containerKey: string): string;
21
- provision(containerKey: string, options?: ProvisionOptions): Promise<string>;
22
- private provisionInner;
23
- boost(containerKey: string): Promise<SandboxLimitStatus>;
24
- setLimits(containerKey: string, limits: ResourceLimits): Promise<SandboxLimitStatus>;
25
- getLimitStatus(containerKey: string): SandboxLimitStatus;
26
- getDefaultLimits(): ResourceLimits | undefined;
27
- getBoostLimits(): ResourceLimits | undefined;
28
- stop(containerKey: string): Promise<void>;
29
- remove(containerKey: string): Promise<void>;
30
- stopIdle(maxIdleMs: number): Promise<void>;
31
- reconcile(): Promise<void>;
32
- private setState;
33
- private getContainerName;
34
- private mountArgs;
35
- private toBindSpec;
36
- private runContainer;
37
- private effectiveLimits;
38
- private resourceLimitArgs;
39
- private applyResourceLimits;
40
- private hasRuntimeDrift;
41
- private hasBindMountDrift;
42
- private expectedBinds;
43
- private sameBinds;
44
- private hasMountSignatureDrift;
45
- private mountSignature;
46
- private mountSourceFingerprint;
47
- private inspectBindMounts;
48
- private hasNetworkModeDrift;
49
- private ensureNetwork;
50
- private inspectStatus;
51
- private listContainerNamesByLabel;
52
- private listContainerNamesByPrefix;
53
- private parseNameLines;
54
- private inspectContainerDetails;
55
- private normalizeDockerValue;
56
- private parseDockerTimestamp;
57
- private containerKeyFromContainerName;
58
- private forceRemoveContainer;
59
- private removeLegacyContainer;
60
- }
61
- //# sourceMappingURL=provisioner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provisioner.d.ts","sourceRoot":"","sources":["../src/provisioner.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"provisioner.js","sourceRoot":"","sources":["../src/provisioner.ts"],"names":[],"mappings":"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","sourcesContent":["import { execFile } from \"child_process\";\nimport { createHash } from \"crypto\";\nimport { readFileSync, statSync } from \"fs\";\nimport { promisify } from \"util\";\nimport * as log from \"./log.js\";\nimport { reportUserFacingError } from \"./observability/sentry.js\";\n\nconst execFileAsync = promisify(execFile);\ntype ExecFileAsync = typeof execFileAsync;\n\ntype ContainerStatus = \"running\" | \"stopped\" | \"missing\";\n\nfunction isDockerNotFoundError(err: unknown): boolean {\n if (!err || typeof err !== \"object\") return false;\n const stderr = (err as { stderr?: unknown }).stderr;\n const message = (err as { message?: unknown }).message;\n const haystack = `${typeof stderr === \"string\" ? stderr : \"\"}\\n${\n typeof message === \"string\" ? message : \"\"\n }`.toLowerCase();\n return (\n haystack.includes(\"no such network\") ||\n haystack.includes(\"no such container\") ||\n haystack.includes(\"no such object\") ||\n haystack.includes(\"network not found\") ||\n /network [^\\n]+ not found/.test(haystack) ||\n /error: no such [^\\n]+/.test(haystack)\n );\n}\n\ninterface ContainerState {\n status: ContainerStatus;\n lastUsed: number;\n containerName: string;\n}\n\nexport type {\n ContainerMount,\n DockerContainerManagerOptions,\n ProvisionOptions,\n ResourceLimits,\n SandboxLimitStatus,\n} from \"./types.js\";\nimport type {\n ContainerMount,\n DockerContainerManagerOptions,\n ProvisionOptions,\n ResourceLimits,\n SandboxLimitStatus,\n} from \"./types.js\";\n\nexport class DockerContainerManager {\n private state = new Map<string, ContainerState>();\n private inflight = new Map<string, Promise<string>>();\n private static readonly MANAGED_LABEL = \"mikan.managed=true\";\n private static readonly IMAGE_MODE_LABEL = \"mikan.sandbox=image\";\n private static readonly VAULT_ID_LABEL_KEY = \"mikan.vault-id\";\n private static readonly CONVERSATION_ID_LABEL_KEY = \"mikan.conversation-id\";\n private static readonly MOUNT_SIGNATURE_LABEL_KEY = \"mikan.mount-signature\";\n\n private readonly limits?: ResourceLimits;\n private readonly boostLimits?: ResourceLimits;\n private readonly boostedKeys = new Set<string>();\n private readonly overrideLimits = new Map<string, ResourceLimits>();\n private readonly execFileImpl: ExecFileAsync;\n\n constructor(\n private readonly image: string,\n options: DockerContainerManagerOptions = {},\n ) {\n this.limits = options.limits;\n this.boostLimits = options.boostLimits;\n this.execFileImpl = options.execFileImpl ?? execFileAsync;\n }\n\n static sanitizeSegment(value: string): string {\n const sanitized = value\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n return sanitized || \"unknown\";\n }\n\n static containerName(containerKey: string): string {\n return `mikan-sandbox-${containerKey}`;\n }\n\n static networkName(containerKey: string): string {\n return `mikan-sandbox-net-${containerKey}`;\n }\n\n async provision(containerKey: string, options: ProvisionOptions = {}): Promise<string> {\n const existing = this.inflight.get(containerKey);\n if (existing) return existing;\n\n const pending = this.provisionInner(containerKey, options).finally(() => {\n this.inflight.delete(containerKey);\n });\n this.inflight.set(containerKey, pending);\n return pending;\n }\n\n private async provisionInner(containerKey: string, options: ProvisionOptions): Promise<string> {\n const containerName =\n options.containerName ?? DockerContainerManager.containerName(containerKey);\n const mounts = options.mounts ?? [];\n const status = await this.inspectStatus(containerName);\n\n try {\n if (\n status !== \"missing\" &&\n (await this.hasRuntimeDrift(containerKey, containerName, mounts))\n ) {\n log.logInfo(`Container ${containerName} configuration changed; recreating container`);\n await this.execFileImpl(\"docker\", [\"rm\", \"-f\", containerName]);\n await this.runContainer(containerKey, containerName, mounts, options);\n log.logInfo(`Container ${containerName} recreated`);\n } else if (status === \"running\") {\n log.logInfo(`Container ${containerName} already running`);\n } else if (status === \"stopped\") {\n await this.execFileImpl(\"docker\", [\"start\", containerName]);\n log.logInfo(`Container ${containerName} started`);\n } else {\n await this.runContainer(containerKey, containerName, mounts, options);\n log.logInfo(`Container ${containerName} created`);\n }\n } catch (err) {\n this.state.delete(containerKey);\n throw err;\n }\n\n this.setState(containerKey, \"running\", containerName);\n await this.applyResourceLimits(containerKey, containerName);\n return containerName;\n }\n\n async boost(containerKey: string): Promise<SandboxLimitStatus> {\n if (!this.boostLimits?.cpus && !this.boostLimits?.memory) {\n return this.getLimitStatus(containerKey);\n }\n\n this.overrideLimits.delete(containerKey);\n this.boostedKeys.add(containerKey);\n const state = this.state.get(containerKey);\n if (state?.status === \"running\") {\n await this.applyResourceLimits(containerKey, state.containerName);\n }\n return this.getLimitStatus(containerKey);\n }\n\n async setLimits(containerKey: string, limits: ResourceLimits): Promise<SandboxLimitStatus> {\n this.boostedKeys.delete(containerKey);\n this.overrideLimits.set(containerKey, { ...this.limits, ...limits });\n const state = this.state.get(containerKey);\n if (state?.status === \"running\") {\n await this.applyResourceLimits(containerKey, state.containerName);\n }\n return this.getLimitStatus(containerKey);\n }\n\n getLimitStatus(containerKey: string): SandboxLimitStatus {\n const boosted = this.boostedKeys.has(containerKey);\n return { limits: this.effectiveLimits(containerKey), boosted };\n }\n\n getDefaultLimits(): ResourceLimits | undefined {\n return this.limits;\n }\n\n getBoostLimits(): ResourceLimits | undefined {\n return this.boostLimits;\n }\n\n async stop(containerKey: string): Promise<void> {\n const containerName = this.getContainerName(containerKey);\n try {\n await this.execFileImpl(\"docker\", [\"stop\", containerName]);\n this.setState(containerKey, \"stopped\", containerName);\n this.boostedKeys.delete(containerKey);\n this.overrideLimits.delete(containerKey);\n log.logInfo(`Container ${containerName} stopped (idle)`);\n } catch (err) {\n log.logWarning(\n `Failed to stop container ${containerName}`,\n err instanceof Error ? err.message : String(err),\n );\n }\n }\n\n async remove(containerKey: string): Promise<void> {\n const containerName = this.getContainerName(containerKey);\n const networkName = DockerContainerManager.networkName(containerKey);\n\n await this.forceRemoveContainer(\n containerName,\n `Container ${containerName} removed`,\n `Failed to remove container ${containerName}`,\n );\n\n try {\n await this.execFileImpl(\"docker\", [\"network\", \"rm\", networkName]);\n log.logInfo(`Network ${networkName} removed`);\n } catch (err) {\n log.logWarning(\n `Failed to remove network ${networkName}`,\n err instanceof Error ? err.message : String(err),\n );\n }\n\n this.state.delete(containerKey);\n this.boostedKeys.delete(containerKey);\n this.overrideLimits.delete(containerKey);\n }\n\n async stopIdle(maxIdleMs: number): Promise<void> {\n const now = Date.now();\n const toStop: string[] = [];\n for (const [containerKey, containerState] of this.state) {\n if (containerState.status === \"running\" && now - containerState.lastUsed > maxIdleMs) {\n toStop.push(containerKey);\n }\n }\n await Promise.all(toStop.map((containerKey) => this.stop(containerKey)));\n }\n\n async reconcile(): Promise<void> {\n const discovered = new Set<string>();\n const labeledNames = await this.listContainerNamesByLabel();\n for (const name of labeledNames) discovered.add(name);\n const legacyNames = await this.listContainerNamesByPrefix();\n for (const name of legacyNames) discovered.add(name);\n\n this.state.clear();\n\n const inspected = await Promise.all(\n Array.from(discovered).map(async (containerName) => ({\n containerName,\n details: await this.inspectContainerDetails(containerName),\n })),\n );\n\n const legacyRemovals: Promise<void>[] = [];\n for (const { containerName, details } of inspected) {\n if (!details) continue;\n\n if (!details.conversationId) {\n legacyRemovals.push(this.removeLegacyContainer(containerName));\n continue;\n }\n\n const containerKey = this.containerKeyFromContainerName(containerName);\n if (!containerKey) {\n log.logWarning(`Skipping unmanaged-style container without container key`, containerName);\n continue;\n }\n\n const status: ContainerStatus = details.running ? \"running\" : \"stopped\";\n const lastUsed = details.startedAtMs ?? Date.now();\n this.state.set(containerKey, { status, lastUsed, containerName });\n }\n await Promise.all(legacyRemovals);\n\n const running = Array.from(this.state.values()).filter((s) => s.status === \"running\").length;\n const stopped = this.state.size - running;\n log.logInfo(\n `Reconciled ${this.state.size} managed containers (running=${running}, stopped=${stopped})`,\n );\n }\n\n private setState(containerKey: string, status: ContainerStatus, containerName: string): void {\n this.state.set(containerKey, { status, lastUsed: Date.now(), containerName });\n }\n\n private getContainerName(containerKey: string): string {\n return (\n this.state.get(containerKey)?.containerName ??\n DockerContainerManager.containerName(containerKey)\n );\n }\n\n private mountArgs(mounts: ContainerMount[]): string[] {\n return mounts.flatMap((mount) => [\"-v\", this.toBindSpec(mount)]);\n }\n\n private toBindSpec(mount: ContainerMount): string {\n return `${mount.source}:${mount.target}`;\n }\n\n private async runContainer(\n containerKey: string,\n containerName: string,\n mounts: ContainerMount[],\n options: ProvisionOptions,\n ): Promise<void> {\n const networkName = await this.ensureNetwork(containerKey);\n log.logInfo(`Creating container ${containerName} from image ${this.image}`);\n const labels = [\n \"--label\",\n DockerContainerManager.MANAGED_LABEL,\n \"--label\",\n DockerContainerManager.IMAGE_MODE_LABEL,\n \"--label\",\n `${DockerContainerManager.VAULT_ID_LABEL_KEY}=${containerKey}`,\n ];\n if (options.conversationId) {\n labels.push(\n \"--label\",\n `${DockerContainerManager.CONVERSATION_ID_LABEL_KEY}=${options.conversationId}`,\n );\n }\n if (mounts.length > 0) {\n labels.push(\n \"--label\",\n `${DockerContainerManager.MOUNT_SIGNATURE_LABEL_KEY}=${this.mountSignature(mounts)}`,\n );\n }\n await this.execFileImpl(\"docker\", [\n \"run\",\n \"-d\",\n \"--name\",\n containerName,\n \"--network\",\n networkName,\n \"--cap-drop\",\n \"ALL\",\n \"--security-opt\",\n \"no-new-privileges\",\n \"--pids-limit\",\n \"1024\",\n ...labels,\n ...this.resourceLimitArgs(this.effectiveLimits(containerKey)),\n ...this.mountArgs(mounts),\n this.image,\n \"sleep\",\n \"infinity\",\n ]);\n }\n\n private effectiveLimits(containerKey: string): ResourceLimits | undefined {\n const override = this.overrideLimits.get(containerKey);\n if (override) return override;\n if (!this.boostedKeys.has(containerKey)) return this.limits;\n return { ...this.limits, ...this.boostLimits };\n }\n\n private resourceLimitArgs(limits: ResourceLimits | undefined): string[] {\n const args: string[] = [];\n if (limits?.cpus) args.push(\"--cpus\", limits.cpus);\n if (limits?.memory) {\n args.push(\"--memory\", limits.memory);\n // Keep Docker's no-extra-swap semantics explicit. Docker requires\n // memory-swap to be updated together when raising an existing memory\n // limit above the current swap limit.\n args.push(\"--memory-swap\", limits.memory);\n }\n return args;\n }\n\n private async applyResourceLimits(containerKey: string, containerName: string): Promise<void> {\n const limitArgs = this.resourceLimitArgs(this.effectiveLimits(containerKey));\n if (limitArgs.length === 0) return;\n const args = [\"update\", ...limitArgs, containerName];\n try {\n await this.execFileImpl(\"docker\", args);\n } catch (err) {\n log.logWarning(\n `Failed to apply resource limits to container ${containerName}`,\n err instanceof Error ? err.message : String(err),\n );\n reportUserFacingError(err, {\n domain: \"sandbox\",\n surface: \"sandbox_provision\",\n operation: \"apply_resource_limits\",\n severity: \"warning\",\n context: {\n sandboxType: \"image\",\n containerKey,\n containerName,\n limitArgCount: limitArgs.length,\n fatal: false,\n },\n });\n }\n }\n\n private async hasRuntimeDrift(\n containerKey: string,\n containerName: string,\n mounts: ContainerMount[],\n ): Promise<boolean> {\n if (await this.hasBindMountDrift(containerName, mounts)) {\n return true;\n }\n if (await this.hasMountSignatureDrift(containerName, mounts)) {\n return true;\n }\n return this.hasNetworkModeDrift(containerKey, containerName);\n }\n\n private async hasBindMountDrift(\n containerName: string,\n mounts: ContainerMount[],\n ): Promise<boolean> {\n const expected = this.expectedBinds(mounts);\n const actual = await this.inspectBindMounts(containerName);\n return !this.sameBinds(expected, actual);\n }\n\n private expectedBinds(mounts: ContainerMount[]): string[] {\n return mounts\n .map((mount) => this.toBindSpec(mount))\n .slice()\n .toSorted();\n }\n\n private sameBinds(expected: string[], actual: string[]): boolean {\n if (expected.length !== actual.length) {\n return false;\n }\n\n return expected.every((bind, index) => bind === actual[index]);\n }\n\n private async hasMountSignatureDrift(\n containerName: string,\n mounts: ContainerMount[],\n ): Promise<boolean> {\n if (mounts.length === 0) return false;\n const expected = this.mountSignature(mounts);\n const { stdout } = await this.execFileImpl(\"docker\", [\n \"inspect\",\n \"-f\",\n `{{index .Config.Labels \"${DockerContainerManager.MOUNT_SIGNATURE_LABEL_KEY}\"}}`,\n containerName,\n ]);\n const actual = this.normalizeDockerValue(stdout.trim());\n return actual !== expected;\n }\n\n private mountSignature(mounts: ContainerMount[]): string {\n const payload = mounts\n .map((mount) => ({\n source: mount.source,\n target: mount.target,\n fingerprint: this.mountSourceFingerprint(mount.source),\n }))\n .toSorted((left, right) =>\n `${left.target}\\0${left.source}`.localeCompare(`${right.target}\\0${right.source}`),\n );\n return createHash(\"sha256\").update(JSON.stringify(payload)).digest(\"hex\");\n }\n\n private mountSourceFingerprint(source: string): string {\n try {\n const stat = statSync(source);\n if (stat.isFile()) {\n return createHash(\"sha256\").update(readFileSync(source)).digest(\"hex\");\n }\n return `${stat.isDirectory() ? \"dir\" : \"other\"}:${stat.size}:${stat.mtimeMs}`;\n } catch {\n return \"missing\";\n }\n }\n\n private async inspectBindMounts(containerName: string): Promise<string[]> {\n const { stdout } = await this.execFileImpl(\"docker\", [\n \"inspect\",\n \"-f\",\n \"{{json .HostConfig.Binds}}\",\n containerName,\n ]);\n const payload = stdout.trim();\n const parsed = JSON.parse(payload.length > 0 ? payload : \"null\") as unknown;\n\n if (parsed === null) {\n return [];\n }\n\n if (!Array.isArray(parsed) || parsed.some((bind) => typeof bind !== \"string\")) {\n throw new Error(`Unexpected docker bind mount payload for container \"${containerName}\"`);\n }\n\n return [...parsed].toSorted();\n }\n\n private async hasNetworkModeDrift(containerKey: string, containerName: string): Promise<boolean> {\n const expected = DockerContainerManager.networkName(containerKey);\n const { stdout } = await this.execFileImpl(\"docker\", [\n \"inspect\",\n \"-f\",\n \"{{.HostConfig.NetworkMode}}\",\n containerName,\n ]);\n return stdout.trim() !== expected;\n }\n\n private async ensureNetwork(containerKey: string): Promise<string> {\n const networkName = DockerContainerManager.networkName(containerKey);\n try {\n await this.execFileImpl(\"docker\", [\"network\", \"inspect\", networkName]);\n return networkName;\n } catch (err) {\n if (!isDockerNotFoundError(err)) throw err;\n }\n await this.execFileImpl(\"docker\", [\n \"network\",\n \"create\",\n \"--driver\",\n \"bridge\",\n \"--label\",\n DockerContainerManager.MANAGED_LABEL,\n \"--label\",\n DockerContainerManager.IMAGE_MODE_LABEL,\n \"--label\",\n `${DockerContainerManager.VAULT_ID_LABEL_KEY}=${containerKey}`,\n networkName,\n ]);\n return networkName;\n }\n\n private async inspectStatus(containerName: string): Promise<ContainerStatus> {\n try {\n const { stdout } = await this.execFileImpl(\"docker\", [\n \"inspect\",\n \"-f\",\n \"{{.State.Running}}\",\n containerName,\n ]);\n return stdout.trim() === \"true\" ? \"running\" : \"stopped\";\n } catch (err) {\n if (isDockerNotFoundError(err)) return \"missing\";\n throw err;\n }\n }\n\n private async listContainerNamesByLabel(): Promise<string[]> {\n try {\n const { stdout } = await this.execFileImpl(\"docker\", [\n \"ps\",\n \"-a\",\n \"--filter\",\n `label=${DockerContainerManager.MANAGED_LABEL}`,\n \"--filter\",\n `label=${DockerContainerManager.IMAGE_MODE_LABEL}`,\n \"--format\",\n \"{{.Names}}\",\n ]);\n return this.parseNameLines(stdout);\n } catch (err) {\n log.logWarning(\n \"Failed to list labeled managed containers\",\n err instanceof Error ? err.message : String(err),\n );\n return [];\n }\n }\n\n private async listContainerNamesByPrefix(): Promise<string[]> {\n try {\n const { stdout } = await this.execFileImpl(\"docker\", [\n \"ps\",\n \"-a\",\n \"--filter\",\n `name=${DockerContainerManager.containerName(\"\")}`,\n \"--format\",\n \"{{.Names}}\",\n ]);\n return this.parseNameLines(stdout);\n } catch (err) {\n log.logWarning(\n \"Failed to list legacy managed containers\",\n err instanceof Error ? err.message : String(err),\n );\n return [];\n }\n }\n\n private parseNameLines(stdout: string): string[] {\n return stdout\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n }\n\n private async inspectContainerDetails(\n containerName: string,\n ): Promise<\n | { running: boolean; startedAtMs?: number; vaultId?: string; conversationId?: string }\n | undefined\n > {\n try {\n const { stdout } = await this.execFileImpl(\"docker\", [\n \"inspect\",\n \"-f\",\n `{{.State.Running}}\\t{{.State.StartedAt}}\\t{{index .Config.Labels \"${DockerContainerManager.VAULT_ID_LABEL_KEY}\"}}\\t{{index .Config.Labels \"${DockerContainerManager.CONVERSATION_ID_LABEL_KEY}\"}}`,\n containerName,\n ]);\n const [runningRaw, startedAtRaw, vaultIdRaw, conversationIdRaw] = stdout.trim().split(\"\\t\");\n const running = runningRaw === \"true\";\n const startedAtMs = this.parseDockerTimestamp(startedAtRaw);\n const vaultId = this.normalizeDockerValue(vaultIdRaw);\n const conversationId = this.normalizeDockerValue(conversationIdRaw);\n return { running, startedAtMs, vaultId, conversationId };\n } catch (err) {\n log.logWarning(\n `Failed to inspect container ${containerName} during reconcile`,\n err instanceof Error ? err.message : String(err),\n );\n return undefined;\n }\n }\n\n private normalizeDockerValue(value?: string): string | undefined {\n if (!value || value === \"<no value>\") return undefined;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n\n private parseDockerTimestamp(value?: string): number | undefined {\n const normalized = this.normalizeDockerValue(value);\n if (!normalized || normalized.startsWith(\"0001-\")) return undefined;\n const parsed = Date.parse(normalized);\n return Number.isNaN(parsed) ? undefined : parsed;\n }\n\n private containerKeyFromContainerName(containerName: string): string | undefined {\n const prefix = DockerContainerManager.containerName(\"\");\n if (!containerName.startsWith(prefix)) return undefined;\n const containerKey = containerName.slice(prefix.length);\n return containerKey.length > 0 ? containerKey : undefined;\n }\n\n private async forceRemoveContainer(\n containerName: string,\n successLog: string,\n failureLog: string,\n ): Promise<void> {\n try {\n await this.execFileImpl(\"docker\", [\"rm\", \"-f\", containerName]);\n log.logInfo(successLog);\n } catch (err) {\n log.logWarning(failureLog, err instanceof Error ? err.message : String(err));\n }\n }\n\n private async removeLegacyContainer(containerName: string): Promise<void> {\n await this.forceRemoveContainer(\n containerName,\n `Removed legacy mikan container ${containerName} (pre-channel-isolation scheme)`,\n `Failed to remove legacy mikan container ${containerName}`,\n );\n }\n}\n"]}
@@ -1,31 +0,0 @@
1
- import type { ConversationKind } from "../adapter.js";
2
- import type { CommandHandler, CommandServices } from "../commands/types.js";
3
- export type { ConversationRuntimeState, RunSessionOptions } from "./types.js";
4
- import type { ConversationRuntimeState, RunSessionOptions } from "./types.js";
5
- interface AgentRunControllerOptions {
6
- workingDir: string;
7
- commandHandlers: readonly CommandHandler[];
8
- commandServices: CommandServices;
9
- isShuttingDown: () => boolean;
10
- getState: (sessionKey: string) => ConversationRuntimeState | undefined;
11
- getOrCreateState: (options: {
12
- conversationId: string;
13
- sessionKey: string;
14
- currentMessageId?: string;
15
- conversationKind?: ConversationKind;
16
- }) => Promise<ConversationRuntimeState>;
17
- hasMaterializedSession: (options: {
18
- conversationDir: string;
19
- sessionKey: string;
20
- }) => boolean;
21
- beforeRunTracked: (runPromise: Promise<void>) => void;
22
- afterRunTracked: (runPromise: Promise<void>) => void;
23
- onRunFinished: () => void;
24
- }
25
- export declare class AgentRunController {
26
- private readonly options;
27
- constructor(options: AgentRunControllerOptions);
28
- runSession({ event, bot, context }: RunSessionOptions): Promise<void>;
29
- private runWithInstrumentation;
30
- }
31
- //# sourceMappingURL=agent-run-controller.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-run-controller.d.ts","sourceRoot":"","sources":["../../src/runtime/agent-run-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,gBAAgB,EAAgB,MAAM,eAAe,CAAC;AAGzF,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAc5E,YAAY,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,KAAK,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE9E,UAAU,yBAAyB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,MAAM,OAAO,CAAC;IAC9B,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,wBAAwB,GAAG,SAAS,CAAC;IACvE,gBAAgB,EAAE,CAAC,OAAO,EAAE;QAC1B,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;KACrC,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACxC,sBAAsB,EAAE,CAAC,OAAO,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC;IAC9F,gBAAgB,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IACtD,eAAe,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IACrD,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAApC,YAA6B,OAAO,EAAE,yBAAyB,EAAI;IAE7D,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6G1E;YAEa,sBAAsB;CAmGrC"}
@@ -1,195 +0,0 @@
1
- import { waitForThreadSessionBootstrap } from "../sessions/agent-memory-file-manager.js";
2
- import { dispatchCommand } from "../commands/registry.js";
3
- import { isPrivateConversation } from "../commands/utils.js";
4
- import * as log from "../log.js";
5
- import { addLifecycleBreadcrumb, applyRunScope, createRunAttributionAttributes, registerTraceAttribution, reportUserFacingError, } from "../observability/sentry.js";
6
- import { formatStopped } from "../platform-messages.js";
7
- import * as Sentry from "@sentry/node";
8
- import { join } from "path";
9
- export class AgentRunController {
10
- constructor(options) {
11
- this.options = options;
12
- }
13
- async runSession({ event, bot, context }) {
14
- const conversationId = event.conversationId;
15
- if (this.options.isShuttingDown()) {
16
- log.logInfo(`[${conversationId}] Rejected event during shutdown: ${event.text.substring(0, 50)}`);
17
- return;
18
- }
19
- const sessionKey = event.sessionKey ?? `${conversationId}:${event.thread_ts ?? event.ts}`;
20
- const privateConversation = isPrivateConversation(event);
21
- const handledCommand = await dispatchCommand(this.options.commandHandlers, {
22
- bot,
23
- responder: context.responder,
24
- platform: context.platform.name,
25
- platformUserId: event.user,
26
- conversationId,
27
- vaultConversationId: event.vaultConversationId,
28
- sessionKey,
29
- commandText: event.text,
30
- privateConversation,
31
- services: this.options.commandServices,
32
- });
33
- if (handledCommand)
34
- return;
35
- const conversationDir = join(this.options.workingDir, conversationId);
36
- const waitedForParent = await waitForThreadSessionBootstrap({
37
- parentSessionKey: conversationId,
38
- sessionKey,
39
- hasThreadSession: () => this.options.hasMaterializedSession({ conversationDir, sessionKey }),
40
- isParentRunning: () => this.options.getState(conversationId)?.running === true,
41
- });
42
- if (waitedForParent) {
43
- log.logInfo(`[${conversationId}] Delayed thread bootstrap until parent session sealed: ${sessionKey}`);
44
- }
45
- let state;
46
- try {
47
- state = await this.options.getOrCreateState({
48
- conversationId,
49
- sessionKey,
50
- currentMessageId: event.ts,
51
- conversationKind: event.conversationKind,
52
- });
53
- state.runner.syncChatHistory(event.ts);
54
- }
55
- catch (err) {
56
- reportUserFacingError(err, {
57
- domain: "mikan",
58
- surface: "session_setup",
59
- operation: "get_or_create_state",
60
- severity: "error",
61
- platform: context.platform.name,
62
- context: {
63
- conversationId,
64
- sessionKey,
65
- messageId: context.message.id,
66
- threadTs: context.message.threadTs,
67
- attachmentCount: context.message.attachments?.length ?? 0,
68
- },
69
- });
70
- throw err;
71
- }
72
- state.running = true;
73
- state.stopRequested = false;
74
- state.startedAt = Date.now();
75
- state.lastActivityAt = Date.now();
76
- log.logInfo(`[${conversationId}] Starting run: ${event.text.substring(0, 50)}`);
77
- const runPromise = (async () => {
78
- try {
79
- const result = await this.runWithInstrumentation(context, { conversationId, sessionKey, startedAt: state.startedAt }, async () => {
80
- await context.responder.setTyping(true);
81
- await context.responder.setWorking(true);
82
- try {
83
- return await state.runner.run(context.message, context.responder, context.platform);
84
- }
85
- finally {
86
- await context.responder.setWorking(false);
87
- }
88
- });
89
- if (result?.stopReason === "aborted" && state.stopRequested) {
90
- if (state.stopMessageTs) {
91
- await bot.updateMessage(conversationId, state.stopMessageTs, formatStopped(bot));
92
- state.stopMessageTs = undefined;
93
- }
94
- else {
95
- await bot.postMessage(conversationId, formatStopped(bot));
96
- }
97
- }
98
- }
99
- finally {
100
- state.running = false;
101
- state.lastAccessedAt = Date.now();
102
- this.options.onRunFinished();
103
- }
104
- })();
105
- this.options.beforeRunTracked(runPromise);
106
- try {
107
- await runPromise;
108
- }
109
- finally {
110
- this.options.afterRunTracked(runPromise);
111
- }
112
- }
113
- async runWithInstrumentation(context, meta, body) {
114
- const { conversationId, sessionKey, startedAt } = meta;
115
- const { message, platform } = context;
116
- const attribution = createRunAttributionAttributes({
117
- conversationId,
118
- sessionKey,
119
- messageId: message.id,
120
- platform: platform.name,
121
- userId: message.userId,
122
- userName: message.userName,
123
- threadTs: message.threadTs,
124
- });
125
- Sentry.metrics.count("agent.run.started", 1, {
126
- attributes: attribution,
127
- });
128
- return Sentry.startSpan({ name: "agent.run", op: "agent", attributes: attribution }, async (span) => Sentry.withScope(async (scope) => {
129
- registerTraceAttribution(span, attribution);
130
- applyRunScope(scope, {
131
- conversationId,
132
- sessionKey,
133
- messageId: message.id,
134
- platform: platform.name,
135
- userId: message.userId,
136
- userName: message.userName,
137
- threadTs: message.threadTs,
138
- });
139
- addLifecycleBreadcrumb("agent.run.started", {
140
- channel_id: conversationId,
141
- platform: platform.name,
142
- has_attachments: (message.attachments?.length ?? 0) > 0,
143
- });
144
- try {
145
- const result = await body();
146
- const durationMs = Date.now() - startedAt;
147
- const completionAttrs = {
148
- ...attribution,
149
- stop_reason: result.stopReason,
150
- };
151
- Sentry.metrics.distribution("agent.run.duration", durationMs, {
152
- unit: "millisecond",
153
- attributes: completionAttrs,
154
- });
155
- Sentry.metrics.count("agent.run.completed", 1, { attributes: completionAttrs });
156
- addLifecycleBreadcrumb("agent.run.completed", {
157
- channel_id: conversationId,
158
- platform: platform.name,
159
- stop_reason: result.stopReason,
160
- duration_ms: durationMs,
161
- });
162
- return result;
163
- }
164
- catch (err) {
165
- scope.setContext("agent_run_error", {
166
- conversationId,
167
- sessionKey,
168
- platform: platform.name,
169
- messageId: message.id,
170
- threadTs: message.threadTs,
171
- });
172
- reportUserFacingError(err, {
173
- domain: "mikan",
174
- surface: "agent_run",
175
- operation: "run",
176
- severity: "error",
177
- platform: platform.name,
178
- context: {
179
- conversationId,
180
- sessionKey,
181
- messageId: message.id,
182
- threadTs: message.threadTs,
183
- attachmentCount: message.attachments?.length ?? 0,
184
- },
185
- });
186
- Sentry.metrics.count("agent.run.errors", 1, {
187
- attributes: attribution,
188
- });
189
- log.logWarning(`[${conversationId}] Run error`, err instanceof Error ? err.message : String(err));
190
- return undefined;
191
- }
192
- }));
193
- }
194
- }
195
- //# sourceMappingURL=agent-run-controller.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-run-controller.js","sourceRoot":"","sources":["../../src/runtime/agent-run-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ConversationContext, ConversationKind, PlatformName } from \"../adapter.js\";\nimport { waitForThreadSessionBootstrap } from \"../sessions/agent-memory-file-manager.js\";\nimport { dispatchCommand } from \"../commands/registry.js\";\nimport type { CommandHandler, CommandServices } from \"../commands/types.js\";\nimport { isPrivateConversation } from \"../commands/utils.js\";\nimport * as log from \"../log.js\";\nimport {\n addLifecycleBreadcrumb,\n applyRunScope,\n createRunAttributionAttributes,\n registerTraceAttribution,\n reportUserFacingError,\n} from \"../observability/sentry.js\";\nimport { formatStopped } from \"../platform-messages.js\";\nimport * as Sentry from \"@sentry/node\";\nimport { join } from \"path\";\n\nexport type { ConversationRuntimeState, RunSessionOptions } from \"./types.js\";\nimport type { ConversationRuntimeState, RunSessionOptions } from \"./types.js\";\n\ninterface AgentRunControllerOptions {\n workingDir: string;\n commandHandlers: readonly CommandHandler[];\n commandServices: CommandServices;\n isShuttingDown: () => boolean;\n getState: (sessionKey: string) => ConversationRuntimeState | undefined;\n getOrCreateState: (options: {\n conversationId: string;\n sessionKey: string;\n currentMessageId?: string;\n conversationKind?: ConversationKind;\n }) => Promise<ConversationRuntimeState>;\n hasMaterializedSession: (options: { conversationDir: string; sessionKey: string }) => boolean;\n beforeRunTracked: (runPromise: Promise<void>) => void;\n afterRunTracked: (runPromise: Promise<void>) => void;\n onRunFinished: () => void;\n}\n\nexport class AgentRunController {\n constructor(private readonly options: AgentRunControllerOptions) {}\n\n async runSession({ event, bot, context }: RunSessionOptions): Promise<void> {\n const conversationId = event.conversationId;\n if (this.options.isShuttingDown()) {\n log.logInfo(\n `[${conversationId}] Rejected event during shutdown: ${event.text.substring(0, 50)}`,\n );\n return;\n }\n\n const sessionKey = event.sessionKey ?? `${conversationId}:${event.thread_ts ?? event.ts}`;\n const privateConversation = isPrivateConversation(event);\n const handledCommand = await dispatchCommand(this.options.commandHandlers, {\n bot,\n responder: context.responder,\n platform: context.platform.name as PlatformName,\n platformUserId: event.user,\n conversationId,\n vaultConversationId: event.vaultConversationId,\n sessionKey,\n commandText: event.text,\n privateConversation,\n services: this.options.commandServices,\n });\n if (handledCommand) return;\n\n const conversationDir = join(this.options.workingDir, conversationId);\n const waitedForParent = await waitForThreadSessionBootstrap({\n parentSessionKey: conversationId,\n sessionKey,\n hasThreadSession: () => this.options.hasMaterializedSession({ conversationDir, sessionKey }),\n isParentRunning: () => this.options.getState(conversationId)?.running === true,\n });\n if (waitedForParent) {\n log.logInfo(\n `[${conversationId}] Delayed thread bootstrap until parent session sealed: ${sessionKey}`,\n );\n }\n\n let state: ConversationRuntimeState;\n try {\n state = await this.options.getOrCreateState({\n conversationId,\n sessionKey,\n currentMessageId: event.ts,\n conversationKind: event.conversationKind,\n });\n state.runner.syncChatHistory(event.ts);\n } catch (err) {\n reportUserFacingError(err, {\n domain: \"mikan\",\n surface: \"session_setup\",\n operation: \"get_or_create_state\",\n severity: \"error\",\n platform: context.platform.name,\n context: {\n conversationId,\n sessionKey,\n messageId: context.message.id,\n threadTs: context.message.threadTs,\n attachmentCount: context.message.attachments?.length ?? 0,\n },\n });\n throw err;\n }\n\n state.running = true;\n state.stopRequested = false;\n state.startedAt = Date.now();\n state.lastActivityAt = Date.now();\n\n log.logInfo(`[${conversationId}] Starting run: ${event.text.substring(0, 50)}`);\n\n const runPromise = (async () => {\n try {\n const result = await this.runWithInstrumentation(\n context,\n { conversationId, sessionKey, startedAt: state.startedAt },\n async () => {\n await context.responder.setTyping(true);\n await context.responder.setWorking(true);\n try {\n return await state.runner.run(context.message, context.responder, context.platform);\n } finally {\n await context.responder.setWorking(false);\n }\n },\n );\n\n if (result?.stopReason === \"aborted\" && state.stopRequested) {\n if (state.stopMessageTs) {\n await bot.updateMessage(conversationId, state.stopMessageTs, formatStopped(bot));\n state.stopMessageTs = undefined;\n } else {\n await bot.postMessage(conversationId, formatStopped(bot));\n }\n }\n } finally {\n state.running = false;\n state.lastAccessedAt = Date.now();\n this.options.onRunFinished();\n }\n })();\n\n this.options.beforeRunTracked(runPromise);\n try {\n await runPromise;\n } finally {\n this.options.afterRunTracked(runPromise);\n }\n }\n\n private async runWithInstrumentation(\n context: ConversationContext,\n meta: {\n conversationId: string;\n sessionKey: string;\n startedAt: number;\n },\n body: () => Promise<{ stopReason: string; errorMessage?: string }>,\n ): Promise<{ stopReason: string; errorMessage?: string } | undefined> {\n const { conversationId, sessionKey, startedAt } = meta;\n const { message, platform } = context;\n\n const attribution = createRunAttributionAttributes({\n conversationId,\n sessionKey,\n messageId: message.id,\n platform: platform.name,\n userId: message.userId,\n userName: message.userName,\n threadTs: message.threadTs,\n });\n\n Sentry.metrics.count(\"agent.run.started\", 1, {\n attributes: attribution,\n });\n\n return Sentry.startSpan(\n { name: \"agent.run\", op: \"agent\", attributes: attribution },\n async (span) =>\n Sentry.withScope(async (scope) => {\n registerTraceAttribution(span, attribution);\n applyRunScope(scope, {\n conversationId,\n sessionKey,\n messageId: message.id,\n platform: platform.name,\n userId: message.userId,\n userName: message.userName,\n threadTs: message.threadTs,\n });\n addLifecycleBreadcrumb(\"agent.run.started\", {\n channel_id: conversationId,\n platform: platform.name,\n has_attachments: (message.attachments?.length ?? 0) > 0,\n });\n\n try {\n const result = await body();\n const durationMs = Date.now() - startedAt;\n const completionAttrs = {\n ...attribution,\n stop_reason: result.stopReason,\n };\n Sentry.metrics.distribution(\"agent.run.duration\", durationMs, {\n unit: \"millisecond\",\n attributes: completionAttrs,\n });\n Sentry.metrics.count(\"agent.run.completed\", 1, { attributes: completionAttrs });\n addLifecycleBreadcrumb(\"agent.run.completed\", {\n channel_id: conversationId,\n platform: platform.name,\n stop_reason: result.stopReason,\n duration_ms: durationMs,\n });\n return result;\n } catch (err) {\n scope.setContext(\"agent_run_error\", {\n conversationId,\n sessionKey,\n platform: platform.name,\n messageId: message.id,\n threadTs: message.threadTs,\n });\n reportUserFacingError(err, {\n domain: \"mikan\",\n surface: \"agent_run\",\n operation: \"run\",\n severity: \"error\",\n platform: platform.name,\n context: {\n conversationId,\n sessionKey,\n messageId: message.id,\n threadTs: message.threadTs,\n attachmentCount: message.attachments?.length ?? 0,\n },\n });\n Sentry.metrics.count(\"agent.run.errors\", 1, {\n attributes: attribution,\n });\n log.logWarning(\n `[${conversationId}] Run error`,\n err instanceof Error ? err.message : String(err),\n );\n return undefined;\n }\n }),\n );\n }\n}\n"]}
@@ -1,6 +0,0 @@
1
- export declare class SandboxError extends Error {
2
- readonly details: string[];
3
- constructor(message: string, details?: string[]);
4
- formatForCli(): string[];
5
- }
6
- //# sourceMappingURL=errors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/sandbox/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAE3B,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,EAI9C;IAED,YAAY,IAAI,MAAM,EAAE,CAEvB;CACF"}