@dexto/tui 1.15.0-beta.0 → 1.15.0-beta.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 (554) hide show
  1. package/dist/InkCLIRefactored.cjs +30 -24
  2. package/dist/InkCLIRefactored.d.ts.map +1 -1
  3. package/dist/InkCLIRefactored.js +30 -24
  4. package/dist/components/ApprovalPrompt.cjs +128 -40
  5. package/dist/components/ApprovalPrompt.d.ts +2 -0
  6. package/dist/components/ApprovalPrompt.d.ts.map +1 -1
  7. package/dist/components/ApprovalPrompt.js +128 -41
  8. package/dist/components/CustomInput.cjs +4 -3
  9. package/dist/components/CustomInput.d.ts.map +1 -1
  10. package/dist/components/CustomInput.js +4 -3
  11. package/dist/components/DeckArea.cjs +43 -0
  12. package/dist/components/DeckArea.d.ts +14 -0
  13. package/dist/components/DeckArea.d.ts.map +1 -0
  14. package/dist/components/DeckArea.js +19 -0
  15. package/dist/components/EditableMultiLineInput.cjs +9 -8
  16. package/dist/components/EditableMultiLineInput.d.ts.map +1 -1
  17. package/dist/components/EditableMultiLineInput.js +9 -8
  18. package/dist/components/ElicitationForm.cjs +78 -18
  19. package/dist/components/ElicitationForm.d.ts.map +1 -1
  20. package/dist/components/ElicitationForm.js +78 -18
  21. package/dist/components/ErrorBoundary.cjs +15 -5
  22. package/dist/components/ErrorBoundary.d.ts.map +1 -1
  23. package/dist/components/ErrorBoundary.js +15 -5
  24. package/dist/components/Footer.cjs +37 -113
  25. package/dist/components/Footer.d.ts +2 -2
  26. package/dist/components/Footer.d.ts.map +1 -1
  27. package/dist/components/Footer.js +40 -119
  28. package/dist/components/HistorySearchBar.cjs +6 -5
  29. package/dist/components/HistorySearchBar.d.ts.map +1 -1
  30. package/dist/components/HistorySearchBar.js +6 -5
  31. package/dist/components/MultiLineInput.cjs +6 -5
  32. package/dist/components/MultiLineInput.d.ts.map +1 -1
  33. package/dist/components/MultiLineInput.js +6 -5
  34. package/dist/components/ResourceAutocomplete.cjs +5 -4
  35. package/dist/components/ResourceAutocomplete.d.ts.map +1 -1
  36. package/dist/components/ResourceAutocomplete.js +5 -4
  37. package/dist/components/SignalGates.test.cjs +215 -0
  38. package/dist/components/SignalGates.test.d.ts +2 -0
  39. package/dist/components/SignalGates.test.d.ts.map +1 -0
  40. package/dist/components/SignalGates.test.js +217 -0
  41. package/dist/components/SlashCommandAutocomplete.cjs +4 -3
  42. package/dist/components/SlashCommandAutocomplete.d.ts.map +1 -1
  43. package/dist/components/SlashCommandAutocomplete.js +4 -3
  44. package/dist/components/StatusBar.cjs +13 -30
  45. package/dist/components/StatusBar.d.ts +1 -3
  46. package/dist/components/StatusBar.d.ts.map +1 -1
  47. package/dist/components/StatusBar.js +13 -30
  48. package/dist/components/TextBufferInput.cjs +13 -12
  49. package/dist/components/TextBufferInput.d.ts.map +1 -1
  50. package/dist/components/TextBufferInput.js +13 -12
  51. package/dist/components/TodoPanel.cjs +23 -16
  52. package/dist/components/TodoPanel.d.ts.map +1 -1
  53. package/dist/components/TodoPanel.js +23 -16
  54. package/dist/components/base/BaseAutocomplete.cjs +7 -6
  55. package/dist/components/base/BaseAutocomplete.d.ts.map +1 -1
  56. package/dist/components/base/BaseAutocomplete.js +7 -6
  57. package/dist/components/base/BaseSelector.cjs +5 -4
  58. package/dist/components/base/BaseSelector.d.ts.map +1 -1
  59. package/dist/components/base/BaseSelector.js +5 -4
  60. package/dist/components/chat/Footer.cjs +2 -1
  61. package/dist/components/chat/Footer.d.ts.map +1 -1
  62. package/dist/components/chat/Footer.js +2 -1
  63. package/dist/components/chat/Header.cjs +20 -16
  64. package/dist/components/chat/Header.d.ts.map +1 -1
  65. package/dist/components/chat/Header.js +20 -16
  66. package/dist/components/chat/MessageItem.cjs +47 -30
  67. package/dist/components/chat/MessageItem.d.ts.map +1 -1
  68. package/dist/components/chat/MessageItem.js +52 -29
  69. package/dist/components/chat/MessageList.cjs +3 -2
  70. package/dist/components/chat/MessageList.d.ts.map +1 -1
  71. package/dist/components/chat/MessageList.js +3 -2
  72. package/dist/components/chat/QueuedMessagesDisplay.cjs +17 -5
  73. package/dist/components/chat/QueuedMessagesDisplay.d.ts.map +1 -1
  74. package/dist/components/chat/QueuedMessagesDisplay.js +18 -6
  75. package/dist/components/chat/SignalMessage.cjs +116 -0
  76. package/dist/components/chat/SignalMessage.d.ts +18 -0
  77. package/dist/components/chat/SignalMessage.d.ts.map +1 -0
  78. package/dist/components/chat/SignalMessage.js +96 -0
  79. package/dist/components/chat/SignalMessage.test.cjs +112 -0
  80. package/dist/components/chat/SignalMessage.test.d.ts +2 -0
  81. package/dist/components/chat/SignalMessage.test.d.ts.map +1 -0
  82. package/dist/components/chat/SignalMessage.test.js +116 -0
  83. package/dist/components/chat/ToolIcon.cjs +6 -5
  84. package/dist/components/chat/ToolIcon.d.ts.map +1 -1
  85. package/dist/components/chat/ToolIcon.js +6 -5
  86. package/dist/components/chat/styled-boxes/ConfigBox.cjs +8 -7
  87. package/dist/components/chat/styled-boxes/ConfigBox.d.ts.map +1 -1
  88. package/dist/components/chat/styled-boxes/ConfigBox.js +8 -7
  89. package/dist/components/chat/styled-boxes/HelpBox.cjs +4 -3
  90. package/dist/components/chat/styled-boxes/HelpBox.d.ts.map +1 -1
  91. package/dist/components/chat/styled-boxes/HelpBox.js +4 -3
  92. package/dist/components/chat/styled-boxes/LogConfigBox.cjs +11 -3
  93. package/dist/components/chat/styled-boxes/LogConfigBox.d.ts.map +1 -1
  94. package/dist/components/chat/styled-boxes/LogConfigBox.js +11 -3
  95. package/dist/components/chat/styled-boxes/SessionHistoryBox.cjs +8 -7
  96. package/dist/components/chat/styled-boxes/SessionHistoryBox.d.ts.map +1 -1
  97. package/dist/components/chat/styled-boxes/SessionHistoryBox.js +8 -7
  98. package/dist/components/chat/styled-boxes/SessionListBox.cjs +19 -11
  99. package/dist/components/chat/styled-boxes/SessionListBox.d.ts.map +1 -1
  100. package/dist/components/chat/styled-boxes/SessionListBox.js +19 -11
  101. package/dist/components/chat/styled-boxes/ShortcutsBox.cjs +4 -3
  102. package/dist/components/chat/styled-boxes/ShortcutsBox.d.ts.map +1 -1
  103. package/dist/components/chat/styled-boxes/ShortcutsBox.js +4 -3
  104. package/dist/components/chat/styled-boxes/StatsBox.cjs +13 -5
  105. package/dist/components/chat/styled-boxes/StatsBox.d.ts.map +1 -1
  106. package/dist/components/chat/styled-boxes/StatsBox.js +13 -5
  107. package/dist/components/chat/styled-boxes/StyledBox.cjs +7 -6
  108. package/dist/components/chat/styled-boxes/StyledBox.d.ts.map +1 -1
  109. package/dist/components/chat/styled-boxes/StyledBox.js +7 -6
  110. package/dist/components/chat/styled-boxes/SyspromptBox.cjs +2 -1
  111. package/dist/components/chat/styled-boxes/SyspromptBox.d.ts.map +1 -1
  112. package/dist/components/chat/styled-boxes/SyspromptBox.js +2 -1
  113. package/dist/components/modes/AlternateBufferCLI.cjs +53 -43
  114. package/dist/components/modes/AlternateBufferCLI.d.ts.map +1 -1
  115. package/dist/components/modes/AlternateBufferCLI.js +53 -43
  116. package/dist/components/modes/StaticCLI.cjs +53 -42
  117. package/dist/components/modes/StaticCLI.d.ts.map +1 -1
  118. package/dist/components/modes/StaticCLI.js +53 -42
  119. package/dist/components/overlays/ApiKeyInput.cjs +12 -11
  120. package/dist/components/overlays/ApiKeyInput.d.ts.map +1 -1
  121. package/dist/components/overlays/ApiKeyInput.js +12 -11
  122. package/dist/components/overlays/ChatGPTUsageCapOverlay.cjs +7 -6
  123. package/dist/components/overlays/ChatGPTUsageCapOverlay.d.ts.map +1 -1
  124. package/dist/components/overlays/ChatGPTUsageCapOverlay.js +7 -6
  125. package/dist/components/overlays/CommandOutputOverlay.cjs +2 -1
  126. package/dist/components/overlays/CommandOutputOverlay.d.ts.map +1 -1
  127. package/dist/components/overlays/CommandOutputOverlay.js +2 -1
  128. package/dist/components/overlays/ConnectOverlay.cjs +10 -9
  129. package/dist/components/overlays/ConnectOverlay.d.ts.map +1 -1
  130. package/dist/components/overlays/ConnectOverlay.js +10 -9
  131. package/dist/components/overlays/ContextStatsOverlay.cjs +48 -37
  132. package/dist/components/overlays/ContextStatsOverlay.d.ts.map +1 -1
  133. package/dist/components/overlays/ContextStatsOverlay.js +48 -37
  134. package/dist/components/overlays/CustomModelWizard.cjs +5 -4
  135. package/dist/components/overlays/CustomModelWizard.d.ts.map +1 -1
  136. package/dist/components/overlays/CustomModelWizard.js +5 -4
  137. package/dist/components/overlays/ExportWizard.cjs +28 -27
  138. package/dist/components/overlays/ExportWizard.d.ts.map +1 -1
  139. package/dist/components/overlays/ExportWizard.js +28 -27
  140. package/dist/components/overlays/InsufficientCreditsOverlay.cjs +8 -7
  141. package/dist/components/overlays/InsufficientCreditsOverlay.d.ts.map +1 -1
  142. package/dist/components/overlays/InsufficientCreditsOverlay.js +8 -7
  143. package/dist/components/overlays/LogLevelSelector.cjs +6 -5
  144. package/dist/components/overlays/LogLevelSelector.d.ts.map +1 -1
  145. package/dist/components/overlays/LogLevelSelector.js +6 -5
  146. package/dist/components/overlays/LoginOverlay.cjs +7 -6
  147. package/dist/components/overlays/LoginOverlay.d.ts.map +1 -1
  148. package/dist/components/overlays/LoginOverlay.js +7 -6
  149. package/dist/components/overlays/LogoutOverlay.cjs +10 -9
  150. package/dist/components/overlays/LogoutOverlay.d.ts.map +1 -1
  151. package/dist/components/overlays/LogoutOverlay.js +10 -9
  152. package/dist/components/overlays/MarketplaceAddPrompt.cjs +12 -11
  153. package/dist/components/overlays/MarketplaceAddPrompt.d.ts.map +1 -1
  154. package/dist/components/overlays/MarketplaceAddPrompt.js +12 -11
  155. package/dist/components/overlays/MarketplaceBrowser.cjs +27 -26
  156. package/dist/components/overlays/MarketplaceBrowser.d.ts.map +1 -1
  157. package/dist/components/overlays/MarketplaceBrowser.js +27 -26
  158. package/dist/components/overlays/McpAddChoice.cjs +4 -3
  159. package/dist/components/overlays/McpAddChoice.d.ts.map +1 -1
  160. package/dist/components/overlays/McpAddChoice.js +4 -3
  161. package/dist/components/overlays/McpAddSelector.cjs +4 -3
  162. package/dist/components/overlays/McpAddSelector.d.ts.map +1 -1
  163. package/dist/components/overlays/McpAddSelector.js +4 -3
  164. package/dist/components/overlays/McpCustomTypeSelector.cjs +4 -3
  165. package/dist/components/overlays/McpCustomTypeSelector.d.ts.map +1 -1
  166. package/dist/components/overlays/McpCustomTypeSelector.js +4 -3
  167. package/dist/components/overlays/McpCustomWizard.cjs +9 -8
  168. package/dist/components/overlays/McpCustomWizard.d.ts.map +1 -1
  169. package/dist/components/overlays/McpCustomWizard.js +9 -8
  170. package/dist/components/overlays/McpRemoveSelector.cjs +5 -4
  171. package/dist/components/overlays/McpRemoveSelector.d.ts.map +1 -1
  172. package/dist/components/overlays/McpRemoveSelector.js +5 -4
  173. package/dist/components/overlays/McpSelector.cjs +4 -3
  174. package/dist/components/overlays/McpSelector.d.ts.map +1 -1
  175. package/dist/components/overlays/McpSelector.js +4 -3
  176. package/dist/components/overlays/McpServerActions.cjs +7 -6
  177. package/dist/components/overlays/McpServerActions.d.ts.map +1 -1
  178. package/dist/components/overlays/McpServerActions.js +7 -6
  179. package/dist/components/overlays/McpServerList.cjs +6 -5
  180. package/dist/components/overlays/McpServerList.d.ts.map +1 -1
  181. package/dist/components/overlays/McpServerList.js +6 -5
  182. package/dist/components/overlays/ModelSelectorRefactored.cjs +32 -17
  183. package/dist/components/overlays/ModelSelectorRefactored.d.ts.map +1 -1
  184. package/dist/components/overlays/ModelSelectorRefactored.js +32 -17
  185. package/dist/components/overlays/PermissionsSelector.cjs +6 -5
  186. package/dist/components/overlays/PermissionsSelector.d.ts.map +1 -1
  187. package/dist/components/overlays/PermissionsSelector.js +6 -5
  188. package/dist/components/overlays/PluginActions.cjs +7 -6
  189. package/dist/components/overlays/PluginActions.d.ts.map +1 -1
  190. package/dist/components/overlays/PluginActions.js +7 -6
  191. package/dist/components/overlays/PluginList.cjs +12 -11
  192. package/dist/components/overlays/PluginList.d.ts.map +1 -1
  193. package/dist/components/overlays/PluginList.js +12 -11
  194. package/dist/components/overlays/PluginManager.cjs +13 -5
  195. package/dist/components/overlays/PluginManager.d.ts.map +1 -1
  196. package/dist/components/overlays/PluginManager.js +13 -5
  197. package/dist/components/overlays/PromptAddChoice.cjs +5 -4
  198. package/dist/components/overlays/PromptAddChoice.d.ts.map +1 -1
  199. package/dist/components/overlays/PromptAddChoice.js +5 -4
  200. package/dist/components/overlays/PromptAddWizard.cjs +10 -9
  201. package/dist/components/overlays/PromptAddWizard.d.ts.map +1 -1
  202. package/dist/components/overlays/PromptAddWizard.js +10 -9
  203. package/dist/components/overlays/PromptDeleteSelector.cjs +6 -5
  204. package/dist/components/overlays/PromptDeleteSelector.d.ts.map +1 -1
  205. package/dist/components/overlays/PromptDeleteSelector.js +6 -5
  206. package/dist/components/overlays/PromptList.cjs +10 -9
  207. package/dist/components/overlays/PromptList.d.ts.map +1 -1
  208. package/dist/components/overlays/PromptList.js +10 -9
  209. package/dist/components/overlays/ReasoningOverlay.cjs +30 -23
  210. package/dist/components/overlays/ReasoningOverlay.d.ts.map +1 -1
  211. package/dist/components/overlays/ReasoningOverlay.js +30 -23
  212. package/dist/components/overlays/SearchOverlay.cjs +15 -14
  213. package/dist/components/overlays/SearchOverlay.d.ts.map +1 -1
  214. package/dist/components/overlays/SearchOverlay.js +15 -14
  215. package/dist/components/overlays/SessionRenameOverlay.cjs +9 -8
  216. package/dist/components/overlays/SessionRenameOverlay.d.ts.map +1 -1
  217. package/dist/components/overlays/SessionRenameOverlay.js +9 -8
  218. package/dist/components/overlays/SessionSelectorRefactored.cjs +4 -3
  219. package/dist/components/overlays/SessionSelectorRefactored.d.ts.map +1 -1
  220. package/dist/components/overlays/SessionSelectorRefactored.js +4 -3
  221. package/dist/components/overlays/SessionSubcommandSelector.cjs +4 -3
  222. package/dist/components/overlays/SessionSubcommandSelector.d.ts.map +1 -1
  223. package/dist/components/overlays/SessionSubcommandSelector.js +4 -3
  224. package/dist/components/overlays/SoundsSelector.cjs +15 -7
  225. package/dist/components/overlays/SoundsSelector.d.ts.map +1 -1
  226. package/dist/components/overlays/SoundsSelector.js +15 -7
  227. package/dist/components/overlays/StreamSelector.cjs +5 -4
  228. package/dist/components/overlays/StreamSelector.d.ts.map +1 -1
  229. package/dist/components/overlays/StreamSelector.js +5 -4
  230. package/dist/components/overlays/ToolBrowser.cjs +73 -56
  231. package/dist/components/overlays/ToolBrowser.d.ts.map +1 -1
  232. package/dist/components/overlays/ToolBrowser.js +73 -56
  233. package/dist/components/overlays/custom-model-wizard/LocalModelWizard.cjs +103 -69
  234. package/dist/components/overlays/custom-model-wizard/LocalModelWizard.d.ts.map +1 -1
  235. package/dist/components/overlays/custom-model-wizard/LocalModelWizard.js +103 -69
  236. package/dist/components/overlays/custom-model-wizard/shared/ApiKeyStep.cjs +3 -2
  237. package/dist/components/overlays/custom-model-wizard/shared/ApiKeyStep.d.ts.map +1 -1
  238. package/dist/components/overlays/custom-model-wizard/shared/ApiKeyStep.js +3 -2
  239. package/dist/components/overlays/custom-model-wizard/shared/ProviderSelector.cjs +5 -4
  240. package/dist/components/overlays/custom-model-wizard/shared/ProviderSelector.d.ts.map +1 -1
  241. package/dist/components/overlays/custom-model-wizard/shared/ProviderSelector.js +5 -4
  242. package/dist/components/overlays/custom-model-wizard/shared/SetupInfoBanner.cjs +4 -3
  243. package/dist/components/overlays/custom-model-wizard/shared/SetupInfoBanner.d.ts.map +1 -1
  244. package/dist/components/overlays/custom-model-wizard/shared/SetupInfoBanner.js +4 -3
  245. package/dist/components/overlays/custom-model-wizard/shared/WizardStepInput.cjs +7 -6
  246. package/dist/components/overlays/custom-model-wizard/shared/WizardStepInput.d.ts.map +1 -1
  247. package/dist/components/overlays/custom-model-wizard/shared/WizardStepInput.js +7 -6
  248. package/dist/components/renderers/DiffRenderer.cjs +5 -4
  249. package/dist/components/renderers/DiffRenderer.d.ts.map +1 -1
  250. package/dist/components/renderers/DiffRenderer.js +5 -4
  251. package/dist/components/renderers/FilePreviewRenderer.cjs +23 -13
  252. package/dist/components/renderers/FilePreviewRenderer.d.ts.map +1 -1
  253. package/dist/components/renderers/FilePreviewRenderer.js +23 -13
  254. package/dist/components/renderers/FileRenderer.cjs +9 -8
  255. package/dist/components/renderers/FileRenderer.d.ts.map +1 -1
  256. package/dist/components/renderers/FileRenderer.js +9 -8
  257. package/dist/components/renderers/GenericRenderer.cjs +5 -4
  258. package/dist/components/renderers/GenericRenderer.d.ts.map +1 -1
  259. package/dist/components/renderers/GenericRenderer.js +5 -4
  260. package/dist/components/renderers/SearchRenderer.cjs +4 -3
  261. package/dist/components/renderers/SearchRenderer.d.ts.map +1 -1
  262. package/dist/components/renderers/SearchRenderer.js +4 -3
  263. package/dist/components/renderers/ShellRenderer.cjs +6 -5
  264. package/dist/components/renderers/ShellRenderer.d.ts.map +1 -1
  265. package/dist/components/renderers/ShellRenderer.js +6 -5
  266. package/dist/components/renderers/SignalDiff.cjs +139 -0
  267. package/dist/components/renderers/SignalDiff.d.ts +21 -0
  268. package/dist/components/renderers/SignalDiff.d.ts.map +1 -0
  269. package/dist/components/renderers/SignalDiff.js +106 -0
  270. package/dist/components/renderers/SignalDiff.test.cjs +78 -0
  271. package/dist/components/renderers/SignalDiff.test.d.ts +2 -0
  272. package/dist/components/renderers/SignalDiff.test.d.ts.map +1 -0
  273. package/dist/components/renderers/SignalDiff.test.js +77 -0
  274. package/dist/components/renderers/diff-shared.cjs +13 -7
  275. package/dist/components/renderers/diff-shared.d.ts +5 -0
  276. package/dist/components/renderers/diff-shared.d.ts.map +1 -1
  277. package/dist/components/renderers/diff-shared.js +12 -7
  278. package/dist/components/shared/FocusOverlayFrame.cjs +3 -2
  279. package/dist/components/shared/FocusOverlayFrame.d.ts.map +1 -1
  280. package/dist/components/shared/FocusOverlayFrame.js +3 -2
  281. package/dist/components/shared/HintBar.cjs +2 -1
  282. package/dist/components/shared/HintBar.d.ts.map +1 -1
  283. package/dist/components/shared/HintBar.js +2 -1
  284. package/dist/components/shared/MarkdownText.cjs +36 -53
  285. package/dist/components/shared/MarkdownText.d.ts +2 -0
  286. package/dist/components/shared/MarkdownText.d.ts.map +1 -1
  287. package/dist/components/shared/MarkdownText.js +36 -54
  288. package/dist/components/shared/VirtualizedList.cjs +2 -1
  289. package/dist/components/shared/VirtualizedList.d.ts.map +1 -1
  290. package/dist/components/shared/VirtualizedList.js +2 -1
  291. package/dist/containers/OverlayContainer.cjs +2 -4
  292. package/dist/containers/OverlayContainer.d.ts.map +1 -1
  293. package/dist/containers/OverlayContainer.js +2 -4
  294. package/dist/contexts/KeypressContext.cjs +7 -1
  295. package/dist/contexts/KeypressContext.d.ts.map +1 -1
  296. package/dist/contexts/KeypressContext.js +7 -1
  297. package/dist/contexts/KeypressContext.test.cjs +82 -0
  298. package/dist/contexts/KeypressContext.test.d.ts +2 -0
  299. package/dist/contexts/KeypressContext.test.d.ts.map +1 -0
  300. package/dist/contexts/KeypressContext.test.js +81 -0
  301. package/dist/hooks/useAgentEvents.cjs +1 -74
  302. package/dist/hooks/useAgentEvents.d.ts.map +1 -1
  303. package/dist/hooks/useAgentEvents.js +1 -74
  304. package/dist/hooks/useCLIState.cjs +0 -3
  305. package/dist/hooks/useCLIState.d.ts.map +1 -1
  306. package/dist/hooks/useCLIState.js +0 -3
  307. package/dist/hooks/useContextStats.cjs +91 -0
  308. package/dist/hooks/useContextStats.d.ts +13 -0
  309. package/dist/hooks/useContextStats.d.ts.map +1 -0
  310. package/dist/hooks/useContextStats.js +67 -0
  311. package/dist/hooks/useDeckState.cjs +140 -0
  312. package/dist/hooks/useDeckState.d.ts +20 -0
  313. package/dist/hooks/useDeckState.d.ts.map +1 -0
  314. package/dist/hooks/useDeckState.js +123 -0
  315. package/dist/hooks/useDextoCredits.cjs +81 -0
  316. package/dist/hooks/useDextoCredits.d.ts +14 -0
  317. package/dist/hooks/useDextoCredits.d.ts.map +1 -0
  318. package/dist/hooks/useDextoCredits.js +56 -0
  319. package/dist/hooks/useDextoCredits.test.cjs +73 -0
  320. package/dist/hooks/useDextoCredits.test.d.ts +2 -0
  321. package/dist/hooks/useDextoCredits.test.d.ts.map +1 -0
  322. package/dist/hooks/useDextoCredits.test.js +72 -0
  323. package/dist/hooks/useElapsedTime.cjs +13 -24
  324. package/dist/hooks/useElapsedTime.d.ts +3 -1
  325. package/dist/hooks/useElapsedTime.d.ts.map +1 -1
  326. package/dist/hooks/useElapsedTime.js +13 -24
  327. package/dist/hooks/useElapsedTime.test.cjs +35 -0
  328. package/dist/hooks/useElapsedTime.test.d.ts +2 -0
  329. package/dist/hooks/useElapsedTime.test.d.ts.map +1 -0
  330. package/dist/hooks/useElapsedTime.test.js +34 -0
  331. package/dist/hooks/useGitDirtyFiles.cjs +59 -0
  332. package/dist/hooks/useGitDirtyFiles.d.ts +5 -0
  333. package/dist/hooks/useGitDirtyFiles.d.ts.map +1 -0
  334. package/dist/hooks/useGitDirtyFiles.js +34 -0
  335. package/dist/hooks/useGitDirtyFiles.test.cjs +9 -0
  336. package/dist/hooks/useGitDirtyFiles.test.d.ts +2 -0
  337. package/dist/hooks/useGitDirtyFiles.test.d.ts.map +1 -0
  338. package/dist/hooks/useGitDirtyFiles.test.js +8 -0
  339. package/dist/hooks/useHeldValue.cjs +33 -0
  340. package/dist/hooks/useHeldValue.d.ts +3 -0
  341. package/dist/hooks/useHeldValue.d.ts.map +1 -0
  342. package/dist/hooks/useHeldValue.js +9 -0
  343. package/dist/hooks/useHeldValue.test.cjs +31 -0
  344. package/dist/hooks/useHeldValue.test.d.ts +2 -0
  345. package/dist/hooks/useHeldValue.test.d.ts.map +1 -0
  346. package/dist/hooks/useHeldValue.test.js +30 -0
  347. package/dist/hooks/useInputOrchestrator.cjs +22 -30
  348. package/dist/hooks/useInputOrchestrator.d.ts +2 -0
  349. package/dist/hooks/useInputOrchestrator.d.ts.map +1 -1
  350. package/dist/hooks/useInputOrchestrator.js +21 -30
  351. package/dist/hooks/useInputOrchestrator.test.cjs +24 -0
  352. package/dist/hooks/useInputOrchestrator.test.d.ts +2 -0
  353. package/dist/hooks/useInputOrchestrator.test.d.ts.map +1 -0
  354. package/dist/hooks/useInputOrchestrator.test.js +23 -0
  355. package/dist/interactive-commands/command-parser.cjs +13 -21
  356. package/dist/interactive-commands/command-parser.d.ts.map +1 -1
  357. package/dist/interactive-commands/command-parser.js +13 -11
  358. package/dist/interactive-commands/general-commands.cjs +8 -7
  359. package/dist/interactive-commands/general-commands.d.ts.map +1 -1
  360. package/dist/interactive-commands/general-commands.js +8 -7
  361. package/dist/services/processStream.cjs +31 -19
  362. package/dist/services/processStream.d.ts.map +1 -1
  363. package/dist/services/processStream.js +32 -20
  364. package/dist/services/processStream.test.cjs +51 -3
  365. package/dist/services/processStream.test.js +51 -3
  366. package/dist/signal/background.cjs +154 -0
  367. package/dist/signal/background.d.ts +43 -0
  368. package/dist/signal/background.d.ts.map +1 -0
  369. package/dist/signal/background.js +124 -0
  370. package/dist/signal/background.test.cjs +186 -0
  371. package/dist/signal/background.test.d.ts +2 -0
  372. package/dist/signal/background.test.d.ts.map +1 -0
  373. package/dist/signal/background.test.js +192 -0
  374. package/dist/signal/caps.cjs +100 -0
  375. package/dist/signal/caps.d.ts +23 -0
  376. package/dist/signal/caps.d.ts.map +1 -0
  377. package/dist/signal/caps.js +73 -0
  378. package/dist/signal/caps.test.cjs +56 -0
  379. package/dist/signal/caps.test.d.ts +2 -0
  380. package/dist/signal/caps.test.d.ts.map +1 -0
  381. package/dist/signal/caps.test.js +55 -0
  382. package/dist/signal/components.cjs +257 -0
  383. package/dist/signal/components.d.ts +120 -0
  384. package/dist/signal/components.d.ts.map +1 -0
  385. package/dist/signal/components.js +226 -0
  386. package/dist/signal/components.test.cjs +156 -0
  387. package/dist/signal/components.test.d.ts +2 -0
  388. package/dist/signal/components.test.d.ts.map +1 -0
  389. package/dist/signal/components.test.js +133 -0
  390. package/dist/signal/cut.cjs +103 -0
  391. package/dist/signal/cut.d.ts +11 -0
  392. package/dist/signal/cut.d.ts.map +1 -0
  393. package/dist/signal/cut.js +77 -0
  394. package/dist/signal/cut.test.cjs +20 -0
  395. package/dist/signal/cut.test.d.ts +2 -0
  396. package/dist/signal/cut.test.d.ts.map +1 -0
  397. package/dist/signal/cut.test.js +19 -0
  398. package/dist/signal/deck-layout.cjs +57 -0
  399. package/dist/signal/deck-layout.d.ts +29 -0
  400. package/dist/signal/deck-layout.d.ts.map +1 -0
  401. package/dist/signal/deck-layout.js +30 -0
  402. package/dist/signal/deck-parts.cjs +243 -0
  403. package/dist/signal/deck-parts.d.ts +55 -0
  404. package/dist/signal/deck-parts.d.ts.map +1 -0
  405. package/dist/signal/deck-parts.js +205 -0
  406. package/dist/signal/deck.test.cjs +311 -0
  407. package/dist/signal/deck.test.d.ts +2 -0
  408. package/dist/signal/deck.test.d.ts.map +1 -0
  409. package/dist/signal/deck.test.js +288 -0
  410. package/dist/signal/glyphs.cjs +195 -0
  411. package/dist/signal/glyphs.d.ts +8 -0
  412. package/dist/signal/glyphs.d.ts.map +1 -0
  413. package/dist/signal/glyphs.js +171 -0
  414. package/dist/signal/glyphs.test.cjs +17 -0
  415. package/dist/signal/glyphs.test.d.ts +2 -0
  416. package/dist/signal/glyphs.test.d.ts.map +1 -0
  417. package/dist/signal/glyphs.test.js +16 -0
  418. package/dist/signal/harness.cjs +103 -0
  419. package/dist/signal/harness.d.ts +70 -0
  420. package/dist/signal/harness.d.ts.map +1 -0
  421. package/dist/signal/harness.js +67 -0
  422. package/dist/signal/harness.test.cjs +84 -0
  423. package/dist/signal/harness.test.d.ts +2 -0
  424. package/dist/signal/harness.test.d.ts.map +1 -0
  425. package/dist/signal/harness.test.js +61 -0
  426. package/dist/signal/index.cjs +76 -0
  427. package/dist/signal/index.d.ts +8 -0
  428. package/dist/signal/index.d.ts.map +1 -0
  429. package/dist/signal/index.js +45 -0
  430. package/dist/signal/kit.snapshot.test.cjs +56 -0
  431. package/dist/signal/kit.snapshot.test.d.ts +2 -0
  432. package/dist/signal/kit.snapshot.test.d.ts.map +1 -0
  433. package/dist/signal/kit.snapshot.test.js +55 -0
  434. package/dist/signal/no-raw-colours.test.cjs +32 -0
  435. package/dist/signal/no-raw-colours.test.d.ts +2 -0
  436. package/dist/signal/no-raw-colours.test.d.ts.map +1 -0
  437. package/dist/signal/no-raw-colours.test.js +30 -0
  438. package/dist/signal/paint.cjs +76 -0
  439. package/dist/signal/paint.d.ts +15 -0
  440. package/dist/signal/paint.d.ts.map +1 -0
  441. package/dist/signal/paint.js +41 -0
  442. package/dist/signal/paint.test.cjs +98 -0
  443. package/dist/signal/paint.test.d.ts +2 -0
  444. package/dist/signal/paint.test.d.ts.map +1 -0
  445. package/dist/signal/paint.test.js +75 -0
  446. package/dist/signal/tone.cjs +109 -0
  447. package/dist/signal/tone.d.ts +17 -0
  448. package/dist/signal/tone.d.ts.map +1 -0
  449. package/dist/signal/tone.js +83 -0
  450. package/dist/signal/tone.test.cjs +70 -0
  451. package/dist/signal/tone.test.d.ts +2 -0
  452. package/dist/signal/tone.test.d.ts.map +1 -0
  453. package/dist/signal/tone.test.js +69 -0
  454. package/dist/signal/trace.cjs +142 -0
  455. package/dist/signal/trace.d.ts +41 -0
  456. package/dist/signal/trace.d.ts.map +1 -0
  457. package/dist/signal/trace.js +113 -0
  458. package/dist/signal/trace.test.cjs +50 -0
  459. package/dist/signal/trace.test.d.ts +2 -0
  460. package/dist/signal/trace.test.d.ts.map +1 -0
  461. package/dist/signal/trace.test.js +49 -0
  462. package/dist/signal/use-trace.cjs +73 -0
  463. package/dist/signal/use-trace.d.ts +5 -0
  464. package/dist/signal/use-trace.d.ts.map +1 -0
  465. package/dist/signal/use-trace.js +48 -0
  466. package/dist/signal/wordmark-art.generated.cjs +375 -0
  467. package/dist/signal/wordmark-art.generated.d.ts +3 -0
  468. package/dist/signal/wordmark-art.generated.d.ts.map +1 -0
  469. package/dist/signal/wordmark-art.generated.js +351 -0
  470. package/dist/signal/wordmark.cjs +60 -0
  471. package/dist/signal/wordmark.d.ts +23 -0
  472. package/dist/signal/wordmark.d.ts.map +1 -0
  473. package/dist/signal/wordmark.js +34 -0
  474. package/dist/signal/wordmark.test.cjs +71 -0
  475. package/dist/signal/wordmark.test.d.ts +2 -0
  476. package/dist/signal/wordmark.test.d.ts.map +1 -0
  477. package/dist/signal/wordmark.test.js +70 -0
  478. package/dist/state/initialState.cjs +0 -3
  479. package/dist/state/initialState.d.ts.map +1 -1
  480. package/dist/state/initialState.js +0 -3
  481. package/dist/state/types.d.ts +13 -7
  482. package/dist/state/types.d.ts.map +1 -1
  483. package/dist/utils/approval-response.cjs +45 -0
  484. package/dist/utils/approval-response.d.ts +14 -0
  485. package/dist/utils/approval-response.d.ts.map +1 -0
  486. package/dist/utils/approval-response.js +21 -0
  487. package/dist/utils/approval-response.test.cjs +49 -0
  488. package/dist/utils/approval-response.test.d.ts +2 -0
  489. package/dist/utils/approval-response.test.d.ts.map +1 -0
  490. package/dist/utils/approval-response.test.js +55 -0
  491. package/dist/utils/approvalScope.cjs +12 -0
  492. package/dist/utils/approvalScope.d.ts.map +1 -1
  493. package/dist/utils/approvalScope.js +12 -0
  494. package/dist/utils/approvalScope.test.cjs +23 -0
  495. package/dist/utils/approvalScope.test.d.ts +2 -0
  496. package/dist/utils/approvalScope.test.d.ts.map +1 -0
  497. package/dist/utils/approvalScope.test.js +22 -0
  498. package/dist/utils/background-failure.cjs +51 -0
  499. package/dist/utils/background-failure.d.ts +12 -0
  500. package/dist/utils/background-failure.d.ts.map +1 -0
  501. package/dist/utils/background-failure.js +26 -0
  502. package/dist/utils/chatgpt-rate-limit.cjs +10 -0
  503. package/dist/utils/chatgpt-rate-limit.d.ts +9 -0
  504. package/dist/utils/chatgpt-rate-limit.d.ts.map +1 -1
  505. package/dist/utils/chatgpt-rate-limit.js +9 -0
  506. package/dist/utils/chatgpt-rate-limit.test.cjs +10 -0
  507. package/dist/utils/chatgpt-rate-limit.test.js +11 -0
  508. package/dist/utils/deck-state.cjs +107 -0
  509. package/dist/utils/deck-state.d.ts +79 -0
  510. package/dist/utils/deck-state.d.ts.map +1 -0
  511. package/dist/utils/deck-state.js +76 -0
  512. package/dist/utils/deck-state.test.cjs +208 -0
  513. package/dist/utils/deck-state.test.d.ts +2 -0
  514. package/dist/utils/deck-state.test.d.ts.map +1 -0
  515. package/dist/utils/deck-state.test.js +216 -0
  516. package/dist/utils/fault-block.cjs +37 -0
  517. package/dist/utils/fault-block.d.ts +13 -0
  518. package/dist/utils/fault-block.d.ts.map +1 -0
  519. package/dist/utils/fault-block.js +13 -0
  520. package/dist/utils/fault-block.test.cjs +23 -0
  521. package/dist/utils/fault-block.test.d.ts +2 -0
  522. package/dist/utils/fault-block.test.d.ts.map +1 -0
  523. package/dist/utils/fault-block.test.js +22 -0
  524. package/dist/utils/messageFormatting.cjs +26 -23
  525. package/dist/utils/messageFormatting.d.ts +5 -2
  526. package/dist/utils/messageFormatting.d.ts.map +1 -1
  527. package/dist/utils/messageFormatting.js +25 -21
  528. package/dist/utils/messageFormatting.test.cjs +34 -0
  529. package/dist/utils/messageFormatting.test.js +35 -1
  530. package/dist/utils/reasoning-variant.cjs +35 -0
  531. package/dist/utils/reasoning-variant.d.ts +13 -0
  532. package/dist/utils/reasoning-variant.d.ts.map +1 -0
  533. package/dist/utils/reasoning-variant.js +11 -0
  534. package/dist/utils/resize-reflow.cjs +119 -0
  535. package/dist/utils/resize-reflow.d.ts +18 -0
  536. package/dist/utils/resize-reflow.d.ts.map +1 -0
  537. package/dist/utils/resize-reflow.js +83 -0
  538. package/dist/utils/resize-reflow.test.cjs +100 -0
  539. package/dist/utils/resize-reflow.test.d.ts +2 -0
  540. package/dist/utils/resize-reflow.test.d.ts.map +1 -0
  541. package/dist/utils/resize-reflow.test.js +99 -0
  542. package/dist/utils/tool-step.cjs +183 -0
  543. package/dist/utils/tool-step.d.ts +28 -0
  544. package/dist/utils/tool-step.d.ts.map +1 -0
  545. package/dist/utils/tool-step.js +156 -0
  546. package/dist/utils/tool-step.test.cjs +263 -0
  547. package/dist/utils/tool-step.test.d.ts +2 -0
  548. package/dist/utils/tool-step.test.d.ts.map +1 -0
  549. package/dist/utils/tool-step.test.js +262 -0
  550. package/package.json +7 -3
  551. package/dist/components/BackgroundTasksPanel.cjs +0 -117
  552. package/dist/components/BackgroundTasksPanel.d.ts +0 -18
  553. package/dist/components/BackgroundTasksPanel.d.ts.map +0 -1
  554. package/dist/components/BackgroundTasksPanel.js +0 -93
