@qduc/term2 0.1.4 → 0.1.6

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 (575) hide show
  1. package/dist/agent.d.ts.map +1 -1
  2. package/dist/agent.js +4 -24
  3. package/dist/agent.js.map +1 -1
  4. package/dist/app.d.ts.map +1 -1
  5. package/dist/app.js +12 -33
  6. package/dist/app.js.map +1 -1
  7. package/dist/app.parseInput.test.js +4 -4
  8. package/dist/app.parseInput.test.js.map +1 -1
  9. package/dist/cli.js +44 -29
  10. package/dist/cli.js.map +1 -1
  11. package/dist/components/ApprovalPrompt.d.ts.map +1 -1
  12. package/dist/components/ApprovalPrompt.js +14 -11
  13. package/dist/components/ApprovalPrompt.js.map +1 -1
  14. package/dist/components/Banner.d.ts.map +1 -1
  15. package/dist/components/Banner.js +4 -12
  16. package/dist/components/Banner.js.map +1 -1
  17. package/dist/components/BottomArea.d.ts +2 -0
  18. package/dist/components/BottomArea.d.ts.map +1 -1
  19. package/dist/components/BottomArea.js +6 -9
  20. package/dist/components/BottomArea.js.map +1 -1
  21. package/dist/components/BottomArea.test.js +4 -6
  22. package/dist/components/BottomArea.test.js.map +1 -1
  23. package/dist/components/ChatMessage.d.ts.map +1 -1
  24. package/dist/components/ChatMessage.js.map +1 -1
  25. package/dist/components/CommandMessage.d.ts.map +1 -1
  26. package/dist/components/CommandMessage.js +19 -30
  27. package/dist/components/CommandMessage.js.map +1 -1
  28. package/dist/components/CommandMessage.test.js +2 -2
  29. package/dist/components/CommandMessage.test.js.map +1 -1
  30. package/dist/components/ErrorBoundary.d.ts.map +1 -1
  31. package/dist/components/ErrorBoundary.js +3 -9
  32. package/dist/components/ErrorBoundary.js.map +1 -1
  33. package/dist/components/ErrorBoundary.test.js +2 -2
  34. package/dist/components/ErrorBoundary.test.js.map +1 -1
  35. package/dist/components/Input/PopupManager.d.ts.map +1 -1
  36. package/dist/components/Input/PopupManager.js.map +1 -1
  37. package/dist/components/InputBox.d.ts.map +1 -1
  38. package/dist/components/InputBox.js +15 -33
  39. package/dist/components/InputBox.js.map +1 -1
  40. package/dist/components/InputBox.menu-logic.test.js +6 -7
  41. package/dist/components/InputBox.menu-logic.test.js.map +1 -1
  42. package/dist/components/InputBox.test.js +7 -9
  43. package/dist/components/InputBox.test.js.map +1 -1
  44. package/dist/components/LiveResponse.d.ts.map +1 -1
  45. package/dist/components/LiveResponse.js.map +1 -1
  46. package/dist/components/MarkdownRenderer.d.ts.map +1 -1
  47. package/dist/components/MarkdownRenderer.js +12 -12
  48. package/dist/components/MarkdownRenderer.js.map +1 -1
  49. package/dist/components/MessageList.d.ts.map +1 -1
  50. package/dist/components/MessageList.js.map +1 -1
  51. package/dist/components/MessageList.test.js +1 -1
  52. package/dist/components/MessageList.test.js.map +1 -1
  53. package/dist/components/ModelSelectionMenu.d.ts.map +1 -1
  54. package/dist/components/ModelSelectionMenu.js +35 -31
  55. package/dist/components/ModelSelectionMenu.js.map +1 -1
  56. package/dist/components/ModelSelectionMenu.test.js +9 -9
  57. package/dist/components/ModelSelectionMenu.test.js.map +1 -1
  58. package/dist/components/PathSelectionMenu.d.ts.map +1 -1
  59. package/dist/components/PathSelectionMenu.js +1 -1
  60. package/dist/components/PathSelectionMenu.js.map +1 -1
  61. package/dist/components/SettingsSelectionMenu.d.ts.map +1 -1
  62. package/dist/components/SettingsSelectionMenu.js +1 -1
  63. package/dist/components/SettingsSelectionMenu.js.map +1 -1
  64. package/dist/components/SettingsSelectionMenu.test.js +4 -4
  65. package/dist/components/SettingsSelectionMenu.test.js.map +1 -1
  66. package/dist/components/SettingsValueSelectionMenu.d.ts.map +1 -1
  67. package/dist/components/SettingsValueSelectionMenu.js +5 -6
  68. package/dist/components/SettingsValueSelectionMenu.js.map +1 -1
  69. package/dist/components/SettingsValueSelectionMenu.test.js +5 -5
  70. package/dist/components/SettingsValueSelectionMenu.test.js.map +1 -1
  71. package/dist/components/SlashCommandMenu.d.ts.map +1 -1
  72. package/dist/components/SlashCommandMenu.js +1 -1
  73. package/dist/components/SlashCommandMenu.js.map +1 -1
  74. package/dist/components/StatusBar.d.ts +2 -0
  75. package/dist/components/StatusBar.d.ts.map +1 -1
  76. package/dist/components/StatusBar.js +45 -41
  77. package/dist/components/StatusBar.js.map +1 -1
  78. package/dist/components/StatusBar.test.d.ts +2 -0
  79. package/dist/components/StatusBar.test.d.ts.map +1 -0
  80. package/dist/components/StatusBar.test.js +19 -0
  81. package/dist/components/StatusBar.test.js.map +1 -0
  82. package/dist/context/InputContext.d.ts.map +1 -1
  83. package/dist/context/InputContext.js.map +1 -1
  84. package/dist/context/InputContext.stability.test.js +1 -1
  85. package/dist/context/InputContext.stability.test.js.map +1 -1
  86. package/dist/context/InputContext.test.js +15 -15
  87. package/dist/context/InputContext.test.js.map +1 -1
  88. package/dist/hooks/use-conversation.d.ts +5 -13
  89. package/dist/hooks/use-conversation.d.ts.map +1 -1
  90. package/dist/hooks/use-conversation.js +40 -148
  91. package/dist/hooks/use-conversation.js.map +1 -1
  92. package/dist/hooks/use-input-history.d.ts.map +1 -1
  93. package/dist/hooks/use-input-history.js +1 -3
  94. package/dist/hooks/use-input-history.js.map +1 -1
  95. package/dist/hooks/use-model-selection.d.ts.map +1 -1
  96. package/dist/hooks/use-model-selection.js +9 -35
  97. package/dist/hooks/use-model-selection.js.map +1 -1
  98. package/dist/hooks/use-path-completion.d.ts.map +1 -1
  99. package/dist/hooks/use-path-completion.js +6 -6
  100. package/dist/hooks/use-path-completion.js.map +1 -1
  101. package/dist/hooks/use-setting.d.ts.map +1 -1
  102. package/dist/hooks/use-setting.js +3 -6
  103. package/dist/hooks/use-setting.js.map +1 -1
  104. package/dist/hooks/use-settings-completion.d.ts.map +1 -1
  105. package/dist/hooks/use-settings-completion.js +10 -12
  106. package/dist/hooks/use-settings-completion.js.map +1 -1
  107. package/dist/hooks/use-settings-completion.test.js +46 -46
  108. package/dist/hooks/use-settings-completion.test.js.map +1 -1
  109. package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
  110. package/dist/hooks/use-settings-value-completion.js +13 -43
  111. package/dist/hooks/use-settings-value-completion.js.map +1 -1
  112. package/dist/hooks/use-settings-value-completion.test.js +12 -18
  113. package/dist/hooks/use-settings-value-completion.test.js.map +1 -1
  114. package/dist/hooks/use-slash-commands.d.ts +1 -1
  115. package/dist/hooks/use-slash-commands.d.ts.map +1 -1
  116. package/dist/hooks/use-slash-commands.js +6 -11
  117. package/dist/hooks/use-slash-commands.js.map +1 -1
  118. package/dist/hooks/use-slash-commands.test.js +24 -24
  119. package/dist/hooks/use-slash-commands.test.js.map +1 -1
  120. package/dist/lib/editor-impl.d.ts.map +1 -1
  121. package/dist/lib/editor-impl.js +6 -16
  122. package/dist/lib/editor-impl.js.map +1 -1
  123. package/dist/lib/editor-impl.test.js.map +1 -1
  124. package/dist/lib/mentor-client.d.ts +41 -0
  125. package/dist/lib/mentor-client.d.ts.map +1 -0
  126. package/dist/lib/mentor-client.js +146 -0
  127. package/dist/lib/mentor-client.js.map +1 -0
  128. package/dist/lib/mentor-client.test.d.ts +2 -0
  129. package/dist/lib/mentor-client.test.d.ts.map +1 -0
  130. package/dist/lib/mentor-client.test.js +440 -0
  131. package/dist/lib/mentor-client.test.js.map +1 -0
  132. package/dist/lib/openai-agent-client.chat.test.js +33 -8
  133. package/dist/lib/openai-agent-client.chat.test.js.map +1 -1
  134. package/dist/lib/openai-agent-client.d.ts.map +1 -1
  135. package/dist/lib/openai-agent-client.flex-tier.test.js +5 -5
  136. package/dist/lib/openai-agent-client.flex-tier.test.js.map +1 -1
  137. package/dist/lib/openai-agent-client.js +99 -88
  138. package/dist/lib/openai-agent-client.js.map +1 -1
  139. package/dist/lib/openai-agent-client.public-methods.test.js +186 -12
  140. package/dist/lib/openai-agent-client.public-methods.test.js.map +1 -1
  141. package/dist/lib/openai-agent-client.test.js +17 -17
  142. package/dist/lib/openai-agent-client.test.js.map +1 -1
  143. package/dist/lib/retry-strategy.d.ts +43 -0
  144. package/dist/lib/retry-strategy.d.ts.map +1 -0
  145. package/dist/lib/retry-strategy.js +93 -0
  146. package/dist/lib/retry-strategy.js.map +1 -0
  147. package/dist/lib/retry-strategy.test.d.ts +2 -0
  148. package/dist/lib/retry-strategy.test.d.ts.map +1 -0
  149. package/dist/lib/retry-strategy.test.js +200 -0
  150. package/dist/lib/retry-strategy.test.js.map +1 -0
  151. package/dist/lib/tool-invoke.d.ts.map +1 -1
  152. package/dist/lib/tool-invoke.js.map +1 -1
  153. package/dist/lib/tool-invoke.test.js.map +1 -1
  154. package/dist/no-singleton-imports.test.js +1 -1
  155. package/dist/no-singleton-imports.test.js.map +1 -1
  156. package/dist/non-interactive.d.ts +20 -0
  157. package/dist/non-interactive.d.ts.map +1 -0
  158. package/dist/non-interactive.js +86 -0
  159. package/dist/non-interactive.js.map +1 -0
  160. package/dist/non-interactive.test.d.ts +2 -0
  161. package/dist/non-interactive.test.d.ts.map +1 -0
  162. package/dist/non-interactive.test.js +213 -0
  163. package/dist/non-interactive.test.js.map +1 -0
  164. package/dist/prompts/anthropic.md +11 -11
  165. package/dist/prompts/codex.md +63 -63
  166. package/dist/prompts/gpt-5.md +95 -95
  167. package/dist/prompts/mentor-addon.md +6 -5
  168. package/dist/prompts/prompt-selector.d.ts +8 -0
  169. package/dist/prompts/prompt-selector.d.ts.map +1 -0
  170. package/dist/prompts/prompt-selector.js +21 -0
  171. package/dist/prompts/prompt-selector.js.map +1 -0
  172. package/dist/prompts/prompt-selector.test.d.ts +2 -0
  173. package/dist/prompts/prompt-selector.test.d.ts.map +1 -0
  174. package/dist/prompts/prompt-selector.test.js +21 -0
  175. package/dist/prompts/prompt-selector.test.js.map +1 -0
  176. package/dist/prompts/prompt-selector.test.ts +32 -0
  177. package/dist/prompts/prompt-selector.ts +30 -0
  178. package/dist/prompts/simple.md +58 -58
  179. package/dist/providers/index.d.ts.map +1 -1
  180. package/dist/providers/index.js.map +1 -1
  181. package/dist/providers/openai-compatible/api.d.ts.map +1 -1
  182. package/dist/providers/openai-compatible/api.js.map +1 -1
  183. package/dist/providers/openai-compatible/model.d.ts.map +1 -1
  184. package/dist/providers/openai-compatible/model.js +19 -53
  185. package/dist/providers/openai-compatible/model.js.map +1 -1
  186. package/dist/providers/openai-compatible/provider.d.ts.map +1 -1
  187. package/dist/providers/openai-compatible/provider.js.map +1 -1
  188. package/dist/providers/openai-compatible/reasoning-content.test.js +2 -2
  189. package/dist/providers/openai-compatible/reasoning-content.test.js.map +1 -1
  190. package/dist/providers/openai-compatible/utils.d.ts.map +1 -1
  191. package/dist/providers/openai-compatible/utils.js.map +1 -1
  192. package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
  193. package/dist/providers/openai-compatible.provider.js +5 -1
  194. package/dist/providers/openai-compatible.provider.js.map +1 -1
  195. package/dist/providers/openai.provider.js +4 -0
  196. package/dist/providers/openai.provider.js.map +1 -1
  197. package/dist/providers/openrouter/api.d.ts.map +1 -1
  198. package/dist/providers/openrouter/api.js +5 -13
  199. package/dist/providers/openrouter/api.js.map +1 -1
  200. package/dist/providers/openrouter/converters.d.ts.map +1 -1
  201. package/dist/providers/openrouter/converters.js +9 -28
  202. package/dist/providers/openrouter/converters.js.map +1 -1
  203. package/dist/providers/openrouter/converters.test.js +7 -11
  204. package/dist/providers/openrouter/converters.test.js.map +1 -1
  205. package/dist/providers/openrouter/index.d.ts.map +1 -1
  206. package/dist/providers/openrouter/index.js.map +1 -1
  207. package/dist/providers/openrouter/model.d.ts.map +1 -1
  208. package/dist/providers/openrouter/model.js +19 -55
  209. package/dist/providers/openrouter/model.js.map +1 -1
  210. package/dist/providers/openrouter/provider.d.ts.map +1 -1
  211. package/dist/providers/openrouter/provider.js.map +1 -1
  212. package/dist/providers/openrouter/reasoning-content.test.js +1 -1
  213. package/dist/providers/openrouter/reasoning-content.test.js.map +1 -1
  214. package/dist/providers/openrouter/utils.d.ts.map +1 -1
  215. package/dist/providers/openrouter/utils.js +2 -3
  216. package/dist/providers/openrouter/utils.js.map +1 -1
  217. package/dist/providers/openrouter.api.retry.test.js.map +1 -1
  218. package/dist/providers/openrouter.provider.createRunner.test.js +1 -1
  219. package/dist/providers/openrouter.provider.createRunner.test.js.map +1 -1
  220. package/dist/providers/openrouter.provider.js +6 -4
  221. package/dist/providers/openrouter.provider.js.map +1 -1
  222. package/dist/providers/openrouter.test.js +13 -17
  223. package/dist/providers/openrouter.test.js.map +1 -1
  224. package/dist/providers/registry.d.ts +5 -0
  225. package/dist/providers/registry.d.ts.map +1 -1
  226. package/dist/providers/registry.js.map +1 -1
  227. package/dist/providers/registry.test.js +11 -11
  228. package/dist/providers/registry.test.js.map +1 -1
  229. package/dist/providers/web-search/index.d.ts +1 -1
  230. package/dist/providers/web-search/index.d.ts.map +1 -1
  231. package/dist/providers/web-search/index.js.map +1 -1
  232. package/dist/providers/web-search/registry.d.ts.map +1 -1
  233. package/dist/providers/web-search/registry.js.map +1 -1
  234. package/dist/providers/web-search/registry.test.js +14 -14
  235. package/dist/providers/web-search/registry.test.js.map +1 -1
  236. package/dist/providers/web-search/tavily.provider.d.ts.map +1 -1
  237. package/dist/providers/web-search/tavily.provider.js +4 -4
  238. package/dist/providers/web-search/tavily.provider.js.map +1 -1
  239. package/dist/providers/web-search/tavily.provider.test.js +7 -7
  240. package/dist/providers/web-search/tavily.provider.test.js.map +1 -1
  241. package/dist/providers/web-search/types.d.ts.map +1 -1
  242. package/dist/scripts/extract-provider-traffic.d.ts +3 -0
  243. package/dist/scripts/extract-provider-traffic.d.ts.map +1 -0
  244. package/dist/scripts/extract-provider-traffic.js +32 -0
  245. package/dist/scripts/extract-provider-traffic.js.map +1 -0
  246. package/dist/services/approval-state.d.ts +24 -0
  247. package/dist/services/approval-state.d.ts.map +1 -0
  248. package/dist/services/approval-state.js +41 -0
  249. package/dist/services/approval-state.js.map +1 -0
  250. package/dist/services/approval-state.test.d.ts +2 -0
  251. package/dist/services/approval-state.test.d.ts.map +1 -0
  252. package/dist/services/approval-state.test.js +59 -0
  253. package/dist/services/approval-state.test.js.map +1 -0
  254. package/dist/services/command-message-streaming.d.ts +12 -0
  255. package/dist/services/command-message-streaming.d.ts.map +1 -0
  256. package/dist/services/command-message-streaming.js +68 -0
  257. package/dist/services/command-message-streaming.js.map +1 -0
  258. package/dist/services/command-message-streaming.test.d.ts +2 -0
  259. package/dist/services/command-message-streaming.test.d.ts.map +1 -0
  260. package/dist/services/command-message-streaming.test.js +78 -0
  261. package/dist/services/command-message-streaming.test.js.map +1 -0
  262. package/dist/services/conversation-events.d.ts +5 -13
  263. package/dist/services/conversation-events.d.ts.map +1 -1
  264. package/dist/services/conversation-integration.test.d.ts +2 -0
  265. package/dist/services/conversation-integration.test.d.ts.map +1 -0
  266. package/dist/services/conversation-integration.test.js +155 -0
  267. package/dist/services/conversation-integration.test.js.map +1 -0
  268. package/dist/services/conversation-result-builder.d.ts +41 -0
  269. package/dist/services/conversation-result-builder.d.ts.map +1 -0
  270. package/dist/services/conversation-result-builder.js +110 -0
  271. package/dist/services/conversation-result-builder.js.map +1 -0
  272. package/dist/services/conversation-result-builder.test.d.ts +2 -0
  273. package/dist/services/conversation-result-builder.test.d.ts.map +1 -0
  274. package/dist/services/conversation-result-builder.test.js +76 -0
  275. package/dist/services/conversation-result-builder.test.js.map +1 -0
  276. package/dist/services/conversation-service.d.ts +1 -1
  277. package/dist/services/conversation-service.d.ts.map +1 -1
  278. package/dist/services/conversation-service.js.map +1 -1
  279. package/dist/services/conversation-session-reasoning.test.js +3 -3
  280. package/dist/services/conversation-session-reasoning.test.js.map +1 -1
  281. package/dist/services/conversation-session.d.ts +7 -17
  282. package/dist/services/conversation-session.d.ts.map +1 -1
  283. package/dist/services/conversation-session.js +290 -278
  284. package/dist/services/conversation-session.js.map +1 -1
  285. package/dist/services/conversation-session.usage.test.d.ts +2 -0
  286. package/dist/services/conversation-session.usage.test.d.ts.map +1 -0
  287. package/dist/services/conversation-session.usage.test.js +59 -0
  288. package/dist/services/conversation-session.usage.test.js.map +1 -0
  289. package/dist/services/conversation-store.d.ts.map +1 -1
  290. package/dist/services/conversation-store.js +3 -9
  291. package/dist/services/conversation-store.js.map +1 -1
  292. package/dist/services/conversation-store.test.js +17 -14
  293. package/dist/services/conversation-store.test.js.map +1 -1
  294. package/dist/services/execution-context.d.ts.map +1 -1
  295. package/dist/services/execution-context.js.map +1 -1
  296. package/dist/services/execution-context.test.js +7 -7
  297. package/dist/services/execution-context.test.js.map +1 -1
  298. package/dist/services/file-service.d.ts.map +1 -1
  299. package/dist/services/file-service.js +5 -9
  300. package/dist/services/file-service.js.map +1 -1
  301. package/dist/services/history-service.d.ts.map +1 -1
  302. package/dist/services/history-service.js +3 -7
  303. package/dist/services/history-service.js.map +1 -1
  304. package/dist/services/logging-contract.d.ts +74 -0
  305. package/dist/services/logging-contract.d.ts.map +1 -0
  306. package/dist/services/logging-contract.js +157 -0
  307. package/dist/services/logging-contract.js.map +1 -0
  308. package/dist/services/logging-contract.test.d.ts +2 -0
  309. package/dist/services/logging-contract.test.d.ts.map +1 -0
  310. package/dist/services/logging-contract.test.js +66 -0
  311. package/dist/services/logging-contract.test.js.map +1 -0
  312. package/dist/services/logging-service.d.ts +5 -0
  313. package/dist/services/logging-service.d.ts.map +1 -1
  314. package/dist/services/logging-service.js +93 -21
  315. package/dist/services/logging-service.js.map +1 -1
  316. package/dist/services/model-service.d.ts.map +1 -1
  317. package/dist/services/model-service.js +2 -2
  318. package/dist/services/model-service.js.map +1 -1
  319. package/dist/services/model-service.test.js +6 -6
  320. package/dist/services/model-service.test.js.map +1 -1
  321. package/dist/services/service-interfaces.d.ts.map +1 -1
  322. package/dist/services/settings-env.d.ts +9 -0
  323. package/dist/services/settings-env.d.ts.map +1 -0
  324. package/dist/services/settings-env.js +75 -0
  325. package/dist/services/settings-env.js.map +1 -0
  326. package/dist/services/settings-env.test.d.ts +2 -0
  327. package/dist/services/settings-env.test.d.ts.map +1 -0
  328. package/dist/services/settings-env.test.js +32 -0
  329. package/dist/services/settings-env.test.js.map +1 -0
  330. package/dist/services/settings-merger.d.ts +26 -0
  331. package/dist/services/settings-merger.d.ts.map +1 -0
  332. package/dist/services/settings-merger.js +122 -0
  333. package/dist/services/settings-merger.js.map +1 -0
  334. package/dist/services/settings-merger.test.d.ts +2 -0
  335. package/dist/services/settings-merger.test.d.ts.map +1 -0
  336. package/dist/services/settings-merger.test.js +26 -0
  337. package/dist/services/settings-merger.test.js.map +1 -0
  338. package/dist/services/settings-persistence.d.ts +32 -0
  339. package/dist/services/settings-persistence.d.ts.map +1 -0
  340. package/dist/services/settings-persistence.js +134 -0
  341. package/dist/services/settings-persistence.js.map +1 -0
  342. package/dist/services/settings-persistence.test.d.ts +2 -0
  343. package/dist/services/settings-persistence.test.d.ts.map +1 -0
  344. package/dist/services/settings-persistence.test.js +51 -0
  345. package/dist/services/settings-persistence.test.js.map +1 -0
  346. package/dist/services/settings-schema.d.ts +320 -0
  347. package/dist/services/settings-schema.d.ts.map +1 -0
  348. package/dist/services/settings-schema.js +272 -0
  349. package/dist/services/settings-schema.js.map +1 -0
  350. package/dist/services/settings-service.d.ts +4 -248
  351. package/dist/services/settings-service.d.ts.map +1 -1
  352. package/dist/services/settings-service.js +45 -641
  353. package/dist/services/settings-service.js.map +1 -1
  354. package/dist/services/settings-service.mock.d.ts.map +1 -1
  355. package/dist/services/settings-service.mock.js.map +1 -1
  356. package/dist/services/singleton-deprecation.test.js +2 -2
  357. package/dist/services/singleton-deprecation.test.js.map +1 -1
  358. package/dist/services/ssh-service.d.ts.map +1 -1
  359. package/dist/services/ssh-service.js +8 -7
  360. package/dist/services/ssh-service.js.map +1 -1
  361. package/dist/services/ssh-service.test.js +15 -13
  362. package/dist/services/ssh-service.test.js.map +1 -1
  363. package/dist/services/stream-event-parsing.d.ts +4 -0
  364. package/dist/services/stream-event-parsing.d.ts.map +1 -0
  365. package/dist/services/stream-event-parsing.js +76 -0
  366. package/dist/services/stream-event-parsing.js.map +1 -0
  367. package/dist/services/stream-event-parsing.test.d.ts +2 -0
  368. package/dist/services/stream-event-parsing.test.d.ts.map +1 -0
  369. package/dist/services/stream-event-parsing.test.js +59 -0
  370. package/dist/services/stream-event-parsing.test.js.map +1 -0
  371. package/dist/services/stream-event-processor.d.ts +32 -0
  372. package/dist/services/stream-event-processor.d.ts.map +1 -0
  373. package/dist/services/stream-event-processor.js +344 -0
  374. package/dist/services/stream-event-processor.js.map +1 -0
  375. package/dist/services/stream-event-processor.test.d.ts +2 -0
  376. package/dist/services/stream-event-processor.test.d.ts.map +1 -0
  377. package/dist/services/stream-event-processor.test.js +117 -0
  378. package/dist/services/stream-event-processor.test.js.map +1 -0
  379. package/dist/tools/apply-patch.d.ts.map +1 -1
  380. package/dist/tools/apply-patch.js +45 -35
  381. package/dist/tools/apply-patch.js.map +1 -1
  382. package/dist/tools/apply-patch.test.js +23 -0
  383. package/dist/tools/apply-patch.test.js.map +1 -1
  384. package/dist/tools/ask-mentor.d.ts.map +1 -1
  385. package/dist/tools/ask-mentor.js +5 -15
  386. package/dist/tools/ask-mentor.js.map +1 -1
  387. package/dist/tools/ask-mentor.test.js +1 -1
  388. package/dist/tools/ask-mentor.test.js.map +1 -1
  389. package/dist/tools/create-file.d.ts.map +1 -1
  390. package/dist/tools/create-file.js +2 -2
  391. package/dist/tools/create-file.js.map +1 -1
  392. package/dist/tools/create-file.test.js.map +1 -1
  393. package/dist/tools/edit-healing.d.ts.map +1 -1
  394. package/dist/tools/edit-healing.js +5 -4
  395. package/dist/tools/edit-healing.js.map +1 -1
  396. package/dist/tools/edit-healing.test.js.map +1 -1
  397. package/dist/tools/find-files.d.ts +1 -0
  398. package/dist/tools/find-files.d.ts.map +1 -1
  399. package/dist/tools/find-files.js +93 -24
  400. package/dist/tools/find-files.js.map +1 -1
  401. package/dist/tools/find-files.test.js +46 -2
  402. package/dist/tools/find-files.test.js.map +1 -1
  403. package/dist/tools/format-helpers.d.ts.map +1 -1
  404. package/dist/tools/format-helpers.js +2 -6
  405. package/dist/tools/format-helpers.js.map +1 -1
  406. package/dist/tools/grep.d.ts +1 -1
  407. package/dist/tools/grep.d.ts.map +1 -1
  408. package/dist/tools/grep.js +6 -21
  409. package/dist/tools/grep.js.map +1 -1
  410. package/dist/tools/read-file.d.ts.map +1 -1
  411. package/dist/tools/read-file.js +3 -7
  412. package/dist/tools/read-file.js.map +1 -1
  413. package/dist/tools/read-file.test.js.map +1 -1
  414. package/dist/tools/search-replace.d.ts.map +1 -1
  415. package/dist/tools/search-replace.js +14 -31
  416. package/dist/tools/search-replace.js.map +1 -1
  417. package/dist/tools/search-replace.test.js.map +1 -1
  418. package/dist/tools/search.d.ts +1 -1
  419. package/dist/tools/search.d.ts.map +1 -1
  420. package/dist/tools/search.js +6 -16
  421. package/dist/tools/search.js.map +1 -1
  422. package/dist/tools/shell.d.ts +1 -1
  423. package/dist/tools/shell.d.ts.map +1 -1
  424. package/dist/tools/shell.js +25 -51
  425. package/dist/tools/shell.js.map +1 -1
  426. package/dist/tools/shell.test.d.ts +2 -0
  427. package/dist/tools/shell.test.d.ts.map +1 -0
  428. package/dist/tools/shell.test.js +70 -0
  429. package/dist/tools/shell.test.js.map +1 -0
  430. package/dist/tools/tool-names.d.ts +3 -0
  431. package/dist/tools/tool-names.d.ts.map +1 -0
  432. package/dist/tools/tool-names.js +3 -0
  433. package/dist/tools/tool-names.js.map +1 -0
  434. package/dist/tools/tool-names.test.d.ts +2 -0
  435. package/dist/tools/tool-names.test.d.ts.map +1 -0
  436. package/dist/tools/tool-names.test.js +7 -0
  437. package/dist/tools/tool-names.test.js.map +1 -0
  438. package/dist/tools/types.d.ts.map +1 -1
  439. package/dist/tools/utils.d.ts.map +1 -1
  440. package/dist/tools/utils.js +3 -8
  441. package/dist/tools/utils.js.map +1 -1
  442. package/dist/tools/web-fetch.d.ts +4 -4
  443. package/dist/tools/web-fetch.d.ts.map +1 -1
  444. package/dist/tools/web-fetch.js +32 -249
  445. package/dist/tools/web-fetch.js.map +1 -1
  446. package/dist/tools/web-fetch.test.js +3 -3
  447. package/dist/tools/web-fetch.test.js.map +1 -1
  448. package/dist/tools/web-search.d.ts.map +1 -1
  449. package/dist/tools/web-search.js +6 -10
  450. package/dist/tools/web-search.js.map +1 -1
  451. package/dist/tools/web-search.test.js +12 -14
  452. package/dist/tools/web-search.test.js.map +1 -1
  453. package/dist/types/messages.d.ts +29 -0
  454. package/dist/types/messages.d.ts.map +1 -0
  455. package/dist/types/messages.js +2 -0
  456. package/dist/types/messages.js.map +1 -0
  457. package/dist/utils/command-logger.d.ts.map +1 -1
  458. package/dist/utils/command-logger.js.map +1 -1
  459. package/dist/utils/command-safety/constants.d.ts.map +1 -1
  460. package/dist/utils/command-safety/constants.js +1 -9
  461. package/dist/utils/command-safety/constants.js.map +1 -1
  462. package/dist/utils/command-safety/find-helpers.d.ts.map +1 -1
  463. package/dist/utils/command-safety/find-helpers.js +4 -9
  464. package/dist/utils/command-safety/find-helpers.js.map +1 -1
  465. package/dist/utils/command-safety/handlers/find-handler.d.ts.map +1 -1
  466. package/dist/utils/command-safety/handlers/find-handler.js +3 -10
  467. package/dist/utils/command-safety/handlers/find-handler.js.map +1 -1
  468. package/dist/utils/command-safety/handlers/git-handler.d.ts.map +1 -1
  469. package/dist/utils/command-safety/handlers/git-handler.js +2 -4
  470. package/dist/utils/command-safety/handlers/git-handler.js.map +1 -1
  471. package/dist/utils/command-safety/handlers/index.d.ts +1 -1
  472. package/dist/utils/command-safety/handlers/index.d.ts.map +1 -1
  473. package/dist/utils/command-safety/handlers/index.js.map +1 -1
  474. package/dist/utils/command-safety/handlers/sed-handler.d.ts.map +1 -1
  475. package/dist/utils/command-safety/handlers/sed-handler.js.map +1 -1
  476. package/dist/utils/command-safety/handlers/types.d.ts.map +1 -1
  477. package/dist/utils/command-safety/index.d.ts.map +1 -1
  478. package/dist/utils/command-safety/index.js +4 -10
  479. package/dist/utils/command-safety/index.js.map +1 -1
  480. package/dist/utils/command-safety/path-analysis.d.ts.map +1 -1
  481. package/dist/utils/command-safety/path-analysis.js +9 -20
  482. package/dist/utils/command-safety/path-analysis.js.map +1 -1
  483. package/dist/utils/command-safety/utils.d.ts.map +1 -1
  484. package/dist/utils/command-safety/utils.js +1 -3
  485. package/dist/utils/command-safety/utils.js.map +1 -1
  486. package/dist/utils/command-safety.find.test.js +44 -87
  487. package/dist/utils/command-safety.find.test.js.map +1 -1
  488. package/dist/utils/command-safety.path.test.js +32 -67
  489. package/dist/utils/command-safety.path.test.js.map +1 -1
  490. package/dist/utils/conversation-event-handler.d.ts +4 -16
  491. package/dist/utils/conversation-event-handler.d.ts.map +1 -1
  492. package/dist/utils/conversation-event-handler.js +4 -8
  493. package/dist/utils/conversation-event-handler.js.map +1 -1
  494. package/dist/utils/conversation-event-handler.test.js +16 -18
  495. package/dist/utils/conversation-event-handler.test.js.map +1 -1
  496. package/dist/utils/conversation-utils.d.ts.map +1 -1
  497. package/dist/utils/conversation-utils.js +5 -8
  498. package/dist/utils/conversation-utils.js.map +1 -1
  499. package/dist/utils/conversation-utils.test.js +45 -44
  500. package/dist/utils/conversation-utils.test.js.map +1 -1
  501. package/dist/utils/diff.d.ts.map +1 -1
  502. package/dist/utils/diff.js +2 -4
  503. package/dist/utils/diff.js.map +1 -1
  504. package/dist/utils/diff.test.js +12 -12
  505. package/dist/utils/diff.test.js.map +1 -1
  506. package/dist/utils/error-helpers.d.ts.map +1 -1
  507. package/dist/utils/error-helpers.js +2 -6
  508. package/dist/utils/error-helpers.js.map +1 -1
  509. package/dist/utils/error-helpers.test.js +32 -32
  510. package/dist/utils/error-helpers.test.js.map +1 -1
  511. package/dist/utils/execute-shell.d.ts.map +1 -1
  512. package/dist/utils/execute-shell.js.map +1 -1
  513. package/dist/utils/execute-shell.test.js.map +1 -1
  514. package/dist/utils/extract-command-messages.d.ts.map +1 -1
  515. package/dist/utils/extract-command-messages.js +16 -21
  516. package/dist/utils/extract-command-messages.js.map +1 -1
  517. package/dist/utils/ink-render-options.d.ts.map +1 -1
  518. package/dist/utils/ink-render-options.js.map +1 -1
  519. package/dist/utils/log-viewer-filters.d.ts +29 -0
  520. package/dist/utils/log-viewer-filters.d.ts.map +1 -0
  521. package/dist/utils/log-viewer-filters.js +49 -0
  522. package/dist/utils/log-viewer-filters.js.map +1 -0
  523. package/dist/utils/log-viewer-filters.test.d.ts +2 -0
  524. package/dist/utils/log-viewer-filters.test.d.ts.map +1 -0
  525. package/dist/utils/log-viewer-filters.test.js +48 -0
  526. package/dist/utils/log-viewer-filters.test.js.map +1 -0
  527. package/dist/utils/message-buffer.d.ts.map +1 -1
  528. package/dist/utils/message-buffer.js.map +1 -1
  529. package/dist/utils/message-buffer.test.js +4 -4
  530. package/dist/utils/message-buffer.test.js.map +1 -1
  531. package/dist/utils/output-trim.d.ts.map +1 -1
  532. package/dist/utils/output-trim.js.map +1 -1
  533. package/dist/utils/provider-credentials.d.ts.map +1 -1
  534. package/dist/utils/provider-credentials.js +1 -1
  535. package/dist/utils/provider-credentials.js.map +1 -1
  536. package/dist/utils/provider-traffic-extractor.d.ts +18 -0
  537. package/dist/utils/provider-traffic-extractor.d.ts.map +1 -0
  538. package/dist/utils/provider-traffic-extractor.js +121 -0
  539. package/dist/utils/provider-traffic-extractor.js.map +1 -0
  540. package/dist/utils/provider-traffic-extractor.test.d.ts +2 -0
  541. package/dist/utils/provider-traffic-extractor.test.d.ts.map +1 -0
  542. package/dist/utils/provider-traffic-extractor.test.js +84 -0
  543. package/dist/utils/provider-traffic-extractor.test.js.map +1 -0
  544. package/dist/utils/settings-command.d.ts.map +1 -1
  545. package/dist/utils/settings-command.js +5 -12
  546. package/dist/utils/settings-command.js.map +1 -1
  547. package/dist/utils/ssh-config-parser.d.ts.map +1 -1
  548. package/dist/utils/ssh-config-parser.js.map +1 -1
  549. package/dist/utils/ssh-config-parser.test.js.map +1 -1
  550. package/dist/utils/streaming-session-factory.d.ts +33 -0
  551. package/dist/utils/streaming-session-factory.d.ts.map +1 -0
  552. package/dist/utils/streaming-session-factory.js +75 -0
  553. package/dist/utils/streaming-session-factory.js.map +1 -0
  554. package/dist/utils/streaming-session-factory.test.d.ts +2 -0
  555. package/dist/utils/streaming-session-factory.test.d.ts.map +1 -0
  556. package/dist/utils/streaming-session-factory.test.js +74 -0
  557. package/dist/utils/streaming-session-factory.test.js.map +1 -0
  558. package/dist/utils/streaming-updater.d.ts.map +1 -1
  559. package/dist/utils/streaming-updater.js.map +1 -1
  560. package/dist/utils/throttle.d.ts.map +1 -1
  561. package/dist/utils/throttle.js.map +1 -1
  562. package/dist/utils/token-usage.d.ts +16 -0
  563. package/dist/utils/token-usage.d.ts.map +1 -0
  564. package/dist/utils/token-usage.js +109 -0
  565. package/dist/utils/token-usage.js.map +1 -0
  566. package/dist/utils/token-usage.test.d.ts +2 -0
  567. package/dist/utils/token-usage.test.d.ts.map +1 -0
  568. package/dist/utils/token-usage.test.js +38 -0
  569. package/dist/utils/token-usage.test.js.map +1 -0
  570. package/dist/utils/trim-tool-output.d.ts +2 -0
  571. package/dist/utils/trim-tool-output.d.ts.map +1 -0
  572. package/dist/utils/trim-tool-output.js +52 -0
  573. package/dist/utils/trim-tool-output.js.map +1 -0
  574. package/package.json +117 -110
  575. package/{README.md → readme.md} +208 -136
