@qduc/term2 0.5.0 → 0.6.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 (488) hide show
  1. package/dist/agent.d.ts +1 -1
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +55 -7
  4. package/dist/agent.js.map +1 -1
  5. package/dist/agent.test.js +135 -10
  6. package/dist/agent.test.js.map +1 -1
  7. package/dist/app.d.ts +15 -0
  8. package/dist/app.d.ts.map +1 -1
  9. package/dist/app.js +86 -16
  10. package/dist/app.js.map +1 -1
  11. package/dist/app.startup-banner.test.js +48 -1
  12. package/dist/app.startup-banner.test.js.map +1 -1
  13. package/dist/cli.js +226 -28
  14. package/dist/cli.js.map +1 -1
  15. package/dist/components/ApprovalPrompt.d.ts.map +1 -1
  16. package/dist/components/ApprovalPrompt.js +11 -35
  17. package/dist/components/ApprovalPrompt.js.map +1 -1
  18. package/dist/components/Banner.d.ts.map +1 -1
  19. package/dist/components/Banner.js +2 -7
  20. package/dist/components/Banner.js.map +1 -1
  21. package/dist/components/BottomArea.d.ts +7 -1
  22. package/dist/components/BottomArea.d.ts.map +1 -1
  23. package/dist/components/BottomArea.js +2 -2
  24. package/dist/components/BottomArea.js.map +1 -1
  25. package/dist/components/CommandMessage.d.ts.map +1 -1
  26. package/dist/components/CommandMessage.js +38 -42
  27. package/dist/components/CommandMessage.js.map +1 -1
  28. package/dist/components/CommandMessage.test.js +69 -0
  29. package/dist/components/CommandMessage.test.js.map +1 -1
  30. package/dist/components/DiffView.d.ts +7 -0
  31. package/dist/components/DiffView.d.ts.map +1 -0
  32. package/dist/components/DiffView.js +80 -0
  33. package/dist/components/DiffView.js.map +1 -0
  34. package/dist/components/DiffView.test.d.ts +2 -0
  35. package/dist/components/DiffView.test.d.ts.map +1 -0
  36. package/dist/components/DiffView.test.js +45 -0
  37. package/dist/components/DiffView.test.js.map +1 -0
  38. package/dist/components/Input/PopupManager.d.ts +7 -0
  39. package/dist/components/Input/PopupManager.d.ts.map +1 -1
  40. package/dist/components/Input/PopupManager.js +4 -2
  41. package/dist/components/Input/PopupManager.js.map +1 -1
  42. package/dist/components/Input/determine-active-menu.d.ts.map +1 -1
  43. package/dist/components/Input/determine-active-menu.js +4 -1
  44. package/dist/components/Input/determine-active-menu.js.map +1 -1
  45. package/dist/components/Input/popup-props.d.ts +3 -1
  46. package/dist/components/Input/popup-props.d.ts.map +1 -1
  47. package/dist/components/Input/popup-props.js +7 -1
  48. package/dist/components/Input/popup-props.js.map +1 -1
  49. package/dist/components/InputBox.d.ts +6 -0
  50. package/dist/components/InputBox.d.ts.map +1 -1
  51. package/dist/components/InputBox.js +74 -11
  52. package/dist/components/InputBox.js.map +1 -1
  53. package/dist/components/InputBox.menu-logic.test.js +16 -1
  54. package/dist/components/InputBox.menu-logic.test.js.map +1 -1
  55. package/dist/components/InputBox.test.js +1 -0
  56. package/dist/components/InputBox.test.js.map +1 -1
  57. package/dist/components/MarkdownRenderer.d.ts.map +1 -1
  58. package/dist/components/MarkdownRenderer.js +52 -1
  59. package/dist/components/MarkdownRenderer.js.map +1 -1
  60. package/dist/components/MessageList.d.ts.map +1 -1
  61. package/dist/components/MessageList.js +3 -2
  62. package/dist/components/MessageList.js.map +1 -1
  63. package/dist/components/MessageList.test.js +16 -0
  64. package/dist/components/MessageList.test.js.map +1 -1
  65. package/dist/components/SettingsValueSelectionMenu.d.ts.map +1 -1
  66. package/dist/components/SettingsValueSelectionMenu.js +4 -1
  67. package/dist/components/SettingsValueSelectionMenu.js.map +1 -1
  68. package/dist/components/StatusBar.d.ts.map +1 -1
  69. package/dist/components/StatusBar.js +5 -3
  70. package/dist/components/StatusBar.js.map +1 -1
  71. package/dist/components/StatusBar.test.js +24 -0
  72. package/dist/components/StatusBar.test.js.map +1 -1
  73. package/dist/components/SubagentActivityMessage.d.ts.map +1 -1
  74. package/dist/components/SubagentActivityMessage.js +16 -1
  75. package/dist/components/SubagentActivityMessage.js.map +1 -1
  76. package/dist/components/UndoSelectionMenu.d.ts +12 -0
  77. package/dist/components/UndoSelectionMenu.d.ts.map +1 -0
  78. package/dist/components/UndoSelectionMenu.js +46 -0
  79. package/dist/components/UndoSelectionMenu.js.map +1 -0
  80. package/dist/components/UndoSelectionMenu.test.d.ts +2 -0
  81. package/dist/components/UndoSelectionMenu.test.d.ts.map +1 -0
  82. package/dist/components/UndoSelectionMenu.test.js +40 -0
  83. package/dist/components/UndoSelectionMenu.test.js.map +1 -0
  84. package/dist/components/theme.d.ts +1 -1
  85. package/dist/components/theme.d.ts.map +1 -1
  86. package/dist/components/theme.js +1 -3
  87. package/dist/components/theme.js.map +1 -1
  88. package/dist/context/InputContext.d.ts +1 -1
  89. package/dist/context/InputContext.d.ts.map +1 -1
  90. package/dist/context/InputContext.js.map +1 -1
  91. package/dist/hooks/use-app-commands.d.ts +14 -2
  92. package/dist/hooks/use-app-commands.d.ts.map +1 -1
  93. package/dist/hooks/use-app-commands.js +115 -32
  94. package/dist/hooks/use-app-commands.js.map +1 -1
  95. package/dist/hooks/use-app-commands.test.js +231 -1
  96. package/dist/hooks/use-app-commands.test.js.map +1 -1
  97. package/dist/hooks/use-conversation.clear.test.d.ts +2 -0
  98. package/dist/hooks/use-conversation.clear.test.d.ts.map +1 -0
  99. package/dist/hooks/use-conversation.clear.test.js +49 -0
  100. package/dist/hooks/use-conversation.clear.test.js.map +1 -0
  101. package/dist/hooks/use-conversation.d.ts +12 -2
  102. package/dist/hooks/use-conversation.d.ts.map +1 -1
  103. package/dist/hooks/use-conversation.js +88 -5
  104. package/dist/hooks/use-conversation.js.map +1 -1
  105. package/dist/hooks/use-conversation.max-turns-undo.test.d.ts +2 -0
  106. package/dist/hooks/use-conversation.max-turns-undo.test.d.ts.map +1 -0
  107. package/dist/hooks/use-conversation.max-turns-undo.test.js +118 -0
  108. package/dist/hooks/use-conversation.max-turns-undo.test.js.map +1 -0
  109. package/dist/hooks/use-conversation.resume.test.d.ts +2 -0
  110. package/dist/hooks/use-conversation.resume.test.d.ts.map +1 -0
  111. package/dist/hooks/use-conversation.resume.test.js +26 -0
  112. package/dist/hooks/use-conversation.resume.test.js.map +1 -0
  113. package/dist/hooks/use-escape-key.d.ts.map +1 -1
  114. package/dist/hooks/use-escape-key.js +14 -7
  115. package/dist/hooks/use-escape-key.js.map +1 -1
  116. package/dist/hooks/use-escape-key.test.js +168 -4
  117. package/dist/hooks/use-escape-key.test.js.map +1 -1
  118. package/dist/hooks/use-input-history.d.ts +4 -3
  119. package/dist/hooks/use-input-history.d.ts.map +1 -1
  120. package/dist/hooks/use-input-history.js +10 -8
  121. package/dist/hooks/use-input-history.js.map +1 -1
  122. package/dist/hooks/use-input-history.test.d.ts +2 -0
  123. package/dist/hooks/use-input-history.test.d.ts.map +1 -0
  124. package/dist/hooks/use-input-history.test.js +43 -0
  125. package/dist/hooks/use-input-history.test.js.map +1 -0
  126. package/dist/hooks/use-mode-handlers.d.ts +10 -2
  127. package/dist/hooks/use-mode-handlers.d.ts.map +1 -1
  128. package/dist/hooks/use-mode-handlers.js +21 -2
  129. package/dist/hooks/use-mode-handlers.js.map +1 -1
  130. package/dist/hooks/use-model-selection.d.ts +3 -0
  131. package/dist/hooks/use-model-selection.d.ts.map +1 -1
  132. package/dist/hooks/use-model-selection.js +3 -0
  133. package/dist/hooks/use-model-selection.js.map +1 -1
  134. package/dist/hooks/use-runtime-settings.d.ts.map +1 -1
  135. package/dist/hooks/use-runtime-settings.js +15 -6
  136. package/dist/hooks/use-runtime-settings.js.map +1 -1
  137. package/dist/hooks/use-settings-completion.d.ts.map +1 -1
  138. package/dist/hooks/use-settings-completion.js +0 -1
  139. package/dist/hooks/use-settings-completion.js.map +1 -1
  140. package/dist/hooks/use-settings-value-completion.d.ts +1 -0
  141. package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
  142. package/dist/hooks/use-settings-value-completion.js +25 -19
  143. package/dist/hooks/use-settings-value-completion.js.map +1 -1
  144. package/dist/hooks/use-shell-mode.d.ts.map +1 -1
  145. package/dist/hooks/use-shell-mode.js +2 -1
  146. package/dist/hooks/use-shell-mode.js.map +1 -1
  147. package/dist/hooks/use-slash-commands.d.ts +1 -0
  148. package/dist/hooks/use-slash-commands.d.ts.map +1 -1
  149. package/dist/hooks/use-slash-commands.js +10 -1
  150. package/dist/hooks/use-slash-commands.js.map +1 -1
  151. package/dist/hooks/use-undo-selection.d.ts +19 -0
  152. package/dist/hooks/use-undo-selection.d.ts.map +1 -0
  153. package/dist/hooks/use-undo-selection.js +76 -0
  154. package/dist/hooks/use-undo-selection.js.map +1 -0
  155. package/dist/lib/openai-agent-client.chat.test.js +40 -0
  156. package/dist/lib/openai-agent-client.chat.test.js.map +1 -1
  157. package/dist/lib/openai-agent-client.d.ts +10 -1
  158. package/dist/lib/openai-agent-client.d.ts.map +1 -1
  159. package/dist/lib/openai-agent-client.js +114 -6
  160. package/dist/lib/openai-agent-client.js.map +1 -1
  161. package/dist/lib/openai-agent-client.test.js +23 -0
  162. package/dist/lib/openai-agent-client.test.js.map +1 -1
  163. package/dist/lib/retry-executor.js +45 -7
  164. package/dist/lib/retry-executor.js.map +1 -1
  165. package/dist/lib/retry-executor.test.js +63 -0
  166. package/dist/lib/retry-executor.test.js.map +1 -1
  167. package/dist/non-interactive.d.ts +7 -1
  168. package/dist/non-interactive.d.ts.map +1 -1
  169. package/dist/non-interactive.js +73 -5
  170. package/dist/non-interactive.js.map +1 -1
  171. package/dist/non-interactive.test.js +184 -2
  172. package/dist/non-interactive.test.js.map +1 -1
  173. package/dist/prompts/orchestrator.md +46 -0
  174. package/dist/prompts/plan-mode-info.md +17 -0
  175. package/dist/prompts/prompt-selector.d.ts +2 -1
  176. package/dist/prompts/prompt-selector.d.ts.map +1 -1
  177. package/dist/prompts/prompt-selector.js +5 -1
  178. package/dist/prompts/prompt-selector.js.map +1 -1
  179. package/dist/prompts/prompt-selector.test.js +7 -0
  180. package/dist/prompts/prompt-selector.test.js.map +1 -1
  181. package/dist/prompts/prompt-selector.test.ts +18 -0
  182. package/dist/prompts/prompt-selector.ts +7 -1
  183. package/dist/prompts/reasoning-efficiency.d.ts +7 -0
  184. package/dist/prompts/reasoning-efficiency.d.ts.map +1 -0
  185. package/dist/prompts/reasoning-efficiency.js +19 -0
  186. package/dist/prompts/reasoning-efficiency.js.map +1 -0
  187. package/dist/prompts/reasoning-efficiency.ts +18 -0
  188. package/dist/prompts/search-via-shell.test.js +17 -17
  189. package/dist/prompts/search-via-shell.test.js.map +1 -1
  190. package/dist/prompts/search-via-shell.test.ts +17 -17
  191. package/dist/prompts/shell-auto-approval.d.ts +3 -0
  192. package/dist/prompts/shell-auto-approval.d.ts.map +1 -0
  193. package/dist/prompts/shell-auto-approval.js +23 -0
  194. package/dist/prompts/shell-auto-approval.js.map +1 -0
  195. package/dist/prompts/shell-auto-approval.ts +23 -0
  196. package/dist/prompts/subagent-delegation.d.ts +10 -0
  197. package/dist/prompts/subagent-delegation.d.ts.map +1 -0
  198. package/dist/prompts/subagent-delegation.js +33 -0
  199. package/dist/prompts/subagent-delegation.js.map +1 -0
  200. package/dist/prompts/subagent-delegation.test.d.ts +2 -0
  201. package/dist/prompts/subagent-delegation.test.d.ts.map +1 -0
  202. package/dist/prompts/subagent-delegation.test.js +17 -0
  203. package/dist/prompts/subagent-delegation.test.js.map +1 -0
  204. package/dist/prompts/subagent-delegation.test.ts +21 -0
  205. package/dist/prompts/subagent-delegation.ts +40 -0
  206. package/dist/prompts/subagents/explorer.md +1 -2
  207. package/dist/prompts/subagents/mentor.md +0 -1
  208. package/dist/prompts/subagents/researcher.md +0 -1
  209. package/dist/prompts/subagents/worker.md +3 -4
  210. package/dist/providers/ai-sdk-anthropic.provider.d.ts +1 -0
  211. package/dist/providers/ai-sdk-anthropic.provider.d.ts.map +1 -1
  212. package/dist/providers/ai-sdk-anthropic.provider.js +67 -1
  213. package/dist/providers/ai-sdk-anthropic.provider.js.map +1 -1
  214. package/dist/providers/ai-sdk-anthropic.provider.test.d.ts +2 -0
  215. package/dist/providers/ai-sdk-anthropic.provider.test.d.ts.map +1 -0
  216. package/dist/providers/ai-sdk-anthropic.provider.test.js +87 -0
  217. package/dist/providers/ai-sdk-anthropic.provider.test.js.map +1 -0
  218. package/dist/providers/ai-sdk-logging-fetch.d.ts +1 -1
  219. package/dist/providers/ai-sdk-logging-fetch.d.ts.map +1 -1
  220. package/dist/providers/ai-sdk-logging-fetch.js +67 -44
  221. package/dist/providers/ai-sdk-logging-fetch.js.map +1 -1
  222. package/dist/providers/ai-sdk-logging-fetch.test.js +59 -5
  223. package/dist/providers/ai-sdk-logging-fetch.test.js.map +1 -1
  224. package/dist/providers/common/openai-compatible-messages.d.ts.map +1 -1
  225. package/dist/providers/common/openai-compatible-messages.js +10 -4
  226. package/dist/providers/common/openai-compatible-messages.js.map +1 -1
  227. package/dist/providers/common/openai-compatible-messages.test.js +22 -0
  228. package/dist/providers/common/openai-compatible-messages.test.js.map +1 -1
  229. package/dist/providers/custom-provider-adapter.test.js +39 -1
  230. package/dist/providers/custom-provider-adapter.test.js.map +1 -1
  231. package/dist/providers/openai-compatible.provider.d.ts +11 -1
  232. package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
  233. package/dist/providers/openai-compatible.provider.js +122 -8
  234. package/dist/providers/openai-compatible.provider.js.map +1 -1
  235. package/dist/providers/openai-compatible.provider.test.js +61 -0
  236. package/dist/providers/openai-compatible.provider.test.js.map +1 -1
  237. package/dist/providers/openai.provider.js +21 -1
  238. package/dist/providers/openai.provider.js.map +1 -1
  239. package/dist/providers/openrouter.provider.d.ts +2 -0
  240. package/dist/providers/openrouter.provider.d.ts.map +1 -1
  241. package/dist/providers/openrouter.provider.js +20 -2
  242. package/dist/providers/openrouter.provider.js.map +1 -1
  243. package/dist/providers/openrouter.provider.request-preprocessing.test.d.ts +2 -0
  244. package/dist/providers/openrouter.provider.request-preprocessing.test.d.ts.map +1 -0
  245. package/dist/providers/openrouter.provider.request-preprocessing.test.js +48 -0
  246. package/dist/providers/openrouter.provider.request-preprocessing.test.js.map +1 -0
  247. package/dist/providers/registry.test.js +27 -2
  248. package/dist/providers/registry.test.js.map +1 -1
  249. package/dist/scripts/eval-auto-approval/dataset.d.ts +2 -2
  250. package/dist/services/agent-stream.d.ts +1 -0
  251. package/dist/services/agent-stream.d.ts.map +1 -1
  252. package/dist/services/approval-flow-coordinator.d.ts +2 -0
  253. package/dist/services/approval-flow-coordinator.d.ts.map +1 -1
  254. package/dist/services/approval-flow-coordinator.js +45 -18
  255. package/dist/services/approval-flow-coordinator.js.map +1 -1
  256. package/dist/services/approval-flow-coordinator.test.js +87 -0
  257. package/dist/services/approval-flow-coordinator.test.js.map +1 -1
  258. package/dist/services/approval-state.d.ts +4 -0
  259. package/dist/services/approval-state.d.ts.map +1 -1
  260. package/dist/services/approval-state.js +2 -0
  261. package/dist/services/approval-state.js.map +1 -1
  262. package/dist/services/approval-state.test.js +21 -0
  263. package/dist/services/approval-state.test.js.map +1 -1
  264. package/dist/services/conversation-clear-save.test.d.ts +2 -0
  265. package/dist/services/conversation-clear-save.test.d.ts.map +1 -0
  266. package/dist/services/conversation-clear-save.test.js +85 -0
  267. package/dist/services/conversation-clear-save.test.js.map +1 -0
  268. package/dist/services/conversation-history-repair.d.ts +25 -0
  269. package/dist/services/conversation-history-repair.d.ts.map +1 -0
  270. package/dist/services/conversation-history-repair.js +227 -0
  271. package/dist/services/conversation-history-repair.js.map +1 -0
  272. package/dist/services/conversation-history-repair.test.d.ts +2 -0
  273. package/dist/services/conversation-history-repair.test.d.ts.map +1 -0
  274. package/dist/services/conversation-history-repair.test.js +76 -0
  275. package/dist/services/conversation-history-repair.test.js.map +1 -0
  276. package/dist/services/conversation-persistence.d.ts +55 -0
  277. package/dist/services/conversation-persistence.d.ts.map +1 -0
  278. package/dist/services/conversation-persistence.js +216 -0
  279. package/dist/services/conversation-persistence.js.map +1 -0
  280. package/dist/services/conversation-persistence.test.d.ts +2 -0
  281. package/dist/services/conversation-persistence.test.d.ts.map +1 -0
  282. package/dist/services/conversation-persistence.test.js +713 -0
  283. package/dist/services/conversation-persistence.test.js.map +1 -0
  284. package/dist/services/conversation-result-builder.d.ts.map +1 -1
  285. package/dist/services/conversation-result-builder.js +13 -0
  286. package/dist/services/conversation-result-builder.js.map +1 -1
  287. package/dist/services/conversation-retry-policy.d.ts +7 -0
  288. package/dist/services/conversation-retry-policy.d.ts.map +1 -1
  289. package/dist/services/conversation-retry-policy.js +34 -0
  290. package/dist/services/conversation-retry-policy.js.map +1 -1
  291. package/dist/services/conversation-retry-policy.test.js +44 -2
  292. package/dist/services/conversation-retry-policy.test.js.map +1 -1
  293. package/dist/services/conversation-service.d.ts +25 -2
  294. package/dist/services/conversation-service.d.ts.map +1 -1
  295. package/dist/services/conversation-service.js +29 -3
  296. package/dist/services/conversation-service.js.map +1 -1
  297. package/dist/services/conversation-session.auto-approval.test.js +7 -10
  298. package/dist/services/conversation-session.auto-approval.test.js.map +1 -1
  299. package/dist/services/conversation-session.d.ts +28 -1
  300. package/dist/services/conversation-session.d.ts.map +1 -1
  301. package/dist/services/conversation-session.js +300 -95
  302. package/dist/services/conversation-session.js.map +1 -1
  303. package/dist/services/conversation-store.d.ts +42 -0
  304. package/dist/services/conversation-store.d.ts.map +1 -1
  305. package/dist/services/conversation-store.js +188 -6
  306. package/dist/services/conversation-store.js.map +1 -1
  307. package/dist/services/conversation-store.test.js +344 -1
  308. package/dist/services/conversation-store.test.js.map +1 -1
  309. package/dist/services/history-service.d.ts +6 -1
  310. package/dist/services/history-service.d.ts.map +1 -1
  311. package/dist/services/history-service.js +46 -6
  312. package/dist/services/history-service.js.map +1 -1
  313. package/dist/services/history-service.test.d.ts +2 -0
  314. package/dist/services/history-service.test.d.ts.map +1 -0
  315. package/dist/services/history-service.test.js +77 -0
  316. package/dist/services/history-service.test.js.map +1 -0
  317. package/dist/services/input-surge-guard.d.ts +37 -0
  318. package/dist/services/input-surge-guard.d.ts.map +1 -0
  319. package/dist/services/input-surge-guard.js +190 -0
  320. package/dist/services/input-surge-guard.js.map +1 -0
  321. package/dist/services/input-surge-guard.test.d.ts +2 -0
  322. package/dist/services/input-surge-guard.test.d.ts.map +1 -0
  323. package/dist/services/input-surge-guard.test.js +126 -0
  324. package/dist/services/input-surge-guard.test.js.map +1 -0
  325. package/dist/services/logging-contract.d.ts +1 -1
  326. package/dist/services/logging-service.d.ts +4 -0
  327. package/dist/services/logging-service.d.ts.map +1 -1
  328. package/dist/services/logging-service.js +91 -33
  329. package/dist/services/logging-service.js.map +1 -1
  330. package/dist/services/mode-notices.d.ts +11 -0
  331. package/dist/services/mode-notices.d.ts.map +1 -0
  332. package/dist/services/mode-notices.js +16 -0
  333. package/dist/services/mode-notices.js.map +1 -0
  334. package/dist/services/model-service.d.ts.map +1 -1
  335. package/dist/services/model-service.js +0 -1
  336. package/dist/services/model-service.js.map +1 -1
  337. package/dist/services/plan-mode-interceptor.d.ts +10 -0
  338. package/dist/services/plan-mode-interceptor.d.ts.map +1 -0
  339. package/dist/services/plan-mode-interceptor.js +38 -0
  340. package/dist/services/plan-mode-interceptor.js.map +1 -0
  341. package/dist/services/plan-mode-interceptor.test.d.ts +2 -0
  342. package/dist/services/plan-mode-interceptor.test.d.ts.map +1 -0
  343. package/dist/services/plan-mode-interceptor.test.js +55 -0
  344. package/dist/services/plan-mode-interceptor.test.js.map +1 -0
  345. package/dist/services/provider-traffic.d.ts +87 -0
  346. package/dist/services/provider-traffic.d.ts.map +1 -0
  347. package/dist/services/provider-traffic.js +545 -0
  348. package/dist/services/provider-traffic.js.map +1 -0
  349. package/dist/services/provider-traffic.test.d.ts +2 -0
  350. package/dist/services/provider-traffic.test.d.ts.map +1 -0
  351. package/dist/services/provider-traffic.test.js +383 -0
  352. package/dist/services/provider-traffic.test.js.map +1 -0
  353. package/dist/services/service-interfaces.d.ts +20 -1
  354. package/dist/services/service-interfaces.d.ts.map +1 -1
  355. package/dist/services/settings-persistence.js +1 -1
  356. package/dist/services/settings-schema.d.ts +107 -4
  357. package/dist/services/settings-schema.d.ts.map +1 -1
  358. package/dist/services/settings-schema.js +103 -5
  359. package/dist/services/settings-schema.js.map +1 -1
  360. package/dist/services/settings-schema.test.js +35 -1
  361. package/dist/services/settings-schema.test.js.map +1 -1
  362. package/dist/services/settings-service.d.ts +3 -1
  363. package/dist/services/settings-service.d.ts.map +1 -1
  364. package/dist/services/settings-service.js +40 -4
  365. package/dist/services/settings-service.js.map +1 -1
  366. package/dist/services/settings-sources.d.ts.map +1 -1
  367. package/dist/services/settings-sources.js +2 -1
  368. package/dist/services/settings-sources.js.map +1 -1
  369. package/dist/services/settings-sources.test.js +4 -0
  370. package/dist/services/settings-sources.test.js.map +1 -1
  371. package/dist/services/shell-auto-approval-evaluator.d.ts +3 -2
  372. package/dist/services/shell-auto-approval-evaluator.d.ts.map +1 -1
  373. package/dist/services/shell-auto-approval-evaluator.js +287 -101
  374. package/dist/services/shell-auto-approval-evaluator.js.map +1 -1
  375. package/dist/services/shell-auto-approval-evaluator.test.js +216 -18
  376. package/dist/services/shell-auto-approval-evaluator.test.js.map +1 -1
  377. package/dist/services/shell-auto-approval-resolver.test.js +1 -1
  378. package/dist/services/shell-auto-approval-resolver.test.js.map +1 -1
  379. package/dist/services/stream-event-processor.d.ts.map +1 -1
  380. package/dist/services/stream-event-processor.js +5 -0
  381. package/dist/services/stream-event-processor.js.map +1 -1
  382. package/dist/services/stream-event-processor.test.js +27 -0
  383. package/dist/services/stream-event-processor.test.js.map +1 -1
  384. package/dist/services/subagents/reasoning-inheritance.test.d.ts +2 -0
  385. package/dist/services/subagents/reasoning-inheritance.test.d.ts.map +1 -0
  386. package/dist/services/subagents/reasoning-inheritance.test.js +73 -0
  387. package/dist/services/subagents/reasoning-inheritance.test.js.map +1 -0
  388. package/dist/services/subagents/subagent-manager.d.ts +2 -0
  389. package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
  390. package/dist/services/subagents/subagent-manager.js +204 -33
  391. package/dist/services/subagents/subagent-manager.js.map +1 -1
  392. package/dist/services/subagents/subagent-manager.test.js +331 -42
  393. package/dist/services/subagents/subagent-manager.test.js.map +1 -1
  394. package/dist/services/subagents/types.d.ts +6 -0
  395. package/dist/services/subagents/types.d.ts.map +1 -1
  396. package/dist/services/terminal-result-collector.d.ts.map +1 -1
  397. package/dist/services/terminal-result-collector.js +1 -2
  398. package/dist/services/terminal-result-collector.js.map +1 -1
  399. package/dist/slash-commands.d.ts +1 -0
  400. package/dist/slash-commands.d.ts.map +1 -1
  401. package/dist/slash-commands.js +8 -1
  402. package/dist/slash-commands.js.map +1 -1
  403. package/dist/slash-commands.test.d.ts +2 -0
  404. package/dist/slash-commands.test.d.ts.map +1 -0
  405. package/dist/slash-commands.test.js +22 -0
  406. package/dist/slash-commands.test.js.map +1 -0
  407. package/dist/tools/apply-patch.d.ts.map +1 -1
  408. package/dist/tools/apply-patch.js +2 -6
  409. package/dist/tools/apply-patch.js.map +1 -1
  410. package/dist/tools/apply-patch.test.js +2 -13
  411. package/dist/tools/apply-patch.test.js.map +1 -1
  412. package/dist/tools/code-context.test.js +4 -3
  413. package/dist/tools/code-context.test.js.map +1 -1
  414. package/dist/tools/create-file.d.ts.map +1 -1
  415. package/dist/tools/create-file.js +2 -3
  416. package/dist/tools/create-file.js.map +1 -1
  417. package/dist/tools/create-file.test.js +3 -14
  418. package/dist/tools/create-file.test.js.map +1 -1
  419. package/dist/tools/edit-healing.d.ts +3 -3
  420. package/dist/tools/edit-healing.d.ts.map +1 -1
  421. package/dist/tools/edit-healing.js.map +1 -1
  422. package/dist/tools/edit-healing.test.js +0 -1
  423. package/dist/tools/edit-healing.test.js.map +1 -1
  424. package/dist/tools/find-files.test.js +3 -2
  425. package/dist/tools/find-files.test.js.map +1 -1
  426. package/dist/tools/grep.d.ts +1 -0
  427. package/dist/tools/grep.d.ts.map +1 -1
  428. package/dist/tools/grep.js +65 -4
  429. package/dist/tools/grep.js.map +1 -1
  430. package/dist/tools/grep.test.js +39 -0
  431. package/dist/tools/grep.test.js.map +1 -0
  432. package/dist/tools/read-file.d.ts +1 -0
  433. package/dist/tools/read-file.d.ts.map +1 -1
  434. package/dist/tools/read-file.js +7 -5
  435. package/dist/tools/read-file.js.map +1 -1
  436. package/dist/tools/read-file.test.js +3 -2
  437. package/dist/tools/read-file.test.js.map +1 -1
  438. package/dist/tools/run-subagent.d.ts +1 -1
  439. package/dist/tools/run-subagent.d.ts.map +1 -1
  440. package/dist/tools/run-subagent.js +27 -23
  441. package/dist/tools/run-subagent.js.map +1 -1
  442. package/dist/tools/run-subagent.test.js +55 -8
  443. package/dist/tools/run-subagent.test.js.map +1 -1
  444. package/dist/tools/search-replace.d.ts +13 -5
  445. package/dist/tools/search-replace.d.ts.map +1 -1
  446. package/dist/tools/search-replace.js +46 -115
  447. package/dist/tools/search-replace.js.map +1 -1
  448. package/dist/tools/search-replace.test.js +275 -240
  449. package/dist/tools/search-replace.test.js.map +1 -1
  450. package/dist/tools/shell.d.ts +1 -0
  451. package/dist/tools/shell.d.ts.map +1 -1
  452. package/dist/tools/shell.js +14 -6
  453. package/dist/tools/shell.js.map +1 -1
  454. package/dist/tools/shell.test.js +52 -0
  455. package/dist/tools/shell.test.js.map +1 -1
  456. package/dist/tools/tool-parameter-schema.test.js +13 -4
  457. package/dist/tools/tool-parameter-schema.test.js.map +1 -1
  458. package/dist/tools/types.d.ts +1 -1
  459. package/dist/tools/types.d.ts.map +1 -1
  460. package/dist/tools/web-fetch.d.ts.map +1 -1
  461. package/dist/tools/web-fetch.js +29 -4
  462. package/dist/tools/web-fetch.js.map +1 -1
  463. package/dist/tools/web-fetch.test.js +64 -0
  464. package/dist/tools/web-fetch.test.js.map +1 -1
  465. package/dist/utils/command-safety/path-analysis.d.ts.map +1 -1
  466. package/dist/utils/command-safety/path-analysis.js +143 -35
  467. package/dist/utils/command-safety/path-analysis.js.map +1 -1
  468. package/dist/utils/conversation-event-handler.d.ts.map +1 -1
  469. package/dist/utils/conversation-event-handler.js +23 -3
  470. package/dist/utils/conversation-event-handler.js.map +1 -1
  471. package/dist/utils/conversation-event-handler.test.js +94 -0
  472. package/dist/utils/conversation-event-handler.test.js.map +1 -1
  473. package/dist/utils/execute-shell.d.ts +2 -0
  474. package/dist/utils/execute-shell.d.ts.map +1 -1
  475. package/dist/utils/execute-shell.js +25 -1
  476. package/dist/utils/execute-shell.js.map +1 -1
  477. package/dist/utils/execute-shell.test.js +22 -0
  478. package/dist/utils/execute-shell.test.js.map +1 -1
  479. package/dist/utils/model-settings.d.ts.map +1 -1
  480. package/dist/utils/model-settings.js +18 -0
  481. package/dist/utils/model-settings.js.map +1 -1
  482. package/dist/utils/output-trim.d.ts.map +1 -1
  483. package/dist/utils/output-trim.js +14 -6
  484. package/dist/utils/output-trim.js.map +1 -1
  485. package/dist/utils/token-usage.test.js +31 -0
  486. package/dist/utils/token-usage.test.js.map +1 -1
  487. package/package.json +3 -3
  488. package/readme.md +271 -44
