@qduc/term2 0.1.1 → 0.1.3

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 (294) hide show
  1. package/dist/agent.d.ts +2 -0
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +9 -5
  4. package/dist/agent.js.map +1 -1
  5. package/dist/agent.lite-mode.test.d.ts +2 -0
  6. package/dist/agent.lite-mode.test.d.ts.map +1 -0
  7. package/dist/agent.lite-mode.test.js +39 -0
  8. package/dist/agent.lite-mode.test.js.map +1 -0
  9. package/dist/app.d.ts.map +1 -1
  10. package/dist/app.js +3 -1
  11. package/dist/app.js.map +1 -1
  12. package/dist/components/ApprovalPrompt.d.ts.map +1 -1
  13. package/dist/components/ApprovalPrompt.js +26 -6
  14. package/dist/components/ApprovalPrompt.js.map +1 -1
  15. package/dist/components/BottomArea.js +1 -1
  16. package/dist/components/BottomArea.js.map +1 -1
  17. package/dist/components/ChatMessage.js +1 -1
  18. package/dist/components/ChatMessage.js.map +1 -1
  19. package/dist/components/CommandMessage.js +7 -7
  20. package/dist/components/CommandMessage.js.map +1 -1
  21. package/dist/components/ErrorBoundary.js +2 -2
  22. package/dist/components/ErrorBoundary.js.map +1 -1
  23. package/dist/components/Input/PopupManager.d.ts +10 -0
  24. package/dist/components/Input/PopupManager.d.ts.map +1 -1
  25. package/dist/components/Input/PopupManager.js +4 -2
  26. package/dist/components/Input/PopupManager.js.map +1 -1
  27. package/dist/components/InputBox.d.ts.map +1 -1
  28. package/dist/components/InputBox.js +102 -18
  29. package/dist/components/InputBox.js.map +1 -1
  30. package/dist/components/LiveResponse.d.ts +1 -1
  31. package/dist/components/LiveResponse.js +1 -1
  32. package/dist/components/MarkdownRenderer.js +13 -14
  33. package/dist/components/MarkdownRenderer.js.map +1 -1
  34. package/dist/components/ModelSelectionMenu.d.ts.map +1 -1
  35. package/dist/components/ModelSelectionMenu.js +11 -11
  36. package/dist/components/ModelSelectionMenu.js.map +1 -1
  37. package/dist/components/PathSelectionMenu.js +3 -3
  38. package/dist/components/PathSelectionMenu.js.map +1 -1
  39. package/dist/components/SettingsSelectionMenu.d.ts +1 -0
  40. package/dist/components/SettingsSelectionMenu.d.ts.map +1 -1
  41. package/dist/components/SettingsSelectionMenu.js +127 -14
  42. package/dist/components/SettingsSelectionMenu.js.map +1 -1
  43. package/dist/components/SettingsSelectionMenu.test.d.ts +2 -0
  44. package/dist/components/SettingsSelectionMenu.test.d.ts.map +1 -0
  45. package/dist/components/SettingsSelectionMenu.test.js +40 -0
  46. package/dist/components/SettingsSelectionMenu.test.js.map +1 -0
  47. package/dist/components/SettingsValueSelectionMenu.d.ts +12 -0
  48. package/dist/components/SettingsValueSelectionMenu.d.ts.map +1 -0
  49. package/dist/components/SettingsValueSelectionMenu.js +63 -0
  50. package/dist/components/SettingsValueSelectionMenu.js.map +1 -0
  51. package/dist/components/SettingsValueSelectionMenu.test.d.ts +2 -0
  52. package/dist/components/SettingsValueSelectionMenu.test.d.ts.map +1 -0
  53. package/dist/components/SettingsValueSelectionMenu.test.js +38 -0
  54. package/dist/components/SettingsValueSelectionMenu.test.js.map +1 -0
  55. package/dist/components/SlashCommandMenu.js +2 -2
  56. package/dist/components/SlashCommandMenu.js.map +1 -1
  57. package/dist/components/TextInput.d.ts.map +1 -1
  58. package/dist/components/TextInput.js +2 -1
  59. package/dist/components/TextInput.js.map +1 -1
  60. package/dist/components/TextInput.test.js.map +1 -1
  61. package/dist/context/InputContext.d.ts +1 -1
  62. package/dist/context/InputContext.d.ts.map +1 -1
  63. package/dist/context/InputContext.js.map +1 -1
  64. package/dist/debug_ask_mentor.d.ts +2 -0
  65. package/dist/debug_ask_mentor.d.ts.map +1 -0
  66. package/dist/debug_ask_mentor.js +73 -0
  67. package/dist/debug_ask_mentor.js.map +1 -0
  68. package/dist/hooks/use-model-selection.d.ts.map +1 -1
  69. package/dist/hooks/use-model-selection.js +7 -3
  70. package/dist/hooks/use-model-selection.js.map +1 -1
  71. package/dist/hooks/use-settings-completion.d.ts +1 -1
  72. package/dist/hooks/use-settings-completion.d.ts.map +1 -1
  73. package/dist/hooks/use-settings-completion.js +70 -10
  74. package/dist/hooks/use-settings-completion.js.map +1 -1
  75. package/dist/hooks/use-settings-completion.test.js +17 -10
  76. package/dist/hooks/use-settings-completion.test.js.map +1 -1
  77. package/dist/hooks/use-settings-value-completion.d.ts +23 -0
  78. package/dist/hooks/use-settings-value-completion.d.ts.map +1 -0
  79. package/dist/hooks/use-settings-value-completion.js +214 -0
  80. package/dist/hooks/use-settings-value-completion.js.map +1 -0
  81. package/dist/hooks/use-settings-value-completion.test.d.ts +2 -0
  82. package/dist/hooks/use-settings-value-completion.test.d.ts.map +1 -0
  83. package/dist/hooks/use-settings-value-completion.test.js +65 -0
  84. package/dist/hooks/use-settings-value-completion.test.js.map +1 -0
  85. package/dist/lib/openai-agent-client.d.ts.map +1 -1
  86. package/dist/lib/openai-agent-client.flex-tier.test.d.ts +2 -0
  87. package/dist/lib/openai-agent-client.flex-tier.test.d.ts.map +1 -0
  88. package/dist/lib/openai-agent-client.flex-tier.test.js +70 -0
  89. package/dist/lib/openai-agent-client.flex-tier.test.js.map +1 -0
  90. package/dist/lib/openai-agent-client.js +71 -36
  91. package/dist/lib/openai-agent-client.js.map +1 -1
  92. package/dist/lib/tool-invoke.test.js +1 -1
  93. package/dist/lib/tool-invoke.test.js.map +1 -1
  94. package/dist/modes/companion/command-index.d.ts +26 -0
  95. package/dist/modes/companion/command-index.d.ts.map +1 -0
  96. package/dist/modes/companion/command-index.js +50 -0
  97. package/dist/modes/companion/command-index.js.map +1 -0
  98. package/dist/modes/companion/command-index.test.d.ts +2 -0
  99. package/dist/modes/companion/command-index.test.d.ts.map +1 -0
  100. package/dist/modes/companion/command-index.test.js +86 -0
  101. package/dist/modes/companion/command-index.test.js.map +1 -0
  102. package/dist/modes/companion/companion-app.d.ts +12 -0
  103. package/dist/modes/companion/companion-app.d.ts.map +1 -0
  104. package/dist/modes/companion/companion-app.js +297 -0
  105. package/dist/modes/companion/companion-app.js.map +1 -0
  106. package/dist/modes/companion/companion-session.d.ts +63 -0
  107. package/dist/modes/companion/companion-session.d.ts.map +1 -0
  108. package/dist/modes/companion/companion-session.js +146 -0
  109. package/dist/modes/companion/companion-session.js.map +1 -0
  110. package/dist/modes/companion/companion-session.test.d.ts +2 -0
  111. package/dist/modes/companion/companion-session.test.d.ts.map +1 -0
  112. package/dist/modes/companion/companion-session.test.js +28 -0
  113. package/dist/modes/companion/companion-session.test.js.map +1 -0
  114. package/dist/modes/companion/components/status-bar.d.ts +13 -0
  115. package/dist/modes/companion/components/status-bar.d.ts.map +1 -0
  116. package/dist/modes/companion/components/status-bar.js +26 -0
  117. package/dist/modes/companion/components/status-bar.js.map +1 -0
  118. package/dist/modes/companion/context-buffer.d.ts +65 -0
  119. package/dist/modes/companion/context-buffer.d.ts.map +1 -0
  120. package/dist/modes/companion/context-buffer.js +156 -0
  121. package/dist/modes/companion/context-buffer.js.map +1 -0
  122. package/dist/modes/companion/context-buffer.test.d.ts +2 -0
  123. package/dist/modes/companion/context-buffer.test.d.ts.map +1 -0
  124. package/dist/modes/companion/context-buffer.test.js +154 -0
  125. package/dist/modes/companion/context-buffer.test.js.map +1 -0
  126. package/dist/modes/companion/event-detector.d.ts +46 -0
  127. package/dist/modes/companion/event-detector.d.ts.map +1 -0
  128. package/dist/modes/companion/event-detector.js +169 -0
  129. package/dist/modes/companion/event-detector.js.map +1 -0
  130. package/dist/modes/companion/event-detector.test.d.ts +2 -0
  131. package/dist/modes/companion/event-detector.test.d.ts.map +1 -0
  132. package/dist/modes/companion/event-detector.test.js +121 -0
  133. package/dist/modes/companion/event-detector.test.js.map +1 -0
  134. package/dist/modes/companion/index.d.ts +33 -0
  135. package/dist/modes/companion/index.d.ts.map +1 -0
  136. package/dist/modes/companion/index.js +21 -0
  137. package/dist/modes/companion/index.js.map +1 -0
  138. package/dist/modes/companion/input-key-mapper.d.ts +3 -0
  139. package/dist/modes/companion/input-key-mapper.d.ts.map +1 -0
  140. package/dist/modes/companion/input-key-mapper.js +31 -0
  141. package/dist/modes/companion/input-key-mapper.js.map +1 -0
  142. package/dist/modes/companion/input-key-mapper.test.d.ts +2 -0
  143. package/dist/modes/companion/input-key-mapper.test.d.ts.map +1 -0
  144. package/dist/modes/companion/input-key-mapper.test.js +26 -0
  145. package/dist/modes/companion/input-key-mapper.test.js.map +1 -0
  146. package/dist/modes/companion/input-parser.d.ts +53 -0
  147. package/dist/modes/companion/input-parser.d.ts.map +1 -0
  148. package/dist/modes/companion/input-parser.js +114 -0
  149. package/dist/modes/companion/input-parser.js.map +1 -0
  150. package/dist/modes/companion/input-parser.test.d.ts +2 -0
  151. package/dist/modes/companion/input-parser.test.d.ts.map +1 -0
  152. package/dist/modes/companion/input-parser.test.js +123 -0
  153. package/dist/modes/companion/input-parser.test.js.map +1 -0
  154. package/dist/modes/companion/mode-manager.d.ts +41 -0
  155. package/dist/modes/companion/mode-manager.d.ts.map +1 -0
  156. package/dist/modes/companion/mode-manager.js +56 -0
  157. package/dist/modes/companion/mode-manager.js.map +1 -0
  158. package/dist/modes/companion/mode-manager.test.d.ts +2 -0
  159. package/dist/modes/companion/mode-manager.test.d.ts.map +1 -0
  160. package/dist/modes/companion/mode-manager.test.js +65 -0
  161. package/dist/modes/companion/mode-manager.test.js.map +1 -0
  162. package/dist/modes/companion/output-classifier.d.ts +15 -0
  163. package/dist/modes/companion/output-classifier.d.ts.map +1 -0
  164. package/dist/modes/companion/output-classifier.js +77 -0
  165. package/dist/modes/companion/output-classifier.js.map +1 -0
  166. package/dist/modes/companion/output-classifier.test.d.ts +2 -0
  167. package/dist/modes/companion/output-classifier.test.d.ts.map +1 -0
  168. package/dist/modes/companion/output-classifier.test.js +133 -0
  169. package/dist/modes/companion/output-classifier.test.js.map +1 -0
  170. package/dist/modes/companion/pty-wrapper.d.ts +46 -0
  171. package/dist/modes/companion/pty-wrapper.d.ts.map +1 -0
  172. package/dist/modes/companion/pty-wrapper.js +143 -0
  173. package/dist/modes/companion/pty-wrapper.js.map +1 -0
  174. package/dist/modes/companion/safety-classifier.d.ts +31 -0
  175. package/dist/modes/companion/safety-classifier.d.ts.map +1 -0
  176. package/dist/modes/companion/safety-classifier.js +140 -0
  177. package/dist/modes/companion/safety-classifier.js.map +1 -0
  178. package/dist/modes/companion/safety-classifier.test.d.ts +2 -0
  179. package/dist/modes/companion/safety-classifier.test.d.ts.map +1 -0
  180. package/dist/modes/companion/safety-classifier.test.js +151 -0
  181. package/dist/modes/companion/safety-classifier.test.js.map +1 -0
  182. package/dist/modes/companion/summarizer.d.ts +24 -0
  183. package/dist/modes/companion/summarizer.d.ts.map +1 -0
  184. package/dist/modes/companion/summarizer.js +132 -0
  185. package/dist/modes/companion/summarizer.js.map +1 -0
  186. package/dist/modes/companion/terminal-history.d.ts +27 -0
  187. package/dist/modes/companion/terminal-history.d.ts.map +1 -0
  188. package/dist/modes/companion/terminal-history.js +142 -0
  189. package/dist/modes/companion/terminal-history.js.map +1 -0
  190. package/dist/prompts/simple-mentor.md +8 -0
  191. package/dist/providers/openai-compatible/model.d.ts.map +1 -1
  192. package/dist/providers/openai-compatible/model.js +13 -2
  193. package/dist/providers/openai-compatible/model.js.map +1 -1
  194. package/dist/providers/openai-compatible/reasoning-content.test.js +2 -2
  195. package/dist/providers/openai-compatible/reasoning-content.test.js.map +1 -1
  196. package/dist/providers/openrouter/reasoning-content.test.js +2 -2
  197. package/dist/providers/openrouter/reasoning-content.test.js.map +1 -1
  198. package/dist/providers/openrouter.test.js +30 -21
  199. package/dist/providers/openrouter.test.js.map +1 -1
  200. package/dist/services/check_mock.d.ts +2 -0
  201. package/dist/services/check_mock.d.ts.map +1 -0
  202. package/dist/services/check_mock.js +22 -0
  203. package/dist/services/check_mock.js.map +1 -0
  204. package/dist/services/conversation-service.test.d.ts +2 -0
  205. package/dist/services/conversation-service.test.d.ts.map +1 -0
  206. package/dist/services/conversation-service.test.js +149 -183
  207. package/dist/services/conversation-service.test.js.map +1 -0
  208. package/dist/services/conversation-store.test.js +12 -11
  209. package/dist/services/conversation-store.test.js.map +1 -1
  210. package/dist/services/settings-service.d.ts +8 -2
  211. package/dist/services/settings-service.d.ts.map +1 -1
  212. package/dist/services/settings-service.js +24 -0
  213. package/dist/services/settings-service.js.map +1 -1
  214. package/dist/tools/ask-mentor.d.ts +1 -1
  215. package/dist/tools/ask-mentor.d.ts.map +1 -1
  216. package/dist/tools/ask-mentor.js +1 -0
  217. package/dist/tools/ask-mentor.js.map +1 -1
  218. package/dist/tools/find-files.d.ts +2 -2
  219. package/dist/tools/find-files.js +2 -2
  220. package/dist/tools/find-files.js.map +1 -1
  221. package/dist/tools/find-files.test.js +15 -0
  222. package/dist/tools/find-files.test.js.map +1 -1
  223. package/dist/tools/grep.d.ts +1 -1
  224. package/dist/tools/grep.js +1 -1
  225. package/dist/tools/grep.js.map +1 -1
  226. package/dist/tools/read-file.d.ts +2 -2
  227. package/dist/tools/read-file.d.ts.map +1 -1
  228. package/dist/tools/read-file.js +14 -11
  229. package/dist/tools/read-file.js.map +1 -1
  230. package/dist/tools/read-file.test.js +37 -19
  231. package/dist/tools/read-file.test.js.map +1 -1
  232. package/dist/tools/search-replace.d.ts +1 -1
  233. package/dist/tools/search-replace.d.ts.map +1 -1
  234. package/dist/tools/search-replace.js +129 -1
  235. package/dist/tools/search-replace.js.map +1 -1
  236. package/dist/tools/search-replace.test.js +18 -0
  237. package/dist/tools/search-replace.test.js.map +1 -1
  238. package/dist/tools/search.d.ts +4 -4
  239. package/dist/tools/search.d.ts.map +1 -1
  240. package/dist/tools/search.js +4 -0
  241. package/dist/tools/search.js.map +1 -1
  242. package/dist/tools/shell.d.ts +2 -2
  243. package/dist/tools/shell.js +2 -2
  244. package/dist/tools/shell.js.map +1 -1
  245. package/dist/tools/types.d.ts +2 -2
  246. package/dist/tools/types.d.ts.map +1 -1
  247. package/dist/utils/command-safety.d.ts.map +1 -1
  248. package/dist/utils/command-safety.devnull.test.d.ts +2 -0
  249. package/dist/utils/command-safety.devnull.test.d.ts.map +1 -0
  250. package/dist/utils/command-safety.devnull.test.js +13 -0
  251. package/dist/utils/command-safety.devnull.test.js.map +1 -0
  252. package/dist/utils/command-safety.js +10 -364
  253. package/dist/utils/command-safety.js.map +1 -1
  254. package/dist/utils/extract-command-messages.test.d.ts +2 -0
  255. package/dist/utils/extract-command-messages.test.d.ts.map +1 -0
  256. package/dist/utils/extract-command-messages.test.js +58 -51
  257. package/dist/utils/extract-command-messages.test.js.map +1 -0
  258. package/dist/utils/settings-command.d.ts.map +1 -1
  259. package/dist/utils/settings-command.js +18 -4
  260. package/dist/utils/settings-command.js.map +1 -1
  261. package/package.json +2 -2
  262. package/dist/app.model-command-feedback.test.d.ts +0 -2
  263. package/dist/app.model-command-feedback.test.d.ts.map +0 -1
  264. package/dist/app.model-command-feedback.test.js +0 -19
  265. package/dist/app.model-command-feedback.test.js.map +0 -1
  266. package/dist/components/MentorMode.test.d.ts +0 -2
  267. package/dist/components/MentorMode.test.d.ts.map +0 -1
  268. package/dist/components/MentorMode.test.js.map +0 -1
  269. package/dist/debug-schema.d.ts +0 -2
  270. package/dist/debug-schema.d.ts.map +0 -1
  271. package/dist/debug-schema.js +0 -22
  272. package/dist/debug-schema.js.map +0 -1
  273. package/dist/hooks/use-model-selection.test.d.ts +0 -2
  274. package/dist/hooks/use-model-selection.test.d.ts.map +0 -1
  275. package/dist/hooks/use-model-selection.test.js +0 -28
  276. package/dist/hooks/use-model-selection.test.js.map +0 -1
  277. package/dist/hooks/use-path-completion.test.d.ts +0 -2
  278. package/dist/hooks/use-path-completion.test.d.ts.map +0 -1
  279. package/dist/hooks/use-path-completion.test.js +0 -29
  280. package/dist/hooks/use-path-completion.test.js.map +0 -1
  281. package/dist/prompts/default.md.bak +0 -77
  282. package/dist/providers/openrouter.history.test.d.ts +0 -2
  283. package/dist/providers/openrouter.history.test.d.ts.map +0 -1
  284. package/dist/providers/openrouter.history.test.js +0 -533
  285. package/dist/providers/openrouter.history.test.js.map +0 -1
  286. package/dist/test-search-tool.d.ts +0 -2
  287. package/dist/test-search-tool.d.ts.map +0 -1
  288. package/dist/test-search-tool.js +0 -36
  289. package/dist/test-search-tool.js.map +0 -1
  290. package/dist/utils/extract-command-messages.repro.test.d.ts +0 -2
  291. package/dist/utils/extract-command-messages.repro.test.d.ts.map +0 -1
  292. package/dist/utils/extract-command-messages.repro.test.js +0 -31
  293. package/dist/utils/extract-command-messages.repro.test.js.map +0 -1
  294. /package/{README.md → readme.md} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-classifier.js","sourceRoot":"","sources":["../../../source/modes/companion/output-classifier.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAmB;IAClD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAE/C,gBAAgB;IAChB,IACI,iFAAiF,CAAC,IAAI,CAClF,GAAG,CACN,EACH,CAAC;QACC,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,iBAAiB;IACjB,IACI,yFAAyF,CAAC,IAAI,CAC1F,GAAG,CACN,EACH,CAAC;QACC,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,eAAe;IACf,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,eAAe;IACf,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,mBAAmB;IACnB,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAmB;IAC/C,6BAA6B;IAC7B,IAAI,KAAK,CAAC,WAAW,GAAG,EAAE,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,sCAAsC;IACtC,MAAM,cAAc,GAChB,gFAAgF,CAAC;IACrF,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,6BAA6B;IAC7B,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAAsB;IACzD,MAAM,OAAO,GAA+B;QACxC,YAAY,EAAE;;;;yCAImB;QAEjC,YAAY,EAAE;;;yBAGG;QAEjB,UAAU,EAAE;;;0BAGM;QAElB,UAAU,EAAE;;;yBAGK;QAEjB,YAAY,EAAE;;;6BAGO;QAErB,OAAO,EAAE;;;iCAGgB;KAC5B,CAAC;IAEF,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=output-classifier.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-classifier.test.d.ts","sourceRoot":"","sources":["../../../source/modes/companion/output-classifier.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,133 @@
