@hoilab/ada-cli 0.84.21 → 0.84.22

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 (344) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.es.md +163 -0
  3. package/README.md +99 -652
  4. package/dist/cli/args.d.ts +3 -0
  5. package/dist/cli/args.d.ts.map +1 -1
  6. package/dist/cli/args.js +11 -0
  7. package/dist/cli/args.js.map +1 -1
  8. package/dist/cli/file-processor.d.ts.map +1 -1
  9. package/dist/cli/file-processor.js +2 -1
  10. package/dist/cli/file-processor.js.map +1 -1
  11. package/dist/cli/home-screen.d.ts.map +1 -1
  12. package/dist/cli/home-screen.js +2 -2
  13. package/dist/cli/home-screen.js.map +1 -1
  14. package/dist/cli/startup-ui.d.ts.map +1 -1
  15. package/dist/cli/startup-ui.js +9 -3
  16. package/dist/cli/startup-ui.js.map +1 -1
  17. package/dist/config.d.ts.map +1 -1
  18. package/dist/config.js +2 -1
  19. package/dist/config.js.map +1 -1
  20. package/dist/core/agent-session.d.ts +57 -7
  21. package/dist/core/agent-session.d.ts.map +1 -1
  22. package/dist/core/agent-session.js +449 -73
  23. package/dist/core/agent-session.js.map +1 -1
  24. package/dist/core/auth-storage.d.ts.map +1 -1
  25. package/dist/core/auth-storage.js +4 -3
  26. package/dist/core/auth-storage.js.map +1 -1
  27. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  28. package/dist/core/compaction/branch-summarization.js +3 -0
  29. package/dist/core/compaction/branch-summarization.js.map +1 -1
  30. package/dist/core/compaction/compaction.d.ts +4 -3
  31. package/dist/core/compaction/compaction.d.ts.map +1 -1
  32. package/dist/core/compaction/compaction.js +41 -32
  33. package/dist/core/compaction/compaction.js.map +1 -1
  34. package/dist/core/defaults.d.ts +1 -0
  35. package/dist/core/defaults.d.ts.map +1 -1
  36. package/dist/core/defaults.js +9 -0
  37. package/dist/core/defaults.js.map +1 -1
  38. package/dist/core/engine-personality.d.ts +12 -0
  39. package/dist/core/engine-personality.d.ts.map +1 -0
  40. package/dist/core/engine-personality.js +53 -0
  41. package/dist/core/engine-personality.js.map +1 -0
  42. package/dist/core/extensions/index.d.ts +1 -1
  43. package/dist/core/extensions/index.d.ts.map +1 -1
  44. package/dist/core/extensions/index.js.map +1 -1
  45. package/dist/core/extensions/loader.d.ts.map +1 -1
  46. package/dist/core/extensions/loader.js +10 -5
  47. package/dist/core/extensions/loader.js.map +1 -1
  48. package/dist/core/extensions/types.d.ts +23 -4
  49. package/dist/core/extensions/types.d.ts.map +1 -1
  50. package/dist/core/extensions/types.js.map +1 -1
  51. package/dist/core/keybindings.d.ts.map +1 -1
  52. package/dist/core/keybindings.js +2 -1
  53. package/dist/core/keybindings.js.map +1 -1
  54. package/dist/core/memory-engine/audit-export.d.ts +54 -0
  55. package/dist/core/memory-engine/audit-export.d.ts.map +1 -0
  56. package/dist/core/memory-engine/audit-export.js +85 -0
  57. package/dist/core/memory-engine/audit-export.js.map +1 -0
  58. package/dist/core/memory-engine/audit.d.ts.map +1 -1
  59. package/dist/core/memory-engine/audit.js +7 -8
  60. package/dist/core/memory-engine/audit.js.map +1 -1
  61. package/dist/core/memory-engine/engine.d.ts +2 -3
  62. package/dist/core/memory-engine/engine.d.ts.map +1 -1
  63. package/dist/core/memory-engine/engine.js +148 -50
  64. package/dist/core/memory-engine/engine.js.map +1 -1
  65. package/dist/core/memory-engine/inverted-index.d.ts.map +1 -1
  66. package/dist/core/memory-engine/inverted-index.js +67 -10
  67. package/dist/core/memory-engine/inverted-index.js.map +1 -1
  68. package/dist/core/memory-engine/keychain.d.ts.map +1 -1
  69. package/dist/core/memory-engine/keychain.js +1 -6
  70. package/dist/core/memory-engine/keychain.js.map +1 -1
  71. package/dist/core/memory-engine/observation-store.d.ts +1 -0
  72. package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
  73. package/dist/core/memory-engine/observation-store.js +37 -8
  74. package/dist/core/memory-engine/observation-store.js.map +1 -1
  75. package/dist/core/memory-engine/scanner.d.ts.map +1 -1
  76. package/dist/core/memory-engine/scanner.js +25 -5
  77. package/dist/core/memory-engine/scanner.js.map +1 -1
  78. package/dist/core/memory-engine/security.d.ts.map +1 -1
  79. package/dist/core/memory-engine/security.js +131 -23
  80. package/dist/core/memory-engine/security.js.map +1 -1
  81. package/dist/core/memory-engine/session-indexer.d.ts.map +1 -1
  82. package/dist/core/memory-engine/session-indexer.js +8 -2
  83. package/dist/core/memory-engine/session-indexer.js.map +1 -1
  84. package/dist/core/memory-engine/tools.d.ts +2 -2
  85. package/dist/core/memory-engine/tools.d.ts.map +1 -1
  86. package/dist/core/memory-engine/tools.js +14 -7
  87. package/dist/core/memory-engine/tools.js.map +1 -1
  88. package/dist/core/memory-engine/vault.d.ts.map +1 -1
  89. package/dist/core/memory-engine/vault.js +2 -2
  90. package/dist/core/memory-engine/vault.js.map +1 -1
  91. package/dist/core/model-config.d.ts.map +1 -1
  92. package/dist/core/model-config.js +2 -1
  93. package/dist/core/model-config.js.map +1 -1
  94. package/dist/core/model-resolver.d.ts +1 -0
  95. package/dist/core/model-resolver.d.ts.map +1 -1
  96. package/dist/core/model-resolver.js +12 -6
  97. package/dist/core/model-resolver.js.map +1 -1
  98. package/dist/core/models-store.d.ts.map +1 -1
  99. package/dist/core/models-store.js +2 -1
  100. package/dist/core/models-store.js.map +1 -1
  101. package/dist/core/package-manager.d.ts.map +1 -1
  102. package/dist/core/package-manager.js +11 -6
  103. package/dist/core/package-manager.js.map +1 -1
  104. package/dist/core/pi-manifest.d.ts.map +1 -1
  105. package/dist/core/pi-manifest.js +2 -1
  106. package/dist/core/pi-manifest.js.map +1 -1
  107. package/dist/core/prompt-optimizer.d.ts +53 -0
  108. package/dist/core/prompt-optimizer.d.ts.map +1 -0
  109. package/dist/core/prompt-optimizer.js +138 -0
  110. package/dist/core/prompt-optimizer.js.map +1 -0
  111. package/dist/core/provider-attribution.d.ts.map +1 -1
  112. package/dist/core/provider-attribution.js +1 -1
  113. package/dist/core/provider-attribution.js.map +1 -1
  114. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  115. package/dist/core/remote-catalog-provider.js +2 -1
  116. package/dist/core/remote-catalog-provider.js.map +1 -1
  117. package/dist/core/resource-loader.d.ts +50 -0
  118. package/dist/core/resource-loader.d.ts.map +1 -1
  119. package/dist/core/resource-loader.js +233 -7
  120. package/dist/core/resource-loader.js.map +1 -1
  121. package/dist/core/sdk.d.ts +8 -0
  122. package/dist/core/sdk.d.ts.map +1 -1
  123. package/dist/core/sdk.js +11 -1
  124. package/dist/core/sdk.js.map +1 -1
  125. package/dist/core/session-manager.d.ts.map +1 -1
  126. package/dist/core/session-manager.js +2 -1
  127. package/dist/core/session-manager.js.map +1 -1
  128. package/dist/core/settings-diagnostics.d.ts +9 -0
  129. package/dist/core/settings-diagnostics.d.ts.map +1 -0
  130. package/dist/core/settings-diagnostics.js +21 -0
  131. package/dist/core/settings-diagnostics.js.map +1 -0
  132. package/dist/core/settings-manager.d.ts +52 -0
  133. package/dist/core/settings-manager.d.ts.map +1 -1
  134. package/dist/core/settings-manager.js +204 -10
  135. package/dist/core/settings-manager.js.map +1 -1
  136. package/dist/core/skills.d.ts.map +1 -1
  137. package/dist/core/skills.js +51 -33
  138. package/dist/core/skills.js.map +1 -1
  139. package/dist/core/slash-commands.d.ts.map +1 -1
  140. package/dist/core/slash-commands.js +2 -1
  141. package/dist/core/slash-commands.js.map +1 -1
  142. package/dist/core/tools/edit-diff.d.ts +0 -5
  143. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  144. package/dist/core/tools/edit-diff.js +2 -5
  145. package/dist/core/tools/edit-diff.js.map +1 -1
  146. package/dist/core/tools/edit.d.ts.map +1 -1
  147. package/dist/core/tools/edit.js +20 -4
  148. package/dist/core/tools/edit.js.map +1 -1
  149. package/dist/core/tools/index.d.ts.map +1 -1
  150. package/dist/core/tools/index.js +2 -2
  151. package/dist/core/tools/index.js.map +1 -1
  152. package/dist/core/tools/project-memory-tool.d.ts.map +1 -1
  153. package/dist/core/tools/project-memory-tool.js +4 -1
  154. package/dist/core/tools/project-memory-tool.js.map +1 -1
  155. package/dist/core/trust-manager.d.ts.map +1 -1
  156. package/dist/core/trust-manager.js +2 -1
  157. package/dist/core/trust-manager.js.map +1 -1
  158. package/dist/core/workflows/agent-runner.d.ts +86 -0
  159. package/dist/core/workflows/agent-runner.d.ts.map +1 -0
  160. package/dist/core/workflows/agent-runner.js +225 -0
  161. package/dist/core/workflows/agent-runner.js.map +1 -0
  162. package/dist/core/workflows/builtins.d.ts +41 -0
  163. package/dist/core/workflows/builtins.d.ts.map +1 -0
  164. package/dist/core/workflows/builtins.js +282 -0
  165. package/dist/core/workflows/builtins.js.map +1 -0
  166. package/dist/core/workflows/goal-engine/engine.d.ts +134 -0
  167. package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -0
  168. package/dist/core/workflows/goal-engine/engine.js +462 -0
  169. package/dist/core/workflows/goal-engine/engine.js.map +1 -0
  170. package/dist/core/workflows/goal-engine/errors.d.ts +7 -0
  171. package/dist/core/workflows/goal-engine/errors.d.ts.map +1 -0
  172. package/dist/core/workflows/goal-engine/errors.js +9 -0
  173. package/dist/core/workflows/goal-engine/errors.js.map +1 -0
  174. package/dist/core/workflows/goal-engine/index.d.ts +13 -0
  175. package/dist/core/workflows/goal-engine/index.d.ts.map +1 -0
  176. package/dist/core/workflows/goal-engine/index.js +8 -0
  177. package/dist/core/workflows/goal-engine/index.js.map +1 -0
  178. package/dist/core/workflows/goal-engine/persistence.d.ts +31 -0
  179. package/dist/core/workflows/goal-engine/persistence.d.ts.map +1 -0
  180. package/dist/core/workflows/goal-engine/persistence.js +145 -0
  181. package/dist/core/workflows/goal-engine/persistence.js.map +1 -0
  182. package/dist/core/workflows/goal-engine/prompts.d.ts +37 -0
  183. package/dist/core/workflows/goal-engine/prompts.d.ts.map +1 -0
  184. package/dist/core/workflows/goal-engine/prompts.js +131 -0
  185. package/dist/core/workflows/goal-engine/prompts.js.map +1 -0
  186. package/dist/core/workflows/goal-engine/state.d.ts +41 -0
  187. package/dist/core/workflows/goal-engine/state.d.ts.map +1 -0
  188. package/dist/core/workflows/goal-engine/state.js +397 -0
  189. package/dist/core/workflows/goal-engine/state.js.map +1 -0
  190. package/dist/core/workflows/goal-engine/tools.d.ts +31 -0
  191. package/dist/core/workflows/goal-engine/tools.d.ts.map +1 -0
  192. package/dist/core/workflows/goal-engine/tools.js +211 -0
  193. package/dist/core/workflows/goal-engine/tools.js.map +1 -0
  194. package/dist/core/workflows/goal-engine/types.d.ts +286 -0
  195. package/dist/core/workflows/goal-engine/types.d.ts.map +1 -0
  196. package/dist/core/workflows/goal-engine/types.js +17 -0
  197. package/dist/core/workflows/goal-engine/types.js.map +1 -0
  198. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts +23 -0
  199. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts.map +1 -0
  200. package/dist/core/workflows/goal-engine/worktree-fingerprint.js +72 -0
  201. package/dist/core/workflows/goal-engine/worktree-fingerprint.js.map +1 -0
  202. package/dist/core/workflows/graph-sync.d.ts +67 -0
  203. package/dist/core/workflows/graph-sync.d.ts.map +1 -0
  204. package/dist/core/workflows/graph-sync.js +188 -0
  205. package/dist/core/workflows/graph-sync.js.map +1 -0
  206. package/dist/core/workflows/graph.d.ts +143 -0
  207. package/dist/core/workflows/graph.d.ts.map +1 -0
  208. package/dist/core/workflows/graph.js +319 -0
  209. package/dist/core/workflows/graph.js.map +1 -0
  210. package/dist/core/workflows/index.d.ts +18 -0
  211. package/dist/core/workflows/index.d.ts.map +1 -0
  212. package/dist/core/workflows/index.js +14 -0
  213. package/dist/core/workflows/index.js.map +1 -0
  214. package/dist/core/workflows/journal.d.ts +68 -0
  215. package/dist/core/workflows/journal.d.ts.map +1 -0
  216. package/dist/core/workflows/journal.js +83 -0
  217. package/dist/core/workflows/journal.js.map +1 -0
  218. package/dist/core/workflows/manager.d.ts +112 -0
  219. package/dist/core/workflows/manager.d.ts.map +1 -0
  220. package/dist/core/workflows/manager.js +327 -0
  221. package/dist/core/workflows/manager.js.map +1 -0
  222. package/dist/core/workflows/resolve-script.d.ts +35 -0
  223. package/dist/core/workflows/resolve-script.d.ts.map +1 -0
  224. package/dist/core/workflows/resolve-script.js +66 -0
  225. package/dist/core/workflows/resolve-script.js.map +1 -0
  226. package/dist/core/workflows/runtime.d.ts +49 -0
  227. package/dist/core/workflows/runtime.d.ts.map +1 -0
  228. package/dist/core/workflows/runtime.js +301 -0
  229. package/dist/core/workflows/runtime.js.map +1 -0
  230. package/dist/core/workflows/shared-store.d.ts +31 -0
  231. package/dist/core/workflows/shared-store.d.ts.map +1 -0
  232. package/dist/core/workflows/shared-store.js +80 -0
  233. package/dist/core/workflows/shared-store.js.map +1 -0
  234. package/dist/core/workflows/subagent-host.d.ts +50 -0
  235. package/dist/core/workflows/subagent-host.d.ts.map +1 -0
  236. package/dist/core/workflows/subagent-host.js +225 -0
  237. package/dist/core/workflows/subagent-host.js.map +1 -0
  238. package/dist/core/workflows/tool-workflow.d.ts +22 -0
  239. package/dist/core/workflows/tool-workflow.d.ts.map +1 -0
  240. package/dist/core/workflows/tool-workflow.js +120 -0
  241. package/dist/core/workflows/tool-workflow.js.map +1 -0
  242. package/dist/core/workflows/types.d.ts +142 -0
  243. package/dist/core/workflows/types.d.ts.map +1 -0
  244. package/dist/core/workflows/types.js +26 -0
  245. package/dist/core/workflows/types.js.map +1 -0
  246. package/dist/core/workflows/worktree.d.ts +42 -0
  247. package/dist/core/workflows/worktree.d.ts.map +1 -0
  248. package/dist/core/workflows/worktree.js +107 -0
  249. package/dist/core/workflows/worktree.js.map +1 -0
  250. package/dist/extensions/llama/index.d.ts.map +1 -1
  251. package/dist/extensions/llama/index.js +2 -0
  252. package/dist/extensions/llama/index.js.map +1 -1
  253. package/dist/extensions/llama/provider.d.ts.map +1 -1
  254. package/dist/extensions/llama/provider.js +6 -2
  255. package/dist/extensions/llama/provider.js.map +1 -1
  256. package/dist/index.d.ts +16 -12
  257. package/dist/index.d.ts.map +1 -1
  258. package/dist/index.js +14 -11
  259. package/dist/index.js.map +1 -1
  260. package/dist/main.d.ts +4 -0
  261. package/dist/main.d.ts.map +1 -1
  262. package/dist/main.js +20 -15
  263. package/dist/main.js.map +1 -1
  264. package/dist/migrations.d.ts.map +1 -1
  265. package/dist/migrations.js +4 -3
  266. package/dist/migrations.js.map +1 -1
  267. package/dist/modes/interactive/components/home-screen.d.ts.map +1 -1
  268. package/dist/modes/interactive/components/home-screen.js +2 -2
  269. package/dist/modes/interactive/components/home-screen.js.map +1 -1
  270. package/dist/modes/interactive/components/model-selector.d.ts +2 -3
  271. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  272. package/dist/modes/interactive/components/model-selector.js +16 -6
  273. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  274. package/dist/modes/interactive/components/prompt-optimization.d.ts +16 -0
  275. package/dist/modes/interactive/components/prompt-optimization.d.ts.map +1 -0
  276. package/dist/modes/interactive/components/prompt-optimization.js +46 -0
  277. package/dist/modes/interactive/components/prompt-optimization.js.map +1 -0
  278. package/dist/modes/interactive/components/settings-selector.d.ts +19 -1
  279. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  280. package/dist/modes/interactive/components/settings-selector.js +247 -46
  281. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  282. package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
  283. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
  284. package/dist/modes/interactive/components/settings-submenu.js +165 -0
  285. package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
  286. package/dist/modes/interactive/components/thinking-selector.d.ts +8 -3
  287. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  288. package/dist/modes/interactive/components/thinking-selector.js +29 -3
  289. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  290. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  291. package/dist/modes/interactive/external-editor.js +2 -1
  292. package/dist/modes/interactive/external-editor.js.map +1 -1
  293. package/dist/modes/interactive/interactive-mode.d.ts +24 -0
  294. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  295. package/dist/modes/interactive/interactive-mode.js +677 -34
  296. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  297. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  298. package/dist/modes/interactive/theme/theme.js +4 -3
  299. package/dist/modes/interactive/theme/theme.js.map +1 -1
  300. package/dist/modes/json-event.d.ts +16 -13
  301. package/dist/modes/json-event.d.ts.map +1 -1
  302. package/dist/modes/json-event.js +20 -6
  303. package/dist/modes/json-event.js.map +1 -1
  304. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  305. package/dist/modes/rpc/rpc-mode.js +173 -0
  306. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  307. package/dist/modes/rpc/rpc-types.d.ts +29 -0
  308. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  309. package/dist/modes/rpc/rpc-types.js.map +1 -1
  310. package/dist/package-manager-cli.d.ts.map +1 -1
  311. package/dist/package-manager-cli.js +1 -1
  312. package/dist/package-manager-cli.js.map +1 -1
  313. package/dist/skills/ada-engine/SKILL.md +153 -0
  314. package/dist/utils/frontmatter.d.ts.map +1 -1
  315. package/dist/utils/frontmatter.js +2 -1
  316. package/dist/utils/frontmatter.js.map +1 -1
  317. package/dist/utils/management-http.d.ts +5 -3
  318. package/dist/utils/management-http.d.ts.map +1 -1
  319. package/dist/utils/management-http.js +14 -10
  320. package/dist/utils/management-http.js.map +1 -1
  321. package/dist/utils/text.d.ts +8 -0
  322. package/dist/utils/text.d.ts.map +1 -0
  323. package/dist/utils/text.js +9 -0
  324. package/dist/utils/text.js.map +1 -0
  325. package/docs/compaction.md +15 -0
  326. package/docs/custom-provider.md +5 -2
  327. package/docs/extensions.md +11 -2
  328. package/docs/json.md +7 -2
  329. package/docs/llama-cpp.md +2 -0
  330. package/docs/models.md +8 -2
  331. package/docs/rpc.md +9 -3
  332. package/docs/settings.md +2 -2
  333. package/docs/skills.md +4 -3
  334. package/examples/extensions/border-status-editor.ts +1 -1
  335. package/examples/extensions/git-checkpoint.ts +2 -2
  336. package/examples/extensions/notify.ts +3 -1
  337. package/examples/extensions/subagent/README.md +1 -1
  338. package/examples/extensions/subagent/index.ts +6 -1
  339. package/examples/extensions/titlebar-spinner.ts +1 -1
  340. package/examples/rpc-extension-ui.ts +1 -1
  341. package/examples/sdk/06-extensions.ts +1 -1
  342. package/examples/sdk/README.md +1 -1
  343. package/npm-shrinkwrap.json +2 -12
  344. package/package.json +3 -3