@@ -0,0 +1,383 @@
1
+ import test from 'ava';
2
+ import fs from 'node:fs';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { sanitizeSentTrafficBody, summarizeReceivedTraffic, ProviderTrafficArtifactStore, TRAFFIC_TEXT_LIMIT, } from './provider-traffic.js';
6
+ const makeTempDir = () => fs.mkdtempSync(path.join(os.tmpdir(), 'term2-provider-traffic-'));
7
+ const readRequestFile = (filePath) => fs
8
+ .readFileSync(filePath, 'utf8')
9
+ .split(/\n\n/)
10
+ .filter((block) => block.trim())
11
+ .map((block) => JSON.parse(block));
12
+ const expectedTruncation = (length) => `[omitted ${length - TRAFFIC_TEXT_LIMIT} chars]`;
13
+ test('sanitizeSentTrafficBody truncates instruction-like fields and preserves user/tool content', (t) => {
14
+ const longText = 'x'.repeat(1200);
15
+ const body = {
16
+ instructions: longText,
17
+ input: [
18
+ { role: 'user', content: 'keep user content' },
19
+ { role: 'assistant', content: 'keep prior turns' },
20
+ { role: 'tool', content: 'keep tool output' },
21
+ {
22
+ type: 'function_call',
23
+ name: 'write_file',
24
+ arguments: '{"path":"a.ts","content":"full arguments stay intact"}',
25
+ },
26
+ ],
27
+ tools: [
28
+ { type: 'function', function: { name: 'read_file', parameters: { type: 'object', properties: { path: {} } } } },
29
+ { type: 'web_search_preview', name: 'web_search' },
30
+ ],
31
+ };
32
+ const sanitized = sanitizeSentTrafficBody(body);
33
+ t.true(typeof sanitized.instructions === 'string');
34
+ t.true(sanitized.instructions.includes(expectedTruncation(longText.length)));
35
+ t.is(sanitized.instructions.length < longText.length, true);
36
+ t.deepEqual(sanitized.input, body.input);
37
+ t.deepEqual(sanitized.tools, ['read_file', 'web_search']);
38
+ });
39
+ test('sanitizeSentTrafficBody truncates system and developer messages in messages-style bodies only', (t) => {
40
+ const longText = 'y'.repeat(1105);
41
+ const body = {
42
+ messages: [
43
+ { role: 'system', content: longText },
44
+ { role: 'developer', content: longText },
45
+ { role: 'user', content: 'leave me alone' },
46
+ { role: 'tool', content: 'tool output stays' },
47
+ { role: 'assistant', tool_calls: [{ id: 'call_1', function: { name: 'x', arguments: '{"n":1}' } }] },
48
+ ],
49
+ tools: [{ type: 'function', function: { name: 'apply_patch', parameters: { type: 'object' } } }],
50
+ };
51
+ const sanitized = sanitizeSentTrafficBody(body);
52
+ const messages = sanitized.messages;
53
+ t.true(String(messages[0].content).includes(expectedTruncation(longText.length)));
54
+ t.true(String(messages[1].content).includes(expectedTruncation(longText.length)));
55
+ t.is(messages[2].content, 'leave me alone');
56
+ t.is(messages[3].content, 'tool output stays');
57
+ t.deepEqual(messages[4].tool_calls, body.messages[4].tool_calls);
58
+ t.deepEqual(sanitized.tools, ['apply_patch']);
59
+ });
60
+ test('sanitizeSentTrafficBody truncates system message with content array', (t) => {
61
+ const longText = 'z'.repeat(1200);
62
+ const body = {
63
+ messages: [
64
+ { role: 'system', content: [{ type: 'text', text: longText, cache_control: { type: 'ephemeral' } }] },
65
+ { role: 'user', content: 'hi' },
66
+ ],
67
+ };
68
+ const sanitized = sanitizeSentTrafficBody(body);
69
+ const messages = sanitized.messages;
70
+ const systemContent = messages[0].content;
71
+ t.is(systemContent[0].type, 'text');
72
+ t.true(String(systemContent[0].text).startsWith('z'.repeat(TRAFFIC_TEXT_LIMIT)));
73
+ t.true(String(systemContent[0].text).includes(expectedTruncation(longText.length)));
74
+ t.deepEqual(systemContent[0].cache_control, { type: 'ephemeral' });
75
+ t.is(messages[1].content, 'hi');
76
+ });
77
+ test('summarizeReceivedTraffic merges OpenAI Responses SSE text reasoning and tool arguments', async (t) => {
78
+ const sse = [
79
+ ': ping',
80
+ '',
81
+ 'event: response.output_text.delta',
82
+ 'data: {"type":"response.output_text.delta","delta":"Hello"}',
83
+ '',
84
+ 'event: response.reasoning_summary_text.delta',
85
+ 'data: {"type":"response.reasoning_summary_text.delta","delta":"Think"}',
86
+ '',
87
+ 'event: response.function_call_arguments.delta',
88
+ 'data: {"type":"response.function_call_arguments.delta","item_id":"fc_1","delta":"{\\"a\\":"}',
89
+ '',
90
+ 'event: response.function_call_arguments.delta',
91
+ 'data: {"type":"response.function_call_arguments.delta","item_id":"fc_1","delta":"1}"}',
92
+ '',
93
+ 'event: response.completed',
94
+ 'data: {"type":"response.completed","response":{"id":"resp_1","status":"completed","usage":{"input_tokens":10,"output_tokens":5}}}',
95
+ '',
96
+ 'data: [DONE]',
97
+ '',
98
+ ].join('\n');
99
+ const summary = await summarizeReceivedTraffic(new Response(sse, {
100
+ status: 200,
101
+ headers: { 'content-type': 'text/event-stream' },
102
+ }));
103
+ t.is(summary.transport, 'sse');
104
+ t.is(summary.status, 200);
105
+ t.is(summary.payload?.id, 'resp_1');
106
+ t.is(summary.payload?.choices?.[0]?.delta?.content, 'Hello');
107
+ t.is(summary.payload?.choices?.[0]?.delta?.reasoning, 'Think');
108
+ t.deepEqual(summary.payload?.usage, { input_tokens: 10, output_tokens: 5 });
109
+ t.deepEqual(summary.payload?.choices?.[0]?.delta?.tool_calls, [
110
+ {
111
+ id: 'fc_1',
112
+ type: 'function',
113
+ function: { arguments: '{"a":1}' },
114
+ },
115
+ ]);
116
+ t.deepEqual(summary.unknownFrames, []);
117
+ });
118
+ test('summarizeReceivedTraffic merges chat completions deltas and retains malformed and unknown frames', async (t) => {
119
+ const sse = [
120
+ 'data: {"choices":[{"delta":{"content":"Hi","reasoning":"R","tool_calls":[{"index":0,"id":"call_1","function":{"name":"shell","arguments":"{\\"c"}}]}}]}',
121
+ '',
122
+ 'data: {"choices":[{"delta":{"tool_calls":[{"index":0,"function":{"arguments":"md\\":\\"ls\\"}"}}],"finish_reason":"tool_calls"}],"id":"resp_chat"}',
123
+ '',
124
+ 'data: {"choices":[{"delta":{"mystery":"value"}}]}',
125
+ '',
126
+ 'data: {"error":{"message":"bad upstream"}}',
127
+ '',
128
+ 'data: {"bad_json"',
129
+ '',
130
+ 'data: [DONE]',
131
+ '',
132
+ ].join('\n');
133
+ const summary = await summarizeReceivedTraffic(new Response(sse, {
134
+ status: 200,
135
+ headers: { 'content-type': 'text/event-stream' },
136
+ }));
137
+ t.is(summary.payload?.choices?.[0]?.delta?.content, 'Hi');
138
+ t.is(summary.payload?.choices?.[0]?.delta?.reasoning, 'R');
139
+ t.is(summary.payload?.id, 'resp_chat');
140
+ t.is(summary.payload?.choices?.[0]?.finish_reason, 'tool_calls');
141
+ t.deepEqual(summary.payload?.choices?.[0]?.delta?.tool_calls, [
142
+ {
143
+ id: 'call_1',
144
+ type: 'function',
145
+ function: { name: 'shell', arguments: '{"cmd":"ls"}' },
146
+ },
147
+ ]);
148
+ t.is(summary.errorFrames.length, 1);
149
+ t.is(summary.malformedFrames.length, 1);
150
+ t.is(summary.unknownFrames.length, 1);
151
+ t.is(summary.unknownFrames[0]?.count, 1);
152
+ });
153
+ test('summarizeReceivedTraffic handles non-stream JSON and falls back safely for unknown JSON', async (t) => {
154
+ const jsonSummary = await summarizeReceivedTraffic(new Response(JSON.stringify({
155
+ id: 'resp_json',
156
+ output_text: 'Done',
157
+ usage: { input_tokens: 3, output_tokens: 2 },
158
+ }), {
159
+ status: 200,
160
+ headers: { 'content-type': 'application/json' },
161
+ }));
162
+ t.is(jsonSummary.transport, 'json');
163
+ t.is(jsonSummary.payload?.id, 'resp_json');
164
+ t.is(jsonSummary.payload?.output_text, 'Done');
165
+ t.deepEqual(jsonSummary.payload?.usage, { input_tokens: 3, output_tokens: 2 });
166
+ const fallbackSummary = await summarizeReceivedTraffic(new Response(JSON.stringify({ strange: { nested: true } }), {
167
+ status: 200,
168
+ headers: { 'content-type': 'application/json' },
169
+ }));
170
+ t.truthy(fallbackSummary.fallbackBody);
171
+ t.is(fallbackSummary.fallbackBody.strange.nested, true);
172
+ });
173
+ test('summarizeReceivedTraffic recognizes response.content_part.added as a lifecycle frame', async (t) => {
174
+ const sse = [
175
+ 'data: {"type":"response.content_part.added","content_index":0,"item_id":"msg_1","output_index":0,"part":{"type":"output_text","annotations":[],"text":""},"sequence_number":1}',
176
+ '',
177
+ 'data: {"type":"response.output_text.delta","delta":"Hello","sequence_number":2}',
178
+ '',
179
+ 'data: [DONE]',
180
+ '',
181
+ ].join('\n');
182
+ const summary = await summarizeReceivedTraffic(new Response(sse, {
183
+ status: 200,
184
+ headers: { 'content-type': 'text/event-stream' },
185
+ }));
186
+ t.deepEqual(summary.unknownFrames, []);
187
+ t.is(summary.payload?.choices?.[0]?.delta?.content, 'Hello');
188
+ });
189
+ test('summarizeReceivedTraffic recognizes Responses API lifecycle frames without adding to unknownFrames', async (t) => {
190
+ const sse = [
191
+ 'data: {"type":"response.created","response":{"id":"resp_abc","status":"in_progress","output":[]},"sequence_number":0}',
192
+ '',
193
+ 'data: {"type":"response.in_progress","response":{"id":"resp_abc","status":"in_progress","output":[]},"sequence_number":1}',
194
+ '',
195
+ 'data: {"type":"response.output_text.delta","delta":"Hello","sequence_number":2}',
196
+ '',
197
+ 'data: {"type":"response.completed","response":{"id":"resp_abc","status":"completed","usage":{"input_tokens":5,"output_tokens":3}},"sequence_number":3}',
198
+ '',
199
+ 'data: [DONE]',
200
+ '',
201
+ ].join('\n');
202
+ const summary = await summarizeReceivedTraffic(new Response(sse, {
203
+ status: 200,
204
+ headers: { 'content-type': 'text/event-stream' },
205
+ }));
206
+ t.is(summary.transport, 'sse');
207
+ t.is(summary.payload?.id, 'resp_abc');
208
+ t.is(summary.payload?.choices?.[0]?.delta?.content, 'Hello');
209
+ t.deepEqual(summary.unknownFrames, []);
210
+ });
211
+ test('summarizeReceivedTraffic registers tool name from response.output_item.added function_call frame', async (t) => {
212
+ const sse = [
213
+ 'data: {"type":"response.created","response":{"id":"resp_xyz","status":"in_progress","output":[]},"sequence_number":0}',
214
+ '',
215
+ 'data: {"type":"response.output_item.added","item":{"id":"fc_1","type":"function_call","status":"in_progress","arguments":"","call_id":"call_abc","name":"shell"},"output_index":0,"sequence_number":1}',
216
+ '',
217
+ 'data: {"type":"response.function_call_arguments.delta","item_id":"fc_1","delta":"{\\"cmd\\":\\"ls\\"}","sequence_number":2}',
218
+ '',
219
+ 'data: {"type":"response.completed","response":{"id":"resp_xyz","status":"completed","usage":{"input_tokens":5,"output_tokens":10}},"sequence_number":3}',
220
+ '',
221
+ 'data: [DONE]',
222
+ '',
223
+ ].join('\n');
224
+ const summary = await summarizeReceivedTraffic(new Response(sse, {
225
+ status: 200,
226
+ headers: { 'content-type': 'text/event-stream' },
227
+ }));
228
+ t.deepEqual(summary.unknownFrames, []);
229
+ const toolCalls = summary.payload?.choices?.[0]?.delta?.tool_calls;
230
+ t.is(toolCalls?.length, 1);
231
+ t.is(toolCalls?.[0]?.function?.name, 'shell');
232
+ t.is(toolCalls?.[0]?.function?.arguments, '{"cmd":"ls"}');
233
+ });
234
+ test('ProviderTrafficArtifactStore writes per-day per-session request files and daily index', (t) => {
235
+ const rootDir = makeTempDir();
236
+ const store = new ProviderTrafficArtifactStore({ rootDir });
237
+ store.recordRequestStart({
238
+ requestId: 'req-1',
239
+ timestamp: '2026-05-22T09:14:35.044Z',
240
+ provider: 'openrouter',
241
+ model: 'qwen/qwen3',
242
+ sessionId: 'session-123',
243
+ sessionStartedAt: '2026-05-22T09:14:31.125Z',
244
+ mode: 'standard',
245
+ firstUserMessagePreview: 'hello there',
246
+ sentBody: { messages: [{ role: 'user', content: 'hello there' }] },
247
+ });
248
+ const dayDir = path.join(rootDir, '2026-05-22');
249
+ const requestFile = path.join(dayDir, '09-14-35.044Z_sess-session-123_req-req-1.jsonl');
250
+ t.true(fs.existsSync(dayDir));
251
+ t.true(fs.existsSync(requestFile));
252
+ t.is(readRequestFile(requestFile)[0]?.direction, 'sent');
253
+ const indexPath = path.join(dayDir, 'index.jsonl');
254
+ const indexEntries = fs
255
+ .readFileSync(indexPath, 'utf8')
256
+ .trim()
257
+ .split('\n')
258
+ .map((line) => JSON.parse(line));
259
+ t.is(indexEntries.length, 1);
260
+ t.like(indexEntries[0], {
261
+ sessionId: 'session-123',
262
+ sessionDir: '2026-05-22T09-14-31.125Z_session-123',
263
+ firstRequestAt: '2026-05-22T09:14:35.044Z',
264
+ lastRequestAt: '2026-05-22T09:14:35.044Z',
265
+ requestCount: 1,
266
+ latestProvider: 'openrouter',
267
+ latestModel: 'qwen/qwen3',
268
+ latestMode: 'standard',
269
+ });
270
+ });
271
+ test('ProviderTrafficArtifactStore appends received line, upserts newest-first index, records failures, and allows later-day session folders', (t) => {
272
+ const rootDir = makeTempDir();
273
+ const legacyFile = path.join(rootDir, 'traffic-2026-05-22.log');
274
+ fs.writeFileSync(legacyFile, '{"legacy":true}\n', 'utf8');
275
+ const store = new ProviderTrafficArtifactStore({ rootDir });
276
+ store.recordRequestStart({
277
+ requestId: 'req-1',
278
+ timestamp: '2026-05-22T09:14:35.044Z',
279
+ provider: 'openai',
280
+ model: 'gpt-5',
281
+ sessionId: 'session-123',
282
+ sessionStartedAt: '2026-05-22T09:14:31.125Z',
283
+ mode: 'standard',
284
+ firstUserMessagePreview: 'first preview',
285
+ sentBody: { input: [{ role: 'user', content: 'first preview' }] },
286
+ });
287
+ store.recordRequestComplete({
288
+ requestId: 'req-1',
289
+ timestamp: '2026-05-22T09:14:36.000Z',
290
+ provider: 'openai',
291
+ model: 'gpt-5',
292
+ sessionId: 'session-123',
293
+ sessionStartedAt: '2026-05-22T09:14:31.125Z',
294
+ mode: 'standard',
295
+ receivedSummary: { status: 200, outputText: 'done' },
296
+ });
297
+ store.recordRequestStart({
298
+ requestId: 'req-2',
299
+ timestamp: '2026-05-22T10:00:00.000Z',
300
+ provider: 'openrouter',
301
+ model: 'deepseek/chat',
302
+ sessionId: 'session-999',
303
+ sessionStartedAt: '2026-05-22T10:00:00.000Z',
304
+ mode: 'mentor',
305
+ firstUserMessagePreview: 'second preview',
306
+ sentBody: { messages: [{ role: 'user', content: 'second preview' }] },
307
+ });
308
+ store.recordRequestComplete({
309
+ requestId: 'req-2',
310
+ timestamp: '2026-05-22T10:00:01.000Z',
311
+ provider: 'openrouter',
312
+ model: 'deepseek/chat',
313
+ sessionId: 'session-999',
314
+ sessionStartedAt: '2026-05-22T10:00:00.000Z',
315
+ mode: 'mentor',
316
+ error: { message: 'fetch failed' },
317
+ });
318
+ store.recordRequestStart({
319
+ requestId: 'req-3',
320
+ timestamp: '2026-05-23T00:00:01.000Z',
321
+ provider: 'openai',
322
+ model: 'gpt-5',
323
+ sessionId: 'session-123',
324
+ sessionStartedAt: '2026-05-23T00:00:00.000Z',
325
+ mode: 'standard',
326
+ firstUserMessagePreview: 'resumed later',
327
+ sentBody: { input: [{ role: 'user', content: 'resumed later' }] },
328
+ });
329
+ const requestFile = path.join(rootDir, '2026-05-22', '09-14-35.044Z_sess-session-123_req-req-1.jsonl');
330
+ const requestRecords = readRequestFile(requestFile);
331
+ t.is(requestRecords.length, 2);
332
+ t.is(requestRecords[1]?.direction, 'received');
333
+ t.is(requestRecords[1]?.summary?.outputText, 'done');
334
+ const failureFile = path.join(rootDir, '2026-05-22', '10-00-00.000Z_sess-session-999_req-req-2.jsonl');
335
+ t.is(readRequestFile(failureFile)[1]?.error?.message, 'fetch failed');
336
+ const indexEntries = fs
337
+ .readFileSync(path.join(rootDir, '2026-05-22', 'index.jsonl'), 'utf8')
338
+ .trim()
339
+ .split('\n')
340
+ .map((line) => JSON.parse(line));
341
+ t.is(indexEntries.length, 2);
342
+ t.is(indexEntries[0].sessionId, 'session-999');
343
+ t.is(indexEntries[1].sessionId, 'session-123');
344
+ t.deepEqual(indexEntries[0].providersSeen, ['openrouter']);
345
+ t.deepEqual(indexEntries[1].modelsSeen, ['gpt-5']);
346
+ t.true(fs.existsSync(path.join(rootDir, '2026-05-23', '00-00-01.000Z_sess-session-123_req-req-3.jsonl')));
347
+ t.is(fs.readFileSync(legacyFile, 'utf8'), '{"legacy":true}\n');
348
+ });
349
+ test('ProviderTrafficArtifactStore places evaluator requests under evaluator subfolder', (t) => {
350
+ const rootDir = makeTempDir();
351
+ const store = new ProviderTrafficArtifactStore({ rootDir });
352
+ store.recordRequestStart({
353
+ requestId: 'eval-req-1',
354
+ timestamp: '2026-05-22T09:14:35.044Z',
355
+ provider: 'openai',
356
+ model: 'gpt-4o-mini',
357
+ sessionId: 'session-123',
358
+ sessionStartedAt: '2026-05-22T09:14:31.125Z',
359
+ mode: 'standard',
360
+ sentBody: { messages: [] },
361
+ evaluator: true,
362
+ });
363
+ store.recordRequestComplete({
364
+ requestId: 'eval-req-1',
365
+ timestamp: '2026-05-22T09:14:36.000Z',
366
+ provider: 'openai',
367
+ model: 'gpt-4o-mini',
368
+ sessionId: 'session-123',
369
+ sessionStartedAt: '2026-05-22T09:14:31.125Z',
370
+ mode: 'standard',
371
+ receivedSummary: { status: 200, outputText: 'approved' },
372
+ evaluator: true,
373
+ });
374
+ const dayDir = path.join(rootDir, '2026-05-22');
375
+ const requestFile = path.join(dayDir, 'evaluator_09-14-35.044Z_sess-session-123_req-eval-req-1.jsonl');
376
+ t.true(fs.existsSync(dayDir));
377
+ t.true(fs.existsSync(requestFile));
378
+ const records = readRequestFile(requestFile);
379
+ t.is(records.length, 2);
380
+ t.is(records[0]?.direction, 'sent');
381
+ t.is(records[1]?.direction, 'received');
382
+ });
383
+ //# sourceMappingURL=provider-traffic.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-traffic.test.js","sourceRoot":"","sources":["../../source/services/provider-traffic.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,GAAG,GAAW,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,yBAAyB,CAAC,CAAC,CAAC;AAEpG,MAAM,eAAe,GAAG,CAAC,QAAgB,EAA6B,EAAE,CACtE,EAAE;KACC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC9B,KAAK,CAAC,MAAM,CAAC;KACb,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KAC/B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAA4B,CAAC,CAAC;AAElE,MAAM,kBAAkB,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,YAAY,MAAM,GAAG,kBAAkB,SAAS,CAAC;AAExG,IAAI,CAAC,2FAA2F,EAAE,CAAC,CAAC,EAAE,EAAE;IACtG,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG;QACX,YAAY,EAAE,QAAQ;QACtB,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE;YAC9C,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE;YAClD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE;YAC7C;gBACE,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,YAAY;gBAClB,SAAS,EAAE,wDAAwD;aACpE;SACF;QACD,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YAC/G,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,YAAY,EAAE;SACnD;KACF,CAAC;IAEF,MAAM,SAAS,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAEhD,CAAC,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC;IACnD,CAAC,CAAC,IAAI,CAAE,SAAS,CAAC,YAAuB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC,CAAC,EAAE,CAAE,SAAS,CAAC,YAAuB,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;AAC5D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+FAA+F,EAAE,CAAC,CAAC,EAAE,EAAE;IAC1G,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG;QACX,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE;YACrC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE;YACxC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE;YAC3C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE;YAC9C,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE;SACrG;QACD,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;KACjG,CAAC;IAEF,MAAM,SAAS,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAA0C,CAAC;IAEtE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAC5C,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;IAC/C,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACjE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qEAAqE,EAAE,CAAC,CAAC,EAAE,EAAE;IAChF,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG;QACX,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE;YACrG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;SAChC;KACF,CAAC;IAEF,MAAM,SAAS,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAA0C,CAAC;IACtE,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAyC,CAAC;IAE5E,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IACnE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wFAAwF,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACzG,MAAM,GAAG,GAAG;QACV,QAAQ;QACR,EAAE;QACF,mCAAmC;QACnC,6DAA6D;QAC7D,EAAE;QACF,8CAA8C;QAC9C,wEAAwE;QACxE,EAAE;QACF,+CAA+C;QAC/C,8FAA8F;QAC9F,EAAE;QACF,+CAA+C;QAC/C,uFAAuF;QACvF,EAAE;QACF,2BAA2B;QAC3B,mIAAmI;QACnI,EAAE;QACF,cAAc;QACd,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAC5C,IAAI,QAAQ,CAAC,GAAG,EAAE;QAChB,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,EAAE,cAAc,EAAE,mBAAmB,EAAE;KACjD,CAAC,CACH,CAAC;IAEF,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,EAAE,CAAE,OAAO,CAAC,OAAe,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC,CAAC,EAAE,CAAE,OAAO,CAAC,OAAe,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC,CAAC,EAAE,CAAE,OAAO,CAAC,OAAe,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC,CAAC,SAAS,CAAE,OAAO,CAAC,OAAe,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;IACrF,CAAC,CAAC,SAAS,CAAE,OAAO,CAAC,OAAe,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE;QACrE;YACE,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;SACnC;KACF,CAAC,CAAC;IACH,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kGAAkG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACnH,MAAM,GAAG,GAAG;QACV,yJAAyJ;QACzJ,EAAE;QACF,oJAAoJ;QACpJ,EAAE;QACF,mDAAmD;QACnD,EAAE;QACF,4CAA4C;QAC5C,EAAE;QACF,mBAAmB;QACnB,EAAE;QACF,cAAc;QACd,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAC5C,IAAI,QAAQ,CAAC,GAAG,EAAE;QAChB,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,EAAE,cAAc,EAAE,mBAAmB,EAAE;KACjD,CAAC,CACH,CAAC;IAEF,CAAC,CAAC,EAAE,CAAE,OAAO,CAAC,OAAe,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC,CAAC,EAAE,CAAE,OAAO,CAAC,OAAe,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IACpE,CAAC,CAAC,EAAE,CAAE,OAAO,CAAC,OAAe,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC,CAAC,EAAE,CAAE,OAAO,CAAC,OAAe,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;IAC1E,CAAC,CAAC,SAAS,CAAE,OAAO,CAAC,OAAe,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE;QACrE;YACE,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE;SACvD;KACF,CAAC,CAAC;IACH,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yFAAyF,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC1G,MAAM,WAAW,GAAG,MAAM,wBAAwB,CAChD,IAAI,QAAQ,CACV,IAAI,CAAC,SAAS,CAAC;QACb,EAAE,EAAE,WAAW;QACf,WAAW,EAAE,MAAM;QACnB,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE;KAC7C,CAAC,EACF;QACE,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CACF,CACF,CAAC;IAEF,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,EAAE,CAAE,WAAW,CAAC,OAAe,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;IACpD,CAAC,CAAC,EAAE,CAAE,WAAW,CAAC,OAAe,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC,CAAC,SAAS,CAAE,WAAW,CAAC,OAAe,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;IAExF,MAAM,eAAe,GAAG,MAAM,wBAAwB,CACpD,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE;QAC1D,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CACH,CAAC;IAEF,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC,CAAC,EAAE,CAAE,eAAe,CAAC,YAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACnE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sFAAsF,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACvG,MAAM,GAAG,GAAG;QACV,gLAAgL;QAChL,EAAE;QACF,iFAAiF;QACjF,EAAE;QACF,cAAc;QACd,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAC5C,IAAI,QAAQ,CAAC,GAAG,EAAE;QAChB,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,EAAE,cAAc,EAAE,mBAAmB,EAAE;KACjD,CAAC,CACH,CAAC;IAEF,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,EAAE,CAAE,OAAO,CAAC,OAAe,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oGAAoG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACrH,MAAM,GAAG,GAAG;QACV,uHAAuH;QACvH,EAAE;QACF,2HAA2H;QAC3H,EAAE;QACF,iFAAiF;QACjF,EAAE;QACF,wJAAwJ;QACxJ,EAAE;QACF,cAAc;QACd,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAC5C,IAAI,QAAQ,CAAC,GAAG,EAAE;QAChB,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,EAAE,cAAc,EAAE,mBAAmB,EAAE;KACjD,CAAC,CACH,CAAC;IAEF,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC,EAAE,CAAE,OAAO,CAAC,OAAe,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC,CAAC,EAAE,CAAE,OAAO,CAAC,OAAe,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kGAAkG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACnH,MAAM,GAAG,GAAG;QACV,uHAAuH;QACvH,EAAE;QACF,wMAAwM;QACxM,EAAE;QACF,6HAA6H;QAC7H,EAAE;QACF,yJAAyJ;QACzJ,EAAE;QACF,cAAc;QACd,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAC5C,IAAI,QAAQ,CAAC,GAAG,EAAE;QAChB,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,EAAE,cAAc,EAAE,mBAAmB,EAAE;KACjD,CAAC,CACH,CAAC;IAEF,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACvC,MAAM,SAAS,GAAI,OAAO,CAAC,OAAe,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC;IAC5E,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3B,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AAC5D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uFAAuF,EAAE,CAAC,CAAC,EAAE,EAAE;IAClG,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,4BAA4B,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAE5D,KAAK,CAAC,kBAAkB,CAAC;QACvB,SAAS,EAAE,OAAO;QAClB,SAAS,EAAE,0BAA0B;QACrC,QAAQ,EAAE,YAAY;QACtB,KAAK,EAAE,YAAY;QACnB,SAAS,EAAE,aAAa;QACxB,gBAAgB,EAAE,0BAA0B;QAC5C,IAAI,EAAE,UAAU;QAChB,uBAAuB,EAAE,aAAa;QACtC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE;KACnE,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,gDAAgD,CAAC,CAAC;IAExF,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;IAEnC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAEzD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,EAAE;SACpB,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC;SAC/B,IAAI,EAAE;SACN,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACtB,SAAS,EAAE,aAAa;QACxB,UAAU,EAAE,sCAAsC;QAClD,cAAc,EAAE,0BAA0B;QAC1C,aAAa,EAAE,0BAA0B;QACzC,YAAY,EAAE,CAAC;QACf,cAAc,EAAE,YAAY;QAC5B,WAAW,EAAE,YAAY;QACzB,UAAU,EAAE,UAAU;KACvB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wIAAwI,EAAE,CAAC,CAAC,EAAE,EAAE;IACnJ,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;IAChE,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAC;IAE1D,MAAM,KAAK,GAAG,IAAI,4BAA4B,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5D,KAAK,CAAC,kBAAkB,CAAC;QACvB,SAAS,EAAE,OAAO;QAClB,SAAS,EAAE,0BAA0B;QACrC,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,aAAa;QACxB,gBAAgB,EAAE,0BAA0B;QAC5C,IAAI,EAAE,UAAU;QAChB,uBAAuB,EAAE,eAAe;QACxC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE;KAClE,CAAC,CAAC;IACH,KAAK,CAAC,qBAAqB,CAAC;QAC1B,SAAS,EAAE,OAAO;QAClB,SAAS,EAAE,0BAA0B;QACrC,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,aAAa;QACxB,gBAAgB,EAAE,0BAA0B;QAC5C,IAAI,EAAE,UAAU;QAChB,eAAe,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE;KACrD,CAAC,CAAC;IACH,KAAK,CAAC,kBAAkB,CAAC;QACvB,SAAS,EAAE,OAAO;QAClB,SAAS,EAAE,0BAA0B;QACrC,QAAQ,EAAE,YAAY;QACtB,KAAK,EAAE,eAAe;QACtB,SAAS,EAAE,aAAa;QACxB,gBAAgB,EAAE,0BAA0B;QAC5C,IAAI,EAAE,QAAQ;QACd,uBAAuB,EAAE,gBAAgB;QACzC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,EAAE;KACtE,CAAC,CAAC;IACH,KAAK,CAAC,qBAAqB,CAAC;QAC1B,SAAS,EAAE,OAAO;QAClB,SAAS,EAAE,0BAA0B;QACrC,QAAQ,EAAE,YAAY;QACtB,KAAK,EAAE,eAAe;QACtB,SAAS,EAAE,aAAa;QACxB,gBAAgB,EAAE,0BAA0B;QAC5C,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;KACnC,CAAC,CAAC;IACH,KAAK,CAAC,kBAAkB,CAAC;QACvB,SAAS,EAAE,OAAO;QAClB,SAAS,EAAE,0BAA0B;QACrC,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,aAAa;QACxB,gBAAgB,EAAE,0BAA0B;QAC5C,IAAI,EAAE,UAAU;QAChB,uBAAuB,EAAE,eAAe;QACxC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE;KAClE,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,gDAAgD,CAAC,CAAC;IACvG,MAAM,cAAc,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC,CAAC,EAAE,CAAE,cAAc,CAAC,CAAC,CAAC,EAAE,OAAe,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAE9D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,gDAAgD,CAAC,CAAC;IACvG,CAAC,CAAC,EAAE,CAAE,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,KAAa,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;IAE/E,MAAM,YAAY,GAAG,EAAE;SACpB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC;SACrE,IAAI,EAAE;SACN,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAC/C,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAC/C,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEnD,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,gDAAgD,CAAC,CAAC,CAAC,CAAC;IAC1G,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,mBAAmB,CAAC,CAAC;AACjE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kFAAkF,EAAE,CAAC,CAAC,EAAE,EAAE;IAC7F,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,4BAA4B,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAE5D,KAAK,CAAC,kBAAkB,CAAC;QACvB,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,0BAA0B;QACrC,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,aAAa;QACpB,SAAS,EAAE,aAAa;QACxB,gBAAgB,EAAE,0BAA0B;QAC5C,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC1B,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IACH,KAAK,CAAC,qBAAqB,CAAC;QAC1B,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,0BAA0B;QACrC,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,aAAa;QACpB,SAAS,EAAE,aAAa;QACxB,gBAAgB,EAAE,0BAA0B;QAC5C,IAAI,EAAE,UAAU;QAChB,eAAe,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE;QACxD,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,+DAA+D,CAAC,CAAC;IAEvG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;IAEnC,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC"}
@@ -7,10 +7,29 @@ export interface ILoggingService {
7
7
  setCorrelationId(id: string | undefined): void;
8
8
  getCorrelationId(): string | undefined;
9
9
  clearCorrelationId(): void;
10
+ runWithTrafficContext?<T>(context: {
11
+ sessionId: string;
12
+ sessionStartedAt: string;
13
+ firstUserMessagePreview?: string;
14
+ mode?: string;
15
+ traceId?: string;
16
+ evaluator?: boolean;
17
+ }, fn: () => T): T;
18
+ getTrafficContext?(): {
19
+ sessionId: string;
20
+ sessionStartedAt: string;
21
+ firstUserMessagePreview?: string;
22
+ mode?: string;
23
+ traceId?: string;
24
+ evaluator?: boolean;
25
+ } | null;
10
26
  }
