@phuetz/code-buddy 1.1.0 → 1.3.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 (381) hide show
  1. package/README.md +211 -163
  2. package/dist/agent/autonomous/agentic-coding-contract.d.ts +12 -12
  3. package/dist/agent/base-agent.d.ts +4 -0
  4. package/dist/agent/base-agent.js +6 -0
  5. package/dist/agent/codebuddy-agent.d.ts +1 -1
  6. package/dist/agent/codebuddy-agent.js +69 -14
  7. package/dist/agent/execution/agent-executor.js +122 -12
  8. package/dist/agent/execution/tool-dependency-graph.js +7 -0
  9. package/dist/agent/execution/tool-hooks.d.ts +6 -0
  10. package/dist/agent/execution/tool-hooks.js +13 -5
  11. package/dist/agent/execution/tool-selection-strategy.d.ts +11 -2
  12. package/dist/agent/execution/tool-selection-strategy.js +67 -10
  13. package/dist/agent/extended-thinking.d.ts +8 -0
  14. package/dist/agent/extended-thinking.js +27 -0
  15. package/dist/agent/facades/infrastructure-facade.d.ts +9 -2
  16. package/dist/agent/facades/infrastructure-facade.js +15 -6
  17. package/dist/agent/hermes-browser-backends.js +151 -11
  18. package/dist/agent/hermes-claw-migrate.d.ts +59 -0
  19. package/dist/agent/hermes-claw-migrate.js +427 -26
  20. package/dist/agent/hermes-parity-manifest.js +78 -71
  21. package/dist/agent/hermes-runtime-lifecycle.d.ts +67 -0
  22. package/dist/agent/hermes-runtime-lifecycle.js +468 -0
  23. package/dist/agent/middleware/index.d.ts +1 -0
  24. package/dist/agent/middleware/index.js +1 -0
  25. package/dist/agent/middleware/visual-validation-middleware.d.ts +17 -0
  26. package/dist/agent/middleware/visual-validation-middleware.js +67 -0
  27. package/dist/agent/model-benchmark.d.ts +77 -0
  28. package/dist/agent/model-benchmark.js +309 -0
  29. package/dist/agent/model-tier.d.ts +14 -0
  30. package/dist/agent/model-tier.js +71 -0
  31. package/dist/agent/multi-agent/agents/orchestrator-agent.js +17 -6
  32. package/dist/agent/multi-agent/multi-agent-system.js +3 -1
  33. package/dist/agent/multi-agent/session-fleet-bridge.d.ts +2 -0
  34. package/dist/agent/multi-agent/session-fleet-bridge.js +9 -1
  35. package/dist/agent/multi-agent/session-tools.js +22 -5
  36. package/dist/agent/reasoning/mcts.js +20 -6
  37. package/dist/agent/self-improvement/authored-artifact-gate.d.ts +18 -0
  38. package/dist/agent/self-improvement/authored-artifact-gate.js +42 -0
  39. package/dist/agent/self-improvement/authored-tool-runtime.d.ts +27 -0
  40. package/dist/agent/self-improvement/authored-tool-runtime.js +57 -0
  41. package/dist/agent/self-improvement/authored-tool-store.d.ts +24 -0
  42. package/dist/agent/self-improvement/authored-tool-store.js +57 -0
  43. package/dist/agent/self-improvement/llm-tool-proposer.d.ts +41 -0
  44. package/dist/agent/self-improvement/llm-tool-proposer.js +136 -0
  45. package/dist/agent/self-improvement/sandbox-scorer.d.ts +17 -0
  46. package/dist/agent/self-improvement/sandbox-scorer.js +43 -0
  47. package/dist/agent/self-improvement/self-knowledge.d.ts +8 -0
  48. package/dist/agent/self-improvement/self-knowledge.js +24 -0
  49. package/dist/agent/self-improvement/skill-benchmark.d.ts +9 -0
  50. package/dist/agent/self-improvement/skill-benchmark.js +22 -0
  51. package/dist/agent/self-improvement/skill-consolidator.d.ts +71 -0
  52. package/dist/agent/self-improvement/skill-consolidator.js +137 -0
  53. package/dist/agent/self-improvement/skill-engine.d.ts +42 -0
  54. package/dist/agent/self-improvement/skill-engine.js +87 -0
  55. package/dist/agent/self-improvement/skill-gate.d.ts +19 -0
  56. package/dist/agent/self-improvement/skill-gate.js +62 -0
  57. package/dist/agent/self-improvement/skill-mutator.d.ts +74 -0
  58. package/dist/agent/self-improvement/skill-mutator.js +223 -0
  59. package/dist/agent/self-improvement/skill-proposer.d.ts +40 -0
  60. package/dist/agent/self-improvement/skill-proposer.js +82 -0
  61. package/dist/agent/self-improvement/skill-types.d.ts +41 -0
  62. package/dist/agent/self-improvement/skill-types.js +13 -0
  63. package/dist/agent/self-improvement/tool-benchmark.d.ts +10 -0
  64. package/dist/agent/self-improvement/tool-benchmark.js +37 -0
  65. package/dist/agent/self-improvement/tool-engine.d.ts +54 -0
  66. package/dist/agent/self-improvement/tool-engine.js +101 -0
  67. package/dist/agent/self-improvement/tool-gate.d.ts +20 -0
  68. package/dist/agent/self-improvement/tool-gate.js +78 -0
  69. package/dist/agent/self-improvement/tool-proposer.d.ts +31 -0
  70. package/dist/agent/self-improvement/tool-proposer.js +34 -0
  71. package/dist/agent/self-improvement/tool-skill-mutator.d.ts +40 -0
  72. package/dist/agent/self-improvement/tool-skill-mutator.js +79 -0
  73. package/dist/agent/self-improvement/tool-types.d.ts +48 -0
  74. package/dist/agent/self-improvement/tool-types.js +9 -0
  75. package/dist/agent/self-improvement/types.d.ts +3 -1
  76. package/dist/agent/session-end-flush.d.ts +6 -1
  77. package/dist/agent/session-end-flush.js +20 -4
  78. package/dist/agent/streaming/streaming-handler.d.ts +7 -0
  79. package/dist/agent/streaming/streaming-handler.js +8 -1
  80. package/dist/agent/tool-executor.js +1 -0
  81. package/dist/agent/tool-handler.d.ts +5 -0
  82. package/dist/agent/tool-handler.js +133 -4
  83. package/dist/browser-automation/browser-operator-executor.js +15 -0
  84. package/dist/browser-automation/browser-use-runner.d.ts +96 -0
  85. package/dist/browser-automation/browser-use-runner.js +492 -0
  86. package/dist/browser-automation/camofox-runner.d.ts +107 -0
  87. package/dist/browser-automation/camofox-runner.js +287 -0
  88. package/dist/channels/dingtalk/index.js +3 -0
  89. package/dist/channels/discord/client.d.ts +9 -0
  90. package/dist/channels/discord/client.js +12 -0
  91. package/dist/channels/feishu/index.d.ts +167 -1
  92. package/dist/channels/feishu/index.js +432 -7
  93. package/dist/channels/gateway-lifecycle.d.ts +132 -0
  94. package/dist/channels/gateway-lifecycle.js +219 -0
  95. package/dist/channels/google-chat/index.d.ts +5 -1
  96. package/dist/channels/google-chat/index.js +5 -1
  97. package/dist/channels/imessage/index.d.ts +14 -0
  98. package/dist/channels/imessage/index.js +64 -17
  99. package/dist/channels/index.d.ts +4 -0
  100. package/dist/channels/index.js +4 -0
  101. package/dist/channels/irc/index.d.ts +73 -3
  102. package/dist/channels/irc/index.js +446 -11
  103. package/dist/channels/line/index.js +3 -0
  104. package/dist/channels/mattermost/index.d.ts +51 -4
  105. package/dist/channels/mattermost/index.js +303 -20
  106. package/dist/channels/nextcloud-talk/index.d.ts +89 -8
  107. package/dist/channels/nextcloud-talk/index.js +367 -16
  108. package/dist/channels/nostr/index.d.ts +121 -1
  109. package/dist/channels/nostr/index.js +396 -8
  110. package/dist/channels/ntfy/index.js +3 -0
  111. package/dist/channels/qq/index.js +3 -0
  112. package/dist/channels/slash-parity.d.ts +117 -0
  113. package/dist/channels/slash-parity.js +185 -0
  114. package/dist/channels/synology-chat/index.js +3 -0
  115. package/dist/channels/teams/index.d.ts +3 -0
  116. package/dist/channels/teams/index.js +3 -0
  117. package/dist/channels/telegram/client.d.ts +9 -0
  118. package/dist/channels/telegram/client.js +12 -0
  119. package/dist/channels/twilio-voice/index.js +3 -0
  120. package/dist/channels/webchat/index.d.ts +7 -1
  121. package/dist/channels/webchat/index.js +7 -1
  122. package/dist/channels/wecom/index.js +3 -0
  123. package/dist/channels/weixin/index.js +3 -0
  124. package/dist/channels/zalo/index.js +3 -0
  125. package/dist/cli/config-loader.js +1 -1
  126. package/dist/codebuddy/client.d.ts +30 -1
  127. package/dist/codebuddy/client.js +167 -20
  128. package/dist/codebuddy/providers/provider-chatgpt-responses.d.ts +5 -0
  129. package/dist/codebuddy/providers/provider-chatgpt-responses.js +7 -1
  130. package/dist/codebuddy/providers/provider-gemini-native.js +1 -1
  131. package/dist/codebuddy/providers/provider-openai-compat.d.ts +5 -0
  132. package/dist/codebuddy/providers/provider-openai-compat.js +82 -2
  133. package/dist/codebuddy/tool-definitions/computer-control-tools.js +32 -2
  134. package/dist/codebuddy/tool-definitions/core-tools.js +3 -3
  135. package/dist/codebuddy/tool-definitions/index.d.ts +2 -1
  136. package/dist/codebuddy/tool-definitions/index.js +2 -1
  137. package/dist/codebuddy/tool-definitions/multimodal-tools.d.ts +1 -0
  138. package/dist/codebuddy/tool-definitions/multimodal-tools.js +44 -1
  139. package/dist/codebuddy/tool-definitions/windows-tools.d.ts +2 -0
  140. package/dist/codebuddy/tool-definitions/windows-tools.js +34 -0
  141. package/dist/codebuddy/tools.d.ts +8 -1
  142. package/dist/codebuddy/tools.js +67 -24
  143. package/dist/commands/cli/hermes-commands.js +108 -0
  144. package/dist/commands/cli/improve-command.js +123 -0
  145. package/dist/commands/cli/native-engine-commands.js +102 -3
  146. package/dist/commands/cli/utility-commands.js +45 -0
  147. package/dist/commands/enhanced-command-handler.js +2 -2
  148. package/dist/commands/goal-cli.d.ts +30 -0
  149. package/dist/commands/goal-cli.js +210 -27
  150. package/dist/commands/handlers/goal-handler.d.ts +9 -2
  151. package/dist/commands/handlers/goal-handler.js +36 -9
  152. package/dist/commands/handlers/infra-handlers.js +36 -0
  153. package/dist/commands/handlers/memory-handlers.js +96 -1
  154. package/dist/commands/handlers/missing-handlers.d.ts +1 -1
  155. package/dist/commands/handlers/missing-handlers.js +26 -3
  156. package/dist/commands/headless-slash.d.ts +2 -0
  157. package/dist/commands/headless-slash.js +12 -0
  158. package/dist/commands/llm-provider-resolution.d.ts +5 -3
  159. package/dist/commands/llm-provider-resolution.js +87 -33
  160. package/dist/commands/ollama.d.ts +25 -0
  161. package/dist/commands/ollama.js +100 -0
  162. package/dist/commands/provider.d.ts +5 -0
  163. package/dist/commands/provider.js +106 -55
  164. package/dist/commands/skills-cli/index.js +123 -0
  165. package/dist/commands/slash/builtin-commands.js +1 -1
  166. package/dist/commands/spec-next.js +2 -1
  167. package/dist/commands/spec-plan.js +5 -16
  168. package/dist/commands/tunnel.d.ts +2 -0
  169. package/dist/commands/tunnel.js +48 -0
  170. package/dist/companion/percepts.js +11 -1
  171. package/dist/config/config-resolver.d.ts +2 -1
  172. package/dist/config/config-resolver.js +54 -41
  173. package/dist/config/constants.d.ts +28 -0
  174. package/dist/config/constants.js +7 -0
  175. package/dist/config/env-schema.js +756 -0
  176. package/dist/config/model-tools.js +4 -4
  177. package/dist/config/toml-config.d.ts +16 -0
  178. package/dist/config/toml-config.js +3 -0
  179. package/dist/context/bootstrap-loader.js +6 -23
  180. package/dist/context/context-manager-v2.js +1 -0
  181. package/dist/context/import-directive-parser.d.ts +4 -0
  182. package/dist/context/import-directive-parser.js +51 -6
  183. package/dist/context/instruction-excludes.d.ts +30 -1
  184. package/dist/context/instruction-excludes.js +71 -1
  185. package/dist/context/jit-context.d.ts +8 -10
  186. package/dist/context/jit-context.js +28 -106
  187. package/dist/context/project-context.d.ts +90 -0
  188. package/dist/context/project-context.js +295 -0
  189. package/dist/daemon/autonomous-daemon.d.ts +1 -1
  190. package/dist/daemon/autonomous-daemon.js +3 -3
  191. package/dist/daemon/autonomous-loop.d.ts +31 -1
  192. package/dist/daemon/autonomous-loop.js +91 -4
  193. package/dist/daemon/colab-goal.js +9 -1
  194. package/dist/daemon/cron-agent-bridge.d.ts +12 -3
  195. package/dist/daemon/cron-agent-bridge.js +25 -9
  196. package/dist/desktop/codebuddy-engine-adapter.d.ts +32 -0
  197. package/dist/desktop/codebuddy-engine-adapter.js +257 -80
  198. package/dist/desktop/engine-adapter.d.ts +14 -0
  199. package/dist/desktop-automation/automation-manager.js +16 -0
  200. package/dist/desktop-automation/omniparser-runner.d.ts +63 -0
  201. package/dist/desktop-automation/omniparser-runner.js +115 -0
  202. package/dist/desktop-automation/smart-snapshot.d.ts +11 -0
  203. package/dist/desktop-automation/smart-snapshot.js +72 -5
  204. package/dist/doctor/index.js +40 -23
  205. package/dist/events/types.d.ts +11 -0
  206. package/dist/fleet/colab-store.js +14 -2
  207. package/dist/fleet/peer-session-bridge.js +50 -12
  208. package/dist/fleet/peer-tool-bridge.js +14 -0
  209. package/dist/goals/goal-decomposer.d.ts +27 -0
  210. package/dist/goals/goal-decomposer.js +293 -0
  211. package/dist/goals/goal-judge-client.d.ts +15 -0
  212. package/dist/goals/goal-judge-client.js +45 -0
  213. package/dist/goals/goal-judge.d.ts +2 -0
  214. package/dist/goals/goal-judge.js +35 -6
  215. package/dist/goals/goal-loop.d.ts +14 -0
  216. package/dist/goals/goal-loop.js +47 -2
  217. package/dist/goals/goal-manager.d.ts +6 -0
  218. package/dist/goals/goal-manager.js +67 -14
  219. package/dist/goals/goal-state.d.ts +13 -0
  220. package/dist/goals/goal-state.js +83 -13
  221. package/dist/goals/goal-store.d.ts +3 -0
  222. package/dist/goals/goal-store.js +31 -15
  223. package/dist/harness/contract.d.ts +28 -28
  224. package/dist/hooks/user-hooks.js +17 -3
  225. package/dist/identity/identity-manager.js +3 -2
  226. package/dist/index.js +481 -26
  227. package/dist/input/text-to-speech.d.ts +2 -6
  228. package/dist/input/text-to-speech.js +2 -27
  229. package/dist/integrations/screenpipe/screenpipe-client.d.ts +10 -0
  230. package/dist/integrations/screenpipe/screenpipe-client.js +12 -2
  231. package/dist/integrations/tailscale.d.ts +13 -0
  232. package/dist/integrations/tailscale.js +87 -34
  233. package/dist/knowledge/workspace-indexer.js +53 -9
  234. package/dist/mcp/client.js +1 -0
  235. package/dist/mcp/mcp-desktop-tools.d.ts +23 -0
  236. package/dist/mcp/mcp-desktop-tools.js +158 -0
  237. package/dist/mcp/mcp-resources.js +2 -3
  238. package/dist/mcp/mcp-server.js +2 -0
  239. package/dist/memory/enhanced-memory.d.ts +10 -0
  240. package/dist/memory/enhanced-memory.js +33 -2
  241. package/dist/memory/index.d.ts +3 -1
  242. package/dist/memory/index.js +4 -1
  243. package/dist/memory/memory-auto-proposer.d.ts +23 -0
  244. package/dist/memory/memory-auto-proposer.js +308 -0
  245. package/dist/memory/memory-candidate-queue.d.ts +92 -0
  246. package/dist/memory/memory-candidate-queue.js +261 -0
  247. package/dist/memory/persistent-memory.d.ts +45 -2
  248. package/dist/memory/persistent-memory.js +236 -40
  249. package/dist/ml/bayesian-qualifier.d.ts +1 -1
  250. package/dist/ml/bayesian-qualifier.js +35 -2
  251. package/dist/openclaw/gateway-bridge.js +5 -0
  252. package/dist/plugins/marketplace.d.ts +1 -0
  253. package/dist/plugins/marketplace.js +7 -0
  254. package/dist/prompts/execution-discipline.d.ts +14 -0
  255. package/dist/prompts/execution-discipline.js +29 -0
  256. package/dist/prompts/variation-injector.js +9 -2
  257. package/dist/protocols/acp/acp-agentic-runner.d.ts +7 -6
  258. package/dist/protocols/acp/acp-agentic-runner.js +115 -18
  259. package/dist/protocols/acp/acp-session-store.d.ts +23 -0
  260. package/dist/protocols/acp/acp-session-store.js +77 -0
  261. package/dist/protocols/acp/acp-stdio-server.d.ts +7 -0
  262. package/dist/protocols/acp/acp-stdio-server.js +71 -16
  263. package/dist/providers/active-llm-registry.d.ts +37 -0
  264. package/dist/providers/active-llm-registry.js +186 -0
  265. package/dist/providers/auxiliary-provider.d.ts +25 -0
  266. package/dist/providers/auxiliary-provider.js +192 -0
  267. package/dist/providers/codex-oauth.d.ts +1 -1
  268. package/dist/providers/codex-oauth.js +27 -4
  269. package/dist/providers/index.d.ts +3 -0
  270. package/dist/providers/index.js +4 -0
  271. package/dist/providers/provider-catalog.d.ts +70 -0
  272. package/dist/providers/provider-catalog.js +738 -0
  273. package/dist/providers/provider-fallback.d.ts +35 -0
  274. package/dist/providers/provider-fallback.js +171 -0
  275. package/dist/providers/xai-oauth.d.ts +128 -0
  276. package/dist/providers/xai-oauth.js +735 -0
  277. package/dist/scheduler/cron-scheduler.d.ts +15 -3
  278. package/dist/scheduler/cron-scheduler.js +53 -7
  279. package/dist/scheduler/script-runner.d.ts +2 -0
  280. package/dist/scheduler/script-runner.js +19 -4
  281. package/dist/scheduler/watchdog-handlers.js +7 -20
  282. package/dist/search/usearch-index.js +7 -2
  283. package/dist/security/tool-policy/tool-groups.js +2 -0
  284. package/dist/sensory/dreaming.d.ts +45 -0
  285. package/dist/sensory/dreaming.js +114 -0
  286. package/dist/sensory/heartbeat-scheduler.d.ts +38 -0
  287. package/dist/sensory/heartbeat-scheduler.js +72 -0
  288. package/dist/sensory/reactions.d.ts +24 -0
  289. package/dist/sensory/reactions.js +31 -0
  290. package/dist/sensory/screen-reaction.d.ts +23 -0
  291. package/dist/sensory/screen-reaction.js +59 -0
  292. package/dist/sensory/sensory-bridge.d.ts +23 -0
  293. package/dist/sensory/sensory-bridge.js +85 -0
  294. package/dist/sensory/sensory-memory.d.ts +20 -0
  295. package/dist/sensory/sensory-memory.js +39 -0
  296. package/dist/sensory/speech-reaction.d.ts +21 -0
  297. package/dist/sensory/speech-reaction.js +83 -0
  298. package/dist/sensory/vision-reaction.d.ts +31 -0
  299. package/dist/sensory/vision-reaction.js +74 -0
  300. package/dist/server/index.js +106 -2
  301. package/dist/server/routes/mobile.d.ts +12 -4
  302. package/dist/server/routes/mobile.js +116 -1
  303. package/dist/server/tls-config.d.ts +35 -0
  304. package/dist/server/tls-config.js +142 -0
  305. package/dist/server/tunnel-manager.d.ts +20 -0
  306. package/dist/server/tunnel-manager.js +58 -0
  307. package/dist/server/websocket/fleet-bridge.js +5 -0
  308. package/dist/services/prompt-builder.d.ts +11 -0
  309. package/dist/services/prompt-builder.js +124 -17
  310. package/dist/shared/engine-types.d.ts +15 -1
  311. package/dist/sidecar/sidecar-bridge.d.ts +1 -0
  312. package/dist/sidecar/sidecar-bridge.js +21 -10
  313. package/dist/skills/parser.js +3 -0
  314. package/dist/skills/skill-importer.d.ts +58 -0
  315. package/dist/skills/skill-importer.js +261 -0
  316. package/dist/skills/skill-sources.d.ts +20 -0
  317. package/dist/skills/skill-sources.js +102 -0
  318. package/dist/skills/types.d.ts +6 -0
  319. package/dist/spec/spec-store.js +8 -1
  320. package/dist/talk-mode/providers/audioreader-tts.d.ts +1 -1
  321. package/dist/talk-mode/providers/audioreader-tts.js +8 -8
  322. package/dist/templates/project-scaffolding.js +3 -2
  323. package/dist/themes/theme-schema.d.ts +10 -10
  324. package/dist/tools/application-profiles.js +38 -0
  325. package/dist/tools/bash/bash-tool.d.ts +1 -0
  326. package/dist/tools/bash/bash-tool.js +16 -2
  327. package/dist/tools/bash/command-validator.js +3 -0
  328. package/dist/tools/bash/rtk-rewrite.d.ts +16 -0
  329. package/dist/tools/bash/rtk-rewrite.js +100 -0
  330. package/dist/tools/bash/streaming-executor.js +14 -1
  331. package/dist/tools/computer-control-tool.d.ts +16 -1
  332. package/dist/tools/computer-control-tool.js +317 -5
  333. package/dist/tools/document-generator.d.ts +14 -0
  334. package/dist/tools/document-generator.js +79 -0
  335. package/dist/tools/execute-code-rpc-invoker.d.ts +26 -2
  336. package/dist/tools/execute-code-rpc-invoker.js +46 -5
  337. package/dist/tools/metadata.js +28 -0
  338. package/dist/tools/office-macro-tool.d.ts +10 -0
  339. package/dist/tools/office-macro-tool.js +93 -0
  340. package/dist/tools/register-tool-handler.d.ts +25 -0
  341. package/dist/tools/register-tool-handler.js +100 -0
  342. package/dist/tools/registry/index.d.ts +2 -1
  343. package/dist/tools/registry/index.js +2 -1
  344. package/dist/tools/registry/memory-tools.d.ts +20 -0
  345. package/dist/tools/registry/memory-tools.js +225 -3
  346. package/dist/tools/registry/multimodal-tools.js +2 -2
  347. package/dist/tools/registry/vision-tools.d.ts +33 -0
  348. package/dist/tools/registry/vision-tools.js +308 -6
  349. package/dist/tools/registry/windows-tools.d.ts +2 -0
  350. package/dist/tools/registry/windows-tools.js +47 -0
  351. package/dist/tools/registry.d.ts +6 -0
  352. package/dist/tools/registry.js +8 -0
  353. package/dist/tools/route-peer-tool.js +14 -0
  354. package/dist/tools/screenshot-tool.js +14 -2
  355. package/dist/tools/text-to-speech-tool.d.ts +1 -1
  356. package/dist/tools/text-to-speech-tool.js +2 -12
  357. package/dist/tools/tool-selector.js +3 -59
  358. package/dist/utils/config-validation/schema.d.ts +40 -7
  359. package/dist/utils/config-validation/schema.js +130 -1
  360. package/dist/utils/cost-tracker.js +21 -1
  361. package/dist/utils/disk-guard.d.ts +180 -0
  362. package/dist/utils/disk-guard.js +404 -0
  363. package/dist/utils/init-project.d.ts +7 -0
  364. package/dist/utils/init-project.js +37 -0
  365. package/dist/utils/interactive-setup.js +35 -2
  366. package/dist/utils/model-utils.js +11 -2
  367. package/dist/utils/output-sanitizer.js +11 -0
  368. package/dist/utils/provider-detector.d.ts +8 -7
  369. package/dist/utils/provider-detector.js +19 -77
  370. package/dist/utils/settings-manager.d.ts +19 -0
  371. package/dist/utils/token-display.d.ts +3 -3
  372. package/dist/utils/token-display.js +22 -4
  373. package/dist/wizard/onboarding.d.ts +39 -0
  374. package/dist/wizard/onboarding.js +433 -21
  375. package/dist/wizard/provider-onboarding.d.ts +8 -23
  376. package/dist/wizard/provider-onboarding.js +39 -158
  377. package/package.json +4 -2
  378. package/dist/plugins/provider-onboarding.d.ts +0 -23
  379. package/dist/plugins/provider-onboarding.js +0 -116
  380. package/dist/utils/kokoro-tts.d.ts +0 -8
  381. package/dist/utils/kokoro-tts.js +0 -67