@@ -1,12 +1,13 @@
1
- import { Container, getCapabilities, SelectList, SettingsList, Spacer, Text, } from "@earendil-works/pi-tui";
1
+ import { getSupportedThinkingLevels } from "@earendil-works/pi-ai";
2
+ import { Container, getCapabilities, SettingsList, Spacer, Text, } from "@earendil-works/pi-tui";
2
3
  import { formatHttpIdleTimeoutMs, HTTP_IDLE_TIMEOUT_CHOICES } from "../../../core/http-dispatcher.js";
3
- import { getSelectListTheme, getSettingsListTheme, parseAutoThemeSetting, theme, } from "../theme/theme.js";
4
+ import { getSettingsListTheme, parseAutoThemeSetting, theme } from "../theme/theme.js";
4
5
  import { DynamicBorder } from "./dynamic-border.js";
5
6
  import { keyDisplayText } from "./keybinding-hints.js";
6
- const SETTINGS_SUBMENU_SELECT_LIST_LAYOUT = {
7
- minPrimaryColumnWidth: 12,
8
- maxPrimaryColumnWidth: 32,
9
- };
7
+ import { SelectSubmenu, SteppedSubmenu } from "./settings-submenu.js";
8
+ const NO_DEFAULT_MODEL_VALUE = "__none__";
9
+ const NO_DEFAULT_MODEL_LABEL = "not set";
10
+ const MODEL_PICKER_LAYOUT = { minPrimaryColumnWidth: 12, maxPrimaryColumnWidth: 46 };
10
11
  const THINKING_DESCRIPTIONS = {
11
12
  off: "No reasoning",
12
13
  minimal: "Very brief reasoning (~1k tokens)",
@@ -54,43 +55,44 @@ class WarningSettingsSubmenu extends Container {
54
55
  this.settingsList.handleInput(data);
55
56
  }
56
57
  }