11
27
  export interface ISettingsService {
12
28
  get<T = any>(key: string): T;
13
- set(key: string, value: any): void;
29
+ set(key: string, value: any, options?: {
30
+ persist?: boolean;
31
+ }): void;
32
+ onChange?: (listener: (key?: string) => void) => () => void;
14
33
  }
15
34
  export interface ISSHService {
16
35
  connect(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"service-interfaces.d.ts","sourceRoot":"","sources":["../../source/services/service-interfaces.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IACxC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IACzC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAC5C,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAC/C,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAAC;IACvC,kBAAkB,IAAI,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC;IAC7B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,IAAI,OAAO,CAAC;IACvB,cAAc,CACZ,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACtB,OAAO,CAAC;QACT,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpE"}
1
+ {"version":3,"file":"service-interfaces.d.ts","sourceRoot":"","sources":["../../source/services/service-interfaces.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IACxC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IACzC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAC5C,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAC/C,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAAC;IACvC,kBAAkB,IAAI,IAAI,CAAC;IAC3B,qBAAqB,CAAC,CAAC,CAAC,EACtB,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,EAAE,MAAM,CAAC;QACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,EACD,EAAE,EAAE,MAAM,CAAC,GACV,CAAC,CAAC;IACL,iBAAiB,CAAC,IAAI;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,EAAE,MAAM,CAAC;QACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,GAAG,IAAI,CAAC;CACV;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC;IAC7B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACpE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;CAC7D;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,IAAI,OAAO,CAAC;IACvB,cAAc,CACZ,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACtB,OAAO,CAAC;QACT,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpE"}
@@ -115,7 +115,7 @@ export function stripSensitiveSettings(settings) {
115
115
  // Remove sensitive app settings
116
116
  if (cleaned.app) {
117
117
  delete cleaned.app.shellPath;
118
- // mentorMode and editMode are persisted so they survive across sessions
118
+ // mentorMode and planMode are persisted so they survive across sessions
119
119
  }
120
120
  return cleaned;
121
121
  }
@@ -35,6 +35,39 @@ export declare const AgentSettingsSchema: z.ZodObject<{
35
35
  useFlexServiceTier: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
36
36
  autoApproveModel: z.ZodDefault<z.ZodOptional<z.ZodString>>;
37
37
  autoApproveProvider: z.ZodOptional<z.ZodString>;
38
+ subagentExplorerModel: z.ZodOptional<z.ZodString>;
39
+ subagentExplorerProvider: z.ZodOptional<z.ZodString>;
40
+ subagentExplorerReasoningEffort: z.ZodOptional<z.ZodEnum<{
41
+ default: "default";
42
+ medium: "medium";
43
+ none: "none";
44
+ minimal: "minimal";
45
+ low: "low";
46
+ high: "high";
47
+ xhigh: "xhigh";
48
+ }>>;
49
+ subagentWorkerModel: z.ZodOptional<z.ZodString>;
50
+ subagentWorkerProvider: z.ZodOptional<z.ZodString>;
51
+ subagentWorkerReasoningEffort: z.ZodOptional<z.ZodEnum<{
52
+ default: "default";
53
+ medium: "medium";
54
+ none: "none";
55
+ minimal: "minimal";
56
+ low: "low";
57
+ high: "high";
58
+ xhigh: "xhigh";
59
+ }>>;
60
+ subagentResearcherModel: z.ZodOptional<z.ZodString>;
61
+ subagentResearcherProvider: z.ZodOptional<z.ZodString>;
62
+ subagentResearcherReasoningEffort: z.ZodOptional<z.ZodEnum<{
63
+ default: "default";
64
+ medium: "medium";
65
+ none: "none";
66
+ minimal: "minimal";
67
+ low: "low";
68
+ high: "high";
69
+ xhigh: "xhigh";
70
+ }>>;
38
71
  }, z.core.$strip>;
39
72
  export declare const ShellSettingsSchema: z.ZodObject<{
40
73
  timeout: z.ZodDefault<z.ZodNumber>;
@@ -69,8 +102,9 @@ export declare const EnvironmentSettingsSchema: z.ZodObject<{
69
102
  export declare const AppSettingsSchema: z.ZodObject<{
70
103
  shellPath: z.ZodOptional<z.ZodString>;
71
104
  mentorMode: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
72
- editMode: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
73
105
  liteMode: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
106
+ planMode: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
107
+ orchestratorMode: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
74
108
  searchViaShell: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
75
109
  }, z.core.$strip>;
76
110
  export declare const ToolsSettingsSchema: z.ZodObject<{
@@ -177,6 +211,39 @@ export declare const SettingsSchema: z.ZodObject<{
177
211
  useFlexServiceTier: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
178
212
  autoApproveModel: z.ZodDefault<z.ZodOptional<z.ZodString>>;
179
213
  autoApproveProvider: z.ZodOptional<z.ZodString>;
214
+ subagentExplorerModel: z.ZodOptional<z.ZodString>;
215
+ subagentExplorerProvider: z.ZodOptional<z.ZodString>;
216
+ subagentExplorerReasoningEffort: z.ZodOptional<z.ZodEnum<{
217
+ default: "default";
218
+ medium: "medium";
219
+ none: "none";
220
+ minimal: "minimal";
221
+ low: "low";
222
+ high: "high";
223
+ xhigh: "xhigh";
224
+ }>>;
225
+ subagentWorkerModel: z.ZodOptional<z.ZodString>;
226
+ subagentWorkerProvider: z.ZodOptional<z.ZodString>;
227
+ subagentWorkerReasoningEffort: z.ZodOptional<z.ZodEnum<{
228
+ default: "default";
229
+ medium: "medium";
230
+ none: "none";
231
+ minimal: "minimal";
232
+ low: "low";
233
+ high: "high";
234
+ xhigh: "xhigh";
235
+ }>>;
236
+ subagentResearcherModel: z.ZodOptional<z.ZodString>;
237
+ subagentResearcherProvider: z.ZodOptional<z.ZodString>;
238
+ subagentResearcherReasoningEffort: z.ZodOptional<z.ZodEnum<{
239
+ default: "default";
240
+ medium: "medium";
241
+ none: "none";
242
+ minimal: "minimal";
243
+ low: "low";
244
+ high: "high";
245
+ xhigh: "xhigh";
246
+ }>>;
180
247
  }, z.core.$strip>>;
181
248
  shell: z.ZodOptional<z.ZodObject<{
182
249
  timeout: z.ZodDefault<z.ZodNumber>;
@@ -211,8 +278,9 @@ export declare const SettingsSchema: z.ZodObject<{
211
278
  app: z.ZodOptional<z.ZodObject<{
212
279
  shellPath: z.ZodOptional<z.ZodString>;
213
280
  mentorMode: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
214
- editMode: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
215
281
  liteMode: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
282
+ planMode: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
283
+ orchestratorMode: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
216
284
  searchViaShell: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
217
285
  }, z.core.$strip>>;
218
286
  tools: z.ZodOptional<z.ZodObject<{
@@ -274,6 +342,15 @@ export interface SettingsWithSources {
274
342
  useFlexServiceTier: SettingWithSource<boolean>;
275
343
  autoApproveModel: SettingWithSource<string>;
276
344
  autoApproveProvider: SettingWithSource<string | undefined>;
345
+ subagentExplorerModel: SettingWithSource<string | undefined>;
346
+ subagentExplorerProvider: SettingWithSource<string | undefined>;
347
+ subagentExplorerReasoningEffort: SettingWithSource<string | undefined>;
348
+ subagentWorkerModel: SettingWithSource<string | undefined>;
349
+ subagentWorkerProvider: SettingWithSource<string | undefined>;
350
+ subagentWorkerReasoningEffort: SettingWithSource<string | undefined>;
351
+ subagentResearcherModel: SettingWithSource<string | undefined>;
352
+ subagentResearcherProvider: SettingWithSource<string | undefined>;
353
+ subagentResearcherReasoningEffort: SettingWithSource<string | undefined>;
277
354
  };
278
355
  shell: {
279
356
  timeout: SettingWithSource<number>;
@@ -298,8 +375,9 @@ export interface SettingsWithSources {
298
375
  app: {
299
376
  shellPath: SettingWithSource<string | undefined>;
300
377
  mentorMode: SettingWithSource<boolean>;
301
- editMode: SettingWithSource<boolean>;
302
378
  liteMode: SettingWithSource<boolean>;
379
+ planMode: SettingWithSource<boolean>;
380
+ orchestratorMode: SettingWithSource<boolean>;
303
381
  searchViaShell: SettingWithSource<boolean>;
304
382
  };
305
383
  tools: {
@@ -354,6 +432,15 @@ export declare const SETTING_KEYS: {
354
432
  readonly SHELL_USE_RTK_COMPRESSION: "shell.useRtkCompression";
355
433
  readonly AGENT_AUTO_APPROVE_MODEL: "agent.autoApproveModel";
356
434
  readonly AGENT_AUTO_APPROVE_PROVIDER: "agent.autoApproveProvider";
435
+ readonly AGENT_SUBAGENT_EXPLORER_MODEL: "agent.subagentExplorerModel";
436
+ readonly AGENT_SUBAGENT_EXPLORER_PROVIDER: "agent.subagentExplorerProvider";
437
+ readonly AGENT_SUBAGENT_EXPLORER_REASONING_EFFORT: "agent.subagentExplorerReasoningEffort";
438
+ readonly AGENT_SUBAGENT_WORKER_MODEL: "agent.subagentWorkerModel";
439
+ readonly AGENT_SUBAGENT_WORKER_PROVIDER: "agent.subagentWorkerProvider";
440
+ readonly AGENT_SUBAGENT_WORKER_REASONING_EFFORT: "agent.subagentWorkerReasoningEffort";
441
+ readonly AGENT_SUBAGENT_RESEARCHER_MODEL: "agent.subagentResearcherModel";
442
+ readonly AGENT_SUBAGENT_RESEARCHER_PROVIDER: "agent.subagentResearcherProvider";
443
+ readonly AGENT_SUBAGENT_RESEARCHER_REASONING_EFFORT: "agent.subagentResearcherReasoningEffort";
357
444
  readonly UI_HISTORY_SIZE: "ui.historySize";
358
445
  readonly UI_PASTE_THRESHOLD: "ui.pasteThreshold";
359
446
  readonly LOGGING_LOG_LEVEL: "logging.logLevel";
@@ -363,8 +450,9 @@ export declare const SETTING_KEYS: {
363
450
  readonly ENV_NODE_ENV: "environment.nodeEnv";
364
451
  readonly APP_SHELL_PATH: "app.shellPath";
365
452
  readonly APP_MENTOR_MODE: "app.mentorMode";
366
- readonly APP_EDIT_MODE: "app.editMode";
367
453
  readonly APP_LITE_MODE: "app.liteMode";
454
+ readonly APP_PLAN_MODE: "app.planMode";
455
+ readonly APP_ORCHESTRATOR_MODE: "app.orchestratorMode";
368
456
  readonly APP_SEARCH_VIA_SHELL: "app.searchViaShell";
369
457
  readonly TOOLS_LOG_FILE_OPS: "tools.logFileOperations";
370
458
  readonly TOOLS_ENABLE_EDIT_HEALING: "tools.enableEditHealing";
@@ -381,6 +469,21 @@ export declare const SETTING_KEYS: {
381
469
  readonly WEB_SEARCH_EXA_API_KEY: "webSearch.exa.apiKey";
382
470
  };
383
471
  export declare const RUNTIME_MODIFIABLE_SETTINGS: Set<string>;
472
+ export interface AppModes {
473
+ orchestratorMode: boolean;
474
+ liteMode: boolean;
475
+ planMode: boolean;
476
+ mentorMode: boolean;
477
+ }
478
+ /**
479
+ * Normalize app mode flags to enforce mutual exclusion.
480
+ *
481
+ * Precedence (first one that is true wins; all others are disabled):
482
+ * orchestratorMode > liteMode > planMode > mentorMode
483
+ *
484
+ * When none are true, all remain false (standard mode).
485
+ */
486
+ export declare function normalizeAppModes(modes: AppModes): AppModes;
384
487
  export declare const OPTIONAL_DEFAULT_KEYS: Set<string>;
385
488
  export declare const DEFAULT_SETTINGS: SettingsData;
386
489
  /**