@qduc/term2 0.6.0 → 0.7.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 (546) hide show
  1. package/dist/agent.d.ts +9 -0
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +139 -68
  4. package/dist/agent.js.map +1 -1
  5. package/dist/agent.test.js +179 -16
  6. package/dist/agent.test.js.map +1 -1
  7. package/dist/app.d.ts +16 -3
  8. package/dist/app.d.ts.map +1 -1
  9. package/dist/app.js +186 -23
  10. package/dist/app.js.map +1 -1
  11. package/dist/app.large-uncached-warning.test.d.ts +2 -0
  12. package/dist/app.large-uncached-warning.test.d.ts.map +1 -0
  13. package/dist/app.large-uncached-warning.test.js +15 -0
  14. package/dist/app.large-uncached-warning.test.js.map +1 -0
  15. package/dist/app.startup-banner.test.js +3 -19
  16. package/dist/app.startup-banner.test.js.map +1 -1
  17. package/dist/cli.js +170 -71
  18. package/dist/cli.js.map +1 -1
  19. package/dist/components/Banner.d.ts.map +1 -1
  20. package/dist/components/Banner.js +35 -17
  21. package/dist/components/Banner.js.map +1 -1
  22. package/dist/components/BottomArea.d.ts +7 -1
  23. package/dist/components/BottomArea.d.ts.map +1 -1
  24. package/dist/components/BottomArea.js +8 -6
  25. package/dist/components/BottomArea.js.map +1 -1
  26. package/dist/components/BottomArea.test.js +14 -1
  27. package/dist/components/BottomArea.test.js.map +1 -1
  28. package/dist/components/CommandMessage.d.ts.map +1 -1
  29. package/dist/components/CommandMessage.js +31 -1
  30. package/dist/components/CommandMessage.js.map +1 -1
  31. package/dist/components/CommandMessage.test.js +150 -31
  32. package/dist/components/CommandMessage.test.js.map +1 -1
  33. package/dist/components/Common/MenuContainer.d.ts +20 -0
  34. package/dist/components/Common/MenuContainer.d.ts.map +1 -0
  35. package/dist/components/Common/MenuContainer.js +52 -0
  36. package/dist/components/Common/MenuContainer.js.map +1 -0
  37. package/dist/components/Common/ScrollableTabBar.d.ts +26 -0
  38. package/dist/components/Common/ScrollableTabBar.d.ts.map +1 -0
  39. package/dist/components/Common/ScrollableTabBar.js +26 -0
  40. package/dist/components/Common/ScrollableTabBar.js.map +1 -0
  41. package/dist/components/Common/compute-visible-tabs.d.ts +16 -0
  42. package/dist/components/Common/compute-visible-tabs.d.ts.map +1 -0
  43. package/dist/components/Common/compute-visible-tabs.js +53 -0
  44. package/dist/components/Common/compute-visible-tabs.js.map +1 -0
  45. package/dist/components/Common/compute-visible-tabs.test.d.ts +2 -0
  46. package/dist/components/Common/compute-visible-tabs.test.d.ts.map +1 -0
  47. package/dist/components/Common/compute-visible-tabs.test.js +97 -0
  48. package/dist/components/Common/compute-visible-tabs.test.js.map +1 -0
  49. package/dist/components/HandoffConfirmationPrompt.d.ts +9 -0
  50. package/dist/components/HandoffConfirmationPrompt.d.ts.map +1 -0
  51. package/dist/components/HandoffConfirmationPrompt.js +38 -0
  52. package/dist/components/HandoffConfirmationPrompt.js.map +1 -0
  53. package/dist/components/HandoffConfirmationPrompt.test.d.ts +2 -0
  54. package/dist/components/HandoffConfirmationPrompt.test.d.ts.map +1 -0
  55. package/dist/components/HandoffConfirmationPrompt.test.js +12 -0
  56. package/dist/components/HandoffConfirmationPrompt.test.js.map +1 -0
  57. package/dist/components/Input/PopupManager.d.ts +5 -1
  58. package/dist/components/Input/PopupManager.d.ts.map +1 -1
  59. package/dist/components/Input/PopupManager.js +2 -2
  60. package/dist/components/Input/PopupManager.js.map +1 -1
  61. package/dist/components/Input/popup-key-navigation.js +2 -2
  62. package/dist/components/Input/popup-key-navigation.js.map +1 -1
  63. package/dist/components/Input/popup-key-navigation.test.js +5 -3
  64. package/dist/components/Input/popup-key-navigation.test.js.map +1 -1
  65. package/dist/components/Input/popup-props.d.ts.map +1 -1
  66. package/dist/components/Input/popup-props.js +4 -0
  67. package/dist/components/Input/popup-props.js.map +1 -1
  68. package/dist/components/Input/popup-props.test.d.ts +2 -0
  69. package/dist/components/Input/popup-props.test.d.ts.map +1 -0
  70. package/dist/components/Input/popup-props.test.js +70 -0
  71. package/dist/components/Input/popup-props.test.js.map +1 -0
  72. package/dist/components/InputBox.d.ts +0 -1
  73. package/dist/components/InputBox.d.ts.map +1 -1
  74. package/dist/components/InputBox.js +66 -14
  75. package/dist/components/InputBox.js.map +1 -1
  76. package/dist/components/InputBox.test.js +192 -12
  77. package/dist/components/InputBox.test.js.map +1 -1
  78. package/dist/components/MessageList.d.ts +1 -0
  79. package/dist/components/MessageList.d.ts.map +1 -1
  80. package/dist/components/MessageList.js.map +1 -1
  81. package/dist/components/ModelSelectionMenu.d.ts.map +1 -1
  82. package/dist/components/ModelSelectionMenu.debug.test.d.ts +2 -0
  83. package/dist/components/ModelSelectionMenu.debug.test.d.ts.map +1 -0
  84. package/dist/components/ModelSelectionMenu.debug.test.js.map +1 -0
  85. package/dist/components/ModelSelectionMenu.js +29 -125
  86. package/dist/components/ModelSelectionMenu.js.map +1 -1
  87. package/dist/components/ModelSelectionMenu.test.js +9 -5
  88. package/dist/components/ModelSelectionMenu.test.js.map +1 -1
  89. package/dist/components/PathSelectionMenu.d.ts.map +1 -1
  90. package/dist/components/PathSelectionMenu.js +15 -55
  91. package/dist/components/PathSelectionMenu.js.map +1 -1
  92. package/dist/components/SettingsSelectionMenu.d.ts +4 -1
  93. package/dist/components/SettingsSelectionMenu.d.ts.map +1 -1
  94. package/dist/components/SettingsSelectionMenu.js +48 -104
  95. package/dist/components/SettingsSelectionMenu.js.map +1 -1
  96. package/dist/components/SettingsSelectionMenu.scroll.test.js +140 -0
  97. package/dist/components/SettingsSelectionMenu.scroll.test.js.map +1 -1
  98. package/dist/components/SettingsSelectionMenu.test.js +38 -5
  99. package/dist/components/SettingsSelectionMenu.test.js.map +1 -1
  100. package/dist/components/SettingsValueSelectionMenu.d.ts.map +1 -1
  101. package/dist/components/SettingsValueSelectionMenu.js +24 -51
  102. package/dist/components/SettingsValueSelectionMenu.js.map +1 -1
  103. package/dist/components/SlashCommandMenu.d.ts +1 -0
  104. package/dist/components/SlashCommandMenu.d.ts.map +1 -1
  105. package/dist/components/SlashCommandMenu.js +11 -14
  106. package/dist/components/SlashCommandMenu.js.map +1 -1
  107. package/dist/components/StatusBar.d.ts +2 -0
  108. package/dist/components/StatusBar.d.ts.map +1 -1
  109. package/dist/components/StatusBar.js +35 -2
  110. package/dist/components/StatusBar.js.map +1 -1
  111. package/dist/components/StatusBar.test.js +32 -0
  112. package/dist/components/StatusBar.test.js.map +1 -1
  113. package/dist/components/UndoSelectionMenu.d.ts.map +1 -1
  114. package/dist/components/UndoSelectionMenu.js +6 -33
  115. package/dist/components/UndoSelectionMenu.js.map +1 -1
  116. package/dist/context/InputContext.stability.test.js +9 -7
  117. package/dist/context/InputContext.stability.test.js.map +1 -1
  118. package/dist/env-setup.js +1 -0
  119. package/dist/env-setup.js.map +1 -1
  120. package/dist/hooks/use-app-commands.d.ts +22 -2
  121. package/dist/hooks/use-app-commands.d.ts.map +1 -1
  122. package/dist/hooks/use-app-commands.js +43 -3
  123. package/dist/hooks/use-app-commands.js.map +1 -1
  124. package/dist/hooks/use-app-commands.test.js +135 -1
  125. package/dist/hooks/use-app-commands.test.js.map +1 -1
  126. package/dist/hooks/use-conversation.clear.test.d.ts +2 -0
  127. package/dist/hooks/use-conversation.clear.test.d.ts.map +1 -0
  128. package/dist/hooks/use-conversation.clear.test.js +54 -0
  129. package/dist/hooks/use-conversation.clear.test.js.map +1 -0
  130. package/dist/hooks/use-conversation.d.ts +25 -2
  131. package/dist/hooks/use-conversation.d.ts.map +1 -1
  132. package/dist/hooks/use-conversation.js +90 -12
  133. package/dist/hooks/use-conversation.js.map +1 -1
  134. package/dist/hooks/use-escape-key.d.ts +8 -1
  135. package/dist/hooks/use-escape-key.d.ts.map +1 -1
  136. package/dist/hooks/use-escape-key.js +15 -4
  137. package/dist/hooks/use-escape-key.js.map +1 -1
  138. package/dist/hooks/use-escape-key.test.js +135 -28
  139. package/dist/hooks/use-escape-key.test.js.map +1 -1
  140. package/dist/hooks/use-input-history.test.js +14 -8
  141. package/dist/hooks/use-input-history.test.js.map +1 -1
  142. package/dist/hooks/use-mode-handlers.d.ts +12 -1
  143. package/dist/hooks/use-mode-handlers.d.ts.map +1 -1
  144. package/dist/hooks/use-mode-handlers.js +31 -1
  145. package/dist/hooks/use-mode-handlers.js.map +1 -1
  146. package/dist/hooks/use-model-selection.d.ts +6 -1
  147. package/dist/hooks/use-model-selection.d.ts.map +1 -1
  148. package/dist/hooks/use-model-selection.js +50 -8
  149. package/dist/hooks/use-model-selection.js.map +1 -1
  150. package/dist/hooks/use-model-selection.test.js +306 -50
  151. package/dist/hooks/use-model-selection.test.js.map +1 -1
  152. package/dist/hooks/use-path-completion.d.ts +4 -0
  153. package/dist/hooks/use-path-completion.d.ts.map +1 -1
  154. package/dist/hooks/use-path-completion.js +23 -17
  155. package/dist/hooks/use-path-completion.js.map +1 -1
  156. package/dist/hooks/use-runtime-settings.d.ts.map +1 -1
  157. package/dist/hooks/use-runtime-settings.js +7 -2
  158. package/dist/hooks/use-runtime-settings.js.map +1 -1
  159. package/dist/hooks/use-runtime-settings.test.d.ts +2 -0
  160. package/dist/hooks/use-runtime-settings.test.d.ts.map +1 -0
  161. package/dist/hooks/use-runtime-settings.test.js +45 -0
  162. package/dist/hooks/use-runtime-settings.test.js.map +1 -0
  163. package/dist/hooks/use-selection.d.ts +6 -2
  164. package/dist/hooks/use-selection.d.ts.map +1 -1
  165. package/dist/hooks/use-selection.js +53 -16
  166. package/dist/hooks/use-selection.js.map +1 -1
  167. package/dist/hooks/use-selection.test.d.ts +2 -0
  168. package/dist/hooks/use-selection.test.d.ts.map +1 -0
  169. package/dist/hooks/use-selection.test.js +132 -0
  170. package/dist/hooks/use-selection.test.js.map +1 -0
  171. package/dist/hooks/use-settings-completion.d.ts +19 -0
  172. package/dist/hooks/use-settings-completion.d.ts.map +1 -1
  173. package/dist/hooks/use-settings-completion.js +106 -18
  174. package/dist/hooks/use-settings-completion.js.map +1 -1
  175. package/dist/hooks/use-settings-completion.scroll.test.js +68 -29
  176. package/dist/hooks/use-settings-completion.scroll.test.js.map +1 -1
  177. package/dist/hooks/use-settings-completion.test.js +36 -1
  178. package/dist/hooks/use-settings-completion.test.js.map +1 -1
  179. package/dist/hooks/use-settings-value-completion.d.ts +7 -1
  180. package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
  181. package/dist/hooks/use-settings-value-completion.js +18 -7
  182. package/dist/hooks/use-settings-value-completion.js.map +1 -1
  183. package/dist/hooks/use-slash-commands.d.ts +5 -0
  184. package/dist/hooks/use-slash-commands.d.ts.map +1 -1
  185. package/dist/hooks/use-slash-commands.js +22 -2
  186. package/dist/hooks/use-slash-commands.js.map +1 -1
  187. package/dist/hooks/use-trigger-detection.test.js +9 -6
  188. package/dist/hooks/use-trigger-detection.test.js.map +1 -1
  189. package/dist/hooks/use-undo-selection.d.ts +4 -0
  190. package/dist/hooks/use-undo-selection.d.ts.map +1 -1
  191. package/dist/hooks/use-undo-selection.js +18 -1
  192. package/dist/hooks/use-undo-selection.js.map +1 -1
  193. package/dist/inspect_zod.d.ts +2 -0
  194. package/dist/inspect_zod.d.ts.map +1 -0
  195. package/dist/inspect_zod.js +16 -0
  196. package/dist/inspect_zod.js.map +1 -0
  197. package/dist/lib/openai-agent-client.chat.test.js +40 -0
  198. package/dist/lib/openai-agent-client.chat.test.js.map +1 -1
  199. package/dist/lib/openai-agent-client.d.ts +18 -4
  200. package/dist/lib/openai-agent-client.d.ts.map +1 -1
  201. package/dist/lib/openai-agent-client.js +228 -32
  202. package/dist/lib/openai-agent-client.js.map +1 -1
  203. package/dist/lib/openai-agent-client.public-methods.test.js +193 -0
  204. package/dist/lib/openai-agent-client.public-methods.test.js.map +1 -1
  205. package/dist/lib/openai-agent-client.test.js +71 -1
  206. package/dist/lib/openai-agent-client.test.js.map +1 -1
  207. package/dist/lib/retry-executor.js +45 -7
  208. package/dist/lib/retry-executor.js.map +1 -1
  209. package/dist/lib/retry-executor.test.js +63 -0
  210. package/dist/lib/retry-executor.test.js.map +1 -1
  211. package/dist/lib/tool-invoke.d.ts +3 -2
  212. package/dist/lib/tool-invoke.d.ts.map +1 -1
  213. package/dist/lib/tool-invoke.js +213 -10
  214. package/dist/lib/tool-invoke.js.map +1 -1
  215. package/dist/lib/tool-invoke.test.js +103 -0
  216. package/dist/lib/tool-invoke.test.js.map +1 -1
  217. package/dist/non-interactive.d.ts +1 -0
  218. package/dist/non-interactive.d.ts.map +1 -1
  219. package/dist/non-interactive.js +3 -1
  220. package/dist/non-interactive.js.map +1 -1
  221. package/dist/non-interactive.test.js +8 -1
  222. package/dist/non-interactive.test.js.map +1 -1
  223. package/dist/prompts/codex.md +105 -97
  224. package/dist/prompts/fragments/gpt-5.3-codex.md +7 -0
  225. package/dist/prompts/fragments/gpt-5.4-small.md +6 -0
  226. package/dist/prompts/fragments/gpt-5.4.md +7 -0
  227. package/dist/prompts/fragments/gpt-5.5.md +7 -0
  228. package/dist/prompts/gpt-5-modern.md +96 -54
  229. package/dist/prompts/plan-mode-info.md +14 -3
  230. package/dist/prompts/prompt-constructor.d.ts +19 -0
  231. package/dist/prompts/prompt-constructor.d.ts.map +1 -0
  232. package/dist/prompts/prompt-constructor.js +53 -0
  233. package/dist/prompts/prompt-constructor.js.map +1 -0
  234. package/dist/prompts/prompt-constructor.test.d.ts +2 -0
  235. package/dist/prompts/prompt-constructor.test.d.ts.map +1 -0
  236. package/dist/prompts/prompt-constructor.test.js +99 -0
  237. package/dist/prompts/prompt-constructor.test.js.map +1 -0
  238. package/dist/prompts/prompt-constructor.test.ts +112 -0
  239. package/dist/prompts/prompt-constructor.ts +91 -0
  240. package/dist/prompts/prompt-profiles.d.ts +17 -0
  241. package/dist/prompts/prompt-profiles.d.ts.map +1 -0
  242. package/dist/prompts/prompt-profiles.js +61 -0
  243. package/dist/prompts/prompt-profiles.js.map +1 -0
  244. package/dist/prompts/prompt-profiles.ts +77 -0
  245. package/dist/prompts/prompt-selector.d.ts.map +1 -1
  246. package/dist/prompts/prompt-selector.js +3 -21
  247. package/dist/prompts/prompt-selector.js.map +1 -1
  248. package/dist/prompts/prompt-selector.ts +3 -25
  249. package/dist/prompts/reasoning-efficiency.d.ts.map +1 -1
  250. package/dist/prompts/reasoning-efficiency.js +2 -0
  251. package/dist/prompts/reasoning-efficiency.js.map +1 -1
  252. package/dist/prompts/reasoning-efficiency.test.d.ts +2 -0
  253. package/dist/prompts/reasoning-efficiency.test.d.ts.map +1 -0
  254. package/dist/prompts/reasoning-efficiency.test.js +11 -0
  255. package/dist/prompts/reasoning-efficiency.test.js.map +1 -0
  256. package/dist/prompts/reasoning-efficiency.test.ts +12 -0
  257. package/dist/prompts/reasoning-efficiency.ts +2 -0
  258. package/dist/prompts/search-via-shell.test.js +19 -16
  259. package/dist/prompts/search-via-shell.test.js.map +1 -1
  260. package/dist/prompts/search-via-shell.test.ts +20 -16
  261. package/dist/prompts/subagent-delegation.test.js +12 -10
  262. package/dist/prompts/subagent-delegation.test.js.map +1 -1
  263. package/dist/prompts/subagent-delegation.test.ts +13 -10
  264. package/dist/prompts/worktree-hygiene.md +9 -0
  265. package/dist/providers/ai-sdk-logging-fetch.d.ts +1 -1
  266. package/dist/providers/ai-sdk-logging-fetch.d.ts.map +1 -1
  267. package/dist/providers/ai-sdk-logging-fetch.js +145 -47
  268. package/dist/providers/ai-sdk-logging-fetch.js.map +1 -1
  269. package/dist/providers/ai-sdk-logging-fetch.test.js +202 -5
  270. package/dist/providers/ai-sdk-logging-fetch.test.js.map +1 -1
  271. package/dist/providers/codex-responses-model.d.ts +20 -0
  272. package/dist/providers/codex-responses-model.d.ts.map +1 -0
  273. package/dist/providers/codex-responses-model.js +170 -0
  274. package/dist/providers/codex-responses-model.js.map +1 -0
  275. package/dist/providers/codex-responses-model.test.d.ts +2 -0
  276. package/dist/providers/codex-responses-model.test.d.ts.map +1 -0
  277. package/dist/providers/codex-responses-model.test.js +240 -0
  278. package/dist/providers/codex-responses-model.test.js.map +1 -0
  279. package/dist/providers/codex.provider.d.ts +29 -0
  280. package/dist/providers/codex.provider.d.ts.map +1 -0
  281. package/dist/providers/codex.provider.js +486 -0
  282. package/dist/providers/codex.provider.js.map +1 -0
  283. package/dist/providers/codex.provider.test.d.ts +2 -0
  284. package/dist/providers/codex.provider.test.d.ts.map +1 -0
  285. package/dist/providers/codex.provider.test.js +634 -0
  286. package/dist/providers/codex.provider.test.js.map +1 -0
  287. package/dist/providers/custom-provider-adapter.test.js +56 -0
  288. package/dist/providers/custom-provider-adapter.test.js.map +1 -1
  289. package/dist/providers/fallback-responses-model.d.ts +20 -0
  290. package/dist/providers/fallback-responses-model.d.ts.map +1 -0
  291. package/dist/providers/fallback-responses-model.js +277 -0
  292. package/dist/providers/fallback-responses-model.js.map +1 -0
  293. package/dist/providers/fallback-responses-model.test.d.ts +2 -0
  294. package/dist/providers/fallback-responses-model.test.d.ts.map +1 -0
  295. package/dist/providers/fallback-responses-model.test.js +279 -0
  296. package/dist/providers/fallback-responses-model.test.js.map +1 -0
  297. package/dist/providers/fetch/compose.d.ts +7 -0
  298. package/dist/providers/fetch/compose.d.ts.map +1 -0
  299. package/dist/providers/fetch/compose.js +20 -0
  300. package/dist/providers/fetch/compose.js.map +1 -0
  301. package/dist/providers/fetch/composer.d.ts +13 -0
  302. package/dist/providers/fetch/composer.d.ts.map +1 -0
  303. package/dist/providers/fetch/composer.js +15 -0
  304. package/dist/providers/fetch/composer.js.map +1 -0
  305. package/dist/providers/fetch/composer.test.d.ts +2 -0
  306. package/dist/providers/fetch/composer.test.d.ts.map +1 -0
  307. package/dist/providers/fetch/composer.test.js +448 -0
  308. package/dist/providers/fetch/composer.test.js.map +1 -0
  309. package/dist/providers/fetch/logging-middleware.d.ts +16 -0
  310. package/dist/providers/fetch/logging-middleware.d.ts.map +1 -0
  311. package/dist/providers/fetch/logging-middleware.js +214 -0
  312. package/dist/providers/fetch/logging-middleware.js.map +1 -0
  313. package/dist/providers/index.d.ts +1 -0
  314. package/dist/providers/index.d.ts.map +1 -1
  315. package/dist/providers/index.js +1 -0
  316. package/dist/providers/index.js.map +1 -1
  317. package/dist/providers/llama-cpp.provider.d.ts +3 -0
  318. package/dist/providers/llama-cpp.provider.d.ts.map +1 -0
  319. package/dist/providers/llama-cpp.provider.js +34 -0
  320. package/dist/providers/llama-cpp.provider.js.map +1 -0
  321. package/dist/providers/openai-compatible-middleware.d.ts +7 -0
  322. package/dist/providers/openai-compatible-middleware.d.ts.map +1 -0
  323. package/dist/providers/openai-compatible-middleware.js +133 -0
  324. package/dist/providers/openai-compatible-middleware.js.map +1 -0
  325. package/dist/providers/openai-compatible-models.d.ts +6 -0
  326. package/dist/providers/openai-compatible-models.d.ts.map +1 -0
  327. package/dist/providers/openai-compatible-models.js +17 -0
  328. package/dist/providers/openai-compatible-models.js.map +1 -0
  329. package/dist/providers/openai-compatible-response-normalizer.d.ts +7 -0
  330. package/dist/providers/openai-compatible-response-normalizer.d.ts.map +1 -0
  331. package/dist/providers/openai-compatible-response-normalizer.js +58 -0
  332. package/dist/providers/openai-compatible-response-normalizer.js.map +1 -0
  333. package/dist/providers/openai-compatible.provider.d.ts +4 -1
  334. package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
  335. package/dist/providers/openai-compatible.provider.js +68 -324
  336. package/dist/providers/openai-compatible.provider.js.map +1 -1
  337. package/dist/providers/openai-compatible.provider.test.js +106 -1
  338. package/dist/providers/openai-compatible.provider.test.js.map +1 -1
  339. package/dist/providers/openai.provider.js +53 -1
  340. package/dist/providers/openai.provider.js.map +1 -1
  341. package/dist/providers/opencode.provider.d.ts +19 -0
  342. package/dist/providers/opencode.provider.d.ts.map +1 -0
  343. package/dist/providers/opencode.provider.js +45 -0
  344. package/dist/providers/opencode.provider.js.map +1 -0
  345. package/dist/providers/openrouter.provider.d.ts +2 -1
  346. package/dist/providers/openrouter.provider.d.ts.map +1 -1
  347. package/dist/providers/openrouter.provider.js +39 -22
  348. package/dist/providers/openrouter.provider.js.map +1 -1
  349. package/dist/providers/openrouter.provider.request-preprocessing.test.d.ts +2 -0
  350. package/dist/providers/openrouter.provider.request-preprocessing.test.d.ts.map +1 -0
  351. package/dist/providers/openrouter.provider.request-preprocessing.test.js +51 -0
  352. package/dist/providers/openrouter.provider.request-preprocessing.test.js.map +1 -0
  353. package/dist/providers/registry.d.ts +1 -0
  354. package/dist/providers/registry.d.ts.map +1 -1
  355. package/dist/providers/registry.js.map +1 -1
  356. package/dist/providers/registry.test.js +11 -2
  357. package/dist/providers/registry.test.js.map +1 -1
  358. package/dist/scripts/eval-auto-approval/dataset.d.ts +3 -3
  359. package/dist/services/approval-flow-coordinator.d.ts.map +1 -1
  360. package/dist/services/approval-flow-coordinator.js +17 -1
  361. package/dist/services/approval-flow-coordinator.js.map +1 -1
  362. package/dist/services/approval-flow-coordinator.test.js +22 -0
  363. package/dist/services/approval-flow-coordinator.test.js.map +1 -1
  364. package/dist/services/command-message-streaming.d.ts.map +1 -1
  365. package/dist/services/command-message-streaming.js +0 -3
  366. package/dist/services/command-message-streaming.js.map +1 -1
  367. package/dist/services/command-message-streaming.test.js +4 -2
  368. package/dist/services/command-message-streaming.test.js.map +1 -1
  369. package/dist/services/conversation-clear-save.test.d.ts +2 -0
  370. package/dist/services/conversation-clear-save.test.d.ts.map +1 -0
  371. package/dist/services/conversation-clear-save.test.js +57 -0
  372. package/dist/services/conversation-clear-save.test.js.map +1 -0
  373. package/dist/services/conversation-events.d.ts +44 -1
  374. package/dist/services/conversation-events.d.ts.map +1 -1
  375. package/dist/services/conversation-history-repair.d.ts +25 -0
  376. package/dist/services/conversation-history-repair.d.ts.map +1 -0
  377. package/dist/services/conversation-history-repair.js +227 -0
  378. package/dist/services/conversation-history-repair.js.map +1 -0
  379. package/dist/services/conversation-history-repair.test.d.ts +2 -0
  380. package/dist/services/conversation-history-repair.test.d.ts.map +1 -0
  381. package/dist/services/conversation-history-repair.test.js +76 -0
  382. package/dist/services/conversation-history-repair.test.js.map +1 -0
  383. package/dist/services/conversation-integration.test.js +3 -1
  384. package/dist/services/conversation-integration.test.js.map +1 -1
  385. package/dist/services/conversation-log-events.d.ts +107 -0
  386. package/dist/services/conversation-log-events.d.ts.map +1 -0
  387. package/dist/services/conversation-log-events.js +12 -0
  388. package/dist/services/conversation-log-events.js.map +1 -0
  389. package/dist/services/conversation-log-writer.d.ts +40 -0
  390. package/dist/services/conversation-log-writer.d.ts.map +1 -0
  391. package/dist/services/conversation-log-writer.js +264 -0
  392. package/dist/services/conversation-log-writer.js.map +1 -0
  393. package/dist/services/conversation-persistence-types.d.ts +14 -0
  394. package/dist/services/conversation-persistence-types.d.ts.map +1 -0
  395. package/dist/services/conversation-persistence-types.js +2 -0
  396. package/dist/services/conversation-persistence-types.js.map +1 -0
  397. package/dist/services/conversation-persistence.d.ts +40 -38
  398. package/dist/services/conversation-persistence.d.ts.map +1 -1
  399. package/dist/services/conversation-persistence.js +312 -71
  400. package/dist/services/conversation-persistence.js.map +1 -1
  401. package/dist/services/conversation-persistence.test.js +485 -355
  402. package/dist/services/conversation-persistence.test.js.map +1 -1
  403. package/dist/services/conversation-replay.d.ts +26 -0
  404. package/dist/services/conversation-replay.d.ts.map +1 -0
  405. package/dist/services/conversation-replay.js +252 -0
  406. package/dist/services/conversation-replay.js.map +1 -0
  407. package/dist/services/conversation-replay.test.d.ts +2 -0
  408. package/dist/services/conversation-replay.test.d.ts.map +1 -0
  409. package/dist/services/conversation-replay.test.js +153 -0
  410. package/dist/services/conversation-replay.test.js.map +1 -0
  411. package/dist/services/conversation-result-builder.d.ts.map +1 -1
  412. package/dist/services/conversation-result-builder.js +8 -2
  413. package/dist/services/conversation-result-builder.js.map +1 -1
  414. package/dist/services/conversation-result-builder.test.js +53 -0
  415. package/dist/services/conversation-result-builder.test.js.map +1 -1
  416. package/dist/services/conversation-retry-policy.d.ts +24 -0
  417. package/dist/services/conversation-retry-policy.d.ts.map +1 -1
  418. package/dist/services/conversation-retry-policy.js +68 -4
  419. package/dist/services/conversation-retry-policy.js.map +1 -1
  420. package/dist/services/conversation-retry-policy.test.js +99 -2
  421. package/dist/services/conversation-retry-policy.test.js.map +1 -1
  422. package/dist/services/conversation-service.d.ts +12 -2
  423. package/dist/services/conversation-service.d.ts.map +1 -1
  424. package/dist/services/conversation-service.js +29 -3
  425. package/dist/services/conversation-service.js.map +1 -1
  426. package/dist/services/conversation-session.auto-approval.test.js +2 -1
  427. package/dist/services/conversation-session.auto-approval.test.js.map +1 -1
  428. package/dist/services/conversation-session.d.ts +17 -1
  429. package/dist/services/conversation-session.d.ts.map +1 -1
  430. package/dist/services/conversation-session.js +580 -134
  431. package/dist/services/conversation-session.js.map +1 -1
  432. package/dist/services/conversation-store.d.ts.map +1 -1
  433. package/dist/services/conversation-store.js +6 -5
  434. package/dist/services/conversation-store.js.map +1 -1
  435. package/dist/services/conversation-store.test.js +34 -0
  436. package/dist/services/conversation-store.test.js.map +1 -1
  437. package/dist/services/input-surge-guard.d.ts +4 -0
  438. package/dist/services/input-surge-guard.d.ts.map +1 -1
  439. package/dist/services/input-surge-guard.js +2 -2
  440. package/dist/services/input-surge-guard.js.map +1 -1
  441. package/dist/services/input-surge-guard.test.js +15 -1
  442. package/dist/services/input-surge-guard.test.js.map +1 -1
  443. package/dist/services/large-uncached-input-guard.d.ts +35 -0
  444. package/dist/services/large-uncached-input-guard.d.ts.map +1 -0
  445. package/dist/services/large-uncached-input-guard.js +127 -0
  446. package/dist/services/large-uncached-input-guard.js.map +1 -0
  447. package/dist/services/large-uncached-input-guard.test.d.ts +2 -0
  448. package/dist/services/large-uncached-input-guard.test.d.ts.map +1 -0
  449. package/dist/services/large-uncached-input-guard.test.js +160 -0
  450. package/dist/services/large-uncached-input-guard.test.js.map +1 -0
  451. package/dist/services/logging-contract.d.ts +1 -1
  452. package/dist/services/logging-service.d.ts +4 -0
  453. package/dist/services/logging-service.d.ts.map +1 -1
  454. package/dist/services/logging-service.js +91 -33
  455. package/dist/services/logging-service.js.map +1 -1
  456. package/dist/services/model-service.d.ts +2 -0
  457. package/dist/services/model-service.d.ts.map +1 -1
  458. package/dist/services/model-service.js +7 -1
  459. package/dist/services/model-service.js.map +1 -1
  460. package/dist/services/provider-traffic.d.ts +87 -0
  461. package/dist/services/provider-traffic.d.ts.map +1 -0
  462. package/dist/services/provider-traffic.js +603 -0
  463. package/dist/services/provider-traffic.js.map +1 -0
  464. package/dist/services/provider-traffic.test.d.ts +2 -0
  465. package/dist/services/provider-traffic.test.d.ts.map +1 -0
  466. package/dist/services/provider-traffic.test.js +475 -0
  467. package/dist/services/provider-traffic.test.js.map +1 -0
  468. package/dist/services/rtk-service.d.ts.map +1 -1
  469. package/dist/services/rtk-service.js +1 -2
  470. package/dist/services/rtk-service.js.map +1 -1
  471. package/dist/services/service-interfaces.d.ts +16 -0
  472. package/dist/services/service-interfaces.d.ts.map +1 -1
  473. package/dist/services/settings-schema.d.ts +36 -28
  474. package/dist/services/settings-schema.d.ts.map +1 -1
  475. package/dist/services/settings-schema.js +7 -2
  476. package/dist/services/settings-schema.js.map +1 -1
  477. package/dist/services/settings-service.js +6 -6
  478. package/dist/services/settings-service.js.map +1 -1
  479. package/dist/services/settings-sources.d.ts.map +1 -1
  480. package/dist/services/settings-sources.js +1 -0
  481. package/dist/services/settings-sources.js.map +1 -1
  482. package/dist/services/shell-auto-approval-evaluator.d.ts +1 -1
  483. package/dist/services/shell-auto-approval-evaluator.d.ts.map +1 -1
  484. package/dist/services/shell-auto-approval-evaluator.js +284 -81
  485. package/dist/services/shell-auto-approval-evaluator.js.map +1 -1
  486. package/dist/services/shell-auto-approval-evaluator.test.js +215 -15
  487. package/dist/services/shell-auto-approval-evaluator.test.js.map +1 -1
  488. package/dist/services/stream-event-processor.d.ts +4 -0
  489. package/dist/services/stream-event-processor.d.ts.map +1 -1
  490. package/dist/services/stream-event-processor.js +78 -39
  491. package/dist/services/stream-event-processor.js.map +1 -1
  492. package/dist/services/stream-event-processor.test.js +71 -0
  493. package/dist/services/stream-event-processor.test.js.map +1 -1
  494. package/dist/services/subagents/subagent-manager.d.ts +2 -0
  495. package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
  496. package/dist/services/subagents/subagent-manager.js +124 -21
  497. package/dist/services/subagents/subagent-manager.js.map +1 -1
  498. package/dist/services/subagents/subagent-manager.test.js +453 -0
  499. package/dist/services/subagents/subagent-manager.test.js.map +1 -1
  500. package/dist/services/terminal-result-collector.d.ts.map +1 -1
  501. package/dist/services/terminal-result-collector.js +6 -1
  502. package/dist/services/terminal-result-collector.js.map +1 -1
  503. package/dist/services/tool-call-arguments.d.ts +20 -0
  504. package/dist/services/tool-call-arguments.d.ts.map +1 -0
  505. package/dist/services/tool-call-arguments.js +49 -0
  506. package/dist/services/tool-call-arguments.js.map +1 -0
  507. package/dist/services/tool-execution-ledger.d.ts +35 -0
  508. package/dist/services/tool-execution-ledger.d.ts.map +1 -0
  509. package/dist/services/tool-execution-ledger.js +204 -0
  510. package/dist/services/tool-execution-ledger.js.map +1 -0
  511. package/dist/services/tool-execution-ledger.test.d.ts +2 -0
  512. package/dist/services/tool-execution-ledger.test.d.ts.map +1 -0
  513. package/dist/services/tool-execution-ledger.test.js +96 -0
  514. package/dist/services/tool-execution-ledger.test.js.map +1 -0
  515. package/dist/tools/apply-patch.d.ts +8 -0
  516. package/dist/tools/apply-patch.d.ts.map +1 -1
  517. package/dist/tools/apply-patch.js +157 -2
  518. package/dist/tools/apply-patch.js.map +1 -1
  519. package/dist/tools/apply-patch.test.js +81 -0
  520. package/dist/tools/apply-patch.test.js.map +1 -1
  521. package/dist/tools/search-replace.d.ts.map +1 -1
  522. package/dist/tools/search-replace.js +92 -140
  523. package/dist/tools/search-replace.js.map +1 -1
  524. package/dist/utils/command-safety/path-analysis.d.ts.map +1 -1
  525. package/dist/utils/command-safety/path-analysis.js +143 -35
  526. package/dist/utils/command-safety/path-analysis.js.map +1 -1
  527. package/dist/utils/conversation-event-handler.d.ts.map +1 -1
  528. package/dist/utils/conversation-event-handler.js +52 -4
  529. package/dist/utils/conversation-event-handler.js.map +1 -1
  530. package/dist/utils/conversation-event-handler.test.js +175 -0
  531. package/dist/utils/conversation-event-handler.test.js.map +1 -1
  532. package/dist/utils/error-helpers.d.ts +1 -0
  533. package/dist/utils/error-helpers.d.ts.map +1 -1
  534. package/dist/utils/error-helpers.js +61 -0
  535. package/dist/utils/error-helpers.js.map +1 -1
  536. package/dist/utils/error-helpers.test.js +13 -1
  537. package/dist/utils/error-helpers.test.js.map +1 -1
  538. package/dist/utils/ink-render-options.d.ts +1 -1
  539. package/dist/utils/ink-render-options.d.ts.map +1 -1
  540. package/dist/utils/ink-render-options.js +1 -1
  541. package/dist/utils/ink-render-options.js.map +1 -1
  542. package/dist/utils/streaming-session-factory.d.ts +2 -0
  543. package/dist/utils/streaming-session-factory.d.ts.map +1 -1
  544. package/dist/utils/streaming-session-factory.js +4 -0
  545. package/dist/utils/streaming-session-factory.js.map +1 -1
  546. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-constructor.js","sourceRoot":"","sources":["../../source/prompts/prompt-constructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAoB3D,MAAM,4BAA4B,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AAE5F,MAAM,UAAU,eAAe,CAAC,OAAiC;IAC/D,MAAM,EACJ,KAAK,EACL,QAAQ,EACR,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,GAAG,OAAO,CAAC;IACZ,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACnD,MAAM,OAAO,GAAG,mBAAmB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC3E,MAAM,aAAa,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC;IACzD,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,UAAU,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC,gBAAgB,IAAI,kBAAkB,EAAE,CAAC;QAC5C,cAAc,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,CAAC,gBAAgB,IAAI,cAAc,EAAE,CAAC;QACxC,cAAc,CAAC,IAAI,CAAC,yBAAyB,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC;SAAM,IAAI,CAAC,gBAAgB,IAAI,CAAC,QAAQ,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACpF,cAAc,CAAC,IAAI,CAAC,8BAA8B,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,gBAAgB,IAAI,kBAAkB,EAAE,CAAC;QAC3C,cAAc,CAAC,IAAI,CAAC,6BAA6B,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,4BAA4B,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC9E,cAAc,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO;QACL,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,aAAa;QACb,cAAc;KACf,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,EAAE,QAAQ,EAAyB;IAChE,OAAO,QAAQ;QACb,CAAC,CAAC,+KAA+K;QACjL,CAAC,CAAC,2LAA2L,CAAC;AAClM,CAAC;AAED,SAAS,8BAA8B,CAAC,EAAE,QAAQ,EAAyB;IACzE,OAAO,QAAQ;QACb,CAAC,CAAC,oGAAoG;QACtG,CAAC,CAAC,uIAAuI,CAAC;AAC9I,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=prompt-constructor.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-constructor.test.d.ts","sourceRoot":"","sources":["../../source/prompts/prompt-constructor.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,99 @@
