@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
@@ -4,6 +4,7 @@ import { dirname, join } from "path";
4
4
  import lockfile from "proper-lockfile";
5
5
  import { CONFIG_DIR_NAME, getAgentDir } from "../config.js";
6
6
  import { normalizePath, resolvePath } from "../utils/paths.js";
7
+ import { stripBom } from "../utils/text.js";
7
8
  import { DEFAULT_HTTP_IDLE_TIMEOUT_MS, parseHttpIdleTimeoutMs } from "./http-dispatcher.js";
8
9
  function isMergeableObject(value) {
9
10
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -37,6 +38,13 @@ function parseTimeoutSetting(value, settingName) {
37
38
  }
38
39
  return undefined;
39
40
  }
41
+ function toSettingsError(scope, error, path) {
42
+ return {
43
+ scope,
44
+ ...(path ? { path } : {}),
45
+ error: error instanceof Error ? error : new Error(String(error)),
46
+ };
47
+ }
40
48
  export class FileSettingsStorage {
41
49
  globalSettingsPath;
42
50
  projectSettingsPath;
@@ -130,7 +138,8 @@ export class SettingsManager {
130
138
  projectSettingsLoadError = null; // Track if project settings file had parse errors
131
139
  writeQueue = Promise.resolve();
132
140
  errors;
133
- constructor(storage, initialGlobal, initialProject, globalLoadError = null, projectLoadError = null, initialErrors = [], projectTrusted = true) {
141
+ settingsPaths;
142
+ constructor(storage, initialGlobal, initialProject, globalLoadError = null, projectLoadError = null, initialErrors = [], projectTrusted = true, settingsPaths = {}) {
134
143
  this.storage = storage;
135
144
  this.globalSettings = initialGlobal;
136
145
  this.projectSettings = initialProject;
@@ -138,26 +147,36 @@ export class SettingsManager {
138
147
  this.globalSettingsLoadError = globalLoadError;
139
148
  this.projectSettingsLoadError = projectLoadError;
140
149
  this.errors = [...initialErrors];
150
+ this.settingsPaths = settingsPaths;
141
151
  this.settings = deepMergeSettings(this.globalSettings, this.projectSettings);
142
152
  }
143
153
  /** Create a SettingsManager that loads from files */
144
154
  static create(cwd, agentDir = getAgentDir(), options = {}) {
145
- const storage = new FileSettingsStorage(cwd, agentDir);
146
- return SettingsManager.fromStorage(storage, options);
155
+ const resolvedCwd = resolvePath(cwd);
156
+ const resolvedAgentDir = resolvePath(agentDir);
157
+ const storage = new FileSettingsStorage(resolvedCwd, resolvedAgentDir);
158
+ return SettingsManager.fromStorageWithPaths(storage, options, {
159
+ global: join(resolvedAgentDir, "settings.json"),
160
+ project: join(resolvedCwd, CONFIG_DIR_NAME, "settings.json"),
161
+ });
147
162
  }
148
163
  /** Create a SettingsManager from an arbitrary storage backend */
149
164
  static fromStorage(storage, options = {}) {
165
+ return SettingsManager.fromStorageWithPaths(storage, options);
166
+ }
167
+ /** Create a manager while retaining optional file paths for reported storage errors. */
168
+ static fromStorageWithPaths(storage, options, settingsPaths = {}) {
150
169
  const projectTrusted = options.projectTrusted ?? true;
151
170
  const globalLoad = SettingsManager.tryLoadFromStorage(storage, "global");
152
171
  const projectLoad = SettingsManager.tryLoadFromStorage(storage, "project", projectTrusted);
153
172
  const initialErrors = [];
154
173
  if (globalLoad.error) {
155
- initialErrors.push({ scope: "global", error: globalLoad.error });
174
+ initialErrors.push(toSettingsError("global", globalLoad.error, settingsPaths.global));
156
175
  }
157
176
  if (projectLoad.error) {
158
- initialErrors.push({ scope: "project", error: projectLoad.error });
177
+ initialErrors.push(toSettingsError("project", projectLoad.error, settingsPaths.project));
159
178
  }
160
- return new SettingsManager(storage, globalLoad.settings, projectLoad.settings, globalLoad.error, projectLoad.error, initialErrors, projectTrusted);
179
+ return new SettingsManager(storage, globalLoad.settings, projectLoad.settings, globalLoad.error, projectLoad.error, initialErrors, projectTrusted, settingsPaths);
161
180
  }
162
181
  /** Create an in-memory SettingsManager (no file I/O) */
163
182
  static inMemory(settings = {}, options = {}) {
@@ -178,7 +197,7 @@ export class SettingsManager {
178
197
  if (!content) {
179
198
  return {};
180
199
  }
181
- const settings = JSON.parse(content);
200
+ const settings = JSON.parse(stripBom(content));
182
201
  return SettingsManager.migrateSettings(settings);
183
202
  }
184
203
  static tryLoadFromStorage(storage, scope, projectTrusted = true) {
@@ -323,8 +342,7 @@ export class SettingsManager {
323
342
  }
324
343
  }
325
344
  recordError(scope, error) {
326
- const normalizedError = error instanceof Error ? error : new Error(String(error));
327
- this.errors.push({ scope, error: normalizedError });
345
+ this.errors.push(toSettingsError(scope, error, this.settingsPaths[scope]));
328
346
  }
329
347
  clearModifiedScope(scope) {
330
348
  if (scope === "global") {
@@ -358,7 +376,7 @@ export class SettingsManager {
358
376
  persistScopedSettings(scope, snapshotSettings, modifiedFields, modifiedNestedFields) {
359
377
  this.storage.withLock(scope, (current) => {
360
378
  const currentFileSettings = current
361
- ? SettingsManager.migrateSettings(JSON.parse(current))
379
+ ? SettingsManager.migrateSettings(JSON.parse(stripBom(current)))
362
380
  : {};
363
381
  const mergedSettings = { ...currentFileSettings };
364
382
  for (const field of modifiedFields) {
@@ -495,6 +513,30 @@ export class SettingsManager {
495
513
  this.markModified("defaultThinkingLevel");
496
514
  this.save();
497
515
  }
516
+ getModelThinkingLevel(provider, modelId) {
517
+ return this.settings.modelThinkingLevels?.[`${provider}/${modelId}`];
518
+ }
519
+ getAllModelThinkingLevels() {
520
+ return { ...(this.settings.modelThinkingLevels ?? {}) };
521
+ }
522
+ setModelThinkingLevel(provider, modelId, level) {
523
+ if (!this.globalSettings.modelThinkingLevels) {
524
+ this.globalSettings.modelThinkingLevels = {};
525
+ }
526
+ this.globalSettings.modelThinkingLevels[`${provider}/${modelId}`] = level;
527
+ this.markModified("modelThinkingLevels");
528
+ this.save();
529
+ }
530
+ removeModelThinkingLevel(provider, modelId) {
531
+ if (!this.globalSettings.modelThinkingLevels)
532
+ return;
533
+ delete this.globalSettings.modelThinkingLevels[`${provider}/${modelId}`];
534
+ if (Object.keys(this.globalSettings.modelThinkingLevels).length === 0) {
535
+ delete this.globalSettings.modelThinkingLevels;
536
+ }
537
+ this.markModified("modelThinkingLevels");
538
+ this.save();
539
+ }
498
540
  getTransport() {
499
541
  return this.settings.transport ?? "auto";
500
542
  }
@@ -915,6 +957,154 @@ export class SettingsManager {
915
957
  failureInjectMaxEntries: 5,
916
958
  };
917
959
  }
960
+ // ─── Ada Intelligence Engine config (§16.2) ───
961
+ /** Config completa del Ada Intelligence Engine (bloques con defaults). */
962
+ getEngineConfig() {
963
+ const w = (this.globalSettings.workflows ?? {});
964
+ const g = (this.globalSettings.goalEngine ?? {});
965
+ const h = (this.globalSettings.hooks ?? {});
966
+ const p = (this.globalSettings.permissions ?? {});
967
+ const gr = (this.globalSettings.graph ?? {});
968
+ const cc = (this.globalSettings.computerUse ?? {});
969
+ return {
970
+ workflows: {
971
+ enabled: w.enabled ?? true,
972
+ concurrency: clamp(w.concurrency ?? 4, 1, 16),
973
+ maxAgentsPerRun: clamp(w.maxAgentsPerRun ?? 100, 1, 1000),
974
+ budget: {
975
+ perRun: { tokens: w.budget?.perRun?.tokens ?? 200000, usd: w.budget?.perRun?.usd ?? 2.0 },
976
+ perAgent: { tokens: w.budget?.perAgent?.tokens ?? 50000 },
977
+ perPhase: w.budget?.perPhase ?? null,
978
+ },
979
+ timeouts: {
980
+ agentMs: w.timeouts?.agentMs ?? 1_800_000,
981
+ scriptMs: w.timeouts?.scriptMs ?? 300_000,
982
+ drainMs: w.timeouts?.drainMs ?? 30_000,
983
+ },
984
+ judge: {
985
+ model: w.judge?.model ?? "auto",
986
+ crossModel: w.judge?.crossModel ?? true,
987
+ cheapForIntermediate: w.judge?.cheapForIntermediate ?? true,
988
+ },
989
+ models: {
990
+ cheap: w.models?.cheap ?? null,
991
+ main: w.models?.main ?? null,
992
+ judge: w.models?.judge ?? null,
993
+ cheapCandidates: Array.isArray(w.models?.cheapCandidates)
994
+ ? w.models.cheapCandidates.filter((c) => typeof c === "string" && c.includes("/"))
995
+ : [],
996
+ cheapThinking: w.models?.cheapThinking ?? null,
997
+ mainThinking: w.models?.mainThinking ?? null,
998
+ judgeThinking: w.models?.judgeThinking ?? null,
999
+ },
1000
+ autoResume: w.autoResume ?? true,
1001
+ web: { searchProvider: w.web?.searchProvider ?? "auto", fetch: "ssrf-hardened" },
1002
+ },
1003
+ goalEngine: {
1004
+ enabled: g.enabled ?? true,
1005
+ maxTurns: clamp(g.maxTurns ?? 25, 1, 200),
1006
+ repeatDetector: clamp(g.repeatDetector ?? 3, 1, 10),
1007
+ stopFile: g.stopFile ?? "~/.ada-stop",
1008
+ budgetTokens: clamp(g.budgetTokens ?? 100000, 0, 10_000_000),
1009
+ autopilot: g.autopilot ?? false,
1010
+ allowShipThrough: g.allowShipThrough ?? false,
1011
+ askBefore: g.askBefore ?? ["publish", "delete-data", "spend-money"],
1012
+ workTier: g.workTier === "cheap" ? "cheap" : "main",
1013
+ // P5: modo plan-only (default off).
1014
+ planOnly: g.planOnly === true,
1015
+ },
1016
+ hooks: { enabled: h.enabled ?? true, failClosedHeadless: h.failClosedHeadless ?? true },
1017
+ permissions: {
1018
+ level: p.level ?? "auto",
1019
+ destructiveGuards: p.destructiveGuards ?? true,
1020
+ envGuards: p.envGuards ?? true,
1021
+ },
1022
+ graph: {
1023
+ enabled: gr.enabled ?? true,
1024
+ minConfidence: clamp(gr.minConfidence ?? 0.6, 0, 1),
1025
+ gates: gr.gates ?? true,
1026
+ },
1027
+ computerUse: { enabled: cc.enabled ?? false, backend: cc.backend ?? "local", browser: cc.browser ?? true },
1028
+ };
1029
+ }
1030
+ getWorkflowsEnabled() {
1031
+ return (this.globalSettings.workflows?.enabled ?? true) === true;
1032
+ }
1033
+ setWorkflowsEnabled(v) {
1034
+ this.globalSettings.workflows = { ...(this.globalSettings.workflows ?? {}), enabled: v };
1035
+ this.markModified("workflows");
1036
+ this.save();
1037
+ }
1038
+ /** Modo del optimizador autónomo de prompts (default: auto = activado). */
1039
+ getPromptOptimizerMode() {
1040
+ const m = this.globalSettings.promptOptimizer;
1041
+ return m === "off" || m === "clarify" ? m : "auto";
1042
+ }
1043
+ setPromptOptimizerMode(mode) {
1044
+ this.globalSettings.promptOptimizer = mode;
1045
+ this.markModified("promptOptimizer");
1046
+ this.save();
1047
+ }
1048
+ getGoalEngineEnabled() {
1049
+ return (this.globalSettings.goalEngine?.enabled ?? true) === true;
1050
+ }
1051
+ setGoalEngineConfig(patch) {
1052
+ this.globalSettings.goalEngine = { ...(this.globalSettings.goalEngine ?? {}), ...patch };
1053
+ this.markModified("goalEngine");
1054
+ this.save();
1055
+ }
1056
+ /** P5: modo plan-only — el goal no lanza workflows hasta aprobación explícita. */
1057
+ getPlanOnlyEnabled() {
1058
+ return (this.globalSettings.goalEngine?.planOnly ?? false) === true;
1059
+ }
1060
+ setPlanOnlyEnabled(v) {
1061
+ this.setGoalEngineConfig({ planOnly: v });
1062
+ }
1063
+ getPermissionsLevel() {
1064
+ const l = this.globalSettings.permissions?.level;
1065
+ return l === "yolo" || l === "manual" ? l : "auto";
1066
+ }
1067
+ setPermissionsLevel(level) {
1068
+ this.globalSettings.permissions = { ...(this.globalSettings.permissions ?? {}), level };
1069
+ this.markModified("permissions");
1070
+ this.save();
1071
+ }
1072
+ getGoalWorkTier() {
1073
+ const tier = this.getEngineConfig().goalEngine.workTier;
1074
+ return tier === "cheap" ? "cheap" : "main";
1075
+ }
1076
+ setGoalWorkTier(tier) {
1077
+ this.updateEngineBlock("goalEngine", { workTier: tier });
1078
+ }
1079
+ getGoalMaxTurns() {
1080
+ return Number(this.getEngineConfig().goalEngine.maxTurns) || 25;
1081
+ }
1082
+ setGoalMaxTurns(turns) {
1083
+ this.updateEngineBlock("goalEngine", { maxTurns: Math.min(Math.max(turns, 1), 200) });
1084
+ }
1085
+ getGoalRepeatTolerance() {
1086
+ return Number(this.getEngineConfig().goalEngine.repeatDetector) || 3;
1087
+ }
1088
+ setGoalRepeatTolerance(tolerance) {
1089
+ this.updateEngineBlock("goalEngine", { repeatDetector: Math.min(Math.max(tolerance, 1), 10) });
1090
+ }
1091
+ getGraphEnabled() {
1092
+ return this.getEngineConfig().graph.enabled === true;
1093
+ }
1094
+ setGoalEngineEnabled(enabled) {
1095
+ this.updateEngineBlock("goalEngine", { enabled });
1096
+ }
1097
+ /**
1098
+ * Update atómico de un bloque del engine (§16.2) con merge superficial.
1099
+ * block: "workflows" | "goalEngine" | "hooks" | "permissions" | "graph" | "computerUse".
1100
+ * Lo usan el CLI (/settings) y el desktop (tab Engine).
1101
+ */
1102
+ updateEngineBlock(block, patch) {
1103
+ const current = (this.globalSettings[block] ?? {});
1104
+ this.globalSettings[block] = { ...current, ...patch };
1105
+ this.markModified(block);
1106
+ this.save();
1107
+ }
918
1108
  setImageAutoResize(enabled) {
919
1109
  if (!this.globalSettings.images) {
920
1110
  this.globalSettings.images = {};
@@ -1018,4 +1208,8 @@ export class SettingsManager {
1018
1208
  this.save();
1019
1209
  }
1020
1210
  }
1211
+ /** Clamp helper para la config del engine. */
1212
+ function clamp(n, min, max) {
1213
+ return Math.min(max, Math.max(min, n));
1214
+ }
1021
1215
  //# sourceMappingURL=settings-manager.js.map