@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
@@ -0,0 +1,37 @@
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
+ import type { CommandManifestEntry } from "./types.js";
17
+ export type { CommandManifestEntry, SlackSlashRoute } from "./types.js";
18
+ /** Entry order is the Telegram command-menu order. */
19
+ export declare const COMMAND_MANIFEST: readonly CommandManifestEntry[];
20
+ export declare function commandManifestEntry(name: string): CommandManifestEntry;
21
+ /** Slash spellings of a command: `/<name>` and `/pi-<name>` for the name and each alias. */
22
+ export declare function slashForms(name: string): readonly string[];
23
+ /** Every accepted spelling: the bare name (when the command is bare) plus slash forms. */
24
+ export declare function commandForms(name: string): readonly string[];
25
+ /** Telegram `setMyCommands` payload (menu registration; routing is separate). */
26
+ export declare function telegramCommandMenu(): {
27
+ command: string;
28
+ description: string;
29
+ }[];
30
+ export declare function matchCommand<Command extends string>(text: string, aliases: readonly Command[], options?: {
31
+ stripMention?: boolean;
32
+ }): {
33
+ command: Command;
34
+ args: string[];
35
+ } | null;
36
+ export declare function isCommandText(text: string): boolean;
37
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/adapters/commands/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAExE,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,EAAE,SAAS,oBAAoB,EAwF3D,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAIvE;AAED,4FAA4F;AAC5F,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAM1D;AAED,0FAA0F;AAC1F,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAG5D;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAAE,CAKhF;AAED,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;AAkBD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD"}
@@ -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 or disable replies without mentions",
72
+ arg: {
73
+ name: "state",
74
+ description: "on or off",
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 or disable replies without mentions\",\n arg: {\n name: \"state\",\n description: \"on or off\",\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 "../../config.js";
2
+ import { applyConversationSettings } from "../../settings-mutation.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 \"../../config.js\";\nimport { applyConversationSettings } from \"../../settings-mutation.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 "../../adapter.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,kBAAkB,CAAC;AAC7D,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 \"../../adapter.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":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AA4BvF,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"}