1
+ import test from 'ava';
2
+ import { buildPromptSpec } from './prompt-constructor.js';
3
+ test('buildPromptSpec preserves mode precedence for base prompts', (t) => {
4
+ t.is(buildPromptSpec({ model: 'gpt-5.5', liteMode: true, orchestratorMode: true }).basePromptFile, 'lite.md');
5
+ t.is(buildPromptSpec({ model: 'gpt-5.5', liteMode: false, orchestratorMode: true }).basePromptFile, 'orchestrator.md');
6
+ t.is(buildPromptSpec({ model: 'claude-3-sonnet', liteMode: false }).basePromptFile, 'anthropic.md');
7
+ t.is(buildPromptSpec({ model: 'gpt-5.3-codex', liteMode: false }).basePromptFile, 'codex.md');
8
+ t.is(buildPromptSpec({ model: 'gpt-4o', liteMode: false }).basePromptFile, 'simple.md');
9
+ });
10
+ // test('buildPromptSpec adds GPT version fragments without changing the base GPT prompt fallback', (t) => {
11
+ // const gpt55 = buildPromptSpec({ model: 'gpt-5.5-2026-04-23', liteMode: false });
12
+ // t.is(gpt55.basePromptFile, 'gpt-5-modern.md');
13
+ // t.true(gpt55.fragmentFiles.includes('fragments/gpt-5.5.md'));
14
+ //
15
+ // const gpt54 = buildPromptSpec({ model: 'gpt-5.4', liteMode: false });
16
+ // t.is(gpt54.basePromptFile, 'gpt-5-modern.md');
17
+ // t.true(gpt54.fragmentFiles.includes('fragments/gpt-5.4.md'));
18
+ // t.false(gpt54.fragmentFiles.includes('fragments/gpt-5.4-small.md'));
19
+ //
20
+ // const gpt54Mini = buildPromptSpec({ model: 'gpt-5.4-mini', liteMode: false });
21
+ // t.is(gpt54Mini.basePromptFile, 'gpt-5-modern.md');
22
+ // t.true(gpt54Mini.fragmentFiles.includes('fragments/gpt-5.4.md'));
23
+ // t.true(gpt54Mini.fragmentFiles.includes('fragments/gpt-5.4-small.md'));
24
+ //
25
+ // const gpt53Codex = buildPromptSpec({ model: 'gpt-5.3-codex', liteMode: false });
26
+ // t.is(gpt53Codex.basePromptFile, 'codex.md');
27
+ // t.true(gpt53Codex.fragmentFiles.includes('fragments/gpt-5.3-codex.md'));
28
+ //
29
+ // const genericGpt5 = buildPromptSpec({ model: 'gpt-5.2', liteMode: false });
30
+ // t.is(genericGpt5.basePromptFile, 'gpt-5-modern.md');
31
+ // t.false(genericGpt5.fragmentFiles.some((fragment) => fragment.startsWith('fragments/gpt-5.')));
32
+ // });
33
+ test('buildPromptSpec composes file fragments in stable order', (t) => {
34
+ const spec = buildPromptSpec({
35
+ model: 'gpt-5.4-mini',
36
+ liteMode: false,
37
+ mentorMode: true,
38
+ planMode: true,
39
+ searchViaShell: true,
40
+ });
41
+ t.deepEqual(spec.fragmentFiles, [
42
+ // 'fragments/gpt-5.4.md',
43
+ 'fragments/gpt-5.4-small.md',
44
+ 'worktree-hygiene.md',
45
+ 'mentor-addon.md',
46
+ 'plan-mode-info.md',
47
+ ]);
48
+ });
49
+ test('buildPromptSpec always includes plan-mode-info in standard mode to keep system prompt cache-stable', (t) => {
50
+ const standard = buildPromptSpec({ model: 'gpt-4o', liteMode: false, planMode: false });
51
+ t.true(standard.fragmentFiles.includes('plan-mode-info.md'));
52
+ });
53
+ test('buildPromptSpec excludes plan-mode-info in lite and orchestrator modes', (t) => {
54
+ const lite = buildPromptSpec({ model: 'gpt-5.5', liteMode: true, planMode: false });
55
+ t.false(lite.fragmentFiles.includes('plan-mode-info.md'));
56
+ const orchestrator = buildPromptSpec({ model: 'gpt-5.5', liteMode: false, orchestratorMode: true, planMode: false });
57
+ t.false(orchestrator.fragmentFiles.includes('plan-mode-info.md'));
58
+ });
59
+ test('buildPromptSpec includes code context inline section when enabled and not orchestrator', (t) => {
60
+ const standard = buildPromptSpec({
61
+ model: 'gpt-4o',
62
+ liteMode: false,
63
+ codeContextEnabled: true,
64
+ searchViaShell: false,
65
+ });
66
+ t.true(standard.inlineSections.length > 0);
67
+ t.true(standard.inlineSections.some((s) => s.includes('Code Context')));
68
+ const gpt5 = buildPromptSpec({
69
+ model: 'gpt-5.5',
70
+ liteMode: false,
71
+ codeContextEnabled: true,
72
+ searchViaShell: false,
73
+ });
74
+ t.true(gpt5.inlineSections.some((s) => s.includes('Code Context')));
75
+ });
76
+ test('buildPromptSpec includes subagent delegation for orchestrator mode', (t) => {
77
+ const orchestrator = buildPromptSpec({
78
+ model: 'gpt-5.5',
79
+ liteMode: false,
80
+ orchestratorMode: true,
81
+ runSubagentEnabled: true,
82
+ codeContextEnabled: true,
83
+ searchViaShell: false,
84
+ });
85
+ t.true(orchestrator.inlineSections.some((s) => s.includes('Delegating to subagents')));
86
+ t.false(orchestrator.inlineSections.some((s) => s.includes('Code Context')));
87
+ });
88
+ test('buildPromptSpec uses lite base and skips worktree-hygiene fragment in lite mode', (t) => {
89
+ const lite = buildPromptSpec({
90
+ model: 'gpt-5.5',
91
+ liteMode: true,
92
+ codeContextEnabled: true,
93
+ searchViaShell: false,
94
+ });
95
+ t.is(lite.basePromptFile, 'lite.md');
96
+ t.false(lite.fragmentFiles.includes('worktree-hygiene.md'));
97
+ t.true(lite.inlineSections.some((s) => s.includes('Search Tools')));
98
+ });
99
+ //# sourceMappingURL=prompt-constructor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-constructor.test.js","sourceRoot":"","sources":["../../source/prompts/prompt-constructor.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ import test from 'ava';
2
+ import { buildPromptSpec } from './prompt-constructor.js';
3
+
4
+ test('buildPromptSpec preserves mode precedence for base prompts', (t) => {
5
+ t.is(buildPromptSpec({ model: 'gpt-5.5', liteMode: true, orchestratorMode: true }).basePromptFile, 'lite.md');
6
+ t.is(
7
+ buildPromptSpec({ model: 'gpt-5.5', liteMode: false, orchestratorMode: true }).basePromptFile,
8
+ 'orchestrator.md',
9
+ );
10
+ t.is(buildPromptSpec({ model: 'claude-3-sonnet', liteMode: false }).basePromptFile, 'anthropic.md');
11
+ t.is(buildPromptSpec({ model: 'gpt-5.3-codex', liteMode: false }).basePromptFile, 'codex.md');
12
+ t.is(buildPromptSpec({ model: 'gpt-4o', liteMode: false }).basePromptFile, 'simple.md');
13
+ });
14
+
15
+ // test('buildPromptSpec adds GPT version fragments without changing the base GPT prompt fallback', (t) => {
16
+ // const gpt55 = buildPromptSpec({ model: 'gpt-5.5-2026-04-23', liteMode: false });
17
+ // t.is(gpt55.basePromptFile, 'gpt-5-modern.md');
18
+ // t.true(gpt55.fragmentFiles.includes('fragments/gpt-5.5.md'));
19
+ //
20
+ // const gpt54 = buildPromptSpec({ model: 'gpt-5.4', liteMode: false });
21
+ // t.is(gpt54.basePromptFile, 'gpt-5-modern.md');
22
+ // t.true(gpt54.fragmentFiles.includes('fragments/gpt-5.4.md'));
23
+ // t.false(gpt54.fragmentFiles.includes('fragments/gpt-5.4-small.md'));
24
+ //
25
+ // const gpt54Mini = buildPromptSpec({ model: 'gpt-5.4-mini', liteMode: false });
26
+ // t.is(gpt54Mini.basePromptFile, 'gpt-5-modern.md');
27
+ // t.true(gpt54Mini.fragmentFiles.includes('fragments/gpt-5.4.md'));
28
+ // t.true(gpt54Mini.fragmentFiles.includes('fragments/gpt-5.4-small.md'));
29
+ //
30
+ // const gpt53Codex = buildPromptSpec({ model: 'gpt-5.3-codex', liteMode: false });
31
+ // t.is(gpt53Codex.basePromptFile, 'codex.md');
32
+ // t.true(gpt53Codex.fragmentFiles.includes('fragments/gpt-5.3-codex.md'));
33
+ //
34
+ // const genericGpt5 = buildPromptSpec({ model: 'gpt-5.2', liteMode: false });
35
+ // t.is(genericGpt5.basePromptFile, 'gpt-5-modern.md');
36
+ // t.false(genericGpt5.fragmentFiles.some((fragment) => fragment.startsWith('fragments/gpt-5.')));
37
+ // });
38
+
39
+ test('buildPromptSpec composes file fragments in stable order', (t) => {
40
+ const spec = buildPromptSpec({
41
+ model: 'gpt-5.4-mini',
42
+ liteMode: false,
43
+ mentorMode: true,
44
+ planMode: true,
45
+ searchViaShell: true,
46
+ });
47
+
48
+ t.deepEqual(spec.fragmentFiles, [
49
+ // 'fragments/gpt-5.4.md',
50
+ 'fragments/gpt-5.4-small.md',
51
+ 'worktree-hygiene.md',
52
+ 'mentor-addon.md',
53
+ 'plan-mode-info.md',
54
+ ]);
55
+ });
56
+
57
+ test('buildPromptSpec always includes plan-mode-info in standard mode to keep system prompt cache-stable', (t) => {
58
+ const standard = buildPromptSpec({ model: 'gpt-4o', liteMode: false, planMode: false });
59
+ t.true(standard.fragmentFiles.includes('plan-mode-info.md'));
60
+ });
61
+
62
+ test('buildPromptSpec excludes plan-mode-info in lite and orchestrator modes', (t) => {
63
+ const lite = buildPromptSpec({ model: 'gpt-5.5', liteMode: true, planMode: false });
64
+ t.false(lite.fragmentFiles.includes('plan-mode-info.md'));
65
+
66
+ const orchestrator = buildPromptSpec({ model: 'gpt-5.5', liteMode: false, orchestratorMode: true, planMode: false });
67
+ t.false(orchestrator.fragmentFiles.includes('plan-mode-info.md'));
68
+ });
69
+
70
+ test('buildPromptSpec includes code context inline section when enabled and not orchestrator', (t) => {
71
+ const standard = buildPromptSpec({
72
+ model: 'gpt-4o',
73
+ liteMode: false,
74
+ codeContextEnabled: true,
75
+ searchViaShell: false,
76
+ });
77
+ t.true(standard.inlineSections.length > 0);
78
+ t.true(standard.inlineSections.some((s) => s.includes('Code Context')));
79
+
80
+ const gpt5 = buildPromptSpec({
81
+ model: 'gpt-5.5',
82
+ liteMode: false,
83
+ codeContextEnabled: true,
84
+ searchViaShell: false,
85
+ });
86
+ t.true(gpt5.inlineSections.some((s) => s.includes('Code Context')));
87
+ });
88
+
89
+ test('buildPromptSpec includes subagent delegation for orchestrator mode', (t) => {
90
+ const orchestrator = buildPromptSpec({
91
+ model: 'gpt-5.5',
92
+ liteMode: false,
93
+ orchestratorMode: true,
94
+ runSubagentEnabled: true,
95
+ codeContextEnabled: true,
96
+ searchViaShell: false,
97
+ });
98
+ t.true(orchestrator.inlineSections.some((s) => s.includes('Delegating to subagents')));
99
+ t.false(orchestrator.inlineSections.some((s) => s.includes('Code Context')));
100
+ });
101
+
102
+ test('buildPromptSpec uses lite base and skips worktree-hygiene fragment in lite mode', (t) => {
103
+ const lite = buildPromptSpec({
104
+ model: 'gpt-5.5',
105
+ liteMode: true,
106
+ codeContextEnabled: true,
107
+ searchViaShell: false,
108
+ });
109
+ t.is(lite.basePromptFile, 'lite.md');
110
+ t.false(lite.fragmentFiles.includes('worktree-hygiene.md'));
111
+ t.true(lite.inlineSections.some((s) => s.includes('Search Tools')));
112
+ });
@@ -0,0 +1,91 @@
1
+ import { shouldPreferPatchEditingModel } from '../lib/tool-selection-policy.js';
2
+ import type { ExecutionContext } from '../services/execution-context.js';
3
+ import { getReasoningEfficiencyAddendum } from './reasoning-efficiency.js';
4
+ import { getSearchViaShellAddendum } from './search-via-shell.js';
5
+ import { getSubagentDelegationAddendum } from './subagent-delegation.js';
6
+ import { selectPromptProfile } from './prompt-profiles.js';
7
+
8
+ export type PromptConstructorOptions = {
9
+ model: string;
10
+ liteMode: boolean;
11
+ orchestratorMode?: boolean;
12
+ mentorMode?: boolean;
13
+ planMode?: boolean;
14
+ searchViaShell?: boolean;
15
+ codeContextEnabled?: boolean;
16
+ runSubagentEnabled?: boolean;
17
+ executionContext?: ExecutionContext;
18
+ };
19
+
20
+ export type PromptSpec = {
21
+ basePromptFile: string;
22
+ fragmentFiles: string[];
23
+ inlineSections: string[];
24
+ };
25
+
26
+ const GPT_OVER_THINKING_MODEL_KEYS = ['kimi', 'deepseek', 'glm', 'qwen', 'minimax', 'mimo'];
27
+
28
+ export function buildPromptSpec(options: PromptConstructorOptions): PromptSpec {
29
+ const {
30
+ model,
31
+ liteMode,
32
+ orchestratorMode,
33
+ mentorMode,
34
+ searchViaShell,
35
+ codeContextEnabled,
36
+ runSubagentEnabled,
37
+ executionContext,
38
+ } = options;
39
+ const normalizedModel = model.trim().toLowerCase();
40
+ const profile = selectPromptProfile({ model, liteMode, orchestratorMode });
41
+ const fragmentFiles = [...(profile.fragmentFiles ?? [])];
42
+ const inlineSections: string[] = [];
43
+
44
+ if (!liteMode) {
45
+ fragmentFiles.push('worktree-hygiene.md');
46
+ }
47
+
48
+ if (mentorMode && !liteMode) {
49
+ fragmentFiles.push('mentor-addon.md');
50
+ }
51
+
52
+ if (!orchestratorMode && codeContextEnabled) {
53
+ inlineSections.push(getCodeContextSection({ liteMode }));
54
+ }
55
+
56
+ if (!orchestratorMode && searchViaShell) {
57
+ inlineSections.push(getSearchViaShellAddendum({ executionContext }));
58
+ } else if (!orchestratorMode && (liteMode || !shouldPreferPatchEditingModel(model))) {
59
+ inlineSections.push(getDedicatedSearchToolsSection({ liteMode }));
60
+ }
61
+
62
+ if (orchestratorMode && runSubagentEnabled) {
63
+ inlineSections.push(getSubagentDelegationAddendum({ orchestratorMode }));
64
+ }
65
+
66
+ if (!liteMode && !orchestratorMode) {
67
+ fragmentFiles.push('plan-mode-info.md');
68
+ }
69
+
70
+ if (GPT_OVER_THINKING_MODEL_KEYS.some((key) => normalizedModel.includes(key))) {
71
+ inlineSections.push(getReasoningEfficiencyAddendum());
72
+ }
73
+
74
+ return {
75
+ basePromptFile: profile.basePromptFile,
76
+ fragmentFiles,
77
+ inlineSections,
78
+ };
79
+ }
80
+
81
+ function getCodeContextSection({ liteMode }: { liteMode: boolean }): string {
82
+ return liteMode
83
+ ? '### Code Context Tools\n\n- `read_code_outline`: inspect file structure.\n- `code_context_search`: find related files or symbol declarations. Use `read_file` before editing.'
84
+ : '### Code Context Tools\n\n- Use `read_code_outline` for a compact file outline.\n- Use `code_context_search` for related files or symbol declarations.\n- Use `read_file` before editing.';
85
+ }
86
+
87
+ function getDedicatedSearchToolsSection({ liteMode }: { liteMode: boolean }): string {
88
+ return liteMode
89
+ ? '### Search Tools\n\n- `find_files`: locate files by name or glob.\n- `grep`: search file contents.'
90
+ : '### Search Tools\n\n- Prefer `find_files` for locating files by name or glob.\n- Prefer `grep` for searching code content or symbols.';
91
+ }
@@ -0,0 +1,17 @@
1
+ export type PromptProfile = {
2
+ id: string;
3
+ basePromptFile: string;
4
+ fragmentFiles?: string[];
5
+ matches: (options: {
6
+ normalizedModel: string;
7
+ liteMode: boolean;
8
+ orchestratorMode?: boolean;
9
+ }) => boolean;
10
+ };
11
+ export declare const PROMPT_PROFILES: PromptProfile[];
12
+ export declare function selectPromptProfile({ model, liteMode, orchestratorMode, }: {
13
+ model: string;
14
+ liteMode: boolean;
15
+ orchestratorMode?: boolean;
16
+ }): PromptProfile;
17
+ //# sourceMappingURL=prompt-profiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-profiles.d.ts","sourceRoot":"","sources":["../../source/prompts/prompt-profiles.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,CAAC,OAAO,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC;CAC3G,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,aAAa,EAwD1C,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,EACR,gBAAgB,GACjB,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,aAAa,CAGhB"}
@@ -0,0 +1,61 @@
1
+ export const PROMPT_PROFILES = [
2
+ {
3
+ id: 'lite',
4
+ basePromptFile: 'lite.md',
5
+ matches: ({ liteMode }) => liteMode,
6
+ },
7
+ {
8
+ id: 'orchestrator',
9
+ basePromptFile: 'orchestrator.md',
10
+ matches: ({ orchestratorMode }) => Boolean(orchestratorMode),
11
+ },
12
+ {
13
+ id: 'anthropic',
14
+ basePromptFile: 'anthropic.md',
15
+ matches: ({ normalizedModel }) => normalizedModel.includes('sonnet') || normalizedModel.includes('haiku'),
16
+ },
17
+ {
18
+ id: 'gpt-5.3-codex',
19
+ basePromptFile: 'codex.md',
20
+ // fragmentFiles: ['fragments/gpt-5.3-codex.md'],
21
+ matches: ({ normalizedModel }) => normalizedModel.includes('gpt-5.3') && normalizedModel.includes('codex'),
22
+ },
23
+ {
24
+ id: 'gpt-5-codex',
25
+ basePromptFile: 'codex.md',
26
+ matches: ({ normalizedModel }) => normalizedModel.includes('gpt-5') && normalizedModel.includes('codex'),
27
+ },
28
+ {
29
+ id: 'gpt-5.5',
30
+ basePromptFile: 'gpt-5-modern.md',
31
+ // fragmentFiles: ['fragments/gpt-5.5.md'],
32
+ matches: ({ normalizedModel }) => normalizedModel.includes('gpt-5.5'),
33
+ },
34
+ {
35
+ id: 'gpt-5.4-small',
36
+ basePromptFile: 'gpt-5-modern.md',
37
+ fragmentFiles: ['fragments/gpt-5.4-small.md'],
38
+ matches: ({ normalizedModel }) => normalizedModel.includes('gpt-5.4') && (normalizedModel.includes('mini') || normalizedModel.includes('nano')),
39
+ },
40
+ {
41
+ id: 'gpt-5.4',
42
+ basePromptFile: 'gpt-5-modern.md',
43
+ // fragmentFiles: ['fragments/gpt-5.4.md'],
44
+ matches: ({ normalizedModel }) => normalizedModel.includes('gpt-5.4'),
45
+ },
46
+ {
47
+ id: 'gpt-5-modern',
48
+ basePromptFile: 'gpt-5-modern.md',
49
+ matches: ({ normalizedModel }) => normalizedModel.includes('gpt-5'),
50
+ },
51
+ {
52
+ id: 'default',
53
+ basePromptFile: 'simple.md',
54
+ matches: () => true,
55
+ },
56
+ ];
57
+ export function selectPromptProfile({ model, liteMode, orchestratorMode, }) {
58
+ const normalizedModel = model.trim().toLowerCase();
59
+ return PROMPT_PROFILES.find((profile) => profile.matches({ normalizedModel, liteMode, orchestratorMode }));
60
+ }
61
+ //# sourceMappingURL=prompt-profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-profiles.js","sourceRoot":"","sources":["../../source/prompts/prompt-profiles.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C;QACE,EAAE,EAAE,MAAM;QACV,cAAc,EAAE,SAAS;QACzB,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ;KACpC;IACD;QACE,EAAE,EAAE,cAAc;QAClB,cAAc,EAAE,iBAAiB;QACjC,OAAO,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC;KAC7D;IACD;QACE,EAAE,EAAE,WAAW;QACf,cAAc,EAAE,cAAc;QAC9B,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC;KAC1G;IACD;QACE,EAAE,EAAE,eAAe;QACnB,cAAc,EAAE,UAAU;QAC1B,iDAAiD;QACjD,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC;KAC3G;IACD;QACE,EAAE,EAAE,aAAa;QACjB,cAAc,EAAE,UAAU;QAC1B,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC;KACzG;IACD;QACE,EAAE,EAAE,SAAS;QACb,cAAc,EAAE,iBAAiB;QACjC,2CAA2C;QAC3C,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC;KACtE;IACD;QACE,EAAE,EAAE,eAAe;QACnB,cAAc,EAAE,iBAAiB;QACjC,aAAa,EAAE,CAAC,4BAA4B,CAAC;QAC7C,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CAC/B,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;KAChH;IACD;QACE,EAAE,EAAE,SAAS;QACb,cAAc,EAAE,iBAAiB;QACjC,2CAA2C;QAC3C,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC;KACtE;IACD;QACE,EAAE,EAAE,cAAc;QAClB,cAAc,EAAE,iBAAiB;QACjC,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC;KACpE;IACD;QACE,EAAE,EAAE,SAAS;QACb,cAAc,EAAE,WAAW;QAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;KACpB;CACF,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,EACR,gBAAgB,GAKjB;IACC,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACnD,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAE,CAAC;AAC9G,CAAC"}
@@ -0,0 +1,77 @@
1
+ export type PromptProfile = {
2
+ id: string;
3
+ basePromptFile: string;
4
+ fragmentFiles?: string[];
5
+ matches: (options: { normalizedModel: string; liteMode: boolean; orchestratorMode?: boolean }) => boolean;
6
+ };
7
+
8
+ export const PROMPT_PROFILES: PromptProfile[] = [
9
+ {
10
+ id: 'lite',
11
+ basePromptFile: 'lite.md',
12
+ matches: ({ liteMode }) => liteMode,
13
+ },
14
+ {
15
+ id: 'orchestrator',
16
+ basePromptFile: 'orchestrator.md',
17
+ matches: ({ orchestratorMode }) => Boolean(orchestratorMode),
18
+ },
19
+ {
20
+ id: 'anthropic',
21
+ basePromptFile: 'anthropic.md',
22
+ matches: ({ normalizedModel }) => normalizedModel.includes('sonnet') || normalizedModel.includes('haiku'),
23
+ },
24
+ {
25
+ id: 'gpt-5.3-codex',
26
+ basePromptFile: 'codex.md',
27
+ // fragmentFiles: ['fragments/gpt-5.3-codex.md'],
28
+ matches: ({ normalizedModel }) => normalizedModel.includes('gpt-5.3') && normalizedModel.includes('codex'),
29
+ },
30
+ {
31
+ id: 'gpt-5-codex',
32
+ basePromptFile: 'codex.md',
33
+ matches: ({ normalizedModel }) => normalizedModel.includes('gpt-5') && normalizedModel.includes('codex'),
34
+ },
35
+ {
36
+ id: 'gpt-5.5',
37
+ basePromptFile: 'gpt-5-modern.md',
38
+ // fragmentFiles: ['fragments/gpt-5.5.md'],
39
+ matches: ({ normalizedModel }) => normalizedModel.includes('gpt-5.5'),
40
+ },
41
+ {
42
+ id: 'gpt-5.4-small',
43
+ basePromptFile: 'gpt-5-modern.md',
44
+ fragmentFiles: ['fragments/gpt-5.4-small.md'],
45
+ matches: ({ normalizedModel }) =>
46
+ normalizedModel.includes('gpt-5.4') && (normalizedModel.includes('mini') || normalizedModel.includes('nano')),
47
+ },
48
+ {
49
+ id: 'gpt-5.4',
50
+ basePromptFile: 'gpt-5-modern.md',
51
+ // fragmentFiles: ['fragments/gpt-5.4.md'],
52
+ matches: ({ normalizedModel }) => normalizedModel.includes('gpt-5.4'),
53
+ },
54
+ {
55
+ id: 'gpt-5-modern',
56
+ basePromptFile: 'gpt-5-modern.md',
57
+ matches: ({ normalizedModel }) => normalizedModel.includes('gpt-5'),
58
+ },
59
+ {
60
+ id: 'default',
61
+ basePromptFile: 'simple.md',
62
+ matches: () => true,
63
+ },
64
+ ];
65
+
66
+ export function selectPromptProfile({
67
+ model,
68
+ liteMode,
69
+ orchestratorMode,
70
+ }: {
71
+ model: string;
72
+ liteMode: boolean;
73
+ orchestratorMode?: boolean;
74
+ }): PromptProfile {
75
+ const normalizedModel = model.trim().toLowerCase();
76
+ return PROMPT_PROFILES.find((profile) => profile.matches({ normalizedModel, liteMode, orchestratorMode }))!;
77
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-selector.d.ts","sourceRoot":"","sources":["../../source/prompts/prompt-selector.ts"],"names":[],"mappings":"AASA,KAAK,qBAAqB,GAAG;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,EAAE,qBAAqB,GAAG,MAAM,CAmBjH"}
1
+ {"version":3,"file":"prompt-selector.d.ts","sourceRoot":"","sources":["../../source/prompts/prompt-selector.ts"],"names":[],"mappings":"AAGA,KAAK,qBAAqB,GAAG;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,EAAE,qBAAqB,GAAG,MAAM,CAGjH"}
@@ -1,25 +1,7 @@
1
1
  import path from 'path';
2
- const DEFAULT_PROMPT = 'simple.md';
3
- const ANTHROPIC_PROMPT = 'anthropic.md';
4
- const MODERN_GPT_PROMPT = 'gpt-5-modern.md';
5
- const CODEX_PROMPT = 'codex.md';
6
- const LITE_PROMPT = 'lite.md';
7
- const ORCHESTRATOR_PROMPT = 'orchestrator.md';
2
+ import { selectPromptProfile } from './prompt-profiles.js';
8
3
  export function getPromptPath({ basePromptDir, model, liteMode, orchestratorMode }) {
9
- const normalizedModel = model.trim().toLowerCase();
10
- // Lite mode takes precedence - minimal context for terminal assistance
11
- if (liteMode) {
12
- return path.join(basePromptDir, LITE_PROMPT);
13
- }
14
- if (orchestratorMode) {
15
- return path.join(basePromptDir, ORCHESTRATOR_PROMPT);
16
- }
17
- if (normalizedModel.includes('sonnet') || normalizedModel.includes('haiku'))
18
- return path.join(basePromptDir, ANTHROPIC_PROMPT);
19
- if (normalizedModel.includes('gpt-5') && normalizedModel.includes('codex'))
20
- return path.join(basePromptDir, CODEX_PROMPT);
21
- if (normalizedModel.includes('gpt-5'))
22
- return path.join(basePromptDir, MODERN_GPT_PROMPT);
23
- return path.join(basePromptDir, DEFAULT_PROMPT);
4
+ const profile = selectPromptProfile({ model, liteMode, orchestratorMode });
5
+ return path.join(basePromptDir, profile.basePromptFile);
24
6
  }
25
7
  //# sourceMappingURL=prompt-selector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-selector.js","sourceRoot":"","sources":["../../source/prompts/prompt-selector.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,cAAc,GAAG,WAAW,CAAC;AACnC,MAAM,gBAAgB,GAAG,cAAc,CAAC;AACxC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAC5C,MAAM,YAAY,GAAG,UAAU,CAAC;AAChC,MAAM,WAAW,GAAG,SAAS,CAAC;AAC9B,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAS9C,MAAM,UAAU,aAAa,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAyB;IACvG,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEnD,uEAAuE;IACvE,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC;QACzE,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IACpD,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC;QACxE,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAChD,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;IAE1F,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"prompt-selector.js","sourceRoot":"","sources":["../../source/prompts/prompt-selector.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAS3D,MAAM,UAAU,aAAa,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAyB;IACvG,MAAM,OAAO,GAAG,mBAAmB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;AAC1D,CAAC"}
@@ -1,11 +1,5 @@
1
1
  import path from 'path';
2
-
3
- const DEFAULT_PROMPT = 'simple.md';
4
- const ANTHROPIC_PROMPT = 'anthropic.md';
5
- const MODERN_GPT_PROMPT = 'gpt-5-modern.md';
6
- const CODEX_PROMPT = 'codex.md';
7
- const LITE_PROMPT = 'lite.md';
8
- const ORCHESTRATOR_PROMPT = 'orchestrator.md';
2
+ import { selectPromptProfile } from './prompt-profiles.js';
9
3
 
10
4
  type PromptSelectorOptions = {
11
5
  basePromptDir: string;
@@ -15,22 +9,6 @@ type PromptSelectorOptions = {
15
9
  };
16
10
 
17
11
  export function getPromptPath({ basePromptDir, model, liteMode, orchestratorMode }: PromptSelectorOptions): string {
18
- const normalizedModel = model.trim().toLowerCase();
19
-
20
- // Lite mode takes precedence - minimal context for terminal assistance
21
- if (liteMode) {
22
- return path.join(basePromptDir, LITE_PROMPT);
23
- }
24
-
25
- if (orchestratorMode) {
26
- return path.join(basePromptDir, ORCHESTRATOR_PROMPT);
27
- }
28
-
29
- if (normalizedModel.includes('sonnet') || normalizedModel.includes('haiku'))
30
- return path.join(basePromptDir, ANTHROPIC_PROMPT);
31
- if (normalizedModel.includes('gpt-5') && normalizedModel.includes('codex'))
32
- return path.join(basePromptDir, CODEX_PROMPT);
33
- if (normalizedModel.includes('gpt-5')) return path.join(basePromptDir, MODERN_GPT_PROMPT);
34
-
35
- return path.join(basePromptDir, DEFAULT_PROMPT);
12
+ const profile = selectPromptProfile({ model, liteMode, orchestratorMode });
13
+ return path.join(basePromptDir, profile.basePromptFile);
36
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"reasoning-efficiency.d.ts","sourceRoot":"","sources":["../../source/prompts/reasoning-efficiency.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,8BAA8B,IAAI,MAAM,CAYvD"}
1
+ {"version":3,"file":"reasoning-efficiency.d.ts","sourceRoot":"","sources":["../../source/prompts/reasoning-efficiency.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,8BAA8B,IAAI,MAAM,CAcvD"}
@@ -12,6 +12,8 @@ Commit by default. Trust your first line of reasoning unless you spot a concrete
12
12
 
13
13
  Revise once, not repeatedly. If you do catch a real mistake, correct it cleanly and move on. Do not re-examine the correction, second-guess the revision, or loop back to verify multiple times.
14
14
 
15
+ Treat confirmed context as settled. If the answer is already in context, the user has stated the needed fact, or two independent sources agree, act on it instead of re-checking. Do another pass only for a specific new unknown, not "to be sure." Once a decision is confirmed, verbalize it once and proceed; later meta-questions should be acknowledged without reopening the decision.
16
+
15
17
  No performative hedging. Skip phrases like "let me reconsider," "on second thought," or "actually, wait" unless they precede a substantive change. If the answer stays the same, the hedge added nothing — cut it.
16
18
 
17
19
  End when done. Once you have an answer that addresses the question, deliver it. Do not append extra verification passes "just to be sure."`;
@@ -1 +1 @@
1
- {"version":3,"file":"reasoning-efficiency.js","sourceRoot":"","sources":["../../source/prompts/reasoning-efficiency.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,8BAA8B;IAC5C,OAAO;;;;;;;;;;2IAUkI,CAAC;AAC5I,CAAC"}
1
+ {"version":3,"file":"reasoning-efficiency.js","sourceRoot":"","sources":["../../source/prompts/reasoning-efficiency.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,8BAA8B;IAC5C,OAAO;;;;;;;;;;;;2IAYkI,CAAC;AAC5I,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=reasoning-efficiency.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoning-efficiency.test.d.ts","sourceRoot":"","sources":["../../source/prompts/reasoning-efficiency.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import test from 'ava';
2
+ import { getReasoningEfficiencyAddendum } from './reasoning-efficiency.js';
3
+ test('getReasoningEfficiencyAddendum returns a non-empty string with guidance keywords', (t) => {
4
+ const addendum = getReasoningEfficiencyAddendum();
5
+ t.is(typeof addendum, 'string');
6
+ t.true(addendum.length > 0);
7
+ t.true(addendum.includes('### Reasoning Efficiency Guidelines'));
8
+ t.true(addendum.includes('Treat confirmed context as settled'));
9
+ t.true(addendum.includes('End when done'));
10
+ });
11
+ //# sourceMappingURL=reasoning-efficiency.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoning-efficiency.test.js","sourceRoot":"","sources":["../../source/prompts/reasoning-efficiency.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAE3E,IAAI,CAAC,kFAAkF,EAAE,CAAC,CAAC,EAAE,EAAE;IAC7F,MAAM,QAAQ,GAAG,8BAA8B,EAAE,CAAC;IAElD,CAAC,CAAC,EAAE,CAAC,OAAO,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,qCAAqC,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import test from 'ava';
2
+ import { getReasoningEfficiencyAddendum } from './reasoning-efficiency.js';
3
+
4
+ test('getReasoningEfficiencyAddendum returns a non-empty string with guidance keywords', (t) => {
5
+ const addendum = getReasoningEfficiencyAddendum();
6
+
7
+ t.is(typeof addendum, 'string');
8
+ t.true(addendum.length > 0);
9
+ t.true(addendum.includes('### Reasoning Efficiency Guidelines'));
10
+ t.true(addendum.includes('Treat confirmed context as settled'));
11
+ t.true(addendum.includes('End when done'));
12
+ });
@@ -12,6 +12,8 @@ Commit by default. Trust your first line of reasoning unless you spot a concrete
12
12
 
13
13
  Revise once, not repeatedly. If you do catch a real mistake, correct it cleanly and move on. Do not re-examine the correction, second-guess the revision, or loop back to verify multiple times.
14
14
 
15
+ Treat confirmed context as settled. If the answer is already in context, the user has stated the needed fact, or two independent sources agree, act on it instead of re-checking. Do another pass only for a specific new unknown, not "to be sure." Once a decision is confirmed, verbalize it once and proceed; later meta-questions should be acknowledged without reopening the decision.
16
+
15
17
  No performative hedging. Skip phrases like "let me reconsider," "on second thought," or "actually, wait" unless they precede a substantive change. If the answer stays the same, the hedge added nothing — cut it.
16
18
 
17
19
  End when done. Once you have an answer that addresses the question, deliver it. Do not append extra verification passes "just to be sure."`;