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

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 (799) hide show
  1. package/CHANGELOG.md +948 -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 +96 -27
  127. package/dist/adapters/intake.js.map +1 -1
  128. package/dist/adapters/markdown-tables.d.ts +19 -0
  129. package/dist/adapters/markdown-tables.d.ts.map +1 -0
  130. package/dist/adapters/markdown-tables.js +152 -0
  131. package/dist/adapters/markdown-tables.js.map +1 -0
  132. package/dist/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 +443 -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 +118 -18
  149. package/dist/adapters/slack/bot.d.ts.map +1 -1
  150. package/dist/adapters/slack/bot.js +883 -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/task-status.d.ts +7 -0
  171. package/dist/adapters/slack/task-status.d.ts.map +1 -0
  172. package/dist/adapters/slack/task-status.js +101 -0
  173. package/dist/adapters/slack/task-status.js.map +1 -0
  174. package/dist/adapters/slack/tool-pack.d.ts +11 -0
  175. package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
  176. package/dist/adapters/slack/tool-pack.js +45 -0
  177. package/dist/adapters/slack/tool-pack.js.map +1 -0
  178. package/dist/adapters/slack/tools/blockkit.d.ts +14 -0
  179. package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
  180. package/dist/adapters/slack/tools/blockkit.js +106 -0
  181. package/dist/adapters/slack/tools/blockkit.js.map +1 -0
  182. package/dist/adapters/slack/types.d.ts +73 -2
  183. package/dist/adapters/slack/types.d.ts.map +1 -1
  184. package/dist/adapters/slack/types.js.map +1 -1
  185. package/dist/adapters/slack/update-diagnostics.d.ts +14 -0
  186. package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -0
  187. package/dist/adapters/slack/update-diagnostics.js +134 -0
  188. package/dist/adapters/slack/update-diagnostics.js.map +1 -0
  189. package/dist/adapters/telegram/bot.d.ts +10 -9
  190. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  191. package/dist/adapters/telegram/bot.js +129 -198
  192. package/dist/adapters/telegram/bot.js.map +1 -1
  193. package/dist/adapters/telegram/context.d.ts +2 -6
  194. package/dist/adapters/telegram/context.d.ts.map +1 -1
  195. package/dist/adapters/telegram/context.js +52 -190
  196. package/dist/adapters/telegram/context.js.map +1 -1
  197. package/dist/adapters/types.d.ts +144 -13
  198. package/dist/adapters/types.d.ts.map +1 -1
  199. package/dist/adapters/types.js.map +1 -1
  200. package/dist/adapters/web/admin/portal.d.ts +44 -0
  201. package/dist/adapters/web/admin/portal.d.ts.map +1 -0
  202. package/dist/adapters/web/admin/portal.js +3284 -0
  203. package/dist/adapters/web/admin/portal.js.map +1 -0
  204. package/dist/{web → adapters/web}/admin/provider-models.d.ts +1 -1
  205. package/dist/adapters/web/admin/provider-models.d.ts.map +1 -0
  206. package/dist/{web → adapters/web}/admin/provider-models.js +1 -1
  207. package/dist/adapters/web/admin/provider-models.js.map +1 -0
  208. package/dist/adapters/web/admin/types.d.ts +50 -0
  209. package/dist/adapters/web/admin/types.d.ts.map +1 -0
  210. package/dist/adapters/web/admin/types.js.map +1 -0
  211. package/dist/adapters/web/login/oauth.d.ts +5 -0
  212. package/dist/adapters/web/login/oauth.d.ts.map +1 -0
  213. package/dist/{web → adapters/web}/login/oauth.js +50 -85
  214. package/dist/adapters/web/login/oauth.js.map +1 -0
  215. package/dist/{web → adapters/web}/login/portal.d.ts +9 -3
  216. package/dist/adapters/web/login/portal.d.ts.map +1 -0
  217. package/dist/{web → adapters/web}/login/portal.js +161 -119
  218. package/dist/adapters/web/login/portal.js.map +1 -0
  219. package/dist/{web → adapters/web}/login/types.d.ts +1 -12
  220. package/dist/adapters/web/login/types.d.ts.map +1 -0
  221. package/dist/adapters/web/login/types.js.map +1 -0
  222. package/dist/adapters/web/portal-shell.d.ts +22 -0
  223. package/dist/adapters/web/portal-shell.d.ts.map +1 -0
  224. package/dist/{portal-shell.js → adapters/web/portal-shell.js} +78 -2
  225. package/dist/adapters/web/portal-shell.js.map +1 -0
  226. package/dist/{web → adapters/web}/server.d.ts +11 -8
  227. package/dist/adapters/web/server.d.ts.map +1 -0
  228. package/dist/{web → adapters/web}/server.js +16 -7
  229. package/dist/adapters/web/server.js.map +1 -0
  230. package/dist/adapters/web/session-view/portal.d.ts +20 -0
  231. package/dist/adapters/web/session-view/portal.d.ts.map +1 -0
  232. package/dist/{web → adapters/web}/session-view/portal.js +633 -162
  233. package/dist/adapters/web/session-view/portal.js.map +1 -0
  234. package/dist/{web → adapters/web}/session-view/types.d.ts +11 -6
  235. package/dist/adapters/web/session-view/types.d.ts.map +1 -0
  236. package/dist/adapters/web/session-view/types.js.map +1 -0
  237. package/dist/adapters/web/token-store.d.ts.map +1 -0
  238. package/dist/{web → adapters/web}/token-store.js +1 -1
  239. package/dist/adapters/web/token-store.js.map +1 -0
  240. package/dist/adapters/web/types.d.ts.map +1 -0
  241. package/dist/adapters/web/types.js.map +1 -0
  242. package/dist/cli/arg-grammar.d.ts +11 -0
  243. package/dist/cli/arg-grammar.d.ts.map +1 -0
  244. package/dist/cli/arg-grammar.js +50 -0
  245. package/dist/cli/arg-grammar.js.map +1 -0
  246. package/dist/cli/boot.d.ts +5 -0
  247. package/dist/cli/boot.d.ts.map +1 -0
  248. package/dist/cli/boot.js +90 -0
  249. package/dist/cli/boot.js.map +1 -0
  250. package/dist/cli/download.d.ts.map +1 -0
  251. package/dist/cli/download.js +88 -0
  252. package/dist/cli/download.js.map +1 -0
  253. package/dist/cli/office.d.ts +2 -0
  254. package/dist/cli/office.d.ts.map +1 -0
  255. package/dist/cli/office.js +83 -0
  256. package/dist/cli/office.js.map +1 -0
  257. package/dist/cli/onboard.d.ts +10 -0
  258. package/dist/cli/onboard.d.ts.map +1 -0
  259. package/dist/cli/onboard.js +225 -0
  260. package/dist/cli/onboard.js.map +1 -0
  261. package/dist/cli/sessions.d.ts +2 -0
  262. package/dist/cli/sessions.d.ts.map +1 -0
  263. package/dist/cli/sessions.js +88 -0
  264. package/dist/cli/sessions.js.map +1 -0
  265. package/dist/cli/types.d.ts +25 -0
  266. package/dist/cli/types.d.ts.map +1 -0
  267. package/dist/cli/types.js.map +1 -0
  268. package/dist/config.d.ts +38 -39
  269. package/dist/config.d.ts.map +1 -1
  270. package/dist/config.js +256 -215
  271. package/dist/config.js.map +1 -1
  272. package/dist/dream/index.d.ts +20 -0
  273. package/dist/dream/index.d.ts.map +1 -0
  274. package/dist/dream/index.js +264 -0
  275. package/dist/dream/index.js.map +1 -0
  276. package/dist/dream/types.d.ts +30 -0
  277. package/dist/dream/types.d.ts.map +1 -0
  278. package/dist/dream/types.js +2 -0
  279. package/dist/dream/types.js.map +1 -0
  280. package/dist/env-manifest.d.ts +32 -0
  281. package/dist/env-manifest.d.ts.map +1 -0
  282. package/dist/env-manifest.js +244 -0
  283. package/dist/env-manifest.js.map +1 -0
  284. package/dist/events/index.d.ts +150 -0
  285. package/dist/events/index.d.ts.map +1 -0
  286. package/dist/events/index.js +249 -0
  287. package/dist/events/index.js.map +1 -0
  288. package/dist/{events.d.ts → events/watcher.d.ts} +4 -4
  289. package/dist/events/watcher.d.ts.map +1 -0
  290. package/dist/{events.js → events/watcher.js} +23 -84
  291. package/dist/events/watcher.js.map +1 -0
  292. package/dist/{utils/file-guards.d.ts → file-guards.d.ts} +9 -0
  293. package/dist/file-guards.d.ts.map +1 -0
  294. package/dist/{utils/file-guards.js → file-guards.js} +44 -1
  295. package/dist/file-guards.js.map +1 -0
  296. package/dist/harness/execution-env.d.ts +19 -0
  297. package/dist/harness/execution-env.d.ts.map +1 -0
  298. package/dist/harness/execution-env.js +262 -0
  299. package/dist/harness/execution-env.js.map +1 -0
  300. package/dist/harness/execution-resolver.d.ts +25 -0
  301. package/dist/harness/execution-resolver.d.ts.map +1 -0
  302. package/dist/harness/execution-resolver.js +156 -0
  303. package/dist/harness/execution-resolver.js.map +1 -0
  304. package/dist/harness/index.d.ts +17 -13
  305. package/dist/harness/index.d.ts.map +1 -1
  306. package/dist/harness/index.js +10 -11
  307. package/dist/harness/index.js.map +1 -1
  308. package/dist/harness/mcp.d.ts +38 -0
  309. package/dist/harness/mcp.d.ts.map +1 -0
  310. package/dist/harness/mcp.js +306 -0
  311. package/dist/harness/mcp.js.map +1 -0
  312. package/dist/harness/models.d.ts +7 -4
  313. package/dist/harness/models.d.ts.map +1 -1
  314. package/dist/harness/models.js +54 -55
  315. package/dist/harness/models.js.map +1 -1
  316. package/dist/harness/open-connector.d.ts +14 -0
  317. package/dist/harness/open-connector.d.ts.map +1 -0
  318. package/dist/harness/open-connector.js +204 -0
  319. package/dist/harness/open-connector.js.map +1 -0
  320. package/dist/harness/presenter.d.ts +31 -0
  321. package/dist/harness/presenter.d.ts.map +1 -0
  322. package/dist/harness/presenter.js +832 -0
  323. package/dist/harness/presenter.js.map +1 -0
  324. package/dist/harness/prompt.d.ts +30 -0
  325. package/dist/harness/prompt.d.ts.map +1 -0
  326. package/dist/harness/prompt.js +431 -0
  327. package/dist/harness/prompt.js.map +1 -0
  328. package/dist/harness/runner.d.ts +2 -123
  329. package/dist/harness/runner.d.ts.map +1 -1
  330. package/dist/harness/runner.js +537 -417
  331. package/dist/harness/runner.js.map +1 -1
  332. package/dist/harness/session.d.ts +122 -0
  333. package/dist/harness/session.d.ts.map +1 -0
  334. package/dist/harness/session.js +581 -0
  335. package/dist/harness/session.js.map +1 -0
  336. package/dist/harness/skills.d.ts +17 -28
  337. package/dist/harness/skills.d.ts.map +1 -1
  338. package/dist/harness/skills.js +104 -39
  339. package/dist/harness/skills.js.map +1 -1
  340. package/dist/harness/subagent-profiles.d.ts +8 -0
  341. package/dist/harness/subagent-profiles.d.ts.map +1 -0
  342. package/dist/harness/subagent-profiles.js +284 -0
  343. package/dist/harness/subagent-profiles.js.map +1 -0
  344. package/dist/harness/subagent.d.ts +64 -0
  345. package/dist/harness/subagent.d.ts.map +1 -0
  346. package/dist/harness/subagent.js +687 -0
  347. package/dist/harness/subagent.js.map +1 -0
  348. package/dist/harness/tools/attach.d.ts.map +1 -0
  349. package/dist/{adapters/slack → harness}/tools/attach.js +1 -1
  350. package/dist/harness/tools/attach.js.map +1 -0
  351. package/dist/{tools → harness/tools}/event.d.ts +3 -32
  352. package/dist/harness/tools/event.d.ts.map +1 -0
  353. package/dist/harness/tools/event.js +178 -0
  354. package/dist/harness/tools/event.js.map +1 -0
  355. package/dist/harness/tools/generate-image.d.ts +23 -0
  356. package/dist/harness/tools/generate-image.d.ts.map +1 -0
  357. package/dist/harness/tools/generate-image.js +65 -0
  358. package/dist/harness/tools/generate-image.js.map +1 -0
  359. package/dist/harness/tools/host-fn-tool.d.ts +21 -0
  360. package/dist/harness/tools/host-fn-tool.d.ts.map +1 -0
  361. package/dist/harness/tools/host-fn-tool.js +32 -0
  362. package/dist/harness/tools/host-fn-tool.js.map +1 -0
  363. package/dist/harness/tools/index.d.ts +40 -0
  364. package/dist/harness/tools/index.d.ts.map +1 -0
  365. package/dist/harness/tools/index.js +49 -0
  366. package/dist/harness/tools/index.js.map +1 -0
  367. package/dist/harness/tools/pi-tools.d.ts +18 -0
  368. package/dist/harness/tools/pi-tools.d.ts.map +1 -0
  369. package/dist/harness/tools/pi-tools.js +84 -0
  370. package/dist/harness/tools/pi-tools.js.map +1 -0
  371. package/dist/harness/tools/react.d.ts.map +1 -0
  372. package/dist/{tools → harness/tools}/react.js +6 -17
  373. package/dist/harness/tools/react.js.map +1 -0
  374. package/dist/{tools → harness/tools}/sandbox.d.ts +4 -4
  375. package/dist/harness/tools/sandbox.d.ts.map +1 -0
  376. package/dist/{tools → harness/tools}/sandbox.js +12 -8
  377. package/dist/harness/tools/sandbox.js.map +1 -0
  378. package/dist/harness/tools/subagent.d.ts +88 -0
  379. package/dist/harness/tools/subagent.d.ts.map +1 -0
  380. package/dist/harness/tools/subagent.js +681 -0
  381. package/dist/harness/tools/subagent.js.map +1 -0
  382. package/dist/harness/tools/task.d.ts +20 -0
  383. package/dist/harness/tools/task.d.ts.map +1 -0
  384. package/dist/harness/tools/task.js +79 -0
  385. package/dist/harness/tools/task.js.map +1 -0
  386. package/dist/harness/tools/types.d.ts +29 -0
  387. package/dist/harness/tools/types.d.ts.map +1 -0
  388. package/dist/harness/tools/types.js +2 -0
  389. package/dist/harness/tools/types.js.map +1 -0
  390. package/dist/harness/types.d.ts +384 -25
  391. package/dist/harness/types.d.ts.map +1 -1
  392. package/dist/harness/types.js +1 -1
  393. package/dist/harness/types.js.map +1 -1
  394. package/dist/index.d.ts +33 -9
  395. package/dist/index.d.ts.map +1 -1
  396. package/dist/index.js +19 -6
  397. package/dist/index.js.map +1 -1
  398. package/dist/main.js +344 -188
  399. package/dist/main.js.map +1 -1
  400. package/dist/observability/index.d.ts +33 -0
  401. package/dist/observability/index.d.ts.map +1 -0
  402. package/dist/observability/index.js +257 -0
  403. package/dist/observability/index.js.map +1 -0
  404. package/dist/observability/instrument.js +14 -6
  405. package/dist/observability/instrument.js.map +1 -1
  406. package/dist/observability/otel.d.ts +10 -0
  407. package/dist/observability/otel.d.ts.map +1 -0
  408. package/dist/observability/otel.js +183 -0
  409. package/dist/observability/otel.js.map +1 -0
  410. package/dist/observability/sentry.d.ts +40 -7
  411. package/dist/observability/sentry.d.ts.map +1 -1
  412. package/dist/observability/sentry.js +176 -32
  413. package/dist/observability/sentry.js.map +1 -1
  414. package/dist/observability/types.d.ts +24 -3
  415. package/dist/observability/types.d.ts.map +1 -1
  416. package/dist/observability/types.js.map +1 -1
  417. package/dist/office/index.d.ts +138 -0
  418. package/dist/office/index.d.ts.map +1 -0
  419. package/dist/office/index.js +1084 -0
  420. package/dist/office/index.js.map +1 -0
  421. package/dist/office/projection.d.ts +22 -0
  422. package/dist/office/projection.d.ts.map +1 -0
  423. package/dist/office/projection.js +208 -0
  424. package/dist/office/projection.js.map +1 -0
  425. package/dist/office/types.d.ts +116 -0
  426. package/dist/office/types.d.ts.map +1 -0
  427. package/dist/office/types.js +2 -0
  428. package/dist/office/types.js.map +1 -0
  429. package/dist/platform-messages.d.ts +1 -0
  430. package/dist/platform-messages.d.ts.map +1 -1
  431. package/dist/platform-messages.js +3 -0
  432. package/dist/platform-messages.js.map +1 -1
  433. package/dist/process-lifecycle.d.ts +19 -0
  434. package/dist/process-lifecycle.d.ts.map +1 -0
  435. package/dist/process-lifecycle.js +67 -0
  436. package/dist/process-lifecycle.js.map +1 -0
  437. package/dist/runtime/conversation-runtime.d.ts +1 -1
  438. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  439. package/dist/runtime/conversation-runtime.js +422 -152
  440. package/dist/runtime/conversation-runtime.js.map +1 -1
  441. package/dist/runtime/session-lifecycle.d.ts +76 -0
  442. package/dist/runtime/session-lifecycle.d.ts.map +1 -0
  443. package/dist/runtime/session-lifecycle.js +404 -0
  444. package/dist/runtime/session-lifecycle.js.map +1 -0
  445. package/dist/runtime/types.d.ts +60 -15
  446. package/dist/runtime/types.d.ts.map +1 -1
  447. package/dist/runtime/types.js.map +1 -1
  448. package/dist/sandbox/cloudflare.d.ts +4 -0
  449. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  450. package/dist/sandbox/cloudflare.js +54 -52
  451. package/dist/sandbox/cloudflare.js.map +1 -1
  452. package/dist/sandbox/container.d.ts +3 -0
  453. package/dist/sandbox/container.d.ts.map +1 -1
  454. package/dist/sandbox/container.js +19 -7
  455. package/dist/sandbox/container.js.map +1 -1
  456. package/dist/sandbox/host.d.ts +3 -0
  457. package/dist/sandbox/host.d.ts.map +1 -1
  458. package/dist/sandbox/host.js +44 -35
  459. package/dist/sandbox/host.js.map +1 -1
  460. package/dist/sandbox/identity.d.ts +42 -0
  461. package/dist/sandbox/identity.d.ts.map +1 -0
  462. package/dist/sandbox/identity.js +77 -0
  463. package/dist/sandbox/identity.js.map +1 -0
  464. package/dist/sandbox/index.d.ts +16 -6
  465. package/dist/sandbox/index.d.ts.map +1 -1
  466. package/dist/sandbox/index.js +73 -17
  467. package/dist/sandbox/index.js.map +1 -1
  468. package/dist/sandbox/provisioner.d.ts +121 -0
  469. package/dist/sandbox/provisioner.d.ts.map +1 -0
  470. package/dist/{provisioner.js → sandbox/provisioner.js} +352 -20
  471. package/dist/sandbox/provisioner.js.map +1 -0
  472. package/dist/sandbox/types.d.ts +43 -9
  473. package/dist/sandbox/types.d.ts.map +1 -1
  474. package/dist/sandbox/types.js.map +1 -1
  475. package/dist/sandbox/utils.d.ts +24 -0
  476. package/dist/sandbox/utils.d.ts.map +1 -1
  477. package/dist/sandbox/utils.js +92 -1
  478. package/dist/sandbox/utils.js.map +1 -1
  479. package/dist/sessions/chat-history-sync.d.ts +23 -0
  480. package/dist/sessions/chat-history-sync.d.ts.map +1 -0
  481. package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +239 -175
  482. package/dist/sessions/chat-history-sync.js.map +1 -0
  483. package/dist/sessions/history-line.d.ts +29 -0
  484. package/dist/sessions/history-line.d.ts.map +1 -0
  485. package/dist/sessions/history-line.js +45 -0
  486. package/dist/sessions/history-line.js.map +1 -0
  487. package/dist/sessions/migrate-common.d.ts +43 -0
  488. package/dist/sessions/migrate-common.d.ts.map +1 -0
  489. package/dist/sessions/migrate-common.js +99 -0
  490. package/dist/sessions/migrate-common.js.map +1 -0
  491. package/dist/sessions/migrate-pi-084.d.ts +8 -0
  492. package/dist/sessions/migrate-pi-084.d.ts.map +1 -0
  493. package/dist/sessions/migrate-pi-084.js +302 -0
  494. package/dist/sessions/migrate-pi-084.js.map +1 -0
  495. package/dist/sessions/migrate-v3.d.ts +15 -0
  496. package/dist/sessions/migrate-v3.d.ts.map +1 -0
  497. package/dist/sessions/migrate-v3.js +419 -0
  498. package/dist/sessions/migrate-v3.js.map +1 -0
  499. package/dist/sessions/session-key.d.ts +33 -0
  500. package/dist/sessions/session-key.d.ts.map +1 -0
  501. package/dist/sessions/session-key.js +115 -0
  502. package/dist/sessions/session-key.js.map +1 -0
  503. package/dist/sessions/session-store.d.ts +59 -0
  504. package/dist/sessions/session-store.d.ts.map +1 -0
  505. package/dist/sessions/session-store.js +683 -0
  506. package/dist/sessions/session-store.js.map +1 -0
  507. package/dist/sessions/store.d.ts +17 -10
  508. package/dist/sessions/store.d.ts.map +1 -1
  509. package/dist/sessions/store.js +182 -47
  510. package/dist/sessions/store.js.map +1 -1
  511. package/dist/sessions/types.d.ts +73 -7
  512. package/dist/sessions/types.d.ts.map +1 -1
  513. package/dist/sessions/types.js +1 -1
  514. package/dist/sessions/types.js.map +1 -1
  515. package/dist/settings-mutation.d.ts +40 -0
  516. package/dist/settings-mutation.d.ts.map +1 -0
  517. package/dist/settings-mutation.js +66 -0
  518. package/dist/settings-mutation.js.map +1 -0
  519. package/dist/types.d.ts +350 -140
  520. package/dist/types.d.ts.map +1 -1
  521. package/dist/types.js +2 -2
  522. package/dist/types.js.map +1 -1
  523. package/dist/vault/index.d.ts +52 -2
  524. package/dist/vault/index.d.ts.map +1 -1
  525. package/dist/vault/index.js +218 -86
  526. package/dist/vault/index.js.map +1 -1
  527. package/dist/vault/types.d.ts +6 -2
  528. package/dist/vault/types.d.ts.map +1 -1
  529. package/dist/vault/types.js.map +1 -1
  530. package/package.json +77 -39
  531. package/dist/adapters/slack/tools/attach.d.ts.map +0 -1
  532. package/dist/adapters/slack/tools/attach.js.map +0 -1
  533. package/dist/adapters/streaming.d.ts +0 -18
  534. package/dist/adapters/streaming.d.ts.map +0 -1
  535. package/dist/adapters/streaming.js +0 -44
  536. package/dist/adapters/streaming.js.map +0 -1
  537. package/dist/adapters/telegram/html.d.ts +0 -3
  538. package/dist/adapters/telegram/html.d.ts.map +0 -1
  539. package/dist/adapters/telegram/html.js +0 -98
  540. package/dist/adapters/telegram/html.js.map +0 -1
  541. package/dist/agent-events.d.ts +0 -5
  542. package/dist/agent-events.d.ts.map +0 -1
  543. package/dist/agent-events.js +0 -26
  544. package/dist/agent-events.js.map +0 -1
  545. package/dist/agent.d.ts +0 -39
  546. package/dist/agent.d.ts.map +0 -1
  547. package/dist/agent.js +0 -1291
  548. package/dist/agent.js.map +0 -1
  549. package/dist/commands/admin.d.ts.map +0 -1
  550. package/dist/commands/admin.js.map +0 -1
  551. package/dist/commands/auto-reply.d.ts.map +0 -1
  552. package/dist/commands/auto-reply.js +0 -76
  553. package/dist/commands/auto-reply.js.map +0 -1
  554. package/dist/commands/extensions.d.ts +0 -14
  555. package/dist/commands/extensions.d.ts.map +0 -1
  556. package/dist/commands/extensions.js +0 -55
  557. package/dist/commands/extensions.js.map +0 -1
  558. package/dist/commands/login.d.ts +0 -5
  559. package/dist/commands/login.d.ts.map +0 -1
  560. package/dist/commands/login.js +0 -115
  561. package/dist/commands/login.js.map +0 -1
  562. package/dist/commands/model.d.ts +0 -10
  563. package/dist/commands/model.d.ts.map +0 -1
  564. package/dist/commands/model.js +0 -102
  565. package/dist/commands/model.js.map +0 -1
  566. package/dist/commands/new.d.ts.map +0 -1
  567. package/dist/commands/new.js +0 -25
  568. package/dist/commands/new.js.map +0 -1
  569. package/dist/commands/parse.d.ts +0 -7
  570. package/dist/commands/parse.d.ts.map +0 -1
  571. package/dist/commands/parse.js +0 -14
  572. package/dist/commands/parse.js.map +0 -1
  573. package/dist/commands/registry.d.ts +0 -5
  574. package/dist/commands/registry.d.ts.map +0 -1
  575. package/dist/commands/registry.js +0 -31
  576. package/dist/commands/registry.js.map +0 -1
  577. package/dist/commands/sandbox.d.ts.map +0 -1
  578. package/dist/commands/sandbox.js +0 -78
  579. package/dist/commands/sandbox.js.map +0 -1
  580. package/dist/commands/session-view.d.ts.map +0 -1
  581. package/dist/commands/session-view.js.map +0 -1
  582. package/dist/commands/types.d.ts +0 -66
  583. package/dist/commands/types.d.ts.map +0 -1
  584. package/dist/commands/types.js.map +0 -1
  585. package/dist/commands/utils.d.ts +0 -11
  586. package/dist/commands/utils.d.ts.map +0 -1
  587. package/dist/commands/utils.js.map +0 -1
  588. package/dist/download.d.ts.map +0 -1
  589. package/dist/download.js +0 -89
  590. package/dist/download.js.map +0 -1
  591. package/dist/events.d.ts.map +0 -1
  592. package/dist/events.js.map +0 -1
  593. package/dist/execution-resolver.d.ts +0 -21
  594. package/dist/execution-resolver.d.ts.map +0 -1
  595. package/dist/execution-resolver.js +0 -170
  596. package/dist/execution-resolver.js.map +0 -1
  597. package/dist/harness/auth.d.ts +0 -16
  598. package/dist/harness/auth.d.ts.map +0 -1
  599. package/dist/harness/auth.js +0 -86
  600. package/dist/harness/auth.js.map +0 -1
  601. package/dist/harness/extensions/loader.d.ts +0 -62
  602. package/dist/harness/extensions/loader.d.ts.map +0 -1
  603. package/dist/harness/extensions/loader.js +0 -374
  604. package/dist/harness/extensions/loader.js.map +0 -1
  605. package/dist/harness/extensions/registry.d.ts +0 -23
  606. package/dist/harness/extensions/registry.d.ts.map +0 -1
  607. package/dist/harness/extensions/registry.js +0 -45
  608. package/dist/harness/extensions/registry.js.map +0 -1
  609. package/dist/harness/extensions/types.d.ts +0 -248
  610. package/dist/harness/extensions/types.d.ts.map +0 -1
  611. package/dist/harness/extensions/types.js.map +0 -1
  612. package/dist/harness/session-store.d.ts +0 -77
  613. package/dist/harness/session-store.d.ts.map +0 -1
  614. package/dist/harness/session-store.js +0 -248
  615. package/dist/harness/session-store.js.map +0 -1
  616. package/dist/harness/settings.d.ts +0 -47
  617. package/dist/harness/settings.d.ts.map +0 -1
  618. package/dist/harness/settings.js +0 -29
  619. package/dist/harness/settings.js.map +0 -1
  620. package/dist/model-registry.d.ts +0 -4
  621. package/dist/model-registry.d.ts.map +0 -1
  622. package/dist/model-registry.js +0 -7
  623. package/dist/model-registry.js.map +0 -1
  624. package/dist/portal-shell.d.ts +0 -4
  625. package/dist/portal-shell.d.ts.map +0 -1
  626. package/dist/portal-shell.js.map +0 -1
  627. package/dist/provisioner.d.ts +0 -61
  628. package/dist/provisioner.d.ts.map +0 -1
  629. package/dist/provisioner.js.map +0 -1
  630. package/dist/runtime/agent-run-controller.d.ts +0 -31
  631. package/dist/runtime/agent-run-controller.d.ts.map +0 -1
  632. package/dist/runtime/agent-run-controller.js +0 -195
  633. package/dist/runtime/agent-run-controller.js.map +0 -1
  634. package/dist/sandbox/errors.d.ts +0 -6
  635. package/dist/sandbox/errors.d.ts.map +0 -1
  636. package/dist/sandbox/errors.js +0 -11
  637. package/dist/sandbox/errors.js.map +0 -1
  638. package/dist/sandbox/firecracker.d.ts +0 -15
  639. package/dist/sandbox/firecracker.d.ts.map +0 -1
  640. package/dist/sandbox/firecracker.js +0 -212
  641. package/dist/sandbox/firecracker.js.map +0 -1
  642. package/dist/sandbox/image.d.ts +0 -3
  643. package/dist/sandbox/image.d.ts.map +0 -1
  644. package/dist/sandbox/image.js +0 -27
  645. package/dist/sandbox/image.js.map +0 -1
  646. package/dist/sandbox/path-context.d.ts +0 -3
  647. package/dist/sandbox/path-context.d.ts.map +0 -1
  648. package/dist/sandbox/path-context.js +0 -20
  649. package/dist/sandbox/path-context.js.map +0 -1
  650. package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
  651. package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
  652. package/dist/sessions/agent-memory-file-manager.js.map +0 -1
  653. package/dist/sessions/metadata.d.ts +0 -3
  654. package/dist/sessions/metadata.d.ts.map +0 -1
  655. package/dist/sessions/metadata.js +0 -11
  656. package/dist/sessions/metadata.js.map +0 -1
  657. package/dist/sessions/policy.d.ts +0 -6
  658. package/dist/sessions/policy.d.ts.map +0 -1
  659. package/dist/sessions/policy.js +0 -23
  660. package/dist/sessions/policy.js.map +0 -1
  661. package/dist/store.d.ts +0 -46
  662. package/dist/store.d.ts.map +0 -1
  663. package/dist/store.js +0 -177
  664. package/dist/store.js.map +0 -1
  665. package/dist/tools/bash.d.ts +0 -10
  666. package/dist/tools/bash.d.ts.map +0 -1
  667. package/dist/tools/bash.js +0 -80
  668. package/dist/tools/bash.js.map +0 -1
  669. package/dist/tools/edit.d.ts +0 -11
  670. package/dist/tools/edit.d.ts.map +0 -1
  671. package/dist/tools/edit.js +0 -131
  672. package/dist/tools/edit.js.map +0 -1
  673. package/dist/tools/event.d.ts.map +0 -1
  674. package/dist/tools/event.js +0 -252
  675. package/dist/tools/event.js.map +0 -1
  676. package/dist/tools/index.d.ts +0 -24
  677. package/dist/tools/index.d.ts.map +0 -1
  678. package/dist/tools/index.js +0 -31
  679. package/dist/tools/index.js.map +0 -1
  680. package/dist/tools/react.d.ts.map +0 -1
  681. package/dist/tools/react.js.map +0 -1
  682. package/dist/tools/read.d.ts +0 -11
  683. package/dist/tools/read.d.ts.map +0 -1
  684. package/dist/tools/read.js +0 -134
  685. package/dist/tools/read.js.map +0 -1
  686. package/dist/tools/sandbox.d.ts.map +0 -1
  687. package/dist/tools/sandbox.js.map +0 -1
  688. package/dist/tools/truncate.d.ts +0 -33
  689. package/dist/tools/truncate.d.ts.map +0 -1
  690. package/dist/tools/truncate.js +0 -184
  691. package/dist/tools/truncate.js.map +0 -1
  692. package/dist/tools/types.d.ts +0 -54
  693. package/dist/tools/types.d.ts.map +0 -1
  694. package/dist/tools/types.js.map +0 -1
  695. package/dist/tools/write.d.ts +0 -10
  696. package/dist/tools/write.d.ts.map +0 -1
  697. package/dist/tools/write.js +0 -29
  698. package/dist/tools/write.js.map +0 -1
  699. package/dist/trigger.d.ts +0 -22
  700. package/dist/trigger.d.ts.map +0 -1
  701. package/dist/trigger.js +0 -100
  702. package/dist/trigger.js.map +0 -1
  703. package/dist/utils/date.d.ts +0 -10
  704. package/dist/utils/date.d.ts.map +0 -1
  705. package/dist/utils/date.js +0 -23
  706. package/dist/utils/date.js.map +0 -1
  707. package/dist/utils/env.d.ts +0 -3
  708. package/dist/utils/env.d.ts.map +0 -1
  709. package/dist/utils/env.js +0 -12
  710. package/dist/utils/env.js.map +0 -1
  711. package/dist/utils/file-guards.d.ts.map +0 -1
  712. package/dist/utils/file-guards.js.map +0 -1
  713. package/dist/utils/fs-atomic.d.ts +0 -10
  714. package/dist/utils/fs-atomic.d.ts.map +0 -1
  715. package/dist/utils/fs-atomic.js +0 -45
  716. package/dist/utils/fs-atomic.js.map +0 -1
  717. package/dist/utils/html.d.ts +0 -2
  718. package/dist/utils/html.d.ts.map +0 -1
  719. package/dist/utils/html.js +0 -4
  720. package/dist/utils/html.js.map +0 -1
  721. package/dist/utils/http-body.d.ts +0 -10
  722. package/dist/utils/http-body.d.ts.map +0 -1
  723. package/dist/utils/http-body.js +0 -34
  724. package/dist/utils/http-body.js.map +0 -1
  725. package/dist/vault/routing.d.ts +0 -3
  726. package/dist/vault/routing.d.ts.map +0 -1
  727. package/dist/vault/routing.js +0 -13
  728. package/dist/vault/routing.js.map +0 -1
  729. package/dist/web/admin/portal.d.ts +0 -5
  730. package/dist/web/admin/portal.d.ts.map +0 -1
  731. package/dist/web/admin/portal.js +0 -2572
  732. package/dist/web/admin/portal.js.map +0 -1
  733. package/dist/web/admin/provider-models.d.ts.map +0 -1
  734. package/dist/web/admin/provider-models.js.map +0 -1
  735. package/dist/web/admin/store.d.ts +0 -13
  736. package/dist/web/admin/store.d.ts.map +0 -1
  737. package/dist/web/admin/store.js +0 -14
  738. package/dist/web/admin/store.js.map +0 -1
  739. package/dist/web/admin/types.d.ts +0 -30
  740. package/dist/web/admin/types.d.ts.map +0 -1
  741. package/dist/web/admin/types.js.map +0 -1
  742. package/dist/web/agent-events/portal.d.ts +0 -3
  743. package/dist/web/agent-events/portal.d.ts.map +0 -1
  744. package/dist/web/agent-events/portal.js +0 -18
  745. package/dist/web/agent-events/portal.js.map +0 -1
  746. package/dist/web/login/oauth.d.ts +0 -6
  747. package/dist/web/login/oauth.d.ts.map +0 -1
  748. package/dist/web/login/oauth.js.map +0 -1
  749. package/dist/web/login/portal.d.ts.map +0 -1
  750. package/dist/web/login/portal.js.map +0 -1
  751. package/dist/web/login/store.d.ts +0 -8
  752. package/dist/web/login/store.d.ts.map +0 -1
  753. package/dist/web/login/store.js +0 -15
  754. package/dist/web/login/store.js.map +0 -1
  755. package/dist/web/login/types.d.ts.map +0 -1
  756. package/dist/web/login/types.js.map +0 -1
  757. package/dist/web/request.d.ts +0 -3
  758. package/dist/web/request.d.ts.map +0 -1
  759. package/dist/web/request.js +0 -13
  760. package/dist/web/request.js.map +0 -1
  761. package/dist/web/server.d.ts.map +0 -1
  762. package/dist/web/server.js.map +0 -1
  763. package/dist/web/session-view/command.d.ts +0 -4
  764. package/dist/web/session-view/command.d.ts.map +0 -1
  765. package/dist/web/session-view/command.js +0 -7
  766. package/dist/web/session-view/command.js.map +0 -1
  767. package/dist/web/session-view/portal.d.ts +0 -13
  768. package/dist/web/session-view/portal.d.ts.map +0 -1
  769. package/dist/web/session-view/portal.js.map +0 -1
  770. package/dist/web/session-view/service.d.ts +0 -6
  771. package/dist/web/session-view/service.d.ts.map +0 -1
  772. package/dist/web/session-view/service.js +0 -498
  773. package/dist/web/session-view/service.js.map +0 -1
  774. package/dist/web/session-view/store.d.ts +0 -8
  775. package/dist/web/session-view/store.d.ts.map +0 -1
  776. package/dist/web/session-view/store.js +0 -15
  777. package/dist/web/session-view/store.js.map +0 -1
  778. package/dist/web/session-view/types.d.ts.map +0 -1
  779. package/dist/web/session-view/types.js.map +0 -1
  780. package/dist/web/token-store.d.ts.map +0 -1
  781. package/dist/web/token-store.js.map +0 -1
  782. package/dist/web/types.d.ts.map +0 -1
  783. package/dist/web/types.js.map +0 -1
  784. /package/dist/{commands → adapters/commands}/admin.d.ts +0 -0
  785. /package/dist/{commands → adapters/commands}/new.d.ts +0 -0
  786. /package/dist/{commands → adapters/commands}/sandbox.d.ts +0 -0
  787. /package/dist/{commands → adapters/commands}/session-view.d.ts +0 -0
  788. /package/dist/{commands → adapters/commands}/types.js +0 -0
  789. /package/dist/{harness/extensions → adapters/github}/types.js +0 -0
  790. /package/dist/{tools → adapters/web/admin}/types.js +0 -0
  791. /package/dist/{web/admin → adapters/web/login}/types.js +0 -0
  792. /package/dist/{web/login → adapters/web/session-view}/types.js +0 -0
  793. /package/dist/{web → adapters/web}/token-store.d.ts +0 -0
  794. /package/dist/{web → adapters/web}/types.d.ts +0 -0
  795. /package/dist/{web/session-view → adapters/web}/types.js +0 -0
  796. /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
  797. /package/dist/{web → cli}/types.js +0 -0
  798. /package/dist/{adapters/slack → harness}/tools/attach.d.ts +0 -0
  799. /package/dist/{tools → harness/tools}/react.d.ts +0 -0
