@mohanscodex/spectra-code 0.4.5

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 (319) hide show
  1. package/README.md +275 -0
  2. package/dist/package.json +62 -0
  3. package/dist/src/agents/definitions.d.ts +16 -0
  4. package/dist/src/agents/definitions.d.ts.map +1 -0
  5. package/dist/src/agents/definitions.js +148 -0
  6. package/dist/src/agents/definitions.js.map +1 -0
  7. package/dist/src/agents/registry.d.ts +11 -0
  8. package/dist/src/agents/registry.d.ts.map +1 -0
  9. package/dist/src/agents/registry.js +13 -0
  10. package/dist/src/agents/registry.js.map +1 -0
  11. package/dist/src/cli.d.ts +3 -0
  12. package/dist/src/cli.d.ts.map +1 -0
  13. package/dist/src/cli.js +436 -0
  14. package/dist/src/cli.js.map +1 -0
  15. package/dist/src/commands/agent.d.ts +3 -0
  16. package/dist/src/commands/agent.d.ts.map +1 -0
  17. package/dist/src/commands/agent.js +28 -0
  18. package/dist/src/commands/agent.js.map +1 -0
  19. package/dist/src/commands/db.d.ts +3 -0
  20. package/dist/src/commands/db.d.ts.map +1 -0
  21. package/dist/src/commands/db.js +47 -0
  22. package/dist/src/commands/db.js.map +1 -0
  23. package/dist/src/commands/doctor.d.ts +12 -0
  24. package/dist/src/commands/doctor.d.ts.map +1 -0
  25. package/dist/src/commands/doctor.js +59 -0
  26. package/dist/src/commands/doctor.js.map +1 -0
  27. package/dist/src/commands/mcp.d.ts +9 -0
  28. package/dist/src/commands/mcp.d.ts.map +1 -0
  29. package/dist/src/commands/mcp.js +208 -0
  30. package/dist/src/commands/mcp.js.map +1 -0
  31. package/dist/src/commands/plugin.d.ts +3 -0
  32. package/dist/src/commands/plugin.d.ts.map +1 -0
  33. package/dist/src/commands/plugin.js +36 -0
  34. package/dist/src/commands/plugin.js.map +1 -0
  35. package/dist/src/commands/session.d.ts +3 -0
  36. package/dist/src/commands/session.d.ts.map +1 -0
  37. package/dist/src/commands/session.js +49 -0
  38. package/dist/src/commands/session.js.map +1 -0
  39. package/dist/src/index.d.ts +19 -0
  40. package/dist/src/index.d.ts.map +1 -0
  41. package/dist/src/index.js +17 -0
  42. package/dist/src/index.js.map +1 -0
  43. package/dist/src/integrations/acp/index.d.ts +2 -0
  44. package/dist/src/integrations/acp/index.d.ts.map +1 -0
  45. package/dist/src/integrations/acp/index.js +2 -0
  46. package/dist/src/integrations/acp/index.js.map +1 -0
  47. package/dist/src/integrations/acp/server.d.ts +11 -0
  48. package/dist/src/integrations/acp/server.d.ts.map +1 -0
  49. package/dist/src/integrations/acp/server.js +220 -0
  50. package/dist/src/integrations/acp/server.js.map +1 -0
  51. package/dist/src/integrations/custom-tools/index.d.ts +3 -0
  52. package/dist/src/integrations/custom-tools/index.d.ts.map +1 -0
  53. package/dist/src/integrations/custom-tools/index.js +2 -0
  54. package/dist/src/integrations/custom-tools/index.js.map +1 -0
  55. package/dist/src/integrations/custom-tools/loader.d.ts +16 -0
  56. package/dist/src/integrations/custom-tools/loader.d.ts.map +1 -0
  57. package/dist/src/integrations/custom-tools/loader.js +95 -0
  58. package/dist/src/integrations/custom-tools/loader.js.map +1 -0
  59. package/dist/src/integrations/mcp/client.d.ts +32 -0
  60. package/dist/src/integrations/mcp/client.d.ts.map +1 -0
  61. package/dist/src/integrations/mcp/client.js +117 -0
  62. package/dist/src/integrations/mcp/client.js.map +1 -0
  63. package/dist/src/integrations/mcp/index.d.ts +3 -0
  64. package/dist/src/integrations/mcp/index.d.ts.map +1 -0
  65. package/dist/src/integrations/mcp/index.js +2 -0
  66. package/dist/src/integrations/mcp/index.js.map +1 -0
  67. package/dist/src/security/doom-loop.d.ts +22 -0
  68. package/dist/src/security/doom-loop.d.ts.map +1 -0
  69. package/dist/src/security/doom-loop.js +72 -0
  70. package/dist/src/security/doom-loop.js.map +1 -0
  71. package/dist/src/security/index.d.ts +46 -0
  72. package/dist/src/security/index.d.ts.map +1 -0
  73. package/dist/src/security/index.js +362 -0
  74. package/dist/src/security/index.js.map +1 -0
  75. package/dist/src/security/path-safety.d.ts +15 -0
  76. package/dist/src/security/path-safety.d.ts.map +1 -0
  77. package/dist/src/security/path-safety.js +57 -0
  78. package/dist/src/security/path-safety.js.map +1 -0
  79. package/dist/src/security/permissions.d.ts +7 -0
  80. package/dist/src/security/permissions.d.ts.map +1 -0
  81. package/dist/src/security/permissions.js +41 -0
  82. package/dist/src/security/permissions.js.map +1 -0
  83. package/dist/src/security/read-tracker.d.ts +20 -0
  84. package/dist/src/security/read-tracker.d.ts.map +1 -0
  85. package/dist/src/security/read-tracker.js +73 -0
  86. package/dist/src/security/read-tracker.js.map +1 -0
  87. package/dist/src/security/ssrf-guard.d.ts +19 -0
  88. package/dist/src/security/ssrf-guard.d.ts.map +1 -0
  89. package/dist/src/security/ssrf-guard.js +98 -0
  90. package/dist/src/security/ssrf-guard.js.map +1 -0
  91. package/dist/src/security/types.d.ts +70 -0
  92. package/dist/src/security/types.d.ts.map +1 -0
  93. package/dist/src/security/types.js +2 -0
  94. package/dist/src/security/types.js.map +1 -0
  95. package/dist/src/security/wildcard.d.ts +5 -0
  96. package/dist/src/security/wildcard.d.ts.map +1 -0
  97. package/dist/src/security/wildcard.js +50 -0
  98. package/dist/src/security/wildcard.js.map +1 -0
  99. package/dist/src/services/auth-store.d.ts +25 -0
  100. package/dist/src/services/auth-store.d.ts.map +1 -0
  101. package/dist/src/services/auth-store.js +40 -0
  102. package/dist/src/services/auth-store.js.map +1 -0
  103. package/dist/src/services/config.d.ts +66 -0
  104. package/dist/src/services/config.d.ts.map +1 -0
  105. package/dist/src/services/config.js +83 -0
  106. package/dist/src/services/config.js.map +1 -0
  107. package/dist/src/services/context.d.ts +7 -0
  108. package/dist/src/services/context.d.ts.map +1 -0
  109. package/dist/src/services/context.js +23 -0
  110. package/dist/src/services/context.js.map +1 -0
  111. package/dist/src/services/custom-providers.d.ts +5 -0
  112. package/dist/src/services/custom-providers.d.ts.map +1 -0
  113. package/dist/src/services/custom-providers.js +213 -0
  114. package/dist/src/services/custom-providers.js.map +1 -0
  115. package/dist/src/services/session-store.d.ts +76 -0
  116. package/dist/src/services/session-store.d.ts.map +1 -0
  117. package/dist/src/services/session-store.js +199 -0
  118. package/dist/src/services/session-store.js.map +1 -0
  119. package/dist/src/services/snapshot-manager.d.ts +46 -0
  120. package/dist/src/services/snapshot-manager.d.ts.map +1 -0
  121. package/dist/src/services/snapshot-manager.js +183 -0
  122. package/dist/src/services/snapshot-manager.js.map +1 -0
  123. package/dist/src/tools/edit.d.ts +3 -0
  124. package/dist/src/tools/edit.d.ts.map +1 -0
  125. package/dist/src/tools/edit.js +57 -0
  126. package/dist/src/tools/edit.js.map +1 -0
  127. package/dist/src/tools/glob.d.ts +3 -0
  128. package/dist/src/tools/glob.d.ts.map +1 -0
  129. package/dist/src/tools/glob.js +46 -0
  130. package/dist/src/tools/glob.js.map +1 -0
  131. package/dist/src/tools/grep.d.ts +3 -0
  132. package/dist/src/tools/grep.d.ts.map +1 -0
  133. package/dist/src/tools/grep.js +50 -0
  134. package/dist/src/tools/grep.js.map +1 -0
  135. package/dist/src/tools/index.d.ts +26 -0
  136. package/dist/src/tools/index.d.ts.map +1 -0
  137. package/dist/src/tools/index.js +202 -0
  138. package/dist/src/tools/index.js.map +1 -0
  139. package/dist/src/tools/mcp-tool.d.ts +5 -0
  140. package/dist/src/tools/mcp-tool.d.ts.map +1 -0
  141. package/dist/src/tools/mcp-tool.js +82 -0
  142. package/dist/src/tools/mcp-tool.js.map +1 -0
  143. package/dist/src/tools/read.d.ts +3 -0
  144. package/dist/src/tools/read.d.ts.map +1 -0
  145. package/dist/src/tools/read.js +48 -0
  146. package/dist/src/tools/read.js.map +1 -0
  147. package/dist/src/tools/shell.d.ts +3 -0
  148. package/dist/src/tools/shell.d.ts.map +1 -0
  149. package/dist/src/tools/shell.js +266 -0
  150. package/dist/src/tools/shell.js.map +1 -0
  151. package/dist/src/tools/task.d.ts +3 -0
  152. package/dist/src/tools/task.d.ts.map +1 -0
  153. package/dist/src/tools/task.js +75 -0
  154. package/dist/src/tools/task.js.map +1 -0
  155. package/dist/src/tools/types.d.ts +18 -0
  156. package/dist/src/tools/types.d.ts.map +1 -0
  157. package/dist/src/tools/types.js +2 -0
  158. package/dist/src/tools/types.js.map +1 -0
  159. package/dist/src/tools/utils.d.ts +4 -0
  160. package/dist/src/tools/utils.d.ts.map +1 -0
  161. package/dist/src/tools/utils.js +10 -0
  162. package/dist/src/tools/utils.js.map +1 -0
  163. package/dist/src/tools/web-fetch.d.ts +3 -0
  164. package/dist/src/tools/web-fetch.d.ts.map +1 -0
  165. package/dist/src/tools/web-fetch.js +81 -0
  166. package/dist/src/tools/web-fetch.js.map +1 -0
  167. package/dist/src/tools/write.d.ts +3 -0
  168. package/dist/src/tools/write.d.ts.map +1 -0
  169. package/dist/src/tools/write.js +28 -0
  170. package/dist/src/tools/write.js.map +1 -0
  171. package/dist/src/tui/app-constants.d.ts +3 -0
  172. package/dist/src/tui/app-constants.d.ts.map +1 -0
  173. package/dist/src/tui/app-constants.js +4 -0
  174. package/dist/src/tui/app-constants.js.map +1 -0
  175. package/dist/src/tui/app.d.ts +5 -0
  176. package/dist/src/tui/app.d.ts.map +1 -0
  177. package/dist/src/tui/app.js +322 -0
  178. package/dist/src/tui/app.js.map +1 -0
  179. package/dist/src/tui/commands.d.ts +61 -0
  180. package/dist/src/tui/commands.d.ts.map +1 -0
  181. package/dist/src/tui/commands.js +95 -0
  182. package/dist/src/tui/commands.js.map +1 -0
  183. package/dist/src/tui/components/chat-area.d.ts +9 -0
  184. package/dist/src/tui/components/chat-area.d.ts.map +1 -0
  185. package/dist/src/tui/components/chat-area.js +12 -0
  186. package/dist/src/tui/components/chat-area.js.map +1 -0
  187. package/dist/src/tui/components/command-palette.d.ts +18 -0
  188. package/dist/src/tui/components/command-palette.d.ts.map +1 -0
  189. package/dist/src/tui/components/command-palette.js +50 -0
  190. package/dist/src/tui/components/command-palette.js.map +1 -0
  191. package/dist/src/tui/components/message.d.ts +9 -0
  192. package/dist/src/tui/components/message.d.ts.map +1 -0
  193. package/dist/src/tui/components/message.js +116 -0
  194. package/dist/src/tui/components/message.js.map +1 -0
  195. package/dist/src/tui/components/slash-autocomplete.d.ts +14 -0
  196. package/dist/src/tui/components/slash-autocomplete.d.ts.map +1 -0
  197. package/dist/src/tui/components/slash-autocomplete.js +29 -0
  198. package/dist/src/tui/components/slash-autocomplete.js.map +1 -0
  199. package/dist/src/tui/components/toast.d.ts +8 -0
  200. package/dist/src/tui/components/toast.d.ts.map +1 -0
  201. package/dist/src/tui/components/toast.js +29 -0
  202. package/dist/src/tui/components/toast.js.map +1 -0
  203. package/dist/src/tui/hooks/use-agent.d.ts +20 -0
  204. package/dist/src/tui/hooks/use-agent.d.ts.map +1 -0
  205. package/dist/src/tui/hooks/use-agent.js +129 -0
  206. package/dist/src/tui/hooks/use-agent.js.map +1 -0
  207. package/dist/src/tui/hooks/use-app-keyboard.d.ts +53 -0
  208. package/dist/src/tui/hooks/use-app-keyboard.d.ts.map +1 -0
  209. package/dist/src/tui/hooks/use-app-keyboard.js +155 -0
  210. package/dist/src/tui/hooks/use-app-keyboard.js.map +1 -0
  211. package/dist/src/tui/hooks/use-chat-submit.d.ts +61 -0
  212. package/dist/src/tui/hooks/use-chat-submit.d.ts.map +1 -0
  213. package/dist/src/tui/hooks/use-chat-submit.js +269 -0
  214. package/dist/src/tui/hooks/use-chat-submit.js.map +1 -0
  215. package/dist/src/tui/hooks/use-permission-queue.d.ts +10 -0
  216. package/dist/src/tui/hooks/use-permission-queue.d.ts.map +1 -0
  217. package/dist/src/tui/hooks/use-permission-queue.js +26 -0
  218. package/dist/src/tui/hooks/use-permission-queue.js.map +1 -0
  219. package/dist/src/tui/hooks/use-revert.d.ts +26 -0
  220. package/dist/src/tui/hooks/use-revert.d.ts.map +1 -0
  221. package/dist/src/tui/hooks/use-revert.js +88 -0
  222. package/dist/src/tui/hooks/use-revert.js.map +1 -0
  223. package/dist/src/tui/index.d.ts +5 -0
  224. package/dist/src/tui/index.d.ts.map +1 -0
  225. package/dist/src/tui/index.js +38 -0
  226. package/dist/src/tui/index.js.map +1 -0
  227. package/dist/src/tui/prompt-bar.d.ts +29 -0
  228. package/dist/src/tui/prompt-bar.d.ts.map +1 -0
  229. package/dist/src/tui/prompt-bar.js +41 -0
  230. package/dist/src/tui/prompt-bar.js.map +1 -0
  231. package/dist/src/tui/slash-commands.d.ts +20 -0
  232. package/dist/src/tui/slash-commands.d.ts.map +1 -0
  233. package/dist/src/tui/slash-commands.js +30 -0
  234. package/dist/src/tui/slash-commands.js.map +1 -0
  235. package/dist/src/tui/theme.d.ts +29 -0
  236. package/dist/src/tui/theme.d.ts.map +1 -0
  237. package/dist/src/tui/theme.js +54 -0
  238. package/dist/src/tui/theme.js.map +1 -0
  239. package/dist/src/tui/tips.d.ts +2 -0
  240. package/dist/src/tui/tips.d.ts.map +1 -0
  241. package/dist/src/tui/tips.js +40 -0
  242. package/dist/src/tui/tips.js.map +1 -0
  243. package/dist/src/tui/types.d.ts +34 -0
  244. package/dist/src/tui/types.d.ts.map +1 -0
  245. package/dist/src/tui/types.js +2 -0
  246. package/dist/src/tui/types.js.map +1 -0
  247. package/dist/src/tui/ui/about-dialog.d.ts +8 -0
  248. package/dist/src/tui/ui/about-dialog.d.ts.map +1 -0
  249. package/dist/src/tui/ui/about-dialog.js +21 -0
  250. package/dist/src/tui/ui/about-dialog.js.map +1 -0
  251. package/dist/src/tui/ui/agent-switcher.d.ts +10 -0
  252. package/dist/src/tui/ui/agent-switcher.d.ts.map +1 -0
  253. package/dist/src/tui/ui/agent-switcher.js +77 -0
  254. package/dist/src/tui/ui/agent-switcher.js.map +1 -0
  255. package/dist/src/tui/ui/debug-dialog.d.ts +15 -0
  256. package/dist/src/tui/ui/debug-dialog.d.ts.map +1 -0
  257. package/dist/src/tui/ui/debug-dialog.js +74 -0
  258. package/dist/src/tui/ui/debug-dialog.js.map +1 -0
  259. package/dist/src/tui/ui/doctor-dialog.d.ts +9 -0
  260. package/dist/src/tui/ui/doctor-dialog.d.ts.map +1 -0
  261. package/dist/src/tui/ui/doctor-dialog.js +45 -0
  262. package/dist/src/tui/ui/doctor-dialog.js.map +1 -0
  263. package/dist/src/tui/ui/manage-providers-dialog.d.ts +10 -0
  264. package/dist/src/tui/ui/manage-providers-dialog.d.ts.map +1 -0
  265. package/dist/src/tui/ui/manage-providers-dialog.js +257 -0
  266. package/dist/src/tui/ui/manage-providers-dialog.js.map +1 -0
  267. package/dist/src/tui/ui/mcp-toggle-dialog.d.ts +8 -0
  268. package/dist/src/tui/ui/mcp-toggle-dialog.d.ts.map +1 -0
  269. package/dist/src/tui/ui/mcp-toggle-dialog.js +89 -0
  270. package/dist/src/tui/ui/mcp-toggle-dialog.js.map +1 -0
  271. package/dist/src/tui/ui/message-controls.d.ts +16 -0
  272. package/dist/src/tui/ui/message-controls.d.ts.map +1 -0
  273. package/dist/src/tui/ui/message-controls.js +102 -0
  274. package/dist/src/tui/ui/message-controls.js.map +1 -0
  275. package/dist/src/tui/ui/model-switcher.d.ts +10 -0
  276. package/dist/src/tui/ui/model-switcher.d.ts.map +1 -0
  277. package/dist/src/tui/ui/model-switcher.js +139 -0
  278. package/dist/src/tui/ui/model-switcher.js.map +1 -0
  279. package/dist/src/tui/ui/permission-dialog.d.ts +12 -0
  280. package/dist/src/tui/ui/permission-dialog.d.ts.map +1 -0
  281. package/dist/src/tui/ui/permission-dialog.js +37 -0
  282. package/dist/src/tui/ui/permission-dialog.js.map +1 -0
  283. package/dist/src/tui/ui/provider-dialog.d.ts +11 -0
  284. package/dist/src/tui/ui/provider-dialog.d.ts.map +1 -0
  285. package/dist/src/tui/ui/provider-dialog.js +232 -0
  286. package/dist/src/tui/ui/provider-dialog.js.map +1 -0
  287. package/dist/src/tui/ui/session-list.d.ts +23 -0
  288. package/dist/src/tui/ui/session-list.d.ts.map +1 -0
  289. package/dist/src/tui/ui/session-list.js +147 -0
  290. package/dist/src/tui/ui/session-list.js.map +1 -0
  291. package/dist/src/tui/ui/thinking-effort-dialog.d.ts +11 -0
  292. package/dist/src/tui/ui/thinking-effort-dialog.d.ts.map +1 -0
  293. package/dist/src/tui/ui/thinking-effort-dialog.js +79 -0
  294. package/dist/src/tui/ui/thinking-effort-dialog.js.map +1 -0
  295. package/dist/src/tui/utils/model-config.d.ts +9 -0
  296. package/dist/src/tui/utils/model-config.d.ts.map +1 -0
  297. package/dist/src/tui/utils/model-config.js +63 -0
  298. package/dist/src/tui/utils/model-config.js.map +1 -0
  299. package/dist/src/tui/utils/session-messages.d.ts +22 -0
  300. package/dist/src/tui/utils/session-messages.d.ts.map +1 -0
  301. package/dist/src/tui/utils/session-messages.js +62 -0
  302. package/dist/src/tui/utils/session-messages.js.map +1 -0
  303. package/dist/src/tui/utils.d.ts +6 -0
  304. package/dist/src/tui/utils.d.ts.map +1 -0
  305. package/dist/src/tui/utils.js +23 -0
  306. package/dist/src/tui/utils.js.map +1 -0
  307. package/dist/src/tui/variant-cycle.d.ts +10 -0
  308. package/dist/src/tui/variant-cycle.d.ts.map +1 -0
  309. package/dist/src/tui/variant-cycle.js +64 -0
  310. package/dist/src/tui/variant-cycle.js.map +1 -0
  311. package/dist/src/utils/paths.d.ts +10 -0
  312. package/dist/src/utils/paths.d.ts.map +1 -0
  313. package/dist/src/utils/paths.js +106 -0
  314. package/dist/src/utils/paths.js.map +1 -0
  315. package/dist/src/utils/platform.d.ts +10 -0
  316. package/dist/src/utils/platform.d.ts.map +1 -0
  317. package/dist/src/utils/platform.js +133 -0
  318. package/dist/src/utils/platform.js.map +1 -0
  319. package/package.json +62 -0
