@astralyn/pi 1.4.11 → 1.5.1

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 (564) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/dist/bundle/chunks/anthropic-messages-G5ZGBHOH.js +6 -0
  3. package/dist/bundle/chunks/azure-openai-responses-EMPTMYNF.js +2 -0
  4. package/dist/bundle/chunks/bedrock-converse-stream.js +22 -15
  5. package/dist/bundle/chunks/{chunk-TH3QDDPD.js → chunk-3YGNXVKM.js} +1 -1
  6. package/dist/bundle/chunks/chunk-AXX7FFFD.js +2 -0
  7. package/dist/bundle/chunks/chunk-FNGB3ASD.js +2 -0
  8. package/dist/bundle/chunks/chunk-FPALVF3F.js +4 -0
  9. package/dist/bundle/chunks/chunk-H3UF54OB.js +9 -0
  10. package/dist/bundle/chunks/{chunk-NUQMVNKQ.js → chunk-HLVMLRZJ.js} +58 -62
  11. package/dist/bundle/chunks/chunk-IC6JXX2J.js +10 -0
  12. package/dist/bundle/chunks/{chunk-MZJC45TM.js → chunk-J7L6O5XA.js} +3 -3
  13. package/dist/bundle/chunks/{chunk-DLVLAQEG.js → chunk-KBFO53OG.js} +3 -3
  14. package/dist/bundle/chunks/chunk-M3D4ADUT.js +1503 -0
  15. package/dist/bundle/chunks/{chunk-TPVFPFJP.js → chunk-P7VXFB2M.js} +1 -1
  16. package/dist/bundle/chunks/chunk-PSYLMRL6.js +9 -0
  17. package/dist/bundle/chunks/chunk-QNZARXLE.js +82 -0
  18. package/dist/bundle/chunks/chunk-RAIYJ5FC.js +4 -0
  19. package/dist/bundle/chunks/{chunk-OV2VMHBX.js → chunk-SR6EWNPW.js} +1 -1
  20. package/dist/bundle/chunks/chunk-TA3YH2ZI.js +16 -0
  21. package/dist/bundle/chunks/{chunk-24FY4C5S.js → chunk-TRSJS3FM.js} +1 -1
  22. package/dist/bundle/chunks/chunk-ZRI3ICDE.js +2 -0
  23. package/dist/bundle/chunks/{cli-MBFCFGI2.js → cli-LAZQG54B.js} +11 -9
  24. package/dist/bundle/chunks/{cloudflare-workers-ai-system-one-7BKATOEJ.js → cloudflare-workers-ai-system-one-4L2ABUJE.js} +1 -1
  25. package/dist/bundle/chunks/{execute-VLAIP26K.js → execute-SSRW6NGS.js} +1 -1
  26. package/dist/bundle/chunks/github-copilot.js +1 -1
  27. package/dist/bundle/chunks/{google-generative-ai-HTUSU45F.js → google-generative-ai-OOVDGS5W.js} +1 -1
  28. package/dist/bundle/chunks/{google-vertex-AVQV4P76.js → google-vertex-IK5RNG7J.js} +1 -1
  29. package/dist/bundle/chunks/image-resize-worker.js +1 -1
  30. package/dist/bundle/chunks/kimi-coding.js +1 -1
  31. package/dist/bundle/chunks/{llama-cpp-classify-27QYLJZY.js → llama-cpp-classify-XHAVT37C.js} +1 -1
  32. package/dist/bundle/chunks/meta.js +1 -1
  33. package/dist/bundle/chunks/mistral-conversations-Z56KY4OJ.js +5 -0
  34. package/dist/bundle/chunks/{openai-codex-responses-Q25MHDFX.js → openai-codex-responses-5NAH3SK6.js} +1 -1
  35. package/dist/bundle/chunks/openai-completions-S7S6PO3J.js +7 -0
  36. package/dist/bundle/chunks/{openai-decisions-3WYFPGSK.js → openai-decisions-7A36EAHE.js} +1 -1
  37. package/dist/bundle/chunks/{openai-responses-E4BNZIQK.js → openai-responses-ZQRZJKH4.js} +1 -1
  38. package/dist/bundle/chunks/{openrouter-images-CBP3OPOD.js → openrouter-images-X7PX72ON.js} +1 -1
  39. package/dist/bundle/chunks/pi-messages-TXNWPLI4.js +8 -0
  40. package/dist/bundle/chunks/radius.js +1 -1
  41. package/dist/bundle/chunks/{runtime-3RPOJS5T.js → runtime-X3XOMNXQ.js} +1 -1
  42. package/dist/bundle/chunks/{typesafe-system-one-BNICP2LS.js → typesafe-system-one-XJGMSHWL.js} +1 -1
  43. package/dist/bundle/chunks/virtual-modules-NFDW2JKH.js +2 -0
  44. package/dist/bundle/cli.js +1 -1
  45. package/dist/bundle/index.js +1 -1
  46. package/dist/bundle/rpc-entry.js +1 -1
  47. package/dist/cli/args.d.ts.map +1 -1
  48. package/dist/cli/args.js +8 -7
  49. package/dist/cli/args.js.map +1 -1
  50. package/dist/config.d.ts +10 -0
  51. package/dist/config.d.ts.map +1 -1
  52. package/dist/config.js +24 -5
  53. package/dist/config.js.map +1 -1
  54. package/dist/core/agent-session-runtime.d.ts +0 -5
  55. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  56. package/dist/core/agent-session-runtime.js +12 -28
  57. package/dist/core/agent-session-runtime.js.map +1 -1
  58. package/dist/core/agent-session.d.ts +21 -14
  59. package/dist/core/agent-session.d.ts.map +1 -1
  60. package/dist/core/agent-session.js +67 -93
  61. package/dist/core/agent-session.js.map +1 -1
  62. package/dist/core/compaction/branch-summarization.d.ts +4 -2
  63. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  64. package/dist/core/compaction/branch-summarization.js +16 -4
  65. package/dist/core/compaction/branch-summarization.js.map +1 -1
  66. package/dist/core/exec.d.ts +9 -1
  67. package/dist/core/exec.d.ts.map +1 -1
  68. package/dist/core/exec.js +104 -60
  69. package/dist/core/exec.js.map +1 -1
  70. package/dist/core/export-html/template.css +9 -0
  71. package/dist/core/export-html/template.js +165 -45
  72. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  73. package/dist/core/export-html/tool-renderer.js +5 -0
  74. package/dist/core/export-html/tool-renderer.js.map +1 -1
  75. package/dist/core/extensions/index.d.ts +1 -1
  76. package/dist/core/extensions/index.d.ts.map +1 -1
  77. package/dist/core/extensions/index.js.map +1 -1
  78. package/dist/core/extensions/loader.d.ts.map +1 -1
  79. package/dist/core/extensions/loader.js +7 -6
  80. package/dist/core/extensions/loader.js.map +1 -1
  81. package/dist/core/extensions/pi-ai-extension-view.d.ts +19 -0
  82. package/dist/core/extensions/pi-ai-extension-view.d.ts.map +1 -0
  83. package/dist/core/extensions/pi-ai-extension-view.js +22 -0
  84. package/dist/core/extensions/pi-ai-extension-view.js.map +1 -0
  85. package/dist/core/extensions/runner.d.ts +0 -1
  86. package/dist/core/extensions/runner.d.ts.map +1 -1
  87. package/dist/core/extensions/runner.js +7 -12
  88. package/dist/core/extensions/runner.js.map +1 -1
  89. package/dist/core/extensions/types.d.ts +41 -23
  90. package/dist/core/extensions/types.d.ts.map +1 -1
  91. package/dist/core/extensions/types.js.map +1 -1
  92. package/dist/core/extensions/virtual-modules.d.ts.map +1 -1
  93. package/dist/core/extensions/virtual-modules.js +8 -7
  94. package/dist/core/extensions/virtual-modules.js.map +1 -1
  95. package/dist/core/mcp-servers.d.ts +11 -4
  96. package/dist/core/mcp-servers.d.ts.map +1 -1
  97. package/dist/core/mcp-servers.js +15 -5
  98. package/dist/core/mcp-servers.js.map +1 -1
  99. package/dist/core/model-config.d.ts +1678 -2029
  100. package/dist/core/model-config.d.ts.map +1 -1
  101. package/dist/core/model-config.js +2 -3
  102. package/dist/core/model-config.js.map +1 -1
  103. package/dist/core/model-resolver.d.ts.map +1 -1
  104. package/dist/core/model-resolver.js +16 -10
  105. package/dist/core/model-resolver.js.map +1 -1
  106. package/dist/core/package-manager.d.ts +14 -0
  107. package/dist/core/package-manager.d.ts.map +1 -1
  108. package/dist/core/package-manager.js +160 -46
  109. package/dist/core/package-manager.js.map +1 -1
  110. package/dist/core/pi-ai-schemas.d.ts +163 -0
  111. package/dist/core/pi-ai-schemas.d.ts.map +1 -0
  112. package/dist/core/pi-ai-schemas.js +21 -0
  113. package/dist/core/pi-ai-schemas.js.map +1 -0
  114. package/dist/core/pi-manifest.d.ts +1 -0
  115. package/dist/core/pi-manifest.d.ts.map +1 -1
  116. package/dist/core/pi-manifest.js +4 -0
  117. package/dist/core/pi-manifest.js.map +1 -1
  118. package/dist/core/project-trust.js +1 -1
  119. package/dist/core/project-trust.js.map +1 -1
  120. package/dist/core/quiescence.d.ts +24 -0
  121. package/dist/core/quiescence.d.ts.map +1 -0
  122. package/dist/core/quiescence.js +81 -0
  123. package/dist/core/quiescence.js.map +1 -0
  124. package/dist/core/resource-loader.d.ts +4 -1
  125. package/dist/core/resource-loader.d.ts.map +1 -1
  126. package/dist/core/resource-loader.js +41 -28
  127. package/dist/core/resource-loader.js.map +1 -1
  128. package/dist/core/sdk.d.ts.map +1 -1
  129. package/dist/core/sdk.js +3 -1
  130. package/dist/core/sdk.js.map +1 -1
  131. package/dist/core/session-manager.d.ts +7 -0
  132. package/dist/core/session-manager.d.ts.map +1 -1
  133. package/dist/core/session-manager.js +32 -13
  134. package/dist/core/session-manager.js.map +1 -1
  135. package/dist/core/settings-manager.d.ts +2 -0
  136. package/dist/core/settings-manager.d.ts.map +1 -1
  137. package/dist/core/settings-manager.js +11 -0
  138. package/dist/core/settings-manager.js.map +1 -1
  139. package/dist/core/settings-schema.d.ts +4 -2
  140. package/dist/core/settings-schema.d.ts.map +1 -1
  141. package/dist/core/settings-schema.js +8 -1
  142. package/dist/core/settings-schema.js.map +1 -1
  143. package/dist/core/skills.d.ts.map +1 -1
  144. package/dist/core/skills.js +6 -14
  145. package/dist/core/skills.js.map +1 -1
  146. package/dist/core/slash-command-name.d.ts +6 -0
  147. package/dist/core/slash-command-name.d.ts.map +1 -0
  148. package/dist/core/slash-command-name.js +11 -0
  149. package/dist/core/slash-command-name.js.map +1 -0
  150. package/dist/core/slash-commands.js +2 -2
  151. package/dist/core/slash-commands.js.map +1 -1
  152. package/dist/core/source-info.d.ts +9 -0
  153. package/dist/core/source-info.d.ts.map +1 -1
  154. package/dist/core/source-info.js +13 -0
  155. package/dist/core/source-info.js.map +1 -1
  156. package/dist/core/system-prompt.d.ts.map +1 -1
  157. package/dist/core/system-prompt.js +5 -6
  158. package/dist/core/system-prompt.js.map +1 -1
  159. package/dist/core/tasks/activity.d.ts +14 -0
  160. package/dist/core/tasks/activity.d.ts.map +1 -0
  161. package/dist/core/tasks/activity.js +58 -0
  162. package/dist/core/tasks/activity.js.map +1 -0
  163. package/dist/core/tasks/codec.d.ts +14 -0
  164. package/dist/core/tasks/codec.d.ts.map +1 -1
  165. package/dist/core/tasks/codec.js +57 -4
  166. package/dist/core/tasks/codec.js.map +1 -1
  167. package/dist/core/tasks/execution.d.ts.map +1 -1
  168. package/dist/core/tasks/execution.js +2 -2
  169. package/dist/core/tasks/execution.js.map +1 -1
  170. package/dist/core/tasks/output.d.ts +4 -1
  171. package/dist/core/tasks/output.d.ts.map +1 -1
  172. package/dist/core/tasks/output.js +33 -0
  173. package/dist/core/tasks/output.js.map +1 -1
  174. package/dist/core/tasks/record.d.ts +1 -7
  175. package/dist/core/tasks/record.d.ts.map +1 -1
  176. package/dist/core/tasks/record.js +0 -18
  177. package/dist/core/tasks/record.js.map +1 -1
  178. package/dist/core/tasks/reminder.d.ts +3 -2
  179. package/dist/core/tasks/reminder.d.ts.map +1 -1
  180. package/dist/core/tasks/reminder.js +4 -3
  181. package/dist/core/tasks/reminder.js.map +1 -1
  182. package/dist/core/tasks/runtime.d.ts +0 -2
  183. package/dist/core/tasks/runtime.d.ts.map +1 -1
  184. package/dist/core/tasks/runtime.js +2 -15
  185. package/dist/core/tasks/runtime.js.map +1 -1
  186. package/dist/core/tasks/session.d.ts +9 -2
  187. package/dist/core/tasks/session.d.ts.map +1 -1
  188. package/dist/core/tasks/session.js +23 -9
  189. package/dist/core/tasks/session.js.map +1 -1
  190. package/dist/core/tasks/types.d.ts +20 -20
  191. package/dist/core/tasks/types.d.ts.map +1 -1
  192. package/dist/core/tasks/types.js +1 -1
  193. package/dist/core/tasks/types.js.map +1 -1
  194. package/dist/core/tools/bash.d.ts +8 -7
  195. package/dist/core/tools/bash.d.ts.map +1 -1
  196. package/dist/core/tools/bash.js +6 -5
  197. package/dist/core/tools/bash.js.map +1 -1
  198. package/dist/core/tools/edit.d.ts +3 -3
  199. package/dist/core/tools/edit.d.ts.map +1 -1
  200. package/dist/core/tools/edit.js +2 -4
  201. package/dist/core/tools/edit.js.map +1 -1
  202. package/dist/core/tools/find.d.ts +2 -2
  203. package/dist/core/tools/find.d.ts.map +1 -1
  204. package/dist/core/tools/find.js.map +1 -1
  205. package/dist/core/tools/grep.d.ts +2 -2
  206. package/dist/core/tools/grep.d.ts.map +1 -1
  207. package/dist/core/tools/grep.js +1 -1
  208. package/dist/core/tools/grep.js.map +1 -1
  209. package/dist/core/tools/ls.d.ts +2 -2
  210. package/dist/core/tools/ls.d.ts.map +1 -1
  211. package/dist/core/tools/ls.js.map +1 -1
  212. package/dist/core/tools/powershell.d.ts +1 -5
  213. package/dist/core/tools/powershell.d.ts.map +1 -1
  214. package/dist/core/tools/read.d.ts +2 -2
  215. package/dist/core/tools/read.d.ts.map +1 -1
  216. package/dist/core/tools/read.js.map +1 -1
  217. package/dist/core/tools/render-utils.d.ts +4 -6
  218. package/dist/core/tools/render-utils.d.ts.map +1 -1
  219. package/dist/core/tools/render-utils.js +19 -41
  220. package/dist/core/tools/render-utils.js.map +1 -1
  221. package/dist/core/tools/renderers/bash.d.ts.map +1 -1
  222. package/dist/core/tools/renderers/bash.js +3 -25
  223. package/dist/core/tools/renderers/bash.js.map +1 -1
  224. package/dist/core/tools/renderers/write.d.ts.map +1 -1
  225. package/dist/core/tools/renderers/write.js +18 -19
  226. package/dist/core/tools/renderers/write.js.map +1 -1
  227. package/dist/core/tools/shell-execution.d.ts +20 -13
  228. package/dist/core/tools/shell-execution.d.ts.map +1 -1
  229. package/dist/core/tools/shell-execution.js +165 -183
  230. package/dist/core/tools/shell-execution.js.map +1 -1
  231. package/dist/core/tools/shell-tool.d.ts +9 -14
  232. package/dist/core/tools/shell-tool.d.ts.map +1 -1
  233. package/dist/core/tools/shell-tool.js +38 -66
  234. package/dist/core/tools/shell-tool.js.map +1 -1
  235. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -4
  236. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  237. package/dist/core/tools/tool-definition-wrapper.js +2 -3
  238. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  239. package/dist/core/tools/write.d.ts +2 -2
  240. package/dist/core/tools/write.d.ts.map +1 -1
  241. package/dist/core/tools/write.js.map +1 -1
  242. package/dist/core/trust-manager.d.ts.map +1 -1
  243. package/dist/core/trust-manager.js +30 -13
  244. package/dist/core/trust-manager.js.map +1 -1
  245. package/dist/core/usage-totals.d.ts +0 -9
  246. package/dist/core/usage-totals.d.ts.map +1 -1
  247. package/dist/core/usage-totals.js +24 -91
  248. package/dist/core/usage-totals.js.map +1 -1
  249. package/dist/extensions/agent/activity-lines.d.ts +2 -7
  250. package/dist/extensions/agent/activity-lines.d.ts.map +1 -1
  251. package/dist/extensions/agent/activity-lines.js +6 -74
  252. package/dist/extensions/agent/activity-lines.js.map +1 -1
  253. package/dist/extensions/agent/activity.d.ts +0 -21
  254. package/dist/extensions/agent/activity.d.ts.map +1 -1
  255. package/dist/extensions/agent/activity.js +0 -63
  256. package/dist/extensions/agent/activity.js.map +1 -1
  257. package/dist/extensions/agent/progress.d.ts +0 -3
  258. package/dist/extensions/agent/progress.d.ts.map +1 -1
  259. package/dist/extensions/agent/progress.js +11 -10
  260. package/dist/extensions/agent/progress.js.map +1 -1
  261. package/dist/extensions/agent/render.js +1 -1
  262. package/dist/extensions/agent/render.js.map +1 -1
  263. package/dist/extensions/agent/tool.d.ts.map +1 -1
  264. package/dist/extensions/agent/tool.js +0 -6
  265. package/dist/extensions/agent/tool.js.map +1 -1
  266. package/dist/extensions/agent/types.d.ts +3 -11
  267. package/dist/extensions/agent/types.d.ts.map +1 -1
  268. package/dist/extensions/agent/types.js.map +1 -1
  269. package/dist/{core/isolated-session.d.ts → extensions/agent/worker-session.d.ts} +6 -6
  270. package/dist/extensions/agent/worker-session.d.ts.map +1 -0
  271. package/dist/{core/isolated-session.js → extensions/agent/worker-session.js} +9 -9
  272. package/dist/extensions/agent/worker-session.js.map +1 -0
  273. package/dist/extensions/agent/worker.d.ts +0 -3
  274. package/dist/extensions/agent/worker.d.ts.map +1 -1
  275. package/dist/extensions/agent/worker.js +2 -3
  276. package/dist/extensions/agent/worker.js.map +1 -1
  277. package/dist/extensions/btw/agent.d.ts.map +1 -1
  278. package/dist/extensions/btw/agent.js +2 -1
  279. package/dist/extensions/btw/agent.js.map +1 -1
  280. package/dist/extensions/cached-compaction/render.d.ts.map +1 -1
  281. package/dist/extensions/cached-compaction/render.js +3 -3
  282. package/dist/extensions/cached-compaction/render.js.map +1 -1
  283. package/dist/extensions/codemode/renderer.d.ts.map +1 -1
  284. package/dist/extensions/codemode/renderer.js +6 -2
  285. package/dist/extensions/codemode/renderer.js.map +1 -1
  286. package/dist/extensions/codemode/tool.d.ts +2 -1
  287. package/dist/extensions/codemode/tool.d.ts.map +1 -1
  288. package/dist/extensions/codemode/tool.js +33 -8
  289. package/dist/extensions/codemode/tool.js.map +1 -1
  290. package/dist/extensions/deepwiki/schema.d.ts.map +1 -1
  291. package/dist/extensions/deepwiki/schema.js +1 -1
  292. package/dist/extensions/deepwiki/schema.js.map +1 -1
  293. package/dist/extensions/llama/ui.d.ts.map +1 -1
  294. package/dist/extensions/llama/ui.js +16 -4
  295. package/dist/extensions/llama/ui.js.map +1 -1
  296. package/dist/extensions/mcp/cli.d.ts.map +1 -1
  297. package/dist/extensions/mcp/cli.js +34 -8
  298. package/dist/extensions/mcp/cli.js.map +1 -1
  299. package/dist/extensions/mcp/oauth.d.ts +1 -1
  300. package/dist/extensions/mcp/oauth.d.ts.map +1 -1
  301. package/dist/extensions/mcp/oauth.js +36 -13
  302. package/dist/extensions/mcp/oauth.js.map +1 -1
  303. package/dist/extensions/mcp/ui.d.ts +1 -0
  304. package/dist/extensions/mcp/ui.d.ts.map +1 -1
  305. package/dist/extensions/mcp/ui.js +33 -24
  306. package/dist/extensions/mcp/ui.js.map +1 -1
  307. package/dist/extensions/run-summary/index.d.ts +1 -1
  308. package/dist/extensions/run-summary/index.d.ts.map +1 -1
  309. package/dist/extensions/run-summary/index.js +11 -23
  310. package/dist/extensions/run-summary/index.js.map +1 -1
  311. package/dist/extensions/statusline/usage.d.ts.map +1 -1
  312. package/dist/extensions/statusline/usage.js +2 -1
  313. package/dist/extensions/statusline/usage.js.map +1 -1
  314. package/dist/extensions/tasks/tool/schema.d.ts.map +1 -1
  315. package/dist/extensions/tasks/tool/schema.js +1 -1
  316. package/dist/extensions/tasks/tool/schema.js.map +1 -1
  317. package/dist/extensions/tasks/ui/completion-render.d.ts +5 -1
  318. package/dist/extensions/tasks/ui/completion-render.d.ts.map +1 -1
  319. package/dist/extensions/tasks/ui/completion-render.js +25 -70
  320. package/dist/extensions/tasks/ui/completion-render.js.map +1 -1
  321. package/dist/extensions/tasks/ui/inspector.d.ts +1 -1
  322. package/dist/extensions/tasks/ui/inspector.d.ts.map +1 -1
  323. package/dist/extensions/tasks/ui/inspector.js +3 -7
  324. package/dist/extensions/tasks/ui/inspector.js.map +1 -1
  325. package/dist/extensions/tasks/ui/manager.d.ts +1 -1
  326. package/dist/extensions/tasks/ui/manager.d.ts.map +1 -1
  327. package/dist/extensions/tasks/ui/manager.js.map +1 -1
  328. package/dist/extensions/tasks/ui/views.d.ts +3 -4
  329. package/dist/extensions/tasks/ui/views.d.ts.map +1 -1
  330. package/dist/extensions/tasks/ui/views.js +15 -14
  331. package/dist/extensions/tasks/ui/views.js.map +1 -1
  332. package/dist/extensions/tool-presentation/fallback.d.ts.map +1 -0
  333. package/dist/{modes/interactive/tool-view → extensions/tool-presentation}/fallback.js +5 -5
  334. package/dist/extensions/tool-presentation/fallback.js.map +1 -0
  335. package/dist/extensions/tool-presentation/index.js +1 -1
  336. package/dist/extensions/tool-presentation/index.js.map +1 -1
  337. package/dist/{modes/interactive/tool-view → extensions/tool-presentation}/shell.d.ts +1 -1
  338. package/dist/extensions/tool-presentation/shell.d.ts.map +1 -0
  339. package/dist/{modes/interactive/tool-view → extensions/tool-presentation}/shell.js +3 -3
  340. package/dist/extensions/tool-presentation/shell.js.map +1 -0
  341. package/dist/extensions/tool-search/tool.d.ts +21 -6
  342. package/dist/extensions/tool-search/tool.d.ts.map +1 -1
  343. package/dist/extensions/tool-search/tool.js +104 -36
  344. package/dist/extensions/tool-search/tool.js.map +1 -1
  345. package/dist/index.d.ts +3 -3
  346. package/dist/index.d.ts.map +1 -1
  347. package/dist/index.js.map +1 -1
  348. package/dist/main.d.ts.map +1 -1
  349. package/dist/main.js +15 -8
  350. package/dist/main.js.map +1 -1
  351. package/dist/modes/interactive/components/assistant-message.d.ts +5 -3
  352. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  353. package/dist/modes/interactive/components/assistant-message.js +61 -45
  354. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  355. package/dist/modes/interactive/components/config-selector-skills.d.ts +54 -0
  356. package/dist/modes/interactive/components/config-selector-skills.d.ts.map +1 -0
  357. package/dist/modes/interactive/components/config-selector-skills.js +178 -0
  358. package/dist/modes/interactive/components/config-selector-skills.js.map +1 -0
  359. package/dist/modes/interactive/components/config-selector.d.ts +2 -11
  360. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  361. package/dist/modes/interactive/components/config-selector.js +31 -181
  362. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  363. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  364. package/dist/modes/interactive/components/custom-editor.js +7 -0
  365. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  366. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  367. package/dist/modes/interactive/components/custom-entry.js +2 -1
  368. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  369. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  370. package/dist/modes/interactive/components/custom-message.js +2 -1
  371. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  372. package/dist/modes/interactive/components/extension-editor.d.ts +2 -0
  373. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  374. package/dist/modes/interactive/components/extension-editor.js +4 -0
  375. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  376. package/dist/modes/interactive/components/login-dialog.d.ts +5 -0
  377. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  378. package/dist/modes/interactive/components/login-dialog.js +103 -10
  379. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  380. package/dist/modes/interactive/components/markdown-transform.d.ts +2 -1
  381. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -1
  382. package/dist/modes/interactive/components/markdown-transform.js +3 -2
  383. package/dist/modes/interactive/components/markdown-transform.js.map +1 -1
  384. package/dist/modes/interactive/components/model-selector.d.ts +1 -0
  385. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  386. package/dist/modes/interactive/components/model-selector.js +17 -6
  387. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  388. package/dist/modes/interactive/components/oauth-selector.d.ts +1 -0
  389. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  390. package/dist/modes/interactive/components/oauth-selector.js +13 -4
  391. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  392. package/dist/modes/interactive/components/scoped-models-selector.d.ts +1 -0
  393. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  394. package/dist/modes/interactive/components/scoped-models-selector.js +14 -3
  395. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  396. package/dist/modes/interactive/components/session-selector-search.d.ts +4 -0
  397. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  398. package/dist/modes/interactive/components/session-selector-search.js +86 -22
  399. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  400. package/dist/modes/interactive/components/session-selector.d.ts +2 -1
  401. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  402. package/dist/modes/interactive/components/session-selector.js +15 -23
  403. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  404. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -1
  405. package/dist/modes/interactive/components/settings-submenu.js +2 -0
  406. package/dist/modes/interactive/components/settings-submenu.js.map +1 -1
  407. package/dist/modes/interactive/components/task-activity-list.d.ts +5 -0
  408. package/dist/modes/interactive/components/task-activity-list.d.ts.map +1 -0
  409. package/dist/modes/interactive/components/task-activity-list.js +68 -0
  410. package/dist/modes/interactive/components/task-activity-list.js.map +1 -0
  411. package/dist/modes/interactive/components/tool-execution.d.ts +7 -0
  412. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  413. package/dist/modes/interactive/components/tool-execution.js +48 -9
  414. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  415. package/dist/modes/interactive/components/tree-selector.d.ts +1 -0
  416. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  417. package/dist/modes/interactive/components/tree-selector.js +5 -6
  418. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  419. package/dist/modes/interactive/components/user-message-selector.d.ts +1 -0
  420. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  421. package/dist/modes/interactive/components/user-message-selector.js +9 -1
  422. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  423. package/dist/modes/interactive/components/user-message.d.ts +3 -1
  424. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  425. package/dist/modes/interactive/components/user-message.js +4 -2
  426. package/dist/modes/interactive/components/user-message.js.map +1 -1
  427. package/dist/modes/interactive/editor-host.d.ts.map +1 -1
  428. package/dist/modes/interactive/editor-host.js +3 -2
  429. package/dist/modes/interactive/editor-host.js.map +1 -1
  430. package/dist/modes/interactive/external-editor.d.ts +1 -0
  431. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  432. package/dist/modes/interactive/external-editor.js +17 -5
  433. package/dist/modes/interactive/external-editor.js.map +1 -1
  434. package/dist/modes/interactive/interactive-mode.d.ts +8 -12
  435. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  436. package/dist/modes/interactive/interactive-mode.js +169 -112
  437. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  438. package/dist/modes/interactive/model-search.d.ts +10 -0
  439. package/dist/modes/interactive/model-search.d.ts.map +1 -1
  440. package/dist/modes/interactive/model-search.js +21 -0
  441. package/dist/modes/interactive/model-search.js.map +1 -1
  442. package/dist/modes/interactive/theme/theme.d.ts +10 -0
  443. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  444. package/dist/modes/interactive/theme/theme.js +30 -23
  445. package/dist/modes/interactive/theme/theme.js.map +1 -1
  446. package/dist/modes/interactive/tool-view/chat.d.ts +2 -2
  447. package/dist/modes/interactive/tool-view/chat.d.ts.map +1 -1
  448. package/dist/modes/interactive/tool-view/chat.js +22 -19
  449. package/dist/modes/interactive/tool-view/chat.js.map +1 -1
  450. package/dist/modes/interactive/transcript-layout.d.ts +2 -0
  451. package/dist/modes/interactive/transcript-layout.d.ts.map +1 -1
  452. package/dist/modes/interactive/transcript-layout.js +5 -2
  453. package/dist/modes/interactive/transcript-layout.js.map +1 -1
  454. package/dist/modes/rpc/rpc-client.d.ts +9 -1
  455. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  456. package/dist/modes/rpc/rpc-client.js +23 -23
  457. package/dist/modes/rpc/rpc-client.js.map +1 -1
  458. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  459. package/dist/modes/rpc/rpc-mode.js +0 -3
  460. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  461. package/dist/package-manager-cli.d.ts.map +1 -1
  462. package/dist/package-manager-cli.js +55 -4
  463. package/dist/package-manager-cli.js.map +1 -1
  464. package/dist/utils/ansi.d.ts.map +1 -1
  465. package/dist/utils/ansi.js +5 -2
  466. package/dist/utils/ansi.js.map +1 -1
  467. package/dist/utils/clipboard-command.d.ts.map +1 -1
  468. package/dist/utils/clipboard-command.js +4 -0
  469. package/dist/utils/clipboard-command.js.map +1 -1
  470. package/dist/utils/git.d.ts +1 -1
  471. package/dist/utils/git.d.ts.map +1 -1
  472. package/dist/utils/git.js.map +1 -1
  473. package/dist/utils/image-resize-core.d.ts.map +1 -1
  474. package/dist/utils/image-resize-core.js +5 -3
  475. package/dist/utils/image-resize-core.js.map +1 -1
  476. package/dist/utils/open-browser.d.ts.map +1 -1
  477. package/dist/utils/open-browser.js +4 -1
  478. package/dist/utils/open-browser.js.map +1 -1
  479. package/dist/utils/paths.d.ts +17 -0
  480. package/dist/utils/paths.d.ts.map +1 -1
  481. package/dist/utils/paths.js +42 -1
  482. package/dist/utils/paths.js.map +1 -1
  483. package/dist/utils/shell.d.ts.map +1 -1
  484. package/dist/utils/shell.js +14 -0
  485. package/dist/utils/shell.js.map +1 -1
  486. package/dist/utils/syntax-highlight.d.ts +5 -0
  487. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  488. package/dist/utils/syntax-highlight.js +7 -0
  489. package/dist/utils/syntax-highlight.js.map +1 -1
  490. package/dist/utils/tools-manager.d.ts.map +1 -1
  491. package/dist/utils/tools-manager.js +30 -35
  492. package/dist/utils/tools-manager.js.map +1 -1
  493. package/dist/utils/usage.d.ts +5 -0
  494. package/dist/utils/usage.d.ts.map +1 -0
  495. package/dist/utils/usage.js +16 -0
  496. package/dist/utils/usage.js.map +1 -0
  497. package/docs/bundled/README.md +1 -1
  498. package/docs/bundled/extensions/agent.md +5 -5
  499. package/docs/bundled/extensions/run-summary.md +4 -4
  500. package/docs/bundled/tasks.md +2 -4
  501. package/docs/bundled/tool-presentation.md +2 -2
  502. package/docs/custom-provider.md +1 -1
  503. package/docs/environment-variables.md +2 -0
  504. package/docs/extensions.md +38 -21
  505. package/docs/keybindings.md +1 -1
  506. package/docs/llama-cpp.md +17 -12
  507. package/docs/mcp.md +6 -4
  508. package/docs/packages.md +26 -1
  509. package/docs/rpc.md +1 -1
  510. package/docs/sdk.md +7 -5
  511. package/docs/session-format.md +2 -2
  512. package/docs/sessions.md +10 -0
  513. package/docs/settings.md +5 -4
  514. package/docs/terminal-setup.md +2 -2
  515. package/docs/tmux.md +6 -0
  516. package/docs/tui.md +12 -7
  517. package/docs/usage.md +19 -9
  518. package/docs/windows.md +29 -0
  519. package/examples/extensions/README.md +2 -1
  520. package/examples/extensions/custom-provider-anthropic/index.ts +27 -31
  521. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  522. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  523. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  524. package/examples/extensions/debug-provider.ts +2 -2
  525. package/examples/extensions/gondolin/package-lock.json +19 -29
  526. package/examples/extensions/gondolin/package.json +2 -2
  527. package/examples/extensions/preset.ts +2 -0
  528. package/examples/extensions/reload-runtime.ts +17 -5
  529. package/examples/extensions/tools.ts +2 -0
  530. package/examples/extensions/with-deps/package-lock.json +2 -2
  531. package/examples/extensions/with-deps/package.json +1 -1
  532. package/package.json +9 -9
  533. package/schemas/models.schema.json +36 -36
  534. package/schemas/settings.schema.json +17 -0
  535. package/dist/bundle/chunks/anthropic-messages-HWL6AS7T.js +0 -6
  536. package/dist/bundle/chunks/azure-openai-responses-4YYPDYV5.js +0 -2
  537. package/dist/bundle/chunks/chunk-6JS2SOFO.js +0 -11
  538. package/dist/bundle/chunks/chunk-ANCZPKX7.js +0 -2
  539. package/dist/bundle/chunks/chunk-FEZ5RM2B.js +0 -2
  540. package/dist/bundle/chunks/chunk-LPF7HQ3S.js +0 -4
  541. package/dist/bundle/chunks/chunk-MMNIHCU7.js +0 -2
  542. package/dist/bundle/chunks/chunk-PUU43PDV.js +0 -1484
  543. package/dist/bundle/chunks/chunk-R267VV5T.js +0 -82
  544. package/dist/bundle/chunks/chunk-RVKT7OUB.js +0 -9
  545. package/dist/bundle/chunks/chunk-SA2AQYEI.js +0 -7
  546. package/dist/bundle/chunks/chunk-ZAIGBRV5.js +0 -16
  547. package/dist/bundle/chunks/mistral-conversations-V2JJTMJ5.js +0 -5
  548. package/dist/bundle/chunks/openai-completions-TXZXILJR.js +0 -7
  549. package/dist/bundle/chunks/pi-messages-LBJQ4NGP.js +0 -8
  550. package/dist/bundle/chunks/virtual-modules-63XNTSVN.js +0 -2
  551. package/dist/core/isolated-session.d.ts.map +0 -1
  552. package/dist/core/isolated-session.js.map +0 -1
  553. package/dist/modes/interactive/tool-view/fallback.d.ts.map +0 -1
  554. package/dist/modes/interactive/tool-view/fallback.js.map +0 -1
  555. package/dist/modes/interactive/tool-view/shell.d.ts.map +0 -1
  556. package/dist/modes/interactive/tool-view/shell.js.map +0 -1
  557. package/dist/utils/path-identity.d.ts +0 -12
  558. package/dist/utils/path-identity.d.ts.map +0 -1
  559. package/dist/utils/path-identity.js +0 -63
  560. package/dist/utils/path-identity.js.map +0 -1
  561. package/examples/extensions/sandbox/index.ts +0 -321
  562. package/examples/extensions/sandbox/package-lock.json +0 -92
  563. package/examples/extensions/sandbox/package.json +0 -19
  564. /package/dist/{modes/interactive/tool-view → extensions/tool-presentation}/fallback.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"assistant-message.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/assistant-message.ts"],"names":[],"mappings":"AACA,OAAO,EAEN,SAAS,EACT,QAAQ,EAER,WAAW,EACX,MAAM,EACN,IAAI,GACJ,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAC3C,MAAM,eAAe,GAAG,gBAAgB,CAAC;AACzC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAC3C,MAAM,sBAAsB,GAAG,UAAU,CAAC;AAC1C,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAElC,MAAM,CAAC,MAAM,6BAA6B,GAAG,aAAa,CAAC;AAI3D,SAAS,uBAAuB,CAAC,KAA0C;IAC1E,OAAO,CACN,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QACvD,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAC/D,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACtC,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa,EAAE,SAAiB;IAC5D,OAAO,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,8EAA8E;AAC9E,MAAM,sBAAsB;IAG3B,YAAY,IAAY,EAAE,QAAgB;QACzC,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,UAAU;QACT,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,KAAa;QACnB,IAAI,KAAK,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC;IAC/D,CAAC;CACD;AAYD,SAAS,uBAAuB,CAAC,OAAiC;IACjE,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QAClC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAChF,SAAS,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,GAAG,uBAAuB,CAAC,CAAC,CAAC;QAC1G,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,mBAAmB,CAAC,sBAAsB,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,IAAI,QAAQ,CAClB,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,SAAS,EACjB,CAAC,EACD,OAAO,CAAC,aAAa,EACrB;QACC,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC;QACvD,MAAM,EAAE,IAAI;KACZ,EACD;QACC,SAAS,EAAE,uBAAuB,CAAC,oBAAoB,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,oBAAoB,CAAC;KAC3G,CACD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,yBAA0B,SAAQ,SAAS;IAYvD,YACC,OAA0B,EAC1B,iBAAiB,GAAG,KAAK,EACzB,gBAA+B,gBAAgB,EAAE,EACjD,mBAAmB,GAAG,6BAA6B,EACnD,SAAS,GAAG,CAAC,EACb,uBAAuD,EAAE;QAEzD,KAAK,EAAE,CAAC;QAZD,iBAAY,GAAG,KAAK,CAAC;QACrB,gBAAW,GAAG,KAAK,CAAC;QACpB,gCAA2B,GAAG,IAAI,GAAG,EAAmB,CAAC;QAYhE,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QAEjD,sCAAsC;QACtC,IAAI,CAAC,gBAAgB,GAAG,IAAI,SAAS,EAAE,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAErC,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC;IAEQ,UAAU;QAClB,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;IAED,oBAAoB,CAAC,IAAa;QACjC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;IAED,sBAAsB,CAAC,KAAa;QACnC,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;IAED,YAAY,CAAC,OAAe;QAC3B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;QACzB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;IAEQ,MAAM,CAAC,KAAa;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC;QACd,CAAC;QAED,KAAK,CAAC,CAAC,CAAC,GAAG,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,eAAe,GAAG,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACxF,OAAO,KAAK,CAAC;IACd,CAAC;IAED,aAAa,CAAC,OAAyB,EAAE,WAAW,GAAG,IAAI,CAAC,WAAW;QACtE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,0BAA0B;QAC1B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAE9B,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAExE,IAAI,iBAAiB,EAAE,CAAC;YACvB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,0BAA0B;QAC1B,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACpD,6DAA6D;gBAC7D,+DAA+D;gBAC/D,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAC7B,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE;oBACnF,SAAS,EAAE,uBAAuB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC;iBAC5F,CAAC,CACF,CAAC;YACH,CAAC;iBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACxC,MAAM,cAAc,GAAa,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACxC,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC3C,IAAI,eAAe,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;wBACzC,MAAM;oBACP,CAAC;oBACD,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACjD,IAAI,QAAQ,EAAE,CAAC;wBACd,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC/B,CAAC;gBACF,CAAC;gBACD,CAAC,EAAE,CAAC;gBAEJ,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjC,SAAS;gBACV,CAAC;gBAED,8DAA8D;gBAC9D,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/C,MAAM,sBAAsB,GAAG,SAAS,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;gBACvE,MAAM,gBAAgB,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;gBAC9E,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,sBAAsB,IAAI,CAAC,gBAAgB,CAAC;gBAE1F,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;gBACpC,MAAM,MAAM,GAAG,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC;gBACxF,MAAM,IAAI,GAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC1F,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;oBACjD,IAAI;oBACJ,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;oBACjC,WAAW,EAAE,IAAI,CAAC,mBAAmB;oBACrC,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,aAAa,EAAE,IAAI,CAAC,aAAa;oBACjC,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;iBAC/C,CAAC,CAAC;gBACH,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAC7B,IAAI,WAAW,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;wBAAE,OAAO,SAAS,CAAC;oBACxE,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;oBACxD,IAAI,IAAI,CAAC,WAAW;wBAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC3D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBAC1B,CAAC,CAAC,CACF,CAAC;gBACF,IAAI,sBAAsB,EAAE,CAAC;oBAC5B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/C,CAAC;YACF,CAAC;QACF,CAAC;QAED,2DAA2D;QAC3D,0EAA0E;QAC1E,oFAAoF;QACpF,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QACxE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAC7B,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,2CAA2C,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAC3F,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAC1B,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACtC,MAAM,YAAY,GACjB,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,YAAY,KAAK,qBAAqB;oBACrE,CAAC,CAAC,OAAO,CAAC,YAAY;oBACtB,CAAC,CAAC,mBAAmB,CAAC;gBACxB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9F,CAAC;iBAAM,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;gBAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,IAAI,eAAe,CAAC;gBACzD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;YACtG,CAAC;QACF,CAAC;IACF,CAAC;CACD","sourcesContent":["import type { AssistantMessage } from \"@earendil-works/pi-ai\";\nimport {\n\ttype Component,\n\tContainer,\n\tMarkdown,\n\ttype MarkdownTheme,\n\tMouseRegion,\n\tSpacer,\n\tText,\n} from \"@earendil-works/pi-tui\";\nimport type { MarkdownTransformer } from \"../../../core/extensions/types.ts\";\nimport { getMarkdownTheme, theme } from \"../theme/theme.ts\";\nimport { createMarkdownTransform } from \"./markdown-transform.ts\";\n\nconst OSC133_ZONE_START = \"\\x1b]133;A\\x07\";\nconst OSC133_ZONE_END = \"\\x1b]133;B\\x07\";\nconst OSC133_ZONE_FINAL = \"\\x1b]133;C\\x07\";\nconst SETTLED_THINKING_LABEL = \"Thoughts\";\nconst THINKING_PREVIEW_LINES = 3;\nconst THINKING_PREVIEW_INDENT = 2;\n\nexport const DEFAULT_ACTIVE_THINKING_LABEL = \"Thinking...\";\n\ntype ThinkingView = \"expanded\" | \"active\" | \"settled\";\n\nfunction isVisibleAssistantBlock(block: AssistantMessage[\"content\"][number]): boolean {\n\treturn (\n\t\t(block.type === \"text\" && block.text.trim().length > 0) ||\n\t\t(block.type === \"thinking\" && block.thinking.trim().length > 0)\n\t);\n}\n\nfunction styleThinkingText(text: string): string {\n\treturn theme.italic(theme.fg(\"thinkingText\", text));\n}\n\nfunction createThinkingLabel(label: string, outputPad: number): Text {\n\treturn new Text(styleThinkingText(label), outputPad, 0);\n}\n\n/** Shows the last three fully wrapped and padded lines of active thinking. */\nclass ThinkingRollingPreview implements Component {\n\tprivate readonly body: Text;\n\n\tconstructor(text: string, paddingX: number) {\n\t\tthis.body = new Text(styleThinkingText(text), paddingX, 0);\n\t}\n\n\tinvalidate(): void {\n\t\tthis.body.invalidate();\n\t}\n\n\trender(width: number): string[] {\n\t\tif (width <= 0) return [];\n\t\treturn this.body.render(width).slice(-THINKING_PREVIEW_LINES);\n\t}\n}\n\ninterface ThinkingComponentOptions {\n\tview: ThinkingView;\n\ttext: string;\n\tactiveLabel: string;\n\toutputPad: number;\n\tmarkdownTheme: MarkdownTheme;\n\tisStreaming: boolean;\n\tmarkdownTransformers: readonly MarkdownTransformer[];\n}\n\nfunction createThinkingComponent(options: ThinkingComponentOptions): Component {\n\tif (options.view === \"active\") {\n\t\tconst container = new Container();\n\t\tcontainer.addChild(createThinkingLabel(options.activeLabel, options.outputPad));\n\t\tcontainer.addChild(new ThinkingRollingPreview(options.text, options.outputPad + THINKING_PREVIEW_INDENT));\n\t\treturn container;\n\t}\n\n\tif (options.view === \"settled\") {\n\t\treturn createThinkingLabel(SETTLED_THINKING_LABEL, options.outputPad);\n\t}\n\n\treturn new Markdown(\n\t\toptions.text,\n\t\toptions.outputPad,\n\t\t0,\n\t\toptions.markdownTheme,\n\t\t{\n\t\t\tcolor: (text: string) => theme.fg(\"thinkingText\", text),\n\t\t\titalic: true,\n\t\t},\n\t\t{\n\t\t\ttransform: createMarkdownTransform(\"assistant-thinking\", options.isStreaming, options.markdownTransformers),\n\t\t},\n\t);\n}\n\n/**\n * Component that renders a complete assistant message\n */\nexport class AssistantMessageComponent extends Container {\n\tprivate contentContainer: Container;\n\tprivate hideThinkingBlock: boolean;\n\tprivate markdownTheme: MarkdownTheme;\n\tprivate activeThinkingLabel: string;\n\tprivate outputPad: number;\n\tprivate markdownTransformers: readonly MarkdownTransformer[];\n\tprivate lastMessage?: AssistantMessage;\n\tprivate hasToolCalls = false;\n\tprivate isStreaming = false;\n\tprivate thinkingVisibilityOverrides = new Map<number, boolean>();\n\n\tconstructor(\n\t\tmessage?: AssistantMessage,\n\t\thideThinkingBlock = false,\n\t\tmarkdownTheme: MarkdownTheme = getMarkdownTheme(),\n\t\tactiveThinkingLabel = DEFAULT_ACTIVE_THINKING_LABEL,\n\t\toutputPad = 1,\n\t\tmarkdownTransformers: readonly MarkdownTransformer[] = [],\n\t) {\n\t\tsuper();\n\n\t\tthis.hideThinkingBlock = hideThinkingBlock;\n\t\tthis.markdownTheme = markdownTheme;\n\t\tthis.activeThinkingLabel = activeThinkingLabel;\n\t\tthis.outputPad = outputPad;\n\t\tthis.markdownTransformers = markdownTransformers;\n\n\t\t// Container for text/thinking content\n\t\tthis.contentContainer = new Container();\n\t\tthis.addChild(this.contentContainer);\n\n\t\tif (message) {\n\t\t\tthis.updateContent(message);\n\t\t}\n\t}\n\n\toverride invalidate(): void {\n\t\tsuper.invalidate();\n\t\tif (this.lastMessage) {\n\t\t\tthis.updateContent(this.lastMessage);\n\t\t}\n\t}\n\n\tsetHideThinkingBlock(hide: boolean): void {\n\t\tthis.hideThinkingBlock = hide;\n\t\tthis.thinkingVisibilityOverrides.clear();\n\t\tif (this.lastMessage) {\n\t\t\tthis.updateContent(this.lastMessage);\n\t\t}\n\t}\n\n\tsetHiddenThinkingLabel(label: string): void {\n\t\tthis.activeThinkingLabel = label;\n\t\tif (this.lastMessage) {\n\t\t\tthis.updateContent(this.lastMessage);\n\t\t}\n\t}\n\n\tsetOutputPad(padding: number): void {\n\t\tthis.outputPad = padding;\n\t\tif (this.lastMessage) {\n\t\t\tthis.updateContent(this.lastMessage);\n\t\t}\n\t}\n\n\toverride render(width: number): string[] {\n\t\tconst lines = super.render(width);\n\t\tif (this.hasToolCalls || lines.length === 0) {\n\t\t\treturn lines;\n\t\t}\n\n\t\tlines[0] = OSC133_ZONE_START + lines[0];\n\t\tlines[lines.length - 1] = OSC133_ZONE_END + OSC133_ZONE_FINAL + lines[lines.length - 1];\n\t\treturn lines;\n\t}\n\n\tupdateContent(message: AssistantMessage, isStreaming = this.isStreaming): void {\n\t\tthis.lastMessage = message;\n\t\tthis.isStreaming = isStreaming;\n\n\t\t// Clear content container\n\t\tthis.contentContainer.clear();\n\n\t\tconst hasVisibleContent = message.content.some(isVisibleAssistantBlock);\n\n\t\tif (hasVisibleContent) {\n\t\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\t}\n\n\t\t// Render content in order\n\t\tlet thinkingRunIndex = 0;\n\t\tfor (let i = 0; i < message.content.length; i++) {\n\t\t\tconst content = message.content[i];\n\t\t\tif (content.type === \"text\" && content.text.trim()) {\n\t\t\t\t// Assistant text messages with no background - trim the text\n\t\t\t\t// Set paddingY=0 to avoid extra spacing before tool executions\n\t\t\t\tthis.contentContainer.addChild(\n\t\t\t\t\tnew Markdown(content.text.trim(), this.outputPad, 0, this.markdownTheme, undefined, {\n\t\t\t\t\t\ttransform: createMarkdownTransform(\"assistant\", this.isStreaming, this.markdownTransformers),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} else if (content.type === \"thinking\") {\n\t\t\t\tconst thinkingBlocks: string[] = [];\n\t\t\t\tfor (; i < message.content.length; i++) {\n\t\t\t\t\tconst thinkingContent = message.content[i];\n\t\t\t\t\tif (thinkingContent.type !== \"thinking\") {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst thinking = thinkingContent.thinking.trim();\n\t\t\t\t\tif (thinking) {\n\t\t\t\t\t\tthinkingBlocks.push(thinking);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ti--;\n\n\t\t\t\tif (thinkingBlocks.length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// After i--, i points at the last block in this thinking run.\n\t\t\t\tconst remaining = message.content.slice(i + 1);\n\t\t\t\tconst hasVisibleContentAfter = remaining.some(isVisibleAssistantBlock);\n\t\t\t\tconst hasToolCallAfter = remaining.some((block) => block.type === \"toolCall\");\n\t\t\t\tconst isActiveThinking = this.isStreaming && !hasVisibleContentAfter && !hasToolCallAfter;\n\n\t\t\t\tconst runIndex = thinkingRunIndex++;\n\t\t\t\tconst hidden = this.thinkingVisibilityOverrides.get(runIndex) ?? this.hideThinkingBlock;\n\t\t\t\tconst view: ThinkingView = !hidden ? \"expanded\" : isActiveThinking ? \"active\" : \"settled\";\n\t\t\t\tconst thinkingComponent = createThinkingComponent({\n\t\t\t\t\tview,\n\t\t\t\t\ttext: thinkingBlocks.join(\"\\n\\n\"),\n\t\t\t\t\tactiveLabel: this.activeThinkingLabel,\n\t\t\t\t\toutputPad: this.outputPad,\n\t\t\t\t\tmarkdownTheme: this.markdownTheme,\n\t\t\t\t\tisStreaming: this.isStreaming,\n\t\t\t\t\tmarkdownTransformers: this.markdownTransformers,\n\t\t\t\t});\n\t\t\t\tthis.contentContainer.addChild(\n\t\t\t\t\tnew MouseRegion(thinkingComponent, (event) => {\n\t\t\t\t\t\tif (event.type !== \"click\" || event.button !== \"left\") return undefined;\n\t\t\t\t\t\tthis.thinkingVisibilityOverrides.set(runIndex, !hidden);\n\t\t\t\t\t\tif (this.lastMessage) this.updateContent(this.lastMessage);\n\t\t\t\t\t\treturn { handled: true };\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tif (hasVisibleContentAfter) {\n\t\t\t\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check if incomplete/failed - show after partial content.\n\t\t// For aborted/error tool calls, tool execution components show the error.\n\t\t// Length stops can happen before a tool call is complete, so surface them here too.\n\t\tconst hasToolCalls = message.content.some((c) => c.type === \"toolCall\");\n\t\tthis.hasToolCalls = hasToolCalls;\n\t\tif (message.stopReason === \"length\") {\n\t\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\t\tthis.contentContainer.addChild(\n\t\t\t\tnew Text(theme.fg(\"error\", \"Response was truncated before completion.\"), this.outputPad, 0),\n\t\t\t);\n\t\t} else if (!hasToolCalls) {\n\t\t\tif (message.stopReason === \"aborted\") {\n\t\t\t\tconst abortMessage =\n\t\t\t\t\tmessage.errorMessage && message.errorMessage !== \"Request was aborted\"\n\t\t\t\t\t\t? message.errorMessage\n\t\t\t\t\t\t: \"Operation aborted\";\n\t\t\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"error\", abortMessage), this.outputPad, 0));\n\t\t\t} else if (message.stopReason === \"error\") {\n\t\t\t\tconst errorMsg = message.errorMessage || \"Unknown error\";\n\t\t\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"error\", `Error: ${errorMsg}`), this.outputPad, 0));\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"assistant-message.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/assistant-message.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage } from \"@earendil-works/pi-ai\";\nimport {\n\ttype Component,\n\tContainer,\n\tMarkdown,\n\ttype MarkdownTheme,\n\tMouseRegion,\n\tSpacer,\n\tText,\n} from \"@earendil-works/pi-tui\";\nimport type { MarkdownTransformer } from \"../../../core/extensions/types.ts\";\nimport { getMarkdownTheme, theme } from \"../theme/theme.ts\";\nimport { createMarkdownTransform } from \"./markdown-transform.ts\";\n\nconst OSC133_ZONE_START = \"\\x1b]133;A\\x07\";\nconst OSC133_ZONE_END = \"\\x1b]133;B\\x07\";\nconst OSC133_ZONE_FINAL = \"\\x1b]133;C\\x07\";\nconst SETTLED_THINKING_LABEL = \"Thoughts\";\nconst THINKING_PREVIEW_LINES = 3;\nconst THINKING_PREVIEW_INDENT = 2;\n\nfunction isVisibleAssistantBlock(block: AssistantMessage[\"content\"][number]): boolean {\n\treturn (\n\t\t(block.type === \"text\" && block.text.trim().length > 0) ||\n\t\t(block.type === \"thinking\" && block.thinking.trim().length > 0)\n\t);\n}\n\nfunction styleThinkingText(text: string): string {\n\treturn theme.italic(theme.fg(\"thinkingText\", text));\n}\n\nfunction createThinkingLabel(label: string, outputPad: number): Text {\n\treturn new Text(styleThinkingText(label), outputPad, 0);\n}\n\n/** Shows the last three fully wrapped and padded lines of active thinking. */\nclass ThinkingRollingPreview implements Component {\n\tprivate readonly body: Text;\n\n\tconstructor(text: string, paddingX: number) {\n\t\tthis.body = new Text(styleThinkingText(text), paddingX, 0);\n\t}\n\n\tinvalidate(): void {\n\t\tthis.body.invalidate();\n\t}\n\n\trender(width: number): string[] {\n\t\tif (width <= 0) return [];\n\t\treturn this.body.render(width).slice(-THINKING_PREVIEW_LINES);\n\t}\n}\n\n/** Collapsed thinking: the label over a rolling preview while the run streams, then a settled label. */\nfunction createCollapsedThinking(active: boolean, text: string, label: string, outputPad: number): Component {\n\tif (!active) return createThinkingLabel(SETTLED_THINKING_LABEL, outputPad);\n\tconst container = new Container();\n\tcontainer.addChild(createThinkingLabel(label, outputPad));\n\tcontainer.addChild(new ThinkingRollingPreview(text, outputPad + THINKING_PREVIEW_INDENT));\n\treturn container;\n}\n\n/**\n * A Markdown block of the last update. The next update reuses it at the same position for the same kind of content, so\n * a streamed answer keeps the blocks it already rendered, also once the stream ends.\n */\ninterface MarkdownSlot {\n\tkind: \"text\" | \"thinking\";\n\tmarkdown: Markdown;\n}\n\n/**\n * Component that renders a complete assistant message\n */\nexport class AssistantMessageComponent extends Container {\n\tprivate contentContainer: Container;\n\tprivate hideThinkingBlock: boolean;\n\tprivate markdownTheme: MarkdownTheme;\n\tprivate hiddenThinkingLabel: string;\n\tprivate outputPad: number;\n\tprivate markdownTransformers: readonly MarkdownTransformer[];\n\tprivate lastMessage?: AssistantMessage;\n\tprivate hasToolCalls = false;\n\tprivate isStreaming = false;\n\tprivate messageId?: string;\n\tprivate timestamp?: string;\n\tprivate thinkingVisibilityOverrides = new Map<number, boolean>();\n\tprivate markdownSlots: MarkdownSlot[] = [];\n\n\tconstructor(\n\t\tmessage?: AssistantMessage,\n\t\thideThinkingBlock = false,\n\t\tmarkdownTheme: MarkdownTheme = getMarkdownTheme(),\n\t\thiddenThinkingLabel = \"Thinking...\",\n\t\toutputPad = 1,\n\t\tmarkdownTransformers: readonly MarkdownTransformer[] = [],\n\t\tmessageId?: string,\n\t\ttimestamp?: string,\n\t) {\n\t\tsuper();\n\n\t\tthis.hideThinkingBlock = hideThinkingBlock;\n\t\tthis.markdownTheme = markdownTheme;\n\t\tthis.hiddenThinkingLabel = hiddenThinkingLabel;\n\t\tthis.outputPad = outputPad;\n\t\tthis.markdownTransformers = markdownTransformers;\n\t\tthis.messageId = messageId;\n\t\tthis.timestamp = timestamp;\n\n\t\t// Container for text/thinking content\n\t\tthis.contentContainer = new Container();\n\t\tthis.addChild(this.contentContainer);\n\n\t\tif (message) {\n\t\t\tthis.updateContent(message);\n\t\t}\n\t}\n\n\toverride invalidate(): void {\n\t\tsuper.invalidate();\n\t\tif (this.lastMessage) {\n\t\t\tthis.updateContent(this.lastMessage);\n\t\t}\n\t}\n\n\tsetHideThinkingBlock(hide: boolean): void {\n\t\tthis.hideThinkingBlock = hide;\n\t\tthis.thinkingVisibilityOverrides.clear();\n\t\tif (this.lastMessage) {\n\t\t\tthis.updateContent(this.lastMessage);\n\t\t}\n\t}\n\n\tsetHiddenThinkingLabel(label: string): void {\n\t\tthis.hiddenThinkingLabel = label;\n\t\tif (this.lastMessage) {\n\t\t\tthis.updateContent(this.lastMessage);\n\t\t}\n\t}\n\n\tsetOutputPad(padding: number): void {\n\t\tthis.outputPad = padding;\n\t\t// Markdown takes its padding at construction.\n\t\tthis.markdownSlots = [];\n\t\tif (this.lastMessage) {\n\t\t\tthis.updateContent(this.lastMessage);\n\t\t}\n\t}\n\n\toverride render(width: number): string[] {\n\t\tconst lines = super.render(width);\n\t\tif (this.hasToolCalls || lines.length === 0) {\n\t\t\treturn lines;\n\t\t}\n\n\t\tlines[0] = OSC133_ZONE_START + lines[0];\n\t\tlines[lines.length - 1] = OSC133_ZONE_END + OSC133_ZONE_FINAL + lines[lines.length - 1];\n\t\treturn lines;\n\t}\n\n\tupdateContent(message: AssistantMessage, isStreaming = this.isStreaming): void {\n\t\tthis.lastMessage = message;\n\t\tthis.isStreaming = isStreaming;\n\n\t\t// Clear content container\n\t\tthis.contentContainer.clear();\n\t\tconst previousSlots = this.markdownSlots;\n\t\tthis.markdownSlots = [];\n\t\tconst markdownBlock = (kind: MarkdownSlot[\"kind\"], text: string, create: () => Markdown): Markdown => {\n\t\t\tconst slot = previousSlots[this.markdownSlots.length];\n\t\t\tconst markdown = slot?.kind === kind ? slot.markdown : create();\n\t\t\tmarkdown.setText(text);\n\t\t\tthis.markdownSlots.push({ kind, markdown });\n\t\t\treturn markdown;\n\t\t};\n\n\t\t// Spacers are added lazily, right before the next visible content block. This puts a blank\n\t\t// line before the first visible block and after each visible thinking run that is followed\n\t\t// by more visible content, while hidden thinking runs without a label contribute nothing.\n\t\tlet needsSpacer = true;\n\t\tconst addVisibleChild = (child: Component) => {\n\t\t\tif (needsSpacer) {\n\t\t\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\t\t\tneedsSpacer = false;\n\t\t\t}\n\t\t\tthis.contentContainer.addChild(child);\n\t\t};\n\n\t\t// Render content in order\n\t\tlet thinkingRunIndex = 0;\n\t\tfor (let i = 0; i < message.content.length; i++) {\n\t\t\tconst content = message.content[i];\n\t\t\tif (content.type === \"text\" && content.text.trim()) {\n\t\t\t\t// Assistant text messages with no background - trim the text\n\t\t\t\t// Set paddingY=0 to avoid extra spacing before tool executions\n\t\t\t\tconst text = content.text.trim();\n\t\t\t\taddVisibleChild(\n\t\t\t\t\tmarkdownBlock(\n\t\t\t\t\t\t\"text\",\n\t\t\t\t\t\ttext,\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\tnew Markdown(text, this.outputPad, 0, this.markdownTheme, undefined, {\n\t\t\t\t\t\t\t\ttransform: createMarkdownTransform(\n\t\t\t\t\t\t\t\t\t\"assistant\",\n\t\t\t\t\t\t\t\t\t() => this.isStreaming,\n\t\t\t\t\t\t\t\t\tthis.markdownTransformers,\n\t\t\t\t\t\t\t\t\tthis.messageId,\n\t\t\t\t\t\t\t\t\tthis.timestamp,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t} else if (content.type === \"thinking\") {\n\t\t\t\tconst thinkingBlocks: string[] = [];\n\t\t\t\tfor (; i < message.content.length; i++) {\n\t\t\t\t\tconst thinkingContent = message.content[i];\n\t\t\t\t\tif (thinkingContent.type !== \"thinking\") {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst thinking = thinkingContent.thinking.trim();\n\t\t\t\t\tif (thinking) {\n\t\t\t\t\t\tthinkingBlocks.push(thinking);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ti--;\n\n\t\t\t\tif (thinkingBlocks.length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// After i--, i points at the last block in this thinking run.\n\t\t\t\tconst isActiveThinking =\n\t\t\t\t\tthis.isStreaming &&\n\t\t\t\t\t!message.content\n\t\t\t\t\t\t.slice(i + 1)\n\t\t\t\t\t\t.some((block) => isVisibleAssistantBlock(block) || block.type === \"toolCall\");\n\n\t\t\t\tconst runIndex = thinkingRunIndex++;\n\t\t\t\tconst hidden = this.thinkingVisibilityOverrides.get(runIndex) ?? this.hideThinkingBlock;\n\t\t\t\t// A hidden run with an empty label renders nothing, including no spacing.\n\t\t\t\tif (hidden && !this.hiddenThinkingLabel.trim()) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst thinking = thinkingBlocks.join(\"\\n\\n\");\n\t\t\t\tconst thinkingComponent = hidden\n\t\t\t\t\t? createCollapsedThinking(isActiveThinking, thinking, this.hiddenThinkingLabel, this.outputPad)\n\t\t\t\t\t: markdownBlock(\n\t\t\t\t\t\t\t\"thinking\",\n\t\t\t\t\t\t\tthinking,\n\t\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\t\tnew Markdown(\n\t\t\t\t\t\t\t\t\tthinking,\n\t\t\t\t\t\t\t\t\tthis.outputPad,\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tthis.markdownTheme,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcolor: (text: string) => theme.fg(\"thinkingText\", text),\n\t\t\t\t\t\t\t\t\t\titalic: true,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttransform: createMarkdownTransform(\n\t\t\t\t\t\t\t\t\t\t\t\"assistant-thinking\",\n\t\t\t\t\t\t\t\t\t\t\t() => this.isStreaming,\n\t\t\t\t\t\t\t\t\t\t\tthis.markdownTransformers,\n\t\t\t\t\t\t\t\t\t\t\tthis.messageId,\n\t\t\t\t\t\t\t\t\t\t\tthis.timestamp,\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\taddVisibleChild(\n\t\t\t\t\tnew MouseRegion(thinkingComponent, (event) => {\n\t\t\t\t\t\tif (event.type !== \"click\" || event.button !== \"left\") return undefined;\n\t\t\t\t\t\tthis.thinkingVisibilityOverrides.set(runIndex, !hidden);\n\t\t\t\t\t\tif (this.lastMessage) this.updateContent(this.lastMessage);\n\t\t\t\t\t\treturn { handled: true };\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\t// Add spacing only when another visible assistant content block follows.\n\t\t\t\t// This avoids a superfluous blank line before separately-rendered tool execution blocks.\n\t\t\t\tneedsSpacer = true;\n\t\t\t}\n\t\t}\n\n\t\t// Check if incomplete/failed - show after partial content.\n\t\t// For aborted/error tool calls, tool execution components show the error.\n\t\t// Length stops can happen before a tool call is complete, so surface them here too.\n\t\tconst hasToolCalls = message.content.some((c) => c.type === \"toolCall\");\n\t\tthis.hasToolCalls = hasToolCalls;\n\t\tif (message.stopReason === \"length\") {\n\t\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\t\tthis.contentContainer.addChild(\n\t\t\t\tnew Text(theme.fg(\"error\", \"Response was truncated before completion.\"), this.outputPad, 0),\n\t\t\t);\n\t\t} else if (!hasToolCalls) {\n\t\t\tif (message.stopReason === \"aborted\") {\n\t\t\t\tconst abortMessage =\n\t\t\t\t\tmessage.errorMessage && message.errorMessage !== \"Request was aborted\"\n\t\t\t\t\t\t? message.errorMessage\n\t\t\t\t\t\t: \"Operation aborted\";\n\t\t\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"error\", abortMessage), this.outputPad, 0));\n\t\t\t} else if (message.stopReason === \"error\") {\n\t\t\t\tconst errorMsg = message.errorMessage || \"Unknown error\";\n\t\t\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"error\", `Error: ${errorMsg}`), this.outputPad, 0));\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