@@ -1,10 +0,0 @@
1
- import type { MikanModels } from "../harness/index.js";
2
- import type { CommandContext, CommandHandler, ParsedModelCommand } from "./types.js";
3
- export type { ParsedModelCommand } from "./types.js";
4
- export declare function parseModelCommand(text: string): ParsedModelCommand | null;
5
- export declare class ModelCommandHandler implements CommandHandler {
6
- private readonly modelRegistry;
7
- constructor(modelRegistry: MikanModels);
8
- tryHandle(context: CommandContext): Promise<boolean>;
9
- }
10
- //# sourceMappingURL=model.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/commands/model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAYrF,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIrD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAsBzE;AA0BD,qBAAa,mBAAoB,YAAW,cAAc;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa;IAA1C,YAA6B,aAAa,EAAE,WAAW,EAAI;IACrD,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CA0EzD;CACF"}
@@ -1,102 +0,0 @@
1
- import { join } from "path";
2
- import { resolveConversationSettings, updateConversationSettings } from "../config.js";
3
- import { matchCommand } from "./parse.js";
4
- import { formatCommandSummary, replyDiagnosticWithContext } from "./utils.js";
5
- const PI_AI_THINKING_LEVELS = [
6
- "minimal",
7
- "low",
8
- "medium",
9
- "high",
10
- "xhigh",
11
- ];
12
- const THINKING_LEVELS = new Set(["off", ...PI_AI_THINKING_LEVELS]);
13
- const MODEL_COMMANDS = ["/model", "/pi-model"];
14
- export function parseModelCommand(text) {
15
- const matched = matchCommand(text, MODEL_COMMANDS);
16
- if (!matched)
17
- return null;
18
- if (matched.args.length === 0) {
19
- return {};
20
- }
21
- const spec = matched.args[0];
22
- const slash = spec.indexOf("/");
23
- if (slash <= 0 || slash === spec.length - 1) {
24
- return {};
25
- }
26
- const modelSpec = spec.slice(slash + 1);
27
- const parsedModel = parseModelThinkingLevel(modelSpec);
28
- return {
29
- provider: spec.slice(0, slash),
30
- model: parsedModel.model,
31
- thinkingLevel: parsedModel.thinkingLevel,
32
- };
33
- }
34
- function parseModelThinkingLevel(modelSpec) {
35
- const colon = modelSpec.lastIndexOf(":");
36
- if (colon <= 0 || colon === modelSpec.length - 1) {
37
- return { model: modelSpec };
38
- }
39
- const suffix = modelSpec.slice(colon + 1);
40
- if (!THINKING_LEVELS.has(suffix)) {
41
- return { model: modelSpec };
42
- }
43
- return {
44
- model: modelSpec.slice(0, colon),
45
- thinkingLevel: suffix,
46
- };
47
- }
48
- function formatModelSpec(provider, model, thinkingLevel) {
49
- return `${provider}/${model}${thinkingLevel ? `:${thinkingLevel}` : ""}`;
50
- }
51
- export class ModelCommandHandler {
52
- constructor(modelRegistry) {
53
- this.modelRegistry = modelRegistry;
54
- }
55
- async tryHandle(context) {
56
- const parsed = parseModelCommand(context.commandText);
57
- if (!parsed)
58
- return false;
59
- const conversationDir = join(context.services.workingDir, context.conversationId);
60
- if (!parsed.provider || !parsed.model) {
61
- const current = resolveConversationSettings(conversationDir);
62
- await replyDiagnosticWithContext(context.responder, formatCommandSummary("Model", [
63
- `Current: \`${formatModelSpec(current.provider, current.model, current.thinkingLevel)}\``,
64
- "",
65
- "Usage: `/pi-model provider/model[:thinking]`",
66
- "Example: `/pi-model anthropic/claude-sonnet-4-6:off`",
67
- ]), { style: "muted" });
68
- return true;
69
- }
70
- if (!this.modelRegistry.find(parsed.provider, parsed.model)) {
71
- await replyDiagnosticWithContext(context.responder, formatCommandSummary("Model", [
72
- `找不到模型:\`${formatModelSpec(parsed.provider, parsed.model, parsed.thinkingLevel)}\``,
73
- "請確認 provider/model 名稱,或先在 pi models.json 註冊自訂模型。",
74
- ]), { style: "muted" });
75
- return true;
76
- }
77
- if (!context.services.runtime) {
78
- await replyDiagnosticWithContext(context.responder, formatCommandSummary("Model", [
79
- "Model command is not configured correctly on the server. Please try again later.",
80
- ]), { style: "muted" });
81
- return true;
82
- }
83
- const switched = context.services.runtime.switchConversationModel(context.conversationId, parsed.provider, parsed.model);
84
- if (!switched) {
85
- await replyDiagnosticWithContext(context.responder, formatCommandSummary("Model", [
86
- "目前這個 conversation 有執行中的工作,請等它完成或先 `/stop` 後再切換模型。",
87
- ]), { style: "muted" });
88
- return true;
89
- }
90
- updateConversationSettings(conversationDir, {
91
- provider: parsed.provider,
92
- model: parsed.model,
93
- ...(parsed.thinkingLevel ? { thinkingLevel: parsed.thinkingLevel } : {}),
94
- });
95
- await replyDiagnosticWithContext(context.responder, formatCommandSummary("Model", [
96
- `Switched: \`${formatModelSpec(parsed.provider, parsed.model, parsed.thinkingLevel)}\``,
97
- "下一則訊息會使用新模型。",
98
- ]), { style: "muted" });
99
- return true;
100
- }
101
- }
102
- //# sourceMappingURL=model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/commands/model.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { ThinkingLevel as PiAiThinkingLevel } from \"@earendil-works/pi-ai\";\nimport type { MikanModels } from \"../harness/index.js\";\nimport { join } from \"path\";\nimport { resolveConversationSettings, updateConversationSettings } from \"../config.js\";\nimport { matchCommand } from \"./parse.js\";\nimport type { CommandContext, CommandHandler, ParsedModelCommand } from \"./types.js\";\nimport { formatCommandSummary, replyDiagnosticWithContext } from \"./utils.js\";\n\nconst PI_AI_THINKING_LEVELS = [\n \"minimal\",\n \"low\",\n \"medium\",\n \"high\",\n \"xhigh\",\n] satisfies PiAiThinkingLevel[];\nconst THINKING_LEVELS = new Set<ThinkingLevel>([\"off\", ...PI_AI_THINKING_LEVELS]);\n\nexport type { ParsedModelCommand } from \"./types.js\";\n\nconst MODEL_COMMANDS = [\"/model\", \"/pi-model\"] as const;\n\nexport function parseModelCommand(text: string): ParsedModelCommand | null {\n const matched = matchCommand(text, MODEL_COMMANDS);\n if (!matched) return null;\n\n if (matched.args.length === 0) {\n return {};\n }\n\n const spec = matched.args[0];\n const slash = spec.indexOf(\"/\");\n if (slash <= 0 || slash === spec.length - 1) {\n return {};\n }\n\n const modelSpec = spec.slice(slash + 1);\n const parsedModel = parseModelThinkingLevel(modelSpec);\n\n return {\n provider: spec.slice(0, slash),\n model: parsedModel.model,\n thinkingLevel: parsedModel.thinkingLevel,\n };\n}\n\nfunction parseModelThinkingLevel(modelSpec: string): {\n model: string;\n thinkingLevel?: ThinkingLevel;\n} {\n const colon = modelSpec.lastIndexOf(\":\");\n if (colon <= 0 || colon === modelSpec.length - 1) {\n return { model: modelSpec };\n }\n\n const suffix = modelSpec.slice(colon + 1);\n if (!THINKING_LEVELS.has(suffix as ThinkingLevel)) {\n return { model: modelSpec };\n }\n\n return {\n model: modelSpec.slice(0, colon),\n thinkingLevel: suffix as ThinkingLevel,\n };\n}\n\nfunction formatModelSpec(provider: string, model: string, thinkingLevel?: ThinkingLevel): string {\n return `${provider}/${model}${thinkingLevel ? `:${thinkingLevel}` : \"\"}`;\n}\n\nexport class ModelCommandHandler implements CommandHandler {\n constructor(private readonly modelRegistry: MikanModels) {}\n async tryHandle(context: CommandContext): Promise<boolean> {\n const parsed = parseModelCommand(context.commandText);\n if (!parsed) return false;\n\n const conversationDir = join(context.services.workingDir, context.conversationId);\n if (!parsed.provider || !parsed.model) {\n const current = resolveConversationSettings(conversationDir);\n await replyDiagnosticWithContext(\n context.responder,\n formatCommandSummary(\"Model\", [\n `Current: \\`${formatModelSpec(current.provider, current.model, current.thinkingLevel)}\\``,\n \"\",\n \"Usage: `/pi-model provider/model[:thinking]`\",\n \"Example: `/pi-model anthropic/claude-sonnet-4-6:off`\",\n ]),\n { style: \"muted\" },\n );\n return true;\n }\n\n if (!this.modelRegistry.find(parsed.provider, parsed.model)) {\n await replyDiagnosticWithContext(\n context.responder,\n formatCommandSummary(\"Model\", [\n `找不到模型:\\`${formatModelSpec(parsed.provider, parsed.model, parsed.thinkingLevel)}\\``,\n \"請確認 provider/model 名稱,或先在 pi models.json 註冊自訂模型。\",\n ]),\n { style: \"muted\" },\n );\n return true;\n }\n\n if (!context.services.runtime) {\n await replyDiagnosticWithContext(\n context.responder,\n formatCommandSummary(\"Model\", [\n \"Model command is not configured correctly on the server. Please try again later.\",\n ]),\n { style: \"muted\" },\n );\n return true;\n }\n\n const switched = context.services.runtime.switchConversationModel(\n context.conversationId,\n parsed.provider,\n parsed.model,\n );\n if (!switched) {\n await replyDiagnosticWithContext(\n context.responder,\n formatCommandSummary(\"Model\", [\n \"目前這個 conversation 有執行中的工作,請等它完成或先 `/stop` 後再切換模型。\",\n ]),\n { style: \"muted\" },\n );\n return true;\n }\n\n updateConversationSettings(conversationDir, {\n provider: parsed.provider,\n model: parsed.model,\n ...(parsed.thinkingLevel ? { thinkingLevel: parsed.thinkingLevel } : {}),\n });\n\n await replyDiagnosticWithContext(\n context.responder,\n formatCommandSummary(\"Model\", [\n `Switched: \\`${formatModelSpec(parsed.provider, parsed.model, parsed.thinkingLevel)}\\``,\n \"下一則訊息會使用新模型。\",\n ]),\n { style: \"muted\" },\n );\n return true;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjE,qBAAa,iBAAkB,YAAW,cAAc;IAChD,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAgCzD;CACF"}
@@ -1,25 +0,0 @@
1
- import { matchCommand } from "./parse.js";
2
- import { formatCommandSummary, replyDiagnosticWithContext } from "./utils.js";
3
- const NEW_COMMANDS = ["/new", "/pi-new"];
4
- export class NewCommandHandler {
5
- async tryHandle(context) {
6
- if (!matchCommand(context.commandText, NEW_COMMANDS))
7
- return false;
8
- if (!context.privateConversation) {
9
- await replyDiagnosticWithContext(context.responder, formatCommandSummary("New Session", [
10
- "為了避免誤清除共享上下文,`/new` 目前只能在與機器人的私訊 / DM 中使用。",
11
- ]), { style: "muted" });
12
- return true;
13
- }
14
- if (!context.services.runtime) {
15
- await replyDiagnosticWithContext(context.responder, formatCommandSummary("New Session", [
16
- "New command is not configured correctly on the server.",
17
- "Please try again later.",
18
- ]), { style: "muted" });
19
- return true;
20
- }
21
- await context.services.runtime.handleNewCommand(context.sessionKey, context.conversationId, context.bot);
22
- return true;
23
- }
24
- }
25
- //# sourceMappingURL=new.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAE9E,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,SAAS,CAAU,CAAC;AAElD,MAAM,OAAO,iBAAiB;IAC5B,KAAK,CAAC,SAAS,CAAC,OAAuB;QACrC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC;YAAE,OAAO,KAAK,CAAC;QAEnE,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACjC,MAAM,0BAA0B,CAC9B,OAAO,CAAC,SAAS,EACjB,oBAAoB,CAAC,aAAa,EAAE;gBAClC,4CAA4C;aAC7C,CAAC,EACF,EAAE,KAAK,EAAE,OAAO,EAAE,CACnB,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC9B,MAAM,0BAA0B,CAC9B,OAAO,CAAC,SAAS,EACjB,oBAAoB,CAAC,aAAa,EAAE;gBAClC,wDAAwD;gBACxD,yBAAyB;aAC1B,CAAC,EACF,EAAE,KAAK,EAAE,OAAO,EAAE,CACnB,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAC7C,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,GAAG,CACZ,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["import { matchCommand } from \"./parse.js\";\nimport type { CommandContext, CommandHandler } from \"./types.js\";\nimport { formatCommandSummary, replyDiagnosticWithContext } from \"./utils.js\";\n\nconst NEW_COMMANDS = [\"/new\", \"/pi-new\"] as const;\n\nexport class NewCommandHandler implements CommandHandler {\n async tryHandle(context: CommandContext): Promise<boolean> {\n if (!matchCommand(context.commandText, NEW_COMMANDS)) return false;\n\n if (!context.privateConversation) {\n await replyDiagnosticWithContext(\n context.responder,\n formatCommandSummary(\"New Session\", [\n \"為了避免誤清除共享上下文,`/new` 目前只能在與機器人的私訊 / DM 中使用。\",\n ]),\n { style: \"muted\" },\n );\n return true;\n }\n\n if (!context.services.runtime) {\n await replyDiagnosticWithContext(\n context.responder,\n formatCommandSummary(\"New Session\", [\n \"New command is not configured correctly on the server.\",\n \"Please try again later.\",\n ]),\n { style: \"muted\" },\n );\n return true;\n }\n\n await context.services.runtime.handleNewCommand(\n context.sessionKey,\n context.conversationId,\n context.bot,\n );\n return true;\n }\n}\n"]}
@@ -1,7 +0,0 @@
1
- export declare function matchCommand<Command extends string>(text: string, aliases: readonly Command[], options?: {
2
- stripMention?: boolean;
3
- }): {
4
- command: Command;
5
- args: string[];
6
- } | null;
7
- //# sourceMappingURL=parse.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/commands/parse.ts"],"names":[],"mappings":"AAKA,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,EACjD,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,OAAO,EAAE,EAC3B,OAAO,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACnC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAQ7C"}
@@ -1,14 +0,0 @@
1
- function normalizeCommandToken(token, options) {
2
- const command = options?.stripMention ? token.replace(/@\w+$/i, "") : token;
3
- return command.toLowerCase();
4
- }
5
- export function matchCommand(text, aliases, options) {
6
- const tokens = text.trim().split(/\s+/).filter(Boolean);
7
- if (tokens.length === 0)
8
- return null;
9
- const command = normalizeCommandToken(tokens[0], options);
10
- return aliases.includes(command)
11
- ? { command: command, args: tokens.slice(1) }
12
- : null;
13
- }
14
- //# sourceMappingURL=parse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/commands/parse.ts"],"names":[],"mappings":"AAAA,SAAS,qBAAqB,CAAC,KAAa,EAAE,OAAoC;IAChF,MAAM,OAAO,GAAG,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5E,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,OAA2B,EAC3B,OAAoC;IAEpC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1D,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAkB,CAAC;QACzC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAkB,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QACxD,CAAC,CAAC,IAAI,CAAC;AACX,CAAC","sourcesContent":["function normalizeCommandToken(token: string, options?: { stripMention?: boolean }): string {\n const command = options?.stripMention ? token.replace(/@\\w+$/i, \"\") : token;\n return command.toLowerCase();\n}\n\nexport function matchCommand<Command extends string>(\n text: string,\n aliases: readonly Command[],\n options?: { stripMention?: boolean },\n): { command: Command; args: string[] } | null {\n const tokens = text.trim().split(/\\s+/).filter(Boolean);\n if (tokens.length === 0) return null;\n\n const command = normalizeCommandToken(tokens[0], options);\n return aliases.includes(command as Command)\n ? { command: command as Command, args: tokens.slice(1) }\n : null;\n}\n"]}
@@ -1,5 +0,0 @@
1
- import type { CommandContext, CommandHandler } from "./types.js";
2
- export declare function defaultCommandHandlers(): CommandHandler[];
3
- /** Run handlers in order, returning true as soon as one accepts the command. */
4
- export declare function dispatchCommand(handlers: readonly CommandHandler[], context: CommandContext): Promise<boolean>;
5
- //# sourceMappingURL=registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/commands/registry.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjE,wBAAgB,sBAAsB,IAAI,cAAc,EAAE,CAYzD;AAED,gFAAgF;AAChF,wBAAsB,eAAe,CACnC,QAAQ,EAAE,SAAS,cAAc,EAAE,EACnC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,OAAO,CAAC,CAKlB"}
@@ -1,31 +0,0 @@
1
- import { MikanModels } from "../harness/index.js";
2
- import { AdminCommandHandler } from "./admin.js";
3
- import { AutoReplyCommandHandler } from "./auto-reply.js";
4
- import { ExtensionsCommandHandler } from "./extensions.js";
5
- import { LoginCommandHandler } from "./login.js";
6
- import { ModelCommandHandler } from "./model.js";
7
- import { NewCommandHandler } from "./new.js";
8
- import { SandboxCommandHandler } from "./sandbox.js";
9
- import { SessionViewCommandHandler } from "./session-view.js";
10
- export function defaultCommandHandlers() {
11
- const modelRegistry = MikanModels.create();
12
- return [
13
- new AdminCommandHandler(),
14
- new LoginCommandHandler(),
15
- new SessionViewCommandHandler(),
16
- new AutoReplyCommandHandler(),
17
- new ModelCommandHandler(modelRegistry),
18
- new SandboxCommandHandler(),
19
- new ExtensionsCommandHandler(),
20
- new NewCommandHandler(),
21
- ];
22
- }
23
- /** Run handlers in order, returning true as soon as one accepts the command. */
24
- export async function dispatchCommand(handlers, context) {
25
- for (const handler of handlers) {
26
- if (await handler.tryHandle(context))
27
- return true;
28
- }
29
- return false;
30
- }
31
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/commands/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAG9D,MAAM,UAAU,sBAAsB;IACpC,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;IAC3C,OAAO;QACL,IAAI,mBAAmB,EAAE;QACzB,IAAI,mBAAmB,EAAE;QACzB,IAAI,yBAAyB,EAAE;QAC/B,IAAI,uBAAuB,EAAE;QAC7B,IAAI,mBAAmB,CAAC,aAAa,CAAC;QACtC,IAAI,qBAAqB,EAAE;QAC3B,IAAI,wBAAwB,EAAE;QAC9B,IAAI,iBAAiB,EAAE;KACxB,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAmC,EACnC,OAAuB;IAEvB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;IACpD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import { MikanModels } from \"../harness/index.js\";\nimport { AdminCommandHandler } from \"./admin.js\";\nimport { AutoReplyCommandHandler } from \"./auto-reply.js\";\nimport { ExtensionsCommandHandler } from \"./extensions.js\";\nimport { LoginCommandHandler } from \"./login.js\";\nimport { ModelCommandHandler } from \"./model.js\";\nimport { NewCommandHandler } from \"./new.js\";\nimport { SandboxCommandHandler } from \"./sandbox.js\";\nimport { SessionViewCommandHandler } from \"./session-view.js\";\nimport type { CommandContext, CommandHandler } from \"./types.js\";\n\nexport function defaultCommandHandlers(): CommandHandler[] {\n const modelRegistry = MikanModels.create();\n return [\n new AdminCommandHandler(),\n new LoginCommandHandler(),\n new SessionViewCommandHandler(),\n new AutoReplyCommandHandler(),\n new ModelCommandHandler(modelRegistry),\n new SandboxCommandHandler(),\n new ExtensionsCommandHandler(),\n new NewCommandHandler(),\n ];\n}\n\n/** Run handlers in order, returning true as soon as one accepts the command. */\nexport async function dispatchCommand(\n handlers: readonly CommandHandler[],\n context: CommandContext,\n): Promise<boolean> {\n for (const handler of handlers) {\n if (await handler.tryHandle(context)) return true;\n }\n return false;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/commands/sandbox.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvF,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAIvD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAS7E;AAED,qBAAa,qBAAsB,YAAW,cAAc;IACpD,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAyFzD;CACF"}
@@ -1,78 +0,0 @@
1
- import { join } from "node:path";
2
- import { updateConversationSettings } from "../config.js";
3
- import { readConversationWorkspaceMountMode } from "../execution-resolver.js";
4
- import { resolveActorVaultKey } from "../vault/routing.js";
5
- import { matchCommand } from "./parse.js";
6
- import { formatCommandSummary, replyDiagnosticWithContext } from "./utils.js";
7
- const SANDBOX_COMMANDS = ["/pi-sandbox", "/sandbox"];
8
- export function parseSandboxCommand(text) {
9
- const matched = matchCommand(text, SANDBOX_COMMANDS, { stripMention: true });
10
- if (!matched)
11
- return null;
12
- const action = matched.args.length === 1 ? matched.args[0].toLowerCase() : undefined;
13
- if (action === "boost" || action === "private" || action === "full") {
14
- return { action };
15
- }
16
- return {};
17
- }
18
- export class SandboxCommandHandler {
19
- async tryHandle(context) {
20
- const parsed = parseSandboxCommand(context.commandText);
21
- if (!parsed)
22
- return false;
23
- if (context.services.sandbox.type !== "image" || !context.services.provisioner) {
24
- await replyDiagnosticWithContext(context.responder, formatCommandSummary("Sandbox", ["`/pi-sandbox` 目前只支援 `image:*` managed sandbox。"]), { style: "muted" });
25
- return true;
26
- }
27
- const containerKey = resolveActorVaultKey(context.services.sandbox, context.platformUserId, context.conversationId);
28
- if (parsed.action === "private" || parsed.action === "full") {
29
- updateConversationSettings(join(context.services.workingDir, context.conversationId), {
30
- sandboxImageWorkspaceMount: parsed.action,
31
- });
32
- await replyDiagnosticWithContext(context.responder, formatCommandSummary("Sandbox Workspace", [
33
- parsed.action === "full"
34
- ? "已將此 conversation 的 sandbox 設為 full workspace mode。"
35
- : "已將此 conversation 的 sandbox 設為 private workspace mode。",
36
- `Workspace mount: ${parsed.action}`,
37
- parsed.action === "full"
38
- ? "之後這個 container 會把整個 host workspace 掛到 /workspace。"
39
- : "之後這個 container 只會掛載 private workspace 檔案與當前 conversation 目錄。",
40
- ]), { style: "muted" });
41
- return true;
42
- }
43
- if (parsed.action === "boost") {
44
- const boostLimits = context.services.provisioner.getBoostLimits();
45
- if (!boostLimits?.cpus && !boostLimits?.memory) {
46
- await replyDiagnosticWithContext(context.responder, formatCommandSummary("Sandbox Boost", [
47
- "此 mikan instance 尚未設定 sandbox boost 規格。",
48
- "請先在全域 settings.json 設定 `sandbox.boost`。",
49
- ]), { style: "muted" });
50
- return true;
51
- }
52
- const status = await context.services.provisioner.boost(containerKey);
53
- await replyDiagnosticWithContext(context.responder, formatCommandSummary("Sandbox Boost", [
54
- "已暫時提升此 conversation 的 sandbox 規格。",
55
- `Current: ${formatLimits(status.limits)}`,
56
- "boost 會在此 sandbox container 關閉後結束。",
57
- ]), { style: "muted" });
58
- return true;
59
- }
60
- const status = context.services.provisioner.getLimitStatus(containerKey);
61
- const defaultLimits = context.services.provisioner.getDefaultLimits();
62
- const boostLimits = context.services.provisioner.getBoostLimits();
63
- const workspaceMount = readConversationWorkspaceMountMode(context.services.workingDir, context.conversationId);
64
- await replyDiagnosticWithContext(context.responder, formatCommandSummary("Sandbox", [
65
- `Current: ${formatLimits(status.limits)}`,
66
- `Status: ${status.boosted ? "boosted" : "default"}`,
67
- `Workspace mount: ${workspaceMount}`,
68
- "",
69
- `Default: ${formatLimits(defaultLimits)}`,
70
- boostLimits ? `Boost: ${formatLimits({ ...defaultLimits, ...boostLimits })}` : undefined,
71
- ].filter((line) => line !== undefined)), { style: "muted" });
72
- return true;
73
- }
74
- }
75
- function formatLimits(limits) {
76
- return `CPU ${limits?.cpus ?? "unlimited"} / Memory ${limits?.memory ?? "unlimited"}`;
77
- }
78
- //# sourceMappingURL=sandbox.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/commands/sandbox.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport { updateConversationSettings } from \"../config.js\";\nimport { readConversationWorkspaceMountMode } from \"../execution-resolver.js\";\nimport { resolveActorVaultKey } from \"../vault/routing.js\";\nimport { matchCommand } from \"./parse.js\";\nimport type { CommandContext, CommandHandler, ParsedSandboxCommand } from \"./types.js\";\nimport { formatCommandSummary, replyDiagnosticWithContext } from \"./utils.js\";\n\nexport type { ParsedSandboxCommand } from \"./types.js\";\n\nconst SANDBOX_COMMANDS = [\"/pi-sandbox\", \"/sandbox\"] as const;\n\nexport function parseSandboxCommand(text: string): ParsedSandboxCommand | null {\n const matched = matchCommand(text, SANDBOX_COMMANDS, { stripMention: true });\n if (!matched) return null;\n\n const action = matched.args.length === 1 ? matched.args[0].toLowerCase() : undefined;\n if (action === \"boost\" || action === \"private\" || action === \"full\") {\n return { action };\n }\n return {};\n}\n\nexport class SandboxCommandHandler implements CommandHandler {\n async tryHandle(context: CommandContext): Promise<boolean> {\n const parsed = parseSandboxCommand(context.commandText);\n if (!parsed) return false;\n\n if (context.services.sandbox.type !== \"image\" || !context.services.provisioner) {\n await replyDiagnosticWithContext(\n context.responder,\n formatCommandSummary(\"Sandbox\", [\"`/pi-sandbox` 目前只支援 `image:*` managed sandbox。\"]),\n { style: \"muted\" },\n );\n return true;\n }\n\n const containerKey = resolveActorVaultKey(\n context.services.sandbox,\n context.platformUserId,\n context.conversationId,\n );\n\n if (parsed.action === \"private\" || parsed.action === \"full\") {\n updateConversationSettings(join(context.services.workingDir, context.conversationId), {\n sandboxImageWorkspaceMount: parsed.action,\n });\n await replyDiagnosticWithContext(\n context.responder,\n formatCommandSummary(\"Sandbox Workspace\", [\n parsed.action === \"full\"\n ? \"已將此 conversation 的 sandbox 設為 full workspace mode。\"\n : \"已將此 conversation 的 sandbox 設為 private workspace mode。\",\n `Workspace mount: ${parsed.action}`,\n parsed.action === \"full\"\n ? \"之後這個 container 會把整個 host workspace 掛到 /workspace。\"\n : \"之後這個 container 只會掛載 private workspace 檔案與當前 conversation 目錄。\",\n ]),\n { style: \"muted\" },\n );\n return true;\n }\n\n if (parsed.action === \"boost\") {\n const boostLimits = context.services.provisioner.getBoostLimits();\n if (!boostLimits?.cpus && !boostLimits?.memory) {\n await replyDiagnosticWithContext(\n context.responder,\n formatCommandSummary(\"Sandbox Boost\", [\n \"此 mikan instance 尚未設定 sandbox boost 規格。\",\n \"請先在全域 settings.json 設定 `sandbox.boost`。\",\n ]),\n { style: \"muted\" },\n );\n return true;\n }\n\n const status = await context.services.provisioner.boost(containerKey);\n await replyDiagnosticWithContext(\n context.responder,\n formatCommandSummary(\"Sandbox Boost\", [\n \"已暫時提升此 conversation 的 sandbox 規格。\",\n `Current: ${formatLimits(status.limits)}`,\n \"boost 會在此 sandbox container 關閉後結束。\",\n ]),\n { style: \"muted\" },\n );\n return true;\n }\n\n const status = context.services.provisioner.getLimitStatus(containerKey);\n const defaultLimits = context.services.provisioner.getDefaultLimits();\n const boostLimits = context.services.provisioner.getBoostLimits();\n const workspaceMount = readConversationWorkspaceMountMode(\n context.services.workingDir,\n context.conversationId,\n );\n await replyDiagnosticWithContext(\n context.responder,\n formatCommandSummary(\n \"Sandbox\",\n [\n `Current: ${formatLimits(status.limits)}`,\n `Status: ${status.boosted ? \"boosted\" : \"default\"}`,\n `Workspace mount: ${workspaceMount}`,\n \"\",\n `Default: ${formatLimits(defaultLimits)}`,\n boostLimits ? `Boost: ${formatLimits({ ...defaultLimits, ...boostLimits })}` : undefined,\n ].filter((line): line is string => line !== undefined),\n ),\n { style: \"muted\" },\n );\n return true;\n }\n}\n\nfunction formatLimits(limits: { cpus?: string; memory?: string } | undefined): string {\n return `CPU ${limits?.cpus ?? \"unlimited\"} / Memory ${limits?.memory ?? \"unlimited\"}`;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-view.d.ts","sourceRoot":"","sources":["../../src/commands/session-view.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjE,qBAAa,yBAA0B,YAAW,cAAc;IACxD,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAkEzD;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-view.js","sourceRoot":"","sources":["../../src/commands/session-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE7E,MAAM,OAAO,yBAAyB;IACpC,KAAK,CAAC,SAAS,CAAC,OAAuB;QACrC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,WAAW,CAAC;YAAE,OAAO,KAAK,CAAC;QAEhE,IAAI,CAAC,OAAO,CAAC,mBAAmB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YAC7D,MAAM,yBAAyB,CAC7B,OAAO,EACP,oBAAoB,CAAC,SAAS,EAAE;gBAC9B,4CAA4C;aAC7C,CAAC,EACF,EAAE,KAAK,EAAE,OAAO,EAAE,CACnB,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YACpC,MAAM,yBAAyB,CAC7B,OAAO,EACP,oBAAoB,CAAC,SAAS,EAAE;gBAC9B,mCAAmC;gBACnC,0DAA0D;aAC3D,CAAC,EACF,EAAE,KAAK,EAAE,OAAO,EAAE,CACnB,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,WAAW,GAAG,0BAA0B,CAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,EAC3B,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,UAAU,CACnB,CAAC;QACF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,yBAAyB,CAC7B,OAAO,EACP,oBAAoB,CAAC,SAAS,EAAE;gBAC9B,oBAAoB;gBACpB,2BAA2B;aAC5B,CAAC,EACF,EAAE,KAAK,EAAE,OAAO,EAAE,CACnB,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG;aAC7B,gBAAgB,EAAE;aAClB,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;QAC5D,MAAM,gBAAgB,GAAG,YAAY,EAAE,QAAQ,IAAI,YAAY,EAAE,WAAW,CAAC;QAE7E,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,MAAM,CACzD,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,UAAU,EAClB,WAAW,EACX,gBAAgB,CACjB,CAAC;QAEF,MAAM,yBAAyB,CAC7B,OAAO,EACP,oBAAoB,CAAC,SAAS,EAAE;YAC9B,GAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,kBAAkB,KAAK,CAAC,KAAK,EAAE;YAChE,mBAAmB;SACpB,CAAC,EACF,EAAE,KAAK,EAAE,OAAO,EAAE,CACnB,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["import { resolveExistingSessionFile } from \"../web/session-view/service.js\";\nimport { parseSessionViewCommand } from \"../web/session-view/command.js\";\nimport type { CommandContext, CommandHandler } from \"./types.js\";\nimport { formatCommandSummary, replyPrivatelyWithContext } from \"./utils.js\";\n\nexport class SessionViewCommandHandler implements CommandHandler {\n async tryHandle(context: CommandContext): Promise<boolean> {\n if (!parseSessionViewCommand(context.commandText)) return false;\n\n if (!context.privateConversation && !context.bot.postPrivate) {\n await replyPrivatelyWithContext(\n context,\n formatCommandSummary(\"Session\", [\n \"為了保護對話內容,`/session` 目前只能在與機器人的私訊 / DM 中使用。\",\n ]),\n { style: \"muted\" },\n );\n return true;\n }\n\n if (!context.services.portalBaseUrl) {\n await replyPrivatelyWithContext(\n context,\n formatCommandSummary(\"Session\", [\n \"Session viewer is not configured.\",\n \"Set `MIKAN_LINK_URL` or `MIKAN_LINK_PORT` on the server.\",\n ]),\n { style: \"muted\" },\n );\n return true;\n }\n\n const sessionFile = resolveExistingSessionFile(\n context.services.workingDir,\n context.conversationId,\n context.sessionKey,\n );\n if (!sessionFile) {\n await replyPrivatelyWithContext(\n context,\n formatCommandSummary(\"Session\", [\n \"目前還沒有可查看的 session。\",\n \"先和機器人對話一次,建立 session 後再試。\",\n ]),\n { style: \"muted\" },\n );\n return true;\n }\n\n const platformUser = context.bot\n .getMessagingInfo()\n .users.find((user) => user.id === context.platformUserId);\n const platformUserName = platformUser?.userName || platformUser?.displayName;\n\n const token = context.services.sessionViewTokenStore.create(\n context.platform,\n context.platformUserId,\n context.conversationId,\n context.sessionKey,\n sessionFile,\n platformUserName,\n );\n\n await replyPrivatelyWithContext(\n context,\n formatCommandSummary(\"Session\", [\n `${context.services.portalBaseUrl}/session?token=${token.token}`,\n \"Expires: 24 hours\",\n ]),\n { style: \"muted\" },\n );\n return true;\n }\n}\n"]}
@@ -1,66 +0,0 @@
1
- import type { ThinkingLevel } from "@earendil-works/pi-agent-core";
2
- import type { MessagingBot, ConversationContext, PlatformName } from "../adapter.js";
3
- import type { DockerContainerManager } from "../provisioner.js";
4
- import type { SandboxConfig } from "../sandbox/index.js";
5
- import type { VaultManager } from "../vault/index.js";
6
- export interface LinkTokenStoreLike {
7
- create(platform: PlatformName, platformUserId: string, conversationId: string, vaultId: string, providerId: string): {
8
- token: string;
9
- };
10
- }
11
- export interface SessionViewTokenStoreLike {
12
- create(platform: PlatformName, platformUserId: string, conversationId: string, sessionKey: string, sessionFile: string, platformUserName?: string): {
13
- token: string;
14
- };
15
- }
16
- interface AdminTokenStoreLike {
17
- create(args: {
18
- platform: PlatformName;
19
- platformUserId: string;
20
- conversationId: string;
21
- platformUserName?: string;
22
- }): {
23
- token: string;
24
- };
25
- }
26
- interface CommandRuntimeBridge {
27
- handleNewCommand(sessionKey: string, conversationId: string, bot: MessagingBot): Promise<void>;
28
- switchConversationModel(conversationId: string, provider: string, model: string): boolean;
29
- refreshConversationEnvironment(conversationId: string): boolean;
30
- }
31
- export interface CommandServices {
32
- workingDir: string;
33
- runtime?: CommandRuntimeBridge;
34
- sandbox: SandboxConfig;
35
- vaultManager: VaultManager;
36
- provisioner?: DockerContainerManager;
37
- linkTokenStore: LinkTokenStoreLike;
38
- sessionViewTokenStore: SessionViewTokenStoreLike;
39
- adminTokenStore: AdminTokenStoreLike;
40
- portalBaseUrl?: string;
41
- }
42
- export interface CommandContext {
43
- bot: MessagingBot;
44
- responder: ConversationContext["responder"];
45
- platform: PlatformName;
46
- platformUserId: string;
47
- conversationId: string;
48
- vaultConversationId?: string;
49
- sessionKey: string;
50
- commandText: string;
51
- privateConversation: boolean;
52
- services: CommandServices;
53
- }
54
- export interface CommandHandler {
55
- tryHandle(context: CommandContext): Promise<boolean>;
56
- }
57
- export interface ParsedModelCommand {
58
- provider?: string;
59
- model?: string;
60
- thinkingLevel?: ThinkingLevel;
61
- }
62
- export interface ParsedSandboxCommand {
63
- action?: "boost" | "private" | "full";
64
- }
65
- export {};
66
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { MessagingBot, ConversationContext, PlatformName } from \"../adapter.js\";\nimport type { DockerContainerManager } from \"../provisioner.js\";\nimport type { SandboxConfig } from \"../sandbox/index.js\";\nimport type { VaultManager } from \"../vault/index.js\";\n\nexport interface LinkTokenStoreLike {\n create(\n platform: PlatformName,\n platformUserId: string,\n conversationId: string,\n vaultId: string,\n providerId: string,\n ): { token: string };\n}\n\nexport interface SessionViewTokenStoreLike {\n create(\n platform: PlatformName,\n platformUserId: string,\n conversationId: string,\n sessionKey: string,\n sessionFile: string,\n platformUserName?: string,\n ): { token: string };\n}\n\ninterface AdminTokenStoreLike {\n create(args: {\n platform: PlatformName;\n platformUserId: string;\n conversationId: string;\n platformUserName?: string;\n }): { token: string };\n}\n\ninterface CommandRuntimeBridge {\n handleNewCommand(sessionKey: string, conversationId: string, bot: MessagingBot): Promise<void>;\n switchConversationModel(conversationId: string, provider: string, model: string): boolean;\n refreshConversationEnvironment(conversationId: string): boolean;\n}\n\nexport interface CommandServices {\n workingDir: string;\n runtime?: CommandRuntimeBridge;\n sandbox: SandboxConfig;\n vaultManager: VaultManager;\n provisioner?: DockerContainerManager;\n linkTokenStore: LinkTokenStoreLike;\n sessionViewTokenStore: SessionViewTokenStoreLike;\n adminTokenStore: AdminTokenStoreLike;\n portalBaseUrl?: string;\n}\n\nexport interface CommandContext {\n bot: MessagingBot;\n responder: ConversationContext[\"responder\"];\n platform: PlatformName;\n platformUserId: string;\n conversationId: string;\n vaultConversationId?: string;\n sessionKey: string;\n commandText: string;\n privateConversation: boolean;\n services: CommandServices;\n}\n\nexport interface CommandHandler {\n tryHandle(context: CommandContext): Promise<boolean>;\n}\n\n// ── command-specific parsed types ────────────────────────────────────────────\n\nexport interface ParsedModelCommand {\n provider?: string;\n model?: string;\n thinkingLevel?: ThinkingLevel;\n}\n\nexport interface ParsedSandboxCommand {\n action?: \"boost\" | \"private\" | \"full\";\n}\n"]}
@@ -1,11 +0,0 @@
1
- import type { ConversationEvent } from "../adapter.js";
2
- import type { CommandContext } from "./types.js";
3
- export declare function replyDiagnosticWithContext(responder: CommandContext["responder"], text: string, options?: {
4
- style?: "muted" | "error";
5
- }): Promise<void>;
6
- export declare function replyPrivatelyWithContext(context: CommandContext, text: string, options?: {
7
- style?: "muted" | "error";
8
- }): Promise<void>;
9
- export declare function formatCommandSummary(title: string, lines: string[]): string;
10
- export declare function isPrivateConversation(event: ConversationEvent): boolean;
11
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/commands/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,EACtC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;CAAE,GACtC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;CAAE,GACtC,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAK3E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAIvE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/commands/utils.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,SAAsC,EACtC,IAAY,EACZ,OAAuC;IAEvC,MAAM,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAuB,EACvB,IAAY,EACZ,OAAuC;IAEvC,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAChC,MAAM,0BAA0B,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;QACtC,MAAM,OAAO,CAAC,GAAG,CAAC,qBAAqB,CACrC,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,cAAc,EACtB,IAAI,EACJ,OAAO,CACR,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAC5B,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACpF,OAAO;IACT,CAAC;IAED,MAAM,0BAA0B,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAa,EAAE,KAAe;IACjE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChE,MAAM,YAAY,GAChB,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACjF,OAAO,CAAC,IAAI,KAAK,GAAG,EAAE,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAwB;IAC5D,OAAO,CACL,KAAK,CAAC,gBAAgB,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAC/F,CAAC;AACJ,CAAC","sourcesContent":["import type { ConversationEvent } from \"../adapter.js\";\nimport type { CommandContext } from \"./types.js\";\n\nexport async function replyDiagnosticWithContext(\n responder: CommandContext[\"responder\"],\n text: string,\n options?: { style?: \"muted\" | \"error\" },\n): Promise<void> {\n await responder.setTyping(false);\n await responder.setWorking(false);\n await responder.respondDiagnostic(text, options);\n}\n\nexport async function replyPrivatelyWithContext(\n context: CommandContext,\n text: string,\n options?: { style?: \"muted\" | \"error\" },\n): Promise<void> {\n if (context.privateConversation) {\n await replyDiagnosticWithContext(context.responder, text, options);\n return;\n }\n\n if (context.bot.postPrivateDiagnostic) {\n await context.bot.postPrivateDiagnostic(\n context.conversationId,\n context.platformUserId,\n text,\n options,\n );\n return;\n }\n\n if (context.bot.postPrivate) {\n await context.bot.postPrivate(context.conversationId, context.platformUserId, text);\n return;\n }\n\n await replyDiagnosticWithContext(context.responder, text, options);\n}\n\nexport function formatCommandSummary(title: string, lines: string[]): string {\n const nonEmpty = lines.filter((line) => line.trim().length > 0);\n const compactLines =\n nonEmpty.length <= 2 ? nonEmpty : [nonEmpty[0], nonEmpty.slice(1).join(\" · \")];\n return [`_${title}_`, ...compactLines].join(\"\\n\");\n}\n\nexport function isPrivateConversation(event: ConversationEvent): boolean {\n return (\n event.conversationKind === \"direct\" || event.type === \"dm\" || event.type === \"private_command\"\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":"AA6BA,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuFxF"}
package/dist/download.js DELETED
@@ -1,89 +0,0 @@
1
- import { LogLevel, WebClient } from "@slack/web-api";
2
- function formatTs(ts) {
3
- const date = new Date(parseFloat(ts) * 1000);
4
- return date
5
- .toISOString()
6
- .replace("T", " ")
7
- .replace(/\.\d+Z$/, "");
8
- }
9
- function formatMessage(ts, user, text, indent = "") {
10
- const prefix = `[${formatTs(ts)}] ${user}: `;
11
- const lines = text.split("\n");
12
- const firstLine = `${indent}${prefix}${lines[0]}`;
13
- if (lines.length === 1)
14
- return firstLine;
15
- // All continuation lines get same indent as content start
16
- const contentIndent = indent + " ".repeat(prefix.length);
17
- return [firstLine, ...lines.slice(1).map((l) => contentIndent + l)].join("\n");
18
- }
19
- export async function downloadChannel(channelId, botToken) {
20
- const client = new WebClient(botToken, { logLevel: LogLevel.ERROR });
21
- console.error(`Fetching channel info for ${channelId}...`);
22
- // Get channel info
23
- let channelName = channelId;
24
- try {
25
- const info = await client.conversations.info({ channel: channelId });
26
- channelName = typeof info.channel?.name === "string" ? info.channel.name : channelId;
27
- }
28
- catch {
29
- // DM channels don't have names, that's fine
30
- }
31
- console.error(`Downloading history for #${channelName} (${channelId})...`);
32
- // Fetch all messages
33
- const messages = [];
34
- let cursor;
35
- do {
36
- const response = await client.conversations.history({
37
- channel: channelId,
38
- limit: 200,
39
- cursor,
40
- });
41
- if (response.messages) {
42
- messages.push(...response.messages);
43
- }
44
- cursor = response.response_metadata?.next_cursor;
45
- console.error(` Fetched ${messages.length} messages...`);
46
- } while (cursor);
47
- // Reverse to chronological order
48
- messages.reverse();
49
- // Build map of thread replies
50
- const threadReplies = new Map();
51
- const threadsToFetch = messages.filter((m) => m.reply_count && m.reply_count > 0);
52
- console.error(`Fetching ${threadsToFetch.length} threads...`);
53
- for (let i = 0; i < threadsToFetch.length; i++) {
54
- const parent = threadsToFetch[i];
55
- console.error(` Thread ${i + 1}/${threadsToFetch.length} (${parent.reply_count} replies)...`);
56
- const replies = [];
57
- let threadCursor;
58
- do {
59
- const response = await client.conversations.replies({
60
- channel: channelId,
61
- ts: parent.ts,
62
- limit: 200,
63
- cursor: threadCursor,
64
- });
65
- if (response.messages) {
66
- // Skip the first message (it's the parent)
67
- replies.push(...response.messages.slice(1));
68
- }
69
- threadCursor = response.response_metadata?.next_cursor;
70
- } while (threadCursor);
71
- threadReplies.set(parent.ts, replies);
72
- }
73
- // Output messages with thread replies interleaved
74
- let totalReplies = 0;
75
- for (const msg of messages) {
76
- // Output the message
77
- console.log(formatMessage(msg.ts, msg.user || "unknown", msg.text || ""));
78
- // Output thread replies right after parent (indented)
79
- const replies = threadReplies.get(msg.ts);
80
- if (replies) {
81
- for (const reply of replies) {
82
- console.log(formatMessage(reply.ts, reply.user || "unknown", reply.text || "", " "));
83
- totalReplies++;
84
- }
85
- }
86
- }
87
- console.error(`Done! ${messages.length} messages, ${totalReplies} thread replies`);
88
- }
89
- //# sourceMappingURL=download.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"download.js","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":"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","sourcesContent":["import { LogLevel, WebClient } from \"@slack/web-api\";\n\ninterface Message {\n ts: string;\n user?: string;\n text?: string;\n thread_ts?: string;\n reply_count?: number;\n files?: Array<{ name: string; url_private?: string }>;\n}\n\nfunction formatTs(ts: string): string {\n const date = new Date(parseFloat(ts) * 1000);\n return date\n .toISOString()\n .replace(\"T\", \" \")\n .replace(/\\.\\d+Z$/, \"\");\n}\n\nfunction formatMessage(ts: string, user: string, text: string, indent = \"\"): string {\n const prefix = `[${formatTs(ts)}] ${user}: `;\n const lines = text.split(\"\\n\");\n const firstLine = `${indent}${prefix}${lines[0]}`;\n if (lines.length === 1) return firstLine;\n // All continuation lines get same indent as content start\n const contentIndent = indent + \" \".repeat(prefix.length);\n return [firstLine, ...lines.slice(1).map((l) => contentIndent + l)].join(\"\\n\");\n}\n\nexport async function downloadChannel(channelId: string, botToken: string): Promise<void> {\n const client = new WebClient(botToken, { logLevel: LogLevel.ERROR });\n\n console.error(`Fetching channel info for ${channelId}...`);\n\n // Get channel info\n let channelName = channelId;\n try {\n const info = await client.conversations.info({ channel: channelId });\n channelName = typeof info.channel?.name === \"string\" ? info.channel.name : channelId;\n } catch {\n // DM channels don't have names, that's fine\n }\n\n console.error(`Downloading history for #${channelName} (${channelId})...`);\n\n // Fetch all messages\n const messages: Message[] = [];\n let cursor: string | undefined;\n\n do {\n const response = await client.conversations.history({\n channel: channelId,\n limit: 200,\n cursor,\n });\n\n if (response.messages) {\n messages.push(...(response.messages as Message[]));\n }\n\n cursor = response.response_metadata?.next_cursor;\n console.error(` Fetched ${messages.length} messages...`);\n } while (cursor);\n\n // Reverse to chronological order\n messages.reverse();\n\n // Build map of thread replies\n const threadReplies = new Map<string, Message[]>();\n const threadsToFetch = messages.filter((m) => m.reply_count && m.reply_count > 0);\n\n console.error(`Fetching ${threadsToFetch.length} threads...`);\n\n for (let i = 0; i < threadsToFetch.length; i++) {\n const parent = threadsToFetch[i];\n console.error(` Thread ${i + 1}/${threadsToFetch.length} (${parent.reply_count} replies)...`);\n\n const replies: Message[] = [];\n let threadCursor: string | undefined;\n\n do {\n const response = await client.conversations.replies({\n channel: channelId,\n ts: parent.ts,\n limit: 200,\n cursor: threadCursor,\n });\n\n if (response.messages) {\n // Skip the first message (it's the parent)\n replies.push(...(response.messages as Message[]).slice(1));\n }\n\n threadCursor = response.response_metadata?.next_cursor;\n } while (threadCursor);\n\n threadReplies.set(parent.ts, replies);\n }\n\n // Output messages with thread replies interleaved\n let totalReplies = 0;\n for (const msg of messages) {\n // Output the message\n console.log(formatMessage(msg.ts, msg.user || \"unknown\", msg.text || \"\"));\n\n // Output thread replies right after parent (indented)\n const replies = threadReplies.get(msg.ts);\n if (replies) {\n for (const reply of replies) {\n console.log(formatMessage(reply.ts, reply.user || \"unknown\", reply.text || \"\", \" \"));\n totalReplies++;\n }\n }\n }\n\n console.error(`Done! ${messages.length} messages, ${totalReplies} thread replies`);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAuC,MAAM,cAAc,CAAC;AAMtF,YAAY,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,aAAa,EACb,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAoBpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAMpD,qBAAa,aAAa;IAStB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc;IATxB,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,cAAc,CAA0C;IAChE,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,UAAU,CAA0B;IAE5C,YACU,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EAGrD;IAED;;OAEG;IACH,KAAK,IAAI,IAAI,CAmBZ;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,CA2BX;IAED;;OAEG;IACH,iBAAiB,IAAI,iBAAiB,EAAE,CA0BvC;IAED,OAAO,CAAC,QAAQ;IAchB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,gBAAgB;YAoBV,YAAY;IA0B1B,OAAO,CAAC,eAAe;YAiBT,UAAU;IAiDxB,OAAO,CAAC,UAAU;IA0ElB,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,OAAO;IAuCf,OAAO,CAAC,0BAA0B;IA0BlC,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,UAAU;CAanB"}