@@ -72,9 +72,6 @@ function createSetters({
72
72
  promptAddWizard: null,
73
73
  autoApproveEdits: false,
74
74
  todoExpanded: true,
75
- backgroundTasksRunning: 0,
76
- backgroundTasksExpanded: false,
77
- backgroundTasks: [],
78
75
  chatgptRateLimitStatus: null,
79
76
  insufficientCredits: null,
80
77
  planModeActive: false,
@@ -476,6 +473,40 @@ describe("processStream (reasoning)", () => {
476
473
  expect(assistantMessages[1]?.content).toBe("Final");
477
474
  expect(assistantMessages[1]?.reasoning).toBeUndefined();
478
475
  });
476
+ it("reports a fatal error once when the stream rethrows it", async () => {
477
+ const { getMessages, setters } = createSetters();
478
+ const error = new Error("Provider error 500");
479
+ async function* failing() {
480
+ yield { name: "llm:error", sessionId: "test-session", error };
481
+ throw new Error("Provider error 500");
482
+ }
483
+ await processStream(failing(), setters, {
484
+ useStreaming: true,
485
+ autoApproveEditsRef: { current: false },
486
+ bypassPermissionsRef: { current: false },
487
+ eventBus: { emit: vi.fn() }
488
+ });
489
+ const faults = getMessages().filter((each) => each.content.includes("Provider error 500"));
490
+ expect(faults).toHaveLength(1);
491
+ expect(faults[0]?.systemKind).toBe("fault");
492
+ });
493
+ it("still reports a stream failure nothing has reported", async () => {
494
+ const { getMessages, setters } = createSetters();
495
+ async function* failing() {
496
+ yield* [];
497
+ throw new Error("socket closed");
498
+ }
499
+ await processStream(failing(), setters, {
500
+ useStreaming: true,
501
+ autoApproveEditsRef: { current: false },
502
+ bypassPermissionsRef: { current: false },
503
+ eventBus: { emit: vi.fn() }
504
+ });
505
+ expect(getMessages().at(-1)).toMatchObject({
506
+ content: "Stream error: socket closed",
507
+ systemKind: "fault"
508
+ });
509
+ });
479
510
  it("shows the billing recovery overlay for insufficient credits", async () => {
480
511
  const { getMessages, getUi, setters } = createSetters();
481
512
  const error = Object.assign(new Error("Insufficient Dexto credits. Balance: $0.00"), {
@@ -558,3 +589,20 @@ describe("processStream (reasoning)", () => {
558
589
  );
559
590
  });
560
591
  });
592
+ describe("processStream (stop)", () => {
593
+ it("clears the stop state when a cancelled run ends its stream", async () => {
594
+ const { setters, getUi } = createSetters();
595
+ setters.setUi((prev) => ({ ...prev, isProcessing: false, isCancelling: true }));
596
+ await processStream(
597
+ eventStream([{ name: "llm:thinking", sessionId: "test-session" }]),
598
+ setters,
599
+ {
600
+ useStreaming: true,
601
+ autoApproveEditsRef: { current: false },
602
+ bypassPermissionsRef: { current: false },
603
+ eventBus: { emit: vi.fn() }
604
+ }
605
+ );
606
+ expect(getUi().isCancelling).toBe(false);
607
+ });
608
+ });
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var background_exports = {};
20
+ __export(background_exports, {
21
+ BACKGROUND_QUERY: () => BACKGROUND_QUERY,
22
+ BACKGROUND_TIMEOUT_MS: () => BACKGROUND_TIMEOUT_MS,
23
+ createTerminalReplyFilter: () => createTerminalReplyFilter,
24
+ detectBackgroundTheme: () => detectBackgroundTheme,
25
+ parseBackgroundReply: () => parseBackgroundReply,
26
+ queryBackgroundTheme: () => queryBackgroundTheme,
27
+ shouldQueryBackground: () => shouldQueryBackground
28
+ });
29
+ module.exports = __toCommonJS(background_exports);
30
+ var import_caps = require("./caps.js");
31
+ const BACKGROUND_QUERY = "\x1B]11;?\x07\x1B[c";
32
+ const BACKGROUND_TIMEOUT_MS = 250;
33
+ const OSC11_REPLY = /\x1b\]11;rgba?:([0-9a-f]{1,4})\/([0-9a-f]{1,4})\/([0-9a-f]{1,4})/i;
34
+ const DA1_REPLY = /\x1b\[\?[\d;]*c/;
35
+ function channel(hex) {
36
+ return parseInt(hex, 16) / (16 ** hex.length - 1);
37
+ }
38
+ function parseBackgroundReply(data) {
39
+ const match = OSC11_REPLY.exec(data);
40
+ if (match === null) return null;
41
+ const [r, g, b] = [match[1], match[2], match[3]].map((hex) => channel(hex ?? ""));
42
+ if (r === void 0 || g === void 0 || b === void 0) return null;
43
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b >= 0.5 ? "light" : "dark";
44
+ }
45
+ function shouldQueryBackground(caps, stdinIsTTY) {
46
+ return caps.palette === "signal" && caps.color !== "none" && caps.tty && stdinIsTTY;
47
+ }
48
+ function queryBackgroundTheme(io, timeoutMs) {
49
+ const { stdin, stdout } = io;
50
+ const wasRaw = stdin.isRaw === true;
51
+ return new Promise((resolve) => {
52
+ let received = "";
53
+ const finish = () => {
54
+ clearTimeout(timer);
55
+ stdin.removeListener("data", onData);
56
+ stdin.setRawMode?.(wasRaw);
57
+ stdin.pause();
58
+ const { keys, held } = stripReplies(received);
59
+ const rest = keys + held;
60
+ if (rest !== "") stdin.unshift(Buffer.from(rest, "latin1"));
61
+ resolve(parseBackgroundReply(received));
62
+ };
63
+ const onData = (chunk) => {
64
+ received += (typeof chunk === "string" ? Buffer.from(chunk) : chunk).toString("latin1");
65
+ if (DA1_REPLY.test(received)) finish();
66
+ };
67
+ const timer = setTimeout(finish, timeoutMs);
68
+ stdin.setRawMode?.(true);
69
+ stdin.on("data", onData);
70
+ stdin.resume();
71
+ stdout.write(BACKGROUND_QUERY);
72
+ });
73
+ }
74
+ const MAX_REPLY_LENGTH = 64;
75
+ function scanOscReply(s, at) {
76
+ if (s.length < at + 3) return "none";
77
+ for (let k = 2; k < 5; k++) {
78
+ const ch = s[at + k];
79
+ if (ch === void 0) return "partial";
80
+ const ok = k === 2 ? ch === "1" : k === 3 ? ch === "0" || ch === "1" : ch === ";";
81
+ if (!ok) return "none";
82
+ }
83
+ for (let i = at + 5; i < s.length && i - at <= MAX_REPLY_LENGTH; i++) {
84
+ const ch = s[i] ?? "";
85
+ if (ch === "\x07") return i + 1;
86
+ if (ch === "\x1B") {
87
+ const next = s[i + 1];
88
+ if (next === void 0) return "partial";
89
+ return next === "\\" ? i + 2 : "none";
90
+ }
91
+ if (!/[0-9a-z:/]/i.test(ch)) return "none";
92
+ }
93
+ return s.length - at > MAX_REPLY_LENGTH ? "none" : "partial";
94
+ }
95
+ function scanDa1Reply(s, at) {
96
+ if (s[at + 2] !== "?") return "none";
97
+ for (let i = at + 3; i < s.length && i - at <= MAX_REPLY_LENGTH; i++) {
98
+ const ch = s[i] ?? "";
99
+ if (ch === "c") return i + 1;
100
+ if (!/[\d;]/.test(ch)) return "none";
101
+ }
102
+ return s.length - at > MAX_REPLY_LENGTH ? "none" : "partial";
103
+ }
104
+ function scanReply(s, at) {
105
+ const kind = s[at + 1];
106
+ if (kind === "]") return scanOscReply(s, at);
107
+ if (kind === "[") return scanDa1Reply(s, at);
108
+ return "none";
109
+ }
110
+ function stripReplies(input) {
111
+ let keys = "";
112
+ let i = 0;
113
+ while (i < input.length) {
114
+ const esc = input.indexOf("\x1B", i);
115
+ if (esc === -1) {
116
+ keys += input.slice(i);
117
+ break;
118
+ }
119
+ keys += input.slice(i, esc);
120
+ const end = scanReply(input, esc);
121
+ if (end === "partial") return { keys, held: input.slice(esc) };
122
+ if (end === "none") {
123
+ keys += "\x1B";
124
+ i = esc + 1;
125
+ } else {
126
+ i = end;
127
+ }
128
+ }
129
+ return { keys, held: "" };
130
+ }
131
+ function createTerminalReplyFilter() {
132
+ let held = "";
133
+ return (data) => {
134
+ const result = stripReplies(held + data);
135
+ held = result.held;
136
+ return result.keys;
137
+ };
138
+ }
139
+ async function detectBackgroundTheme(io) {
140
+ const caps = (0, import_caps.getCaps)();
141
+ if (!shouldQueryBackground(caps, io.stdin.isTTY === true)) return;
142
+ const theme = await queryBackgroundTheme(io, BACKGROUND_TIMEOUT_MS);
143
+ if (theme !== null && theme !== caps.theme) (0, import_caps.setCaps)({ ...(0, import_caps.getCaps)(), theme });
144
+ }
145
+ // Annotate the CommonJS export names for ESM import in node:
146
+ 0 && (module.exports = {
147
+ BACKGROUND_QUERY,
148
+ BACKGROUND_TIMEOUT_MS,
149
+ createTerminalReplyFilter,
150
+ detectBackgroundTheme,
151
+ parseBackgroundReply,
152
+ queryBackgroundTheme,
153
+ shouldQueryBackground
154
+ });
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Asks the terminal for its background colour (OSC 11) so the Signal palette picks its dark or
3
+ * light set from what is actually on screen, not from COLORFGBG alone.
4
+ *
5
+ * The query is followed by DA1 (primary device attributes), which every terminal answers. That
6
+ * reply marks the end: a terminal that ignores OSC 11 costs one round trip, not the timeout.
7
+ * Runs once at start-up, before Ink takes stdin.
8
+ */
9
+ import { type Caps, type ThemeName } from './caps.js';
10
+ export declare const BACKGROUND_QUERY = "\u001B]11;?\u0007\u001B[c";
11
+ /** How long to wait for a terminal that answers neither query (a pipe dressed as a TTY). */
12
+ export declare const BACKGROUND_TIMEOUT_MS = 250;
13
+ /** The theme for an OSC 11 reply found anywhere in `data`, or null when there is none. */
14
+ export declare function parseBackgroundReply(data: string): ThemeName | null;
15
+ /** Only the Signal palette reads the theme, and only a colour TTY can answer. */
16
+ export declare function shouldQueryBackground(caps: Caps, stdinIsTTY: boolean): boolean;
17
+ export interface TerminalIO {
18
+ stdin: NodeJS.ReadableStream & {
19
+ isTTY?: boolean;
20
+ isRaw?: boolean;
21
+ setRawMode?: (mode: boolean) => unknown;
22
+ };
23
+ stdout: {
24
+ write: (chunk: string) => boolean;
25
+ };
26
+ }
27
+ /**
28
+ * Sends the query and resolves with the background's theme, or null when the terminal does not
29
+ * say. Everything read that is not a complete reply goes back onto stdin byte for byte: keys
30
+ * typed during start-up, a UTF-8 character cut off by the timeout, and the start of a reply cut
31
+ * off by it (the keypress filter drops the rest of that reply when it arrives). Leaves stdin
32
+ * paused and in the raw mode it found it in.
33
+ */
34
+ export declare function queryBackgroundTheme(io: TerminalIO, timeoutMs: number): Promise<ThemeName | null>;
35
+ /**
36
+ * Removes OSC 10/11 and DA1 replies from keyboard input, holding back the start of one that is
37
+ * split across chunks. Sits in front of the keypress parser so a reply that arrives after
38
+ * `queryBackgroundTheme` gave up never becomes prompt text. One filter per input stream.
39
+ */
40
+ export declare function createTerminalReplyFilter(): (data: string) => string;
41
+ /** Refines the process-wide caps' theme from the terminal's background, when it can tell. */
42
+ export declare function detectBackgroundTheme(io: TerminalIO): Promise<void>;
43
+ //# sourceMappingURL=background.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../../src/signal/background.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAoB,KAAK,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAExE,eAAO,MAAM,gBAAgB,8BAAwB,CAAC;AAEtD,4FAA4F;AAC5F,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAYzC,0FAA0F;AAC1F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAMnE;AAED,iFAAiF;AACjF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAE9E;AAED,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,MAAM,CAAC,cAAc,GAAG;QAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;KAC3C,CAAC;IACF,MAAM,EAAE;QAAE,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;KAAE,CAAC;CACjD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA0BjG;AA0ED;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAOpE;AAED,6FAA6F;AAC7F,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAKzE"}
@@ -0,0 +1,124 @@
1
+ import { getCaps, setCaps } from "./caps.js";
2
+ const BACKGROUND_QUERY = "\x1B]11;?\x07\x1B[c";
3
+ const BACKGROUND_TIMEOUT_MS = 250;
4
+ const OSC11_REPLY = /\x1b\]11;rgba?:([0-9a-f]{1,4})\/([0-9a-f]{1,4})\/([0-9a-f]{1,4})/i;
5
+ const DA1_REPLY = /\x1b\[\?[\d;]*c/;
6
+ function channel(hex) {
7
+ return parseInt(hex, 16) / (16 ** hex.length - 1);
8
+ }
9
+ function parseBackgroundReply(data) {
10
+ const match = OSC11_REPLY.exec(data);
11
+ if (match === null) return null;
12
+ const [r, g, b] = [match[1], match[2], match[3]].map((hex) => channel(hex ?? ""));
13
+ if (r === void 0 || g === void 0 || b === void 0) return null;
14
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b >= 0.5 ? "light" : "dark";
15
+ }
16
+ function shouldQueryBackground(caps, stdinIsTTY) {
17
+ return caps.palette === "signal" && caps.color !== "none" && caps.tty && stdinIsTTY;
18
+ }
19
+ function queryBackgroundTheme(io, timeoutMs) {
20
+ const { stdin, stdout } = io;
21
+ const wasRaw = stdin.isRaw === true;
22
+ return new Promise((resolve) => {
23
+ let received = "";
24
+ const finish = () => {
25
+ clearTimeout(timer);
26
+ stdin.removeListener("data", onData);
27
+ stdin.setRawMode?.(wasRaw);
28
+ stdin.pause();
29
+ const { keys, held } = stripReplies(received);
30
+ const rest = keys + held;
31
+ if (rest !== "") stdin.unshift(Buffer.from(rest, "latin1"));
32
+ resolve(parseBackgroundReply(received));
33
+ };
34
+ const onData = (chunk) => {
35
+ received += (typeof chunk === "string" ? Buffer.from(chunk) : chunk).toString("latin1");
36
+ if (DA1_REPLY.test(received)) finish();
37
+ };
38
+ const timer = setTimeout(finish, timeoutMs);
39
+ stdin.setRawMode?.(true);
40
+ stdin.on("data", onData);
41
+ stdin.resume();
42
+ stdout.write(BACKGROUND_QUERY);
43
+ });
44
+ }
45
+ const MAX_REPLY_LENGTH = 64;
46
+ function scanOscReply(s, at) {
47
+ if (s.length < at + 3) return "none";
48
+ for (let k = 2; k < 5; k++) {
49
+ const ch = s[at + k];
50
+ if (ch === void 0) return "partial";
51
+ const ok = k === 2 ? ch === "1" : k === 3 ? ch === "0" || ch === "1" : ch === ";";
52
+ if (!ok) return "none";
53
+ }
54
+ for (let i = at + 5; i < s.length && i - at <= MAX_REPLY_LENGTH; i++) {
55
+ const ch = s[i] ?? "";
56
+ if (ch === "\x07") return i + 1;
57
+ if (ch === "\x1B") {
58
+ const next = s[i + 1];
59
+ if (next === void 0) return "partial";
60
+ return next === "\\" ? i + 2 : "none";
61
+ }
62
+ if (!/[0-9a-z:/]/i.test(ch)) return "none";
63
+ }
64
+ return s.length - at > MAX_REPLY_LENGTH ? "none" : "partial";
65
+ }
66
+ function scanDa1Reply(s, at) {
67
+ if (s[at + 2] !== "?") return "none";
68
+ for (let i = at + 3; i < s.length && i - at <= MAX_REPLY_LENGTH; i++) {
69
+ const ch = s[i] ?? "";
70
+ if (ch === "c") return i + 1;
71
+ if (!/[\d;]/.test(ch)) return "none";
72
+ }
73
+ return s.length - at > MAX_REPLY_LENGTH ? "none" : "partial";
74
+ }
75
+ function scanReply(s, at) {
76
+ const kind = s[at + 1];
77
+ if (kind === "]") return scanOscReply(s, at);
78
+ if (kind === "[") return scanDa1Reply(s, at);
79
+ return "none";
80
+ }
81
+ function stripReplies(input) {
82
+ let keys = "";
83
+ let i = 0;
84
+ while (i < input.length) {
85
+ const esc = input.indexOf("\x1B", i);
86
+ if (esc === -1) {
87
+ keys += input.slice(i);
88
+ break;
89
+ }
90
+ keys += input.slice(i, esc);
91
+ const end = scanReply(input, esc);
92
+ if (end === "partial") return { keys, held: input.slice(esc) };
93
+ if (end === "none") {
94
+ keys += "\x1B";
95
+ i = esc + 1;
96
+ } else {
97
+ i = end;
98
+ }
99
+ }
100
+ return { keys, held: "" };
101
+ }
102
+ function createTerminalReplyFilter() {
103
+ let held = "";
104
+ return (data) => {
105
+ const result = stripReplies(held + data);
106
+ held = result.held;
107
+ return result.keys;
108
+ };
109
+ }
110
+ async function detectBackgroundTheme(io) {
111
+ const caps = getCaps();
112
+ if (!shouldQueryBackground(caps, io.stdin.isTTY === true)) return;
113
+ const theme = await queryBackgroundTheme(io, BACKGROUND_TIMEOUT_MS);
114
+ if (theme !== null && theme !== caps.theme) setCaps({ ...getCaps(), theme });
115
+ }
116
+ export {
117
+ BACKGROUND_QUERY,
118
+ BACKGROUND_TIMEOUT_MS,
119
+ createTerminalReplyFilter,
120
+ detectBackgroundTheme,
121
+ parseBackgroundReply,
122
+ queryBackgroundTheme,
123
+ shouldQueryBackground
124
+ };
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ var import_node_stream = require("node:stream");
3
+ var import_vitest = require("vitest");
4
+ var import_caps = require("./caps.js");
5
+ var import_background = require("./background.js");
6
+ const caps = {
7
+ tty: true,
8
+ color: "truecolor",
9
+ glyphs: "unicode",
10
+ logo: "quadrant",
11
+ theme: "dark",
12
+ motion: "full",
13
+ palette: "signal"
14
+ };
15
+ const DA1 = "\x1B[?62;22c";
16
+ (0, import_vitest.describe)("parseBackgroundReply", () => {
17
+ (0, import_vitest.it)("reads a dark and a light background, with either terminator", () => {
18
+ (0, import_vitest.expect)((0, import_background.parseBackgroundReply)("\x1B]11;rgb:1e1e/1e1e/1e1e\x07")).toBe("dark");
19
+ (0, import_vitest.expect)((0, import_background.parseBackgroundReply)("\x1B]11;rgb:ffff/ffff/ffff\x1B\\")).toBe("light");
20
+ });
21
+ (0, import_vitest.it)("accepts one to four hex digits per channel, and rgba", () => {
22
+ (0, import_vitest.expect)((0, import_background.parseBackgroundReply)("\x1B]11;rgb:f/f/f\x07")).toBe("light");
23
+ (0, import_vitest.expect)((0, import_background.parseBackgroundReply)("\x1B]11;rgb:fd/f6/e3\x07")).toBe("light");
24
+ (0, import_vitest.expect)((0, import_background.parseBackgroundReply)("\x1B]11;rgba:0000/2b2b/3636/ffff\x07")).toBe("dark");
25
+ });
26
+ (0, import_vitest.it)("weighs green over blue, as the eye does", () => {
27
+ (0, import_vitest.expect)((0, import_background.parseBackgroundReply)("\x1B]11;rgb:0000/c0c0/0000\x07")).toBe("light");
28
+ (0, import_vitest.expect)((0, import_background.parseBackgroundReply)("\x1B]11;rgb:0000/0000/ffff\x07")).toBe("dark");
29
+ });
30
+ (0, import_vitest.it)("finds the reply among other bytes, and returns null when there is none", () => {
31
+ (0, import_vitest.expect)((0, import_background.parseBackgroundReply)(`junk\x1B]11;rgb:ffff/ffff/ffff\x07${DA1}`)).toBe("light");
32
+ (0, import_vitest.expect)((0, import_background.parseBackgroundReply)(DA1)).toBeNull();
33
+ (0, import_vitest.expect)((0, import_background.parseBackgroundReply)("\x1B]11;rgb:zz/00/00\x07")).toBeNull();
34
+ });
35
+ });
36
+ (0, import_vitest.describe)("shouldQueryBackground", () => {
37
+ (0, import_vitest.it)("asks only when the Signal palette will use the answer on a colour TTY", () => {
38
+ (0, import_vitest.expect)((0, import_background.shouldQueryBackground)(caps, true)).toBe(true);
39
+ (0, import_vitest.expect)((0, import_background.shouldQueryBackground)({ ...caps, palette: "legacy" }, true)).toBe(false);
40
+ (0, import_vitest.expect)((0, import_background.shouldQueryBackground)({ ...caps, color: "none" }, true)).toBe(false);
41
+ (0, import_vitest.expect)((0, import_background.shouldQueryBackground)({ ...caps, tty: false }, true)).toBe(false);
42
+ (0, import_vitest.expect)((0, import_background.shouldQueryBackground)(caps, false)).toBe(false);
43
+ });
44
+ });
45
+ function fakeTerminal(reply) {
46
+ const stdin = Object.assign(new import_node_stream.PassThrough(), {
47
+ isTTY: true,
48
+ isRaw: false,
49
+ setRawMode: import_vitest.vi.fn(function(mode) {
50
+ this.isRaw = mode;
51
+ return this;
52
+ })
53
+ });
54
+ const written = [];
55
+ const stdout = {
56
+ write: (chunk) => {
57
+ written.push(chunk);
58
+ const answer = reply?.(chunk) ?? null;
59
+ if (answer !== null) setTimeout(() => stdin.write(answer), 0);
60
+ return true;
61
+ }
62
+ };
63
+ const io = { stdin, stdout };
64
+ return { io, stdin, written };
65
+ }
66
+ (0, import_vitest.describe)("queryBackgroundTheme", () => {
67
+ (0, import_vitest.it)("sends OSC 11 then DA1, and reads the theme from the reply", async () => {
68
+ const { io, written } = fakeTerminal(() => `\x1B]11;rgb:ffff/ffff/ffff\x07${DA1}`);
69
+ await (0, import_vitest.expect)((0, import_background.queryBackgroundTheme)(io, 500)).resolves.toBe("light");
70
+ (0, import_vitest.expect)(written).toEqual([import_background.BACKGROUND_QUERY]);
71
+ });
72
+ (0, import_vitest.it)("stops at the DA1 reply when the terminal does not answer OSC 11", async () => {
73
+ const { io } = fakeTerminal(() => DA1);
74
+ const started = Date.now();
75
+ await (0, import_vitest.expect)((0, import_background.queryBackgroundTheme)(io, 5e3)).resolves.toBeNull();
76
+ (0, import_vitest.expect)(Date.now() - started).toBeLessThan(1e3);
77
+ });
78
+ (0, import_vitest.it)("gives up after the timeout when nothing answers", async () => {
79
+ const { io } = fakeTerminal(null);
80
+ await (0, import_vitest.expect)((0, import_background.queryBackgroundTheme)(io, 20)).resolves.toBeNull();
81
+ });
82
+ (0, import_vitest.it)("handles a reply split across chunks", async () => {
83
+ const { io, stdin } = fakeTerminal(() => null);
84
+ const pending = (0, import_background.queryBackgroundTheme)(io, 500);
85
+ stdin.write("\x1B]11;rgb:00");
86
+ stdin.write(`00/0000/0000\x07${DA1}`);
87
+ await (0, import_vitest.expect)(pending).resolves.toBe("dark");
88
+ });
89
+ (0, import_vitest.it)("puts stdin back as it found it", async () => {
90
+ const { io, stdin } = fakeTerminal(() => DA1);
91
+ await (0, import_background.queryBackgroundTheme)(io, 500);
92
+ (0, import_vitest.expect)(stdin.setRawMode).toHaveBeenLastCalledWith(false);
93
+ (0, import_vitest.expect)(stdin.isRaw).toBe(false);
94
+ (0, import_vitest.expect)(stdin.listenerCount("data")).toBe(0);
95
+ (0, import_vitest.expect)(stdin.isPaused()).toBe(true);
96
+ });
97
+ });
98
+ (0, import_vitest.describe)("detectBackgroundTheme", () => {
99
+ (0, import_vitest.it)("updates the caps theme from the reply on the Signal palette", async () => {
100
+ const saved = (0, import_caps.getCaps)();
101
+ (0, import_caps.setCaps)({ ...caps, theme: "dark" });
102
+ try {
103
+ const { io } = fakeTerminal(() => `\x1B]11;rgb:ffff/ffff/ffff\x07${DA1}`);
104
+ await (0, import_background.detectBackgroundTheme)(io);
105
+ (0, import_vitest.expect)((0, import_caps.getCaps)().theme).toBe("light");
106
+ } finally {
107
+ (0, import_caps.setCaps)(saved);
108
+ }
109
+ });
110
+ (0, import_vitest.it)("sends nothing on the legacy palette", async () => {
111
+ const saved = (0, import_caps.getCaps)();
112
+ (0, import_caps.setCaps)({ ...caps, palette: "legacy" });
113
+ try {
114
+ const { io, written } = fakeTerminal(() => DA1);
115
+ await (0, import_background.detectBackgroundTheme)(io);
116
+ (0, import_vitest.expect)(written).toEqual([]);
117
+ } finally {
118
+ (0, import_caps.setCaps)(saved);
119
+ }
120
+ });
121
+ });
122
+ (0, import_vitest.describe)("queryBackgroundTheme keeps what the user typed", () => {
123
+ (0, import_vitest.it)("hands bytes that are not part of the reply back to stdin", async () => {
124
+ const { io, stdin } = fakeTerminal(
125
+ () => `\x1B]11;rgb:ffff/ffff/ffff\x07summarize this\r${DA1}`
126
+ );
127
+ await (0, import_vitest.expect)((0, import_background.queryBackgroundTheme)(io, 500)).resolves.toBe("light");
128
+ (0, import_vitest.expect)(String(stdin.read())).toBe("summarize this\r");
129
+ });
130
+ (0, import_vitest.it)("hands back nothing when only the replies arrived", async () => {
131
+ const { io, stdin } = fakeTerminal(() => `\x1B]11;rgb:ffff/ffff/ffff\x07${DA1}`);
132
+ await (0, import_background.queryBackgroundTheme)(io, 500);
133
+ (0, import_vitest.expect)(stdin.read()).toBeNull();
134
+ });
135
+ });
136
+ (0, import_vitest.describe)("createTerminalReplyFilter", () => {
137
+ const OSC = "\x1B]11;rgb:ffff/ffff/ffff";
138
+ (0, import_vitest.it)("drops background and DA1 replies, with either terminator", () => {
139
+ const filter = (0, import_background.createTerminalReplyFilter)();
140
+ (0, import_vitest.expect)(filter(`${OSC}\x07`)).toBe("");
141
+ (0, import_vitest.expect)(filter(`${OSC}\x1B\\`)).toBe("");
142
+ (0, import_vitest.expect)(filter(DA1)).toBe("");
143
+ (0, import_vitest.expect)(filter("\x1B]10;rgb:0/0/0\x07")).toBe("");
144
+ });
145
+ (0, import_vitest.it)("keeps the keys around a reply", () => {
146
+ const filter = (0, import_background.createTerminalReplyFilter)();
147
+ (0, import_vitest.expect)(filter(`ab${OSC}\x07cd${DA1}e`)).toBe("abcde");
148
+ });
149
+ (0, import_vitest.it)("drops a reply split across chunks", () => {
150
+ const filter = (0, import_background.createTerminalReplyFilter)();
151
+ (0, import_vitest.expect)(filter("x\x1B]11;rgb:ff")).toBe("x");
152
+ (0, import_vitest.expect)(filter("ff/ffff/ffff\x07y\x1B[?6")).toBe("y");
153
+ (0, import_vitest.expect)(filter("2;22cz")).toBe("z");
154
+ });
155
+ (0, import_vitest.it)("passes keyboard escapes through untouched", () => {
156
+ const filter = (0, import_background.createTerminalReplyFilter)();
157
+ (0, import_vitest.expect)(filter("\x1B")).toBe("\x1B");
158
+ (0, import_vitest.expect)(filter("\x1B]")).toBe("\x1B]");
159
+ (0, import_vitest.expect)(filter("\x1B[")).toBe("\x1B[");
160
+ (0, import_vitest.expect)(filter("\x1B[A\x1B[1;5C\x1B[<0;10;5M")).toBe("\x1B[A\x1B[1;5C\x1B[<0;10;5M");
161
+ (0, import_vitest.expect)(filter("\x1B]a")).toBe("\x1B]a");
162
+ });
163
+ (0, import_vitest.it)("releases held bytes that turn out not to be a reply", () => {
164
+ const filter = (0, import_background.createTerminalReplyFilter)();
165
+ (0, import_vitest.expect)(filter("\x1B]11;rgb")).toBe("");
166
+ (0, import_vitest.expect)(filter(" hello")).toBe("\x1B]11;rgb hello");
167
+ });
168
+ });
169
+ (0, import_vitest.describe)("queryBackgroundTheme hands back unfinished input as raw bytes", () => {
170
+ (0, import_vitest.it)("returns a reply cut off by the timeout, so the keypress filter can finish dropping it", async () => {
171
+ const { io, stdin } = fakeTerminal(() => "\x1B]11;rgb:ff");
172
+ await (0, import_vitest.expect)((0, import_background.queryBackgroundTheme)(io, 50)).resolves.toBeNull();
173
+ const handedBack = String(stdin.read());
174
+ (0, import_vitest.expect)(handedBack).toBe("\x1B]11;rgb:ff");
175
+ const filter = (0, import_background.createTerminalReplyFilter)();
176
+ (0, import_vitest.expect)(filter(handedBack) + filter("ff/ffff/ffff\x07a")).toBe("a");
177
+ });
178
+ (0, import_vitest.it)("returns a UTF-8 character cut off by the timeout unchanged", async () => {
179
+ const { io, stdin } = fakeTerminal(() => null);
180
+ const pending = (0, import_background.queryBackgroundTheme)(io, 50);
181
+ stdin.write(Buffer.from([104, 226]));
182
+ await (0, import_vitest.expect)(pending).resolves.toBeNull();
183
+ const handedBack = stdin.read();
184
+ (0, import_vitest.expect)(Buffer.concat([handedBack, Buffer.from([130, 172])]).toString("utf8")).toBe("h\u20AC");
185
+ });
186
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=background.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background.test.d.ts","sourceRoot":"","sources":["../../src/signal/background.test.ts"],"names":[],"mappings":""}