@@ -0,0 +1,81 @@
1
+ import { z } from "zod";
2
+ import { errorResult, textResult } from "./utils.js";
3
+ export const webFetchTool = {
4
+ name: "web_fetch",
5
+ capabilities: { reads: false, writes: false },
6
+ description: `Fetch content from a URL and return it as markdown text.
7
+ Useful for reading documentation, API responses, or any web content.
8
+ Handles HTML to markdown conversion, PDF text extraction, and image descriptions.`,
9
+ displayName: (args) => new URL(args.url).hostname,
10
+ parameters: z.object({
11
+ url: z.string().describe("The URL to fetch content from"),
12
+ maxLength: z.number().optional().describe("Maximum characters to return"),
13
+ }),
14
+ execute: async ({ url, maxLength }) => {
15
+ try {
16
+ new URL(url);
17
+ }
18
+ catch {
19
+ return errorResult(`Invalid URL: ${url}`);
20
+ }
21
+ try {
22
+ const response = await fetch(url, {
23
+ headers: { "User-Agent": "Spectra-Code/1.0" },
24
+ signal: AbortSignal.timeout(15000),
25
+ });
26
+ if (!response.ok) {
27
+ return errorResult(`HTTP ${response.status}: ${response.statusText}`);
28
+ }
29
+ const contentType = response.headers.get("content-type") || "";
30
+ let content;
31
+ if (contentType.includes("text/html")) {
32
+ const html = await response.text();
33
+ content = htmlToMarkdown(html);
34
+ }
35
+ else if (contentType.includes("application/json")) {
36
+ const json = await response.json();
37
+ content = JSON.stringify(json, null, 2);
38
+ }
39
+ else {
40
+ content = await response.text();
41
+ }
42
+ const limit = maxLength || 10000;
43
+ if (content.length > limit) {
44
+ content = content.slice(0, limit) + "\n...(truncated)";
45
+ }
46
+ return textResult(content);
47
+ }
48
+ catch (err) {
49
+ const error = err;
50
+ if (error.name === "TimeoutError") {
51
+ return errorResult("Request timed out after 15 seconds.");
52
+ }
53
+ return errorResult(`Failed to fetch URL: ${error.message || "unknown error"}`);
54
+ }
55
+ },
56
+ };
57
+ function htmlToMarkdown(html) {
58
+ let text = html
59
+ .replace(/<script[^>]*>[\s\S]*?<\/script>/gi, "")
60
+ .replace(/<style[^>]*>[\s\S]*?<\/style>/gi, "")
61
+ .replace(/<nav[^>]*>[\s\S]*?<\/nav>/gi, "")
62
+ .replace(/<footer[^>]*>[\s\S]*?<\/footer>/gi, "")
63
+ .replace(/<h1[^>]*>(.*?)<\/h1>/gi, "# $1\n")
64
+ .replace(/<h2[^>]*>(.*?)<\/h2>/gi, "## $1\n")
65
+ .replace(/<h3[^>]*>(.*?)<\/h3>/gi, "### $1\n")
66
+ .replace(/<h4[^>]*>(.*?)<\/h4>/gi, "#### $1\n")
67
+ .replace(/<li[^>]*>(.*?)<\/li>/gi, "- $1\n")
68
+ .replace(/<br\s*\/?>/gi, "\n")
69
+ .replace(/<\/p>/gi, "\n\n")
70
+ .replace(/<[^>]+>/g, "")
71
+ .replace(/&amp;/g, "&")
72
+ .replace(/&lt;/g, "<")
73
+ .replace(/&gt;/g, ">")
74
+ .replace(/&quot;/g, "\"")
75
+ .replace(/&#39;/g, "'")
76
+ .replace(/&nbsp;/g, " ")
77
+ .replace(/\n{3,}/g, "\n\n")
78
+ .trim();
79
+ return text;
80
+ }
81
+ //# sourceMappingURL=web-fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-fetch.js","sourceRoot":"","sources":["../../../src/tools/web-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,CAAC,MAAM,YAAY,GAAgB;IACvC,IAAI,EAAE,WAAW;IACjB,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;IAC7C,WAAW,EAAE;;kFAEmE;IAChF,WAAW,EAAE,CAAC,IAAqB,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ;IAClE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QACzD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KAC1E,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;QACpC,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,WAAW,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,OAAO,EAAE,EAAE,YAAY,EAAE,kBAAkB,EAAE;gBAC7C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;aACnC,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,WAAW,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACxE,CAAC;YAED,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAC/D,IAAI,OAAe,CAAC;YAEpB,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;iBAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClC,CAAC;YAED,MAAM,KAAK,GAAG,SAAS,IAAI,KAAK,CAAC;YACjC,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;gBAC3B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,kBAAkB,CAAC;YACzD,CAAC;YAED,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,GAA0C,CAAC;YACzD,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBAClC,OAAO,WAAW,CAAC,qCAAqC,CAAC,CAAC;YAC5D,CAAC;YACD,OAAO,WAAW,CAAC,wBAAwB,KAAK,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;CACF,CAAC;AAEF,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,IAAI,GAAG,IAAI;SACZ,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC;SAChD,OAAO,CAAC,iCAAiC,EAAE,EAAE,CAAC;SAC9C,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC;SAC1C,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC;SAChD,OAAO,CAAC,wBAAwB,EAAE,QAAQ,CAAC;SAC3C,OAAO,CAAC,wBAAwB,EAAE,SAAS,CAAC;SAC5C,OAAO,CAAC,wBAAwB,EAAE,UAAU,CAAC;SAC7C,OAAO,CAAC,wBAAwB,EAAE,WAAW,CAAC;SAC9C,OAAO,CAAC,wBAAwB,EAAE,QAAQ,CAAC;SAC3C,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;SAC7B,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;SACxB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,IAAI,EAAE,CAAC;IAEV,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SpectraTool } from "./types.js";
2
+ export declare const writeTool: SpectraTool;
3
+ //# sourceMappingURL=write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../../src/tools/write.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,eAAO,MAAM,SAAS,EAAE,WAsBvB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { z } from "zod";
2
+ import { textResult } from "./utils.js";
3
+ import { writeFileSync, existsSync, mkdirSync } from "fs";
4
+ import { resolve, dirname, relative } from "path";
5
+ export const writeTool = {
6
+ name: "write",
7
+ capabilities: { reads: false, writes: true },
8
+ description: `Write content to a file, creating it if it doesn't exist.
9
+ If the file exists, it will be overwritten.
10
+ For small changes to existing files, prefer the edit tool.
11
+ Creates parent directories automatically if they don't exist.`,
12
+ displayName: (args) => relative(process.cwd(), resolve(args.path)),
13
+ parameters: z.object({
14
+ path: z.string().describe("Absolute or relative path to the file to write"),
15
+ content: z.string().describe("The full content to write to the file"),
16
+ }),
17
+ execute: async ({ path, content }) => {
18
+ const resolved = resolve(process.cwd(), path);
19
+ const parentDir = dirname(resolved);
20
+ if (!existsSync(parentDir)) {
21
+ mkdirSync(parentDir, { recursive: true });
22
+ }
23
+ const existed = existsSync(resolved);
24
+ writeFileSync(resolved, content, "utf-8");
25
+ return textResult(`${existed ? "Updated" : "Created"} ${relative(process.cwd(), resolved)}`);
26
+ },
27
+ };
28
+ //# sourceMappingURL=write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../../src/tools/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAe,UAAU,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAElD,MAAM,CAAC,MAAM,SAAS,GAAgB;IACpC,IAAI,EAAE,OAAO;IACb,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAC5C,WAAW,EAAE;;;8DAG+C;IAC5D,WAAW,EAAE,CAAC,IAAsB,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpF,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QAC3E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;KACtE,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,UAAU,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/F,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const AGENTS: string[];
2
+ export declare const PLACEHOLDERS: string[];
3
+ //# sourceMappingURL=app-constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-constants.d.ts","sourceRoot":"","sources":["../../../src/tui/app-constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM,UAAiB,CAAA;AACpC,eAAO,MAAM,YAAY,UAAgL,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { PRIMARY_AGENTS } from "../agents/definitions.js";
2
+ export const AGENTS = PRIMARY_AGENTS;
3
+ export const PLACEHOLDERS = ["fix the login bug", "explain this codebase", "add error handling", "refactor this function", "write tests", "debug this issue", "optimize performance", "document the API"];
4
+ //# sourceMappingURL=app-constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-constants.js","sourceRoot":"","sources":["../../../src/tui/app-constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAEzD,MAAM,CAAC,MAAM,MAAM,GAAG,cAAc,CAAA;AACpC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,aAAa,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,kBAAkB,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { CliRenderer } from "@opentui/core";
2
+ export declare function App({ renderer }: {
3
+ renderer: CliRenderer;
4
+ }): import("react").ReactNode;
5
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/tui/app.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AA2ChD,wBAAgB,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,WAAW,CAAA;CAAE,6BA4f1D"}
@@ -0,0 +1,322 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
2
+ import { useRef, useCallback, useEffect, useMemo, useState } from "react";
3
+ import { useTerminalDimensions } from "@opentui/react";
4
+ import { execSync } from "child_process";
5
+ import { c, SPINNER } from "./theme.js";
6
+ import { ChatArea } from "./components/chat-area.js";
7
+ import { CommandPalette } from "./components/command-palette.js";
8
+ import { PromptBar } from "./prompt-bar.js";
9
+ import { Tips } from "./tips.js";
10
+ import { titlecase } from "./utils.js";
11
+ import { SessionStore } from "../services/session-store.js";
12
+ import { SnapshotManager } from "../services/snapshot-manager.js";
13
+ import { ProviderDialog } from "./ui/provider-dialog.js";
14
+ import { SessionList } from "./ui/session-list.js";
15
+ import { ModelSwitcher } from "./ui/model-switcher.js";
16
+ import { ManageProvidersDialog } from "./ui/manage-providers-dialog.js";
17
+ import { DoctorDialog } from "./ui/doctor-dialog.js";
18
+ import { AboutDialog } from "./ui/about-dialog.js";
19
+ import { AgentSwitcher } from "./ui/agent-switcher.js";
20
+ import { ThinkingEffortDialog } from "./ui/thinking-effort-dialog.js";
21
+ import { McpToggleDialog } from "./ui/mcp-toggle-dialog.js";
22
+ import { DebugDialog } from "./ui/debug-dialog.js";
23
+ import { MessageControls } from "./ui/message-controls.js";
24
+ import { ToastContainer, showToast } from "./components/toast.js";
25
+ import clipboard from "clipboardy";
26
+ import { buildCmdItems, collectSlashNames } from "./commands.js";
27
+ import { slashHead } from "./slash-commands.js";
28
+ import { SlashAutocomplete } from "./components/slash-autocomplete.js";
29
+ import { loadConfig } from "../services/config.js";
30
+ import { registerAllCustomProviders } from "../services/custom-providers.js";
31
+ import { PermissionDialog } from "./ui/permission-dialog.js";
32
+ import { PLACEHOLDERS } from "./app-constants.js";
33
+ import { loadSavedConfig, saveModelConfig, fmtCtx, lookupContextWindow } from "./utils/model-config.js";
34
+ import { sdkMessagesToChatMessages } from "./utils/session-messages.js";
35
+ import { usePermissionQueue } from "./hooks/use-permission-queue.js";
36
+ import { useRevert } from "./hooks/use-revert.js";
37
+ import { useAgent } from "./hooks/use-agent.js";
38
+ import { useChatSubmit } from "./hooks/use-chat-submit.js";
39
+ import { useAppKeyboard } from "./hooks/use-app-keyboard.js";
40
+ import { cycleEffort } from "./variant-cycle.js";
41
+ export function App({ renderer }) {
42
+ const { width: termWidth, height: termHeight } = useTerminalDimensions();
43
+ // --- State ---
44
+ const [savedConfig] = useState(loadSavedConfig);
45
+ const [customProviders, setCustomProviders] = useState(() => {
46
+ const cfg = loadConfig();
47
+ const cp = cfg.providers || {};
48
+ registerAllCustomProviders(cp);
49
+ return cp;
50
+ });
51
+ const [selectedModel, setSelectedModel] = useState(savedConfig.model);
52
+ const [selectedProvider, setSelectedProvider] = useState(savedConfig.provider);
53
+ const [thinkingEffort, setThinkingEffort] = useState(undefined);
54
+ const [route, setRoute] = useState("home");
55
+ const [messages, setMessages] = useState([]);
56
+ const [isLoading, setIsLoading] = useState(false);
57
+ const [status, setStatus] = useState("Ready");
58
+ const [spinnerFrame, setSpinnerFrame] = useState(0);
59
+ const [showCmd, setShowCmd] = useState(false);
60
+ const [cmdFilter, setCmdFilter] = useState("");
61
+ const [cmdSelected, setCmdSelected] = useState(0);
62
+ const [elapsedMs, setElapsedMs] = useState(null);
63
+ const [tokPerSec, setTokPerSec] = useState(null);
64
+ const [tokenUsage, setTokenUsage] = useState({ input: 0, output: 0 });
65
+ const [showThinking, setShowThinking] = useState(true);
66
+ const [showToolCalls, setShowToolCalls] = useState(true);
67
+ const [copiedMsg, setCopiedMsg] = useState(false);
68
+ const [selectedAgent, setSelectedAgent] = useState("build");
69
+ const [submitKey, setSubmitKey] = useState(0);
70
+ const [dialogStep, setDialogStep] = useState(null);
71
+ const [placeholderIdx, setPlaceholderIdx] = useState(0);
72
+ const [promptHistory, setPromptHistory] = useState([]);
73
+ const [historyIdx, setHistoryIdx] = useState(-1);
74
+ const [navKey, setNavKey] = useState(0);
75
+ const [homeKey, setHomeKey] = useState(0);
76
+ const [interruptKey, setInterruptKey] = useState(0);
77
+ const [msgControls, setMsgControls] = useState(null);
78
+ const [revertPoint, setRevertPoint] = useState(null);
79
+ const [draftText, setDraftText] = useState("");
80
+ const [slashSelected, setSlashSelected] = useState(0);
81
+ const [promptPosition, setPromptPosition] = useState({ top: 0, left: 0, width: 0 });
82
+ // --- Refs ---
83
+ const promptTextareaRef = useRef(null);
84
+ const sessionStore = useRef(new SessionStore());
85
+ const sessionId = useRef(null);
86
+ const dialogKeyHandler = useRef(null);
87
+ const isStreamingRef = useRef(false);
88
+ const currentTurnStartRef = useRef(null);
89
+ const currentTurnMsgIdRef = useRef(null);
90
+ const snapshotManager = useRef(new SnapshotManager({ workdir: process.cwd() }));
91
+ const [securityConfig] = useState(() => {
92
+ const cfg = loadConfig();
93
+ return { permission: cfg.permission, security: cfg.security };
94
+ });
95
+ // --- Derived ---
96
+ const provider = selectedProvider;
97
+ const hasModel = selectedModel !== null && selectedProvider !== null;
98
+ const mcpCount = 0;
99
+ const customProviderCount = Object.keys(customProviders).length;
100
+ const cwdLabel = useMemo(() => {
101
+ const home = process.env.HOME || process.env.USERPROFILE || "";
102
+ const dir = process.cwd().replace(home, "~");
103
+ try {
104
+ const branch = execSync("git rev-parse --abbrev-ref HEAD 2>/dev/null", { encoding: "utf-8", timeout: 2000 }).toString().trim();
105
+ if (branch)
106
+ return `${dir}:${branch}`;
107
+ }
108
+ catch { }
109
+ return dir;
110
+ }, []);
111
+ // --- Effects ---
112
+ useEffect(() => {
113
+ const id = setInterval(() => setPlaceholderIdx((p) => (p + 1) % PLACEHOLDERS.length), 4000);
114
+ return () => clearInterval(id);
115
+ }, []);
116
+ useEffect(() => {
117
+ if (!isLoading)
118
+ return;
119
+ const id = setInterval(() => setSpinnerFrame((f) => (f + 1) % SPINNER.length), 80);
120
+ renderer.requestLive();
121
+ return () => { clearInterval(id); renderer.dropLive(); };
122
+ }, [isLoading, renderer]);
123
+ useEffect(() => {
124
+ const handler = (selection) => {
125
+ const text = selection.getSelectedText();
126
+ if (!text)
127
+ return;
128
+ setTimeout(() => {
129
+ try {
130
+ clipboard.writeSync(text);
131
+ setCopiedMsg(true);
132
+ setTimeout(() => setCopiedMsg(false), 2500);
133
+ }
134
+ catch { }
135
+ }, 2000);
136
+ };
137
+ renderer.on("selection", handler);
138
+ return () => { renderer.off?.("selection", handler); };
139
+ }, [renderer]);
140
+ // --- Stable callbacks ---
141
+ const addMessage = useCallback((msg) => setMessages((p) => [...p, msg]), []);
142
+ const updateMessage = useCallback((id, u) => setMessages((p) => p.map((m) => (m.id === id ? { ...m, ...u } : m))), []);
143
+ // --- Hooks (order matters for ref lifecycle) ---
144
+ const securityRef = useRef(null);
145
+ const { permissionRequest, enqueuePermission, resolvePermission } = usePermissionQueue(securityRef);
146
+ const { agentRef, loadedSessionMessages, getOrCreateAgent, resetAgentForModelSwitch, } = useAgent({ securityRef, securityConfig, enqueuePermission });
147
+ const { revertedMessagesRef, revertDraftRef, runRevert, runRedo, runRollbackFiles, discardRevert, } = useRevert({
148
+ sessionStore, sessionId, agentRef, loadedSessionMessages,
149
+ setMessages, setRevertPoint, setHistoryIdx, setNavKey, snapshotManager,
150
+ });
151
+ const handleCycleVariant = useCallback(() => {
152
+ if (!provider) {
153
+ showToast("No provider configured", "warn");
154
+ return;
155
+ }
156
+ const nextEffort = cycleEffort(provider, thinkingEffort);
157
+ if (!nextEffort) {
158
+ showToast("No variants available", "info");
159
+ return;
160
+ }
161
+ setThinkingEffort(nextEffort);
162
+ agentRef.current = null;
163
+ showToast(nextEffort === "none" ? "Thinking: off" : `Thinking: ${nextEffort}`, "info");
164
+ }, [provider, thinkingEffort, agentRef]);
165
+ const cmdItems = useMemo(() => buildCmdItems({
166
+ renderer, sessionStore: sessionStore.current, sessionIdRef: sessionId,
167
+ hasModel, selectedModel, provider, mcpCount, customProviderCount, messagesLength: messages.length,
168
+ showThinking, showToolCalls,
169
+ setRoute, setMessages, setStatus, setElapsedMs, setTokPerSec, setTokenUsage, setShowThinking, setShowToolCalls, setHomeKey, setNavKey, setDialogStep,
170
+ onCycleVariant: handleCycleVariant,
171
+ currentEffort: thinkingEffort,
172
+ selectedAgent,
173
+ onSecurityReset: () => {
174
+ securityRef.current?.getReadTracker().reset();
175
+ securityRef.current?.getDoomLoop().reset();
176
+ },
177
+ }), [renderer, hasModel, selectedModel, provider, mcpCount, customProviderCount, messages.length, showThinking, showToolCalls, handleCycleVariant, thinkingEffort, selectedAgent, sessionStore, sessionId, setRoute, setMessages, setStatus, setElapsedMs, setTokPerSec, setTokenUsage, setShowThinking, setShowToolCalls, setHomeKey, setNavKey, setDialogStep, securityRef]);
178
+ const slashNames = useMemo(() => collectSlashNames(cmdItems), [cmdItems]);
179
+ const { handleSubmit, updateLastAssistantMeta, } = useChatSubmit({
180
+ sessionStore, sessionId, agentRef, securityRef, loadedSessionMessages,
181
+ snapshotManager, lastAgentRef: useRef(null), isStreamingRef, currentTurnStartRef,
182
+ currentTurnMsgIdRef, revertPoint, getOrCreateAgent,
183
+ selectedModel, provider, selectedAgent, customProviders, thinkingEffort,
184
+ cmdItems, slashNames, addMessage, updateMessage, setMessages,
185
+ setIsLoading, setStatus, setRoute, setElapsedMs, setTokPerSec,
186
+ setTokenUsage, setDraftText, setSlashSelected, setSubmitKey,
187
+ setPromptHistory, setHistoryIdx, setInterruptKey, setRevertPoint,
188
+ discardRevert,
189
+ });
190
+ // --- cmdFiltered + slash ---
191
+ const cmdFiltered = useMemo(() => {
192
+ const q = cmdFilter.toLowerCase();
193
+ return !q ? cmdItems : cmdItems.filter((i) => i.label.toLowerCase().includes(q) || i.desc.toLowerCase().includes(q) || (i.cat && i.cat.toLowerCase().includes(q)));
194
+ }, [cmdItems, cmdFilter]);
195
+ const slashFiltered = useMemo(() => {
196
+ const head = slashHead(draftText);
197
+ if (!head)
198
+ return [];
199
+ const q = head.name.toLowerCase();
200
+ if (!q)
201
+ return cmdItems;
202
+ return cmdItems.filter((item) => {
203
+ if (item.slashName && item.slashName.toLowerCase().includes(q))
204
+ return true;
205
+ if (item.slashAliases)
206
+ return item.slashAliases.some((a) => a.toLowerCase().includes(q));
207
+ return false;
208
+ });
209
+ }, [cmdItems, draftText]);
210
+ const slashActive = useMemo(() => slashHead(draftText) !== undefined, [draftText]);
211
+ useEffect(() => { setSlashSelected(0); }, [draftText]);
212
+ useEffect(() => { if (cmdSelected >= cmdFiltered.length && cmdFiltered.length > 0)
213
+ setCmdSelected(cmdFiltered.length - 1); }, [cmdSelected, cmdFiltered.length]);
214
+ const execCmd = useCallback((item) => { item.action(); setShowCmd(false); }, [setShowCmd]);
215
+ // --- Keyboard ---
216
+ useAppKeyboard({
217
+ renderer, isStreamingRef, currentTurnStartRef, currentTurnMsgIdRef,
218
+ revertPoint, revertedMessagesRef, runRedo, runRollbackFiles,
219
+ dialogStep, msgControls, permissionRequest, dialogKeyHandler,
220
+ showCmd, cmdFilter, cmdSelected, cmdFiltered,
221
+ draftText, slashActive, slashFiltered, slashSelected,
222
+ promptHistory, historyIdx, interruptKey,
223
+ selectedAgent, thinkingEffort, provider,
224
+ agentRef, securityRef, promptTextareaRef,
225
+ setShowCmd, setCmdFilter, setCmdSelected,
226
+ setDraftText, setSlashSelected, setHistoryIdx, setNavKey,
227
+ setInterruptKey, setSelectedAgent, setMessages, setStatus,
228
+ setThinkingEffort, updateMessage, updateLastAssistantMeta,
229
+ execCmd, handleCycleVariant,
230
+ });
231
+ // --- JSX ---
232
+ return (_jsxs("box", { flexDirection: "column", height: termHeight, backgroundColor: c.bg, children: [route === "home" ? (_jsxs("box", { flexDirection: "column", flexGrow: 1, children: [_jsx("box", { flexGrow: 1 }), _jsxs("box", { flexDirection: "column", alignItems: "center", flexShrink: 0, children: [_jsx("ascii-font", { text: "SPECTRA", font: "block", color: c.accent }), _jsx("box", { height: 1 }), _jsx(PromptBar, { isLoading: isLoading, spinnerFrame: spinnerFrame, inputKey: `h-${submitKey}-${navKey}`, placeholder: `Ask anything... "${PLACEHOLDERS[placeholderIdx]}"`, onSubmit: handleSubmit, hasModel: hasModel, agent: selectedAgent, model: selectedModel || "", provider: provider || "", thinkingEffort: thinkingEffort, initialValue: revertDraftRef.current || (historyIdx >= 0 ? promptHistory[historyIdx] : ""), width: Math.min(68, termWidth - 8), focused: !dialogStep && !showCmd && !msgControls && !permissionRequest, onTextChange: (t) => setDraftText(t), onGetTextarea: (r) => { promptTextareaRef.current = r; }, onPositionChange: setPromptPosition }), _jsx("box", { height: 1 }), _jsx("box", { flexDirection: "row", justifyContent: "flex-end", width: Math.min(68, termWidth - 8), children: _jsxs("box", { flexDirection: "row", gap: 2, children: [_jsxs("box", { flexDirection: "row", children: [_jsx("text", { fg: c.text, children: "tab" }), _jsx("text", { fg: c.dim, children: " agent" })] }), _jsxs("box", { flexDirection: "row", children: [_jsx("text", { fg: c.text, children: "ctrl+t" }), _jsx("text", { fg: c.dim, children: " effort" })] }), _jsxs("box", { flexDirection: "row", children: [_jsx("text", { fg: c.text, children: "ctrl+p" }), _jsx("text", { fg: c.dim, children: " commands" })] })] }) }), _jsx("box", { height: 1 }), _jsx("box", { flexDirection: "row", gap: 4, alignItems: "center", children: [
233
+ { icon: "◈", label: `${sessionStore.current.list().length} sessions` },
234
+ { icon: "◉", label: "3 agents" },
235
+ { icon: "◆", label: "7 tools" },
236
+ { icon: "⬢", label: `${mcpCount} MCP` },
237
+ ].map((s) => (_jsxs("box", { flexDirection: "row", gap: 1, alignItems: "center", children: [_jsx("text", { fg: c.accent, children: s.icon }), _jsx("text", { fg: c.dim, children: s.label })] }, s.label))) }), _jsx(Tips, {})] }), _jsx("box", { flexGrow: 1 }), _jsxs("box", { flexDirection: "row", justifyContent: "space-between", paddingLeft: 2, paddingRight: 2, height: 1, marginBottom: 1, children: [_jsx("box", { flexDirection: "row", gap: 4, children: _jsx("text", { fg: c.dim, overflow: "hidden", wrapMode: "none", children: cwdLabel }) }), _jsx("text", { fg: c.dim, flexShrink: 0, children: "Spectra Code" })] })] }, `home-${homeKey}`)) : (_jsxs("box", { flexDirection: "column", height: termHeight, paddingLeft: 2, paddingRight: 2, children: [revertPoint && (_jsxs("box", { flexDirection: "column", alignItems: "center", paddingY: 1, children: [_jsxs("box", { flexDirection: "row", children: [_jsx("text", { fg: c.warn, children: "Messages reverted. " }), _jsx("text", { fg: c.accent, children: "Ctrl+Y" }), _jsx("text", { fg: c.dim, children: " to restore" })] }), _jsxs("box", { flexDirection: "row", children: [_jsx("text", { fg: c.dim, children: "Files unchanged. " }), _jsx("text", { fg: c.accent, children: "Ctrl+Shift+Y" }), _jsx("text", { fg: c.dim, children: " to rollback files" })] })] })), _jsx("box", { flexDirection: "column", flexGrow: 1, paddingBottom: 1, children: _jsx(ChatArea, { messages: messages, showThinking: showThinking, showToolCalls: showToolCalls, revertPoint: revertPoint, onMessageClick: (msg) => setMsgControls(msg) }) }), _jsxs("box", { flexShrink: 0, children: [_jsx(PromptBar, { isLoading: isLoading, spinnerFrame: spinnerFrame, inputKey: `c-${submitKey}-${navKey}`, placeholder: "Reply...", onSubmit: handleSubmit, hasModel: hasModel, agent: selectedAgent, model: selectedModel || "", provider: provider || "", thinkingEffort: thinkingEffort, initialValue: revertDraftRef.current || (historyIdx >= 0 ? promptHistory[historyIdx] : ""), elapsedMs: elapsedMs, tokenUsage: tokenUsage, width: termWidth - 4, focused: !dialogStep && !showCmd && !msgControls && !permissionRequest, onTextChange: (t) => setDraftText(t), onGetTextarea: (r) => { promptTextareaRef.current = r; }, onPositionChange: setPromptPosition }), _jsx("box", { height: 1 }), _jsxs("box", { flexDirection: "row", justifyContent: "space-between", alignItems: "center", height: 1, paddingLeft: 3, paddingRight: 1, children: [_jsxs("box", { flexDirection: "row", gap: 2, alignItems: "center", overflow: "hidden", children: [isLoading ? (_jsxs("box", { flexDirection: "row", gap: 2, alignItems: "center", children: [_jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("text", { fg: c.warn, children: SPINNER[spinnerFrame] }), _jsx("text", { fg: c.dim, children: "Streaming..." })] }), _jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("text", { fg: c.accent, children: "esc" }), _jsx("text", { fg: c.dim, children: "interrupt" })] })] })) : (_jsx("text", { fg: c.dim, children: "Ready" })), (tokenUsage.input + tokenUsage.output) > 0 && (() => {
238
+ const used = tokenUsage.input + tokenUsage.output;
239
+ const cw = lookupContextWindow(selectedModel || "", provider);
240
+ const pct = cw ? Math.round((used / cw) * 100) : null;
241
+ return (_jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("text", { fg: c.subtext, children: fmtCtx(used) }), pct !== null && _jsxs("text", { fg: pct > 80 ? c.warn : c.dim, children: ["(", pct, "%)"] })] }));
242
+ })()] }), _jsxs("box", { flexDirection: "row", gap: 2, alignItems: "center", children: [_jsxs("box", { flexDirection: "row", children: [_jsx("text", { fg: c.text, children: "tab" }), _jsx("text", { fg: c.dim, children: " agent" })] }), _jsxs("box", { flexDirection: "row", children: [_jsx("text", { fg: c.text, children: "ctrl+t" }), _jsx("text", { fg: c.dim, children: " effort" })] }), _jsxs("box", { flexDirection: "row", children: [_jsx("text", { fg: c.text, children: "ctrl+p" }), _jsx("text", { fg: c.dim, children: " commands" })] })] })] })] })] })), showCmd && _jsx(CommandPalette, { filter: cmdFilter, selected: cmdSelected, items: cmdFiltered, termWidth: termWidth, termHeight: termHeight }), slashActive && slashFiltered.length > 0 && (_jsx(SlashAutocomplete, { query: slashHead(draftText)?.name || "", selected: slashSelected, items: slashFiltered, termWidth: termWidth, termHeight: termHeight, route: route, promptTop: promptPosition.top, promptLeft: promptPosition.left, promptWidth: promptPosition.width })), dialogStep?.type === "provider" && (_jsx(ProviderDialog, { termWidth: termWidth, termHeight: termHeight, keyHandlerRef: dialogKeyHandler, onModelSelected: (modelId, providerId) => {
243
+ resetAgentForModelSwitch();
244
+ setSelectedModel(modelId);
245
+ setSelectedProvider(providerId);
246
+ setDialogStep(null);
247
+ saveModelConfig(modelId, providerId);
248
+ showToast(`Model set`, "success");
249
+ }, onClose: () => setDialogStep(null) })), dialogStep?.type === "session-list" && (_jsx(SessionList, { store: sessionStore.current, termWidth: termWidth, termHeight: termHeight, mode: dialogStep.mode || "load", onLoad: (data) => {
250
+ const { messages: loadedMsgs, tokenUsage: tu } = sdkMessagesToChatMessages(data);
251
+ setTokenUsage(tu);
252
+ setMessages(() => loadedMsgs);
253
+ sessionId.current = data.id;
254
+ setSelectedModel(data.model);
255
+ setSelectedProvider(data.provider || data.model.split("/")[0]);
256
+ setSelectedAgent(data.agent);
257
+ setThinkingEffort(data.thinkingEffort || undefined);
258
+ setRoute("chat");
259
+ setDialogStep(null);
260
+ loadedSessionMessages.current = data.messages;
261
+ if (agentRef.current) {
262
+ agentRef.current.reset();
263
+ agentRef.current.restoreHistory(data.messages);
264
+ }
265
+ securityRef.current?.getReadTracker().reset();
266
+ securityRef.current?.getDoomLoop().reset();
267
+ showToast(`Loaded: ${data.title.slice(0, 40)}`, "info");
268
+ }, onDelete: (id) => {
269
+ sessionStore.current.delete(id);
270
+ if (sessionId.current === id) {
271
+ sessionId.current = null;
272
+ setMessages([]);
273
+ setRoute("home");
274
+ setHomeKey((k) => k + 1);
275
+ }
276
+ showToast("Session deleted", "success");
277
+ }, onRename: (id, title) => {
278
+ sessionStore.current.rename(id, title);
279
+ showToast("Session renamed", "success");
280
+ }, onClose: () => setDialogStep(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), dialogStep?.type === "switch-model" && (_jsx(ModelSwitcher, { providerId: provider || "", termWidth: termWidth, termHeight: termHeight, onModelSelected: (modelId, providerId) => {
281
+ resetAgentForModelSwitch();
282
+ setSelectedModel(modelId);
283
+ setSelectedProvider(providerId);
284
+ setDialogStep(null);
285
+ saveModelConfig(modelId, providerId);
286
+ showToast(`Switched model`, "info");
287
+ }, onClose: () => setDialogStep(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), dialogStep?.type === "manage-providers" && (_jsx(ManageProvidersDialog, { termWidth: termWidth, termHeight: termHeight, providers: customProviders, onProvidersChange: (updated) => {
288
+ setCustomProviders(updated);
289
+ resetAgentForModelSwitch();
290
+ showToast("Providers updated", "success");
291
+ }, onClose: () => setDialogStep(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), dialogStep?.type === "doctor" && dialogStep.result && (_jsx(DoctorDialog, { result: dialogStep.result, termWidth: termWidth, termHeight: termHeight, onClose: () => setDialogStep(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), dialogStep?.type === "about" && (_jsx(AboutDialog, { termWidth: termWidth, termHeight: termHeight, onClose: () => setDialogStep(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), dialogStep?.type === "switch-agent" && (_jsx(AgentSwitcher, { currentAgent: selectedAgent, termWidth: termWidth, termHeight: termHeight, onAgentSelected: (agent) => {
292
+ setSelectedAgent(agent);
293
+ resetAgentForModelSwitch();
294
+ setDialogStep(null);
295
+ showToast(`Switched to ${titlecase(agent)} agent`, "info");
296
+ }, onClose: () => setDialogStep(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), dialogStep?.type === "thinking-effort" && (_jsx(ThinkingEffortDialog, { provider: provider, currentEffort: thinkingEffort, termWidth: termWidth, termHeight: termHeight, onEffortSelected: (effort) => {
297
+ setThinkingEffort(effort);
298
+ resetAgentForModelSwitch();
299
+ setDialogStep(null);
300
+ showToast(effort === "none" ? "Thinking: off" : `Thinking: ${effort}`, "info");
301
+ }, onClose: () => setDialogStep(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), dialogStep?.type === "toggle-mcp" && (_jsx(McpToggleDialog, { termWidth: termWidth, termHeight: termHeight, onClose: () => setDialogStep(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), dialogStep?.type === "debug" && (_jsx(DebugDialog, { termWidth: termWidth, termHeight: termHeight, selectedModel: selectedModel, provider: provider, selectedAgent: selectedAgent, thinkingEffort: thinkingEffort, sessionStore: sessionStore.current, mcpCount: mcpCount, onClose: () => setDialogStep(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), msgControls && sessionId.current && (_jsx(MessageControls, { message: msgControls, sessionId: sessionId.current, messages: messages, termWidth: termWidth, termHeight: termHeight, revertPoint: revertPoint, onRevert: (msgId) => { runRevert(messages, msgId); setMsgControls(null); }, onRedo: () => { runRedo(); setMsgControls(null); }, onFork: (msgId) => {
302
+ const forked = sessionStore.current.fork(sessionId.current);
303
+ if (forked) {
304
+ const msgIdx = messages.findIndex(m => m.id === msgId);
305
+ if (msgIdx >= 0) {
306
+ forked.messages = forked.messages.slice(0, msgIdx + 1);
307
+ forked.title = `${forked.title.split(" (fork)")[0]} (fork)`;
308
+ sessionStore.current.save(forked);
309
+ }
310
+ const data = sessionStore.current.get(forked.id);
311
+ if (data) {
312
+ const { messages: loadedMsgs } = sdkMessagesToChatMessages(data);
313
+ setMessages(loadedMsgs);
314
+ sessionId.current = forked.id;
315
+ loadedSessionMessages.current = data.messages;
316
+ showToast("Session forked", "success");
317
+ }
318
+ }
319
+ setMsgControls(null);
320
+ }, onClose: () => setMsgControls(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), permissionRequest && (_jsx(PermissionDialog, { request: permissionRequest, termWidth: termWidth, termHeight: termHeight, onAllow: (id) => { resolvePermission(id, { action: "once" }); }, onAllowAlways: (id) => { resolvePermission(id, { action: "always" }); }, onDeny: (id) => { resolvePermission(id, { action: "deny" }); }, onClose: () => { resolvePermission(permissionRequest.id, { action: "deny" }); } })), _jsx(ToastContainer, {})] }));
321
+ }
322
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/tui/app.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import type { CmdItem } from "./components/command-palette.js";
2
+ import type { SessionStore } from "../services/session-store.js";
3
+ export declare function buildCmdItems(opts: {
4
+ renderer: {
5
+ destroy: () => void;
6
+ };
7
+ sessionStore: SessionStore;
8
+ hasModel: boolean;
9
+ selectedModel: string | null;
10
+ provider: string | null;
11
+ mcpCount: number;
12
+ customProviderCount: number;
13
+ messagesLength: number;
14
+ showThinking: boolean;
15
+ showToolCalls: boolean;
16
+ setRoute: (r: "home" | "chat") => void;
17
+ setMessages: (fn: (prev: any[]) => any[]) => void;
18
+ setStatus: (s: string) => void;
19
+ setElapsedMs: (v: null) => void;
20
+ setTokPerSec: (v: null) => void;
21
+ setTokenUsage: (v: {
22
+ input: number;
23
+ output: number;
24
+ }) => void;
25
+ setShowThinking: (fn: (v: boolean) => boolean) => void;
26
+ setShowToolCalls: (fn: (v: boolean) => boolean) => void;
27
+ setHomeKey: (fn: (k: number) => number) => void;
28
+ setNavKey: (fn: (k: number) => number) => void;
29
+ setDialogStep: (v: {
30
+ type: "provider";
31
+ } | {
32
+ type: "session-list";
33
+ mode?: "delete" | "rename";
34
+ } | {
35
+ type: "switch-model";
36
+ } | {
37
+ type: "manage-providers";
38
+ } | {
39
+ type: "doctor";
40
+ result: any;
41
+ } | {
42
+ type: "about";
43
+ } | {
44
+ type: "switch-agent";
45
+ } | {
46
+ type: "thinking-effort";
47
+ } | {
48
+ type: "toggle-mcp";
49
+ } | {
50
+ type: "debug";
51
+ } | null) => void;
52
+ sessionIdRef: {
53
+ current: string | null;
54
+ };
55
+ onCycleVariant: () => void;
56
+ currentEffort?: string;
57
+ selectedAgent: string;
58
+ onSecurityReset?: () => void;
59
+ }): CmdItem[];
60
+ export declare function collectSlashNames(items: CmdItem[]): Set<string>;
61
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/tui/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAIhE,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAA;IACjC,YAAY,EAAE,YAAY,CAAA;IAC1B,QAAQ,EAAE,OAAO,CAAA;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,OAAO,CAAA;IACrB,aAAa,EAAE,OAAO,CAAA;IACtB,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAA;IACtC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,CAAA;IACjD,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,YAAY,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,CAAA;IAC/B,YAAY,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,CAAA;IAC/B,aAAa,EAAE,CAAC,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAC7D,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,KAAK,IAAI,CAAA;IACtD,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,KAAK,IAAI,CAAA;IACvD,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,KAAK,IAAI,CAAA;IAC/C,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,KAAK,IAAI,CAAA;IAC9C,aAAa,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,cAAc,CAAC;QAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,cAAc,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,kBAAkB,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,cAAc,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,iBAAiB,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,YAAY,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,KAAK,IAAI,CAAA;IACpU,YAAY,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;IACxC,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;CAC7B,GAAG,OAAO,EAAE,CAoEZ;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAS/D"}