1
+ import test from 'ava';
2
+ import { classifyOutputType, shouldSummarize, getSummarizationPrompt, } from './output-classifier.js';
3
+ // Helper to create a test entry
4
+ function createEntry(command, output = '', exitCode = 0) {
5
+ return {
6
+ command,
7
+ output,
8
+ exitCode,
9
+ timestamp: Date.now(),
10
+ outputLines: output.split('\n').length,
11
+ };
12
+ }
13
+ // classifyOutputType tests
14
+ test('classifies npm test as test_results', t => {
15
+ const entry = createEntry('npm test', 'PASS');
16
+ t.is(classifyOutputType(entry), 'test_results');
17
+ });
18
+ test('classifies yarn test as test_results', t => {
19
+ const entry = createEntry('yarn test', 'PASS');
20
+ t.is(classifyOutputType(entry), 'test_results');
21
+ });
22
+ test('classifies jest as test_results', t => {
23
+ const entry = createEntry('jest --coverage', 'PASS');
24
+ t.is(classifyOutputType(entry), 'test_results');
25
+ });
26
+ test('classifies vitest as test_results', t => {
27
+ const entry = createEntry('vitest run', 'PASS');
28
+ t.is(classifyOutputType(entry), 'test_results');
29
+ });
30
+ test('classifies ava as test_results', t => {
31
+ const entry = createEntry('ava', 'PASS');
32
+ t.is(classifyOutputType(entry), 'test_results');
33
+ });
34
+ test('classifies npm run build as build_output', t => {
35
+ const entry = createEntry('npm run build', 'Building...');
36
+ t.is(classifyOutputType(entry), 'build_output');
37
+ });
38
+ test('classifies tsc as build_output', t => {
39
+ const entry = createEntry('tsc', 'Compiling...');
40
+ t.is(classifyOutputType(entry), 'build_output');
41
+ });
42
+ test('classifies webpack as build_output', t => {
43
+ const entry = createEntry('webpack --mode production', 'Building...');
44
+ t.is(classifyOutputType(entry), 'build_output');
45
+ });
46
+ test('classifies git commands as git_output', t => {
47
+ const entry = createEntry('git status', 'On branch main');
48
+ t.is(classifyOutputType(entry), 'git_output');
49
+ });
50
+ test('classifies git diff as git_output', t => {
51
+ const entry = createEntry('git diff HEAD~1', '+new line');
52
+ t.is(classifyOutputType(entry), 'git_output');
53
+ });
54
+ test('classifies npm install as npm_output', t => {
55
+ const entry = createEntry('npm install lodash', 'installed');
56
+ t.is(classifyOutputType(entry), 'npm_output');
57
+ });
58
+ test('classifies yarn add as npm_output', t => {
59
+ const entry = createEntry('yarn add lodash', 'installed');
60
+ t.is(classifyOutputType(entry), 'npm_output');
61
+ });
62
+ test('classifies pnpm as npm_output', t => {
63
+ const entry = createEntry('pnpm install', 'installed');
64
+ t.is(classifyOutputType(entry), 'npm_output');
65
+ });
66
+ test('classifies failed command as error_output', t => {
67
+ const entry = createEntry('unknown', 'error', 1);
68
+ t.is(classifyOutputType(entry), 'error_output');
69
+ });
70
+ test('classifies unknown success as general', t => {
71
+ const entry = createEntry('echo hello', 'hello', 0);
72
+ t.is(classifyOutputType(entry), 'general');
73
+ });
74
+ test('classification is case insensitive', t => {
75
+ const entry = createEntry('NPM TEST', 'PASS');
76
+ t.is(classifyOutputType(entry), 'test_results');
77
+ });
78
+ // shouldSummarize tests
79
+ test('shouldSummarize returns false for small output', t => {
80
+ const entry = createEntry('cmd', 'small output', 0);
81
+ t.false(shouldSummarize(entry));
82
+ });
83
+ test('shouldSummarize returns false for simple commands', t => {
84
+ const entry = createEntry('cd /path', '\n'.repeat(100), 0);
85
+ entry.outputLines = 100;
86
+ t.false(shouldSummarize(entry));
87
+ });
88
+ test('shouldSummarize returns false for pwd', t => {
89
+ const entry = createEntry('pwd', '\n'.repeat(100), 0);
90
+ entry.outputLines = 100;
91
+ t.false(shouldSummarize(entry));
92
+ });
93
+ test('shouldSummarize returns false for echo', t => {
94
+ const entry = createEntry('echo hello', '\n'.repeat(100), 0);
95
+ entry.outputLines = 100;
96
+ t.false(shouldSummarize(entry));
97
+ });
98
+ test('shouldSummarize returns true for large output', t => {
99
+ const entry = createEntry('npm test', '\n'.repeat(100), 0);
100
+ entry.outputLines = 100;
101
+ t.true(shouldSummarize(entry));
102
+ });
103
+ test('shouldSummarize threshold is 50 lines', t => {
104
+ const entry49 = createEntry('npm test', '\n'.repeat(49), 0);
105
+ entry49.outputLines = 49;
106
+ const entry50 = createEntry('npm test', '\n'.repeat(50), 0);
107
+ entry50.outputLines = 50;
108
+ t.false(shouldSummarize(entry49));
109
+ t.true(shouldSummarize(entry50));
110
+ });
111
+ // getSummarizationPrompt tests
112
+ test('getSummarizationPrompt returns prompt for test_results', t => {
113
+ const prompt = getSummarizationPrompt('test_results');
114
+ t.true(prompt.includes('test results'));
115
+ });
116
+ test('getSummarizationPrompt returns prompt for build_output', t => {
117
+ const prompt = getSummarizationPrompt('build_output');
118
+ t.true(prompt.includes('build'));
119
+ });
120
+ test('getSummarizationPrompt returns prompt for git_output', t => {
121
+ const prompt = getSummarizationPrompt('git_output');
122
+ t.true(prompt.includes('git'));
123
+ });
124
+ test('getSummarizationPrompt returns prompt for error_output', t => {
125
+ const prompt = getSummarizationPrompt('error_output');
126
+ t.true(prompt.includes('error'));
127
+ });
128
+ test('getSummarizationPrompt returns prompt for general', t => {
129
+ const prompt = getSummarizationPrompt('general');
130
+ t.truthy(prompt);
131
+ t.true(prompt.includes('Summarize'));
132
+ });
133
+ //# sourceMappingURL=output-classifier.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-classifier.test.js","sourceRoot":"","sources":["../../../source/modes/companion/output-classifier.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { ILoggingService } from '../../services/service-interfaces.js';
3
+ export interface PTYWrapperOptions {
4
+ logger: ILoggingService;
5
+ shell?: string;
6
+ cwd?: string;
7
+ env?: NodeJS.ProcessEnv;
8
+ }
9
+ export interface PTYWrapperEvents {
10
+ output: (data: string) => void;
11
+ exit: (exitCode: number, signal?: number) => void;
12
+ error: (error: Error) => void;
13
+ }
14
+ /**
15
+ * PTY Wrapper for companion mode.
16
+ * Spawns user's shell in a PTY, intercepting I/O for context building.
17
+ */
18
+ export declare class PTYWrapper extends EventEmitter {
19
+ #private;
20
+ constructor(options: PTYWrapperOptions);
21
+ /**
22
+ * Start the PTY with the user's shell.
23
+ */
24
+ start(): void;
25
+ /**
26
+ * Write data to the PTY.
27
+ */
28
+ write(data: string): void;
29
+ /**
30
+ * Resize the PTY.
31
+ */
32
+ resize(cols: number, rows: number): void;
33
+ /**
34
+ * Stop the PTY.
35
+ */
36
+ stop(): void;
37
+ /**
38
+ * Check if PTY is running.
39
+ */
40
+ get isRunning(): boolean;
41
+ /**
42
+ * Get the PTY process ID.
43
+ */
44
+ get pid(): number | undefined;
45
+ }
46
+ //# sourceMappingURL=pty-wrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pty-wrapper.d.ts","sourceRoot":"","sources":["../../../source/modes/companion/pty-wrapper.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAC;AACpC,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,sCAAsC,CAAC;AAE1E,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAID;;;GAGG;AACH,qBAAa,UAAW,SAAQ,YAAY;;gBAS5B,OAAO,EAAE,iBAAiB;IAQtC;;OAEG;IACH,KAAK,IAAI,IAAI;IA4Db;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQzB;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAQxC;;OAEG;IACH,IAAI,IAAI,IAAI;IAUZ;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;OAEG;IACH,IAAI,GAAG,IAAI,MAAM,GAAG,SAAS,CAE5B;CA0BJ"}
@@ -0,0 +1,143 @@
1
+ import * as pty from 'node-pty';
2
+ import { EventEmitter } from 'events';
3
+ const MAX_RESTART_ATTEMPTS = 3;
4
+ /**
5
+ * PTY Wrapper for companion mode.
6
+ * Spawns user's shell in a PTY, intercepting I/O for context building.
7
+ */
8
+ export class PTYWrapper extends EventEmitter {
9
+ #pty = null;
10
+ #logger;
11
+ #shell;
12
+ #cwd;
13
+ #env;
14
+ #restartAttempts = 0;
15
+ #isStarted = false;
16
+ constructor(options) {
17
+ super();
18
+ this.#logger = options.logger;
19
+ this.#shell = options.shell || process.env.SHELL || '/bin/bash';
20
+ this.#cwd = options.cwd || process.cwd();
21
+ this.#env = options.env || process.env;
22
+ }
23
+ /**
24
+ * Start the PTY with the user's shell.
25
+ */
26
+ start() {
27
+ if (this.#isStarted) {
28
+ this.#logger.warn('PTY already started');
29
+ return;
30
+ }
31
+ try {
32
+ const cols = process.stdout.columns || 80;
33
+ const rows = process.stdout.rows || 24;
34
+ this.#pty = pty.spawn(this.#shell, [], {
35
+ name: 'xterm-256color',
36
+ cols,
37
+ rows,
38
+ cwd: this.#cwd,
39
+ // Filter out undefined env values for type safety
40
+ env: Object.fromEntries(Object.entries(this.#env)
41
+ .filter((entry) => entry[1] !== undefined)),
42
+ });
43
+ this.#isStarted = true;
44
+ this.#restartAttempts = 0;
45
+ this.#logger.info('PTY started', {
46
+ shell: this.#shell,
47
+ cwd: this.#cwd,
48
+ cols,
49
+ rows,
50
+ pid: this.#pty.pid,
51
+ });
52
+ // Handle output from PTY
53
+ this.#pty.onData((data) => {
54
+ this.emit('output', data);
55
+ });
56
+ // Handle PTY exit
57
+ this.#pty.onExit(({ exitCode, signal }) => {
58
+ this.#isStarted = false;
59
+ this.#logger.info('PTY exited', { exitCode, signal });
60
+ this.emit('exit', exitCode, signal);
61
+ // Attempt restart if unexpected exit
62
+ if (exitCode !== 0) {
63
+ this.#handleUnexpectedExit(exitCode, signal);
64
+ }
65
+ });
66
+ }
67
+ catch (error) {
68
+ const errorMessage = error instanceof Error ? error.message : String(error);
69
+ this.#logger.error('Failed to spawn PTY', {
70
+ error: errorMessage,
71
+ shell: this.#shell,
72
+ });
73
+ this.emit('error', new Error(`Could not start shell: ${this.#shell}`));
74
+ }
75
+ }
76
+ /**
77
+ * Write data to the PTY.
78
+ */
79
+ write(data) {
80
+ if (!this.#pty) {
81
+ this.#logger.warn('Cannot write to PTY: not started');
82
+ return;
83
+ }
84
+ this.#pty.write(data);
85
+ }
86
+ /**
87
+ * Resize the PTY.
88
+ */
89
+ resize(cols, rows) {
90
+ if (!this.#pty) {
91
+ return;
92
+ }
93
+ this.#pty.resize(cols, rows);
94
+ this.#logger.debug('PTY resized', { cols, rows });
95
+ }
96
+ /**
97
+ * Stop the PTY.
98
+ */
99
+ stop() {
100
+ if (!this.#pty) {
101
+ return;
102
+ }
103
+ this.#pty.kill();
104
+ this.#pty = null;
105
+ this.#isStarted = false;
106
+ this.#logger.info('PTY stopped');
107
+ }
108
+ /**
109
+ * Check if PTY is running.
110
+ */
111
+ get isRunning() {
112
+ return this.#isStarted && this.#pty !== null;
113
+ }
114
+ /**
115
+ * Get the PTY process ID.
116
+ */
117
+ get pid() {
118
+ return this.#pty?.pid;
119
+ }
120
+ /**
121
+ * Handle unexpected PTY exit with restart logic.
122
+ */
123
+ #handleUnexpectedExit(exitCode, signal) {
124
+ if (this.#restartAttempts >= MAX_RESTART_ATTEMPTS) {
125
+ this.#logger.error('PTY crashed repeatedly, giving up', {
126
+ attempts: this.#restartAttempts,
127
+ });
128
+ this.emit('error', new Error('Shell crashed repeatedly'));
129
+ return;
130
+ }
131
+ this.#restartAttempts++;
132
+ this.#logger.warn('PTY exited unexpectedly, attempting restart', {
133
+ exitCode,
134
+ signal,
135
+ attempt: this.#restartAttempts,
136
+ });
137
+ // Wait a bit before restarting
138
+ setTimeout(() => {
139
+ this.start();
140
+ }, 500);
141
+ }
142
+ }
143
+ //# sourceMappingURL=pty-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pty-wrapper.js","sourceRoot":"","sources":["../../../source/modes/companion/pty-wrapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Safety classifier for companion mode Auto commands.
3
+ *
4
+ * Classifies commands into safety levels:
5
+ * - GREEN: Safe, auto-approve
6
+ * - YELLOW: Potentially risky, show for confirmation
7
+ * - RED: Dangerous, block or require explicit approval
8
+ */
9
+ export type SafetyLevel = 'green' | 'yellow' | 'red';
10
+ export interface SafetyClassification {
11
+ level: SafetyLevel;
12
+ reason: string;
13
+ command: string;
14
+ }
15
+ /**
16
+ * Classify a command's safety level.
17
+ */
18
+ export declare function classifyCommandSafety(command: string): SafetyClassification;
19
+ /**
20
+ * Check if a command should be auto-approved.
21
+ */
22
+ export declare function shouldAutoApprove(classification: SafetyClassification): boolean;
23
+ /**
24
+ * Check if a command should be blocked.
25
+ */
26
+ export declare function shouldBlock(classification: SafetyClassification): boolean;
27
+ /**
28
+ * Get user-friendly description of safety level.
29
+ */
30
+ export declare function getSafetyDescription(level: SafetyLevel): string;
31
+ //# sourceMappingURL=safety-classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safety-classifier.d.ts","sourceRoot":"","sources":["../../../source/modes/companion/safety-classifier.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACjC,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACnB;AAoFD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,CA2B3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,oBAAoB,GAAG,OAAO,CAE/E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,cAAc,EAAE,oBAAoB,GAAG,OAAO,CAEzE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAS/D"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Safety classifier for companion mode Auto commands.
3
+ *
4
+ * Classifies commands into safety levels:
5
+ * - GREEN: Safe, auto-approve
6
+ * - YELLOW: Potentially risky, show for confirmation
7
+ * - RED: Dangerous, block or require explicit approval
8
+ */
9
+ // Patterns for dangerous operations (RED)
10
+ const DANGEROUS_PATTERNS = [
11
+ { pattern: /\brm\s+(-rf?|--recursive)?\s*\/\s*$/i, reason: 'Recursive delete of root' },
12
+ { pattern: /\brm\s+(-rf?|--recursive)?\s*~\s*$/i, reason: 'Recursive delete of home' },
13
+ { pattern: /\brm\s+(-rf?|--recursive)?\s*\.\s*$/i, reason: 'Recursive delete of current directory' },
14
+ { pattern: /\bsudo\s+rm\b/i, reason: 'Sudo delete operation' },
15
+ { pattern: /\bsudo\s+dd\b/i, reason: 'Sudo disk write operation' },
16
+ { pattern: /\bmkfs\b/i, reason: 'Filesystem creation' },
17
+ { pattern: /\bformat\s+[a-z]:/i, reason: 'Drive format' },
18
+ { pattern: /\bshutdown\b/i, reason: 'System shutdown' },
19
+ { pattern: /\breboot\b/i, reason: 'System reboot' },
20
+ { pattern: /\bsystemctl\s+(stop|disable|mask)\b/i, reason: 'System service modification' },
21
+ { pattern: /\bchmod\s+777\b/i, reason: 'Overly permissive chmod' },
22
+ { pattern: /\bchown\s+-R\s+root\b/i, reason: 'Recursive chown to root' },
23
+ { pattern: />\s*\/dev\/(sd[a-z]|nvme|hd[a-z])/i, reason: 'Direct disk write' },
24
+ { pattern: /\bcurl\b.*\|\s*(bash|sh)\b/i, reason: 'Pipe remote script to shell' },
25
+ { pattern: /\bwget\b.*\|\s*(bash|sh)\b/i, reason: 'Pipe remote script to shell' },
26
+ { pattern: /\beval\s+.*\$\(/i, reason: 'Eval with command substitution' },
27
+ { pattern: /\bkill\s+-9\s+1\b/i, reason: 'Kill init process' },
28
+ { pattern: /\b:()\s*{\s*:\s*\|\s*:\s*&\s*}\s*;\s*:/i, reason: 'Fork bomb' },
29
+ ];
30
+ // Patterns for risky operations (YELLOW)
31
+ const RISKY_PATTERNS = [
32
+ { pattern: /\brm\s+(-r|-f|-rf)/i, reason: 'Recursive or forced delete' },
33
+ { pattern: /\bsudo\b/i, reason: 'Sudo command' },
34
+ { pattern: /\bgit\s+(push|force-push|reset\s+--hard)/i, reason: 'Git destructive operation' },
35
+ { pattern: /\bgit\s+checkout\s+--\s*\./i, reason: 'Git discard all changes' },
36
+ { pattern: /\bnpm\s+(publish|unpublish)/i, reason: 'npm publish operation' },
37
+ { pattern: /\bdocker\s+(rm|rmi|stop|kill)/i, reason: 'Docker destructive operation' },
38
+ { pattern: /\bchmod\s+[0-7]{3}/i, reason: 'Permission change' },
39
+ { pattern: /\bchown\b/i, reason: 'Ownership change' },
40
+ { pattern: />\s*[^|&]/i, reason: 'File overwrite redirection' },
41
+ { pattern: /\bmv\b.*\//i, reason: 'File move operation' },
42
+ { pattern: /\bcp\s+-r/i, reason: 'Recursive copy' },
43
+ { pattern: /\btar\s+.*-x/i, reason: 'Archive extraction' },
44
+ { pattern: /\bunzip\b/i, reason: 'Archive extraction' },
45
+ { pattern: /\bpip\s+install\b(?!.*--user)/i, reason: 'System-wide pip install' },
46
+ { pattern: /\bnpm\s+install\s+-g/i, reason: 'Global npm install' },
47
+ { pattern: /\bapt\s+(install|remove|purge)/i, reason: 'System package operation' },
48
+ { pattern: /\bbrew\s+(install|uninstall|remove)/i, reason: 'Homebrew package operation' },
49
+ ];
50
+ // Patterns for safe operations (GREEN)
51
+ const SAFE_PATTERNS = [
52
+ { pattern: /^\s*(ls|ll|la|dir)\b/i, reason: 'List files' },
53
+ { pattern: /^\s*cd\b/i, reason: 'Change directory' },
54
+ { pattern: /^\s*pwd\b/i, reason: 'Print working directory' },
55
+ { pattern: /^\s*echo\b/i, reason: 'Echo output' },
56
+ { pattern: /^\s*cat\b/i, reason: 'View file' },
57
+ { pattern: /^\s*head\b/i, reason: 'View file head' },
58
+ { pattern: /^\s*tail\b/i, reason: 'View file tail' },
59
+ { pattern: /^\s*less\b/i, reason: 'View file with pager' },
60
+ { pattern: /^\s*more\b/i, reason: 'View file with pager' },
61
+ { pattern: /^\s*grep\b/i, reason: 'Search text' },
62
+ { pattern: /^\s*find\b/i, reason: 'Find files' },
63
+ { pattern: /^\s*which\b/i, reason: 'Locate command' },
64
+ { pattern: /^\s*whereis\b/i, reason: 'Locate command' },
65
+ { pattern: /^\s*type\b/i, reason: 'Describe command' },
66
+ { pattern: /^\s*whoami\b/i, reason: 'Show current user' },
67
+ { pattern: /^\s*hostname\b/i, reason: 'Show hostname' },
68
+ { pattern: /^\s*date\b/i, reason: 'Show date' },
69
+ { pattern: /^\s*uptime\b/i, reason: 'Show uptime' },
70
+ { pattern: /^\s*df\b/i, reason: 'Show disk usage' },
71
+ { pattern: /^\s*du\b/i, reason: 'Show directory usage' },
72
+ { pattern: /^\s*free\b/i, reason: 'Show memory usage' },
73
+ { pattern: /^\s*top\b/i, reason: 'Show processes' },
74
+ { pattern: /^\s*ps\b/i, reason: 'Show processes' },
75
+ { pattern: /^\s*git\s+(status|log|diff|branch|show|stash\s+list)\b/i, reason: 'Git read-only' },
76
+ { pattern: /^\s*npm\s+(ls|list|outdated|audit|view|info)\b/i, reason: 'npm read-only' },
77
+ { pattern: /^\s*node\s+--version/i, reason: 'Version check' },
78
+ { pattern: /^\s*npm\s+--version/i, reason: 'Version check' },
79
+ { pattern: /^\s*python\s+--version/i, reason: 'Version check' },
80
+ { pattern: /^\s*npm\s+test\b/i, reason: 'Run tests' },
81
+ { pattern: /^\s*npm\s+run\s+(test|lint|check|build)\b/i, reason: 'Run npm script' },
82
+ { pattern: /^\s*npm\s+install\b(?!.*-g)/i, reason: 'Local npm install' },
83
+ { pattern: /^\s*yarn\s+(install|add)\b(?!.*--global)/i, reason: 'Local yarn install' },
84
+ { pattern: /^\s*pnpm\s+(install|add)\b(?!.*--global)/i, reason: 'Local pnpm install' },
85
+ { pattern: /^\s*pip\s+install\s+--user\b/i, reason: 'User pip install' },
86
+ { pattern: /^\s*pip\s+list\b/i, reason: 'pip read-only' },
87
+ ];
88
+ /**
89
+ * Classify a command's safety level.
90
+ */
91
+ export function classifyCommandSafety(command) {
92
+ const trimmed = command.trim();
93
+ // Check for dangerous patterns first (RED) - always takes precedence
94
+ for (const { pattern, reason } of DANGEROUS_PATTERNS) {
95
+ if (pattern.test(trimmed)) {
96
+ return { level: 'red', reason, command: trimmed };
97
+ }
98
+ }
99
+ // Check for risky patterns (YELLOW) - before safe patterns
100
+ // This ensures operations like redirects are caught even with safe base commands
101
+ for (const { pattern, reason } of RISKY_PATTERNS) {
102
+ if (pattern.test(trimmed)) {
103
+ return { level: 'yellow', reason, command: trimmed };
104
+ }
105
+ }
106
+ // Check for safe patterns (GREEN)
107
+ for (const { pattern, reason } of SAFE_PATTERNS) {
108
+ if (pattern.test(trimmed)) {
109
+ return { level: 'green', reason, command: trimmed };
110
+ }
111
+ }
112
+ // Default to YELLOW for unknown commands
113
+ return { level: 'yellow', reason: 'Unknown command', command: trimmed };
114
+ }
115
+ /**
116
+ * Check if a command should be auto-approved.
117
+ */
118
+ export function shouldAutoApprove(classification) {
119
+ return classification.level === 'green';
120
+ }
121
+ /**
122
+ * Check if a command should be blocked.
123
+ */
124
+ export function shouldBlock(classification) {
125
+ return classification.level === 'red';
126
+ }
127
+ /**
128
+ * Get user-friendly description of safety level.
129
+ */
130
+ export function getSafetyDescription(level) {
131
+ switch (level) {
132
+ case 'green':
133
+ return 'Safe - will auto-execute';
134
+ case 'yellow':
135
+ return 'Needs confirmation';
136
+ case 'red':
137
+ return 'Blocked - potentially dangerous';
138
+ }
139
+ }
140
+ //# sourceMappingURL=safety-classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safety-classifier.js","sourceRoot":"","sources":["../../../source/modes/companion/safety-classifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=safety-classifier.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safety-classifier.test.d.ts","sourceRoot":"","sources":["../../../source/modes/companion/safety-classifier.test.ts"],"names":[],"mappings":""}