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

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 (853) hide show
  1. package/CHANGELOG.md +1040 -0
  2. package/README.md +98 -38
  3. package/dist/adapters/commands/admin.d.ts.map +1 -0
  4. package/dist/{commands → adapters/commands}/admin.js +11 -8
  5. package/dist/adapters/commands/admin.js.map +1 -0
  6. package/dist/{commands → adapters/commands}/auto-reply.d.ts +0 -3
  7. package/dist/adapters/commands/auto-reply.d.ts.map +1 -0
  8. package/dist/adapters/commands/auto-reply.js +47 -0
  9. package/dist/adapters/commands/auto-reply.js.map +1 -0
  10. package/dist/adapters/commands/login.d.ts +6 -0
  11. package/dist/adapters/commands/login.d.ts.map +1 -0
  12. package/dist/adapters/commands/login.js +166 -0
  13. package/dist/adapters/commands/login.js.map +1 -0
  14. package/dist/adapters/commands/manifest.d.ts +37 -0
  15. package/dist/adapters/commands/manifest.d.ts.map +1 -0
  16. package/dist/adapters/commands/manifest.js +155 -0
  17. package/dist/adapters/commands/manifest.js.map +1 -0
  18. package/dist/adapters/commands/model.d.ts +15 -0
  19. package/dist/adapters/commands/model.d.ts.map +1 -0
  20. package/dist/adapters/commands/model.js +153 -0
  21. package/dist/adapters/commands/model.js.map +1 -0
  22. package/dist/adapters/commands/new.d.ts.map +1 -0
  23. package/dist/adapters/commands/new.js +41 -0
  24. package/dist/adapters/commands/new.js.map +1 -0
  25. package/dist/adapters/commands/registry.d.ts +5 -0
  26. package/dist/adapters/commands/registry.d.ts.map +1 -0
  27. package/dist/adapters/commands/registry.js +43 -0
  28. package/dist/adapters/commands/registry.js.map +1 -0
  29. package/dist/adapters/commands/sandbox.d.ts.map +1 -0
  30. package/dist/adapters/commands/sandbox.js +125 -0
  31. package/dist/adapters/commands/sandbox.js.map +1 -0
  32. package/dist/adapters/commands/session-view.d.ts.map +1 -0
  33. package/dist/{commands → adapters/commands}/session-view.js +23 -16
  34. package/dist/adapters/commands/session-view.js.map +1 -0
  35. package/dist/adapters/commands/types.d.ts +145 -0
  36. package/dist/adapters/commands/types.d.ts.map +1 -0
  37. package/dist/adapters/commands/types.js.map +1 -0
  38. package/dist/adapters/commands/utils.d.ts +14 -0
  39. package/dist/adapters/commands/utils.d.ts.map +1 -0
  40. package/dist/{commands → adapters/commands}/utils.js +18 -1
  41. package/dist/adapters/commands/utils.js.map +1 -0
  42. package/dist/adapters/discord/bot.d.ts +11 -8
  43. package/dist/adapters/discord/bot.d.ts.map +1 -1
  44. package/dist/adapters/discord/bot.js +223 -256
  45. package/dist/adapters/discord/bot.js.map +1 -1
  46. package/dist/adapters/discord/components.d.ts +28 -0
  47. package/dist/adapters/discord/components.d.ts.map +1 -0
  48. package/dist/adapters/discord/components.js +32 -0
  49. package/dist/adapters/discord/components.js.map +1 -0
  50. package/dist/adapters/discord/context.d.ts +2 -6
  51. package/dist/adapters/discord/context.d.ts.map +1 -1
  52. package/dist/adapters/discord/context.js +64 -218
  53. package/dist/adapters/discord/context.js.map +1 -1
  54. package/dist/adapters/discord/format.d.ts +3 -0
  55. package/dist/adapters/discord/format.d.ts.map +1 -0
  56. package/dist/adapters/discord/format.js +84 -0
  57. package/dist/adapters/discord/format.js.map +1 -0
  58. package/dist/adapters/discord/types.d.ts +8 -1
  59. package/dist/adapters/discord/types.d.ts.map +1 -1
  60. package/dist/adapters/discord/types.js.map +1 -1
  61. package/dist/adapters/github/bot.d.ts +102 -0
  62. package/dist/adapters/github/bot.d.ts.map +1 -0
  63. package/dist/adapters/github/bot.js +720 -0
  64. package/dist/adapters/github/bot.js.map +1 -0
  65. package/dist/adapters/github/client.d.ts +122 -0
  66. package/dist/adapters/github/client.d.ts.map +1 -0
  67. package/dist/adapters/github/client.js +301 -0
  68. package/dist/adapters/github/client.js.map +1 -0
  69. package/dist/adapters/github/context.d.ts +5 -0
  70. package/dist/adapters/github/context.d.ts.map +1 -0
  71. package/dist/adapters/github/context.js +101 -0
  72. package/dist/adapters/github/context.js.map +1 -0
  73. package/dist/adapters/github/github-ops.d.ts +78 -0
  74. package/dist/adapters/github/github-ops.d.ts.map +1 -0
  75. package/dist/adapters/github/github-ops.js +337 -0
  76. package/dist/adapters/github/github-ops.js.map +1 -0
  77. package/dist/adapters/github/ids.d.ts +34 -0
  78. package/dist/adapters/github/ids.d.ts.map +1 -0
  79. package/dist/adapters/github/ids.js +57 -0
  80. package/dist/adapters/github/ids.js.map +1 -0
  81. package/dist/adapters/github/repo.d.ts +33 -0
  82. package/dist/adapters/github/repo.d.ts.map +1 -0
  83. package/dist/adapters/github/repo.js +141 -0
  84. package/dist/adapters/github/repo.js.map +1 -0
  85. package/dist/adapters/github/tool-pack.d.ts +14 -0
  86. package/dist/adapters/github/tool-pack.d.ts.map +1 -0
  87. package/dist/adapters/github/tool-pack.js +55 -0
  88. package/dist/adapters/github/tool-pack.js.map +1 -0
  89. package/dist/adapters/github/tools/checks.d.ts +18 -0
  90. package/dist/adapters/github/tools/checks.d.ts.map +1 -0
  91. package/dist/adapters/github/tools/checks.js +86 -0
  92. package/dist/adapters/github/tools/checks.js.map +1 -0
  93. package/dist/adapters/github/tools/issue.d.ts +21 -0
  94. package/dist/adapters/github/tools/issue.d.ts.map +1 -0
  95. package/dist/adapters/github/tools/issue.js +48 -0
  96. package/dist/adapters/github/tools/issue.js.map +1 -0
  97. package/dist/adapters/github/tools/pr.d.ts +22 -0
  98. package/dist/adapters/github/tools/pr.d.ts.map +1 -0
  99. package/dist/adapters/github/tools/pr.js +48 -0
  100. package/dist/adapters/github/tools/pr.js.map +1 -0
  101. package/dist/adapters/github/tools/read.d.ts +21 -0
  102. package/dist/adapters/github/tools/read.d.ts.map +1 -0
  103. package/dist/adapters/github/tools/read.js +141 -0
  104. package/dist/adapters/github/tools/read.js.map +1 -0
  105. package/dist/adapters/github/tools/review-reply.d.ts +17 -0
  106. package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
  107. package/dist/adapters/github/tools/review-reply.js +38 -0
  108. package/dist/adapters/github/tools/review-reply.js.map +1 -0
  109. package/dist/adapters/github/tools/sync.d.ts +17 -0
  110. package/dist/adapters/github/tools/sync.d.ts.map +1 -0
  111. package/dist/adapters/github/tools/sync.js +34 -0
  112. package/dist/adapters/github/tools/sync.js.map +1 -0
  113. package/dist/adapters/github/types.d.ts +345 -0
  114. package/dist/adapters/github/types.d.ts.map +1 -0
  115. package/dist/adapters/github/types.js.map +1 -0
  116. package/dist/adapters/github/webhook.d.ts +20 -0
  117. package/dist/adapters/github/webhook.d.ts.map +1 -0
  118. package/dist/adapters/github/webhook.js +78 -0
  119. package/dist/adapters/github/webhook.js.map +1 -0
  120. package/dist/adapters/index.d.ts +12 -0
  121. package/dist/adapters/index.d.ts.map +1 -0
  122. package/dist/adapters/index.js +19 -0
  123. package/dist/adapters/index.js.map +1 -0
  124. package/dist/adapters/intake.d.ts +17 -6
  125. package/dist/adapters/intake.d.ts.map +1 -1
  126. package/dist/adapters/intake.js +96 -27
  127. package/dist/adapters/intake.js.map +1 -1
  128. package/dist/adapters/markdown-tables.d.ts +19 -0
  129. package/dist/adapters/markdown-tables.d.ts.map +1 -0
  130. package/dist/adapters/markdown-tables.js +152 -0
  131. package/dist/adapters/markdown-tables.js.map +1 -0
  132. package/dist/{platform-messages.d.ts → adapters/messages.d.ts} +3 -2
  133. package/dist/adapters/messages.d.ts.map +1 -0
  134. package/dist/{platform-messages.js → adapters/messages.js} +4 -1
  135. package/dist/adapters/messages.js.map +1 -0
  136. package/dist/adapters/progressive-renderer.d.ts +7 -0
  137. package/dist/adapters/progressive-renderer.d.ts.map +1 -0
  138. package/dist/adapters/progressive-renderer.js +443 -0
  139. package/dist/adapters/progressive-renderer.js.map +1 -0
  140. package/dist/adapters/shared.d.ts +37 -11
  141. package/dist/adapters/shared.d.ts.map +1 -1
  142. package/dist/adapters/shared.js +130 -24
  143. package/dist/adapters/shared.js.map +1 -1
  144. package/dist/adapters/slack/assistant.d.ts +73 -0
  145. package/dist/adapters/slack/assistant.d.ts.map +1 -0
  146. package/dist/adapters/slack/assistant.js +205 -0
  147. package/dist/adapters/slack/assistant.js.map +1 -0
  148. package/dist/adapters/slack/auto-reply-context.d.ts +21 -0
  149. package/dist/adapters/slack/auto-reply-context.d.ts.map +1 -0
  150. package/dist/adapters/slack/auto-reply-context.js +28 -0
  151. package/dist/adapters/slack/auto-reply-context.js.map +1 -0
  152. package/dist/adapters/slack/blocks.d.ts +14 -0
  153. package/dist/adapters/slack/blocks.d.ts.map +1 -1
  154. package/dist/adapters/slack/blocks.js +104 -148
  155. package/dist/adapters/slack/blocks.js.map +1 -1
  156. package/dist/adapters/slack/bot.d.ts +154 -21
  157. package/dist/adapters/slack/bot.d.ts.map +1 -1
  158. package/dist/adapters/slack/bot.js +1037 -484
  159. package/dist/adapters/slack/bot.js.map +1 -1
  160. package/dist/adapters/slack/context.d.ts +2 -6
  161. package/dist/adapters/slack/context.d.ts.map +1 -1
  162. package/dist/adapters/slack/context.js +11 -17
  163. package/dist/adapters/slack/context.js.map +1 -1
  164. package/dist/adapters/slack/jev-context.d.ts +30 -0
  165. package/dist/adapters/slack/jev-context.d.ts.map +1 -0
  166. package/dist/adapters/slack/jev-context.js +67 -0
  167. package/dist/adapters/slack/jev-context.js.map +1 -0
  168. package/dist/adapters/slack/markdown.d.ts +3 -0
  169. package/dist/adapters/slack/markdown.d.ts.map +1 -0
  170. package/dist/adapters/slack/markdown.js +48 -0
  171. package/dist/adapters/slack/markdown.js.map +1 -0
  172. package/dist/adapters/slack/persona.d.ts +15 -0
  173. package/dist/adapters/slack/persona.d.ts.map +1 -0
  174. package/dist/adapters/slack/persona.js +22 -0
  175. package/dist/adapters/slack/persona.js.map +1 -0
  176. package/dist/adapters/slack/response-lifecycle.d.ts +1 -1
  177. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  178. package/dist/adapters/slack/response-lifecycle.js +261 -345
  179. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  180. package/dist/adapters/slack/session.d.ts.map +1 -1
  181. package/dist/adapters/slack/session.js +7 -11
  182. package/dist/adapters/slack/session.js.map +1 -1
  183. package/dist/adapters/slack/stream-limits.d.ts +35 -0
  184. package/dist/adapters/slack/stream-limits.d.ts.map +1 -0
  185. package/dist/adapters/slack/stream-limits.js +56 -0
  186. package/dist/adapters/slack/stream-limits.js.map +1 -0
  187. package/dist/adapters/slack/task-intent.d.ts +32 -0
  188. package/dist/adapters/slack/task-intent.d.ts.map +1 -0
  189. package/dist/adapters/slack/task-intent.js +72 -0
  190. package/dist/adapters/slack/task-intent.js.map +1 -0
  191. package/dist/adapters/slack/task-status.d.ts +7 -0
  192. package/dist/adapters/slack/task-status.d.ts.map +1 -0
  193. package/dist/adapters/slack/task-status.js +107 -0
  194. package/dist/adapters/slack/task-status.js.map +1 -0
  195. package/dist/adapters/slack/tool-pack.d.ts +11 -0
  196. package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
  197. package/dist/adapters/slack/tool-pack.js +45 -0
  198. package/dist/adapters/slack/tool-pack.js.map +1 -0
  199. package/dist/adapters/slack/tools/blockkit.d.ts +14 -0
  200. package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
  201. package/dist/adapters/slack/tools/blockkit.js +106 -0
  202. package/dist/adapters/slack/tools/blockkit.js.map +1 -0
  203. package/dist/adapters/slack/types.d.ts +73 -2
  204. package/dist/adapters/slack/types.d.ts.map +1 -1
  205. package/dist/adapters/slack/types.js.map +1 -1
  206. package/dist/adapters/slack/update-diagnostics.d.ts +14 -0
  207. package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -0
  208. package/dist/adapters/slack/update-diagnostics.js +134 -0
  209. package/dist/adapters/slack/update-diagnostics.js.map +1 -0
  210. package/dist/adapters/telegram/bot.d.ts +10 -9
  211. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  212. package/dist/adapters/telegram/bot.js +133 -202
  213. package/dist/adapters/telegram/bot.js.map +1 -1
  214. package/dist/adapters/telegram/context.d.ts +2 -6
  215. package/dist/adapters/telegram/context.d.ts.map +1 -1
  216. package/dist/adapters/telegram/context.js +53 -190
  217. package/dist/adapters/telegram/context.js.map +1 -1
  218. package/dist/adapters/telegram/types.d.ts +1 -1
  219. package/dist/adapters/telegram/types.d.ts.map +1 -1
  220. package/dist/adapters/telegram/types.js.map +1 -1
  221. package/dist/adapters/types.d.ts +144 -13
  222. package/dist/adapters/types.d.ts.map +1 -1
  223. package/dist/adapters/types.js.map +1 -1
  224. package/dist/adapters/web/admin/portal.d.ts +44 -0
  225. package/dist/adapters/web/admin/portal.d.ts.map +1 -0
  226. package/dist/adapters/web/admin/portal.js +3207 -0
  227. package/dist/adapters/web/admin/portal.js.map +1 -0
  228. package/dist/{web → adapters/web}/admin/provider-models.d.ts +1 -1
  229. package/dist/adapters/web/admin/provider-models.d.ts.map +1 -0
  230. package/dist/{web → adapters/web}/admin/provider-models.js +1 -1
  231. package/dist/adapters/web/admin/provider-models.js.map +1 -0
  232. package/dist/adapters/web/admin/types.d.ts +53 -0
  233. package/dist/adapters/web/admin/types.d.ts.map +1 -0
  234. package/dist/adapters/web/admin/types.js.map +1 -0
  235. package/dist/adapters/web/login/oauth.d.ts +5 -0
  236. package/dist/adapters/web/login/oauth.d.ts.map +1 -0
  237. package/dist/{web → adapters/web}/login/oauth.js +50 -85
  238. package/dist/adapters/web/login/oauth.js.map +1 -0
  239. package/dist/{web → adapters/web}/login/portal.d.ts +9 -3
  240. package/dist/adapters/web/login/portal.d.ts.map +1 -0
  241. package/dist/{web → adapters/web}/login/portal.js +161 -119
  242. package/dist/adapters/web/login/portal.js.map +1 -0
  243. package/dist/{web → adapters/web}/login/types.d.ts +1 -12
  244. package/dist/adapters/web/login/types.d.ts.map +1 -0
  245. package/dist/adapters/web/login/types.js.map +1 -0
  246. package/dist/adapters/web/portal-shell.d.ts +22 -0
  247. package/dist/adapters/web/portal-shell.d.ts.map +1 -0
  248. package/dist/{portal-shell.js → adapters/web/portal-shell.js} +78 -2
  249. package/dist/adapters/web/portal-shell.js.map +1 -0
  250. package/dist/{web → adapters/web}/server.d.ts +14 -8
  251. package/dist/adapters/web/server.d.ts.map +1 -0
  252. package/dist/{web → adapters/web}/server.js +14 -7
  253. package/dist/adapters/web/server.js.map +1 -0
  254. package/dist/adapters/web/session-view/portal.d.ts +20 -0
  255. package/dist/adapters/web/session-view/portal.d.ts.map +1 -0
  256. package/dist/{web → adapters/web}/session-view/portal.js +633 -162
  257. package/dist/adapters/web/session-view/portal.js.map +1 -0
  258. package/dist/{web → adapters/web}/session-view/types.d.ts +11 -6
  259. package/dist/adapters/web/session-view/types.d.ts.map +1 -0
  260. package/dist/adapters/web/session-view/types.js.map +1 -0
  261. package/dist/adapters/web/token-store.d.ts.map +1 -0
  262. package/dist/{web → adapters/web}/token-store.js +1 -1
  263. package/dist/adapters/web/token-store.js.map +1 -0
  264. package/dist/adapters/web/types.d.ts.map +1 -0
  265. package/dist/adapters/web/types.js.map +1 -0
  266. package/dist/cli/arg-grammar.d.ts +11 -0
  267. package/dist/cli/arg-grammar.d.ts.map +1 -0
  268. package/dist/cli/arg-grammar.js +50 -0
  269. package/dist/cli/arg-grammar.js.map +1 -0
  270. package/dist/cli/boot.d.ts +5 -0
  271. package/dist/cli/boot.d.ts.map +1 -0
  272. package/dist/cli/boot.js +90 -0
  273. package/dist/cli/boot.js.map +1 -0
  274. package/dist/cli/download.d.ts.map +1 -0
  275. package/dist/cli/download.js +88 -0
  276. package/dist/cli/download.js.map +1 -0
  277. package/dist/cli/office.d.ts +2 -0
  278. package/dist/cli/office.d.ts.map +1 -0
  279. package/dist/cli/office.js +181 -0
  280. package/dist/cli/office.js.map +1 -0
  281. package/dist/cli/onboard.d.ts +10 -0
  282. package/dist/cli/onboard.d.ts.map +1 -0
  283. package/dist/cli/onboard.js +225 -0
  284. package/dist/cli/onboard.js.map +1 -0
  285. package/dist/cli/process-lifecycle.d.ts +19 -0
  286. package/dist/cli/process-lifecycle.d.ts.map +1 -0
  287. package/dist/cli/process-lifecycle.js +67 -0
  288. package/dist/cli/process-lifecycle.js.map +1 -0
  289. package/dist/cli/sessions.d.ts +2 -0
  290. package/dist/cli/sessions.d.ts.map +1 -0
  291. package/dist/cli/sessions.js +88 -0
  292. package/dist/cli/sessions.js.map +1 -0
  293. package/dist/cli/types.d.ts +25 -0
  294. package/dist/cli/types.d.ts.map +1 -0
  295. package/dist/cli/types.js.map +1 -0
  296. package/dist/dream/index.d.ts +20 -0
  297. package/dist/dream/index.d.ts.map +1 -0
  298. package/dist/dream/index.js +264 -0
  299. package/dist/dream/index.js.map +1 -0
  300. package/dist/dream/types.d.ts +30 -0
  301. package/dist/dream/types.d.ts.map +1 -0
  302. package/dist/dream/types.js +2 -0
  303. package/dist/dream/types.js.map +1 -0
  304. package/dist/env-manifest.d.ts +38 -0
  305. package/dist/env-manifest.d.ts.map +1 -0
  306. package/dist/env-manifest.js +260 -0
  307. package/dist/env-manifest.js.map +1 -0
  308. package/dist/events/index.d.ts +172 -0
  309. package/dist/events/index.d.ts.map +1 -0
  310. package/dist/events/index.js +340 -0
  311. package/dist/events/index.js.map +1 -0
  312. package/dist/events/scheduler.d.ts +34 -0
  313. package/dist/events/scheduler.d.ts.map +1 -0
  314. package/dist/events/scheduler.js +231 -0
  315. package/dist/events/scheduler.js.map +1 -0
  316. package/dist/file-guards.d.ts +26 -0
  317. package/dist/file-guards.d.ts.map +1 -0
  318. package/dist/file-guards.js +133 -0
  319. package/dist/file-guards.js.map +1 -0
  320. package/dist/harness/execution-env.d.ts +19 -0
  321. package/dist/harness/execution-env.d.ts.map +1 -0
  322. package/dist/harness/execution-env.js +262 -0
  323. package/dist/harness/execution-env.js.map +1 -0
  324. package/dist/harness/execution-resolver.d.ts +25 -0
  325. package/dist/harness/execution-resolver.d.ts.map +1 -0
  326. package/dist/harness/execution-resolver.js +156 -0
  327. package/dist/harness/execution-resolver.js.map +1 -0
  328. package/dist/harness/index.d.ts +18 -13
  329. package/dist/harness/index.d.ts.map +1 -1
  330. package/dist/harness/index.js +11 -11
  331. package/dist/harness/index.js.map +1 -1
  332. package/dist/harness/jev.d.ts +86 -0
  333. package/dist/harness/jev.d.ts.map +1 -0
  334. package/dist/harness/jev.js +167 -0
  335. package/dist/harness/jev.js.map +1 -0
  336. package/dist/harness/mcp.d.ts +38 -0
  337. package/dist/harness/mcp.d.ts.map +1 -0
  338. package/dist/harness/mcp.js +304 -0
  339. package/dist/harness/mcp.js.map +1 -0
  340. package/dist/harness/models.d.ts +7 -4
  341. package/dist/harness/models.d.ts.map +1 -1
  342. package/dist/harness/models.js +54 -55
  343. package/dist/harness/models.js.map +1 -1
  344. package/dist/harness/open-connector.d.ts +25 -0
  345. package/dist/harness/open-connector.d.ts.map +1 -0
  346. package/dist/harness/open-connector.js +178 -0
  347. package/dist/harness/open-connector.js.map +1 -0
  348. package/dist/harness/presenter.d.ts +31 -0
  349. package/dist/harness/presenter.d.ts.map +1 -0
  350. package/dist/harness/presenter.js +859 -0
  351. package/dist/harness/presenter.js.map +1 -0
  352. package/dist/harness/prompt.d.ts +30 -0
  353. package/dist/harness/prompt.d.ts.map +1 -0
  354. package/dist/harness/prompt.js +429 -0
  355. package/dist/harness/prompt.js.map +1 -0
  356. package/dist/harness/runner.d.ts +2 -123
  357. package/dist/harness/runner.d.ts.map +1 -1
  358. package/dist/harness/runner.js +551 -416
  359. package/dist/harness/runner.js.map +1 -1
  360. package/dist/harness/session.d.ts +122 -0
  361. package/dist/harness/session.d.ts.map +1 -0
  362. package/dist/harness/session.js +581 -0
  363. package/dist/harness/session.js.map +1 -0
  364. package/dist/harness/skills.d.ts +17 -28
  365. package/dist/harness/skills.d.ts.map +1 -1
  366. package/dist/harness/skills.js +104 -39
  367. package/dist/harness/skills.js.map +1 -1
  368. package/dist/harness/subagent-profiles.d.ts +8 -0
  369. package/dist/harness/subagent-profiles.d.ts.map +1 -0
  370. package/dist/harness/subagent-profiles.js +284 -0
  371. package/dist/harness/subagent-profiles.js.map +1 -0
  372. package/dist/harness/subagent.d.ts +64 -0
  373. package/dist/harness/subagent.d.ts.map +1 -0
  374. package/dist/harness/subagent.js +687 -0
  375. package/dist/harness/subagent.js.map +1 -0
  376. package/dist/harness/tools/attach.d.ts.map +1 -0
  377. package/dist/{adapters/slack → harness}/tools/attach.js +1 -1
  378. package/dist/harness/tools/attach.js.map +1 -0
  379. package/dist/{tools → harness/tools}/event.d.ts +4 -33
  380. package/dist/harness/tools/event.d.ts.map +1 -0
  381. package/dist/harness/tools/event.js +175 -0
  382. package/dist/harness/tools/event.js.map +1 -0
  383. package/dist/harness/tools/generate-image.d.ts +23 -0
  384. package/dist/harness/tools/generate-image.d.ts.map +1 -0
  385. package/dist/harness/tools/generate-image.js +65 -0
  386. package/dist/harness/tools/generate-image.js.map +1 -0
  387. package/dist/harness/tools/host-fn-tool.d.ts +21 -0
  388. package/dist/harness/tools/host-fn-tool.d.ts.map +1 -0
  389. package/dist/harness/tools/host-fn-tool.js +32 -0
  390. package/dist/harness/tools/host-fn-tool.js.map +1 -0
  391. package/dist/harness/tools/index.d.ts +41 -0
  392. package/dist/harness/tools/index.d.ts.map +1 -0
  393. package/dist/harness/tools/index.js +51 -0
  394. package/dist/harness/tools/index.js.map +1 -0
  395. package/dist/harness/tools/jev.d.ts +21 -0
  396. package/dist/harness/tools/jev.d.ts.map +1 -0
  397. package/dist/harness/tools/jev.js +109 -0
  398. package/dist/harness/tools/jev.js.map +1 -0
  399. package/dist/harness/tools/pi-tools.d.ts +18 -0
  400. package/dist/harness/tools/pi-tools.d.ts.map +1 -0
  401. package/dist/harness/tools/pi-tools.js +84 -0
  402. package/dist/harness/tools/pi-tools.js.map +1 -0
  403. package/dist/harness/tools/react.d.ts.map +1 -0
  404. package/dist/{tools → harness/tools}/react.js +6 -17
  405. package/dist/harness/tools/react.js.map +1 -0
  406. package/dist/{tools → harness/tools}/sandbox.d.ts +4 -4
  407. package/dist/harness/tools/sandbox.d.ts.map +1 -0
  408. package/dist/{tools → harness/tools}/sandbox.js +12 -8
  409. package/dist/harness/tools/sandbox.js.map +1 -0
  410. package/dist/harness/tools/subagent.d.ts +88 -0
  411. package/dist/harness/tools/subagent.d.ts.map +1 -0
  412. package/dist/harness/tools/subagent.js +681 -0
  413. package/dist/harness/tools/subagent.js.map +1 -0
  414. package/dist/harness/tools/task.d.ts +20 -0
  415. package/dist/harness/tools/task.d.ts.map +1 -0
  416. package/dist/harness/tools/task.js +79 -0
  417. package/dist/harness/tools/task.js.map +1 -0
  418. package/dist/harness/tools/types.d.ts +29 -0
  419. package/dist/harness/tools/types.d.ts.map +1 -0
  420. package/dist/harness/tools/types.js +2 -0
  421. package/dist/harness/tools/types.js.map +1 -0
  422. package/dist/harness/types.d.ts +384 -25
  423. package/dist/harness/types.d.ts.map +1 -1
  424. package/dist/harness/types.js +1 -1
  425. package/dist/harness/types.js.map +1 -1
  426. package/dist/index.d.ts +33 -9
  427. package/dist/index.d.ts.map +1 -1
  428. package/dist/index.js +19 -6
  429. package/dist/index.js.map +1 -1
  430. package/dist/main.js +357 -198
  431. package/dist/main.js.map +1 -1
  432. package/dist/observability/index.d.ts +33 -0
  433. package/dist/observability/index.d.ts.map +1 -0
  434. package/dist/observability/index.js +257 -0
  435. package/dist/observability/index.js.map +1 -0
  436. package/dist/observability/instrument.js +14 -6
  437. package/dist/observability/instrument.js.map +1 -1
  438. package/dist/observability/otel.d.ts +10 -0
  439. package/dist/observability/otel.d.ts.map +1 -0
  440. package/dist/observability/otel.js +183 -0
  441. package/dist/observability/otel.js.map +1 -0
  442. package/dist/observability/sentry.d.ts +40 -7
  443. package/dist/observability/sentry.d.ts.map +1 -1
  444. package/dist/observability/sentry.js +176 -32
  445. package/dist/observability/sentry.js.map +1 -1
  446. package/dist/observability/types.d.ts +24 -3
  447. package/dist/observability/types.d.ts.map +1 -1
  448. package/dist/observability/types.js.map +1 -1
  449. package/dist/office/index.d.ts +139 -0
  450. package/dist/office/index.d.ts.map +1 -0
  451. package/dist/office/index.js +1084 -0
  452. package/dist/office/index.js.map +1 -0
  453. package/dist/office/projection.d.ts +42 -0
  454. package/dist/office/projection.d.ts.map +1 -0
  455. package/dist/office/projection.js +182 -0
  456. package/dist/office/projection.js.map +1 -0
  457. package/dist/office/types.d.ts +116 -0
  458. package/dist/office/types.d.ts.map +1 -0
  459. package/dist/office/types.js +2 -0
  460. package/dist/office/types.js.map +1 -0
  461. package/dist/runtime/conversation-runtime.d.ts +1 -1
  462. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  463. package/dist/runtime/conversation-runtime.js +423 -152
  464. package/dist/runtime/conversation-runtime.js.map +1 -1
  465. package/dist/runtime/session-lifecycle.d.ts +76 -0
  466. package/dist/runtime/session-lifecycle.d.ts.map +1 -0
  467. package/dist/runtime/session-lifecycle.js +404 -0
  468. package/dist/runtime/session-lifecycle.js.map +1 -0
  469. package/dist/runtime/types.d.ts +63 -15
  470. package/dist/runtime/types.d.ts.map +1 -1
  471. package/dist/runtime/types.js.map +1 -1
  472. package/dist/sandbox/cloudflare.d.ts +4 -0
  473. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  474. package/dist/sandbox/cloudflare.js +54 -52
  475. package/dist/sandbox/cloudflare.js.map +1 -1
  476. package/dist/sandbox/container.d.ts +3 -0
  477. package/dist/sandbox/container.d.ts.map +1 -1
  478. package/dist/sandbox/container.js +19 -7
  479. package/dist/sandbox/container.js.map +1 -1
  480. package/dist/sandbox/host.d.ts +3 -0
  481. package/dist/sandbox/host.d.ts.map +1 -1
  482. package/dist/sandbox/host.js +44 -35
  483. package/dist/sandbox/host.js.map +1 -1
  484. package/dist/sandbox/identity.d.ts +42 -0
  485. package/dist/sandbox/identity.d.ts.map +1 -0
  486. package/dist/sandbox/identity.js +77 -0
  487. package/dist/sandbox/identity.js.map +1 -0
  488. package/dist/sandbox/index.d.ts +24 -6
  489. package/dist/sandbox/index.d.ts.map +1 -1
  490. package/dist/sandbox/index.js +77 -17
  491. package/dist/sandbox/index.js.map +1 -1
  492. package/dist/sandbox/provisioner.d.ts +139 -0
  493. package/dist/sandbox/provisioner.d.ts.map +1 -0
  494. package/dist/{provisioner.js → sandbox/provisioner.js} +377 -20
  495. package/dist/sandbox/provisioner.js.map +1 -0
  496. package/dist/sandbox/types.d.ts +43 -9
  497. package/dist/sandbox/types.d.ts.map +1 -1
  498. package/dist/sandbox/types.js.map +1 -1
  499. package/dist/sandbox/utils.d.ts +24 -0
  500. package/dist/sandbox/utils.d.ts.map +1 -1
  501. package/dist/sandbox/utils.js +92 -1
  502. package/dist/sandbox/utils.js.map +1 -1
  503. package/dist/sessions/chat-history-sync.d.ts +23 -0
  504. package/dist/sessions/chat-history-sync.d.ts.map +1 -0
  505. package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +239 -175
  506. package/dist/sessions/chat-history-sync.js.map +1 -0
  507. package/dist/sessions/history-line.d.ts +29 -0
  508. package/dist/sessions/history-line.d.ts.map +1 -0
  509. package/dist/sessions/history-line.js +45 -0
  510. package/dist/sessions/history-line.js.map +1 -0
  511. package/dist/sessions/migrate-common.d.ts +43 -0
  512. package/dist/sessions/migrate-common.d.ts.map +1 -0
  513. package/dist/sessions/migrate-common.js +99 -0
  514. package/dist/sessions/migrate-common.js.map +1 -0
  515. package/dist/sessions/migrate-pi-084.d.ts +8 -0
  516. package/dist/sessions/migrate-pi-084.d.ts.map +1 -0
  517. package/dist/sessions/migrate-pi-084.js +302 -0
  518. package/dist/sessions/migrate-pi-084.js.map +1 -0
  519. package/dist/sessions/migrate-v3.d.ts +15 -0
  520. package/dist/sessions/migrate-v3.d.ts.map +1 -0
  521. package/dist/sessions/migrate-v3.js +419 -0
  522. package/dist/sessions/migrate-v3.js.map +1 -0
  523. package/dist/sessions/session-key.d.ts +33 -0
  524. package/dist/sessions/session-key.d.ts.map +1 -0
  525. package/dist/sessions/session-key.js +115 -0
  526. package/dist/sessions/session-key.js.map +1 -0
  527. package/dist/sessions/session-store.d.ts +61 -0
  528. package/dist/sessions/session-store.d.ts.map +1 -0
  529. package/dist/sessions/session-store.js +684 -0
  530. package/dist/sessions/session-store.js.map +1 -0
  531. package/dist/sessions/store.d.ts +17 -10
  532. package/dist/sessions/store.d.ts.map +1 -1
  533. package/dist/sessions/store.js +182 -47
  534. package/dist/sessions/store.js.map +1 -1
  535. package/dist/sessions/types.d.ts +74 -8
  536. package/dist/sessions/types.d.ts.map +1 -1
  537. package/dist/sessions/types.js +1 -1
  538. package/dist/sessions/types.js.map +1 -1
  539. package/dist/settings/apply.d.ts +16 -0
  540. package/dist/settings/apply.d.ts.map +1 -0
  541. package/dist/settings/apply.js +60 -0
  542. package/dist/settings/apply.js.map +1 -0
  543. package/dist/settings/index.d.ts +126 -0
  544. package/dist/settings/index.d.ts.map +1 -0
  545. package/dist/settings/index.js +422 -0
  546. package/dist/settings/index.js.map +1 -0
  547. package/dist/settings/migrate.d.ts +21 -0
  548. package/dist/settings/migrate.d.ts.map +1 -0
  549. package/dist/settings/migrate.js +86 -0
  550. package/dist/settings/migrate.js.map +1 -0
  551. package/dist/types.d.ts +330 -141
  552. package/dist/types.d.ts.map +1 -1
  553. package/dist/types.js +2 -2
  554. package/dist/types.js.map +1 -1
  555. package/dist/vault/index.d.ts +52 -2
  556. package/dist/vault/index.d.ts.map +1 -1
  557. package/dist/vault/index.js +218 -86
  558. package/dist/vault/index.js.map +1 -1
  559. package/dist/vault/types.d.ts +6 -2
  560. package/dist/vault/types.d.ts.map +1 -1
  561. package/dist/vault/types.js.map +1 -1
  562. package/package.json +79 -40
  563. package/dist/adapter.d.ts +0 -2
  564. package/dist/adapter.d.ts.map +0 -1
  565. package/dist/adapter.js +0 -2
  566. package/dist/adapter.js.map +0 -1
  567. package/dist/adapters/slack/tools/attach.d.ts.map +0 -1
  568. package/dist/adapters/slack/tools/attach.js.map +0 -1
  569. package/dist/adapters/streaming.d.ts +0 -18
  570. package/dist/adapters/streaming.d.ts.map +0 -1
  571. package/dist/adapters/streaming.js +0 -44
  572. package/dist/adapters/streaming.js.map +0 -1
  573. package/dist/adapters/telegram/html.d.ts +0 -3
  574. package/dist/adapters/telegram/html.d.ts.map +0 -1
  575. package/dist/adapters/telegram/html.js +0 -98
  576. package/dist/adapters/telegram/html.js.map +0 -1
  577. package/dist/agent-events.d.ts +0 -5
  578. package/dist/agent-events.d.ts.map +0 -1
  579. package/dist/agent-events.js +0 -26
  580. package/dist/agent-events.js.map +0 -1
  581. package/dist/agent.d.ts +0 -39
  582. package/dist/agent.d.ts.map +0 -1
  583. package/dist/agent.js +0 -1291
  584. package/dist/agent.js.map +0 -1
  585. package/dist/cli/ext-git.d.ts +0 -22
  586. package/dist/cli/ext-git.d.ts.map +0 -1
  587. package/dist/cli/ext-git.js +0 -76
  588. package/dist/cli/ext-git.js.map +0 -1
  589. package/dist/cli/ext.d.ts +0 -2
  590. package/dist/cli/ext.d.ts.map +0 -1
  591. package/dist/cli/ext.js +0 -217
  592. package/dist/cli/ext.js.map +0 -1
  593. package/dist/commands/admin.d.ts.map +0 -1
  594. package/dist/commands/admin.js.map +0 -1
  595. package/dist/commands/auto-reply.d.ts.map +0 -1
  596. package/dist/commands/auto-reply.js +0 -76
  597. package/dist/commands/auto-reply.js.map +0 -1
  598. package/dist/commands/extensions.d.ts +0 -14
  599. package/dist/commands/extensions.d.ts.map +0 -1
  600. package/dist/commands/extensions.js +0 -55
  601. package/dist/commands/extensions.js.map +0 -1
  602. package/dist/commands/login.d.ts +0 -5
  603. package/dist/commands/login.d.ts.map +0 -1
  604. package/dist/commands/login.js +0 -115
  605. package/dist/commands/login.js.map +0 -1
  606. package/dist/commands/model.d.ts +0 -10
  607. package/dist/commands/model.d.ts.map +0 -1
  608. package/dist/commands/model.js +0 -102
  609. package/dist/commands/model.js.map +0 -1
  610. package/dist/commands/new.d.ts.map +0 -1
  611. package/dist/commands/new.js +0 -25
  612. package/dist/commands/new.js.map +0 -1
  613. package/dist/commands/parse.d.ts +0 -7
  614. package/dist/commands/parse.d.ts.map +0 -1
  615. package/dist/commands/parse.js +0 -14
  616. package/dist/commands/parse.js.map +0 -1
  617. package/dist/commands/registry.d.ts +0 -5
  618. package/dist/commands/registry.d.ts.map +0 -1
  619. package/dist/commands/registry.js +0 -31
  620. package/dist/commands/registry.js.map +0 -1
  621. package/dist/commands/sandbox.d.ts.map +0 -1
  622. package/dist/commands/sandbox.js +0 -78
  623. package/dist/commands/sandbox.js.map +0 -1
  624. package/dist/commands/session-view.d.ts.map +0 -1
  625. package/dist/commands/session-view.js.map +0 -1
  626. package/dist/commands/types.d.ts +0 -66
  627. package/dist/commands/types.d.ts.map +0 -1
  628. package/dist/commands/types.js.map +0 -1
  629. package/dist/commands/utils.d.ts +0 -11
  630. package/dist/commands/utils.d.ts.map +0 -1
  631. package/dist/commands/utils.js.map +0 -1
  632. package/dist/config.d.ts +0 -78
  633. package/dist/config.d.ts.map +0 -1
  634. package/dist/config.js +0 -450
  635. package/dist/config.js.map +0 -1
  636. package/dist/download.d.ts.map +0 -1
  637. package/dist/download.js +0 -89
  638. package/dist/download.js.map +0 -1
  639. package/dist/events.d.ts +0 -43
  640. package/dist/events.d.ts.map +0 -1
  641. package/dist/events.js +0 -456
  642. package/dist/events.js.map +0 -1
  643. package/dist/execution-resolver.d.ts +0 -21
  644. package/dist/execution-resolver.d.ts.map +0 -1
  645. package/dist/execution-resolver.js +0 -170
  646. package/dist/execution-resolver.js.map +0 -1
  647. package/dist/harness/auth.d.ts +0 -16
  648. package/dist/harness/auth.d.ts.map +0 -1
  649. package/dist/harness/auth.js +0 -86
  650. package/dist/harness/auth.js.map +0 -1
  651. package/dist/harness/extensions/loader.d.ts +0 -86
  652. package/dist/harness/extensions/loader.d.ts.map +0 -1
  653. package/dist/harness/extensions/loader.js +0 -525
  654. package/dist/harness/extensions/loader.js.map +0 -1
  655. package/dist/harness/extensions/registry.d.ts +0 -23
  656. package/dist/harness/extensions/registry.d.ts.map +0 -1
  657. package/dist/harness/extensions/registry.js +0 -45
  658. package/dist/harness/extensions/registry.js.map +0 -1
  659. package/dist/harness/extensions/types.d.ts +0 -248
  660. package/dist/harness/extensions/types.d.ts.map +0 -1
  661. package/dist/harness/extensions/types.js.map +0 -1
  662. package/dist/harness/session-store.d.ts +0 -77
  663. package/dist/harness/session-store.d.ts.map +0 -1
  664. package/dist/harness/session-store.js +0 -248
  665. package/dist/harness/session-store.js.map +0 -1
  666. package/dist/harness/settings.d.ts +0 -47
  667. package/dist/harness/settings.d.ts.map +0 -1
  668. package/dist/harness/settings.js +0 -29
  669. package/dist/harness/settings.js.map +0 -1
  670. package/dist/model-registry.d.ts +0 -4
  671. package/dist/model-registry.d.ts.map +0 -1
  672. package/dist/model-registry.js +0 -7
  673. package/dist/model-registry.js.map +0 -1
  674. package/dist/platform-messages.d.ts.map +0 -1
  675. package/dist/platform-messages.js.map +0 -1
  676. package/dist/portal-shell.d.ts +0 -4
  677. package/dist/portal-shell.d.ts.map +0 -1
  678. package/dist/portal-shell.js.map +0 -1
  679. package/dist/provisioner.d.ts +0 -61
  680. package/dist/provisioner.d.ts.map +0 -1
  681. package/dist/provisioner.js.map +0 -1
  682. package/dist/runtime/agent-run-controller.d.ts +0 -31
  683. package/dist/runtime/agent-run-controller.d.ts.map +0 -1
  684. package/dist/runtime/agent-run-controller.js +0 -195
  685. package/dist/runtime/agent-run-controller.js.map +0 -1
  686. package/dist/sandbox/errors.d.ts +0 -6
  687. package/dist/sandbox/errors.d.ts.map +0 -1
  688. package/dist/sandbox/errors.js +0 -11
  689. package/dist/sandbox/errors.js.map +0 -1
  690. package/dist/sandbox/firecracker.d.ts +0 -15
  691. package/dist/sandbox/firecracker.d.ts.map +0 -1
  692. package/dist/sandbox/firecracker.js +0 -212
  693. package/dist/sandbox/firecracker.js.map +0 -1
  694. package/dist/sandbox/image.d.ts +0 -3
  695. package/dist/sandbox/image.d.ts.map +0 -1
  696. package/dist/sandbox/image.js +0 -27
  697. package/dist/sandbox/image.js.map +0 -1
  698. package/dist/sandbox/path-context.d.ts +0 -3
  699. package/dist/sandbox/path-context.d.ts.map +0 -1
  700. package/dist/sandbox/path-context.js +0 -20
  701. package/dist/sandbox/path-context.js.map +0 -1
  702. package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
  703. package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
  704. package/dist/sessions/agent-memory-file-manager.js.map +0 -1
  705. package/dist/sessions/metadata.d.ts +0 -3
  706. package/dist/sessions/metadata.d.ts.map +0 -1
  707. package/dist/sessions/metadata.js +0 -11
  708. package/dist/sessions/metadata.js.map +0 -1
  709. package/dist/sessions/policy.d.ts +0 -6
  710. package/dist/sessions/policy.d.ts.map +0 -1
  711. package/dist/sessions/policy.js +0 -23
  712. package/dist/sessions/policy.js.map +0 -1
  713. package/dist/store.d.ts +0 -46
  714. package/dist/store.d.ts.map +0 -1
  715. package/dist/store.js +0 -177
  716. package/dist/store.js.map +0 -1
  717. package/dist/tools/bash.d.ts +0 -10
  718. package/dist/tools/bash.d.ts.map +0 -1
  719. package/dist/tools/bash.js +0 -80
  720. package/dist/tools/bash.js.map +0 -1
  721. package/dist/tools/edit.d.ts +0 -11
  722. package/dist/tools/edit.d.ts.map +0 -1
  723. package/dist/tools/edit.js +0 -131
  724. package/dist/tools/edit.js.map +0 -1
  725. package/dist/tools/event.d.ts.map +0 -1
  726. package/dist/tools/event.js +0 -252
  727. package/dist/tools/event.js.map +0 -1
  728. package/dist/tools/index.d.ts +0 -24
  729. package/dist/tools/index.d.ts.map +0 -1
  730. package/dist/tools/index.js +0 -31
  731. package/dist/tools/index.js.map +0 -1
  732. package/dist/tools/react.d.ts.map +0 -1
  733. package/dist/tools/react.js.map +0 -1
  734. package/dist/tools/read.d.ts +0 -11
  735. package/dist/tools/read.d.ts.map +0 -1
  736. package/dist/tools/read.js +0 -134
  737. package/dist/tools/read.js.map +0 -1
  738. package/dist/tools/sandbox.d.ts.map +0 -1
  739. package/dist/tools/sandbox.js.map +0 -1
  740. package/dist/tools/truncate.d.ts +0 -33
  741. package/dist/tools/truncate.d.ts.map +0 -1
  742. package/dist/tools/truncate.js +0 -184
  743. package/dist/tools/truncate.js.map +0 -1
  744. package/dist/tools/types.d.ts +0 -54
  745. package/dist/tools/types.d.ts.map +0 -1
  746. package/dist/tools/types.js.map +0 -1
  747. package/dist/tools/write.d.ts +0 -10
  748. package/dist/tools/write.d.ts.map +0 -1
  749. package/dist/tools/write.js +0 -29
  750. package/dist/tools/write.js.map +0 -1
  751. package/dist/trigger.d.ts +0 -22
  752. package/dist/trigger.d.ts.map +0 -1
  753. package/dist/trigger.js +0 -100
  754. package/dist/trigger.js.map +0 -1
  755. package/dist/utils/date.d.ts +0 -10
  756. package/dist/utils/date.d.ts.map +0 -1
  757. package/dist/utils/date.js +0 -23
  758. package/dist/utils/date.js.map +0 -1
  759. package/dist/utils/env.d.ts +0 -3
  760. package/dist/utils/env.d.ts.map +0 -1
  761. package/dist/utils/env.js +0 -12
  762. package/dist/utils/env.js.map +0 -1
  763. package/dist/utils/file-guards.d.ts +0 -9
  764. package/dist/utils/file-guards.d.ts.map +0 -1
  765. package/dist/utils/file-guards.js +0 -59
  766. package/dist/utils/file-guards.js.map +0 -1
  767. package/dist/utils/fs-atomic.d.ts +0 -10
  768. package/dist/utils/fs-atomic.d.ts.map +0 -1
  769. package/dist/utils/fs-atomic.js +0 -45
  770. package/dist/utils/fs-atomic.js.map +0 -1
  771. package/dist/utils/html.d.ts +0 -2
  772. package/dist/utils/html.d.ts.map +0 -1
  773. package/dist/utils/html.js +0 -4
  774. package/dist/utils/html.js.map +0 -1
  775. package/dist/utils/http-body.d.ts +0 -10
  776. package/dist/utils/http-body.d.ts.map +0 -1
  777. package/dist/utils/http-body.js +0 -34
  778. package/dist/utils/http-body.js.map +0 -1
  779. package/dist/vault/routing.d.ts +0 -3
  780. package/dist/vault/routing.d.ts.map +0 -1
  781. package/dist/vault/routing.js +0 -13
  782. package/dist/vault/routing.js.map +0 -1
  783. package/dist/web/admin/portal.d.ts +0 -5
  784. package/dist/web/admin/portal.d.ts.map +0 -1
  785. package/dist/web/admin/portal.js +0 -2572
  786. package/dist/web/admin/portal.js.map +0 -1
  787. package/dist/web/admin/provider-models.d.ts.map +0 -1
  788. package/dist/web/admin/provider-models.js.map +0 -1
  789. package/dist/web/admin/store.d.ts +0 -13
  790. package/dist/web/admin/store.d.ts.map +0 -1
  791. package/dist/web/admin/store.js +0 -14
  792. package/dist/web/admin/store.js.map +0 -1
  793. package/dist/web/admin/types.d.ts +0 -30
  794. package/dist/web/admin/types.d.ts.map +0 -1
  795. package/dist/web/admin/types.js.map +0 -1
  796. package/dist/web/agent-events/portal.d.ts +0 -3
  797. package/dist/web/agent-events/portal.d.ts.map +0 -1
  798. package/dist/web/agent-events/portal.js +0 -18
  799. package/dist/web/agent-events/portal.js.map +0 -1
  800. package/dist/web/login/oauth.d.ts +0 -6
  801. package/dist/web/login/oauth.d.ts.map +0 -1
  802. package/dist/web/login/oauth.js.map +0 -1
  803. package/dist/web/login/portal.d.ts.map +0 -1
  804. package/dist/web/login/portal.js.map +0 -1
  805. package/dist/web/login/store.d.ts +0 -8
  806. package/dist/web/login/store.d.ts.map +0 -1
  807. package/dist/web/login/store.js +0 -15
  808. package/dist/web/login/store.js.map +0 -1
  809. package/dist/web/login/types.d.ts.map +0 -1
  810. package/dist/web/login/types.js.map +0 -1
  811. package/dist/web/request.d.ts +0 -3
  812. package/dist/web/request.d.ts.map +0 -1
  813. package/dist/web/request.js +0 -13
  814. package/dist/web/request.js.map +0 -1
  815. package/dist/web/server.d.ts.map +0 -1
  816. package/dist/web/server.js.map +0 -1
  817. package/dist/web/session-view/command.d.ts +0 -4
  818. package/dist/web/session-view/command.d.ts.map +0 -1
  819. package/dist/web/session-view/command.js +0 -7
  820. package/dist/web/session-view/command.js.map +0 -1
  821. package/dist/web/session-view/portal.d.ts +0 -13
  822. package/dist/web/session-view/portal.d.ts.map +0 -1
  823. package/dist/web/session-view/portal.js.map +0 -1
  824. package/dist/web/session-view/service.d.ts +0 -6
  825. package/dist/web/session-view/service.d.ts.map +0 -1
  826. package/dist/web/session-view/service.js +0 -498
  827. package/dist/web/session-view/service.js.map +0 -1
  828. package/dist/web/session-view/store.d.ts +0 -8
  829. package/dist/web/session-view/store.d.ts.map +0 -1
  830. package/dist/web/session-view/store.js +0 -15
  831. package/dist/web/session-view/store.js.map +0 -1
  832. package/dist/web/session-view/types.d.ts.map +0 -1
  833. package/dist/web/session-view/types.js.map +0 -1
  834. package/dist/web/token-store.d.ts.map +0 -1
  835. package/dist/web/token-store.js.map +0 -1
  836. package/dist/web/types.d.ts.map +0 -1
  837. package/dist/web/types.js.map +0 -1
  838. /package/dist/{commands → adapters/commands}/admin.d.ts +0 -0
  839. /package/dist/{commands → adapters/commands}/new.d.ts +0 -0
  840. /package/dist/{commands → adapters/commands}/sandbox.d.ts +0 -0
  841. /package/dist/{commands → adapters/commands}/session-view.d.ts +0 -0
  842. /package/dist/{commands → adapters/commands}/types.js +0 -0
  843. /package/dist/{harness/extensions → adapters/github}/types.js +0 -0
  844. /package/dist/{tools → adapters/web/admin}/types.js +0 -0
  845. /package/dist/{web/admin → adapters/web/login}/types.js +0 -0
  846. /package/dist/{web/login → adapters/web/session-view}/types.js +0 -0
  847. /package/dist/{web → adapters/web}/token-store.d.ts +0 -0
  848. /package/dist/{web → adapters/web}/types.d.ts +0 -0
  849. /package/dist/{web/session-view → adapters/web}/types.js +0 -0
  850. /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
  851. /package/dist/{web → cli}/types.js +0 -0
  852. /package/dist/{adapters/slack → harness}/tools/attach.d.ts +0 -0
  853. /package/dist/{tools → harness/tools}/react.d.ts +0 -0
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Platform-agnostic command manifest — the single inventory that platform
3
+ * adapters derive their native slash-command registration and routing from,
4
+ * and that `isCommandText` and the handler grammars mirror.
5
+ *
6
+ * Adding a command means adding a manifest entry plus a handler in this
7
+ * directory; adapters pick up registration and routing from the entry instead
8
+ * of hand-restating the inventory (where a missed spot used to mean a silent
9
+ * no-response).
10
+ *
11
+ * Per CONTEXT.md, slash commands are a minimal chat control surface: detailed
12
+ * or infrequent settings belong in Admin, and bare commands are limited to
13
+ * `session`. `stop` is listed for platform registration/UI only — it is a
14
+ * magic word owned by conversation intake, not a command handler.
15
+ */
16
+ /** Entry order is the Telegram command-menu order. */
17
+ export const COMMAND_MANIFEST = [
18
+ {
19
+ name: "login",
20
+ description: "Store credentials in your private vault",
21
+ slackCommand: "/pi-login",
22
+ slackRoute: { includeText: true, privateCommand: true },
23
+ discord: true,
24
+ telegramMenu: {},
25
+ },
26
+ {
27
+ name: "session",
28
+ description: "Open the current session in the web viewer",
29
+ bare: true,
30
+ slackCommand: "/pi-session",
31
+ slackRoute: { thread: true },
32
+ discord: true,
33
+ telegramMenu: {},
34
+ },
35
+ {
36
+ name: "model",
37
+ description: "Switch this conversation's LLM model",
38
+ arg: {
39
+ name: "model",
40
+ description: "provider/model[:thinking], e.g. anthropic/claude-sonnet-4-6:off",
41
+ required: false,
42
+ },
43
+ slackCommand: "/pi-model",
44
+ slackRoute: { includeText: true },
45
+ discord: true,
46
+ telegramMenu: {},
47
+ },
48
+ {
49
+ name: "sandbox",
50
+ description: "Show sandbox status or boost limits",
51
+ arg: {
52
+ name: "action",
53
+ // Discord caps option descriptions at 100 characters (registration
54
+ // fails otherwise); commands.test.ts enforces the budget.
55
+ // The `door` action still works but is deliberately undocumented: the
56
+ // workspace posture follows the platform's own channel visibility
57
+ // automatically, and overriding it is an admin escape hatch, not a
58
+ // user-facing feature.
59
+ description: "'boost' temporarily applies the configured boost limits",
60
+ required: false,
61
+ },
62
+ slackCommand: "/pi-sandbox",
63
+ slackRoute: { includeText: true },
64
+ discord: true,
65
+ telegramMenu: { description: "Show or boost sandbox limits" },
66
+ telegramCommand: true,
67
+ },
68
+ {
69
+ name: "autoreply",
70
+ aliases: ["auto-reply"],
71
+ description: "Enable, disable, or Jev-assist replies without mentions",
72
+ arg: {
73
+ name: "state",
74
+ description: "on, off, or jev",
75
+ required: true,
76
+ },
77
+ slackCommand: "/pi-auto-reply",
78
+ slackRoute: { includeText: true },
79
+ },
80
+ {
81
+ name: "stop",
82
+ description: "Stop the current conversation",
83
+ magicWord: true,
84
+ discord: true,
85
+ telegramMenu: { description: "Stop ongoing conversation" },
86
+ },
87
+ {
88
+ name: "new",
89
+ description: "Reset conversation history and start fresh",
90
+ slackCommand: "/pi-new",
91
+ slackRoute: {},
92
+ discord: true,
93
+ telegramMenu: {},
94
+ telegramCommand: true,
95
+ },
96
+ {
97
+ name: "admin",
98
+ description: "Open the admin portal",
99
+ slackCommand: "/pi-admin",
100
+ slackRoute: { thread: true },
101
+ discord: true,
102
+ telegramMenu: {},
103
+ telegramCommand: true,
104
+ },
105
+ ];
106
+ export function commandManifestEntry(name) {
107
+ const entry = COMMAND_MANIFEST.find((candidate) => candidate.name === name);
108
+ if (!entry)
109
+ throw new Error(`Unknown command in manifest: ${name}`);
110
+ return entry;
111
+ }
112
+ /** Slash spellings of a command: `/<name>` and `/pi-<name>` for the name and each alias. */
113
+ export function slashForms(name) {
114
+ const entry = commandManifestEntry(name);
115
+ return [entry.name, ...(entry.aliases ?? [])].flatMap((spelling) => [
116
+ `/${spelling}`,
117
+ `/pi-${spelling}`,
118
+ ]);
119
+ }
120
+ /** Every accepted spelling: the bare name (when the command is bare) plus slash forms. */
121
+ export function commandForms(name) {
122
+ const entry = commandManifestEntry(name);
123
+ return [...(entry.bare ? [entry.name] : []), ...slashForms(name)];
124
+ }
125
+ /** Telegram `setMyCommands` payload (menu registration; routing is separate). */
126
+ export function telegramCommandMenu() {
127
+ return COMMAND_MANIFEST.filter((entry) => entry.telegramMenu).map((entry) => ({
128
+ command: entry.name,
129
+ description: entry.telegramMenu?.description ?? entry.description,
130
+ }));
131
+ }
132
+ export function matchCommand(text, aliases, options) {
133
+ const tokens = text.trim().split(/\s+/).filter(Boolean);
134
+ const first = tokens[0];
135
+ if (first === undefined)
136
+ return null;
137
+ const token = options?.stripMention ? first.replace(/@\w+$/i, "") : first;
138
+ const command = token.toLowerCase();
139
+ return aliases.includes(command) ? { command, args: tokens.slice(1) } : null;
140
+ }
141
+ /**
142
+ * Chat-command text recognition, derived from the command manifest so the
143
+ * inventory has a single source of truth. Session resume uses it to keep
144
+ * command messages out of replayed history.
145
+ *
146
+ * The `pi-[\w-]+` alternative is a catch-all for platform-prefixed command
147
+ * names (including ones a platform registers but this build no longer
148
+ * handles), independent of the manifest.
149
+ */
150
+ const COMMAND_NAMES = COMMAND_MANIFEST.flatMap((entry) => [entry.name].concat(entry.aliases ?? []));
151
+ const COMMAND_TEXT_PATTERN = new RegExp(`^\\/(?:pi-[\\w-]+|${COMMAND_NAMES.join("|")})(?:@\\w+)?(?:\\s|$)`, "i");
152
+ export function isCommandText(text) {
153
+ return COMMAND_TEXT_PATTERN.test(text.trim());
154
+ }
155
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/adapters/commands/manifest.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Platform-agnostic command manifest — the single inventory that platform\n * adapters derive their native slash-command registration and routing from,\n * and that `isCommandText` and the handler grammars mirror.\n *\n * Adding a command means adding a manifest entry plus a handler in this\n * directory; adapters pick up registration and routing from the entry instead\n * of hand-restating the inventory (where a missed spot used to mean a silent\n * no-response).\n *\n * Per CONTEXT.md, slash commands are a minimal chat control surface: detailed\n * or infrequent settings belong in Admin, and bare commands are limited to\n * `session`. `stop` is listed for platform registration/UI only — it is a\n * magic word owned by conversation intake, not a command handler.\n */\n\nimport type { CommandManifestEntry } from \"./types.js\";\n\nexport type { CommandManifestEntry, SlackSlashRoute } from \"./types.js\";\n\n/** Entry order is the Telegram command-menu order. */\nexport const COMMAND_MANIFEST: readonly CommandManifestEntry[] = [\n {\n name: \"login\",\n description: \"Store credentials in your private vault\",\n slackCommand: \"/pi-login\",\n slackRoute: { includeText: true, privateCommand: true },\n discord: true,\n telegramMenu: {},\n },\n {\n name: \"session\",\n description: \"Open the current session in the web viewer\",\n bare: true,\n slackCommand: \"/pi-session\",\n slackRoute: { thread: true },\n discord: true,\n telegramMenu: {},\n },\n {\n name: \"model\",\n description: \"Switch this conversation's LLM model\",\n arg: {\n name: \"model\",\n description: \"provider/model[:thinking], e.g. anthropic/claude-sonnet-4-6:off\",\n required: false,\n },\n slackCommand: \"/pi-model\",\n slackRoute: { includeText: true },\n discord: true,\n telegramMenu: {},\n },\n {\n name: \"sandbox\",\n description: \"Show sandbox status or boost limits\",\n arg: {\n name: \"action\",\n // Discord caps option descriptions at 100 characters (registration\n // fails otherwise); commands.test.ts enforces the budget.\n // The `door` action still works but is deliberately undocumented: the\n // workspace posture follows the platform's own channel visibility\n // automatically, and overriding it is an admin escape hatch, not a\n // user-facing feature.\n description: \"'boost' temporarily applies the configured boost limits\",\n required: false,\n },\n slackCommand: \"/pi-sandbox\",\n slackRoute: { includeText: true },\n discord: true,\n telegramMenu: { description: \"Show or boost sandbox limits\" },\n telegramCommand: true,\n },\n {\n name: \"autoreply\",\n aliases: [\"auto-reply\"],\n description: \"Enable, disable, or Jev-assist replies without mentions\",\n arg: {\n name: \"state\",\n description: \"on, off, or jev\",\n required: true,\n },\n slackCommand: \"/pi-auto-reply\",\n slackRoute: { includeText: true },\n },\n {\n name: \"stop\",\n description: \"Stop the current conversation\",\n magicWord: true,\n discord: true,\n telegramMenu: { description: \"Stop ongoing conversation\" },\n },\n {\n name: \"new\",\n description: \"Reset conversation history and start fresh\",\n slackCommand: \"/pi-new\",\n slackRoute: {},\n discord: true,\n telegramMenu: {},\n telegramCommand: true,\n },\n {\n name: \"admin\",\n description: \"Open the admin portal\",\n slackCommand: \"/pi-admin\",\n slackRoute: { thread: true },\n discord: true,\n telegramMenu: {},\n telegramCommand: true,\n },\n];\n\nexport function commandManifestEntry(name: string): CommandManifestEntry {\n const entry = COMMAND_MANIFEST.find((candidate) => candidate.name === name);\n if (!entry) throw new Error(`Unknown command in manifest: ${name}`);\n return entry;\n}\n\n/** Slash spellings of a command: `/<name>` and `/pi-<name>` for the name and each alias. */\nexport function slashForms(name: string): readonly string[] {\n const entry = commandManifestEntry(name);\n return [entry.name, ...(entry.aliases ?? [])].flatMap((spelling) => [\n `/${spelling}`,\n `/pi-${spelling}`,\n ]);\n}\n\n/** Every accepted spelling: the bare name (when the command is bare) plus slash forms. */\nexport function commandForms(name: string): readonly string[] {\n const entry = commandManifestEntry(name);\n return [...(entry.bare ? [entry.name] : []), ...slashForms(name)];\n}\n\n/** Telegram `setMyCommands` payload (menu registration; routing is separate). */\nexport function telegramCommandMenu(): { command: string; description: string }[] {\n return COMMAND_MANIFEST.filter((entry) => entry.telegramMenu).map((entry) => ({\n command: entry.name,\n description: entry.telegramMenu?.description ?? entry.description,\n }));\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 const first = tokens[0];\n if (first === undefined) return null;\n\n const token = options?.stripMention ? first.replace(/@\\w+$/i, \"\") : first;\n const command = token.toLowerCase() as Command;\n return aliases.includes(command) ? { command, args: tokens.slice(1) } : null;\n}\n\n/**\n * Chat-command text recognition, derived from the command manifest so the\n * inventory has a single source of truth. Session resume uses it to keep\n * command messages out of replayed history.\n *\n * The `pi-[\\w-]+` alternative is a catch-all for platform-prefixed command\n * names (including ones a platform registers but this build no longer\n * handles), independent of the manifest.\n */\nconst COMMAND_NAMES = COMMAND_MANIFEST.flatMap((entry) => [entry.name].concat(entry.aliases ?? []));\n\nconst COMMAND_TEXT_PATTERN = new RegExp(\n `^\\\\/(?:pi-[\\\\w-]+|${COMMAND_NAMES.join(\"|\")})(?:@\\\\w+)?(?:\\\\s|$)`,\n \"i\",\n);\n\nexport function isCommandText(text: string): boolean {\n return COMMAND_TEXT_PATTERN.test(text.trim());\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import type { CommandContext, CommandHandler, ModelRegistry, ParsedModelCommand } from "./types.js";
2
+ export type { ParsedModelCommand } from "./types.js";
3
+ export declare function parseModelCommand(text: string): ParsedModelCommand | null;
4
+ export declare class ModelCommandHandler implements CommandHandler {
5
+ private readonly modelRegistry;
6
+ constructor(modelRegistry: ModelRegistry);
7
+ tryHandle(context: CommandContext): Promise<boolean>;
8
+ /**
9
+ * Resolve the spec against the registry. A `:suffix` is first tried as part
10
+ * of the model id, then as a thinking level on the bare id — so a model
11
+ * whose real name contains a colon still wins over the suffix reading.
12
+ */
13
+ private selectModel;
14
+ }
15
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/adapters/commands/model.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAapG,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIrD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CA+BzE;AAoCD,qBAAa,mBAAoB,YAAW,cAAc;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa;IAA1C,YAA6B,aAAa,EAAE,aAAa,EAAI;IACvD,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAsDzD;IAED;;;;OAIG;IACH,OAAO,CAAC,WAAW;CA6BpB"}
@@ -0,0 +1,153 @@
1
+ import { resolveConversationSettings } from "../../settings/index.js";
2
+ import { applyConversationSettings } from "../../settings/apply.js";
3
+ import { slashForms, matchCommand } from "./manifest.js";
4
+ import { replySummary } from "./utils.js";
5
+ const PI_AI_THINKING_LEVELS = [
6
+ "minimal",
7
+ "low",
8
+ "medium",
9
+ "high",
10
+ "xhigh",
11
+ "max",
12
+ ];
13
+ const THINKING_LEVELS = new Set(["off", ...PI_AI_THINKING_LEVELS]);
14
+ const MODEL_COMMANDS = slashForms("model");
15
+ export function parseModelCommand(text) {
16
+ const matched = matchCommand(text, MODEL_COMMANDS);
17
+ if (!matched)
18
+ return null;
19
+ if (matched.args.length === 0) {
20
+ return {};
21
+ }
22
+ if (matched.args.length !== 1) {
23
+ return { error: "invalid_spec" };
24
+ }
25
+ const spec = matched.args[0];
26
+ if (spec === undefined) {
27
+ return { error: "invalid_spec" };
28
+ }
29
+ const slash = spec.indexOf("/");
30
+ if (slash <= 0 || slash === spec.length - 1) {
31
+ return { error: "invalid_spec" };
32
+ }
33
+ const modelSpec = spec.slice(slash + 1);
34
+ const parsedModel = parseModelThinkingLevel(modelSpec);
35
+ if (parsedModel.error) {
36
+ return { error: parsedModel.error };
37
+ }
38
+ return {
39
+ provider: spec.slice(0, slash),
40
+ ...parsedModel,
41
+ };
42
+ }
43
+ function parseModelThinkingLevel(modelSpec) {
44
+ const colon = modelSpec.lastIndexOf(":");
45
+ if (colon === 0 || colon === modelSpec.length - 1) {
46
+ return { error: "invalid_spec" };
47
+ }
48
+ if (colon < 0) {
49
+ return { model: modelSpec };
50
+ }
51
+ const suffix = modelSpec.slice(colon + 1);
52
+ return {
53
+ model: modelSpec.slice(0, colon),
54
+ modelCandidate: modelSpec,
55
+ thinkingLevelCandidate: suffix,
56
+ ...(THINKING_LEVELS.has(suffix)
57
+ ? { thinkingLevel: suffix }
58
+ : {}),
59
+ };
60
+ }
61
+ function formatModelSpec(provider, model, thinkingLevel) {
62
+ return `${provider}/${model}${thinkingLevel ? `:${thinkingLevel}` : ""}`;
63
+ }
64
+ const USAGE_EXAMPLE = "Example: `/pi-model anthropic/claude-sonnet-4-6:off`";
65
+ export class ModelCommandHandler {
66
+ constructor(modelRegistry) {
67
+ this.modelRegistry = modelRegistry;
68
+ }
69
+ async tryHandle(context) {
70
+ const parsed = parseModelCommand(context.commandText);
71
+ if (!parsed)
72
+ return false;
73
+ if (parsed.error) {
74
+ await replySummary(context, "Model", [
75
+ "無效的模型參數,請使用 `provider/model[:thinking]`。",
76
+ USAGE_EXAMPLE,
77
+ ]);
78
+ return true;
79
+ }
80
+ const office = context.services.workspace.office(context.address);
81
+ if (!parsed.provider || !parsed.model) {
82
+ const current = resolveConversationSettings(office);
83
+ await replySummary(context, "Model", [
84
+ `Current: \`${formatModelSpec(current.provider, current.model, current.thinkingLevel)}\``,
85
+ "",
86
+ "Usage: `/pi-model provider/model[:thinking]`",
87
+ USAGE_EXAMPLE,
88
+ ]);
89
+ return true;
90
+ }
91
+ const selection = this.selectModel(parsed.provider, parsed.model, parsed);
92
+ if ("lines" in selection) {
93
+ await replySummary(context, "Model", selection.lines);
94
+ return true;
95
+ }
96
+ if (!context.services.runtime) {
97
+ await replySummary(context, "Model", [
98
+ "Model command is not configured correctly on the server. Please try again later.",
99
+ ]);
100
+ return true;
101
+ }
102
+ const result = applyConversationSettings(context.services.runtime, office, {
103
+ provider: parsed.provider,
104
+ model: selection.modelId,
105
+ ...(selection.thinkingLevel ? { thinkingLevel: selection.thinkingLevel } : {}),
106
+ });
107
+ if (!result.ok) {
108
+ await replySummary(context, "Model", [
109
+ "目前這個 conversation 有執行中的工作,請等它完成或先 `/stop` 後再切換模型。",
110
+ ]);
111
+ return true;
112
+ }
113
+ await replySummary(context, "Model", [
114
+ `Switched: \`${formatModelSpec(parsed.provider, selection.modelId, selection.thinkingLevel)}\``,
115
+ "下一則訊息會使用新模型。",
116
+ ]);
117
+ return true;
118
+ }
119
+ /**
120
+ * Resolve the spec against the registry. A `:suffix` is first tried as part
121
+ * of the model id, then as a thinking level on the bare id — so a model
122
+ * whose real name contains a colon still wins over the suffix reading.
123
+ */
124
+ selectModel(provider, model, parsed) {
125
+ const exactModelId = parsed.modelCandidate ?? model;
126
+ if (this.modelRegistry.find(provider, exactModelId))
127
+ return { modelId: exactModelId };
128
+ if (parsed.modelCandidate) {
129
+ const suffix = parsed.thinkingLevelCandidate;
130
+ if (suffix && !THINKING_LEVELS.has(suffix)) {
131
+ return {
132
+ lines: [
133
+ "未知的 thinking level,請使用 `off`、`minimal`、`low`、`medium`、`high`、`xhigh` 或 `max`。",
134
+ USAGE_EXAMPLE,
135
+ ],
136
+ };
137
+ }
138
+ if (this.modelRegistry.find(provider, model)) {
139
+ return {
140
+ modelId: model,
141
+ ...(parsed.thinkingLevel ? { thinkingLevel: parsed.thinkingLevel } : {}),
142
+ };
143
+ }
144
+ }
145
+ return {
146
+ lines: [
147
+ `找不到模型:\`${formatModelSpec(provider, model, parsed.thinkingLevel)}\``,
148
+ "請確認 provider/model 名稱,或先在 pi models.json 註冊自訂模型。",
149
+ ],
150
+ };
151
+ }
152
+ }
153
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/adapters/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 { resolveConversationSettings } from \"../../settings/index.js\";\nimport { applyConversationSettings } from \"../../settings/apply.js\";\nimport { slashForms, matchCommand } from \"./manifest.js\";\nimport type { CommandContext, CommandHandler, ModelRegistry, ParsedModelCommand } from \"./types.js\";\nimport { replySummary } from \"./utils.js\";\n\nconst PI_AI_THINKING_LEVELS = [\n \"minimal\",\n \"low\",\n \"medium\",\n \"high\",\n \"xhigh\",\n \"max\",\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 = slashForms(\"model\");\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 if (matched.args.length !== 1) {\n return { error: \"invalid_spec\" };\n }\n\n const spec = matched.args[0];\n if (spec === undefined) {\n return { error: \"invalid_spec\" };\n }\n const slash = spec.indexOf(\"/\");\n if (slash <= 0 || slash === spec.length - 1) {\n return { error: \"invalid_spec\" };\n }\n\n const modelSpec = spec.slice(slash + 1);\n const parsedModel = parseModelThinkingLevel(modelSpec);\n if (parsedModel.error) {\n return { error: parsedModel.error };\n }\n\n return {\n provider: spec.slice(0, slash),\n ...parsedModel,\n };\n}\n\nfunction parseModelThinkingLevel(modelSpec: string): {\n model?: string;\n modelCandidate?: string;\n thinkingLevelCandidate?: string;\n thinkingLevel?: ThinkingLevel;\n error?: \"invalid_spec\";\n} {\n const colon = modelSpec.lastIndexOf(\":\");\n if (colon === 0 || colon === modelSpec.length - 1) {\n return { error: \"invalid_spec\" };\n }\n if (colon < 0) {\n return { model: modelSpec };\n }\n\n const suffix = modelSpec.slice(colon + 1);\n return {\n model: modelSpec.slice(0, colon),\n modelCandidate: modelSpec,\n thinkingLevelCandidate: suffix,\n ...(THINKING_LEVELS.has(suffix as ThinkingLevel)\n ? { thinkingLevel: suffix as ThinkingLevel }\n : {}),\n };\n}\n\nfunction formatModelSpec(provider: string, model: string, thinkingLevel?: ThinkingLevel): string {\n return `${provider}/${model}${thinkingLevel ? `:${thinkingLevel}` : \"\"}`;\n}\n\nconst USAGE_EXAMPLE = \"Example: `/pi-model anthropic/claude-sonnet-4-6:off`\";\n\ntype ModelSelection = { modelId: string; thinkingLevel?: ThinkingLevel } | { lines: string[] };\n\nexport class ModelCommandHandler implements CommandHandler {\n constructor(private readonly modelRegistry: ModelRegistry) {}\n async tryHandle(context: CommandContext): Promise<boolean> {\n const parsed = parseModelCommand(context.commandText);\n if (!parsed) return false;\n\n if (parsed.error) {\n await replySummary(context, \"Model\", [\n \"無效的模型參數,請使用 `provider/model[:thinking]`。\",\n USAGE_EXAMPLE,\n ]);\n return true;\n }\n\n const office = context.services.workspace.office(context.address);\n if (!parsed.provider || !parsed.model) {\n const current = resolveConversationSettings(office);\n await replySummary(context, \"Model\", [\n `Current: \\`${formatModelSpec(current.provider, current.model, current.thinkingLevel)}\\``,\n \"\",\n \"Usage: `/pi-model provider/model[:thinking]`\",\n USAGE_EXAMPLE,\n ]);\n return true;\n }\n\n const selection = this.selectModel(parsed.provider, parsed.model, parsed);\n if (\"lines\" in selection) {\n await replySummary(context, \"Model\", selection.lines);\n return true;\n }\n\n if (!context.services.runtime) {\n await replySummary(context, \"Model\", [\n \"Model command is not configured correctly on the server. Please try again later.\",\n ]);\n return true;\n }\n\n const result = applyConversationSettings(context.services.runtime, office, {\n provider: parsed.provider,\n model: selection.modelId,\n ...(selection.thinkingLevel ? { thinkingLevel: selection.thinkingLevel } : {}),\n });\n if (!result.ok) {\n await replySummary(context, \"Model\", [\n \"目前這個 conversation 有執行中的工作,請等它完成或先 `/stop` 後再切換模型。\",\n ]);\n return true;\n }\n\n await replySummary(context, \"Model\", [\n `Switched: \\`${formatModelSpec(parsed.provider, selection.modelId, selection.thinkingLevel)}\\``,\n \"下一則訊息會使用新模型。\",\n ]);\n return true;\n }\n\n /**\n * Resolve the spec against the registry. A `:suffix` is first tried as part\n * of the model id, then as a thinking level on the bare id — so a model\n * whose real name contains a colon still wins over the suffix reading.\n */\n private selectModel(provider: string, model: string, parsed: ParsedModelCommand): ModelSelection {\n const exactModelId = parsed.modelCandidate ?? model;\n if (this.modelRegistry.find(provider, exactModelId)) return { modelId: exactModelId };\n\n if (parsed.modelCandidate) {\n const suffix = parsed.thinkingLevelCandidate;\n if (suffix && !THINKING_LEVELS.has(suffix as ThinkingLevel)) {\n return {\n lines: [\n \"未知的 thinking level,請使用 `off`、`minimal`、`low`、`medium`、`high`、`xhigh` 或 `max`。\",\n USAGE_EXAMPLE,\n ],\n };\n }\n if (this.modelRegistry.find(provider, model)) {\n return {\n modelId: model,\n ...(parsed.thinkingLevel ? { thinkingLevel: parsed.thinkingLevel } : {}),\n };\n }\n }\n\n return {\n lines: [\n `找不到模型:\\`${formatModelSpec(provider, model, parsed.thinkingLevel)}\\``,\n \"請確認 provider/model 名稱,或先在 pi models.json 註冊自訂模型。\",\n ],\n };\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../../src/adapters/commands/new.ts"],"names":[],"mappings":"AAEA,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,CAmCzD;CACF"}
@@ -0,0 +1,41 @@
1
+ import { createConversationMessage } from "../index.js";
2
+ import { slashForms, matchCommand } from "./manifest.js";
3
+ import { replySummary } from "./utils.js";
4
+ const NEW_COMMANDS = slashForms("new");
5
+ export class NewCommandHandler {
6
+ async tryHandle(context) {
7
+ if (!matchCommand(context.commandText, NEW_COMMANDS))
8
+ return false;
9
+ if (!context.privateConversation) {
10
+ await replySummary(context, "New Session", [
11
+ "為了避免誤清除共享上下文,`/new` 目前只能在與機器人的私訊 / DM 中使用。",
12
+ ]);
13
+ return true;
14
+ }
15
+ if (!context.services.runtime) {
16
+ await replySummary(context, "New Session", [
17
+ "New command is not configured correctly on the server.",
18
+ "Please try again later.",
19
+ ]);
20
+ return true;
21
+ }
22
+ await context.services.runtime.handleNewCommand({
23
+ sessionKey: context.sessionKey,
24
+ conversationId: context.conversationId,
25
+ bot: context.bot,
26
+ message: createConversationMessage({
27
+ platform: context.address.platform,
28
+ conversationId: context.address.conversationId,
29
+ address: context.address,
30
+ id: `memory:${context.sessionKey}`,
31
+ sessionKey: context.sessionKey,
32
+ conversationKind: "direct",
33
+ userId: context.platformUserId,
34
+ userName: context.platformUserName,
35
+ text: context.commandText,
36
+ }),
37
+ });
38
+ return true;
39
+ }
40
+ }
41
+ //# sourceMappingURL=new.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.js","sourceRoot":"","sources":["../../../src/adapters/commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAEvC,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,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE;gBACzC,4CAA4C;aAC7C,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC9B,MAAM,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE;gBACzC,wDAAwD;gBACxD,yBAAyB;aAC1B,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAC9C,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,OAAO,EAAE,yBAAyB,CAAC;gBACjC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;gBAClC,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,cAAc;gBAC9C,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,EAAE,EAAE,UAAU,OAAO,CAAC,UAAU,EAAE;gBAClC,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,gBAAgB,EAAE,QAAQ;gBAC1B,MAAM,EAAE,OAAO,CAAC,cAAc;gBAC9B,QAAQ,EAAE,OAAO,CAAC,gBAAgB;gBAClC,IAAI,EAAE,OAAO,CAAC,WAAW;aAC1B,CAAC;SACH,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["import { createConversationMessage } from \"../index.js\";\nimport { slashForms, matchCommand } from \"./manifest.js\";\nimport type { CommandContext, CommandHandler } from \"./types.js\";\nimport { replySummary } from \"./utils.js\";\n\nconst NEW_COMMANDS = slashForms(\"new\");\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 replySummary(context, \"New Session\", [\n \"為了避免誤清除共享上下文,`/new` 目前只能在與機器人的私訊 / DM 中使用。\",\n ]);\n return true;\n }\n\n if (!context.services.runtime) {\n await replySummary(context, \"New Session\", [\n \"New command is not configured correctly on the server.\",\n \"Please try again later.\",\n ]);\n return true;\n }\n\n await context.services.runtime.handleNewCommand({\n sessionKey: context.sessionKey,\n conversationId: context.conversationId,\n bot: context.bot,\n message: createConversationMessage({\n platform: context.address.platform,\n conversationId: context.address.conversationId,\n address: context.address,\n id: `memory:${context.sessionKey}`,\n sessionKey: context.sessionKey,\n conversationKind: \"direct\",\n userId: context.platformUserId,\n userName: context.platformUserName,\n text: context.commandText,\n }),\n });\n return true;\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import type { CommandContext, CommandHandler, ModelRegistry } from "./types.js";
2
+ export declare function defaultCommandHandlers(modelRegistry?: ModelRegistry): 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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/adapters/commands/registry.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAmBhF,wBAAgB,sBAAsB,CACpC,aAAa,GAAE,aAAoC,GAClD,cAAc,EAAE,CAUlB;AAED,gFAAgF;AAChF,wBAAsB,eAAe,CACnC,QAAQ,EAAE,SAAS,cAAc,EAAE,EACnC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,OAAO,CAAC,CAKlB"}
@@ -0,0 +1,43 @@
1
+ import { MikanModels } from "../../harness/index.js";
2
+ import { AdminCommandHandler } from "./admin.js";
3
+ import { AutoReplyCommandHandler } from "./auto-reply.js";
4
+ import { LoginCommandHandler } from "./login.js";
5
+ import { COMMAND_MANIFEST } from "./manifest.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
+ /**
11
+ * Handler factory per manifest command name. The manifest is the inventory
12
+ * authority; this map only binds each entry to its implementation, and
13
+ * `defaultCommandHandlers` verifies the binding is complete so a manifest
14
+ * entry without a handler fails at construction instead of dispatching into
15
+ * silence. Magic-word entries (routed by conversation intake) are exempt.
16
+ */
17
+ const HANDLER_FACTORIES = {
18
+ admin: () => new AdminCommandHandler(),
19
+ autoreply: () => new AutoReplyCommandHandler(),
20
+ login: () => new LoginCommandHandler(),
21
+ session: () => new SessionViewCommandHandler(),
22
+ model: (modelRegistry) => new ModelCommandHandler(modelRegistry),
23
+ sandbox: () => new SandboxCommandHandler(),
24
+ new: () => new NewCommandHandler(),
25
+ };
26
+ export function defaultCommandHandlers(modelRegistry = MikanModels.create()) {
27
+ return COMMAND_MANIFEST.filter((entry) => !entry.magicWord).map((entry) => {
28
+ const factory = HANDLER_FACTORIES[entry.name];
29
+ if (!factory) {
30
+ throw new Error(`Command manifest entry "${entry.name}" has no handler factory in commands/registry.ts`);
31
+ }
32
+ return factory(modelRegistry);
33
+ });
34
+ }
35
+ /** Run handlers in order, returning true as soon as one accepts the command. */
36
+ export async function dispatchCommand(handlers, context) {
37
+ for (const handler of handlers) {
38
+ if (await handler.tryHandle(context))
39
+ return true;
40
+ }
41
+ return false;
42
+ }
43
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/adapters/commands/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,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;;;;;;GAMG;AACH,MAAM,iBAAiB,GAAqE;IAC1F,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,mBAAmB,EAAE;IACtC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,uBAAuB,EAAE;IAC9C,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,mBAAmB,EAAE;IACtC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,yBAAyB,EAAE;IAC9C,KAAK,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,IAAI,mBAAmB,CAAC,aAAa,CAAC;IAChE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,qBAAqB,EAAE;IAC1C,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,iBAAiB,EAAE;CACnC,CAAC;AAEF,MAAM,UAAU,sBAAsB,CACpC,aAAa,GAAkB,WAAW,CAAC,MAAM,EAAE;IAEnD,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACxE,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,2BAA2B,KAAK,CAAC,IAAI,kDAAkD,CACxF,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,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 { LoginCommandHandler } from \"./login.js\";\nimport { COMMAND_MANIFEST } from \"./manifest.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, ModelRegistry } from \"./types.js\";\n\n/**\n * Handler factory per manifest command name. The manifest is the inventory\n * authority; this map only binds each entry to its implementation, and\n * `defaultCommandHandlers` verifies the binding is complete so a manifest\n * entry without a handler fails at construction instead of dispatching into\n * silence. Magic-word entries (routed by conversation intake) are exempt.\n */\nconst HANDLER_FACTORIES: Record<string, (modelRegistry: ModelRegistry) => CommandHandler> = {\n admin: () => new AdminCommandHandler(),\n autoreply: () => new AutoReplyCommandHandler(),\n login: () => new LoginCommandHandler(),\n session: () => new SessionViewCommandHandler(),\n model: (modelRegistry) => new ModelCommandHandler(modelRegistry),\n sandbox: () => new SandboxCommandHandler(),\n new: () => new NewCommandHandler(),\n};\n\nexport function defaultCommandHandlers(\n modelRegistry: ModelRegistry = MikanModels.create(),\n): CommandHandler[] {\n return COMMAND_MANIFEST.filter((entry) => !entry.magicWord).map((entry) => {\n const factory = HANDLER_FACTORIES[entry.name];\n if (!factory) {\n throw new Error(\n `Command manifest entry \"${entry.name}\" has no handler factory in commands/registry.ts`,\n );\n }\n return factory(modelRegistry);\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"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../../src/adapters/commands/sandbox.ts"],"names":[],"mappings":"AAIA,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,CAe7E;AAED,qBAAa,qBAAsB,YAAW,cAAc;IACpD,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAwBzD;CACF"}
@@ -0,0 +1,125 @@
1
+ import { resolveWorkspaceProjection } from "../../office/projection.js";
2
+ import { runtimeResourceKey } from "../../sandbox/identity.js";
3
+ import { applyOfficeVisibility } from "../../settings/apply.js";
4
+ import { slashForms, matchCommand } from "./manifest.js";
5
+ import { replySummary } from "./utils.js";
6
+ const SANDBOX_COMMANDS = slashForms("sandbox");
7
+ export function parseSandboxCommand(text) {
8
+ const matched = matchCommand(text, SANDBOX_COMMANDS, { stripMention: true });
9
+ if (!matched)
10
+ return null;
11
+ const action = matched.args[0]?.toLowerCase();
12
+ if (action === "boost" && matched.args.length === 1) {
13
+ return { action };
14
+ }
15
+ if (action === "visibility" && matched.args.length <= 2) {
16
+ return {
17
+ action,
18
+ ...(matched.args.length === 2 ? { visibility: matched.args[1]?.toLowerCase() } : {}),
19
+ };
20
+ }
21
+ return {};
22
+ }
23
+ export class SandboxCommandHandler {
24
+ async tryHandle(context) {
25
+ const parsed = parseSandboxCommand(context.commandText);
26
+ if (!parsed)
27
+ return false;
28
+ if (context.services.sandbox.type !== "image" || !context.services.resourceController) {
29
+ await replySummary(context, "Sandbox", [
30
+ "`/pi-sandbox` 目前只支援 `image:*` managed sandbox。",
31
+ ]);
32
+ return true;
33
+ }
34
+ const controller = context.services.resourceController;
35
+ const containerKey = runtimeResourceKey(context.services.sandbox, {
36
+ userId: context.platformUserId,
37
+ address: context.address,
38
+ });
39
+ if (parsed.action === "boost") {
40
+ await handleBoost(context, controller, containerKey);
41
+ }
42
+ else if (parsed.action === "visibility") {
43
+ await handleVisibility(context, parsed);
44
+ }
45
+ else {
46
+ await showSandboxStatus(context, controller, containerKey);
47
+ }
48
+ return true;
49
+ }
50
+ }
51
+ async function handleBoost(context, controller, containerKey) {
52
+ const boostLimits = controller.getBoostLimits();
53
+ if (!boostLimits?.cpus && !boostLimits?.memory) {
54
+ await replySummary(context, "Sandbox Boost", [
55
+ "此 mikan instance 尚未設定 sandbox boost 規格。",
56
+ "請先在全域 settings.json 設定 `sandbox.boost`。",
57
+ ]);
58
+ return;
59
+ }
60
+ const status = await controller.boost(containerKey);
61
+ await replySummary(context, "Sandbox Boost", [
62
+ "已暫時提升此 conversation 的 sandbox 規格。",
63
+ `Current: ${formatLimits(status.limits)}`,
64
+ "boost 會在此 sandbox runtime 關閉後結束。",
65
+ ]);
66
+ }
67
+ function describeVisibility(projection) {
68
+ const source = projection.source === "override"
69
+ ? "admin 覆寫"
70
+ : projection.source === "platform"
71
+ ? "依平台頻道類型"
72
+ : "Slack 尚未回報頻道類型,預設 private";
73
+ return `${projection.visibility}(${source})`;
74
+ }
75
+ async function handleVisibility(context, parsed) {
76
+ const office = context.services.workspace.office(context.address);
77
+ const projection = resolveWorkspaceProjection(office);
78
+ if (parsed.visibility === undefined) {
79
+ await replySummary(context, "Office Visibility", [
80
+ `Current: ${describeVisibility(projection)}`,
81
+ "",
82
+ "public:其他 office 可唯讀這個 office,且可寫入共用 MEMORY.md / skills。",
83
+ "private:只有自己看得到,共用 MEMORY.md / skills 唯讀。",
84
+ "預設跟隨 Slack 頻道類型;private 頻道與 DM 一律 private。",
85
+ "admin 覆寫:`/pi-sandbox visibility <private|default>`(只能把 public 頻道改為 private)",
86
+ ]);
87
+ return;
88
+ }
89
+ if (parsed.visibility !== "private" && parsed.visibility !== "default") {
90
+ await replySummary(context, "Office Visibility", [
91
+ `未知的值:\`${parsed.visibility}\`。可用值:\`private\`、\`default\``,
92
+ ]);
93
+ return;
94
+ }
95
+ const result = applyOfficeVisibility(context.services.runtime, office, parsed.visibility === "private" ? "private" : null);
96
+ if (!result.ok) {
97
+ await replySummary(context, "Office Visibility", [
98
+ "目前有工作正在執行,無法切換 visibility。等執行結束後再試一次。",
99
+ ]);
100
+ return;
101
+ }
102
+ const updated = resolveWorkspaceProjection(office);
103
+ await replySummary(context, "Office Visibility", [
104
+ `Visibility 已更新。Current: ${describeVisibility(updated)}`,
105
+ "下一則訊息時會以新的掛載重建 sandbox 容器;容器內容會保留。",
106
+ ]);
107
+ }
108
+ async function showSandboxStatus(context, controller, containerKey) {
109
+ const status = controller.getLimitStatus(containerKey);
110
+ const defaultLimits = controller.getDefaultLimits();
111
+ const boostLimits = controller.getBoostLimits();
112
+ const projection = resolveWorkspaceProjection(context.services.workspace.office(context.address));
113
+ await replySummary(context, "Sandbox", [
114
+ `Current: ${formatLimits(status.limits)}`,
115
+ `Status: ${status.boosted ? "boosted" : "default"}`,
116
+ `Office visibility: ${describeVisibility(projection)}`,
117
+ "",
118
+ `Default: ${formatLimits(defaultLimits)}`,
119
+ boostLimits ? `Boost: ${formatLimits({ ...defaultLimits, ...boostLimits })}` : undefined,
120
+ ].filter((line) => line !== undefined));
121
+ }
122
+ function formatLimits(limits) {
123
+ return `CPU ${limits?.cpus ?? "unlimited"} / Memory ${limits?.memory ?? "unlimited"}`;
124
+ }
125
+ //# sourceMappingURL=sandbox.js.map