@@ -14,8 +14,7 @@ export class HistoryService {
14
14
  loggingService;
15
15
  constructor(deps) {
16
16
  this.loggingService = deps.loggingService;
17
- this.historyFile =
18
- deps.historyFile || path.join(paths.log, 'history.json');
17
+ this.historyFile = deps.historyFile || path.join(paths.log, 'history.json');
19
18
  this.maxHistorySize = deps.settingsService.get('ui.historySize');
20
19
  this.load();
21
20
  }
@@ -27,9 +26,7 @@ export class HistoryService {
27
26
  if (fs.existsSync(this.historyFile)) {
28
27
  const data = fs.readFileSync(this.historyFile, 'utf-8');
29
28
  const parsed = JSON.parse(data);
30
- this.messages = Array.isArray(parsed.messages)
31
- ? parsed.messages
32
- : [];
29
+ this.messages = Array.isArray(parsed.messages) ? parsed.messages : [];
33
30
  }
34
31
  }
35
32
  catch (error) {
@@ -73,8 +70,7 @@ export class HistoryService {
73
70
  return;
74
71
  }
75
72
  // Remove duplicates (if the same message is already the most recent)
76
- if (this.messages.length > 0 &&
77
- this.messages[this.messages.length - 1] === message) {
73
+ if (this.messages.length > 0 && this.messages[this.messages.length - 1] === message) {
78
74
  return;
79
75
  }
80
76
  this.messages.push(message);
@@ -1 +1 @@
1
- {"version":3,"file":"history-service.js","sourceRoot":"","sources":["../../source/services/history-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"history-service.js","sourceRoot":"","sources":["../../source/services/history-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;AAMhC;;;GAGG;AACH,MAAM,OAAO,cAAc;IACjB,QAAQ,GAAa,EAAE,CAAC;IACxB,WAAW,CAAS;IACpB,cAAc,CAAS;IACvB,cAAc,CAAiB;IAEvC,YAAY,IAAgG;QAC1G,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC5E,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED;;OAEG;IACK,IAAI;QACV,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBACxD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAgB,CAAC;gBAC/C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mDAAmD;YACnD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,wBAAwB,EAAE;gBAClD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,QAAQ,EAAE,IAAI,CAAC,WAAW;aAC3B,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,IAAI;QACV,IAAI,CAAC;YACH,0BAA0B;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,CAAC;YAED,MAAM,IAAI,GAAgB;gBACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC;YAEF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,wBAAwB,EAAE;gBAClD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,QAAQ,EAAE,IAAI,CAAC,WAAW;gBAC1B,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,OAAe;QACxB,wCAAwC;QACxC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,qEAAqE;QACrE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YACpF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5B,sCAAsC;QACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,uBAAuB,GAAG,IAAI,cAAc,CAAC;IACjD,cAAc,EAAE,IAAI,cAAc,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;IAC7D,eAAe,EAAE,IAAI,CAAC,MAAM,mBAAmB;QAC7C,GAAG;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,uBAAuB;KAC1B,CAAC,EAAS;CACZ,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,GAAG,EAAE;IAC7B,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM;QAC/B,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS;QAChC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS;QAClC,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,SAAS;QACxC,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CACvC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,uBAAuB,EAAE;IAC/D,GAAG,CAAC,MAAM,EAAE,IAAI;QACd,+DAA+D;QAC/D,IAAI,iBAAiB,EAAE,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,MAAM,CAAC,IAA2B,CAAC,CAAC;YAClD,iEAAiE;YACjE,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,qEAAqE;QACrE,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC;QAE9D,MAAM,IAAI,KAAK,CACb,sEAAsE;YACpE,gBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM;YACvC,0DAA0D;YAC1D,qDAAqD;YACrD,kEAAkE;YAClE,iEAAiE;YACjE,+EAA+E,CAClF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { z } from 'zod';
2
+ export declare const LOG_CATEGORIES: readonly ["provider", "tool", "stream", "approval", "retry", "general"];
3
+ export type LogCategory = (typeof LOG_CATEGORIES)[number];
4
+ export declare const RuntimeLogSchema: z.ZodObject<{
5
+ timestamp: z.ZodString;
6
+ level: z.ZodString;
7
+ eventType: z.ZodString;
8
+ traceId: z.ZodString;
9
+ sessionId: z.ZodString;
10
+ messageId: z.ZodString;
11
+ provider: z.ZodString;
12
+ model: z.ZodString;
13
+ phase: z.ZodEnum<{
14
+ abort: "abort";
15
+ retry: "retry";
16
+ request_start: "request_start";
17
+ provider_response: "provider_response";
18
+ approval: "approval";
19
+ normalization: "normalization";
20
+ validation: "validation";
21
+ execution: "execution";
22
+ runtime: "runtime";
23
+ }>;
24
+ toolName: z.ZodOptional<z.ZodString>;
25
+ toolCallId: z.ZodOptional<z.ZodString>;
26
+ retryType: z.ZodOptional<z.ZodString>;
27
+ retryAttempt: z.ZodOptional<z.ZodNumber>;
28
+ errorCode: z.ZodOptional<z.ZodString>;
29
+ errorMessage: z.ZodOptional<z.ZodString>;
30
+ payloadRef: z.ZodOptional<z.ZodString>;
31
+ category: z.ZodOptional<z.ZodEnum<{
32
+ tool: "tool";
33
+ stream: "stream";
34
+ retry: "retry";
35
+ provider: "provider";
36
+ approval: "approval";
37
+ general: "general";
38
+ }>>;
39
+ }, z.core.$loose>;
40
+ export declare const resolveLogCategory: ({ eventType, explicitCategory, }: {
41
+ eventType?: unknown;
42
+ explicitCategory?: unknown;
43
+ }) => LogCategory;
44
+ export declare const buildRuntimeLogRecord: ({ timestamp, level, correlationId, meta, }: {
45
+ timestamp?: string;
46
+ level: string;
47
+ correlationId?: string;
48
+ meta?: Record<string, unknown>;
49
+ }) => Record<string, unknown>;
50
+ export declare const parseCategoryFilter: (raw: string | undefined) => Set<LogCategory> | null;
51
+ export declare const shouldLogForCategory: ({ level, category, enabledCategories, }: {
52
+ level: string;
53
+ category: LogCategory;
54
+ enabledCategories: Set<LogCategory> | null;
55
+ }) => boolean;
56
+ export declare const shouldIncludeVerbosePayload: ({ level, verbosePayloads, }: {
57
+ level: string;
58
+ verbosePayloads: boolean;
59
+ }) => boolean;
60
+ export declare const shouldSampleLog: ({ level, sampleRate, randomValue, }: {
61
+ level: string;
62
+ sampleRate: number;
63
+ randomValue: number;
64
+ }) => boolean;
65
+ export declare const createInvalidToolCallDiagnostic: ({ toolName, toolCallId, rawPayload, normalizedToolCall, validationErrors, traceId, retryContext, }: {
66
+ toolName: string;
67
+ toolCallId: string;
68
+ rawPayload: string;
69
+ normalizedToolCall: Record<string, unknown>;
70
+ validationErrors: string[];
71
+ traceId: string;
72
+ retryContext: Record<string, unknown>;
73
+ }) => Record<string, unknown>;
74
+ //# sourceMappingURL=logging-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging-contract.d.ts","sourceRoot":"","sources":["../../source/services/logging-contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,cAAc,yEAA0E,CAAC;AACtG,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAc1D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAoBb,CAAC;AAcjB,eAAO,MAAM,kBAAkB,GAAI,kCAGhC;IACD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,KAAG,WAgBH,CAAC;AAwBF,eAAO,MAAM,qBAAqB,GAAI,4CAKnC;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CA0BzB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,KAAK,MAAM,GAAG,SAAS,KAAG,GAAG,CAAC,WAAW,CAAC,GAAG,IAehF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,yCAIlC;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,WAAW,CAAC;IACtB,iBAAiB,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;CAC5C,KAAG,OAUH,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,6BAGzC;IACD,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;CAC1B,KAAG,OAKH,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,qCAI7B;IACD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,KAAG,OAcH,CAAC;AAEF,eAAO,MAAM,+BAA+B,GAAI,oGAQ7C;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAezB,CAAC"}
@@ -0,0 +1,157 @@
1
+ import { z } from 'zod';
2
+ export const LOG_CATEGORIES = ['provider', 'tool', 'stream', 'approval', 'retry', 'general'];
3
+ const LOG_PHASES = [
4
+ 'request_start',
5
+ 'provider_response',
6
+ 'normalization',
7
+ 'validation',
8
+ 'approval',
9
+ 'execution',
10
+ 'retry',
11
+ 'abort',
12
+ 'runtime',
13
+ ];
14
+ export const RuntimeLogSchema = z
15
+ .object({
16
+ timestamp: z.string().min(1),
17
+ level: z.string().min(1),
18
+ eventType: z.string().min(1),
19
+ traceId: z.string().min(1),
20
+ sessionId: z.string().min(1),
21
+ messageId: z.string().min(1),
22
+ provider: z.string().min(1),
23
+ model: z.string().min(1),
24
+ phase: z.enum(LOG_PHASES),
25
+ toolName: z.string().min(1).optional(),
26
+ toolCallId: z.string().min(1).optional(),
27
+ retryType: z.string().min(1).optional(),
28
+ retryAttempt: z.number().int().nonnegative().optional(),
29
+ errorCode: z.string().min(1).optional(),
30
+ errorMessage: z.string().min(1).optional(),
31
+ payloadRef: z.string().min(1).optional(),
32
+ category: z.enum(LOG_CATEGORIES).optional(),
33
+ })
34
+ .passthrough();
35
+ const looksLikeUuid = (value) => /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);
36
+ const EVENT_CATEGORY_PREFIXES = [
37
+ { prefix: 'provider.', category: 'provider' },
38
+ { prefix: 'tool_call.', category: 'tool' },
39
+ { prefix: 'tool.', category: 'tool' },
40
+ { prefix: 'stream.', category: 'stream' },
41
+ { prefix: 'approval.', category: 'approval' },
42
+ { prefix: 'retry.', category: 'retry' },
43
+ ];
44
+ export const resolveLogCategory = ({ eventType, explicitCategory, }) => {
45
+ if (typeof explicitCategory === 'string' && LOG_CATEGORIES.includes(explicitCategory)) {
46
+ return explicitCategory;
47
+ }
48
+ if (typeof eventType !== 'string' || !eventType.trim()) {
49
+ return 'general';
50
+ }
51
+ for (const entry of EVENT_CATEGORY_PREFIXES) {
52
+ if (eventType.startsWith(entry.prefix)) {
53
+ return entry.category;
54
+ }
55
+ }
56
+ return 'general';
57
+ };
58
+ const toNonEmptyString = (value, fallback) => {
59
+ if (typeof value === 'string' && value.trim()) {
60
+ return value.trim();
61
+ }
62
+ return fallback;
63
+ };
64
+ const toPhase = (value) => {
65
+ if (typeof value === 'string' && LOG_PHASES.includes(value)) {
66
+ return value;
67
+ }
68
+ return 'runtime';
69
+ };
70
+ const buildMessageId = (meta) => {
71
+ const candidate = meta.messageId;
72
+ if (typeof candidate === 'string' && candidate.trim()) {
73
+ return candidate.trim();
74
+ }
75
+ return `msg-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
76
+ };
77
+ export const buildRuntimeLogRecord = ({ timestamp, level, correlationId, meta = {}, }) => {
78
+ const traceCandidate = toNonEmptyString(meta.traceId ?? correlationId, 'trace-unknown');
79
+ const eventType = toNonEmptyString(meta.eventType, 'log.message');
80
+ const category = resolveLogCategory({ eventType, explicitCategory: meta.category });
81
+ const provider = toNonEmptyString(meta.provider, 'unknown');
82
+ const model = toNonEmptyString(meta.model, 'unknown');
83
+ const record = {
84
+ ...meta,
85
+ timestamp: timestamp ?? new Date().toISOString(),
86
+ level,
87
+ eventType,
88
+ traceId: traceCandidate,
89
+ sessionId: toNonEmptyString(meta.sessionId, 'session-unknown'),
90
+ messageId: buildMessageId(meta),
91
+ provider,
92
+ model,
93
+ phase: toPhase(meta.phase),
94
+ category,
95
+ };
96
+ if (!looksLikeUuid(traceCandidate) && correlationId && looksLikeUuid(correlationId)) {
97
+ record.traceId = correlationId;
98
+ }
99
+ return record;
100
+ };
101
+ export const parseCategoryFilter = (raw) => {
102
+ if (!raw || !raw.trim()) {
103
+ return null;
104
+ }
105
+ const values = raw
106
+ .split(',')
107
+ .map((part) => part.trim())
108
+ .filter((part) => LOG_CATEGORIES.includes(part));
109
+ if (!values.length) {
110
+ return null;
111
+ }
112
+ return new Set(values);
113
+ };
114
+ export const shouldLogForCategory = ({ level, category, enabledCategories, }) => {
115
+ if (!enabledCategories || enabledCategories.size === 0) {
116
+ return true;
117
+ }
118
+ if (level === 'error' || level === 'warn') {
119
+ return true;
120
+ }
121
+ return enabledCategories.has(category);
122
+ };
123
+ export const shouldIncludeVerbosePayload = ({ level, verbosePayloads, }) => {
124
+ if (verbosePayloads) {
125
+ return true;
126
+ }
127
+ return level === 'error';
128
+ };
129
+ export const shouldSampleLog = ({ level, sampleRate, randomValue, }) => {
130
+ if (level === 'error' || level === 'warn') {
131
+ return true;
132
+ }
133
+ if (!Number.isFinite(sampleRate) || sampleRate >= 1) {
134
+ return true;
135
+ }
136
+ if (sampleRate <= 0) {
137
+ return false;
138
+ }
139
+ return randomValue <= sampleRate;
140
+ };
141
+ export const createInvalidToolCallDiagnostic = ({ toolName, toolCallId, rawPayload, normalizedToolCall, validationErrors, traceId, retryContext, }) => {
142
+ return {
143
+ eventType: 'tool_call.parse_failed',
144
+ category: 'tool',
145
+ phase: 'validation',
146
+ errorCode: 'INVALID_TOOL_CALL_FORMAT',
147
+ errorMessage: 'Invalid tool call argument payload',
148
+ toolName,
149
+ toolCallId,
150
+ traceId,
151
+ rawPayloadSnippet: rawPayload.slice(0, 500),
152
+ normalizedToolCall,
153
+ validationErrors,
154
+ retryContext,
155
+ };
156
+ };
157
+ //# sourceMappingURL=logging-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging-contract.js","sourceRoot":"","sources":["../../source/services/logging-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=logging-contract.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging-contract.test.d.ts","sourceRoot":"","sources":["../../source/services/logging-contract.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,66 @@
1
+ import test from 'ava';
2
+ import { RuntimeLogSchema, buildRuntimeLogRecord, createInvalidToolCallDiagnostic, parseCategoryFilter, resolveLogCategory, shouldIncludeVerbosePayload, shouldLogForCategory, shouldSampleLog, } from './logging-contract.js';
3
+ test('buildRuntimeLogRecord produces canonical required fields', (t) => {
4
+ const record = buildRuntimeLogRecord({
5
+ level: 'info',
6
+ correlationId: 'trace-123',
7
+ meta: {
8
+ eventType: 'stream.started',
9
+ phase: 'request_start',
10
+ sessionId: 'session-1',
11
+ provider: 'openai',
12
+ model: 'gpt-5',
13
+ messageId: 'msg-1',
14
+ },
15
+ });
16
+ const parsed = RuntimeLogSchema.parse(record);
17
+ t.is(parsed.traceId, 'trace-123');
18
+ t.is(parsed.eventType, 'stream.started');
19
+ t.is(parsed.phase, 'request_start');
20
+ t.is(parsed.category, 'stream');
21
+ });
22
+ test('parseCategoryFilter parses valid comma-separated categories', (t) => {
23
+ const parsed = parseCategoryFilter('retry, tool,invalid');
24
+ t.truthy(parsed);
25
+ t.true(parsed?.has('retry'));
26
+ t.true(parsed?.has('tool'));
27
+ t.false(parsed?.has('provider'));
28
+ });
29
+ test('shouldLogForCategory always keeps warn/error logs', (t) => {
30
+ const enabled = new Set(['tool']);
31
+ t.true(shouldLogForCategory({ level: 'warn', category: 'stream', enabledCategories: enabled }));
32
+ t.true(shouldLogForCategory({ level: 'error', category: 'stream', enabledCategories: enabled }));
33
+ t.false(shouldLogForCategory({ level: 'info', category: 'stream', enabledCategories: enabled }));
34
+ });
35
+ test('shouldIncludeVerbosePayload keeps payload only for error unless verbose', (t) => {
36
+ t.false(shouldIncludeVerbosePayload({ level: 'info', verbosePayloads: false }));
37
+ t.true(shouldIncludeVerbosePayload({ level: 'error', verbosePayloads: false }));
38
+ t.true(shouldIncludeVerbosePayload({ level: 'info', verbosePayloads: true }));
39
+ });
40
+ test('shouldSampleLog respects sample rate but never drops errors', (t) => {
41
+ t.false(shouldSampleLog({ level: 'debug', sampleRate: 0.2, randomValue: 0.9 }));
42
+ t.true(shouldSampleLog({ level: 'debug', sampleRate: 0.2, randomValue: 0.1 }));
43
+ t.true(shouldSampleLog({ level: 'error', sampleRate: 0, randomValue: 0.99 }));
44
+ });
45
+ test('resolveLogCategory infers category from event type prefix', (t) => {
46
+ t.is(resolveLogCategory({ eventType: 'retry.hallucination' }), 'retry');
47
+ t.is(resolveLogCategory({ eventType: 'tool_call.validation_failed' }), 'tool');
48
+ t.is(resolveLogCategory({ eventType: 'approval.required' }), 'approval');
49
+ t.is(resolveLogCategory({ eventType: 'something.else' }), 'general');
50
+ });
51
+ test('createInvalidToolCallDiagnostic returns a complete packet', (t) => {
52
+ const diagnostic = createInvalidToolCallDiagnostic({
53
+ toolName: 'shell',
54
+ toolCallId: 'call-7',
55
+ rawPayload: '{"command":',
56
+ normalizedToolCall: { toolName: 'shell', toolCallId: 'call-7' },
57
+ validationErrors: ['arguments must be valid JSON'],
58
+ traceId: 'trace-1',
59
+ retryContext: { hallucinationRetryCount: 1 },
60
+ });
61
+ t.is(diagnostic.eventType, 'tool_call.parse_failed');
62
+ t.is(diagnostic.errorCode, 'INVALID_TOOL_CALL_FORMAT');
63
+ t.deepEqual(diagnostic.validationErrors, ['arguments must be valid JSON']);
64
+ t.true(typeof diagnostic.rawPayloadSnippet === 'string');
65
+ });
66
+ //# sourceMappingURL=logging-contract.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging-contract.test.js","sourceRoot":"","sources":["../../source/services/logging-contract.test.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,10 @@ export declare class LoggingService {
24
24
  private debugLogging;
25
25
  private suppressConsoleOutput;
26
26
  private openrouterLogger;
27
+ private providerTrafficDir;
28
+ private enabledCategories;
29
+ private verbosePayloads;
30
+ private sampleRate;
27
31
  constructor(config?: LoggingServiceConfig);
28
32
  /**
29
33
  * Return the current effective log level for the logger
@@ -68,6 +72,7 @@ export declare class LoggingService {
68
72
  */
69
73
  getCorrelationId(): string | undefined;
70
74
  private log;
75
+ private writeProviderTrafficArtifact;
71
76
  private emitConsoleError;
72
77
  }
73
78
  export declare const loggingService: LoggingService;
@@ -1 +1 @@
1
- {"version":3,"file":"logging-service.d.ts","sourceRoot":"","sources":["../../source/services/logging-service.ts"],"names":[],"mappings":"AAuBA,UAAU,oBAAoB;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;;;;;;;;;GAUG;AACH,qBAAa,cAAc;;IACvB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,qBAAqB,CAAU;IACvC,OAAO,CAAC,gBAAgB,CAAkB;gBAE9B,MAAM,GAAE,oBAAyB;IAsK7C;;OAEG;IACH,WAAW,IAAI,MAAM;IAQrB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI9C;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAsChC;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAIxD;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAIvD;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAIvD;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAI3D;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAIxD,eAAe,CACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,IAAI;IAcP;;OAEG;IACH,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAI1B;;OAEG;IACH,gBAAgB,IAAI,MAAM,GAAG,SAAS;IAItC,OAAO,CAAC,GAAG;IA+BX,OAAO,CAAC,gBAAgB;CAM3B;AAgCD,eAAO,MAAM,cAAc,gBAyBzB,CAAC"}
1
+ {"version":3,"file":"logging-service.d.ts","sourceRoot":"","sources":["../../source/services/logging-service.ts"],"names":[],"mappings":"AAiCA,UAAU,oBAAoB;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;;;;;GAUG;AACH,qBAAa,cAAc;;IACzB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,qBAAqB,CAAU;IACvC,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,GAAE,oBAAyB;IAmJ7C;;OAEG;IACH,WAAW,IAAI,MAAM;IAQrB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI9C;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAgChC;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAIxD;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAIvD;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAIvD;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAI3D;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAIxD,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAYjF;;OAEG;IACH,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAI1B;;OAEG;IACH,gBAAgB,IAAI,MAAM,GAAG,SAAS;IAItC,OAAO,CAAC,GAAG;IAkDX,OAAO,CAAC,4BAA4B;IAyDpC,OAAO,CAAC,gBAAgB;CAMzB;AA8BD,eAAO,MAAM,cAAc,gBAyBzB,CAAC"}
@@ -3,6 +3,8 @@ import * as path from 'node:path';
3
3
  import * as fs from 'node:fs';
4
4
  import envPaths from 'env-paths';
5
5
  import DailyRotateFile from 'winston-daily-rotate-file';
6
+ import { RuntimeLogSchema, buildRuntimeLogRecord, parseCategoryFilter, shouldIncludeVerbosePayload, shouldLogForCategory, shouldSampleLog, } from './logging-contract.js';
7
+ import { extractProviderTrafficRecordFromRuntimeLog } from '../utils/provider-traffic-extractor.js';
6
8
  const LOG_LEVELS = {
7
9
  error: 0,
8
10
  warn: 1,
@@ -34,15 +36,24 @@ export class LoggingService {
34
36
  debugLogging;
35
37
  suppressConsoleOutput;
36
38
  openrouterLogger;
39
+ providerTrafficDir;
40
+ enabledCategories;
41
+ verbosePayloads;
42
+ sampleRate;
37
43
  constructor(config = {}) {
38
- const { logDir, logLevel = 'info', disableLogging, console: enableConsole = false, debugLogging = false, suppressConsoleOutput = true, } = config;
39
- const resolvedDisableLogging = disableLogging ??
40
- (parseBooleanEnv(process.env.DISABLE_LOGGING) ||
41
- Boolean(process.env.AVA));
44
+ const { logDir, logLevel = process.env.LOG_LEVEL || 'info', disableLogging, console: enableConsole = false, debugLogging = false, suppressConsoleOutput = true, } = config;
45
+ const resolvedDisableLogging = disableLogging ?? (parseBooleanEnv(process.env.DISABLE_LOGGING) || Boolean(process.env.AVA));
42
46
  this.debugLogging = debugLogging;
43
47
  this.suppressConsoleOutput = suppressConsoleOutput;
48
+ this.enabledCategories = parseCategoryFilter(process.env.LOG_CATEGORIES);
49
+ this.verbosePayloads = parseBooleanEnv(process.env.LOG_VERBOSE_PAYLOADS);
50
+ this.sampleRate = Number.parseFloat(process.env.LOG_SAMPLE_RATE ?? '1');
51
+ if (!Number.isFinite(this.sampleRate)) {
52
+ this.sampleRate = 1;
53
+ }
44
54
  // Determine log directory
45
55
  const finalLogDir = logDir || path.join(envPaths('term2').log, 'logs');
56
+ this.providerTrafficDir = path.join(finalLogDir, 'provider-traffic');
46
57
  // Create log directory if needed and logging is enabled
47
58
  if (!resolvedDisableLogging) {
48
59
  try {
@@ -91,12 +102,10 @@ export class LoggingService {
91
102
  levels: LOG_LEVELS,
92
103
  format: winston.format.combine(winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), winston.format.json()),
93
104
  defaultMeta: {},
94
- transports: transports.length > 0
95
- ? transports
96
- : [new winston.transports.Console({ silent: true })], // Fallback silent console
105
+ transports: transports.length > 0 ? transports : [new winston.transports.Console({ silent: true })], // Fallback silent console
97
106
  });
98
107
  // Add custom log levels to logger if they don't exist
99
- Object.keys(LOG_LEVELS).forEach(level => {
108
+ Object.keys(LOG_LEVELS).forEach((level) => {
100
109
  if (typeof this.logger[level] !== 'function') {
101
110
  this.logger[level] = (message, meta) => {
102
111
  this.logger.log(level, message, meta);
@@ -127,9 +136,8 @@ export class LoggingService {
127
136
  transports: [openrouterTransport],
128
137
  });
129
138
  // Add custom log levels
130
- Object.keys(LOG_LEVELS).forEach(level => {
131
- if (typeof this.openrouterLogger[level] !==
132
- 'function') {
139
+ Object.keys(LOG_LEVELS).forEach((level) => {
140
+ if (typeof this.openrouterLogger[level] !== 'function') {
133
141
  this.openrouterLogger[level] = (message, meta) => {
134
142
  this.openrouterLogger.log(level, message, meta);
135
143
  };
@@ -143,9 +151,7 @@ export class LoggingService {
143
151
  // Fallback
144
152
  this.openrouterLogger = winston.createLogger({
145
153
  levels: LOG_LEVELS,
146
- transports: [
147
- new winston.transports.Console({ silent: true }),
148
- ],
154
+ transports: [new winston.transports.Console({ silent: true })],
149
155
  });
150
156
  }
151
157
  }
@@ -267,15 +273,36 @@ export class LoggingService {
267
273
  log(level, message, meta) {
268
274
  try {
269
275
  const metadata = {
270
- ...meta,
276
+ ...(meta ?? {}),
271
277
  ...(this.correlationId && { correlationId: this.correlationId }),
272
278
  };
273
- if (this.logger &&
274
- typeof this.logger[level] === 'function') {
275
- this.logger[level](message, metadata);
279
+ const runtimeRecord = buildRuntimeLogRecord({
280
+ level,
281
+ correlationId: this.correlationId,
282
+ meta: metadata,
283
+ });
284
+ this.writeProviderTrafficArtifact(runtimeRecord, message);
285
+ const category = runtimeRecord.category ?? 'general';
286
+ if (!shouldLogForCategory({ level, category, enabledCategories: this.enabledCategories })) {
287
+ return;
288
+ }
289
+ if (!shouldSampleLog({ level, sampleRate: this.sampleRate, randomValue: Math.random() })) {
290
+ return;
291
+ }
292
+ if (!shouldIncludeVerbosePayload({ level, verbosePayloads: this.verbosePayloads })) {
293
+ delete runtimeRecord.payload;
294
+ }
295
+ const parsed = RuntimeLogSchema.safeParse(runtimeRecord);
296
+ if (!parsed.success) {
297
+ runtimeRecord.eventType = 'log.contract_validation_failed';
298
+ runtimeRecord.errorCode = 'LOG_SCHEMA_VALIDATION_FAILED';
299
+ runtimeRecord.errorMessage = parsed.error.issues.map((issue) => issue.message).join('; ');
300
+ }
301
+ if (this.logger && typeof this.logger[level] === 'function') {
302
+ this.logger[level](message, runtimeRecord);
276
303
  }
277
304
  else if (this.logger) {
278
- this.logger.log(level, message, metadata);
305
+ this.logger.log(level, message, runtimeRecord);
279
306
  }
280
307
  }
281
308
  catch (error) {
@@ -286,6 +313,52 @@ export class LoggingService {
286
313
  #log(level, message, meta) {
287
314
  this.log(level, message, meta);
288
315
  }
316
+ writeProviderTrafficArtifact(runtimeRecord, message) {
317
+ const trafficRecord = extractProviderTrafficRecordFromRuntimeLog({
318
+ ...runtimeRecord,
319
+ message,
320
+ });
321
+ if (!trafficRecord) {
322
+ return;
323
+ }
324
+ const sanitizeFilePart = (value) => value.replace(/[^a-zA-Z0-9._-]/g, '_');
325
+ const dateKey = (() => {
326
+ const timestamp = String(trafficRecord.timestamp ?? '');
327
+ const matched = timestamp.match(/^(\d{4}-\d{2}-\d{2})/);
328
+ if (matched?.[1]) {
329
+ return matched[1];
330
+ }
331
+ return new Date().toISOString().slice(0, 10);
332
+ })();
333
+ const timestampKey = sanitizeFilePart(String(trafficRecord.timestamp || new Date().toISOString()).replace(/\s+/g, 'T'));
334
+ const traceKey = sanitizeFilePart(trafficRecord.traceId);
335
+ const messageId = sanitizeFilePart(String(runtimeRecord.messageId ?? `msg-${Date.now()}`));
336
+ const traceDir = path.join(this.providerTrafficDir, dateKey, traceKey);
337
+ const fileName = `${timestampKey}-${messageId}-${trafficRecord.direction}.json`;
338
+ const filePath = path.join(traceDir, fileName);
339
+ const artifact = {
340
+ ...trafficRecord,
341
+ eventType: runtimeRecord.eventType,
342
+ messageId: runtimeRecord.messageId,
343
+ file: path.join(traceKey, fileName),
344
+ };
345
+ try {
346
+ fs.mkdirSync(traceDir, { recursive: true });
347
+ fs.writeFileSync(filePath, `${JSON.stringify(artifact, null, 2)}\n`, 'utf8');
348
+ const indexPath = path.join(this.providerTrafficDir, dateKey, 'index.ndjson');
349
+ fs.appendFileSync(indexPath, `${JSON.stringify({
350
+ traceId: trafficRecord.traceId,
351
+ timestamp: trafficRecord.timestamp,
352
+ direction: trafficRecord.direction,
353
+ eventType: runtimeRecord.eventType,
354
+ messageId: runtimeRecord.messageId,
355
+ file: path.join(traceKey, fileName),
356
+ })}\n`, 'utf8');
357
+ }
358
+ catch (error) {
359
+ this.emitConsoleError(`[LoggingService] Failed to write provider traffic artifact: ${error.message}`);
360
+ }
361
+ }
289
362
  emitConsoleError(message) {
290
363
  if (!this.debugLogging || this.suppressConsoleOutput) {
291
364
  return;
@@ -314,8 +387,7 @@ const isTestEnvironment = () => {
314
387
  * It's only allowed in test files for backwards compatibility.
315
388
  */
316
389
  const _loggingServiceInstance = new LoggingService({
317
- disableLogging: parseBooleanEnv(process.env.DISABLE_LOGGING) ||
318
- Boolean(process.env.AVA),
390
+ disableLogging: parseBooleanEnv(process.env.DISABLE_LOGGING) || Boolean(process.env.AVA),
319
391
  debugLogging: parseBooleanEnv(process.env.DEBUG_LOGGING),
320
392
  });
321
393
  export const loggingService = new Proxy(_loggingServiceInstance, {