@qduc/term2 0.12.0 → 0.14.0

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 (635) hide show
  1. package/README.md +6 -1
  2. package/dist/agent.d.ts +3 -0
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +38 -14
  5. package/dist/agent.js.map +1 -1
  6. package/dist/app.d.ts.map +1 -1
  7. package/dist/app.js +91 -17
  8. package/dist/app.js.map +1 -1
  9. package/dist/cli.js +34 -23
  10. package/dist/cli.js.map +1 -1
  11. package/dist/commands/auto-approve-command.d.ts.map +1 -1
  12. package/dist/commands/auto-approve-command.js +12 -4
  13. package/dist/commands/auto-approve-command.js.map +1 -1
  14. package/dist/commands/compact-command.d.ts +6 -0
  15. package/dist/commands/compact-command.d.ts.map +1 -0
  16. package/dist/commands/compact-command.js +12 -0
  17. package/dist/commands/compact-command.js.map +1 -0
  18. package/dist/commands/copy-command.d.ts +3 -1
  19. package/dist/commands/copy-command.d.ts.map +1 -1
  20. package/dist/commands/copy-command.js +36 -9
  21. package/dist/commands/copy-command.js.map +1 -1
  22. package/dist/commands/sandbox-command.d.ts.map +1 -1
  23. package/dist/commands/sandbox-command.js +6 -1
  24. package/dist/commands/sandbox-command.js.map +1 -1
  25. package/dist/components/InputBox.d.ts +1 -2
  26. package/dist/components/InputBox.d.ts.map +1 -1
  27. package/dist/components/InputBox.js +5 -1
  28. package/dist/components/InputBox.js.map +1 -1
  29. package/dist/components/input/ApplicationInputSurface.d.ts +7 -2
  30. package/dist/components/input/ApplicationInputSurface.d.ts.map +1 -1
  31. package/dist/components/input/ApplicationInputSurface.js +7 -1
  32. package/dist/components/input/ApplicationInputSurface.js.map +1 -1
  33. package/dist/components/input/CopyMenuSession.d.ts +16 -0
  34. package/dist/components/input/CopyMenuSession.d.ts.map +1 -0
  35. package/dist/components/input/CopyMenuSession.js +49 -0
  36. package/dist/components/input/CopyMenuSession.js.map +1 -0
  37. package/dist/components/input/FirstRunSetupPrompt.d.ts +9 -0
  38. package/dist/components/input/FirstRunSetupPrompt.d.ts.map +1 -0
  39. package/dist/components/input/FirstRunSetupPrompt.js +20 -0
  40. package/dist/components/input/FirstRunSetupPrompt.js.map +1 -0
  41. package/dist/components/input/MentorPoolMenuSession.d.ts +9 -0
  42. package/dist/components/input/MentorPoolMenuSession.d.ts.map +1 -0
  43. package/dist/components/input/MentorPoolMenuSession.js +131 -0
  44. package/dist/components/input/MentorPoolMenuSession.js.map +1 -0
  45. package/dist/components/input/MenuSurface.d.ts.map +1 -1
  46. package/dist/components/input/MenuSurface.js +16 -2
  47. package/dist/components/input/MenuSurface.js.map +1 -1
  48. package/dist/components/input/ModelMenuSession.d.ts.map +1 -1
  49. package/dist/components/input/ModelMenuSession.js +11 -1
  50. package/dist/components/input/ModelMenuSession.js.map +1 -1
  51. package/dist/components/input/ProviderMenuSession.d.ts.map +1 -1
  52. package/dist/components/input/ProviderMenuSession.js +8 -2
  53. package/dist/components/input/ProviderMenuSession.js.map +1 -1
  54. package/dist/components/input/SettingsMenuSession.d.ts.map +1 -1
  55. package/dist/components/input/SettingsMenuSession.js +35 -22
  56. package/dist/components/input/SettingsMenuSession.js.map +1 -1
  57. package/dist/components/input/SkillsMenuSession.d.ts +3 -0
  58. package/dist/components/input/SkillsMenuSession.d.ts.map +1 -1
  59. package/dist/components/input/SkillsMenuSession.js +6 -12
  60. package/dist/components/input/SkillsMenuSession.js.map +1 -1
  61. package/dist/components/input/SlashMenuSession.d.ts +11 -3
  62. package/dist/components/input/SlashMenuSession.d.ts.map +1 -1
  63. package/dist/components/input/SlashMenuSession.js +54 -42
  64. package/dist/components/input/SlashMenuSession.js.map +1 -1
  65. package/dist/components/input/menu-controller.d.ts.map +1 -1
  66. package/dist/components/input/menu-controller.js +18 -1
  67. package/dist/components/input/menu-controller.js.map +1 -1
  68. package/dist/components/input/menu-registry.d.ts.map +1 -1
  69. package/dist/components/input/menu-registry.js +4 -0
  70. package/dist/components/input/menu-registry.js.map +1 -1
  71. package/dist/components/input/menu-types.d.ts +12 -0
  72. package/dist/components/input/menu-types.d.ts.map +1 -1
  73. package/dist/components/input/triggers.d.ts.map +1 -1
  74. package/dist/components/input/triggers.js +33 -0
  75. package/dist/components/input/triggers.js.map +1 -1
  76. package/dist/components/layout/BackgroundTaskManager.d.ts.map +1 -1
  77. package/dist/components/layout/BackgroundTaskManager.js +28 -10
  78. package/dist/components/layout/BackgroundTaskManager.js.map +1 -1
  79. package/dist/components/layout/BackgroundTasksPanel.d.ts +4 -1
  80. package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -1
  81. package/dist/components/layout/BackgroundTasksPanel.js +58 -12
  82. package/dist/components/layout/BackgroundTasksPanel.js.map +1 -1
  83. package/dist/components/layout/BottomArea.d.ts +16 -2
  84. package/dist/components/layout/BottomArea.d.ts.map +1 -1
  85. package/dist/components/layout/BottomArea.js +7 -4
  86. package/dist/components/layout/BottomArea.js.map +1 -1
  87. package/dist/components/layout/StatusBar.d.ts.map +1 -1
  88. package/dist/components/layout/StatusBar.js +66 -51
  89. package/dist/components/layout/StatusBar.js.map +1 -1
  90. package/dist/components/menu/CopyMenu.d.ts +10 -0
  91. package/dist/components/menu/CopyMenu.d.ts.map +1 -0
  92. package/dist/components/menu/CopyMenu.js +20 -0
  93. package/dist/components/menu/CopyMenu.js.map +1 -0
  94. package/dist/components/menu/MentorPoolSelectionMenu.d.ts +13 -0
  95. package/dist/components/menu/MentorPoolSelectionMenu.d.ts.map +1 -0
  96. package/dist/components/menu/MentorPoolSelectionMenu.js +98 -0
  97. package/dist/components/menu/MentorPoolSelectionMenu.js.map +1 -0
  98. package/dist/components/menu/ModelSelectionMenu.d.ts +2 -0
  99. package/dist/components/menu/ModelSelectionMenu.d.ts.map +1 -1
  100. package/dist/components/menu/ModelSelectionMenu.js +26 -7
  101. package/dist/components/menu/ModelSelectionMenu.js.map +1 -1
  102. package/dist/components/menu/ProviderSelectionMenu.d.ts +1 -0
  103. package/dist/components/menu/ProviderSelectionMenu.d.ts.map +1 -1
  104. package/dist/components/menu/ProviderSelectionMenu.js +12 -4
  105. package/dist/components/menu/ProviderSelectionMenu.js.map +1 -1
  106. package/dist/components/menu/SlashCommandMenu.d.ts.map +1 -1
  107. package/dist/components/menu/SlashCommandMenu.js +12 -9
  108. package/dist/components/menu/SlashCommandMenu.js.map +1 -1
  109. package/dist/components/message/CommandMessage.js +4 -0
  110. package/dist/components/message/CommandMessage.js.map +1 -1
  111. package/dist/components/message/SubagentActivityMessage.d.ts +1 -0
  112. package/dist/components/message/SubagentActivityMessage.d.ts.map +1 -1
  113. package/dist/components/message/SubagentActivityMessage.js +14 -1
  114. package/dist/components/message/SubagentActivityMessage.js.map +1 -1
  115. package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
  116. package/dist/components/prompt/ApprovalPrompt.js +0 -25
  117. package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
  118. package/dist/context/InputContext.d.ts +1 -1
  119. package/dist/context/InputContext.d.ts.map +1 -1
  120. package/dist/context/InputContext.js +4 -0
  121. package/dist/context/InputContext.js.map +1 -1
  122. package/dist/contracts/application-stream.d.ts +13 -0
  123. package/dist/contracts/application-stream.d.ts.map +1 -1
  124. package/dist/contracts/provider-input.d.ts +15 -0
  125. package/dist/contracts/provider-input.d.ts.map +1 -1
  126. package/dist/contracts/provider-input.js +6 -1
  127. package/dist/contracts/provider-input.js.map +1 -1
  128. package/dist/hooks/conversation-ui-reducer.d.ts +6 -0
  129. package/dist/hooks/conversation-ui-reducer.d.ts.map +1 -1
  130. package/dist/hooks/conversation-ui-reducer.js +3 -0
  131. package/dist/hooks/conversation-ui-reducer.js.map +1 -1
  132. package/dist/hooks/settings-completion-config.d.ts.map +1 -1
  133. package/dist/hooks/settings-completion-config.js +12 -2
  134. package/dist/hooks/settings-completion-config.js.map +1 -1
  135. package/dist/hooks/use-app-commands.d.ts +4 -1
  136. package/dist/hooks/use-app-commands.d.ts.map +1 -1
  137. package/dist/hooks/use-app-commands.js +6 -2
  138. package/dist/hooks/use-app-commands.js.map +1 -1
  139. package/dist/hooks/use-app-keyboard-shortcuts.d.ts +7 -1
  140. package/dist/hooks/use-app-keyboard-shortcuts.d.ts.map +1 -1
  141. package/dist/hooks/use-app-keyboard-shortcuts.js +77 -7
  142. package/dist/hooks/use-app-keyboard-shortcuts.js.map +1 -1
  143. package/dist/hooks/use-conversation.d.ts +6 -2
  144. package/dist/hooks/use-conversation.d.ts.map +1 -1
  145. package/dist/hooks/use-conversation.js +21 -4
  146. package/dist/hooks/use-conversation.js.map +1 -1
  147. package/dist/hooks/use-debounced-value.d.ts +13 -0
  148. package/dist/hooks/use-debounced-value.d.ts.map +1 -0
  149. package/dist/hooks/use-debounced-value.js +27 -0
  150. package/dist/hooks/use-debounced-value.js.map +1 -0
  151. package/dist/hooks/use-first-run-setup.d.ts +24 -0
  152. package/dist/hooks/use-first-run-setup.d.ts.map +1 -0
  153. package/dist/hooks/use-first-run-setup.js +114 -0
  154. package/dist/hooks/use-first-run-setup.js.map +1 -0
  155. package/dist/hooks/use-mentor-pool-selection.d.ts +103 -0
  156. package/dist/hooks/use-mentor-pool-selection.d.ts.map +1 -0
  157. package/dist/hooks/use-mentor-pool-selection.js +642 -0
  158. package/dist/hooks/use-mentor-pool-selection.js.map +1 -0
  159. package/dist/hooks/use-model-selection.d.ts +1 -0
  160. package/dist/hooks/use-model-selection.d.ts.map +1 -1
  161. package/dist/hooks/use-model-selection.js +44 -1
  162. package/dist/hooks/use-model-selection.js.map +1 -1
  163. package/dist/hooks/use-provider-selection.d.ts +5 -1
  164. package/dist/hooks/use-provider-selection.d.ts.map +1 -1
  165. package/dist/hooks/use-provider-selection.js +37 -12
  166. package/dist/hooks/use-provider-selection.js.map +1 -1
  167. package/dist/hooks/use-slash-commands.d.ts +0 -1
  168. package/dist/hooks/use-slash-commands.d.ts.map +1 -1
  169. package/dist/hooks/use-slash-commands.js +1 -9
  170. package/dist/hooks/use-slash-commands.js.map +1 -1
  171. package/dist/lib/agent-chat-service.d.ts +3 -6
  172. package/dist/lib/agent-chat-service.d.ts.map +1 -1
  173. package/dist/lib/agent-chat-service.js +20 -6
  174. package/dist/lib/agent-chat-service.js.map +1 -1
  175. package/dist/lib/agent-client.d.ts +20 -2
  176. package/dist/lib/agent-client.d.ts.map +1 -1
  177. package/dist/lib/agent-client.js +147 -3
  178. package/dist/lib/agent-client.js.map +1 -1
  179. package/dist/lib/agent-configuration.d.ts +3 -0
  180. package/dist/lib/agent-configuration.d.ts.map +1 -1
  181. package/dist/lib/agent-configuration.js +5 -0
  182. package/dist/lib/agent-configuration.js.map +1 -1
  183. package/dist/lib/agent-factory.d.ts +3 -0
  184. package/dist/lib/agent-factory.d.ts.map +1 -1
  185. package/dist/lib/agent-factory.js +15 -6
  186. package/dist/lib/agent-factory.js.map +1 -1
  187. package/dist/lib/input-owner.d.ts +3 -0
  188. package/dist/lib/input-owner.d.ts.map +1 -1
  189. package/dist/lib/input-owner.js +5 -0
  190. package/dist/lib/input-owner.js.map +1 -1
  191. package/dist/lib/subagent-bridge.d.ts +2 -0
  192. package/dist/lib/subagent-bridge.d.ts.map +1 -1
  193. package/dist/lib/subagent-bridge.js +4 -1
  194. package/dist/lib/subagent-bridge.js.map +1 -1
  195. package/dist/prompts/background-shell.d.ts +3 -0
  196. package/dist/prompts/background-shell.d.ts.map +1 -0
  197. package/dist/prompts/background-shell.js +11 -0
  198. package/dist/prompts/background-shell.js.map +1 -0
  199. package/dist/prompts/background-shell.ts +10 -0
  200. package/dist/prompts/context-compaction.d.ts +4 -0
  201. package/dist/prompts/context-compaction.d.ts.map +1 -0
  202. package/dist/prompts/context-compaction.js +18 -0
  203. package/dist/prompts/context-compaction.js.map +1 -0
  204. package/dist/prompts/context-compaction.ts +23 -0
  205. package/dist/prompts/explorer-delegation-contract.test.ts +22 -0
  206. package/dist/prompts/gpt-5.6.md +1 -1
  207. package/dist/prompts/kimi.md +1 -1
  208. package/dist/prompts/orchestrator-prompt.test.ts +7 -0
  209. package/dist/prompts/orchestrator.md +1 -1
  210. package/dist/prompts/plan-mode-info.md +2 -2
  211. package/dist/prompts/prompt-constructor.d.ts +1 -0
  212. package/dist/prompts/prompt-constructor.d.ts.map +1 -1
  213. package/dist/prompts/prompt-constructor.js +5 -1
  214. package/dist/prompts/prompt-constructor.js.map +1 -1
  215. package/dist/prompts/prompt-constructor.test.ts +16 -1
  216. package/dist/prompts/prompt-constructor.ts +7 -0
  217. package/dist/prompts/subagent-delegation.d.ts.map +1 -1
  218. package/dist/prompts/subagent-delegation.js +5 -3
  219. package/dist/prompts/subagent-delegation.js.map +1 -1
  220. package/dist/prompts/subagent-delegation.test.ts +10 -0
  221. package/dist/prompts/subagent-delegation.ts +5 -3
  222. package/dist/prompts/subagents/explorer.md +10 -5
  223. package/dist/prompts/subagents/librarian.md +1 -1
  224. package/dist/prompts/subagents/worker.md +2 -2
  225. package/dist/providers/aborted-stream-recorder.d.ts +20 -0
  226. package/dist/providers/aborted-stream-recorder.d.ts.map +1 -0
  227. package/dist/providers/aborted-stream-recorder.js +63 -0
  228. package/dist/providers/aborted-stream-recorder.js.map +1 -0
  229. package/dist/providers/codex-auth.d.ts +6 -0
  230. package/dist/providers/codex-auth.d.ts.map +1 -0
  231. package/dist/providers/codex-auth.js +35 -0
  232. package/dist/providers/codex-auth.js.map +1 -0
  233. package/dist/providers/codex-responses-model.d.ts +7 -2
  234. package/dist/providers/codex-responses-model.d.ts.map +1 -1
  235. package/dist/providers/codex-responses-model.js +88 -48
  236. package/dist/providers/codex-responses-model.js.map +1 -1
  237. package/dist/providers/codex.provider.d.ts +5 -3
  238. package/dist/providers/codex.provider.d.ts.map +1 -1
  239. package/dist/providers/codex.provider.js +27 -39
  240. package/dist/providers/codex.provider.js.map +1 -1
  241. package/dist/providers/model-catalog/catalog.d.ts +35 -2
  242. package/dist/providers/model-catalog/catalog.d.ts.map +1 -1
  243. package/dist/providers/model-catalog/catalog.generated.d.ts +406 -166
  244. package/dist/providers/model-catalog/catalog.generated.d.ts.map +1 -1
  245. package/dist/providers/model-catalog/catalog.generated.js +406 -166
  246. package/dist/providers/model-catalog/catalog.generated.js.map +1 -1
  247. package/dist/providers/model-catalog/catalog.js +93 -29
  248. package/dist/providers/model-catalog/catalog.js.map +1 -1
  249. package/dist/providers/openai-chat-completions-model.d.ts +2 -1
  250. package/dist/providers/openai-chat-completions-model.d.ts.map +1 -1
  251. package/dist/providers/openai-chat-completions-model.js +223 -53
  252. package/dist/providers/openai-chat-completions-model.js.map +1 -1
  253. package/dist/providers/openai-compatible-lazy.d.ts.map +1 -1
  254. package/dist/providers/openai-compatible-lazy.js +2 -1
  255. package/dist/providers/openai-compatible-lazy.js.map +1 -1
  256. package/dist/providers/openai-compatible-middleware.d.ts.map +1 -1
  257. package/dist/providers/openai-compatible-middleware.js +1 -13
  258. package/dist/providers/openai-compatible-middleware.js.map +1 -1
  259. package/dist/providers/openai-compatible-response-normalizer.d.ts +5 -4
  260. package/dist/providers/openai-compatible-response-normalizer.d.ts.map +1 -1
  261. package/dist/providers/openai-compatible-response-normalizer.js +6 -17
  262. package/dist/providers/openai-compatible-response-normalizer.js.map +1 -1
  263. package/dist/providers/openai-compatible.provider.d.ts +1 -0
  264. package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
  265. package/dist/providers/openai-compatible.provider.js +13 -4
  266. package/dist/providers/openai-compatible.provider.js.map +1 -1
  267. package/dist/providers/openai-responses-model.d.ts +9 -1
  268. package/dist/providers/openai-responses-model.d.ts.map +1 -1
  269. package/dist/providers/openai-responses-model.js +34 -12
  270. package/dist/providers/openai-responses-model.js.map +1 -1
  271. package/dist/providers/provider-service.d.ts +1 -0
  272. package/dist/providers/provider-service.d.ts.map +1 -1
  273. package/dist/providers/provider-service.js +4 -0
  274. package/dist/providers/provider-service.js.map +1 -1
  275. package/dist/scripts/eval-context-compaction/runner.d.ts +2 -0
  276. package/dist/scripts/eval-context-compaction/runner.d.ts.map +1 -0
  277. package/dist/scripts/eval-context-compaction/runner.js +159 -0
  278. package/dist/scripts/eval-context-compaction/runner.js.map +1 -0
  279. package/dist/services/agent-runtime/application-run-loop.d.ts +30 -0
  280. package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -1
  281. package/dist/services/agent-runtime/application-run-loop.js +251 -107
  282. package/dist/services/agent-runtime/application-run-loop.js.map +1 -1
  283. package/dist/services/agent-runtime/context-compaction/index.d.ts +56 -0
  284. package/dist/services/agent-runtime/context-compaction/index.d.ts.map +1 -0
  285. package/dist/services/agent-runtime/context-compaction/index.js +131 -0
  286. package/dist/services/agent-runtime/context-compaction/index.js.map +1 -0
  287. package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts +76 -0
  288. package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts.map +1 -0
  289. package/dist/services/agent-runtime/context-compaction/local-context-compactor.js +146 -0
  290. package/dist/services/agent-runtime/context-compaction/local-context-compactor.js.map +1 -0
  291. package/dist/services/agent-runtime/generation-guard.d.ts +15 -1
  292. package/dist/services/agent-runtime/generation-guard.d.ts.map +1 -1
  293. package/dist/services/agent-runtime/generation-guard.js +34 -2
  294. package/dist/services/agent-runtime/generation-guard.js.map +1 -1
  295. package/dist/services/agent-runtime/scope-resolver.d.ts.map +1 -1
  296. package/dist/services/agent-runtime/scope-resolver.js +2 -1
  297. package/dist/services/agent-runtime/scope-resolver.js.map +1 -1
  298. package/dist/services/agent-stream.d.ts.map +1 -1
  299. package/dist/services/agent-stream.js +2 -1
  300. package/dist/services/agent-stream.js.map +1 -1
  301. package/dist/services/approval/approval-decision-executor.d.ts.map +1 -1
  302. package/dist/services/approval/approval-decision-executor.js +5 -2
  303. package/dist/services/approval/approval-decision-executor.js.map +1 -1
  304. package/dist/services/approval/approval-decision-policy.d.ts.map +1 -1
  305. package/dist/services/approval/approval-decision-policy.js +0 -2
  306. package/dist/services/approval/approval-decision-policy.js.map +1 -1
  307. package/dist/services/approval/session-read-access.d.ts.map +1 -1
  308. package/dist/services/approval/session-read-access.js +2 -1
  309. package/dist/services/approval/session-read-access.js.map +1 -1
  310. package/dist/services/approval/shell-auto-approval-resolver.d.ts +1 -1
  311. package/dist/services/approval/shell-auto-approval-resolver.d.ts.map +1 -1
  312. package/dist/services/approval/shell-auto-approval-resolver.js +9 -1
  313. package/dist/services/approval/shell-auto-approval-resolver.js.map +1 -1
  314. package/dist/services/approval/tool-approval-batch-coordinator.d.ts.map +1 -1
  315. package/dist/services/approval/tool-approval-batch-coordinator.js +2 -1
  316. package/dist/services/approval/tool-approval-batch-coordinator.js.map +1 -1
  317. package/dist/services/conversation/conversation-admission-workflow.d.ts.map +1 -1
  318. package/dist/services/conversation/conversation-admission-workflow.js +20 -18
  319. package/dist/services/conversation/conversation-admission-workflow.js.map +1 -1
  320. package/dist/services/conversation/conversation-decoder.d.ts.map +1 -1
  321. package/dist/services/conversation/conversation-decoder.js +6 -0
  322. package/dist/services/conversation/conversation-decoder.js.map +1 -1
  323. package/dist/services/conversation/conversation-events.d.ts +34 -1
  324. package/dist/services/conversation/conversation-events.d.ts.map +1 -1
  325. package/dist/services/conversation/conversation-message-projection.d.ts.map +1 -1
  326. package/dist/services/conversation/conversation-message-projection.js +7 -3
  327. package/dist/services/conversation/conversation-message-projection.js.map +1 -1
  328. package/dist/services/conversation/conversation-orchestrator.d.ts +2 -0
  329. package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
  330. package/dist/services/conversation/conversation-orchestrator.js +113 -1
  331. package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
  332. package/dist/services/conversation/conversation-orchestrator.types.d.ts +3 -1
  333. package/dist/services/conversation/conversation-orchestrator.types.d.ts.map +1 -1
  334. package/dist/services/conversation/conversation-replay.d.ts.map +1 -1
  335. package/dist/services/conversation/conversation-replay.js +45 -0
  336. package/dist/services/conversation/conversation-replay.js.map +1 -1
  337. package/dist/services/conversation/conversation-result-builder.d.ts.map +1 -1
  338. package/dist/services/conversation/conversation-result-builder.js +14 -2
  339. package/dist/services/conversation/conversation-result-builder.js.map +1 -1
  340. package/dist/services/conversation/conversation-service.d.ts +1 -0
  341. package/dist/services/conversation/conversation-service.d.ts.map +1 -1
  342. package/dist/services/conversation/conversation-service.js +74 -0
  343. package/dist/services/conversation/conversation-service.js.map +1 -1
  344. package/dist/services/conversation/conversation-state-projector.d.ts +7 -1
  345. package/dist/services/conversation/conversation-state-projector.d.ts.map +1 -1
  346. package/dist/services/conversation/conversation-state-projector.js +20 -3
  347. package/dist/services/conversation/conversation-state-projector.js.map +1 -1
  348. package/dist/services/conversation/conversation-state-schema.d.ts +8 -4
  349. package/dist/services/conversation/conversation-state-schema.d.ts.map +1 -1
  350. package/dist/services/conversation/conversation-state-schema.js +24 -2
  351. package/dist/services/conversation/conversation-state-schema.js.map +1 -1
  352. package/dist/services/conversation/conversation-store.d.ts +11 -0
  353. package/dist/services/conversation/conversation-store.d.ts.map +1 -1
  354. package/dist/services/conversation/conversation-store.js +23 -3
  355. package/dist/services/conversation/conversation-store.js.map +1 -1
  356. package/dist/services/conversation-agent-client.d.ts +9 -0
  357. package/dist/services/conversation-agent-client.d.ts.map +1 -1
  358. package/dist/services/cost/model-cost.d.ts +13 -2
  359. package/dist/services/cost/model-cost.d.ts.map +1 -1
  360. package/dist/services/cost/model-cost.js +1 -0
  361. package/dist/services/cost/model-cost.js.map +1 -1
  362. package/dist/services/cost/pricing.d.ts.map +1 -1
  363. package/dist/services/cost/pricing.js +26 -20
  364. package/dist/services/cost/pricing.js.map +1 -1
  365. package/dist/services/execution-context.d.ts +31 -0
  366. package/dist/services/execution-context.d.ts.map +1 -1
  367. package/dist/services/execution-context.js +59 -0
  368. package/dist/services/execution-context.js.map +1 -1
  369. package/dist/services/file-service.d.ts.map +1 -1
  370. package/dist/services/file-service.js +12 -3
  371. package/dist/services/file-service.js.map +1 -1
  372. package/dist/services/large-uncached-input-guard.d.ts +26 -1
  373. package/dist/services/large-uncached-input-guard.d.ts.map +1 -1
  374. package/dist/services/large-uncached-input-guard.js +73 -38
  375. package/dist/services/large-uncached-input-guard.js.map +1 -1
  376. package/dist/services/logging/conversation-log-events.d.ts +15 -2
  377. package/dist/services/logging/conversation-log-events.d.ts.map +1 -1
  378. package/dist/services/logging/conversation-log-events.js.map +1 -1
  379. package/dist/services/logging/conversation-logger.d.ts.map +1 -1
  380. package/dist/services/logging/conversation-logger.js +11 -0
  381. package/dist/services/logging/conversation-logger.js.map +1 -1
  382. package/dist/services/logging/logging-contract.d.ts.map +1 -1
  383. package/dist/services/logging/logging-contract.js +4 -0
  384. package/dist/services/logging/logging-contract.js.map +1 -1
  385. package/dist/services/logging/provider-traffic.d.ts +1 -1
  386. package/dist/services/logging/provider-traffic.d.ts.map +1 -1
  387. package/dist/services/logging/provider-traffic.js +10 -3
  388. package/dist/services/logging/provider-traffic.js.map +1 -1
  389. package/dist/services/model-service.d.ts +7 -0
  390. package/dist/services/model-service.d.ts.map +1 -1
  391. package/dist/services/model-service.js +21 -0
  392. package/dist/services/model-service.js.map +1 -1
  393. package/dist/services/models/model-catalog-session.d.ts +2 -0
  394. package/dist/services/models/model-catalog-session.d.ts.map +1 -1
  395. package/dist/services/models/model-catalog-session.js +9 -2
  396. package/dist/services/models/model-catalog-session.js.map +1 -1
  397. package/dist/services/provider-continuity.d.ts +15 -0
  398. package/dist/services/provider-continuity.d.ts.map +1 -1
  399. package/dist/services/provider-continuity.js +33 -0
  400. package/dist/services/provider-continuity.js.map +1 -1
  401. package/dist/services/retry/recovery-executor.d.ts.map +1 -1
  402. package/dist/services/retry/recovery-executor.js +12 -5
  403. package/dist/services/retry/recovery-executor.js.map +1 -1
  404. package/dist/services/retry/retry-classifier.d.ts.map +1 -1
  405. package/dist/services/retry/retry-classifier.js +2 -1
  406. package/dist/services/retry/retry-classifier.js.map +1 -1
  407. package/dist/services/retry/retry-error-classification.d.ts +19 -0
  408. package/dist/services/retry/retry-error-classification.d.ts.map +1 -1
  409. package/dist/services/retry/retry-error-classification.js +54 -0
  410. package/dist/services/retry/retry-error-classification.js.map +1 -1
  411. package/dist/services/service-interfaces.d.ts +15 -0
  412. package/dist/services/service-interfaces.d.ts.map +1 -1
  413. package/dist/services/session/background-task-control.d.ts +7 -2
  414. package/dist/services/session/background-task-control.d.ts.map +1 -1
  415. package/dist/services/session/background-task-control.js +43 -9
  416. package/dist/services/session/background-task-control.js.map +1 -1
  417. package/dist/services/session/background-task-liveness.d.ts +24 -0
  418. package/dist/services/session/background-task-liveness.d.ts.map +1 -0
  419. package/dist/services/session/background-task-liveness.js +23 -0
  420. package/dist/services/session/background-task-liveness.js.map +1 -0
  421. package/dist/services/session/session-access-state.d.ts.map +1 -1
  422. package/dist/services/session/session-access-state.js +5 -4
  423. package/dist/services/session/session-access-state.js.map +1 -1
  424. package/dist/services/session/session-client-factory.d.ts +11 -1
  425. package/dist/services/session/session-client-factory.d.ts.map +1 -1
  426. package/dist/services/session/session-client-factory.js +28 -1
  427. package/dist/services/session/session-client-factory.js.map +1 -1
  428. package/dist/services/session/session-composition.d.ts +7 -0
  429. package/dist/services/session/session-composition.d.ts.map +1 -1
  430. package/dist/services/session/session-composition.js +80 -0
  431. package/dist/services/session/session-composition.js.map +1 -1
  432. package/dist/services/session/session-input-planner.d.ts +16 -0
  433. package/dist/services/session/session-input-planner.d.ts.map +1 -1
  434. package/dist/services/session/session-input-planner.js +117 -10
  435. package/dist/services/session/session-input-planner.js.map +1 -1
  436. package/dist/services/session/session-manager.d.ts +3 -0
  437. package/dist/services/session/session-manager.d.ts.map +1 -1
  438. package/dist/services/session/session-manager.js +6 -0
  439. package/dist/services/session/session-manager.js.map +1 -1
  440. package/dist/services/session/session-stream-processor.d.ts +1 -0
  441. package/dist/services/session/session-stream-processor.d.ts.map +1 -1
  442. package/dist/services/session/session-stream-processor.js +16 -1
  443. package/dist/services/session/session-stream-processor.js.map +1 -1
  444. package/dist/services/session/session-tool-tracker.d.ts +21 -4
  445. package/dist/services/session/session-tool-tracker.d.ts.map +1 -1
  446. package/dist/services/session/session-tool-tracker.js +26 -5
  447. package/dist/services/session/session-tool-tracker.js.map +1 -1
  448. package/dist/services/session/terminal-result-collector.d.ts.map +1 -1
  449. package/dist/services/session/terminal-result-collector.js +12 -0
  450. package/dist/services/session/terminal-result-collector.js.map +1 -1
  451. package/dist/services/session/turn-workflow.d.ts.map +1 -1
  452. package/dist/services/session/turn-workflow.js +4 -0
  453. package/dist/services/session/turn-workflow.js.map +1 -1
  454. package/dist/services/settings/settings-path.d.ts +6 -0
  455. package/dist/services/settings/settings-path.d.ts.map +1 -0
  456. package/dist/services/settings/settings-path.js +15 -0
  457. package/dist/services/settings/settings-path.js.map +1 -0
  458. package/dist/services/settings/settings-schema.d.ts +59 -1
  459. package/dist/services/settings/settings-schema.d.ts.map +1 -1
  460. package/dist/services/settings/settings-schema.js +44 -3
  461. package/dist/services/settings/settings-schema.js.map +1 -1
  462. package/dist/services/settings/settings-service.d.ts +8 -0
  463. package/dist/services/settings/settings-service.d.ts.map +1 -1
  464. package/dist/services/settings/settings-service.js +82 -4
  465. package/dist/services/settings/settings-service.js.map +1 -1
  466. package/dist/services/settings/settings-sources.d.ts.map +1 -1
  467. package/dist/services/settings/settings-sources.js +3 -0
  468. package/dist/services/settings/settings-sources.js.map +1 -1
  469. package/dist/services/shell/background-shell-output-store.d.ts +90 -0
  470. package/dist/services/shell/background-shell-output-store.d.ts.map +1 -0
  471. package/dist/services/shell/background-shell-output-store.js +207 -0
  472. package/dist/services/shell/background-shell-output-store.js.map +1 -0
  473. package/dist/services/shell/background-shell-registry.d.ts +18 -0
  474. package/dist/services/shell/background-shell-registry.d.ts.map +1 -1
  475. package/dist/services/shell/background-shell-registry.js +17 -2
  476. package/dist/services/shell/background-shell-registry.js.map +1 -1
  477. package/dist/services/shell/background-shell-watches.d.ts +141 -0
  478. package/dist/services/shell/background-shell-watches.d.ts.map +1 -0
  479. package/dist/services/shell/background-shell-watches.js +245 -0
  480. package/dist/services/shell/background-shell-watches.js.map +1 -0
  481. package/dist/services/stream-event-processor.d.ts.map +1 -1
  482. package/dist/services/stream-event-processor.js +31 -1
  483. package/dist/services/stream-event-processor.js.map +1 -1
  484. package/dist/services/subagents/execution-runner.d.ts.map +1 -1
  485. package/dist/services/subagents/execution-runner.js +73 -4
  486. package/dist/services/subagents/execution-runner.js.map +1 -1
  487. package/dist/services/subagents/mentor-runner.d.ts.map +1 -1
  488. package/dist/services/subagents/mentor-runner.js +120 -15
  489. package/dist/services/subagents/mentor-runner.js.map +1 -1
  490. package/dist/services/subagents/nested-runner.d.ts.map +1 -1
  491. package/dist/services/subagents/nested-runner.js +106 -29
  492. package/dist/services/subagents/nested-runner.js.map +1 -1
  493. package/dist/services/subagents/role-loader.d.ts +6 -0
  494. package/dist/services/subagents/role-loader.d.ts.map +1 -1
  495. package/dist/services/subagents/role-loader.js +6 -1
  496. package/dist/services/subagents/role-loader.js.map +1 -1
  497. package/dist/services/subagents/subagent-async-registry.d.ts.map +1 -1
  498. package/dist/services/subagents/subagent-async-registry.js +39 -5
  499. package/dist/services/subagents/subagent-async-registry.js.map +1 -1
  500. package/dist/services/subagents/subagent-notification-store.d.ts +20 -1
  501. package/dist/services/subagents/subagent-notification-store.d.ts.map +1 -1
  502. package/dist/services/subagents/subagent-notification-store.js +22 -0
  503. package/dist/services/subagents/subagent-notification-store.js.map +1 -1
  504. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.js +6 -5
  505. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.js.map +1 -1
  506. package/dist/services/subagents/tool-policy.d.ts +3 -1
  507. package/dist/services/subagents/tool-policy.d.ts.map +1 -1
  508. package/dist/services/subagents/tool-policy.js +16 -12
  509. package/dist/services/subagents/tool-policy.js.map +1 -1
  510. package/dist/services/subagents/types.d.ts +15 -0
  511. package/dist/services/subagents/types.d.ts.map +1 -1
  512. package/dist/services/subagents/utils.d.ts +17 -0
  513. package/dist/services/subagents/utils.d.ts.map +1 -1
  514. package/dist/services/subagents/utils.js +39 -0
  515. package/dist/services/subagents/utils.js.map +1 -1
  516. package/dist/services/subagents/worker-worktree.d.ts +25 -0
  517. package/dist/services/subagents/worker-worktree.d.ts.map +1 -0
  518. package/dist/services/subagents/worker-worktree.js +74 -0
  519. package/dist/services/subagents/worker-worktree.js.map +1 -0
  520. package/dist/services/tool-execution-ledger.d.ts +26 -1
  521. package/dist/services/tool-execution-ledger.d.ts.map +1 -1
  522. package/dist/services/tool-execution-ledger.js +103 -33
  523. package/dist/services/tool-execution-ledger.js.map +1 -1
  524. package/dist/services/workspace/active-workspace-root.d.ts +5 -0
  525. package/dist/services/workspace/active-workspace-root.d.ts.map +1 -0
  526. package/dist/services/workspace/active-workspace-root.js +24 -0
  527. package/dist/services/workspace/active-workspace-root.js.map +1 -0
  528. package/dist/services/workspace/parse-worktree-list.d.ts +24 -0
  529. package/dist/services/workspace/parse-worktree-list.d.ts.map +1 -0
  530. package/dist/services/workspace/parse-worktree-list.js +59 -0
  531. package/dist/services/workspace/parse-worktree-list.js.map +1 -0
  532. package/dist/services/workspace/worktree-inventory.d.ts +10 -0
  533. package/dist/services/workspace/worktree-inventory.d.ts.map +1 -0
  534. package/dist/services/workspace/worktree-inventory.js +28 -0
  535. package/dist/services/workspace/worktree-inventory.js.map +1 -0
  536. package/dist/services/workspace/worktree-transition.d.ts +85 -0
  537. package/dist/services/workspace/worktree-transition.d.ts.map +1 -0
  538. package/dist/services/workspace/worktree-transition.js +70 -0
  539. package/dist/services/workspace/worktree-transition.js.map +1 -0
  540. package/dist/tools/agent/activate-skill.d.ts.map +1 -1
  541. package/dist/tools/agent/activate-skill.js +1 -0
  542. package/dist/tools/agent/activate-skill.js.map +1 -1
  543. package/dist/tools/agent/ask-mentor.d.ts.map +1 -1
  544. package/dist/tools/agent/ask-mentor.js +5 -1
  545. package/dist/tools/agent/ask-mentor.js.map +1 -1
  546. package/dist/tools/agent/run-subagent-async.d.ts +1 -1
  547. package/dist/tools/agent/run-subagent-async.d.ts.map +1 -1
  548. package/dist/tools/agent/run-subagent-async.js +21 -4
  549. package/dist/tools/agent/run-subagent-async.js.map +1 -1
  550. package/dist/tools/agent/run-subagent.d.ts +3 -1
  551. package/dist/tools/agent/run-subagent.d.ts.map +1 -1
  552. package/dist/tools/agent/run-subagent.js +34 -7
  553. package/dist/tools/agent/run-subagent.js.map +1 -1
  554. package/dist/tools/file/apply-patch.d.ts.map +1 -1
  555. package/dist/tools/file/apply-patch.js +6 -3
  556. package/dist/tools/file/apply-patch.js.map +1 -1
  557. package/dist/tools/file/code-context.d.ts.map +1 -1
  558. package/dist/tools/file/code-context.js +2 -0
  559. package/dist/tools/file/code-context.js.map +1 -1
  560. package/dist/tools/file/glob.d.ts.map +1 -1
  561. package/dist/tools/file/glob.js +1 -0
  562. package/dist/tools/file/glob.js.map +1 -1
  563. package/dist/tools/file/grep.d.ts.map +1 -1
  564. package/dist/tools/file/grep.js +1 -0
  565. package/dist/tools/file/grep.js.map +1 -1
  566. package/dist/tools/file/read-file.d.ts +2 -0
  567. package/dist/tools/file/read-file.d.ts.map +1 -1
  568. package/dist/tools/file/read-file.js +36 -15
  569. package/dist/tools/file/read-file.js.map +1 -1
  570. package/dist/tools/system/shell.d.ts +42 -1
  571. package/dist/tools/system/shell.d.ts.map +1 -1
  572. package/dist/tools/system/shell.js +285 -10
  573. package/dist/tools/system/shell.js.map +1 -1
  574. package/dist/tools/system/worktree.d.ts +22 -0
  575. package/dist/tools/system/worktree.d.ts.map +1 -0
  576. package/dist/tools/system/worktree.js +138 -0
  577. package/dist/tools/system/worktree.js.map +1 -0
  578. package/dist/tools/types.d.ts +5 -0
  579. package/dist/tools/types.d.ts.map +1 -1
  580. package/dist/tools/types.js.map +1 -1
  581. package/dist/tools/utils.d.ts.map +1 -1
  582. package/dist/tools/utils.js +3 -2
  583. package/dist/tools/utils.js.map +1 -1
  584. package/dist/tools/web/web-fetch.d.ts.map +1 -1
  585. package/dist/tools/web/web-fetch.js +10 -12
  586. package/dist/tools/web/web-fetch.js.map +1 -1
  587. package/dist/tools/web/web-search.d.ts.map +1 -1
  588. package/dist/tools/web/web-search.js +1 -0
  589. package/dist/tools/web/web-search.js.map +1 -1
  590. package/dist/utils/ai/provider-credentials.d.ts +31 -2
  591. package/dist/utils/ai/provider-credentials.d.ts.map +1 -1
  592. package/dist/utils/ai/provider-credentials.js +119 -11
  593. package/dist/utils/ai/provider-credentials.js.map +1 -1
  594. package/dist/utils/conversation/conversation-event-handler.d.ts.map +1 -1
  595. package/dist/utils/conversation/conversation-event-handler.js +13 -1
  596. package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
  597. package/dist/utils/conversation/message-utils.d.ts +8 -2
  598. package/dist/utils/conversation/message-utils.d.ts.map +1 -1
  599. package/dist/utils/conversation/message-utils.js +38 -21
  600. package/dist/utils/conversation/message-utils.js.map +1 -1
  601. package/dist/utils/copy-selections.d.ts +8 -0
  602. package/dist/utils/copy-selections.d.ts.map +1 -0
  603. package/dist/utils/copy-selections.js +42 -0
  604. package/dist/utils/copy-selections.js.map +1 -0
  605. package/dist/utils/output/bound-tool-result.d.ts +42 -0
  606. package/dist/utils/output/bound-tool-result.d.ts.map +1 -0
  607. package/dist/utils/output/bound-tool-result.js +81 -0
  608. package/dist/utils/output/bound-tool-result.js.map +1 -0
  609. package/dist/utils/settings-command.d.ts.map +1 -1
  610. package/dist/utils/settings-command.js +22 -2
  611. package/dist/utils/settings-command.js.map +1 -1
  612. package/dist/utils/shell/command-safety/path-analysis.d.ts.map +1 -1
  613. package/dist/utils/shell/command-safety/path-analysis.js +5 -1
  614. package/dist/utils/shell/command-safety/path-analysis.js.map +1 -1
  615. package/dist/utils/shell/execute-shell.d.ts +25 -0
  616. package/dist/utils/shell/execute-shell.d.ts.map +1 -1
  617. package/dist/utils/shell/execute-shell.js +22 -5
  618. package/dist/utils/shell/execute-shell.js.map +1 -1
  619. package/dist/utils/shell/sandbox/sandbox-env.d.ts.map +1 -1
  620. package/dist/utils/shell/sandbox/sandbox-env.js +2 -1
  621. package/dist/utils/shell/sandbox/sandbox-env.js.map +1 -1
  622. package/dist/utils/shell/sandbox/sandbox-network-store.d.ts.map +1 -1
  623. package/dist/utils/shell/sandbox/sandbox-network-store.js +3 -2
  624. package/dist/utils/shell/sandbox/sandbox-network-store.js.map +1 -1
  625. package/dist/utils/shell/sandbox/sandbox-policy.d.ts.map +1 -1
  626. package/dist/utils/shell/sandbox/sandbox-policy.js +2 -1
  627. package/dist/utils/shell/sandbox/sandbox-policy.js.map +1 -1
  628. package/dist/utils/shell/shell-output.d.ts +11 -0
  629. package/dist/utils/shell/shell-output.d.ts.map +1 -1
  630. package/dist/utils/shell/shell-output.js +18 -8
  631. package/dist/utils/shell/shell-output.js.map +1 -1
  632. package/dist/utils/value-suggestions.d.ts.map +1 -1
  633. package/dist/utils/value-suggestions.js +6 -0
  634. package/dist/utils/value-suggestions.js.map +1 -1
  635. package/package.json +1 -1