@@ -0,0 +1,54 @@
1
+ import type { DefaultPackageManager, PathMetadata } from "../../../core/package-manager.ts";
2
+ import type { PackageSource, SettingsManager } from "../../../core/settings-manager.ts";
3
+ type SettingsScope = "user" | "project";
4
+ type LoadOverrideState = "inherit" | "load" | "unload";
5
+ /**
6
+ * Store a changed package entry in its shortest form: a bare source once it filters and overrides
7
+ * nothing, and no entry at all for a project delta (`autoload: false`) that no longer changes anything.
8
+ */
9
+ export declare function collapsePackageEntry(packages: PackageSource[], index: number, scope: SettingsScope): void;
10
+ /** What a skill row reads from its resource item. */
11
+ export interface SkillItem {
12
+ path: string;
13
+ enabled: boolean;
14
+ metadata: PathMetadata;
15
+ frontmatterDisableModelInvocation?: boolean;
16
+ }
17
+ /** The resource list's load state, which skill rows extend with invocation. */
18
+ export interface SkillRowHost<Item extends SkillItem> {
19
+ writeScope(): "global" | "project";
20
+ getProjectOverrideState(item: Item): LoadOverrideState;
21
+ setProjectResourceOverride(item: Item, state: LoadOverrideState): boolean;
22
+ setGlobalEnabled(item: Item, enabled: boolean): void;
23
+ getInheritedEnabled(item: Item): boolean;
24
+ isInheritedGlobalItem(item: Item): boolean;
25
+ }
26
+ /**
27
+ * Skill rows of `pi config`. A skill is on, user-only or off rather than loaded or not: load state
28
+ * stays with the resource list, and invocation goes through the shared skill invocation policy, so
29
+ * a key names the same skill here as in skill loading.
30
+ */
31
+ export declare class SkillRows<Item extends SkillItem> {
32
+ private readonly host;
33
+ private readonly settingsManager;
34
+ private readonly invocation;
35
+ constructor(host: SkillRowHost<Item>, settingsManager: SettingsManager, packageManager: DefaultPackageManager);
36
+ /** Advance the skill to its next state; returns whether it is now enabled, or undefined when nothing changed. */
37
+ toggle(item: Item): boolean | undefined;
38
+ checkbox(item: Item): string;
39
+ suffix(item: Item): string;
40
+ /** A project row that only inherits its global state. */
41
+ dimmed(item: Item): boolean;
42
+ /** The state settings give a skill in the current mode; global mode ignores project settings. */
43
+ private effectiveState;
44
+ private inheritedState;
45
+ /** Cycle through the states other than the inherited one, then back to inherit. */
46
+ private nextProjectState;
47
+ private projectState;
48
+ private setGlobalState;
49
+ private setProjectState;
50
+ /** Runs after the load write, which creates the package entry a project override needs. */
51
+ private setInvocationOverride;
52
+ }
53
+ export {};
54
+ //# sourceMappingURL=config-selector-skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-selector-skills.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/config-selector-skills.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAC5F,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAA2B,MAAM,mCAAmC,CAAC;AAKjH,KAAK,aAAa,GAAG,MAAM,GAAG,SAAS,CAAC;AACxC,KAAK,iBAAiB,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAMvD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAMzG;AAOD,qDAAqD;AACrD,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB,iCAAiC,CAAC,EAAE,OAAO,CAAC;CAC5C;AAED,+EAA+E;AAC/E,MAAM,WAAW,YAAY,CAAC,IAAI,SAAS,SAAS;IACnD,UAAU,IAAI,QAAQ,GAAG,SAAS,CAAC;IACnC,uBAAuB,CAAC,IAAI,EAAE,IAAI,GAAG,iBAAiB,CAAC;IACvD,0BAA0B,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAC1E,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACrD,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;IACzC,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;CAC3C;AAED;;;;GAIG;AACH,qBAAa,SAAS,CAAC,IAAI,SAAS,SAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;gBAEvC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB;IAM7G,iHAAiH;IACjH,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,GAAG,SAAS;IAYvC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAqB5B,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAY1B,yDAAyD;IACzD,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAQ3B,iGAAiG;IACjG,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,cAAc;IAQtB,mFAAmF;IACnF,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,eAAe;IAOvB,2FAA2F;IAC3F,OAAO,CAAC,qBAAqB;CA4B7B"}
@@ -0,0 +1,178 @@
1
+ import { matchInvocation, SkillInvocationPolicy, withInvocation } from "../../../core/skill-invocation.js";
2
+ import { resolveSkillEffectiveState } from "../../../core/skills.js";
3
+ import { theme } from "../theme/theme.js";
4
+ const PACKAGE_FILTER_KEYS = ["extensions", "skills", "prompts", "themes"];
5
+ /**
6
+ * Store a changed package entry in its shortest form: a bare source once it filters and overrides
7
+ * nothing, and no entry at all for a project delta (`autoload: false`) that no longer changes anything.
8
+ */
9
+ export function collapsePackageEntry(packages, index, scope) {
10
+ const pkg = packages[index];
11
+ if (typeof pkg !== "object" || pkg.skillInvocationOverrides !== undefined)
12
+ return;
13
+ if (PACKAGE_FILTER_KEYS.some((key) => pkg[key] !== undefined))
14
+ return;
15
+ if (pkg.autoload !== false)
16
+ packages[index] = pkg.source;
17
+ else if (scope === "project")
18
+ packages.splice(index, 1);
19
+ }
20
+ /** The invocation override that pins a skill state; Off and inherit leave invocation to the defaults. */
21
+ function stateInvocation(state) {
22
+ return state === "on" ? "model-and-user" : state === "user-only" ? "user-only" : undefined;
23
+ }
24
+ /**
25
+ * Skill rows of `pi config`. A skill is on, user-only or off rather than loaded or not: load state
26
+ * stays with the resource list, and invocation goes through the shared skill invocation policy, so
27
+ * a key names the same skill here as in skill loading.
28
+ */
29
+ export class SkillRows {
30
+ constructor(host, settingsManager, packageManager) {
31
+ this.host = host;
32
+ this.settingsManager = settingsManager;
33
+ this.invocation = new SkillInvocationPolicy(settingsManager, packageManager);
34
+ }
35
+ /** Advance the skill to its next state; returns whether it is now enabled, or undefined when nothing changed. */
36
+ toggle(item) {
37
+ if (this.host.writeScope() === "project") {
38
+ const state = this.nextProjectState(item);
39
+ if (!this.setProjectState(item, state))
40
+ return undefined;
41
+ return state === "inherit" ? this.inheritedState(item) !== "off" : state !== "off";
42
+ }
43
+ const current = this.effectiveState(item);
44
+ const next = current === "on" ? "user-only" : current === "user-only" ? "off" : "on";
45
+ this.setGlobalState(item, next);
46
+ return next !== "off";
47
+ }
48
+ checkbox(item) {
49
+ if (this.host.writeScope() === "project") {
50
+ const state = this.projectState(item);
51
+ if (state === "on")
52
+ return theme.fg("success", "[+]");
53
+ if (state === "user-only")
54
+ return theme.fg("accent", "[u]");
55
+ if (state === "off")
56
+ return theme.fg("warning", "[-]");
57
+ if (state === "load") {
58
+ const effectiveState = this.effectiveState(item);
59
+ if (effectiveState === "user-only")
60
+ return theme.fg("accent", "[u]");
61
+ if (effectiveState === "off")
62
+ return theme.fg("warning", "[-]");
63
+ return theme.fg("success", "[+]");
64
+ }
65
+ const inheritedState = this.inheritedState(item);
66
+ return theme.fg("dim", inheritedState === "on" ? "[x]" : inheritedState === "user-only" ? "[u]" : "[ ]");
67
+ }
68
+ const state = this.effectiveState(item);
69
+ if (state === "on")
70
+ return theme.fg("success", "[x]");
71
+ if (state === "user-only")
72
+ return theme.fg("accent", "[u]");
73
+ return theme.fg("dim", "[ ]");
74
+ }
75
+ suffix(item) {
76
+ if (this.host.writeScope() === "project") {
77
+ const state = this.projectState(item);
78
+ if (state === "on")
79
+ return theme.fg("muted", " project on");
80
+ if (state === "user-only")
81
+ return theme.fg("muted", " project user only");
82
+ if (state === "off")
83
+ return theme.fg("muted", " project off");
84
+ if (state === "load")
85
+ return theme.fg("muted", " project load");
86
+ return this.host.isInheritedGlobalItem(item) ? theme.fg("dim", " inherited global") : "";
87
+ }
88
+ return this.effectiveState(item) === "user-only" ? theme.fg("accent", " user only") : "";
89
+ }
90
+ /** A project row that only inherits its global state. */
91
+ dimmed(item) {
92
+ return (this.host.writeScope() === "project" &&
93
+ this.host.isInheritedGlobalItem(item) &&
94
+ this.projectState(item) === "inherit");
95
+ }
96
+ /** The state settings give a skill in the current mode; global mode ignores project settings. */
97
+ effectiveState(item) {
98
+ const scopes = this.host.writeScope() === "project" ? ["project", "user"] : ["user"];
99
+ return resolveSkillEffectiveState({
100
+ enabled: item.enabled,
101
+ invocationOverride: this.invocation.resolve(item.path, item.metadata, scopes),
102
+ frontmatterDisableModelInvocation: item.frontmatterDisableModelInvocation,
103
+ });
104
+ }
105
+ inheritedState(item) {
106
+ return resolveSkillEffectiveState({
107
+ enabled: this.host.getInheritedEnabled(item),
108
+ invocationOverride: this.invocation.resolve(item.path, item.metadata, ["user"]),
109
+ frontmatterDisableModelInvocation: item.frontmatterDisableModelInvocation,
110
+ });
111
+ }
112
+ /** Cycle through the states other than the inherited one, then back to inherit. */
113
+ nextProjectState(item) {
114
+ const states = ["on", "user-only", "off"];
115
+ const inheritedIndex = states.indexOf(this.inheritedState(item));
116
+ const sequence = [...states.slice(inheritedIndex + 1), ...states.slice(0, inheritedIndex + 1)];
117
+ const current = this.projectState(item);
118
+ if (current === "inherit")
119
+ return sequence[0];
120
+ if (current === "load")
121
+ return "inherit";
122
+ const currentIndex = sequence.indexOf(current);
123
+ return sequence[currentIndex + 1] ?? "inherit";
124
+ }
125
+ projectState(item) {
126
+ if (this.host.writeScope() !== "project")
127
+ return "inherit";
128
+ const loadState = this.host.getProjectOverrideState(item);
129
+ if (loadState === "unload")
130
+ return "off";
131
+ const layer = this.invocation.layer("project", item.metadata);
132
+ const invocation = layer ? matchInvocation(layer, item.path).override : undefined;
133
+ if (invocation)
134
+ return invocation === "user-only" ? "user-only" : "on";
135
+ return loadState;
136
+ }
137
+ setGlobalState(item, state) {
138
+ this.host.setGlobalEnabled(item, state !== "off");
139
+ this.setInvocationOverride(item, "user", stateInvocation(state));
140
+ }
141
+ setProjectState(item, state) {
142
+ const loadState = state === "inherit" ? "inherit" : state === "off" ? "unload" : "load";
143
+ if (!this.host.setProjectResourceOverride(item, loadState))
144
+ return false;
145
+ this.setInvocationOverride(item, "project", stateInvocation(state));
146
+ return true;
147
+ }
148
+ /** Runs after the load write, which creates the package entry a project override needs. */
149
+ setInvocationOverride(item, scope, override) {
150
+ const layer = this.invocation.layer(scope, item.metadata);
151
+ if (!layer)
152
+ return;
153
+ const overrides = withInvocation(layer, item.path, override);
154
+ if (item.metadata.origin === "top-level") {
155
+ if (scope === "project")
156
+ this.settingsManager.setProjectSkillInvocationOverrides(overrides);
157
+ else
158
+ this.settingsManager.setSkillInvocationOverrides(overrides);
159
+ return;
160
+ }
161
+ const settings = scope === "project" ? this.settingsManager.getProjectSettings() : this.settingsManager.getGlobalSettings();
162
+ const packages = [...(settings.packages ?? [])];
163
+ const pkgIndex = this.invocation.findPackage(scope, item.metadata);
164
+ const current = packages[pkgIndex];
165
+ if (current === undefined || (typeof current === "string" && !overrides))
166
+ return;
167
+ packages[pkgIndex] = {
168
+ ...(typeof current === "string" ? { source: current } : current),
169
+ skillInvocationOverrides: overrides,
170
+ };
171
+ collapsePackageEntry(packages, pkgIndex, scope);
172
+ if (scope === "project")
173
+ this.settingsManager.setProjectPackages(packages);
174
+ else
175
+ this.settingsManager.setPackages(packages);
176
+ }
177
+ }
178
+ //# sourceMappingURL=config-selector-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-selector-skills.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/config-selector-skills.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DefaultPackageManager, PathMetadata } from \"../../../core/package-manager.ts\";\nimport type { PackageSource, SettingsManager, SkillInvocationOverride } from \"../../../core/settings-manager.ts\";\nimport { matchInvocation, SkillInvocationPolicy, withInvocation } from \"../../../core/skill-invocation.ts\";\nimport { resolveSkillEffectiveState, type SkillEffectiveState } from \"../../../core/skills.ts\";\nimport { theme } from \"../theme/theme.ts\";\n\ntype SettingsScope = \"user\" | \"project\";\ntype LoadOverrideState = \"inherit\" | \"load\" | \"unload\";\n/** A project skill override. `load` is a load override without an invocation override, shown as its effective state. */\ntype ProjectSkillState = SkillEffectiveState | \"inherit\" | \"load\";\n\nconst PACKAGE_FILTER_KEYS = [\"extensions\", \"skills\", \"prompts\", \"themes\"] as const;\n\n/**\n * Store a changed package entry in its shortest form: a bare source once it filters and overrides\n * nothing, and no entry at all for a project delta (`autoload: false`) that no longer changes anything.\n */\nexport function collapsePackageEntry(packages: PackageSource[], index: number, scope: SettingsScope): void {\n\tconst pkg = packages[index];\n\tif (typeof pkg !== \"object\" || pkg.skillInvocationOverrides !== undefined) return;\n\tif (PACKAGE_FILTER_KEYS.some((key) => pkg[key] !== undefined)) return;\n\tif (pkg.autoload !== false) packages[index] = pkg.source;\n\telse if (scope === \"project\") packages.splice(index, 1);\n}\n\n/** The invocation override that pins a skill state; Off and inherit leave invocation to the defaults. */\nfunction stateInvocation(state: ProjectSkillState): SkillInvocationOverride | undefined {\n\treturn state === \"on\" ? \"model-and-user\" : state === \"user-only\" ? \"user-only\" : undefined;\n}\n\n/** What a skill row reads from its resource item. */\nexport interface SkillItem {\n\tpath: string;\n\tenabled: boolean;\n\tmetadata: PathMetadata;\n\tfrontmatterDisableModelInvocation?: boolean;\n}\n\n/** The resource list's load state, which skill rows extend with invocation. */\nexport interface SkillRowHost<Item extends SkillItem> {\n\twriteScope(): \"global\" | \"project\";\n\tgetProjectOverrideState(item: Item): LoadOverrideState;\n\tsetProjectResourceOverride(item: Item, state: LoadOverrideState): boolean;\n\tsetGlobalEnabled(item: Item, enabled: boolean): void;\n\tgetInheritedEnabled(item: Item): boolean;\n\tisInheritedGlobalItem(item: Item): boolean;\n}\n\n/**\n * Skill rows of `pi config`. A skill is on, user-only or off rather than loaded or not: load state\n * stays with the resource list, and invocation goes through the shared skill invocation policy, so\n * a key names the same skill here as in skill loading.\n */\nexport class SkillRows<Item extends SkillItem> {\n\tprivate readonly host: SkillRowHost<Item>;\n\tprivate readonly settingsManager: SettingsManager;\n\tprivate readonly invocation: SkillInvocationPolicy;\n\n\tconstructor(host: SkillRowHost<Item>, settingsManager: SettingsManager, packageManager: DefaultPackageManager) {\n\t\tthis.host = host;\n\t\tthis.settingsManager = settingsManager;\n\t\tthis.invocation = new SkillInvocationPolicy(settingsManager, packageManager);\n\t}\n\n\t/** Advance the skill to its next state; returns whether it is now enabled, or undefined when nothing changed. */\n\ttoggle(item: Item): boolean | undefined {\n\t\tif (this.host.writeScope() === \"project\") {\n\t\t\tconst state = this.nextProjectState(item);\n\t\t\tif (!this.setProjectState(item, state)) return undefined;\n\t\t\treturn state === \"inherit\" ? this.inheritedState(item) !== \"off\" : state !== \"off\";\n\t\t}\n\t\tconst current = this.effectiveState(item);\n\t\tconst next: SkillEffectiveState = current === \"on\" ? \"user-only\" : current === \"user-only\" ? \"off\" : \"on\";\n\t\tthis.setGlobalState(item, next);\n\t\treturn next !== \"off\";\n\t}\n\n\tcheckbox(item: Item): string {\n\t\tif (this.host.writeScope() === \"project\") {\n\t\t\tconst state = this.projectState(item);\n\t\t\tif (state === \"on\") return theme.fg(\"success\", \"[+]\");\n\t\t\tif (state === \"user-only\") return theme.fg(\"accent\", \"[u]\");\n\t\t\tif (state === \"off\") return theme.fg(\"warning\", \"[-]\");\n\t\t\tif (state === \"load\") {\n\t\t\t\tconst effectiveState = this.effectiveState(item);\n\t\t\t\tif (effectiveState === \"user-only\") return theme.fg(\"accent\", \"[u]\");\n\t\t\t\tif (effectiveState === \"off\") return theme.fg(\"warning\", \"[-]\");\n\t\t\t\treturn theme.fg(\"success\", \"[+]\");\n\t\t\t}\n\t\t\tconst inheritedState = this.inheritedState(item);\n\t\t\treturn theme.fg(\"dim\", inheritedState === \"on\" ? \"[x]\" : inheritedState === \"user-only\" ? \"[u]\" : \"[ ]\");\n\t\t}\n\t\tconst state = this.effectiveState(item);\n\t\tif (state === \"on\") return theme.fg(\"success\", \"[x]\");\n\t\tif (state === \"user-only\") return theme.fg(\"accent\", \"[u]\");\n\t\treturn theme.fg(\"dim\", \"[ ]\");\n\t}\n\n\tsuffix(item: Item): string {\n\t\tif (this.host.writeScope() === \"project\") {\n\t\t\tconst state = this.projectState(item);\n\t\t\tif (state === \"on\") return theme.fg(\"muted\", \" project on\");\n\t\t\tif (state === \"user-only\") return theme.fg(\"muted\", \" project user only\");\n\t\t\tif (state === \"off\") return theme.fg(\"muted\", \" project off\");\n\t\t\tif (state === \"load\") return theme.fg(\"muted\", \" project load\");\n\t\t\treturn this.host.isInheritedGlobalItem(item) ? theme.fg(\"dim\", \" inherited global\") : \"\";\n\t\t}\n\t\treturn this.effectiveState(item) === \"user-only\" ? theme.fg(\"accent\", \" user only\") : \"\";\n\t}\n\n\t/** A project row that only inherits its global state. */\n\tdimmed(item: Item): boolean {\n\t\treturn (\n\t\t\tthis.host.writeScope() === \"project\" &&\n\t\t\tthis.host.isInheritedGlobalItem(item) &&\n\t\t\tthis.projectState(item) === \"inherit\"\n\t\t);\n\t}\n\n\t/** The state settings give a skill in the current mode; global mode ignores project settings. */\n\tprivate effectiveState(item: Item): SkillEffectiveState {\n\t\tconst scopes: SettingsScope[] = this.host.writeScope() === \"project\" ? [\"project\", \"user\"] : [\"user\"];\n\t\treturn resolveSkillEffectiveState({\n\t\t\tenabled: item.enabled,\n\t\t\tinvocationOverride: this.invocation.resolve(item.path, item.metadata, scopes),\n\t\t\tfrontmatterDisableModelInvocation: item.frontmatterDisableModelInvocation,\n\t\t});\n\t}\n\n\tprivate inheritedState(item: Item): SkillEffectiveState {\n\t\treturn resolveSkillEffectiveState({\n\t\t\tenabled: this.host.getInheritedEnabled(item),\n\t\t\tinvocationOverride: this.invocation.resolve(item.path, item.metadata, [\"user\"]),\n\t\t\tfrontmatterDisableModelInvocation: item.frontmatterDisableModelInvocation,\n\t\t});\n\t}\n\n\t/** Cycle through the states other than the inherited one, then back to inherit. */\n\tprivate nextProjectState(item: Item): Exclude<ProjectSkillState, \"load\"> {\n\t\tconst states: SkillEffectiveState[] = [\"on\", \"user-only\", \"off\"];\n\t\tconst inheritedIndex = states.indexOf(this.inheritedState(item));\n\t\tconst sequence = [...states.slice(inheritedIndex + 1), ...states.slice(0, inheritedIndex + 1)];\n\t\tconst current = this.projectState(item);\n\t\tif (current === \"inherit\") return sequence[0]!;\n\t\tif (current === \"load\") return \"inherit\";\n\t\tconst currentIndex = sequence.indexOf(current);\n\t\treturn sequence[currentIndex + 1] ?? \"inherit\";\n\t}\n\n\tprivate projectState(item: Item): ProjectSkillState {\n\t\tif (this.host.writeScope() !== \"project\") return \"inherit\";\n\t\tconst loadState = this.host.getProjectOverrideState(item);\n\t\tif (loadState === \"unload\") return \"off\";\n\t\tconst layer = this.invocation.layer(\"project\", item.metadata);\n\t\tconst invocation = layer ? matchInvocation(layer, item.path).override : undefined;\n\t\tif (invocation) return invocation === \"user-only\" ? \"user-only\" : \"on\";\n\t\treturn loadState;\n\t}\n\n\tprivate setGlobalState(item: Item, state: SkillEffectiveState): void {\n\t\tthis.host.setGlobalEnabled(item, state !== \"off\");\n\t\tthis.setInvocationOverride(item, \"user\", stateInvocation(state));\n\t}\n\n\tprivate setProjectState(item: Item, state: Exclude<ProjectSkillState, \"load\">): boolean {\n\t\tconst loadState: LoadOverrideState = state === \"inherit\" ? \"inherit\" : state === \"off\" ? \"unload\" : \"load\";\n\t\tif (!this.host.setProjectResourceOverride(item, loadState)) return false;\n\t\tthis.setInvocationOverride(item, \"project\", stateInvocation(state));\n\t\treturn true;\n\t}\n\n\t/** Runs after the load write, which creates the package entry a project override needs. */\n\tprivate setInvocationOverride(\n\t\titem: Item,\n\t\tscope: SettingsScope,\n\t\toverride: SkillInvocationOverride | undefined,\n\t): void {\n\t\tconst layer = this.invocation.layer(scope, item.metadata);\n\t\tif (!layer) return;\n\t\tconst overrides = withInvocation(layer, item.path, override);\n\t\tif (item.metadata.origin === \"top-level\") {\n\t\t\tif (scope === \"project\") this.settingsManager.setProjectSkillInvocationOverrides(overrides);\n\t\t\telse this.settingsManager.setSkillInvocationOverrides(overrides);\n\t\t\treturn;\n\t\t}\n\n\t\tconst settings =\n\t\t\tscope === \"project\" ? this.settingsManager.getProjectSettings() : this.settingsManager.getGlobalSettings();\n\t\tconst packages = [...(settings.packages ?? [])];\n\t\tconst pkgIndex = this.invocation.findPackage(scope, item.metadata);\n\t\tconst current = packages[pkgIndex];\n\t\tif (current === undefined || (typeof current === \"string\" && !overrides)) return;\n\t\tpackages[pkgIndex] = {\n\t\t\t...(typeof current === \"string\" ? { source: current } : current),\n\t\t\tskillInvocationOverrides: overrides,\n\t\t};\n\t\tcollapsePackageEntry(packages, pkgIndex, scope);\n\t\tif (scope === \"project\") this.settingsManager.setProjectPackages(packages);\n\t\telse this.settingsManager.setPackages(packages);\n\t}\n}\n"]}
@@ -43,7 +43,7 @@ declare class ResourceList implements Component, Focusable {
43
43
  private writeScope;
44
44
  private inheritedEnabledByKey;
45
45
  private packageManager;
46
- private skillInvocation;
46
+ private skills;
47
47
  onCancel?: () => void;
48
48
  onExit?: () => void;
49
49
  onToggle?: (item: ResourceItem, newEnabled: boolean) => void;
@@ -66,18 +66,9 @@ declare class ResourceList implements Component, Focusable {
66
66
  private toggleResource;
67
67
  private toggleTopLevelResource;
68
68
  private togglePackageResource;
69
- private setGlobalSkillEffectiveState;
70
- private setProjectSkillOverride;
71
- /** Runs after the load write, which creates the package entry a project override needs. */
72
- private setSkillInvocationOverride;
73
69
  private renderCheckbox;
74
70
  private getItemSuffix;
75
71
  private isDimmedItem;
76
- /** The state settings give a skill in the current mode; global mode ignores project settings. */
77
- private getSkillEffectiveState;
78
- private getInheritedSkillEffectiveState;
79
- private getNextProjectSkillOverrideState;
80
- private getProjectSkillOverrideState;
81
72
  private setProjectResourceOverride;
82
73
  private setProjectTopLevelOverride;
83
74
  private setProjectTopLevelPaths;
@@ -91,7 +82,7 @@ declare class ResourceList implements Component, Focusable {
91
82
  private getResourcePatternForScope;
92
83
  private createPackageOverrideSource;
93
84
  /** Package entries match by the identity package loading dedupes on, so `npm:pkg@1` and `npm:pkg` are one package. */
94
- private isSamePackage;
85
+ private packageSourceStringMatches;
95
86
  private findMatchingPackageSource;
96
87
  private getPatternEntryTarget;
97
88
  private getResourceItemKey;
@@ -1 +1 @@
1
- {"version":3,"file":"config-selector.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/config-selector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EACN,KAAK,SAAS,EACd,SAAS,EACT,KAAK,SAAS,EAOd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAEN,KAAK,YAAY,EACjB,KAAK,aAAa,EAElB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAiB,eAAe,EAA2B,MAAM,mCAAmC,CAAC;AAqBjH,KAAK,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AACnE,KAAK,gBAAgB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAI7C,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;AAgB1E,UAAU,YAAY;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC,CAAC,EAAE,OAAO,CAAC;CAC5C;AAED,UAAU,gBAAgB;IACzB,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;CACtB;AAED,UAAU,aAAa;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;IACxC,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAoKD,cAAM,YAAa,YAAW,SAAS,EAAE,SAAS;IACjD,OAAO,CAAC,aAAa,CAA4C;IACjE,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,qBAAqB,CAAuB;IACpD,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,eAAe,CAAwB;IAExC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7D,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAEjC,OAAO,CAAC,QAAQ,CAAS;IACzB,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAGzB;gBAGA,aAAa,EAAE,MAAM,CAAC,gBAAgB,EAAE,aAAa,EAAE,CAAC,EACxD,eAAe,EAAE,eAAe,EAChC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,MAAM,EACvB,UAAU,GAAE,gBAA2B;IAkBxC,aAAa,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI;IAMjD,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,WAAW;IAmDnB,OAAO,CAAC,eAAe;IAKvB,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAetD,UAAU,IAAI,IAAI;IAElB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IA4D/B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA8D/B,OAAO,CAAC,cAAc;IA8BtB,OAAO,CAAC,sBAAsB;IAgD9B,OAAO,CAAC,qBAAqB;IA2D7B,OAAO,CAAC,4BAA4B;IAOpC,OAAO,CAAC,uBAAuB;IAO/B,2FAA2F;IAC3F,OAAO,CAAC,0BAA0B;IA6BlC,OAAO,CAAC,cAAc;IA+BtB,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,YAAY;IAOpB,iGAAiG;IACjG,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,+BAA+B;IAQvC,OAAO,CAAC,gCAAgC;IAWxC,OAAO,CAAC,4BAA4B;IAUpC,OAAO,CAAC,0BAA0B;IAMlC,OAAO,CAAC,0BAA0B;IAoBlC,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,yBAAyB;IAsCjC,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,uBAAuB;IAgB/B,OAAO,CAAC,2BAA2B;IAenC,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,2BAA2B;IAiBnC,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,2BAA2B;IAOnC,sHAAsH;IACtH,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,yBAAyB;IAejC,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,yBAAyB;IAKjC,6GAA6G;IAC7G,OAAO,CAAC,0BAA0B;CAOlC;AAED,qBAAa,uBAAwB,SAAQ,SAAU,YAAW,SAAS;IAC1E,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,UAAU,CAAmB;IAErC,OAAO,CAAC,QAAQ,CAAS;IACzB,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAGzB;gBAGA,aAAa,EAAE,mBAAmB,EAClC,eAAe,EAAE,eAAe,EAChC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,IAAI,EACnB,MAAM,EAAE,MAAM,IAAI,EAClB,aAAa,EAAE,MAAM,IAAI,EACzB,cAAc,CAAC,EAAE,MAAM,EACvB,UAAU,GAAE,gBAA2B,EACvC,oBAAoB,UAAO;IA2C5B,OAAO,CAAC,gBAAgB;IAMxB,eAAe,IAAI,YAAY;CAG/B"}
1
+ {"version":3,"file":"config-selector.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/config-selector.ts"],"names":[],"mappings":"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"}