57
- class SelectSubmenu extends Container {
58
- selectList;
59
- constructor(title, description, options, currentValue, onSelect, onCancel, onSelectionChange) {
60
- super();
61
- // Title
62
- this.addChild(new Text(theme.bold(theme.fg("accent", title)), 0, 0));
63
- // Description
64
- if (description) {
65
- this.addChild(new Spacer(1));
66
- this.addChild(new Text(theme.fg("muted", description), 0, 0));
67
- }
68
- // Spacer
69
- this.addChild(new Spacer(1));
70
- // Select list
71
- this.selectList = new SelectList(options, Math.min(options.length, 10), getSelectListTheme(), SETTINGS_SUBMENU_SELECT_LIST_LAYOUT);
72
- // Pre-select current value
73
- const currentIndex = options.findIndex((o) => o.value === currentValue);
74
- if (currentIndex !== -1) {
75
- this.selectList.setSelectedIndex(currentIndex);
76
- }
77
- this.selectList.onSelect = (item) => {
78
- onSelect(item.value);
58
+ const CLEAR_OVERRIDE_VALUE = "__clear__";
59
+ function modelSettingKey(model) {
60
+ return `${model.provider}/${model.id}`;
61
+ }
62
+ function modelDisplayLabel(model) {
63
+ return `${model.id} [${model.provider}]`;
64
+ }
65
+ function defaultModelDisplayValue(key, model, overrides) {
66
+ const label = model ? modelDisplayLabel(model) : key;
67
+ const override = overrides[key];
68
+ return override ? `${label} \u00b7 ${override}` : label;
69
+ }
70
+ function modelThinkingOverridesSummary(overrides) {
71
+ const count = Object.keys(overrides).length;
72
+ if (count === 0)
73
+ return "none";
74
+ return `${count} configured`;
75
+ }
76
+ function modelItemLabel(model) {
77
+ return `${model.id} ${theme.fg("muted", `[${model.provider}]`)}`;
78
+ }
79
+ function defaultModelItems(models, overrides) {
80
+ return [...models]
81
+ .sort((a, b) => {
82
+ const providerCompare = a.provider.localeCompare(b.provider);
83
+ if (providerCompare !== 0)
84
+ return providerCompare;
85
+ return (a.name || a.id).localeCompare(b.name || b.id);
86
+ })
87
+ .map((model) => {
88
+ const key = modelSettingKey(model);
89
+ const override = overrides?.[key];
90
+ return {
91
+ value: key,
92
+ label: modelItemLabel(model),
93
+ description: override ?? undefined,
79
94
  };
80
- this.selectList.onCancel = onCancel;
81
- if (onSelectionChange) {
82
- this.selectList.onSelectionChange = (item) => {
83
- onSelectionChange(item.value);
84
- };
85
- }
86
- this.addChild(this.selectList);
87
- // Hint
88
- this.addChild(new Spacer(1));
89
- this.addChild(new Text(theme.fg("dim", " Enter to select · Esc to go back"), 0, 0));
90
- }
91
- handleInput(data) {
92
- this.selectList.handleInput(data);
93
- }
95
+ });
94
96
  }
95
97
  function themeItems(availableThemes) {
96
98
  return availableThemes.map((name) => ({ value: name, label: name }));
@@ -271,7 +273,14 @@ export class SettingsSelectorComponent extends Container {
271
273
  super();
272
274
  const supportsImages = getCapabilities().images;
273
275
  const followUpKey = keyDisplayText("app.message.followUp");
276
+ const cycleThinkingKey = keyDisplayText("app.thinking.cycle");
274
277
  let currentWarnings = { ...config.warnings };
278
+ const currentModelThinkingLevels = { ...config.modelThinkingLevels };
279
+ let lastSelectedDefaultModel;
280
+ const defaultModelByValue = new Map(config.availableDefaultModels.map((model) => [modelSettingKey(model), model]));
281
+ let currentDefaultModelKey = defaultModelByValue.has(config.defaultModel)
282
+ ? config.defaultModel
283
+ : undefined;
275
284
  const items = [
276
285
  {
277
286
  id: "autocompact",
@@ -301,6 +310,38 @@ export class SettingsSelectorComponent extends Container {
301
310
  currentValue: config.transport,
302
311
  values: ["sse", "websocket", "websocket-cached", "auto"],
303
312
  },
313
+ {
314
+ id: "default-model",
315
+ label: "Default model",
316
+ description: "Startup model for new sessions",
317
+ currentValue: defaultModelDisplayValue(config.defaultModel, defaultModelByValue.get(config.defaultModel), currentModelThinkingLevels),
318
+ submenu: (currentValue, done) => {
319
+ const fresh = defaultModelItems(config.availableDefaultModels, currentModelThinkingLevels);
320
+ const options = fresh.length > 0
321
+ ? fresh
322
+ : [
323
+ {
324
+ value: NO_DEFAULT_MODEL_VALUE,
325
+ label: "No models available",
326
+ description: "Log in to a provider or configure an API key first",
327
+ },
328
+ ];
329
+ return new SelectSubmenu("Default Model", "Select the model to use when starting new sessions", options, currentValue === NO_DEFAULT_MODEL_LABEL ? NO_DEFAULT_MODEL_VALUE : currentValue, (value) => {
330
+ const model = defaultModelByValue.get(value);
331
+ if (!model) {
332
+ done();
333
+ return;
334
+ }
335
+ void callbacks.onDefaultModelChange(model).then(() => {
336
+ lastSelectedDefaultModel = model;
337
+ currentDefaultModelKey = value;
338
+ done(defaultModelDisplayValue(value, model, currentModelThinkingLevels), {
339
+ navigateTo: "model-thinking",
340
+ });
341
+ }, () => done());
342
+ }, () => done(), undefined, { searchable: true, layout: MODEL_PICKER_LAYOUT });
343
+ },
344
+ },
304
345
  {
305
346
  id: "http-idle-timeout",
306
347
  label: "HTTP idle timeout",
@@ -325,7 +366,7 @@ export class SettingsSelectorComponent extends Container {
325
366
  {
326
367
  id: "cache-miss-notices",
327
368
  label: "Cache miss notices",
328
- description: "Show transcript notices for significant prompt-cache misses",
369
+ description: "Show transcript notices for significant prompt-cache misses and compaction costs",
329
370
  currentValue: config.showCacheMissNotices ? "true" : "false",
330
371
  values: ["true", "false"],
331
372
  },
@@ -383,10 +424,10 @@ export class SettingsSelectorComponent extends Container {
383
424
  },
384
425
  {
385
426
  id: "thinking",
386
- label: "Thinking level",
387
- description: "Reasoning depth for thinking-capable models",
427
+ label: "Default thinking level",
428
+ description: `Startup reasoning depth for thinking-capable models. ${cycleThinkingKey} cycles in-session.`,
388
429
  currentValue: config.thinkingLevel,
389
- submenu: (currentValue, done) => new SelectSubmenu("Thinking Level", "Select reasoning depth for thinking-capable models", config.availableThinkingLevels.map((level) => ({
430
+ submenu: (currentValue, done) => new SelectSubmenu("Default Thinking Level", "Select the reasoning depth to use when starting new sessions", config.availableThinkingLevels.map((level) => ({
390
431
  value: level,
391
432
  label: level,
392
433
  description: THINKING_DESCRIPTIONS[level],
@@ -395,6 +436,104 @@ export class SettingsSelectorComponent extends Container {
395
436
  done(value);
396
437
  }, () => done()),
397
438
  },
439
+ {
440
+ id: "model-thinking",
441
+ label: "Default thinking level per model",
442
+ description: `Override the default thinking level for specific models. ${cycleThinkingKey} cycles in-session.`,
443
+ currentValue: modelThinkingOverridesSummary(currentModelThinkingLevels),
444
+ submenu: (_currentValue, done) => {
445
+ const preselected = lastSelectedDefaultModel;
446
+ lastSelectedDefaultModel = undefined;
447
+ const steps = [
448
+ {
449
+ key: "model",
450
+ title: "Per-Model Thinking Level",
451
+ description: "Select a model to configure",
452
+ options: () => {
453
+ const sorted = [...config.availableDefaultModels].sort((a, b) => {
454
+ const aKey = modelSettingKey(a);
455
+ const bKey = modelSettingKey(b);
456
+ if (aKey === currentDefaultModelKey)
457
+ return -1;
458
+ if (bKey === currentDefaultModelKey)
459
+ return 1;
460
+ const pc = a.provider.localeCompare(b.provider);
461
+ if (pc !== 0)
462
+ return pc;
463
+ return (a.name || a.id).localeCompare(b.name || b.id);
464
+ });
465
+ const items = sorted.map((model) => {
466
+ const key = modelSettingKey(model);
467
+ const override = currentModelThinkingLevels[key];
468
+ return {
469
+ value: key,
470
+ label: modelItemLabel(model),
471
+ description: override ?? undefined,
472
+ };
473
+ });
474
+ if (items.length === 0) {
475
+ items.push({
476
+ value: "__none__",
477
+ label: "No models available",
478
+ description: "Log in to a provider or configure an API key first",
479
+ });
480
+ }
481
+ return items;
482
+ },
483
+ preselect: () => currentDefaultModelKey,
484
+ searchable: true,
485
+ layout: MODEL_PICKER_LAYOUT,
486
+ },
487
+ {
488
+ key: "level",
489
+ title: (ctx) => {
490
+ const m = defaultModelByValue.get(ctx.model);
491
+ return `Thinking Level for ${m ? modelDisplayLabel(m) : ctx.model}`;
492
+ },
493
+ description: "Select default thinking level for this model",
494
+ options: (ctx) => {
495
+ const model = defaultModelByValue.get(ctx.model);
496
+ if (!model)
497
+ return [];
498
+ const levels = (model.reasoning ? getSupportedThinkingLevels(model) : ["off"]);
499
+ const items = levels.map((level) => ({
500
+ value: level,
501
+ label: level,
502
+ description: THINKING_DESCRIPTIONS[level],
503
+ }));
504
+ if (currentModelThinkingLevels[ctx.model] !== undefined) {
505
+ items.push({
506
+ value: CLEAR_OVERRIDE_VALUE,
507
+ label: "(clear override)",
508
+ description: `Revert to global default (${config.thinkingLevel})`,
509
+ });
510
+ }
511
+ return items;
512
+ },
513
+ preselect: (ctx) => currentModelThinkingLevels[ctx.model],
514
+ },
515
+ ];
516
+ const summary = () => modelThinkingOverridesSummary(currentModelThinkingLevels);
517
+ return new SteppedSubmenu(steps, (selections) => {
518
+ const model = defaultModelByValue.get(selections.model);
519
+ if (!model)
520
+ return;
521
+ if (selections.level === CLEAR_OVERRIDE_VALUE) {
522
+ callbacks.onModelThinkingLevelRemove(model.provider, model.id);
523
+ delete currentModelThinkingLevels[selections.model];
524
+ }
525
+ else {
526
+ callbacks.onModelThinkingLevelChange(model.provider, model.id, selections.level);
527
+ currentModelThinkingLevels[selections.model] = selections.level;
528
+ }
529
+ }, () => {
530
+ this.settingsList.updateValue("default-model", defaultModelDisplayValue(currentDefaultModelKey ?? config.defaultModel, defaultModelByValue.get(currentDefaultModelKey ?? config.defaultModel), currentModelThinkingLevels));
531
+ done(summary());
532
+ }, preselected
533
+ ? { startAtStep: 1, initialContext: { model: modelSettingKey(preselected) } }
534
+ : { loop: true });
535
+ },
536
+ },
398
537
  {
399
538
  id: "tui-mode",
400
539
  label: "TUI mode",
@@ -477,6 +616,50 @@ export class SettingsSelectorComponent extends Container {
477
616
  currentValue: config.memoryMode ?? "policy",
478
617
  values: ["policy", "inject"],
479
618
  });
619
+ // ── Ada Intelligence Engine (tras memory-mode) ──
620
+ const engineAnchor = items.findIndex((item) => item.id === "memory-mode");
621
+ items.splice(engineAnchor + 1, 0, {
622
+ id: "engine-goal",
623
+ label: "Goal Engine",
624
+ description: "Bucle autónomo con fases TDD, juez obligatorio y frenos (goals con /goal)",
625
+ currentValue: config.goalEngineEnabled ? "true" : "false",
626
+ values: ["true", "false"],
627
+ });
628
+ items.splice(engineAnchor + 2, 0, {
629
+ id: "engine-goal-tier",
630
+ label: "Goal work tier",
631
+ description: "Modelo de las fases de trabajo: main = por defecto; cheap = el más barato conectado",
632
+ currentValue: config.goalWorkTier,
633
+ values: ["main", "cheap"],
634
+ });
635
+ items.splice(engineAnchor + 3, 0, {
636
+ id: "engine-goal-turns",
637
+ label: "Goal max turns",
638
+ description: "Freno: turnos máximos por goal antes de abortar",
639
+ currentValue: String(config.goalMaxTurns),
640
+ values: ["10", "15", "25", "50", "100"],
641
+ });
642
+ items.splice(engineAnchor + 4, 0, {
643
+ id: "engine-workflows",
644
+ label: "Workflows",
645
+ description: "Orquestación paralela sandboxeada (/workflow, tool workflow)",
646
+ currentValue: config.workflowsEnabled ? "true" : "false",
647
+ values: ["true", "false"],
648
+ });
649
+ items.splice(engineAnchor + 5, 0, {
650
+ id: "engine-repeat",
651
+ label: "Subtask retries",
652
+ description: "Reintentos de una sub-tarea fallida antes de pausar el goal (repeat detector)",
653
+ currentValue: String(config.goalRepeatTolerance),
654
+ values: ["1", "2", "3", "5"],
655
+ });
656
+ items.splice(engineAnchor + 6, 0, {
657
+ id: "prompt-optimizer",
658
+ label: "Prompt optimizer",
659
+ description: "Mejora automática de tu petición antes del modelo (auto = sin preguntar; clarify = pregunta primero; off = desactivado)",
660
+ currentValue: config.promptOptimizerMode,
661
+ values: ["auto", "clarify", "off"],
662
+ });
480
663
  // Skill commands toggle (insert after memory-mode)
481
664
  const memoryModeIndex = items.findIndex((item) => item.id === "memory-mode");
482
665
  items.splice(memoryModeIndex + 1, 0, {
@@ -565,6 +748,24 @@ export class SettingsSelectorComponent extends Container {
565
748
  case "memory-mode":
566
749
  callbacks.onMemoryModeChange(newValue);
567
750
  break;
751
+ case "engine-goal":
752
+ callbacks.onGoalEngineEnabledChange(newValue === "true");
753
+ break;
754
+ case "engine-goal-tier":
755
+ callbacks.onGoalWorkTierChange(newValue);
756
+ break;
757
+ case "engine-goal-turns":
758
+ callbacks.onGoalMaxTurnsChange(parseInt(newValue, 10) || 25);
759
+ break;
760
+ case "engine-workflows":
761
+ callbacks.onWorkflowsEnabledChange(newValue === "true");
762
+ break;
763
+ case "engine-repeat":
764
+ callbacks.onRepeatToleranceChange(parseInt(newValue, 10) || 3);
765
+ break;
766
+ case "prompt-optimizer":
767
+ callbacks.onPromptOptimizerModeChange(newValue);
768
+ break;
568
769
  case "skill-commands":
569
770
  callbacks.onEnableSkillCommandsChange(newValue === "true");
570
771
  break;