@@ -0,0 +1,642 @@
1
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
+ import { z } from 'zod';
3
+ import { useInputContext } from '../context/InputContext.js';
4
+ import { SETTING_KEYS } from '../services/settings/settings-service.js';
5
+ import { filterModels } from '../services/model-service.js';
6
+ import { ModelCatalogSession } from '../services/models/model-catalog-session.js';
7
+ import { loadProviderItems } from '../providers/provider-service.js';
8
+ import { resolveProviderCredentials } from '../utils/ai/provider-credentials.js';
9
+ import { useSelection } from './use-selection.js';
10
+ export const MENTOR_POOL_REASONING_EFFORTS = ['default', 'none', 'minimal', 'low', 'medium', 'high', 'xhigh'];
11
+ const mentorPoolEntrySchema = z.object({
12
+ model: z.string().min(1, 'Model is required'),
13
+ provider: z.string().min(1, 'Provider cannot be empty').optional(),
14
+ reasoningEffort: z.enum(MENTOR_POOL_REASONING_EFFORTS).optional(),
15
+ });
16
+ const mentorPoolSchema = z.array(mentorPoolEntrySchema).max(8, 'Mentor pool cannot contain more than 8 entries');
17
+ const noOpLoggingService = {
18
+ info: () => { },
19
+ warn: () => { },
20
+ error: () => { },
21
+ debug: () => { },
22
+ security: () => { },
23
+ setCorrelationId: () => { },
24
+ getCorrelationId: () => undefined,
25
+ clearCorrelationId: () => { },
26
+ };
27
+ const cloneEntries = (value) => {
28
+ const parsed = mentorPoolSchema.safeParse(value);
29
+ return parsed.success ? parsed.data.map((entry) => ({ ...entry })) : [];
30
+ };
31
+ export function formatMentorPoolProvider(provider) {
32
+ return provider || 'Inherit mentor provider';
33
+ }
34
+ export function formatMentorPoolReasoning(reasoningEffort) {
35
+ switch (reasoningEffort) {
36
+ case 'none':
37
+ return 'None';
38
+ case 'minimal':
39
+ return 'Minimal';
40
+ case 'low':
41
+ return 'Low';
42
+ case 'medium':
43
+ return 'Medium';
44
+ case 'high':
45
+ return 'High';
46
+ case 'xhigh':
47
+ return 'Extra high';
48
+ case undefined:
49
+ return 'Inherit mentor reasoning';
50
+ case 'default':
51
+ return 'Provider default';
52
+ }
53
+ }
54
+ export function mergeMentorPoolModels({ catalogModels, entries, provider, currentModel, }) {
55
+ const catalogIds = new Set(catalogModels.map((model) => model.id));
56
+ const suggestedIds = new Set();
57
+ const suggestions = [];
58
+ const addSuggestion = (id, name) => {
59
+ if (!id || catalogIds.has(id) || suggestedIds.has(id))
60
+ return;
61
+ suggestedIds.add(id);
62
+ suggestions.push({ id, name, provider });
63
+ };
64
+ addSuggestion(currentModel, 'Current model (not in catalog)');
65
+ for (const entry of entries) {
66
+ if (entry.provider === undefined || entry.provider === provider)
67
+ addSuggestion(entry.model, 'In mentor pool');
68
+ }
69
+ return [...suggestions, ...catalogModels];
70
+ }
71
+ export function resolveMentorPoolModelSelection(models, selectedIndex, typedModel) {
72
+ return models[selectedIndex]?.id ?? typedModel.trim();
73
+ }
74
+ /** Starting provider tab for the mentor-pool model browser. */
75
+ export function resolveMentorPoolBrowseProvider({ draftProvider, mentorProvider, agentProvider, }) {
76
+ return draftProvider || mentorProvider || agentProvider || '';
77
+ }
78
+ /** Apply a model catalog pick: pin both model id and the active provider tab. */
79
+ export function applyMentorPoolModelPick(draft, model, provider) {
80
+ return {
81
+ ...draft,
82
+ model,
83
+ ...(provider ? { provider } : {}),
84
+ };
85
+ }
86
+ export function formatMentorPoolEntry(entry) {
87
+ const provider = entry.provider ? ` @ ${entry.provider}` : '';
88
+ const effort = entry.reasoningEffort && entry.reasoningEffort !== 'default' ? ` (${entry.reasoningEffort})` : '';
89
+ return `${entry.model}${provider}${effort}`;
90
+ }
91
+ export function buildMentorPoolListItems(entries) {
92
+ const actions = [];
93
+ if (entries.length < 8)
94
+ actions.push({ kind: 'action', action: 'add', label: 'Add Entry' });
95
+ if (entries.length > 1)
96
+ actions.push({ kind: 'action', action: 'reorder', label: 'Reorder Entries' });
97
+ actions.push({ kind: 'action', action: 'save', label: 'Save Changes' });
98
+ return [
99
+ ...entries.map((entry, index) => ({
100
+ kind: 'entry',
101
+ entry,
102
+ index,
103
+ label: entry.model,
104
+ })),
105
+ ...actions,
106
+ ];
107
+ }
108
+ export function useMentorPoolSelection(settingsService, active, loggingService) {
109
+ const { input, setInput, replaceInput } = useInputContext();
110
+ const [phase, setPhase] = useState('list');
111
+ const [entries, setEntries] = useState([]);
112
+ const [draft, setDraft] = useState(null);
113
+ const [editingIndex, setEditingIndex] = useState(null);
114
+ const [reorderList, setReorderList] = useState([]);
115
+ const [providerItems, setProviderItems] = useState([]);
116
+ const [draftModified, setDraftModified] = useState(false);
117
+ const [discardFromPhase, setDiscardFromPhase] = useState(null);
118
+ const [errorMessage, setErrorMessage] = useState(null);
119
+ const [fieldErrors, setFieldErrors] = useState({});
120
+ const catalogSession = useMemo(() => new ModelCatalogSession({ settingsService, loggingService: loggingService ?? noOpLoggingService }), [loggingService, settingsService]);
121
+ const [catalogModels, setCatalogModels] = useState([]);
122
+ const [modelLoading, setModelLoading] = useState(false);
123
+ const [modelError, setModelError] = useState(null);
124
+ const [modelSelectedIndex, setModelSelectedIndex] = useState(0);
125
+ const [modelScrollOffset, setModelScrollOffset] = useState(0);
126
+ const [modelRefreshKey, setModelRefreshKey] = useState(0);
127
+ /** Provider tab currently browsed in the model menu (independent of draft until pick). */
128
+ const [browsingProvider, setBrowsingProvider] = useState(null);
129
+ const settingsServiceRef = useRef(settingsService);
130
+ settingsServiceRef.current = settingsService;
131
+ const fallbackModelProvider = resolveMentorPoolBrowseProvider({
132
+ draftProvider: draft?.provider,
133
+ mentorProvider: settingsService.get(SETTING_KEYS.AGENT_MENTOR_PROVIDER),
134
+ agentProvider: settingsService.get(SETTING_KEYS.AGENT_PROVIDER),
135
+ });
136
+ const modelProvider = browsingProvider ?? fallbackModelProvider;
137
+ const modelItems = useMemo(() => mergeMentorPoolModels({
138
+ catalogModels,
139
+ entries,
140
+ provider: modelProvider,
141
+ currentModel: draft?.model ?? '',
142
+ }), [catalogModels, draft?.model, entries, modelProvider]);
143
+ const filteredModels = useMemo(() => filterModels(modelItems, input), [input, modelItems]);
144
+ const activeItems = useMemo(() => {
145
+ if (phase === 'list') {
146
+ return buildMentorPoolListItems(entries);
147
+ }
148
+ if (phase === 'edit_fields') {
149
+ if (!draft)
150
+ return [];
151
+ return [
152
+ { kind: 'field', field: 'model', label: 'Model', detail: draft.model || '<empty>' },
153
+ { kind: 'field', field: 'provider', label: 'Provider', detail: formatMentorPoolProvider(draft.provider) },
154
+ {
155
+ kind: 'field',
156
+ field: 'reasoning',
157
+ label: 'Reasoning',
158
+ detail: formatMentorPoolReasoning(draft.reasoningEffort),
159
+ },
160
+ { kind: 'action', action: 'save', label: 'Save Changes' },
161
+ { kind: 'action', action: 'cancel', label: 'Cancel' },
162
+ ];
163
+ }
164
+ if (phase === 'edit_provider') {
165
+ return [
166
+ { kind: 'provider', id: '', label: 'Inherit (use mentor provider)' },
167
+ ...providerItems.map((provider) => ({ kind: 'provider', id: provider.id, label: provider.label })),
168
+ ];
169
+ }
170
+ if (phase === 'edit_reasoning') {
171
+ return [
172
+ { kind: 'reasoning', value: undefined, label: formatMentorPoolReasoning() },
173
+ ...MENTOR_POOL_REASONING_EFFORTS.map((value) => ({
174
+ kind: 'reasoning',
175
+ value,
176
+ label: formatMentorPoolReasoning(value),
177
+ })),
178
+ ];
179
+ }
180
+ if (phase === 'confirm_delete') {
181
+ return [
182
+ { kind: 'action', action: 'save', label: 'Yes, delete entry', tone: 'destructive' },
183
+ { kind: 'action', action: 'cancel', label: 'No, keep it' },
184
+ ];
185
+ }
186
+ if (phase === 'confirm_discard') {
187
+ return [
188
+ { kind: 'action', action: 'save', label: 'Yes, discard changes', tone: 'destructive' },
189
+ { kind: 'action', action: 'cancel', label: 'No, keep editing' },
190
+ ];
191
+ }
192
+ return reorderList.map((entry, index) => ({
193
+ kind: 'reorder-entry',
194
+ index,
195
+ entry,
196
+ label: entry.model,
197
+ }));
198
+ }, [draft, entries, phase, providerItems, reorderList]);
199
+ const selection = useSelection(activeItems);
200
+ useEffect(() => {
201
+ if (!active)
202
+ return;
203
+ const currentSettingsService = settingsServiceRef.current;
204
+ const loaded = cloneEntries(currentSettingsService.get(SETTING_KEYS.AGENT_MENTOR_POOL));
205
+ setEntries(loaded);
206
+ setProviderItems(loadProviderItems(currentSettingsService));
207
+ setPhase('list');
208
+ setDraft(null);
209
+ setEditingIndex(null);
210
+ setReorderList([]);
211
+ setDraftModified(false);
212
+ setDiscardFromPhase(null);
213
+ setErrorMessage(null);
214
+ setFieldErrors({});
215
+ }, [active]);
216
+ useEffect(() => {
217
+ if (!active || phase !== 'edit_model' || !modelProvider)
218
+ return;
219
+ /* eslint-disable react-hooks/set-state-in-effect */
220
+ const credentials = resolveProviderCredentials(settingsService, modelProvider);
221
+ const cachedModels = catalogSession.getCached(modelProvider);
222
+ setCatalogModels(cachedModels ?? []);
223
+ setModelSelectedIndex(0);
224
+ setModelScrollOffset(0);
225
+ setModelError(null);
226
+ if (credentials.required && !credentials.configured) {
227
+ setModelLoading(false);
228
+ return;
229
+ }
230
+ catalogSession.begin();
231
+ let disposed = false;
232
+ const load = async () => {
233
+ setModelLoading(!cachedModels);
234
+ try {
235
+ const result = await catalogSession.load(modelProvider);
236
+ if (disposed || result.kind === 'stale')
237
+ return;
238
+ setCatalogModels(result.models);
239
+ }
240
+ catch (error) {
241
+ if (!disposed)
242
+ setModelError(error instanceof Error ? error.message : String(error));
243
+ }
244
+ finally {
245
+ if (!disposed)
246
+ setModelLoading(false);
247
+ }
248
+ };
249
+ void load();
250
+ return () => {
251
+ disposed = true;
252
+ };
253
+ /* eslint-enable react-hooks/set-state-in-effect */
254
+ }, [active, catalogSession, modelProvider, modelRefreshKey, phase, settingsService]);
255
+ useEffect(() => {
256
+ // Changing the search text starts a new list navigation session.
257
+ // eslint-disable-next-line react-hooks/set-state-in-effect
258
+ setModelSelectedIndex(0);
259
+ setModelScrollOffset(0);
260
+ }, [input]);
261
+ useEffect(() => {
262
+ // eslint-disable-next-line react-hooks/set-state-in-effect
263
+ setModelSelectedIndex((index) => Math.min(index, Math.max(0, filteredModels.length - 1)));
264
+ }, [filteredModels.length]);
265
+ useEffect(() => {
266
+ if (modelSelectedIndex < modelScrollOffset) {
267
+ // eslint-disable-next-line react-hooks/set-state-in-effect
268
+ setModelScrollOffset(modelSelectedIndex);
269
+ }
270
+ else if (modelSelectedIndex >= modelScrollOffset + 10) {
271
+ setModelScrollOffset(modelSelectedIndex - 9);
272
+ }
273
+ }, [modelScrollOffset, modelSelectedIndex]);
274
+ useEffect(() => {
275
+ selection.setSelectedIndex(0);
276
+ }, [phase, selection.setSelectedIndex]);
277
+ const resolveBrowseProvider = useCallback((draftProvider) => resolveMentorPoolBrowseProvider({
278
+ draftProvider,
279
+ mentorProvider: settingsService.get(SETTING_KEYS.AGENT_MENTOR_PROVIDER),
280
+ agentProvider: settingsService.get(SETTING_KEYS.AGENT_PROVIDER),
281
+ }), [settingsService]);
282
+ const openDraft = useCallback((entry, index) => {
283
+ setDraft(entry ? { ...entry, _isNew: false } : { model: '', _isNew: true });
284
+ setEditingIndex(index);
285
+ setDraftModified(false);
286
+ setErrorMessage(null);
287
+ setFieldErrors({});
288
+ // New entries jump straight into the model menu (with provider tabs) so
289
+ // the user picks model + provider in one step instead of a separate
290
+ // provider field first.
291
+ if (entry === null) {
292
+ setBrowsingProvider(resolveBrowseProvider(undefined));
293
+ setPhase('edit_model');
294
+ replaceInput('');
295
+ }
296
+ else {
297
+ setBrowsingProvider(null);
298
+ setPhase('edit_fields');
299
+ setInput('');
300
+ }
301
+ }, [replaceInput, resolveBrowseProvider, setInput]);
302
+ const saveDraft = useCallback(() => {
303
+ if (!draft)
304
+ return;
305
+ const result = mentorPoolEntrySchema.safeParse({
306
+ model: draft.model.trim(),
307
+ ...(draft.provider === undefined ? {} : { provider: draft.provider.trim() }),
308
+ ...(draft.reasoningEffort === undefined ? {} : { reasoningEffort: draft.reasoningEffort }),
309
+ });
310
+ if (!result.success) {
311
+ const errors = {};
312
+ for (const issue of result.error.issues)
313
+ errors[String(issue.path[0] ?? 'model')] = issue.message;
314
+ setFieldErrors(errors);
315
+ setErrorMessage('Fix the highlighted fields before saving.');
316
+ return;
317
+ }
318
+ const next = { ...result.data };
319
+ setEntries((current) => {
320
+ if (draft._isNew || editingIndex === null)
321
+ return [...current, next];
322
+ return current.map((entry, index) => (index === editingIndex ? next : entry));
323
+ });
324
+ setDraft(null);
325
+ setEditingIndex(null);
326
+ setDraftModified(true);
327
+ setFieldErrors({});
328
+ setErrorMessage(null);
329
+ setPhase('list');
330
+ selection.setSelectedIndex(0);
331
+ setInput('');
332
+ }, [draft, editingIndex, setInput, selection.setSelectedIndex]);
333
+ const selectItem = useCallback(() => {
334
+ const item = activeItems[selection.selectedIndex];
335
+ if (!item)
336
+ return;
337
+ if (phase === 'list') {
338
+ if (item.kind === 'entry')
339
+ openDraft(item.entry, item.index);
340
+ else if (item.kind === 'action' && item.action === 'add')
341
+ openDraft(null, null);
342
+ else if (item.kind === 'action' && item.action === 'reorder') {
343
+ setReorderList(entries.map((entry) => ({ ...entry })));
344
+ setPhase('reorder');
345
+ selection.setSelectedIndex(0);
346
+ }
347
+ return;
348
+ }
349
+ if (phase === 'edit_fields' && draft) {
350
+ if (item.kind === 'field') {
351
+ setErrorMessage(null);
352
+ setFieldErrors({});
353
+ if (item.field === 'model') {
354
+ setBrowsingProvider(resolveBrowseProvider(draft.provider));
355
+ setPhase('edit_model');
356
+ replaceInput(draft.model);
357
+ }
358
+ else if (item.field === 'provider') {
359
+ setPhase('edit_provider');
360
+ selection.setSelectedIndex(draft.provider ? providerItems.findIndex((provider) => provider.id === draft.provider) + 1 : 0);
361
+ setInput('');
362
+ }
363
+ else {
364
+ setPhase('edit_reasoning');
365
+ selection.setSelectedIndex(draft.reasoningEffort === undefined ? 0 : MENTOR_POOL_REASONING_EFFORTS.indexOf(draft.reasoningEffort) + 1);
366
+ setInput('');
367
+ }
368
+ }
369
+ else if (item.kind === 'action' && item.action === 'save')
370
+ saveDraft();
371
+ else if (item.kind === 'action' && item.action === 'cancel') {
372
+ setDraft(null);
373
+ setEditingIndex(null);
374
+ setPhase('list');
375
+ selection.setSelectedIndex(0);
376
+ setInput('');
377
+ }
378
+ return;
379
+ }
380
+ if (phase === 'edit_provider' && item.kind === 'provider' && draft) {
381
+ setDraft({ ...draft, provider: item.id || undefined });
382
+ setDraftModified(true);
383
+ setPhase('edit_fields');
384
+ selection.setSelectedIndex(1);
385
+ setInput('');
386
+ return;
387
+ }
388
+ if (phase === 'edit_reasoning' && item.kind === 'reasoning' && draft) {
389
+ // Keep an explicitly stored `default` distinct from an omitted value:
390
+ // the runner treats an omitted value as falling back to the mentor
391
+ // setting, while `default` uses the provider default.
392
+ setDraft({ ...draft, reasoningEffort: item.value });
393
+ setDraftModified(true);
394
+ setPhase('edit_fields');
395
+ selection.setSelectedIndex(2);
396
+ setInput('');
397
+ return;
398
+ }
399
+ if (phase === 'confirm_delete' && item.kind === 'action') {
400
+ if (item.action === 'save' && editingIndex !== null) {
401
+ setEntries((current) => current.filter((_, index) => index !== editingIndex));
402
+ setDraftModified(true);
403
+ }
404
+ setDraft(null);
405
+ setEditingIndex(null);
406
+ setPhase('list');
407
+ selection.setSelectedIndex(0);
408
+ return;
409
+ }
410
+ if (phase === 'confirm_discard' && item.kind === 'action') {
411
+ if (item.action === 'save') {
412
+ setDraft(null);
413
+ setEditingIndex(null);
414
+ setPhase('list');
415
+ selection.setSelectedIndex(0);
416
+ setDraftModified(true);
417
+ }
418
+ else if (discardFromPhase) {
419
+ setPhase(discardFromPhase);
420
+ selection.setSelectedIndex(0);
421
+ }
422
+ setDiscardFromPhase(null);
423
+ }
424
+ }, [
425
+ activeItems,
426
+ draft,
427
+ discardFromPhase,
428
+ editingIndex,
429
+ entries,
430
+ openDraft,
431
+ phase,
432
+ providerItems,
433
+ replaceInput,
434
+ resolveBrowseProvider,
435
+ saveDraft,
436
+ selection.selectedIndex,
437
+ setInput,
438
+ selection.setSelectedIndex,
439
+ ]);
440
+ const requestDelete = useCallback(() => {
441
+ if (phase !== 'list')
442
+ return;
443
+ const item = activeItems[selection.selectedIndex];
444
+ if (item?.kind !== 'entry')
445
+ return;
446
+ setEditingIndex(item.index);
447
+ setPhase('confirm_delete');
448
+ selection.setSelectedIndex(1);
449
+ }, [activeItems, phase, selection.selectedIndex, selection.setSelectedIndex]);
450
+ const saveModel = useCallback((value) => {
451
+ if (phase !== 'edit_model' || !draft)
452
+ return false;
453
+ const model = value.trim();
454
+ if (!model) {
455
+ setFieldErrors({ model: 'Model is required' });
456
+ setErrorMessage('Fix the highlighted fields before saving.');
457
+ return false;
458
+ }
459
+ // Pin the active provider tab with the model so the separate "Select
460
+ // Provider" step is optional (only needed for Inherit).
461
+ setDraft(applyMentorPoolModelPick(draft, model, modelProvider));
462
+ setDraftModified(true);
463
+ setFieldErrors({});
464
+ setErrorMessage(null);
465
+ setBrowsingProvider(null);
466
+ setPhase('edit_fields');
467
+ selection.setSelectedIndex(0);
468
+ setInput('');
469
+ return true;
470
+ }, [draft, modelProvider, phase, setInput, selection.setSelectedIndex]);
471
+ const selectModel = useCallback((typedValue) => saveModel(resolveMentorPoolModelSelection(filteredModels, modelSelectedIndex, typedValue)), [filteredModels, modelSelectedIndex, saveModel]);
472
+ const moveModelUp = useCallback(() => {
473
+ setModelSelectedIndex((index) => filteredModels.length === 0 ? 0 : index > 0 ? index - 1 : filteredModels.length - 1);
474
+ }, [filteredModels.length]);
475
+ const moveModelDown = useCallback(() => {
476
+ setModelSelectedIndex((index) => filteredModels.length === 0 ? 0 : index < filteredModels.length - 1 ? index + 1 : 0);
477
+ }, [filteredModels.length]);
478
+ const moveModelHome = useCallback(() => setModelSelectedIndex(0), []);
479
+ const moveModelEnd = useCallback(() => setModelSelectedIndex(Math.max(0, filteredModels.length - 1)), [filteredModels.length]);
480
+ const pageModelUp = useCallback(() => setModelSelectedIndex((index) => Math.max(0, index - 10)), []);
481
+ const pageModelDown = useCallback(() => setModelSelectedIndex((index) => Math.min(Math.max(0, filteredModels.length - 1), index + 10)), [filteredModels.length]);
482
+ const refreshModels = useCallback(() => {
483
+ if (!modelProvider)
484
+ return;
485
+ catalogSession.refresh(modelProvider);
486
+ setModelRefreshKey((key) => key + 1);
487
+ }, [catalogSession, modelProvider]);
488
+ const toggleModelProvider = useCallback((direction = 'next') => {
489
+ if (phase !== 'edit_model')
490
+ return;
491
+ const next = catalogSession.nextProvider(modelProvider || null, direction);
492
+ if (!next || next === modelProvider)
493
+ return;
494
+ const cachedModels = catalogSession.getCached(next);
495
+ setCatalogModels(cachedModels ?? []);
496
+ setModelSelectedIndex(0);
497
+ setModelScrollOffset(0);
498
+ setModelLoading(!cachedModels);
499
+ setModelError(null);
500
+ setBrowsingProvider(next);
501
+ }, [catalogSession, modelProvider, phase]);
502
+ const movePoolUp = useCallback(() => {
503
+ if (phase !== 'reorder' || selection.selectedIndex <= 0)
504
+ return;
505
+ const index = selection.selectedIndex;
506
+ setReorderList((current) => {
507
+ const next = [...current];
508
+ [next[index - 1], next[index]] = [next[index], next[index - 1]];
509
+ return next;
510
+ });
511
+ selection.moveUp();
512
+ }, [phase, selection, selection.selectedIndex]);
513
+ const movePoolDown = useCallback(() => {
514
+ if (phase !== 'reorder' || selection.selectedIndex >= reorderList.length - 1)
515
+ return;
516
+ const index = selection.selectedIndex;
517
+ setReorderList((current) => {
518
+ const next = [...current];
519
+ [next[index], next[index + 1]] = [next[index + 1], next[index]];
520
+ return next;
521
+ });
522
+ selection.moveDown();
523
+ }, [phase, reorderList.length, selection, selection.selectedIndex]);
524
+ const saveReorder = useCallback(() => {
525
+ if (phase !== 'reorder')
526
+ return;
527
+ setEntries(reorderList.map((entry) => ({ ...entry })));
528
+ setReorderList([]);
529
+ setDraftModified(true);
530
+ setPhase('list');
531
+ selection.setSelectedIndex(0);
532
+ }, [phase, reorderList, selection.setSelectedIndex]);
533
+ const goBack = useCallback(() => {
534
+ setErrorMessage(null);
535
+ setInput('');
536
+ if (phase === 'list')
537
+ return;
538
+ if (phase === 'edit_model' || phase === 'edit_provider' || phase === 'edit_reasoning') {
539
+ // Esc from the initial "add entry → model menu" step cancels the add
540
+ // when nothing has been chosen yet.
541
+ if (phase === 'edit_model' && draft?._isNew && !draft.model && !draftModified) {
542
+ setDraft(null);
543
+ setEditingIndex(null);
544
+ setBrowsingProvider(null);
545
+ setPhase('list');
546
+ selection.setSelectedIndex(0);
547
+ return;
548
+ }
549
+ setBrowsingProvider(null);
550
+ setPhase('edit_fields');
551
+ selection.setSelectedIndex(phase === 'edit_model' ? 0 : phase === 'edit_provider' ? 1 : 2);
552
+ }
553
+ else if (phase === 'edit_fields') {
554
+ if (draftModified) {
555
+ setDiscardFromPhase('edit_fields');
556
+ setPhase('confirm_discard');
557
+ selection.setSelectedIndex(1);
558
+ }
559
+ else {
560
+ setDraft(null);
561
+ setEditingIndex(null);
562
+ setPhase('list');
563
+ selection.setSelectedIndex(0);
564
+ }
565
+ }
566
+ else if (phase === 'reorder') {
567
+ setReorderList([]);
568
+ setPhase('list');
569
+ selection.setSelectedIndex(0);
570
+ }
571
+ else if (phase === 'confirm_delete') {
572
+ setEditingIndex(null);
573
+ setPhase('list');
574
+ selection.setSelectedIndex(0);
575
+ }
576
+ else if (phase === 'confirm_discard') {
577
+ if (discardFromPhase)
578
+ setPhase(discardFromPhase);
579
+ setDiscardFromPhase(null);
580
+ selection.setSelectedIndex(0);
581
+ }
582
+ }, [discardFromPhase, draft, draftModified, phase, setInput, selection.setSelectedIndex]);
583
+ const saveIntent = useCallback((frameId) => {
584
+ const result = mentorPoolSchema.safeParse(entries);
585
+ if (!result.success) {
586
+ setErrorMessage(result.error.issues[0]?.message ?? 'Invalid mentor pool');
587
+ return null;
588
+ }
589
+ const persistence = settingsService.isRuntimeModifiable(SETTING_KEYS.AGENT_MENTOR_POOL) ? 'runtime' : 'restart';
590
+ return {
591
+ stack: { type: 'keep' },
592
+ intent: {
593
+ id: `apply-settings:${frameId}`,
594
+ sourceFrameId: frameId,
595
+ intent: {
596
+ type: 'apply-settings',
597
+ changes: [{ key: SETTING_KEYS.AGENT_MENTOR_POOL, value: result.data, persistence }],
598
+ },
599
+ },
600
+ };
601
+ }, [entries, settingsService]);
602
+ return {
603
+ phase,
604
+ entries,
605
+ draft,
606
+ selectedIndex: selection.selectedIndex,
607
+ activeItems,
608
+ selectedItem: activeItems[selection.selectedIndex],
609
+ getSelectedItem: selection.getSelectedItem,
610
+ errorMessage,
611
+ fieldErrors,
612
+ modelProvider,
613
+ filteredModels,
614
+ modelLoading,
615
+ modelError,
616
+ modelSelectedIndex,
617
+ modelScrollOffset,
618
+ selectItem,
619
+ goBack,
620
+ requestDelete,
621
+ selectModel,
622
+ moveModelUp,
623
+ moveModelDown,
624
+ moveModelHome,
625
+ moveModelEnd,
626
+ pageModelUp,
627
+ pageModelDown,
628
+ refreshModels,
629
+ toggleModelProvider,
630
+ moveUp: selection.moveUp,
631
+ moveDown: selection.moveDown,
632
+ moveHome: selection.moveHome,
633
+ moveEnd: selection.moveEnd,
634
+ pageUp: selection.pageUp,
635
+ pageDown: selection.pageDown,
636
+ movePoolUp,
637
+ movePoolDown,
638
+ saveReorder,
639
+ saveIntent,
640
+ };
641
+ }
642
+ //# sourceMappingURL=use-mentor-pool-selection.js.map