@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.
- package/README.md +211 -163
- package/dist/agent/autonomous/agentic-coding-contract.d.ts +12 -12
- package/dist/agent/base-agent.d.ts +4 -0
- package/dist/agent/base-agent.js +6 -0
- package/dist/agent/codebuddy-agent.d.ts +1 -1
- package/dist/agent/codebuddy-agent.js +69 -14
- package/dist/agent/execution/agent-executor.js +122 -12
- package/dist/agent/execution/tool-dependency-graph.js +7 -0
- package/dist/agent/execution/tool-hooks.d.ts +6 -0
- package/dist/agent/execution/tool-hooks.js +13 -5
- package/dist/agent/execution/tool-selection-strategy.d.ts +11 -2
- package/dist/agent/execution/tool-selection-strategy.js +67 -10
- package/dist/agent/extended-thinking.d.ts +8 -0
- package/dist/agent/extended-thinking.js +27 -0
- package/dist/agent/facades/infrastructure-facade.d.ts +9 -2
- package/dist/agent/facades/infrastructure-facade.js +15 -6
- package/dist/agent/hermes-browser-backends.js +151 -11
- package/dist/agent/hermes-claw-migrate.d.ts +59 -0
- package/dist/agent/hermes-claw-migrate.js +427 -26
- package/dist/agent/hermes-parity-manifest.js +78 -71
- package/dist/agent/hermes-runtime-lifecycle.d.ts +67 -0
- package/dist/agent/hermes-runtime-lifecycle.js +468 -0
- package/dist/agent/middleware/index.d.ts +1 -0
- package/dist/agent/middleware/index.js +1 -0
- package/dist/agent/middleware/visual-validation-middleware.d.ts +17 -0
- package/dist/agent/middleware/visual-validation-middleware.js +67 -0
- package/dist/agent/model-benchmark.d.ts +77 -0
- package/dist/agent/model-benchmark.js +309 -0
- package/dist/agent/model-tier.d.ts +14 -0
- package/dist/agent/model-tier.js +71 -0
- package/dist/agent/multi-agent/agents/orchestrator-agent.js +17 -6
- package/dist/agent/multi-agent/multi-agent-system.js +3 -1
- package/dist/agent/multi-agent/session-fleet-bridge.d.ts +2 -0
- package/dist/agent/multi-agent/session-fleet-bridge.js +9 -1
- package/dist/agent/multi-agent/session-tools.js +22 -5
- package/dist/agent/reasoning/mcts.js +20 -6
- package/dist/agent/self-improvement/authored-artifact-gate.d.ts +18 -0
- package/dist/agent/self-improvement/authored-artifact-gate.js +42 -0
- package/dist/agent/self-improvement/authored-tool-runtime.d.ts +27 -0
- package/dist/agent/self-improvement/authored-tool-runtime.js +57 -0
- package/dist/agent/self-improvement/authored-tool-store.d.ts +24 -0
- package/dist/agent/self-improvement/authored-tool-store.js +57 -0
- package/dist/agent/self-improvement/llm-tool-proposer.d.ts +41 -0
- package/dist/agent/self-improvement/llm-tool-proposer.js +136 -0
- package/dist/agent/self-improvement/sandbox-scorer.d.ts +17 -0
- package/dist/agent/self-improvement/sandbox-scorer.js +43 -0
- package/dist/agent/self-improvement/self-knowledge.d.ts +8 -0
- package/dist/agent/self-improvement/self-knowledge.js +24 -0
- package/dist/agent/self-improvement/skill-benchmark.d.ts +9 -0
- package/dist/agent/self-improvement/skill-benchmark.js +22 -0
- package/dist/agent/self-improvement/skill-consolidator.d.ts +71 -0
- package/dist/agent/self-improvement/skill-consolidator.js +137 -0
- package/dist/agent/self-improvement/skill-engine.d.ts +42 -0
- package/dist/agent/self-improvement/skill-engine.js +87 -0
- package/dist/agent/self-improvement/skill-gate.d.ts +19 -0
- package/dist/agent/self-improvement/skill-gate.js +62 -0
- package/dist/agent/self-improvement/skill-mutator.d.ts +74 -0
- package/dist/agent/self-improvement/skill-mutator.js +223 -0
- package/dist/agent/self-improvement/skill-proposer.d.ts +40 -0
- package/dist/agent/self-improvement/skill-proposer.js +82 -0
- package/dist/agent/self-improvement/skill-types.d.ts +41 -0
- package/dist/agent/self-improvement/skill-types.js +13 -0
- package/dist/agent/self-improvement/tool-benchmark.d.ts +10 -0
- package/dist/agent/self-improvement/tool-benchmark.js +37 -0
- package/dist/agent/self-improvement/tool-engine.d.ts +54 -0
- package/dist/agent/self-improvement/tool-engine.js +101 -0
- package/dist/agent/self-improvement/tool-gate.d.ts +20 -0
- package/dist/agent/self-improvement/tool-gate.js +78 -0
- package/dist/agent/self-improvement/tool-proposer.d.ts +31 -0
- package/dist/agent/self-improvement/tool-proposer.js +34 -0
- package/dist/agent/self-improvement/tool-skill-mutator.d.ts +40 -0
- package/dist/agent/self-improvement/tool-skill-mutator.js +79 -0
- package/dist/agent/self-improvement/tool-types.d.ts +48 -0
- package/dist/agent/self-improvement/tool-types.js +9 -0
- package/dist/agent/self-improvement/types.d.ts +3 -1
- package/dist/agent/session-end-flush.d.ts +6 -1
- package/dist/agent/session-end-flush.js +20 -4
- package/dist/agent/streaming/streaming-handler.d.ts +7 -0
- package/dist/agent/streaming/streaming-handler.js +8 -1
- package/dist/agent/tool-executor.js +1 -0
- package/dist/agent/tool-handler.d.ts +5 -0
- package/dist/agent/tool-handler.js +133 -4
- package/dist/browser-automation/browser-operator-executor.js +15 -0
- package/dist/browser-automation/browser-use-runner.d.ts +96 -0
- package/dist/browser-automation/browser-use-runner.js +492 -0
- package/dist/browser-automation/camofox-runner.d.ts +107 -0
- package/dist/browser-automation/camofox-runner.js +287 -0
- package/dist/channels/dingtalk/index.js +3 -0
- package/dist/channels/discord/client.d.ts +9 -0
- package/dist/channels/discord/client.js +12 -0
- package/dist/channels/feishu/index.d.ts +167 -1
- package/dist/channels/feishu/index.js +432 -7
- package/dist/channels/gateway-lifecycle.d.ts +132 -0
- package/dist/channels/gateway-lifecycle.js +219 -0
- package/dist/channels/google-chat/index.d.ts +5 -1
- package/dist/channels/google-chat/index.js +5 -1
- package/dist/channels/imessage/index.d.ts +14 -0
- package/dist/channels/imessage/index.js +64 -17
- package/dist/channels/index.d.ts +4 -0
- package/dist/channels/index.js +4 -0
- package/dist/channels/irc/index.d.ts +73 -3
- package/dist/channels/irc/index.js +446 -11
- package/dist/channels/line/index.js +3 -0
- package/dist/channels/mattermost/index.d.ts +51 -4
- package/dist/channels/mattermost/index.js +303 -20
- package/dist/channels/nextcloud-talk/index.d.ts +89 -8
- package/dist/channels/nextcloud-talk/index.js +367 -16
- package/dist/channels/nostr/index.d.ts +121 -1
- package/dist/channels/nostr/index.js +396 -8
- package/dist/channels/ntfy/index.js +3 -0
- package/dist/channels/qq/index.js +3 -0
- package/dist/channels/slash-parity.d.ts +117 -0
- package/dist/channels/slash-parity.js +185 -0
- package/dist/channels/synology-chat/index.js +3 -0
- package/dist/channels/teams/index.d.ts +3 -0
- package/dist/channels/teams/index.js +3 -0
- package/dist/channels/telegram/client.d.ts +9 -0
- package/dist/channels/telegram/client.js +12 -0
- package/dist/channels/twilio-voice/index.js +3 -0
- package/dist/channels/webchat/index.d.ts +7 -1
- package/dist/channels/webchat/index.js +7 -1
- package/dist/channels/wecom/index.js +3 -0
- package/dist/channels/weixin/index.js +3 -0
- package/dist/channels/zalo/index.js +3 -0
- package/dist/cli/config-loader.js +1 -1
- package/dist/codebuddy/client.d.ts +30 -1
- package/dist/codebuddy/client.js +167 -20
- package/dist/codebuddy/providers/provider-chatgpt-responses.d.ts +5 -0
- package/dist/codebuddy/providers/provider-chatgpt-responses.js +7 -1
- package/dist/codebuddy/providers/provider-gemini-native.js +1 -1
- package/dist/codebuddy/providers/provider-openai-compat.d.ts +5 -0
- package/dist/codebuddy/providers/provider-openai-compat.js +82 -2
- package/dist/codebuddy/tool-definitions/computer-control-tools.js +32 -2
- package/dist/codebuddy/tool-definitions/core-tools.js +3 -3
- package/dist/codebuddy/tool-definitions/index.d.ts +2 -1
- package/dist/codebuddy/tool-definitions/index.js +2 -1
- package/dist/codebuddy/tool-definitions/multimodal-tools.d.ts +1 -0
- package/dist/codebuddy/tool-definitions/multimodal-tools.js +44 -1
- package/dist/codebuddy/tool-definitions/windows-tools.d.ts +2 -0
- package/dist/codebuddy/tool-definitions/windows-tools.js +34 -0
- package/dist/codebuddy/tools.d.ts +8 -1
- package/dist/codebuddy/tools.js +67 -24
- package/dist/commands/cli/hermes-commands.js +108 -0
- package/dist/commands/cli/improve-command.js +123 -0
- package/dist/commands/cli/native-engine-commands.js +102 -3
- package/dist/commands/cli/utility-commands.js +45 -0
- package/dist/commands/enhanced-command-handler.js +2 -2
- package/dist/commands/goal-cli.d.ts +30 -0
- package/dist/commands/goal-cli.js +210 -27
- package/dist/commands/handlers/goal-handler.d.ts +9 -2
- package/dist/commands/handlers/goal-handler.js +36 -9
- package/dist/commands/handlers/infra-handlers.js +36 -0
- package/dist/commands/handlers/memory-handlers.js +96 -1
- package/dist/commands/handlers/missing-handlers.d.ts +1 -1
- package/dist/commands/handlers/missing-handlers.js +26 -3
- package/dist/commands/headless-slash.d.ts +2 -0
- package/dist/commands/headless-slash.js +12 -0
- package/dist/commands/llm-provider-resolution.d.ts +5 -3
- package/dist/commands/llm-provider-resolution.js +87 -33
- package/dist/commands/ollama.d.ts +25 -0
- package/dist/commands/ollama.js +100 -0
- package/dist/commands/provider.d.ts +5 -0
- package/dist/commands/provider.js +106 -55
- package/dist/commands/skills-cli/index.js +123 -0
- package/dist/commands/slash/builtin-commands.js +1 -1
- package/dist/commands/spec-next.js +2 -1
- package/dist/commands/spec-plan.js +5 -16
- package/dist/commands/tunnel.d.ts +2 -0
- package/dist/commands/tunnel.js +48 -0
- package/dist/companion/percepts.js +11 -1
- package/dist/config/config-resolver.d.ts +2 -1
- package/dist/config/config-resolver.js +54 -41
- package/dist/config/constants.d.ts +28 -0
- package/dist/config/constants.js +7 -0
- package/dist/config/env-schema.js +756 -0
- package/dist/config/model-tools.js +4 -4
- package/dist/config/toml-config.d.ts +16 -0
- package/dist/config/toml-config.js +3 -0
- package/dist/context/bootstrap-loader.js +6 -23
- package/dist/context/context-manager-v2.js +1 -0
- package/dist/context/import-directive-parser.d.ts +4 -0
- package/dist/context/import-directive-parser.js +51 -6
- package/dist/context/instruction-excludes.d.ts +30 -1
- package/dist/context/instruction-excludes.js +71 -1
- package/dist/context/jit-context.d.ts +8 -10
- package/dist/context/jit-context.js +28 -106
- package/dist/context/project-context.d.ts +90 -0
- package/dist/context/project-context.js +295 -0
- package/dist/daemon/autonomous-daemon.d.ts +1 -1
- package/dist/daemon/autonomous-daemon.js +3 -3
- package/dist/daemon/autonomous-loop.d.ts +31 -1
- package/dist/daemon/autonomous-loop.js +91 -4
- package/dist/daemon/colab-goal.js +9 -1
- package/dist/daemon/cron-agent-bridge.d.ts +12 -3
- package/dist/daemon/cron-agent-bridge.js +25 -9
- package/dist/desktop/codebuddy-engine-adapter.d.ts +32 -0
- package/dist/desktop/codebuddy-engine-adapter.js +257 -80
- package/dist/desktop/engine-adapter.d.ts +14 -0
- package/dist/desktop-automation/automation-manager.js +16 -0
- package/dist/desktop-automation/omniparser-runner.d.ts +63 -0
- package/dist/desktop-automation/omniparser-runner.js +115 -0
- package/dist/desktop-automation/smart-snapshot.d.ts +11 -0
- package/dist/desktop-automation/smart-snapshot.js +72 -5
- package/dist/doctor/index.js +40 -23
- package/dist/events/types.d.ts +11 -0
- package/dist/fleet/colab-store.js +14 -2
- package/dist/fleet/peer-session-bridge.js +50 -12
- package/dist/fleet/peer-tool-bridge.js +14 -0
- package/dist/goals/goal-decomposer.d.ts +27 -0
- package/dist/goals/goal-decomposer.js +293 -0
- package/dist/goals/goal-judge-client.d.ts +15 -0
- package/dist/goals/goal-judge-client.js +45 -0
- package/dist/goals/goal-judge.d.ts +2 -0
- package/dist/goals/goal-judge.js +35 -6
- package/dist/goals/goal-loop.d.ts +14 -0
- package/dist/goals/goal-loop.js +47 -2
- package/dist/goals/goal-manager.d.ts +6 -0
- package/dist/goals/goal-manager.js +67 -14
- package/dist/goals/goal-state.d.ts +13 -0
- package/dist/goals/goal-state.js +83 -13
- package/dist/goals/goal-store.d.ts +3 -0
- package/dist/goals/goal-store.js +31 -15
- package/dist/harness/contract.d.ts +28 -28
- package/dist/hooks/user-hooks.js +17 -3
- package/dist/identity/identity-manager.js +3 -2
- package/dist/index.js +481 -26
- package/dist/input/text-to-speech.d.ts +2 -6
- package/dist/input/text-to-speech.js +2 -27
- package/dist/integrations/screenpipe/screenpipe-client.d.ts +10 -0
- package/dist/integrations/screenpipe/screenpipe-client.js +12 -2
- package/dist/integrations/tailscale.d.ts +13 -0
- package/dist/integrations/tailscale.js +87 -34
- package/dist/knowledge/workspace-indexer.js +53 -9
- package/dist/mcp/client.js +1 -0
- package/dist/mcp/mcp-desktop-tools.d.ts +23 -0
- package/dist/mcp/mcp-desktop-tools.js +158 -0
- package/dist/mcp/mcp-resources.js +2 -3
- package/dist/mcp/mcp-server.js +2 -0
- package/dist/memory/enhanced-memory.d.ts +10 -0
- package/dist/memory/enhanced-memory.js +33 -2
- package/dist/memory/index.d.ts +3 -1
- package/dist/memory/index.js +4 -1
- package/dist/memory/memory-auto-proposer.d.ts +23 -0
- package/dist/memory/memory-auto-proposer.js +308 -0
- package/dist/memory/memory-candidate-queue.d.ts +92 -0
- package/dist/memory/memory-candidate-queue.js +261 -0
- package/dist/memory/persistent-memory.d.ts +45 -2
- package/dist/memory/persistent-memory.js +236 -40
- package/dist/ml/bayesian-qualifier.d.ts +1 -1
- package/dist/ml/bayesian-qualifier.js +35 -2
- package/dist/openclaw/gateway-bridge.js +5 -0
- package/dist/plugins/marketplace.d.ts +1 -0
- package/dist/plugins/marketplace.js +7 -0
- package/dist/prompts/execution-discipline.d.ts +14 -0
- package/dist/prompts/execution-discipline.js +29 -0
- package/dist/prompts/variation-injector.js +9 -2
- package/dist/protocols/acp/acp-agentic-runner.d.ts +7 -6
- package/dist/protocols/acp/acp-agentic-runner.js +115 -18
- package/dist/protocols/acp/acp-session-store.d.ts +23 -0
- package/dist/protocols/acp/acp-session-store.js +77 -0
- package/dist/protocols/acp/acp-stdio-server.d.ts +7 -0
- package/dist/protocols/acp/acp-stdio-server.js +71 -16
- package/dist/providers/active-llm-registry.d.ts +37 -0
- package/dist/providers/active-llm-registry.js +186 -0
- package/dist/providers/auxiliary-provider.d.ts +25 -0
- package/dist/providers/auxiliary-provider.js +192 -0
- package/dist/providers/codex-oauth.d.ts +1 -1
- package/dist/providers/codex-oauth.js +27 -4
- package/dist/providers/index.d.ts +3 -0
- package/dist/providers/index.js +4 -0
- package/dist/providers/provider-catalog.d.ts +70 -0
- package/dist/providers/provider-catalog.js +738 -0
- package/dist/providers/provider-fallback.d.ts +35 -0
- package/dist/providers/provider-fallback.js +171 -0
- package/dist/providers/xai-oauth.d.ts +128 -0
- package/dist/providers/xai-oauth.js +735 -0
- package/dist/scheduler/cron-scheduler.d.ts +15 -3
- package/dist/scheduler/cron-scheduler.js +53 -7
- package/dist/scheduler/script-runner.d.ts +2 -0
- package/dist/scheduler/script-runner.js +19 -4
- package/dist/scheduler/watchdog-handlers.js +7 -20
- package/dist/search/usearch-index.js +7 -2
- package/dist/security/tool-policy/tool-groups.js +2 -0
- package/dist/sensory/dreaming.d.ts +45 -0
- package/dist/sensory/dreaming.js +114 -0
- package/dist/sensory/heartbeat-scheduler.d.ts +38 -0
- package/dist/sensory/heartbeat-scheduler.js +72 -0
- package/dist/sensory/reactions.d.ts +24 -0
- package/dist/sensory/reactions.js +31 -0
- package/dist/sensory/screen-reaction.d.ts +23 -0
- package/dist/sensory/screen-reaction.js +59 -0
- package/dist/sensory/sensory-bridge.d.ts +23 -0
- package/dist/sensory/sensory-bridge.js +85 -0
- package/dist/sensory/sensory-memory.d.ts +20 -0
- package/dist/sensory/sensory-memory.js +39 -0
- package/dist/sensory/speech-reaction.d.ts +21 -0
- package/dist/sensory/speech-reaction.js +83 -0
- package/dist/sensory/vision-reaction.d.ts +31 -0
- package/dist/sensory/vision-reaction.js +74 -0
- package/dist/server/index.js +106 -2
- package/dist/server/routes/mobile.d.ts +12 -4
- package/dist/server/routes/mobile.js +116 -1
- package/dist/server/tls-config.d.ts +35 -0
- package/dist/server/tls-config.js +142 -0
- package/dist/server/tunnel-manager.d.ts +20 -0
- package/dist/server/tunnel-manager.js +58 -0
- package/dist/server/websocket/fleet-bridge.js +5 -0
- package/dist/services/prompt-builder.d.ts +11 -0
- package/dist/services/prompt-builder.js +124 -17
- package/dist/shared/engine-types.d.ts +15 -1
- package/dist/sidecar/sidecar-bridge.d.ts +1 -0
- package/dist/sidecar/sidecar-bridge.js +21 -10
- package/dist/skills/parser.js +3 -0
- package/dist/skills/skill-importer.d.ts +58 -0
- package/dist/skills/skill-importer.js +261 -0
- package/dist/skills/skill-sources.d.ts +20 -0
- package/dist/skills/skill-sources.js +102 -0
- package/dist/skills/types.d.ts +6 -0
- package/dist/spec/spec-store.js +8 -1
- package/dist/talk-mode/providers/audioreader-tts.d.ts +1 -1
- package/dist/talk-mode/providers/audioreader-tts.js +8 -8
- package/dist/templates/project-scaffolding.js +3 -2
- package/dist/themes/theme-schema.d.ts +10 -10
- package/dist/tools/application-profiles.js +38 -0
- package/dist/tools/bash/bash-tool.d.ts +1 -0
- package/dist/tools/bash/bash-tool.js +16 -2
- package/dist/tools/bash/command-validator.js +3 -0
- package/dist/tools/bash/rtk-rewrite.d.ts +16 -0
- package/dist/tools/bash/rtk-rewrite.js +100 -0
- package/dist/tools/bash/streaming-executor.js +14 -1
- package/dist/tools/computer-control-tool.d.ts +16 -1
- package/dist/tools/computer-control-tool.js +317 -5
- package/dist/tools/document-generator.d.ts +14 -0
- package/dist/tools/document-generator.js +79 -0
- package/dist/tools/execute-code-rpc-invoker.d.ts +26 -2
- package/dist/tools/execute-code-rpc-invoker.js +46 -5
- package/dist/tools/metadata.js +28 -0
- package/dist/tools/office-macro-tool.d.ts +10 -0
- package/dist/tools/office-macro-tool.js +93 -0
- package/dist/tools/register-tool-handler.d.ts +25 -0
- package/dist/tools/register-tool-handler.js +100 -0
- package/dist/tools/registry/index.d.ts +2 -1
- package/dist/tools/registry/index.js +2 -1
- package/dist/tools/registry/memory-tools.d.ts +20 -0
- package/dist/tools/registry/memory-tools.js +225 -3
- package/dist/tools/registry/multimodal-tools.js +2 -2
- package/dist/tools/registry/vision-tools.d.ts +33 -0
- package/dist/tools/registry/vision-tools.js +308 -6
- package/dist/tools/registry/windows-tools.d.ts +2 -0
- package/dist/tools/registry/windows-tools.js +47 -0
- package/dist/tools/registry.d.ts +6 -0
- package/dist/tools/registry.js +8 -0
- package/dist/tools/route-peer-tool.js +14 -0
- package/dist/tools/screenshot-tool.js +14 -2
- package/dist/tools/text-to-speech-tool.d.ts +1 -1
- package/dist/tools/text-to-speech-tool.js +2 -12
- package/dist/tools/tool-selector.js +3 -59
- package/dist/utils/config-validation/schema.d.ts +40 -7
- package/dist/utils/config-validation/schema.js +130 -1
- package/dist/utils/cost-tracker.js +21 -1
- package/dist/utils/disk-guard.d.ts +180 -0
- package/dist/utils/disk-guard.js +404 -0
- package/dist/utils/init-project.d.ts +7 -0
- package/dist/utils/init-project.js +37 -0
- package/dist/utils/interactive-setup.js +35 -2
- package/dist/utils/model-utils.js +11 -2
- package/dist/utils/output-sanitizer.js +11 -0
- package/dist/utils/provider-detector.d.ts +8 -7
- package/dist/utils/provider-detector.js +19 -77
- package/dist/utils/settings-manager.d.ts +19 -0
- package/dist/utils/token-display.d.ts +3 -3
- package/dist/utils/token-display.js +22 -4
- package/dist/wizard/onboarding.d.ts +39 -0
- package/dist/wizard/onboarding.js +433 -21
- package/dist/wizard/provider-onboarding.d.ts +8 -23
- package/dist/wizard/provider-onboarding.js +39 -158
- package/package.json +4 -2
- package/dist/plugins/provider-onboarding.d.ts +0 -23
- package/dist/plugins/provider-onboarding.js +0 -116
- package/dist/utils/kokoro-tts.d.ts +0 -8
- 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 = [
|
|
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;
|