@@ -47,7 +47,7 @@ export interface ValidationResult {
47
47
  /**
48
48
  * Valid AI provider options
49
49
  */
50
- export declare const AI_PROVIDERS: readonly ["grok", "claude", "openai", "gemini", "ollama", "lmstudio", "local"];
50
+ export declare const AI_PROVIDERS: readonly ["grok", "xai", "claude", "anthropic", "openai", "chatgpt", "gemini", "google", "ollama", "ollama-cloud", "lmstudio", "lm-studio", "local", "mistral", "groq", "together", "fireworks", "openrouter", "novita", "novita-ai", "zai", "glm", "kimi-coding", "kimi", "moonshot", "kimi-coding-cn", "kimi-cn", "moonshot-cn", "arcee", "arcee-ai", "gmi", "gmi-cloud", "gmicloud", "minimax", "minimax-cn", "alibaba", "qwen", "dashscope", "alibaba-coding-plan", "alibaba-coding", "kilocode", "kilo-code", "xiaomi", "mimo", "tencent-tokenhub", "tencent", "tokenhub", "opencode-zen", "opencode", "opencode-go", "deepseek", "huggingface", "hf", "nvidia", "nvidia-nim", "stepfun", "vllm", "custom"];
51
51
  export type AIProvider = typeof AI_PROVIDERS[number];
52
52
  /**
53
53
  * Valid autonomy levels
@@ -82,6 +82,25 @@ export declare const SettingsSchema: z.ZodObject<{
82
82
  enableCheckpoints: z.ZodDefault<z.ZodBoolean>;
83
83
  enableTelemetry: z.ZodDefault<z.ZodBoolean>;
84
84
  thinkingLevel: z.ZodOptional<z.ZodEnum<["off", "minimal", "low", "medium", "high"]>>;
85
+ goals: z.ZodOptional<z.ZodObject<{
86
+ maxTurns: z.ZodOptional<z.ZodNumber>;
87
+ judgeModel: z.ZodOptional<z.ZodString>;
88
+ plannerModel: z.ZodOptional<z.ZodString>;
89
+ judgeMaxTokens: z.ZodOptional<z.ZodNumber>;
90
+ judgeTimeoutMs: z.ZodOptional<z.ZodNumber>;
91
+ }, "strict", z.ZodTypeAny, {
92
+ maxTurns?: number | undefined;
93
+ judgeModel?: string | undefined;
94
+ plannerModel?: string | undefined;
95
+ judgeMaxTokens?: number | undefined;
96
+ judgeTimeoutMs?: number | undefined;
97
+ }, {
98
+ maxTurns?: number | undefined;
99
+ judgeModel?: string | undefined;
100
+ plannerModel?: string | undefined;
101
+ judgeMaxTokens?: number | undefined;
102
+ judgeTimeoutMs?: number | undefined;
103
+ }>>;
85
104
  turboquant: z.ZodOptional<z.ZodObject<{
86
105
  vllmEndpoint: z.ZodOptional<z.ZodString>;
87
106
  ollamaEndpoint: z.ZodOptional<z.ZodString>;
@@ -166,6 +185,13 @@ export declare const SettingsSchema: z.ZodObject<{
166
185
  maxTokens?: number | undefined;
167
186
  agentMode?: "code" | "plan" | "ask" | "architect" | undefined;
168
187
  contextWindow?: number | undefined;
188
+ goals?: {
189
+ maxTurns?: number | undefined;
190
+ judgeModel?: string | undefined;
191
+ plannerModel?: string | undefined;
192
+ judgeMaxTokens?: number | undefined;
193
+ judgeTimeoutMs?: number | undefined;
194
+ } | undefined;
169
195
  turboquant?: {
170
196
  vllmEndpoint?: string | undefined;
171
197
  ollamaEndpoint?: string | undefined;
@@ -196,6 +222,13 @@ export declare const SettingsSchema: z.ZodObject<{
196
222
  contextWindow?: number | undefined;
197
223
  enableCheckpoints?: boolean | undefined;
198
224
  enableTelemetry?: boolean | undefined;
225
+ goals?: {
226
+ maxTurns?: number | undefined;
227
+ judgeModel?: string | undefined;
228
+ plannerModel?: string | undefined;
229
+ judgeMaxTokens?: number | undefined;
230
+ judgeTimeoutMs?: number | undefined;
231
+ } | undefined;
199
232
  turboquant?: {
200
233
  vllmEndpoint?: string | undefined;
201
234
  ollamaEndpoint?: string | undefined;
@@ -220,14 +253,14 @@ export declare const UserSettingsSchema: z.ZodObject<{
220
253
  baseURL: z.ZodOptional<z.ZodString>;
221
254
  defaultModel: z.ZodDefault<z.ZodString>;
222
255
  models: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
223
- provider: z.ZodDefault<z.ZodEnum<["grok", "claude", "openai", "gemini", "ollama", "lmstudio", "local"]>>;
256
+ provider: z.ZodDefault<z.ZodEnum<["grok", "xai", "claude", "anthropic", "openai", "chatgpt", "gemini", "google", "ollama", "ollama-cloud", "lmstudio", "lm-studio", "local", "mistral", "groq", "together", "fireworks", "openrouter", "novita", "novita-ai", "zai", "glm", "kimi-coding", "kimi", "moonshot", "kimi-coding-cn", "kimi-cn", "moonshot-cn", "arcee", "arcee-ai", "gmi", "gmi-cloud", "gmicloud", "minimax", "minimax-cn", "alibaba", "qwen", "dashscope", "alibaba-coding-plan", "alibaba-coding", "kilocode", "kilo-code", "xiaomi", "mimo", "tencent-tokenhub", "tencent", "tokenhub", "opencode-zen", "opencode", "opencode-go", "deepseek", "huggingface", "hf", "nvidia", "nvidia-nim", "stepfun", "vllm", "custom"]>>;
224
257
  model: z.ZodOptional<z.ZodString>;
225
258
  theme: z.ZodDefault<z.ZodEnum<["dark", "light", "auto", "default", "neon", "pastel", "matrix", "ocean", "sunset", "minimal", "high-contrast"]>>;
226
259
  editor: z.ZodOptional<z.ZodString>;
227
260
  shell: z.ZodOptional<z.ZodString>;
228
261
  language: z.ZodDefault<z.ZodString>;
229
262
  }, "strict", z.ZodTypeAny, {
230
- provider: "openai" | "lmstudio" | "ollama" | "gemini" | "grok" | "local" | "claude";
263
+ provider: "custom" | "xai" | "anthropic" | "google" | "openai" | "lmstudio" | "ollama" | "mistral" | "gemini" | "grok" | "lm-studio" | "local" | "minimax" | "moonshot" | "claude" | "deepseek" | "qwen" | "chatgpt" | "ollama-cloud" | "groq" | "together" | "fireworks" | "openrouter" | "novita" | "zai" | "kimi-coding" | "kimi-coding-cn" | "arcee" | "gmi" | "minimax-cn" | "alibaba" | "alibaba-coding-plan" | "kilocode" | "xiaomi" | "tencent-tokenhub" | "opencode-zen" | "opencode-go" | "huggingface" | "nvidia" | "stepfun" | "vllm" | "novita-ai" | "glm" | "kimi" | "kimi-cn" | "moonshot-cn" | "arcee-ai" | "gmi-cloud" | "gmicloud" | "dashscope" | "alibaba-coding" | "kilo-code" | "mimo" | "tencent" | "tokenhub" | "opencode" | "hf" | "nvidia-nim";
231
264
  models: string[];
232
265
  defaultModel: string;
233
266
  theme: "minimal" | "default" | "auto" | "dark" | "light" | "neon" | "pastel" | "matrix" | "ocean" | "sunset" | "high-contrast";
@@ -238,12 +271,12 @@ export declare const UserSettingsSchema: z.ZodObject<{
238
271
  apiKey?: string | undefined;
239
272
  editor?: string | undefined;
240
273
  }, {
241
- provider?: "openai" | "lmstudio" | "ollama" | "gemini" | "grok" | "local" | "claude" | undefined;
274
+ provider?: "custom" | "xai" | "anthropic" | "google" | "openai" | "lmstudio" | "ollama" | "mistral" | "gemini" | "grok" | "lm-studio" | "local" | "minimax" | "moonshot" | "claude" | "deepseek" | "qwen" | "chatgpt" | "ollama-cloud" | "groq" | "together" | "fireworks" | "openrouter" | "novita" | "zai" | "kimi-coding" | "kimi-coding-cn" | "arcee" | "gmi" | "minimax-cn" | "alibaba" | "alibaba-coding-plan" | "kilocode" | "xiaomi" | "tencent-tokenhub" | "opencode-zen" | "opencode-go" | "huggingface" | "nvidia" | "stepfun" | "vllm" | "novita-ai" | "glm" | "kimi" | "kimi-cn" | "moonshot-cn" | "arcee-ai" | "gmi-cloud" | "gmicloud" | "dashscope" | "alibaba-coding" | "kilo-code" | "mimo" | "tencent" | "tokenhub" | "opencode" | "hf" | "nvidia-nim" | undefined;
242
275
  model?: string | undefined;
243
276
  shell?: string | undefined;
244
277
  models?: string[] | undefined;
245
- baseURL?: string | undefined;
246
278
  defaultModel?: string | undefined;
279
+ baseURL?: string | undefined;
247
280
  apiKey?: string | undefined;
248
281
  theme?: "minimal" | "default" | "auto" | "dark" | "light" | "neon" | "pastel" | "matrix" | "ocean" | "sunset" | "high-contrast" | undefined;
249
282
  editor?: string | undefined;
@@ -452,9 +485,9 @@ export declare const EnvVarsSchema: z.ZodObject<{
452
485
  DEBUG?: boolean | undefined;
453
486
  LOG_LEVEL?: "debug" | "info" | "warn" | "error" | undefined;
454
487
  NO_COLOR?: string | undefined;
455
- GROK_BASE_URL?: string | undefined;
456
488
  GROK_MODEL?: string | undefined;
457
489
  GROK_API_KEY?: string | undefined;
490
+ GROK_BASE_URL?: string | undefined;
458
491
  MORPH_API_KEY?: string | undefined;
459
492
  YOLO_MODE?: boolean | undefined;
460
493
  MAX_COST?: number | undefined;
@@ -464,9 +497,9 @@ export declare const EnvVarsSchema: z.ZodObject<{
464
497
  DEBUG?: "0" | "1" | "true" | "false" | undefined;
465
498
  LOG_LEVEL?: "debug" | "info" | "warn" | "error" | undefined;
466
499
  NO_COLOR?: string | undefined;
467
- GROK_BASE_URL?: string | undefined;
468
500
  GROK_MODEL?: string | undefined;
469
501
  GROK_API_KEY?: string | undefined;
502
+ GROK_BASE_URL?: string | undefined;
470
503
  MORPH_API_KEY?: string | undefined;
471
504
  YOLO_MODE?: "0" | "1" | "true" | "false" | undefined;
472
505
  MAX_COST?: string | undefined;
@@ -11,7 +11,66 @@ import { z } from 'zod';
11
11
  /**
12
12
  * Valid AI provider options
13
13
  */
14
- export const AI_PROVIDERS = ['grok', 'claude', 'openai', 'gemini', 'ollama', 'lmstudio', 'local'];
14
+ export const AI_PROVIDERS = [
15
+ 'grok',
16
+ 'xai',
17
+ 'claude',
18
+ 'anthropic',
19
+ 'openai',
20
+ 'chatgpt',
21
+ 'gemini',
22
+ 'google',
23
+ 'ollama',
24
+ 'ollama-cloud',
25
+ 'lmstudio',
26
+ 'lm-studio',
27
+ 'local',
28
+ 'mistral',
29
+ 'groq',
30
+ 'together',
31
+ 'fireworks',
32
+ 'openrouter',
33
+ 'novita',
34
+ 'novita-ai',
35
+ 'zai',
36
+ 'glm',
37
+ 'kimi-coding',
38
+ 'kimi',
39
+ 'moonshot',
40
+ 'kimi-coding-cn',
41
+ 'kimi-cn',
42
+ 'moonshot-cn',
43
+ 'arcee',
44
+ 'arcee-ai',
45
+ 'gmi',
46
+ 'gmi-cloud',
47
+ 'gmicloud',
48
+ 'minimax',
49
+ 'minimax-cn',
50
+ 'alibaba',
51
+ 'qwen',
52
+ 'dashscope',
53
+ 'alibaba-coding-plan',
54
+ 'alibaba-coding',
55
+ 'kilocode',
56
+ 'kilo-code',
57
+ 'xiaomi',
58
+ 'mimo',
59
+ 'tencent-tokenhub',
60
+ 'tencent',
61
+ 'tokenhub',
62
+ 'opencode-zen',
63
+ 'opencode',
64
+ 'opencode-go',
65
+ 'deepseek',
66
+ 'huggingface',
67
+ 'hf',
68
+ 'nvidia',
69
+ 'nvidia-nim',
70
+ 'stepfun',
71
+ 'vllm',
72
+ 'custom',
73
+ ];
15
74
  /**
16
75
  * Valid autonomy levels
17
76
  */
@@ -94,6 +153,39 @@ export const SettingsSchema = z.object({
94
153
  thinkingLevel: z.enum(['off', 'minimal', 'low', 'medium', 'high'])
95
154
  .optional()
96
155
  .describe('Gemini 3.x thinking/reasoning depth level'),
156
+ goals: z.object({
157
+ maxTurns: z.number()
158
+ .int('Must be an integer')
159
+ .min(1, 'Minimum 1 turn')
160
+ .max(1000, 'Maximum 1000 turns')
161
+ .optional()
162
+ .describe('Maximum continuation turns for persistent goals'),
163
+ judgeModel: z.string()
164
+ .trim()
165
+ .min(1, 'Judge model cannot be empty')
166
+ .max(100, 'Judge model name too long')
167
+ .optional()
168
+ .describe('Optional model override used to judge goal completion'),
169
+ plannerModel: z.string()
170
+ .trim()
171
+ .min(1, 'Planner model cannot be empty')
172
+ .max(100, 'Planner model name too long')
173
+ .optional()
174
+ .describe('Optional model override used to decompose complex goals'),
175
+ judgeMaxTokens: z.number()
176
+ .int('Must be an integer')
177
+ .min(1, 'Minimum 1 token')
178
+ .max(200000, 'Maximum 200000 tokens')
179
+ .optional()
180
+ .describe('Maximum output tokens for the goal judge'),
181
+ judgeTimeoutMs: z.number()
182
+ .int('Must be an integer')
183
+ .min(1000, 'Minimum 1000ms')
184
+ .max(600000, 'Maximum 600000ms')
185
+ .optional()
186
+ .describe('Timeout for goal judging requests'),
187
+ }).strict().optional()
188
+ .describe('Persistent goal continuation and judging settings'),
97
189
  turboquant: z.object({
98
190
  vllmEndpoint: z.string().url().optional()
99
191
  .describe('vLLM endpoint URL, e.g. http://192.168.1.50:8000'),
@@ -385,6 +477,43 @@ export const SCHEMAS = {
385
477
  maximum: 200000,
386
478
  description: 'Maximum tokens per request',
387
479
  },
480
+ goals: {
481
+ type: 'object',
482
+ description: 'Persistent goal continuation and judging settings',
483
+ properties: {
484
+ maxTurns: {
485
+ type: 'number',
486
+ minimum: 1,
487
+ maximum: 1000,
488
+ description: 'Maximum continuation turns for persistent goals',
489
+ },
490
+ judgeModel: {
491
+ type: 'string',
492
+ minLength: 1,
493
+ maxLength: 100,
494
+ description: 'Optional model override used to judge goal completion',
495
+ },
496
+ plannerModel: {
497
+ type: 'string',
498
+ minLength: 1,
499
+ maxLength: 100,
500
+ description: 'Optional model override used to decompose complex goals',
501
+ },
502
+ judgeMaxTokens: {
503
+ type: 'number',
504
+ minimum: 1,
505
+ maximum: 200000,
506
+ description: 'Maximum output tokens for the goal judge',
507
+ },
508
+ judgeTimeoutMs: {
509
+ type: 'number',
510
+ minimum: 1000,
511
+ maximum: 600000,
512
+ description: 'Timeout for goal judging requests',
513
+ },
514
+ },
515
+ additionalProperties: false,
516
+ },
388
517
  },
389
518
  additionalProperties: false,
390
519
  },
@@ -25,6 +25,26 @@ function isChatGptSubscriptionModel(model) {
25
25
  m === 'codex-1' ||
26
26
  m.startsWith('codex-mini'));
27
27
  }
28
+ function isLocalNoCostModel(model) {
29
+ if (!model)
30
+ return false;
31
+ const m = model.toLowerCase();
32
+ return (m === 'ollama' ||
33
+ m.startsWith('ollama/') ||
34
+ m === 'lmstudio' ||
35
+ m === 'local-model' ||
36
+ m.startsWith('llama') ||
37
+ m.startsWith('qwen') ||
38
+ m.startsWith('gemma') ||
39
+ m.startsWith('phi') ||
40
+ m.startsWith('codellama') ||
41
+ m.startsWith('deepseek') ||
42
+ m.startsWith('command-r') ||
43
+ m === 'mistral' ||
44
+ m.startsWith('mistral:') ||
45
+ m === 'mixtral' ||
46
+ m.startsWith('mixtral:'));
47
+ }
28
48
  // Model pricing (approximate, update as needed)
29
49
  const MODEL_PRICING = {
30
50
  "grok-4-latest": { inputPer1k: 0.003, outputPer1k: 0.015 },
@@ -138,7 +158,7 @@ export class CostTracker extends EventEmitter {
138
158
  * misleading and shows up in dashboards as "spend" that doesn't exist.
139
159
  */
140
160
  calculateCost(inputTokens, outputTokens, model, cachedTokens = 0) {
141
- if (isChatGptSubscriptionModel(model)) {
161
+ if (isChatGptSubscriptionModel(model) || isLocalNoCostModel(model)) {
142
162
  return 0;
143
163
  }
144
164
  const pricing = MODEL_PRICING[model] ?? MODEL_PRICING["default"] ?? { inputPer1k: 0.003, outputPer1k: 0.015 };
@@ -0,0 +1,180 @@
1
+ /**
2
+ * disk-guard — the single place that bounds disk access.
3
+ *
4
+ * Motivation: on 2026-06-17 a tight build/Electron restart loop leaked temp
5
+ * dirs until the disk filled mid-run, corrupting command-output capture
6
+ * (ENOSPC). The fix at the time guarded ONE call site (the Cowork pilot). This
7
+ * module generalizes that lesson into reusable primitives so the failure class
8
+ * — "unbounded resource accumulation in a tight loop without monitoring or
9
+ * cleanup" — is handled in one place:
10
+ *
11
+ * - free-space preflight → {@link getFreeSpaceInfo}, {@link ensureFreeSpace}
12
+ * - managed temp lifecycle → {@link createManagedTempDir} (auto-cleaned on exit)
13
+ * - orphan sweep backstop → {@link sweepOrphans} (catches SIGKILL'd leaks)
14
+ * - byte budget → {@link DiskBudget}
15
+ * - bounded writes / logs → {@link boundedWriteFile}, {@link boundedAppendFile},
16
+ * {@link rotateIfLarge}
17
+ *
18
+ * Scope is deliberately focused. It is adopted at the highest-risk sites
19
+ * (disk-space checks, leaky /tmp dirs, unbounded append logs) rather than
20
+ * routing every fs write through it. It deliberately does NOT bound:
21
+ * - general / user-intentional workspace writes (the user asked for them),
22
+ * - third-party writers (Electron / Docker / Playwright) — covered instead by
23
+ * the startup {@link sweepOrphans} backstop,
24
+ * - low-traffic logs (add a one-line {@link rotateIfLarge} as needed).
25
+ *
26
+ * Config (read from the environment at call time, validated, with fallbacks —
27
+ * see {@link DISK_GUARD_DEFAULTS}; registered in `src/config/env-schema.ts`):
28
+ * CODEBUDDY_MIN_FREE_MB, CODEBUDDY_DISK_QUOTA_MB, CODEBUDDY_TEMP_MAX_AGE_MS,
29
+ * CODEBUDDY_LOG_MAX_MB, CODEBUDDY_LOG_MAX_FILES.
30
+ */
31
+ import { CodeBuddyError } from '../errors/base-error.js';
32
+ import { type Disposable } from './disposable.js';
33
+ /** Built-in fallbacks, used when the matching env var is unset/invalid. */
34
+ export declare const DISK_GUARD_DEFAULTS: {
35
+ /** Min free space (MB) before a guarded write/launch is refused. Matches the pilot's 500MB. */
36
+ readonly minFreeMb: 500;
37
+ /** Per-session byte budget (MB); 0 = unlimited. */
38
+ readonly quotaMb: 0;
39
+ /** Orphan-sweep age cutoff (ms); 0 = presence-based (remove any match). */
40
+ readonly tempMaxAgeMs: 0;
41
+ /** Append-log rotation size (MB). Matches logger.ts. */
42
+ readonly logMaxMb: 10;
43
+ /** Append-log retention count. Matches logger.ts. */
44
+ readonly logMaxFiles: 5;
45
+ };
46
+ /** Thrown by {@link ensureFreeSpace} when free disk space is below the threshold. */
47
+ export declare class DiskSpaceError extends CodeBuddyError {
48
+ constructor(message: string, context: {
49
+ path: string;
50
+ freeBytes: number;
51
+ minBytes: number;
52
+ });
53
+ }
54
+ /** Thrown by {@link boundedWriteFile} when a {@link DiskBudget} reservation is refused. */
55
+ export declare class DiskBudgetError extends CodeBuddyError {
56
+ constructor(message: string, context: {
57
+ usedBytes: number;
58
+ quotaBytes: number;
59
+ requestedBytes: number;
60
+ });
61
+ }
62
+ export interface FreeSpaceInfo {
63
+ freeBytes: number;
64
+ totalBytes: number;
65
+ freePercent: number;
66
+ }
67
+ /**
68
+ * Free-space info for the filesystem containing `targetPath`, or `null` when
69
+ * `fs.statfsSync` is unavailable / the path can't be stat'd (never throws).
70
+ * Uses `bavail` (blocks available to non-root) — the honest free figure a
71
+ * normal process can actually use — not `bfree`.
72
+ */
73
+ export declare function getFreeSpaceInfo(targetPath: string): FreeSpaceInfo | null;
74
+ /** Free bytes for the filesystem containing `targetPath`, or `null` if unavailable. */
75
+ export declare function getFreeBytes(targetPath: string): number | null;
76
+ /**
77
+ * Throw {@link DiskSpaceError} if free space on `targetPath`'s filesystem is
78
+ * below `minBytes` (default {@link DISK_GUARD_DEFAULTS.minFreeMb}). No-op when
79
+ * statfs is unavailable — we can't guard, so we don't block (matches the
80
+ * platform-resilient behavior of the original pilot guard).
81
+ */
82
+ export declare function ensureFreeSpace(targetPath: string, minBytes?: number, opts?: {
83
+ label?: string;
84
+ }): void;
85
+ export interface SweepResult {
86
+ removed: string[];
87
+ skipped: string[];
88
+ }
89
+ /**
90
+ * Remove orphaned entries named `<prefix>*` directly under `root`. This is the
91
+ * durable backstop for the leak class: managed temp dirs are auto-disposed on a
92
+ * graceful exit, but a SIGKILL'd / crashed run skips cleanup and leaks its dir
93
+ * until the next startup sweep.
94
+ *
95
+ * - `maxAgeMs: 0` (default) → presence-based: remove every match (the original
96
+ * pilot semantics — safe when only one instance runs at a time).
97
+ * - `maxAgeMs > 0` → age-safe: only remove matches whose mtime is older than
98
+ * `maxAgeMs`, so a concurrently-running peer's fresh dir is never nuked.
99
+ */
100
+ export declare function sweepOrphans(root: string, prefix: string, opts?: {
101
+ maxAgeMs?: number;
102
+ dryRun?: boolean;
103
+ }): SweepResult;
104
+ /**
105
+ * One-shot startup janitor: remove our own stale scratch dirs/files left in the
106
+ * system temp dir by crashed or SIGKILL'd runs (the durable backstop for the
107
+ * leak class). Age-gated (default 24h) so a concurrently-running session's fresh
108
+ * scratch dirs are never touched. Matches both `codebuddy-*` and `codebuddy_*`.
109
+ * Never throws.
110
+ */
111
+ export declare function sweepStaleCodebuddyTemp(maxAgeMs?: number): SweepResult;
112
+ export interface ManagedTempDir extends Disposable {
113
+ /** Absolute path of the created temp directory. */
114
+ readonly path: string;
115
+ /** Remove the directory and untrack it. Idempotent. */
116
+ dispose(): Promise<void>;
117
+ }
118
+ /** Dispose every still-tracked managed temp dir (invoked on graceful shutdown). */
119
+ export declare function disposeAllManagedTempDirs(): Promise<void>;
120
+ /**
121
+ * Create a temp directory that is tracked and auto-removed on graceful exit
122
+ * (and via the {@link Disposable} registry). Preflights {@link ensureFreeSpace}
123
+ * on the parent so we fail fast instead of mkdtemp'ing into a full disk.
124
+ *
125
+ * Pair this with a startup {@link sweepOrphans} on the same `parentDir`/`prefix`
126
+ * as the durable backstop for crashed runs that never reach `dispose()`.
127
+ */
128
+ export declare function createManagedTempDir(prefix: string, opts?: {
129
+ parentDir?: string;
130
+ minFreeBytes?: number;
131
+ }): Promise<ManagedTempDir>;
132
+ export interface BudgetReservation {
133
+ allowed: boolean;
134
+ reason?: string;
135
+ }
136
+ /**
137
+ * Tracks cumulative bytes written against a quota
138
+ * (default {@link DISK_GUARD_DEFAULTS.quotaMb} → `CODEBUDDY_DISK_QUOTA_MB`).
139
+ * A quota of 0 means unlimited — every reservation is allowed.
140
+ */
141
+ export declare class DiskBudget {
142
+ private readonly quotaBytes;
143
+ private usedBytes;
144
+ constructor(quotaBytes?: number);
145
+ /** Check (without recording) whether `bytes` more would fit. */
146
+ reserve(bytes: number): BudgetReservation;
147
+ record(bytes: number): void;
148
+ release(bytes: number): void;
149
+ used(): number;
150
+ remaining(): number;
151
+ }
152
+ /**
153
+ * Rotate `filePath` when it reaches `maxBytes`, keeping at most `maxFiles`
154
+ * generations (`name.1.ext` … `name.N.ext`, oldest dropped). Ports the
155
+ * algorithm in logger.ts so unbounded append logs can't fill the disk.
156
+ * Returns true if a rotation happened. Never throws.
157
+ */
158
+ export declare function rotateIfLarge(filePath: string, maxBytes?: number, maxFiles?: number): boolean;
159
+ /**
160
+ * Write a file after preflighting free space (and, if a {@link DiskBudget} is
161
+ * supplied, reserving + recording its size). Throws {@link DiskSpaceError} or
162
+ * {@link DiskBudgetError} before touching disk when bounds would be breached.
163
+ */
164
+ export declare function boundedWriteFile(filePath: string, data: string | Uint8Array, opts?: {
165
+ minFreeBytes?: number;
166
+ budget?: DiskBudget;
167
+ }): Promise<void>;
168
+ /**
169
+ * Append to a file after optionally rotating it ({@link rotateIfLarge}) and
170
+ * preflighting free space. The append-log counterpart to {@link boundedWriteFile}.
171
+ */
172
+ export declare function boundedAppendFile(filePath: string, data: string | Uint8Array, opts?: {
173
+ minFreeBytes?: number;
174
+ rotate?: {
175
+ maxBytes?: number;
176
+ maxFiles?: number;
177
+ };
178
+ }): Promise<void>;
179
+ /** Test helper: clear tracked temp dirs + reset the lazy shutdown-handler flag. */
180
+ export declare function resetDiskGuardForTests(): void;