@pellux/goodvibes-sdk 0.18.28 → 0.18.30

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 (109) hide show
  1. package/dist/_internal/platform/agents/orchestrator-runner.js +1 -1
  2. package/dist/_internal/platform/bookmarks/manager.d.ts +1 -1
  3. package/dist/_internal/platform/bookmarks/manager.d.ts.map +1 -1
  4. package/dist/_internal/platform/channels/surface-registry.js +3 -3
  5. package/dist/_internal/platform/config/api-keys.d.ts +29 -0
  6. package/dist/_internal/platform/config/api-keys.d.ts.map +1 -0
  7. package/dist/_internal/platform/config/api-keys.js +153 -0
  8. package/dist/_internal/platform/config/index.d.ts +1 -13
  9. package/dist/_internal/platform/config/index.d.ts.map +1 -1
  10. package/dist/_internal/platform/config/index.js +1 -138
  11. package/dist/_internal/platform/config/schema-domain-core.d.ts +1 -0
  12. package/dist/_internal/platform/config/schema-domain-core.d.ts.map +1 -1
  13. package/dist/_internal/platform/config/schema-domain-core.js +7 -0
  14. package/dist/_internal/platform/config/schema-types.d.ts +3 -2
  15. package/dist/_internal/platform/config/schema-types.d.ts.map +1 -1
  16. package/dist/_internal/platform/config/tool-llm.d.ts.map +1 -1
  17. package/dist/_internal/platform/config/tool-llm.js +3 -0
  18. package/dist/_internal/platform/core/conversation-diff.d.ts +6 -2
  19. package/dist/_internal/platform/core/conversation-diff.d.ts.map +1 -1
  20. package/dist/_internal/platform/core/conversation.d.ts +13 -5
  21. package/dist/_internal/platform/core/conversation.d.ts.map +1 -1
  22. package/dist/_internal/platform/core/conversation.js +35 -1
  23. package/dist/_internal/platform/pairing/companion-token.d.ts +45 -0
  24. package/dist/_internal/platform/pairing/companion-token.d.ts.map +1 -0
  25. package/dist/_internal/platform/pairing/companion-token.js +74 -0
  26. package/dist/_internal/platform/pairing/connection-info.d.ts +10 -0
  27. package/dist/_internal/platform/pairing/connection-info.d.ts.map +1 -0
  28. package/dist/_internal/platform/pairing/connection-info.js +27 -0
  29. package/dist/_internal/platform/pairing/index.d.ts +6 -0
  30. package/dist/_internal/platform/pairing/index.d.ts.map +1 -0
  31. package/dist/_internal/platform/pairing/index.js +3 -0
  32. package/dist/_internal/platform/pairing/qr-generator.d.ts +20 -0
  33. package/dist/_internal/platform/pairing/qr-generator.d.ts.map +1 -0
  34. package/dist/_internal/platform/pairing/qr-generator.js +452 -0
  35. package/dist/_internal/platform/plugins/loader.d.ts +5 -1
  36. package/dist/_internal/platform/plugins/loader.d.ts.map +1 -1
  37. package/dist/_internal/platform/plugins/loader.js +7 -3
  38. package/dist/_internal/platform/runtime/bootstrap-hook-bridge.d.ts +10 -0
  39. package/dist/_internal/platform/runtime/bootstrap-hook-bridge.d.ts.map +1 -0
  40. package/dist/_internal/platform/runtime/bootstrap-hook-bridge.js +143 -0
  41. package/dist/_internal/platform/runtime/diagnostics/panels/panel-resources.d.ts +5 -5
  42. package/dist/_internal/platform/runtime/diagnostics/panels/panel-resources.d.ts.map +1 -1
  43. package/dist/_internal/platform/runtime/diagnostics/panels/panel-resources.js +3 -3
  44. package/dist/_internal/platform/runtime/diagnostics/types.d.ts +26 -13
  45. package/dist/_internal/platform/runtime/diagnostics/types.d.ts.map +1 -1
  46. package/dist/_internal/platform/runtime/diagnostics/types.js +4 -2
  47. package/dist/_internal/platform/runtime/mutable-runtime-state.d.ts +14 -0
  48. package/dist/_internal/platform/runtime/mutable-runtime-state.d.ts.map +1 -0
  49. package/dist/_internal/platform/runtime/mutable-runtime-state.js +1 -0
  50. package/dist/_internal/platform/runtime/ops/playbooks/permission-deadlock.js +2 -2
  51. package/dist/_internal/platform/runtime/perf/component-contracts.d.ts +114 -0
  52. package/dist/_internal/platform/runtime/perf/component-contracts.d.ts.map +1 -0
  53. package/dist/_internal/platform/runtime/perf/component-contracts.js +104 -0
  54. package/dist/_internal/platform/runtime/perf/component-health-monitor.d.ts +98 -0
  55. package/dist/_internal/platform/runtime/perf/component-health-monitor.d.ts.map +1 -0
  56. package/dist/_internal/platform/runtime/perf/component-health-monitor.js +248 -0
  57. package/dist/_internal/platform/runtime/perf/index.d.ts +6 -3
  58. package/dist/_internal/platform/runtime/perf/index.d.ts.map +1 -1
  59. package/dist/_internal/platform/runtime/perf/index.js +4 -2
  60. package/dist/_internal/platform/runtime/perf/panel-contracts.d.ts +6 -90
  61. package/dist/_internal/platform/runtime/perf/panel-contracts.d.ts.map +1 -1
  62. package/dist/_internal/platform/runtime/perf/panel-contracts.js +4 -83
  63. package/dist/_internal/platform/runtime/perf/panel-health-monitor.d.ts +4 -88
  64. package/dist/_internal/platform/runtime/perf/panel-health-monitor.d.ts.map +1 -1
  65. package/dist/_internal/platform/runtime/perf/panel-health-monitor.js +4 -236
  66. package/dist/_internal/platform/runtime/service-queries.d.ts +3 -0
  67. package/dist/_internal/platform/runtime/service-queries.d.ts.map +1 -0
  68. package/dist/_internal/platform/runtime/service-queries.js +1 -0
  69. package/dist/_internal/platform/runtime/services.d.ts +2 -2
  70. package/dist/_internal/platform/runtime/services.d.ts.map +1 -1
  71. package/dist/_internal/platform/runtime/services.js +3 -3
  72. package/dist/_internal/platform/runtime/session-return-context.js +1 -1
  73. package/dist/_internal/platform/runtime/shell-command-services.d.ts +2 -2
  74. package/dist/_internal/platform/runtime/shell-command-services.d.ts.map +1 -1
  75. package/dist/_internal/platform/runtime/shell-command-services.js +2 -2
  76. package/dist/_internal/platform/runtime/shell-command-workspace.d.ts +2 -2
  77. package/dist/_internal/platform/runtime/shell-command-workspace.d.ts.map +1 -1
  78. package/dist/_internal/platform/runtime/shell-command-workspace.js +2 -2
  79. package/dist/_internal/platform/runtime/store/domains/index.d.ts +2 -0
  80. package/dist/_internal/platform/runtime/store/domains/index.d.ts.map +1 -1
  81. package/dist/_internal/platform/runtime/store/domains/index.js +1 -0
  82. package/dist/_internal/platform/runtime/store/selectors/index.d.ts +27 -14
  83. package/dist/_internal/platform/runtime/store/selectors/index.d.ts.map +1 -1
  84. package/dist/_internal/platform/runtime/store/selectors/index.js +35 -25
  85. package/dist/_internal/platform/runtime/store/state.d.ts +3 -4
  86. package/dist/_internal/platform/runtime/store/state.d.ts.map +1 -1
  87. package/dist/_internal/platform/runtime/store/state.js +3 -4
  88. package/dist/_internal/platform/runtime/system-message-policy.d.ts +18 -0
  89. package/dist/_internal/platform/runtime/system-message-policy.d.ts.map +1 -0
  90. package/dist/_internal/platform/runtime/system-message-policy.js +35 -0
  91. package/dist/_internal/platform/utils/clipboard.d.ts +3 -2
  92. package/dist/_internal/platform/utils/clipboard.d.ts.map +1 -1
  93. package/dist/_internal/platform/utils/clipboard.js +0 -17
  94. package/dist/_internal/platform/utils/notify.d.ts.map +1 -1
  95. package/dist/_internal/platform/utils/notify.js +4 -1
  96. package/dist/_internal/platform/utils/terminal-width.d.ts +13 -0
  97. package/dist/_internal/platform/utils/terminal-width.d.ts.map +1 -1
  98. package/dist/_internal/platform/utils/terminal-width.js +13 -0
  99. package/dist/_internal/platform/version.js +1 -1
  100. package/package.json +1 -1
  101. package/dist/_internal/platform/core/history.d.ts +0 -22
  102. package/dist/_internal/platform/core/history.d.ts.map +0 -1
  103. package/dist/_internal/platform/core/history.js +0 -43
  104. package/dist/_internal/platform/types/grid.d.ts +0 -27
  105. package/dist/_internal/platform/types/grid.d.ts.map +0 -1
  106. package/dist/_internal/platform/types/grid.js +0 -26
  107. package/dist/_internal/platform/utils/splash-lines.d.ts +0 -8
  108. package/dist/_internal/platform/utils/splash-lines.d.ts.map +0 -1
  109. package/dist/_internal/platform/utils/splash-lines.js +0 -32
@@ -264,7 +264,7 @@ export async function runAgentTask(context, record) {
264
264
  const toolTokens = toolDefinitions.length > 0
265
265
  ? estimateTokens(JSON.stringify(toolDefinitions))
266
266
  : 0;
267
- conversation = new ConversationManager(() => 80);
267
+ conversation = new ConversationManager();
268
268
  conversation.addUserMessage(record.task);
269
269
  let systemPrompt = buildOrchestratorSystemPrompt(record, undefined, context);
270
270
  let continueLoop = true;
@@ -2,7 +2,7 @@
2
2
  * BookmarkEntry - Metadata for a saved bookmark.
3
3
  */
4
4
  export interface BookmarkEntry {
5
- /** Stable collapse key identifying the block (e.g. 'msg_3_code_1'). */
5
+ /** Stable key identifying the block (e.g. 'msg_3_code_1'). */
6
6
  key: string;
7
7
  /** Human-readable label (block type + short excerpt). */
8
8
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/bookmarks/manager.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,GAAG,EAAE,MAAM,CAAC;IACZ,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,MAAM;IAI3B;;;OAGG;IACI,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAcnD;;OAEG;IACI,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzC;;OAEG;IACI,IAAI,IAAI,aAAa,EAAE;IAI9B;;OAEG;IACI,KAAK,IAAI,IAAI;IAIpB;;;OAGG;IACI,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAgBzD;;OAEG;IACI,cAAc,IAAI,MAAM,EAAE;IAYjC;;OAEG;IACI,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAclD"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/bookmarks/manager.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,GAAG,EAAE,MAAM,CAAC;IACZ,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,MAAM;IAI3B;;;OAGG;IACI,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAcnD;;OAEG;IACI,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzC;;OAEG;IACI,IAAI,IAAI,aAAa,EAAE;IAI9B;;OAEG;IACI,KAAK,IAAI,IAAI;IAIpB;;;OAGG;IACI,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAgBzD;;OAEG;IACI,cAAc,IAAI,MAAM,EAAE;IAYjC;;OAEG;IACI,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAclD"}
@@ -27,7 +27,7 @@ export class SurfaceRegistry {
27
27
  const pluginDescriptors = this.pluginRegistry?.listDescriptors() ?? [];
28
28
  const enabledForSurface = (surface) => {
29
29
  if (surface === 'tui')
30
- return true;
30
+ return this.configManager.getCategory('surfaces').tui?.enabled !== false;
31
31
  if (surface === 'web')
32
32
  return Boolean(this.configManager.get('web.enabled') || this.configManager.get('controlPlane.enabled'));
33
33
  if (surface === 'slack')
@@ -104,8 +104,8 @@ export class SurfaceRegistry {
104
104
  id: 'surface:tui',
105
105
  kind: 'tui',
106
106
  label: 'Terminal UI',
107
- enabled: true,
108
- state: 'healthy',
107
+ enabled: enabledForSurface('tui'),
108
+ state: enabledForSurface('tui') ? 'healthy' : 'disabled',
109
109
  configuredAt,
110
110
  lastSeenAt: configuredAt,
111
111
  capabilities: ['ingress', 'egress', 'session_binding'],
@@ -0,0 +1,29 @@
1
+ /**
2
+ * API key resolution for all supported providers.
3
+ *
4
+ * Platform-level code — no surface/TUI dependencies.
5
+ * Used by every GoodVibes surface (TUI, CLI, web, etc.).
6
+ *
7
+ * Provides:
8
+ * - loadEnvApiKeys() — synchronous env-var scan, returns configured keys
9
+ * - getConfiguredApiKeys() — public alias for loadEnvApiKeys
10
+ * - resolveApiKeys() — three-tier async resolution: env → SecretsManager → skip
11
+ */
12
+ import { SecretsManager } from './secrets.js';
13
+ /**
14
+ * Returns all provider API keys that are currently set in the environment.
15
+ * Pure env-var read — synchronous, no I/O.
16
+ */
17
+ export declare function getConfiguredApiKeys(): Record<string, string>;
18
+ /**
19
+ * resolveApiKeys — three-tier async resolution for all provider API keys.
20
+ *
21
+ * Resolution order per key:
22
+ * 1. Environment variable (process.env)
23
+ * 2. SecretsManager hierarchy-aware stores (secure preferred, plaintext policy-aware)
24
+ * 3. Omitted from result (null → skip)
25
+ *
26
+ * Returns a map of provider → apiKey for all providers where a key is found.
27
+ */
28
+ export declare function resolveApiKeys(secrets: Pick<SecretsManager, 'get'>): Promise<Record<string, string>>;
29
+ //# sourceMappingURL=api-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/config/api-keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE7D;AAwDD;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,GACnC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAkEjC"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * API key resolution for all supported providers.
3
+ *
4
+ * Platform-level code — no surface/TUI dependencies.
5
+ * Used by every GoodVibes surface (TUI, CLI, web, etc.).
6
+ *
7
+ * Provides:
8
+ * - loadEnvApiKeys() — synchronous env-var scan, returns configured keys
9
+ * - getConfiguredApiKeys() — public alias for loadEnvApiKeys
10
+ * - resolveApiKeys() — three-tier async resolution: env → SecretsManager → skip
11
+ */
12
+ import { SecretsManager } from './secrets.js';
13
+ /**
14
+ * Returns all provider API keys that are currently set in the environment.
15
+ * Pure env-var read — synchronous, no I/O.
16
+ */
17
+ export function getConfiguredApiKeys() {
18
+ return loadEnvApiKeys();
19
+ }
20
+ function loadEnvApiKeys() {
21
+ const keys = {};
22
+ const mapping = {
23
+ openai: 'OPENAI_API_KEY',
24
+ anthropic: 'ANTHROPIC_API_KEY',
25
+ gemini: 'GEMINI_API_KEY',
26
+ inceptionlabs: 'INCEPTION_API_KEY',
27
+ openrouter: 'OPENROUTER_API_KEY',
28
+ aihubmix: 'AIHUBMIX_API_KEY',
29
+ groq: 'GROQ_API_KEY',
30
+ cerebras: 'CEREBRAS_API_KEY',
31
+ mistral: 'MISTRAL_API_KEY',
32
+ 'ollama-cloud': 'OLLAMA_CLOUD_API_KEY',
33
+ // Note: also checked as OLLAMA_API_KEY below
34
+ huggingface: 'HF_API_KEY',
35
+ nvidia: 'NVIDIA_API_KEY',
36
+ llm7: 'LLM7_API_KEY',
37
+ deepseek: 'DEEPSEEK_API_KEY',
38
+ fireworks: 'FIREWORKS_API_KEY',
39
+ 'github-copilot': 'COPILOT_GITHUB_TOKEN',
40
+ 'microsoft-foundry': 'AZURE_OPENAI_API_KEY',
41
+ minimax: 'MINIMAX_API_KEY',
42
+ moonshot: 'MOONSHOT_API_KEY',
43
+ qianfan: 'QIANFAN_API_KEY',
44
+ qwen: 'QWEN_API_KEY',
45
+ sglang: 'SGLANG_API_KEY',
46
+ stepfun: 'STEPFUN_API_KEY',
47
+ together: 'TOGETHER_API_KEY',
48
+ venice: 'VENICE_API_KEY',
49
+ volcengine: 'VOLCANO_ENGINE_API_KEY',
50
+ xai: 'XAI_API_KEY',
51
+ xiaomi: 'XIAOMI_API_KEY',
52
+ zai: 'ZAI_API_KEY',
53
+ 'cloudflare-ai-gateway': 'CLOUDFLARE_AI_GATEWAY_API_KEY',
54
+ 'vercel-ai-gateway': 'AI_GATEWAY_API_KEY',
55
+ litellm: 'LITELLM_API_KEY',
56
+ 'copilot-proxy': 'COPILOT_PROXY_API_KEY',
57
+ };
58
+ for (const [prov, envVar] of Object.entries(mapping)) {
59
+ let value = process.env[envVar];
60
+ // Fallback env var names
61
+ if (!value && prov === 'gemini')
62
+ value = process.env['GOOGLE_API_KEY'] ?? process.env['GOOGLE_GEMINI_API_KEY'];
63
+ if (!value && prov === 'openai')
64
+ value = process.env['OPENAI_KEY'];
65
+ if (!value && prov === 'anthropic')
66
+ value = process.env['CLAUDE_API_KEY'];
67
+ if (!value && prov === 'ollama-cloud')
68
+ value = process.env['OLLAMA_API_KEY'];
69
+ if (!value && prov === 'huggingface')
70
+ value = process.env['HUGGINGFACE_API_KEY'] ?? process.env['HF_TOKEN'];
71
+ if (!value && prov === 'github-copilot')
72
+ value = process.env['GH_TOKEN'] ?? process.env['GITHUB_TOKEN'];
73
+ if (!value && prov === 'qwen')
74
+ value = process.env['DASHSCOPE_API_KEY'] ?? process.env['MODELSTUDIO_API_KEY'];
75
+ if (!value && prov === 'zai')
76
+ value = process.env['Z_AI_API_KEY'];
77
+ if (value)
78
+ keys[prov] = value;
79
+ }
80
+ return keys;
81
+ }
82
+ /**
83
+ * resolveApiKeys — three-tier async resolution for all provider API keys.
84
+ *
85
+ * Resolution order per key:
86
+ * 1. Environment variable (process.env)
87
+ * 2. SecretsManager hierarchy-aware stores (secure preferred, plaintext policy-aware)
88
+ * 3. Omitted from result (null → skip)
89
+ *
90
+ * Returns a map of provider → apiKey for all providers where a key is found.
91
+ */
92
+ export async function resolveApiKeys(secrets) {
93
+ const mapping = [
94
+ { prov: 'openai', envVars: ['OPENAI_API_KEY', 'OPENAI_KEY'] },
95
+ { prov: 'anthropic', envVars: ['ANTHROPIC_API_KEY', 'CLAUDE_API_KEY'] },
96
+ { prov: 'gemini', envVars: ['GEMINI_API_KEY', 'GOOGLE_API_KEY', 'GOOGLE_GEMINI_API_KEY'] },
97
+ { prov: 'inceptionlabs', envVars: ['INCEPTION_API_KEY'] },
98
+ { prov: 'openrouter', envVars: ['OPENROUTER_API_KEY'] },
99
+ { prov: 'aihubmix', envVars: ['AIHUBMIX_API_KEY'] },
100
+ { prov: 'groq', envVars: ['GROQ_API_KEY'] },
101
+ { prov: 'cerebras', envVars: ['CEREBRAS_API_KEY'] },
102
+ { prov: 'mistral', envVars: ['MISTRAL_API_KEY'] },
103
+ { prov: 'ollama-cloud', envVars: ['OLLAMA_CLOUD_API_KEY', 'OLLAMA_API_KEY'] },
104
+ { prov: 'huggingface', envVars: ['HF_API_KEY', 'HUGGINGFACE_API_KEY', 'HF_TOKEN'] },
105
+ { prov: 'nvidia', envVars: ['NVIDIA_API_KEY'] },
106
+ { prov: 'llm7', envVars: ['LLM7_API_KEY'] },
107
+ { prov: 'deepseek', envVars: ['DEEPSEEK_API_KEY'] },
108
+ { prov: 'fireworks', envVars: ['FIREWORKS_API_KEY'] },
109
+ { prov: 'github-copilot', envVars: ['COPILOT_GITHUB_TOKEN', 'GH_TOKEN', 'GITHUB_TOKEN'] },
110
+ { prov: 'microsoft-foundry', envVars: ['AZURE_OPENAI_API_KEY'] },
111
+ { prov: 'minimax', envVars: ['MINIMAX_API_KEY'] },
112
+ { prov: 'moonshot', envVars: ['MOONSHOT_API_KEY'] },
113
+ { prov: 'qianfan', envVars: ['QIANFAN_API_KEY'] },
114
+ { prov: 'qwen', envVars: ['QWEN_API_KEY', 'DASHSCOPE_API_KEY', 'MODELSTUDIO_API_KEY'] },
115
+ { prov: 'sglang', envVars: ['SGLANG_API_KEY'] },
116
+ { prov: 'stepfun', envVars: ['STEPFUN_API_KEY'] },
117
+ { prov: 'together', envVars: ['TOGETHER_API_KEY'] },
118
+ { prov: 'venice', envVars: ['VENICE_API_KEY'] },
119
+ { prov: 'volcengine', envVars: ['VOLCANO_ENGINE_API_KEY'] },
120
+ { prov: 'xai', envVars: ['XAI_API_KEY'] },
121
+ { prov: 'xiaomi', envVars: ['XIAOMI_API_KEY'] },
122
+ { prov: 'zai', envVars: ['ZAI_API_KEY', 'Z_AI_API_KEY'] },
123
+ { prov: 'cloudflare-ai-gateway', envVars: ['CLOUDFLARE_AI_GATEWAY_API_KEY'] },
124
+ { prov: 'vercel-ai-gateway', envVars: ['AI_GATEWAY_API_KEY'] },
125
+ { prov: 'litellm', envVars: ['LITELLM_API_KEY'] },
126
+ { prov: 'copilot-proxy', envVars: ['COPILOT_PROXY_API_KEY'] },
127
+ ];
128
+ const result = {};
129
+ for (const { prov, envVars } of mapping) {
130
+ // Tier 1: environment variables
131
+ let value = null;
132
+ for (const envVar of envVars) {
133
+ if (process.env[envVar]) {
134
+ value = process.env[envVar];
135
+ break;
136
+ }
137
+ }
138
+ // Tier 2: SecretsManager hierarchy-aware secure/plaintext stores
139
+ if (value === null) {
140
+ for (const envVar of envVars) {
141
+ const stored = await secrets.get(envVar);
142
+ if (stored !== null) {
143
+ value = stored;
144
+ break;
145
+ }
146
+ }
147
+ }
148
+ if (value !== null) {
149
+ result[prov] = value;
150
+ }
151
+ }
152
+ return result;
153
+ }
@@ -12,7 +12,6 @@ export { DEFAULT_CONFIG, CONFIG_SCHEMA } from '@pellux/goodvibes-sdk/platform/co
12
12
  export { ConfigError } from '@pellux/goodvibes-sdk/platform/types/errors';
13
13
  import { ConfigManager } from './manager.js';
14
14
  import type { GoodVibesConfig } from '@pellux/goodvibes-sdk/platform/config/schema';
15
- import { SecretsManager } from './secrets.js';
16
15
  export declare function getConfigSnapshot(configManager: Pick<ConfigManager, 'getRaw'>): Readonly<GoodVibesConfig>;
17
16
  export declare function getConfiguredModelId(configManager: Pick<ConfigManager, 'get'>): string;
18
17
  export declare function getConfiguredProviderId(configManager: Pick<ConfigManager, 'get'>): string;
@@ -20,16 +19,5 @@ export declare function getConfiguredEmbeddingProviderId(configManager: Pick<Con
20
19
  export declare function isAutoApproveEnabled(configManager: Pick<ConfigManager, 'get'>): boolean;
21
20
  export declare function getWorkingDirectory(configManager: Pick<ConfigManager, 'getWorkingDirectory'>): string | null;
22
21
  export declare function getConfiguredSystemPrompt(configManager: Pick<ConfigManager, 'get'>): string | undefined;
23
- export declare function getConfiguredApiKeys(): Record<string, string>;
24
- /**
25
- * resolveApiKeys — three-tier async resolution for all provider API keys.
26
- *
27
- * Resolution order per key:
28
- * 1. Environment variable (process.env)
29
- * 2. SecretsManager hierarchy-aware stores (secure preferred, plaintext policy-aware)
30
- * 3. Omitted from result (null → skip)
31
- *
32
- * Returns a map of provider → apiKey for all providers where a key is found.
33
- */
34
- export declare function resolveApiKeys(secrets: Pick<SecretsManager, 'get'>): Promise<Record<string, string>>;
22
+ export { getConfiguredApiKeys, resolveApiKeys } from './api-keys.js';
35
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACzM,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAG1E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI9C,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,CAEzG;AAED,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,MAAM,CAEtF;AAED,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,MAAM,CAEzF;AAED,wBAAgB,gCAAgC,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,MAAM,CAElG;AAED,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,OAAO,CAEvF;AAED,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,qBAAqB,CAAC,GAAG,MAAM,GAAG,IAAI,CAE5G;AAED,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,MAAM,GAAG,SAAS,CASvG;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE7D;AAwDD;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,GACnC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAkEjC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACzM,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAG1E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAIpF,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,CAEzG;AAED,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,MAAM,CAEtF;AAED,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,MAAM,CAEzF;AAED,wBAAgB,gCAAgC,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,MAAM,CAElG;AAED,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,OAAO,CAEvF;AAED,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,qBAAqB,CAAC,GAAG,MAAM,GAAG,IAAI,CAE5G;AAED,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,MAAM,GAAG,SAAS,CASvG;AAED,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
@@ -10,7 +10,6 @@ export { DEFAULT_CONFIG, CONFIG_SCHEMA } from '@pellux/goodvibes-sdk/platform/co
10
10
  export { ConfigError } from '@pellux/goodvibes-sdk/platform/types/errors';
11
11
  import { readFileSync } from 'fs';
12
12
  import { ConfigManager } from './manager.js';
13
- import { SecretsManager } from './secrets.js';
14
13
  import { logger } from '@pellux/goodvibes-sdk/platform/utils/logger';
15
14
  import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils/error-display';
16
15
  export function getConfigSnapshot(configManager) {
@@ -43,140 +42,4 @@ export function getConfiguredSystemPrompt(configManager) {
43
42
  return undefined;
44
43
  }
45
44
  }
46
- export function getConfiguredApiKeys() {
47
- return loadEnvApiKeys();
48
- }
49
- function loadEnvApiKeys() {
50
- const keys = {};
51
- const mapping = {
52
- openai: 'OPENAI_API_KEY',
53
- anthropic: 'ANTHROPIC_API_KEY',
54
- gemini: 'GEMINI_API_KEY',
55
- inceptionlabs: 'INCEPTION_API_KEY',
56
- openrouter: 'OPENROUTER_API_KEY',
57
- aihubmix: 'AIHUBMIX_API_KEY',
58
- groq: 'GROQ_API_KEY',
59
- cerebras: 'CEREBRAS_API_KEY',
60
- mistral: 'MISTRAL_API_KEY',
61
- 'ollama-cloud': 'OLLAMA_CLOUD_API_KEY',
62
- // Note: also checked as OLLAMA_API_KEY below
63
- huggingface: 'HF_API_KEY',
64
- nvidia: 'NVIDIA_API_KEY',
65
- llm7: 'LLM7_API_KEY',
66
- deepseek: 'DEEPSEEK_API_KEY',
67
- fireworks: 'FIREWORKS_API_KEY',
68
- 'github-copilot': 'COPILOT_GITHUB_TOKEN',
69
- 'microsoft-foundry': 'AZURE_OPENAI_API_KEY',
70
- minimax: 'MINIMAX_API_KEY',
71
- moonshot: 'MOONSHOT_API_KEY',
72
- qianfan: 'QIANFAN_API_KEY',
73
- qwen: 'QWEN_API_KEY',
74
- sglang: 'SGLANG_API_KEY',
75
- stepfun: 'STEPFUN_API_KEY',
76
- together: 'TOGETHER_API_KEY',
77
- venice: 'VENICE_API_KEY',
78
- volcengine: 'VOLCANO_ENGINE_API_KEY',
79
- xai: 'XAI_API_KEY',
80
- xiaomi: 'XIAOMI_API_KEY',
81
- zai: 'ZAI_API_KEY',
82
- 'cloudflare-ai-gateway': 'CLOUDFLARE_AI_GATEWAY_API_KEY',
83
- 'vercel-ai-gateway': 'AI_GATEWAY_API_KEY',
84
- litellm: 'LITELLM_API_KEY',
85
- 'copilot-proxy': 'COPILOT_PROXY_API_KEY',
86
- };
87
- for (const [prov, envVar] of Object.entries(mapping)) {
88
- let value = process.env[envVar];
89
- // Fallback env var names
90
- if (!value && prov === 'gemini')
91
- value = process.env['GOOGLE_API_KEY'] ?? process.env['GOOGLE_GEMINI_API_KEY'];
92
- if (!value && prov === 'openai')
93
- value = process.env['OPENAI_KEY'];
94
- if (!value && prov === 'anthropic')
95
- value = process.env['CLAUDE_API_KEY'];
96
- if (!value && prov === 'ollama-cloud')
97
- value = process.env['OLLAMA_API_KEY'];
98
- if (!value && prov === 'huggingface')
99
- value = process.env['HUGGINGFACE_API_KEY'] ?? process.env['HF_TOKEN'];
100
- if (!value && prov === 'github-copilot')
101
- value = process.env['GH_TOKEN'] ?? process.env['GITHUB_TOKEN'];
102
- if (!value && prov === 'qwen')
103
- value = process.env['DASHSCOPE_API_KEY'] ?? process.env['MODELSTUDIO_API_KEY'];
104
- if (!value && prov === 'zai')
105
- value = process.env['Z_AI_API_KEY'];
106
- if (value)
107
- keys[prov] = value;
108
- }
109
- return keys;
110
- }
111
- /**
112
- * resolveApiKeys — three-tier async resolution for all provider API keys.
113
- *
114
- * Resolution order per key:
115
- * 1. Environment variable (process.env)
116
- * 2. SecretsManager hierarchy-aware stores (secure preferred, plaintext policy-aware)
117
- * 3. Omitted from result (null → skip)
118
- *
119
- * Returns a map of provider → apiKey for all providers where a key is found.
120
- */
121
- export async function resolveApiKeys(secrets) {
122
- const mapping = [
123
- { prov: 'openai', envVars: ['OPENAI_API_KEY', 'OPENAI_KEY'] },
124
- { prov: 'anthropic', envVars: ['ANTHROPIC_API_KEY', 'CLAUDE_API_KEY'] },
125
- { prov: 'gemini', envVars: ['GEMINI_API_KEY', 'GOOGLE_API_KEY', 'GOOGLE_GEMINI_API_KEY'] },
126
- { prov: 'inceptionlabs', envVars: ['INCEPTION_API_KEY'] },
127
- { prov: 'openrouter', envVars: ['OPENROUTER_API_KEY'] },
128
- { prov: 'aihubmix', envVars: ['AIHUBMIX_API_KEY'] },
129
- { prov: 'groq', envVars: ['GROQ_API_KEY'] },
130
- { prov: 'cerebras', envVars: ['CEREBRAS_API_KEY'] },
131
- { prov: 'mistral', envVars: ['MISTRAL_API_KEY'] },
132
- { prov: 'ollama-cloud', envVars: ['OLLAMA_CLOUD_API_KEY', 'OLLAMA_API_KEY'] },
133
- { prov: 'huggingface', envVars: ['HF_API_KEY', 'HUGGINGFACE_API_KEY', 'HF_TOKEN'] },
134
- { prov: 'nvidia', envVars: ['NVIDIA_API_KEY'] },
135
- { prov: 'llm7', envVars: ['LLM7_API_KEY'] },
136
- { prov: 'deepseek', envVars: ['DEEPSEEK_API_KEY'] },
137
- { prov: 'fireworks', envVars: ['FIREWORKS_API_KEY'] },
138
- { prov: 'github-copilot', envVars: ['COPILOT_GITHUB_TOKEN', 'GH_TOKEN', 'GITHUB_TOKEN'] },
139
- { prov: 'microsoft-foundry', envVars: ['AZURE_OPENAI_API_KEY'] },
140
- { prov: 'minimax', envVars: ['MINIMAX_API_KEY'] },
141
- { prov: 'moonshot', envVars: ['MOONSHOT_API_KEY'] },
142
- { prov: 'qianfan', envVars: ['QIANFAN_API_KEY'] },
143
- { prov: 'qwen', envVars: ['QWEN_API_KEY', 'DASHSCOPE_API_KEY', 'MODELSTUDIO_API_KEY'] },
144
- { prov: 'sglang', envVars: ['SGLANG_API_KEY'] },
145
- { prov: 'stepfun', envVars: ['STEPFUN_API_KEY'] },
146
- { prov: 'together', envVars: ['TOGETHER_API_KEY'] },
147
- { prov: 'venice', envVars: ['VENICE_API_KEY'] },
148
- { prov: 'volcengine', envVars: ['VOLCANO_ENGINE_API_KEY'] },
149
- { prov: 'xai', envVars: ['XAI_API_KEY'] },
150
- { prov: 'xiaomi', envVars: ['XIAOMI_API_KEY'] },
151
- { prov: 'zai', envVars: ['ZAI_API_KEY', 'Z_AI_API_KEY'] },
152
- { prov: 'cloudflare-ai-gateway', envVars: ['CLOUDFLARE_AI_GATEWAY_API_KEY'] },
153
- { prov: 'vercel-ai-gateway', envVars: ['AI_GATEWAY_API_KEY'] },
154
- { prov: 'litellm', envVars: ['LITELLM_API_KEY'] },
155
- { prov: 'copilot-proxy', envVars: ['COPILOT_PROXY_API_KEY'] },
156
- ];
157
- const result = {};
158
- for (const { prov, envVars } of mapping) {
159
- // Tier 1: environment variables
160
- let value = null;
161
- for (const envVar of envVars) {
162
- if (process.env[envVar]) {
163
- value = process.env[envVar];
164
- break;
165
- }
166
- }
167
- // Tier 2: SecretsManager hierarchy-aware secure/plaintext stores
168
- if (value === null) {
169
- for (const envVar of envVars) {
170
- const stored = await secrets.get(envVar);
171
- if (stored !== null) {
172
- value = stored;
173
- break;
174
- }
175
- }
176
- }
177
- if (value !== null) {
178
- result[prov] = value;
179
- }
180
- }
181
- return result;
182
- }
45
+ export { getConfiguredApiKeys, resolveApiKeys } from './api-keys.js';
@@ -83,6 +83,7 @@ export declare const coreConfigDefaults: {
83
83
  httpListener: boolean;
84
84
  };
85
85
  tools: {
86
+ llmEnabled: boolean;
86
87
  llmProvider: string;
87
88
  llmModel: string;
88
89
  autoHeal: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"schema-domain-core.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/config/schema-domain-core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmH9B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,uBAAuB,EAmX3D,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,uBAAuB,EAyH3D,CAAC"}
1
+ {"version":3,"file":"schema-domain-core.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/config/schema-domain-core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoH9B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,uBAAuB,EAmX3D,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,uBAAuB,EA+H3D,CAAC"}
@@ -82,6 +82,7 @@ export const coreConfigDefaults = {
82
82
  httpListener: false,
83
83
  },
84
84
  tools: {
85
+ llmEnabled: false,
85
86
  llmProvider: '',
86
87
  llmModel: '',
87
88
  autoHeal: false,
@@ -499,6 +500,12 @@ export const coreTailConfigSettings = [
499
500
  default: false,
500
501
  description: 'Enable HTTP webhook listener for receiving external events',
501
502
  },
503
+ {
504
+ key: 'tools.llmEnabled',
505
+ type: 'boolean',
506
+ default: false,
507
+ description: 'Enable dedicated tool LLM for internal operations (off = tools use the main conversation model only when needed)',
508
+ },
502
509
  {
503
510
  key: 'tools.llmProvider',
504
511
  type: 'string',
@@ -294,6 +294,7 @@ export interface GoodVibesConfig {
294
294
  httpListener: boolean;
295
295
  };
296
296
  tools: {
297
+ llmEnabled: boolean;
297
298
  llmProvider: string;
298
299
  llmModel: string;
299
300
  autoHeal: boolean;
@@ -334,7 +335,7 @@ export interface ConfigSetting {
334
335
  validate?: (value: unknown) => boolean;
335
336
  }
336
337
  /** Dot-path config keys for all settings. */
337
- export type ConfigKey = 'display.stream' | 'display.lineNumbers' | 'display.collapseThreshold' | 'display.theme' | 'display.showThinking' | 'display.showReasoningSummary' | 'display.showTokenSpeed' | 'display.showToolPreview' | 'provider.reasoningEffort' | 'provider.model' | 'provider.provider' | 'provider.embeddingProvider' | 'provider.systemPromptFile' | 'behavior.autoApprove' | 'behavior.autoCompactThreshold' | 'behavior.staleContextWarnings' | 'behavior.saveHistory' | 'behavior.notifyOnComplete' | 'behavior.suggestAlternativeOnProviderFail' | 'behavior.hitlMode' | 'behavior.returnContextMode' | 'behavior.guidanceMode' | 'storage.secretPolicy' | 'permissions.mode' | 'permissions.tools.read' | 'permissions.tools.write' | 'permissions.tools.edit' | 'permissions.tools.exec' | 'permissions.tools.find' | 'permissions.tools.fetch' | 'permissions.tools.analyze' | 'permissions.tools.inspect' | 'permissions.tools.agent' | 'permissions.tools.state' | 'permissions.tools.workflow' | 'permissions.tools.registry' | 'permissions.tools.delegate' | 'permissions.tools.mcp' | 'orchestration.recursionEnabled' | 'orchestration.maxActiveAgents' | 'orchestration.maxDepth' | 'sandbox.replIsolation' | 'sandbox.mcpIsolation' | 'sandbox.windowsMode' | 'sandbox.vmBackend' | 'sandbox.qemuBinary' | 'sandbox.qemuImagePath' | 'sandbox.qemuExecWrapper' | 'sandbox.qemuGuestHost' | 'sandbox.qemuGuestPort' | 'sandbox.qemuGuestUser' | 'sandbox.qemuWorkspacePath' | 'sandbox.qemuSessionMode' | 'ui.voiceEnabled' | 'ui.systemMessages' | 'ui.operationalMessages' | 'ui.wrfcMessages' | 'release.channel' | 'danger.daemon' | 'danger.httpListener' | 'tools.llmProvider' | 'tools.llmModel' | 'tools.autoHeal' | 'tools.defaultTokenBudget' | 'tools.hooksFile' | 'wrfc.scoreThreshold' | 'wrfc.maxFixAttempts' | 'wrfc.autoCommit' | 'cache.enabled' | 'cache.stableTtl' | 'cache.monitorHitRate' | 'cache.hitRateWarningThreshold' | 'helper.enabled' | 'helper.globalProvider' | 'helper.globalModel' | 'automation.enabled' | 'automation.maxConcurrentRuns' | 'automation.runHistoryLimit' | 'automation.defaultTimeoutMs' | 'automation.catchUpWindowMinutes' | 'automation.failureCooldownMs' | 'automation.deleteAfterRun' | 'controlPlane.enabled' | 'controlPlane.host' | 'controlPlane.port' | 'controlPlane.baseUrl' | 'controlPlane.streamMode' | 'controlPlane.allowRemote' | 'controlPlane.trustProxy' | 'controlPlane.tls.mode' | 'controlPlane.tls.certFile' | 'controlPlane.tls.keyFile' | 'httpListener.host' | 'httpListener.port' | 'httpListener.trustProxy' | 'httpListener.tls.mode' | 'httpListener.tls.certFile' | 'httpListener.tls.keyFile' | 'web.enabled' | 'web.host' | 'web.port' | 'web.publicBaseUrl' | 'web.staticAssetsDir' | 'surfaces.slack.enabled' | 'surfaces.slack.signingSecret' | 'surfaces.slack.botToken' | 'surfaces.slack.appToken' | 'surfaces.slack.defaultChannel' | 'surfaces.slack.workspaceId' | 'surfaces.discord.enabled' | 'surfaces.discord.publicKey' | 'surfaces.discord.botToken' | 'surfaces.discord.applicationId' | 'surfaces.discord.defaultChannelId' | 'surfaces.discord.guildId' | 'surfaces.ntfy.enabled' | 'surfaces.ntfy.baseUrl' | 'surfaces.ntfy.topic' | 'surfaces.ntfy.token' | 'surfaces.ntfy.defaultPriority' | 'surfaces.webhook.enabled' | 'surfaces.webhook.defaultTarget' | 'surfaces.webhook.timeoutMs' | 'surfaces.webhook.secret' | 'surfaces.telegram.enabled' | 'surfaces.telegram.botToken' | 'surfaces.telegram.webhookSecret' | 'surfaces.telegram.defaultChatId' | 'surfaces.telegram.botUsername' | 'surfaces.telegram.mode' | 'surfaces.googleChat.enabled' | 'surfaces.googleChat.webhookUrl' | 'surfaces.googleChat.verificationToken' | 'surfaces.googleChat.appId' | 'surfaces.googleChat.spaceId' | 'surfaces.signal.enabled' | 'surfaces.signal.bridgeUrl' | 'surfaces.signal.account' | 'surfaces.signal.token' | 'surfaces.signal.defaultRecipient' | 'surfaces.whatsapp.enabled' | 'surfaces.whatsapp.provider' | 'surfaces.whatsapp.accessToken' | 'surfaces.whatsapp.verifyToken' | 'surfaces.whatsapp.signingSecret' | 'surfaces.whatsapp.phoneNumberId' | 'surfaces.whatsapp.businessAccountId' | 'surfaces.whatsapp.defaultRecipient' | 'surfaces.imessage.enabled' | 'surfaces.imessage.bridgeUrl' | 'surfaces.imessage.account' | 'surfaces.imessage.token' | 'surfaces.imessage.defaultChatId' | 'surfaces.msteams.enabled' | 'surfaces.msteams.appId' | 'surfaces.msteams.appPassword' | 'surfaces.msteams.tenantId' | 'surfaces.msteams.serviceUrl' | 'surfaces.msteams.botId' | 'surfaces.msteams.defaultConversationId' | 'surfaces.msteams.defaultChannelId' | 'surfaces.bluebubbles.enabled' | 'surfaces.bluebubbles.serverUrl' | 'surfaces.bluebubbles.password' | 'surfaces.bluebubbles.account' | 'surfaces.bluebubbles.defaultChatGuid' | 'surfaces.mattermost.enabled' | 'surfaces.mattermost.baseUrl' | 'surfaces.mattermost.botToken' | 'surfaces.mattermost.teamId' | 'surfaces.mattermost.defaultChannelId' | 'surfaces.matrix.enabled' | 'surfaces.matrix.homeserverUrl' | 'surfaces.matrix.accessToken' | 'surfaces.matrix.userId' | 'surfaces.matrix.defaultRoomId' | 'watchers.enabled' | 'watchers.pollIntervalMs' | 'watchers.heartbeatIntervalMs' | 'watchers.recoveryWindowMinutes' | 'service.enabled' | 'service.autostart' | 'service.restartOnFailure' | 'service.platform' | 'service.serviceName' | 'service.logPath' | 'network.outboundTls.mode' | 'network.outboundTls.customCaFile' | 'network.outboundTls.customCaDir' | 'network.outboundTls.allowInsecureLocalhost' | 'network.remoteFetch.allowPrivateHosts';
338
+ export type ConfigKey = 'display.stream' | 'display.lineNumbers' | 'display.collapseThreshold' | 'display.theme' | 'display.showThinking' | 'display.showReasoningSummary' | 'display.showTokenSpeed' | 'display.showToolPreview' | 'provider.reasoningEffort' | 'provider.model' | 'provider.provider' | 'provider.embeddingProvider' | 'provider.systemPromptFile' | 'behavior.autoApprove' | 'behavior.autoCompactThreshold' | 'behavior.staleContextWarnings' | 'behavior.saveHistory' | 'behavior.notifyOnComplete' | 'behavior.suggestAlternativeOnProviderFail' | 'behavior.hitlMode' | 'behavior.returnContextMode' | 'behavior.guidanceMode' | 'storage.secretPolicy' | 'permissions.mode' | 'permissions.tools.read' | 'permissions.tools.write' | 'permissions.tools.edit' | 'permissions.tools.exec' | 'permissions.tools.find' | 'permissions.tools.fetch' | 'permissions.tools.analyze' | 'permissions.tools.inspect' | 'permissions.tools.agent' | 'permissions.tools.state' | 'permissions.tools.workflow' | 'permissions.tools.registry' | 'permissions.tools.delegate' | 'permissions.tools.mcp' | 'orchestration.recursionEnabled' | 'orchestration.maxActiveAgents' | 'orchestration.maxDepth' | 'sandbox.replIsolation' | 'sandbox.mcpIsolation' | 'sandbox.windowsMode' | 'sandbox.vmBackend' | 'sandbox.qemuBinary' | 'sandbox.qemuImagePath' | 'sandbox.qemuExecWrapper' | 'sandbox.qemuGuestHost' | 'sandbox.qemuGuestPort' | 'sandbox.qemuGuestUser' | 'sandbox.qemuWorkspacePath' | 'sandbox.qemuSessionMode' | 'ui.voiceEnabled' | 'ui.systemMessages' | 'ui.operationalMessages' | 'ui.wrfcMessages' | 'release.channel' | 'danger.daemon' | 'danger.httpListener' | 'tools.llmEnabled' | 'tools.llmProvider' | 'tools.llmModel' | 'tools.autoHeal' | 'tools.defaultTokenBudget' | 'tools.hooksFile' | 'wrfc.scoreThreshold' | 'wrfc.maxFixAttempts' | 'wrfc.autoCommit' | 'cache.enabled' | 'cache.stableTtl' | 'cache.monitorHitRate' | 'cache.hitRateWarningThreshold' | 'helper.enabled' | 'helper.globalProvider' | 'helper.globalModel' | 'automation.enabled' | 'automation.maxConcurrentRuns' | 'automation.runHistoryLimit' | 'automation.defaultTimeoutMs' | 'automation.catchUpWindowMinutes' | 'automation.failureCooldownMs' | 'automation.deleteAfterRun' | 'controlPlane.enabled' | 'controlPlane.host' | 'controlPlane.port' | 'controlPlane.baseUrl' | 'controlPlane.streamMode' | 'controlPlane.allowRemote' | 'controlPlane.trustProxy' | 'controlPlane.tls.mode' | 'controlPlane.tls.certFile' | 'controlPlane.tls.keyFile' | 'httpListener.host' | 'httpListener.port' | 'httpListener.trustProxy' | 'httpListener.tls.mode' | 'httpListener.tls.certFile' | 'httpListener.tls.keyFile' | 'web.enabled' | 'web.host' | 'web.port' | 'web.publicBaseUrl' | 'web.staticAssetsDir' | 'surfaces.slack.enabled' | 'surfaces.slack.signingSecret' | 'surfaces.slack.botToken' | 'surfaces.slack.appToken' | 'surfaces.slack.defaultChannel' | 'surfaces.slack.workspaceId' | 'surfaces.discord.enabled' | 'surfaces.discord.publicKey' | 'surfaces.discord.botToken' | 'surfaces.discord.applicationId' | 'surfaces.discord.defaultChannelId' | 'surfaces.discord.guildId' | 'surfaces.ntfy.enabled' | 'surfaces.ntfy.baseUrl' | 'surfaces.ntfy.topic' | 'surfaces.ntfy.token' | 'surfaces.ntfy.defaultPriority' | 'surfaces.webhook.enabled' | 'surfaces.webhook.defaultTarget' | 'surfaces.webhook.timeoutMs' | 'surfaces.webhook.secret' | 'surfaces.telegram.enabled' | 'surfaces.telegram.botToken' | 'surfaces.telegram.webhookSecret' | 'surfaces.telegram.defaultChatId' | 'surfaces.telegram.botUsername' | 'surfaces.telegram.mode' | 'surfaces.googleChat.enabled' | 'surfaces.googleChat.webhookUrl' | 'surfaces.googleChat.verificationToken' | 'surfaces.googleChat.appId' | 'surfaces.googleChat.spaceId' | 'surfaces.signal.enabled' | 'surfaces.signal.bridgeUrl' | 'surfaces.signal.account' | 'surfaces.signal.token' | 'surfaces.signal.defaultRecipient' | 'surfaces.whatsapp.enabled' | 'surfaces.whatsapp.provider' | 'surfaces.whatsapp.accessToken' | 'surfaces.whatsapp.verifyToken' | 'surfaces.whatsapp.signingSecret' | 'surfaces.whatsapp.phoneNumberId' | 'surfaces.whatsapp.businessAccountId' | 'surfaces.whatsapp.defaultRecipient' | 'surfaces.imessage.enabled' | 'surfaces.imessage.bridgeUrl' | 'surfaces.imessage.account' | 'surfaces.imessage.token' | 'surfaces.imessage.defaultChatId' | 'surfaces.msteams.enabled' | 'surfaces.msteams.appId' | 'surfaces.msteams.appPassword' | 'surfaces.msteams.tenantId' | 'surfaces.msteams.serviceUrl' | 'surfaces.msteams.botId' | 'surfaces.msteams.defaultConversationId' | 'surfaces.msteams.defaultChannelId' | 'surfaces.bluebubbles.enabled' | 'surfaces.bluebubbles.serverUrl' | 'surfaces.bluebubbles.password' | 'surfaces.bluebubbles.account' | 'surfaces.bluebubbles.defaultChatGuid' | 'surfaces.mattermost.enabled' | 'surfaces.mattermost.baseUrl' | 'surfaces.mattermost.botToken' | 'surfaces.mattermost.teamId' | 'surfaces.mattermost.defaultChannelId' | 'surfaces.matrix.enabled' | 'surfaces.matrix.homeserverUrl' | 'surfaces.matrix.accessToken' | 'surfaces.matrix.userId' | 'surfaces.matrix.defaultRoomId' | 'watchers.enabled' | 'watchers.pollIntervalMs' | 'watchers.heartbeatIntervalMs' | 'watchers.recoveryWindowMinutes' | 'service.enabled' | 'service.autostart' | 'service.restartOnFailure' | 'service.platform' | 'service.serviceName' | 'service.logPath' | 'network.outboundTls.mode' | 'network.outboundTls.customCaFile' | 'network.outboundTls.customCaDir' | 'network.outboundTls.allowInsecureLocalhost' | 'network.remoteFetch.allowPrivateHosts';
338
339
  /** Maps a ConfigKey to its value type. */
339
- export type ConfigValue<K extends ConfigKey> = K extends 'display.stream' ? boolean : K extends 'display.lineNumbers' ? LineNumberMode : K extends 'display.collapseThreshold' ? number : K extends 'display.theme' ? string : K extends 'display.showThinking' ? boolean : K extends 'display.showReasoningSummary' ? boolean : K extends 'display.showTokenSpeed' ? boolean : K extends 'display.showToolPreview' ? boolean : K extends 'provider.reasoningEffort' ? 'instant' | 'low' | 'medium' | 'high' : K extends 'provider.model' ? string : K extends 'provider.provider' ? string : K extends 'provider.embeddingProvider' ? string : K extends 'provider.systemPromptFile' ? string : K extends 'behavior.autoApprove' ? boolean : K extends 'behavior.autoCompactThreshold' ? number : K extends 'behavior.staleContextWarnings' ? boolean : K extends 'behavior.saveHistory' ? boolean : K extends 'behavior.notifyOnComplete' ? boolean : K extends 'behavior.suggestAlternativeOnProviderFail' ? boolean : K extends 'behavior.hitlMode' ? 'quiet' | 'balanced' | 'operator' : K extends 'behavior.returnContextMode' ? 'off' | 'local' | 'assisted' : K extends 'behavior.guidanceMode' ? 'off' | 'minimal' | 'guided' : K extends 'storage.secretPolicy' ? 'plaintext_allowed' | 'preferred_secure' | 'require_secure' : K extends 'permissions.mode' ? PermissionMode : K extends 'permissions.tools.read' ? PermissionAction : K extends 'permissions.tools.write' ? PermissionAction : K extends 'permissions.tools.edit' ? PermissionAction : K extends 'permissions.tools.exec' ? PermissionAction : K extends 'permissions.tools.find' ? PermissionAction : K extends 'permissions.tools.fetch' ? PermissionAction : K extends 'permissions.tools.analyze' ? PermissionAction : K extends 'permissions.tools.inspect' ? PermissionAction : K extends 'permissions.tools.agent' ? PermissionAction : K extends 'permissions.tools.state' ? PermissionAction : K extends 'permissions.tools.workflow' ? PermissionAction : K extends 'permissions.tools.registry' ? PermissionAction : K extends 'permissions.tools.delegate' ? PermissionAction : K extends 'permissions.tools.mcp' ? PermissionAction : K extends 'orchestration.recursionEnabled' ? boolean : K extends 'orchestration.maxActiveAgents' ? number : K extends 'orchestration.maxDepth' ? number : K extends 'sandbox.replIsolation' ? 'shared-vm' | 'per-runtime-vm' : K extends 'sandbox.mcpIsolation' ? 'disabled' | 'shared-vm' | 'hybrid' | 'per-server-vm' : K extends 'sandbox.windowsMode' ? 'native-basic' | 'require-wsl' : K extends 'sandbox.vmBackend' ? 'local' | 'qemu' : K extends 'sandbox.qemuBinary' ? string : K extends 'sandbox.qemuImagePath' ? string : K extends 'sandbox.qemuExecWrapper' ? string : K extends 'sandbox.qemuGuestHost' ? string : K extends 'sandbox.qemuGuestPort' ? number : K extends 'sandbox.qemuGuestUser' ? string : K extends 'sandbox.qemuWorkspacePath' ? string : K extends 'sandbox.qemuSessionMode' ? 'attach' | 'launch-per-command' : K extends 'ui.voiceEnabled' ? boolean : K extends 'ui.systemMessages' ? 'panel' | 'conversation' | 'both' : K extends 'ui.operationalMessages' ? 'panel' | 'conversation' | 'both' : K extends 'ui.wrfcMessages' ? 'panel' | 'conversation' | 'both' : K extends 'release.channel' ? 'stable' | 'preview' : K extends 'danger.daemon' ? boolean : K extends 'danger.httpListener' ? boolean : K extends 'tools.llmProvider' ? string : K extends 'tools.llmModel' ? string : K extends 'tools.autoHeal' ? boolean : K extends 'tools.defaultTokenBudget' ? number : K extends 'tools.hooksFile' ? string : K extends 'wrfc.scoreThreshold' ? number : K extends 'wrfc.maxFixAttempts' ? number : K extends 'wrfc.autoCommit' ? boolean : K extends 'cache.enabled' ? boolean : K extends 'cache.stableTtl' ? '5m' | '1h' : K extends 'cache.monitorHitRate' ? boolean : K extends 'cache.hitRateWarningThreshold' ? number : K extends 'helper.enabled' ? boolean : K extends 'helper.globalProvider' ? string : K extends 'helper.globalModel' ? string : K extends 'automation.enabled' ? boolean : K extends 'automation.maxConcurrentRuns' ? number : K extends 'automation.runHistoryLimit' ? number : K extends 'automation.defaultTimeoutMs' ? number : K extends 'automation.catchUpWindowMinutes' ? number : K extends 'automation.failureCooldownMs' ? number : K extends 'automation.deleteAfterRun' ? boolean : K extends 'controlPlane.enabled' ? boolean : K extends 'controlPlane.host' ? string : K extends 'controlPlane.port' ? number : K extends 'controlPlane.baseUrl' ? string : K extends 'controlPlane.streamMode' ? 'sse' | 'websocket' | 'both' : K extends 'controlPlane.allowRemote' ? boolean : K extends 'controlPlane.trustProxy' ? boolean : K extends 'controlPlane.tls.mode' ? 'off' | 'proxy' | 'direct' : K extends 'controlPlane.tls.certFile' ? string : K extends 'controlPlane.tls.keyFile' ? string : K extends 'httpListener.host' ? string : K extends 'httpListener.port' ? number : K extends 'httpListener.trustProxy' ? boolean : K extends 'httpListener.tls.mode' ? 'off' | 'proxy' | 'direct' : K extends 'httpListener.tls.certFile' ? string : K extends 'httpListener.tls.keyFile' ? string : K extends 'web.enabled' ? boolean : K extends 'web.host' ? string : K extends 'web.port' ? number : K extends 'web.publicBaseUrl' ? string : K extends 'web.staticAssetsDir' ? string : K extends 'surfaces.slack.enabled' ? boolean : K extends 'surfaces.slack.signingSecret' ? string : K extends 'surfaces.slack.botToken' ? string : K extends 'surfaces.slack.appToken' ? string : K extends 'surfaces.slack.defaultChannel' ? string : K extends 'surfaces.slack.workspaceId' ? string : K extends 'surfaces.discord.enabled' ? boolean : K extends 'surfaces.discord.publicKey' ? string : K extends 'surfaces.discord.botToken' ? string : K extends 'surfaces.discord.applicationId' ? string : K extends 'surfaces.discord.defaultChannelId' ? string : K extends 'surfaces.discord.guildId' ? string : K extends 'surfaces.ntfy.enabled' ? boolean : K extends 'surfaces.ntfy.baseUrl' ? string : K extends 'surfaces.ntfy.topic' ? string : K extends 'surfaces.ntfy.token' ? string : K extends 'surfaces.ntfy.defaultPriority' ? number : K extends 'surfaces.webhook.enabled' ? boolean : K extends 'surfaces.webhook.defaultTarget' ? string : K extends 'surfaces.webhook.timeoutMs' ? number : K extends 'surfaces.webhook.secret' ? string : K extends 'surfaces.telegram.enabled' ? boolean : K extends 'surfaces.telegram.botToken' ? string : K extends 'surfaces.telegram.webhookSecret' ? string : K extends 'surfaces.telegram.defaultChatId' ? string : K extends 'surfaces.telegram.botUsername' ? string : K extends 'surfaces.telegram.mode' ? 'webhook' | 'polling' : K extends 'surfaces.googleChat.enabled' ? boolean : K extends 'surfaces.googleChat.webhookUrl' ? string : K extends 'surfaces.googleChat.verificationToken' ? string : K extends 'surfaces.googleChat.appId' ? string : K extends 'surfaces.googleChat.spaceId' ? string : K extends 'surfaces.signal.enabled' ? boolean : K extends 'surfaces.signal.bridgeUrl' ? string : K extends 'surfaces.signal.account' ? string : K extends 'surfaces.signal.token' ? string : K extends 'surfaces.signal.defaultRecipient' ? string : K extends 'surfaces.whatsapp.enabled' ? boolean : K extends 'surfaces.whatsapp.provider' ? 'meta-cloud' | 'bridge' : K extends 'surfaces.whatsapp.accessToken' ? string : K extends 'surfaces.whatsapp.verifyToken' ? string : K extends 'surfaces.whatsapp.signingSecret' ? string : K extends 'surfaces.whatsapp.phoneNumberId' ? string : K extends 'surfaces.whatsapp.businessAccountId' ? string : K extends 'surfaces.whatsapp.defaultRecipient' ? string : K extends 'surfaces.imessage.enabled' ? boolean : K extends 'surfaces.imessage.bridgeUrl' ? string : K extends 'surfaces.imessage.account' ? string : K extends 'surfaces.imessage.token' ? string : K extends 'surfaces.imessage.defaultChatId' ? string : K extends 'surfaces.msteams.enabled' ? boolean : K extends 'surfaces.msteams.appId' ? string : K extends 'surfaces.msteams.appPassword' ? string : K extends 'surfaces.msteams.tenantId' ? string : K extends 'surfaces.msteams.serviceUrl' ? string : K extends 'surfaces.msteams.botId' ? string : K extends 'surfaces.msteams.defaultConversationId' ? string : K extends 'surfaces.msteams.defaultChannelId' ? string : K extends 'surfaces.bluebubbles.enabled' ? boolean : K extends 'surfaces.bluebubbles.serverUrl' ? string : K extends 'surfaces.bluebubbles.password' ? string : K extends 'surfaces.bluebubbles.account' ? string : K extends 'surfaces.bluebubbles.defaultChatGuid' ? string : K extends 'surfaces.mattermost.enabled' ? boolean : K extends 'surfaces.mattermost.baseUrl' ? string : K extends 'surfaces.mattermost.botToken' ? string : K extends 'surfaces.mattermost.teamId' ? string : K extends 'surfaces.mattermost.defaultChannelId' ? string : K extends 'surfaces.matrix.enabled' ? boolean : K extends 'surfaces.matrix.homeserverUrl' ? string : K extends 'surfaces.matrix.accessToken' ? string : K extends 'surfaces.matrix.userId' ? string : K extends 'surfaces.matrix.defaultRoomId' ? string : K extends 'watchers.enabled' ? boolean : K extends 'watchers.pollIntervalMs' ? number : K extends 'watchers.heartbeatIntervalMs' ? number : K extends 'watchers.recoveryWindowMinutes' ? number : K extends 'service.enabled' ? boolean : K extends 'service.autostart' ? boolean : K extends 'service.restartOnFailure' ? boolean : K extends 'service.platform' ? 'auto' | 'systemd' | 'launchd' | 'windows' | 'manual' : K extends 'service.serviceName' ? string : K extends 'service.logPath' ? string : K extends 'network.outboundTls.mode' ? 'bundled' | 'bundled+custom' | 'custom' : K extends 'network.outboundTls.customCaFile' ? string : K extends 'network.outboundTls.customCaDir' ? string : K extends 'network.outboundTls.allowInsecureLocalhost' ? boolean : K extends 'network.remoteFetch.allowPrivateHosts' ? boolean : never;
340
+ export type ConfigValue<K extends ConfigKey> = K extends 'display.stream' ? boolean : K extends 'display.lineNumbers' ? LineNumberMode : K extends 'display.collapseThreshold' ? number : K extends 'display.theme' ? string : K extends 'display.showThinking' ? boolean : K extends 'display.showReasoningSummary' ? boolean : K extends 'display.showTokenSpeed' ? boolean : K extends 'display.showToolPreview' ? boolean : K extends 'provider.reasoningEffort' ? 'instant' | 'low' | 'medium' | 'high' : K extends 'provider.model' ? string : K extends 'provider.provider' ? string : K extends 'provider.embeddingProvider' ? string : K extends 'provider.systemPromptFile' ? string : K extends 'behavior.autoApprove' ? boolean : K extends 'behavior.autoCompactThreshold' ? number : K extends 'behavior.staleContextWarnings' ? boolean : K extends 'behavior.saveHistory' ? boolean : K extends 'behavior.notifyOnComplete' ? boolean : K extends 'behavior.suggestAlternativeOnProviderFail' ? boolean : K extends 'behavior.hitlMode' ? 'quiet' | 'balanced' | 'operator' : K extends 'behavior.returnContextMode' ? 'off' | 'local' | 'assisted' : K extends 'behavior.guidanceMode' ? 'off' | 'minimal' | 'guided' : K extends 'storage.secretPolicy' ? 'plaintext_allowed' | 'preferred_secure' | 'require_secure' : K extends 'permissions.mode' ? PermissionMode : K extends 'permissions.tools.read' ? PermissionAction : K extends 'permissions.tools.write' ? PermissionAction : K extends 'permissions.tools.edit' ? PermissionAction : K extends 'permissions.tools.exec' ? PermissionAction : K extends 'permissions.tools.find' ? PermissionAction : K extends 'permissions.tools.fetch' ? PermissionAction : K extends 'permissions.tools.analyze' ? PermissionAction : K extends 'permissions.tools.inspect' ? PermissionAction : K extends 'permissions.tools.agent' ? PermissionAction : K extends 'permissions.tools.state' ? PermissionAction : K extends 'permissions.tools.workflow' ? PermissionAction : K extends 'permissions.tools.registry' ? PermissionAction : K extends 'permissions.tools.delegate' ? PermissionAction : K extends 'permissions.tools.mcp' ? PermissionAction : K extends 'orchestration.recursionEnabled' ? boolean : K extends 'orchestration.maxActiveAgents' ? number : K extends 'orchestration.maxDepth' ? number : K extends 'sandbox.replIsolation' ? 'shared-vm' | 'per-runtime-vm' : K extends 'sandbox.mcpIsolation' ? 'disabled' | 'shared-vm' | 'hybrid' | 'per-server-vm' : K extends 'sandbox.windowsMode' ? 'native-basic' | 'require-wsl' : K extends 'sandbox.vmBackend' ? 'local' | 'qemu' : K extends 'sandbox.qemuBinary' ? string : K extends 'sandbox.qemuImagePath' ? string : K extends 'sandbox.qemuExecWrapper' ? string : K extends 'sandbox.qemuGuestHost' ? string : K extends 'sandbox.qemuGuestPort' ? number : K extends 'sandbox.qemuGuestUser' ? string : K extends 'sandbox.qemuWorkspacePath' ? string : K extends 'sandbox.qemuSessionMode' ? 'attach' | 'launch-per-command' : K extends 'ui.voiceEnabled' ? boolean : K extends 'ui.systemMessages' ? 'panel' | 'conversation' | 'both' : K extends 'ui.operationalMessages' ? 'panel' | 'conversation' | 'both' : K extends 'ui.wrfcMessages' ? 'panel' | 'conversation' | 'both' : K extends 'release.channel' ? 'stable' | 'preview' : K extends 'danger.daemon' ? boolean : K extends 'danger.httpListener' ? boolean : K extends 'tools.llmEnabled' ? boolean : K extends 'tools.llmProvider' ? string : K extends 'tools.llmModel' ? string : K extends 'tools.autoHeal' ? boolean : K extends 'tools.defaultTokenBudget' ? number : K extends 'tools.hooksFile' ? string : K extends 'wrfc.scoreThreshold' ? number : K extends 'wrfc.maxFixAttempts' ? number : K extends 'wrfc.autoCommit' ? boolean : K extends 'cache.enabled' ? boolean : K extends 'cache.stableTtl' ? '5m' | '1h' : K extends 'cache.monitorHitRate' ? boolean : K extends 'cache.hitRateWarningThreshold' ? number : K extends 'helper.enabled' ? boolean : K extends 'helper.globalProvider' ? string : K extends 'helper.globalModel' ? string : K extends 'automation.enabled' ? boolean : K extends 'automation.maxConcurrentRuns' ? number : K extends 'automation.runHistoryLimit' ? number : K extends 'automation.defaultTimeoutMs' ? number : K extends 'automation.catchUpWindowMinutes' ? number : K extends 'automation.failureCooldownMs' ? number : K extends 'automation.deleteAfterRun' ? boolean : K extends 'controlPlane.enabled' ? boolean : K extends 'controlPlane.host' ? string : K extends 'controlPlane.port' ? number : K extends 'controlPlane.baseUrl' ? string : K extends 'controlPlane.streamMode' ? 'sse' | 'websocket' | 'both' : K extends 'controlPlane.allowRemote' ? boolean : K extends 'controlPlane.trustProxy' ? boolean : K extends 'controlPlane.tls.mode' ? 'off' | 'proxy' | 'direct' : K extends 'controlPlane.tls.certFile' ? string : K extends 'controlPlane.tls.keyFile' ? string : K extends 'httpListener.host' ? string : K extends 'httpListener.port' ? number : K extends 'httpListener.trustProxy' ? boolean : K extends 'httpListener.tls.mode' ? 'off' | 'proxy' | 'direct' : K extends 'httpListener.tls.certFile' ? string : K extends 'httpListener.tls.keyFile' ? string : K extends 'web.enabled' ? boolean : K extends 'web.host' ? string : K extends 'web.port' ? number : K extends 'web.publicBaseUrl' ? string : K extends 'web.staticAssetsDir' ? string : K extends 'surfaces.slack.enabled' ? boolean : K extends 'surfaces.slack.signingSecret' ? string : K extends 'surfaces.slack.botToken' ? string : K extends 'surfaces.slack.appToken' ? string : K extends 'surfaces.slack.defaultChannel' ? string : K extends 'surfaces.slack.workspaceId' ? string : K extends 'surfaces.discord.enabled' ? boolean : K extends 'surfaces.discord.publicKey' ? string : K extends 'surfaces.discord.botToken' ? string : K extends 'surfaces.discord.applicationId' ? string : K extends 'surfaces.discord.defaultChannelId' ? string : K extends 'surfaces.discord.guildId' ? string : K extends 'surfaces.ntfy.enabled' ? boolean : K extends 'surfaces.ntfy.baseUrl' ? string : K extends 'surfaces.ntfy.topic' ? string : K extends 'surfaces.ntfy.token' ? string : K extends 'surfaces.ntfy.defaultPriority' ? number : K extends 'surfaces.webhook.enabled' ? boolean : K extends 'surfaces.webhook.defaultTarget' ? string : K extends 'surfaces.webhook.timeoutMs' ? number : K extends 'surfaces.webhook.secret' ? string : K extends 'surfaces.telegram.enabled' ? boolean : K extends 'surfaces.telegram.botToken' ? string : K extends 'surfaces.telegram.webhookSecret' ? string : K extends 'surfaces.telegram.defaultChatId' ? string : K extends 'surfaces.telegram.botUsername' ? string : K extends 'surfaces.telegram.mode' ? 'webhook' | 'polling' : K extends 'surfaces.googleChat.enabled' ? boolean : K extends 'surfaces.googleChat.webhookUrl' ? string : K extends 'surfaces.googleChat.verificationToken' ? string : K extends 'surfaces.googleChat.appId' ? string : K extends 'surfaces.googleChat.spaceId' ? string : K extends 'surfaces.signal.enabled' ? boolean : K extends 'surfaces.signal.bridgeUrl' ? string : K extends 'surfaces.signal.account' ? string : K extends 'surfaces.signal.token' ? string : K extends 'surfaces.signal.defaultRecipient' ? string : K extends 'surfaces.whatsapp.enabled' ? boolean : K extends 'surfaces.whatsapp.provider' ? 'meta-cloud' | 'bridge' : K extends 'surfaces.whatsapp.accessToken' ? string : K extends 'surfaces.whatsapp.verifyToken' ? string : K extends 'surfaces.whatsapp.signingSecret' ? string : K extends 'surfaces.whatsapp.phoneNumberId' ? string : K extends 'surfaces.whatsapp.businessAccountId' ? string : K extends 'surfaces.whatsapp.defaultRecipient' ? string : K extends 'surfaces.imessage.enabled' ? boolean : K extends 'surfaces.imessage.bridgeUrl' ? string : K extends 'surfaces.imessage.account' ? string : K extends 'surfaces.imessage.token' ? string : K extends 'surfaces.imessage.defaultChatId' ? string : K extends 'surfaces.msteams.enabled' ? boolean : K extends 'surfaces.msteams.appId' ? string : K extends 'surfaces.msteams.appPassword' ? string : K extends 'surfaces.msteams.tenantId' ? string : K extends 'surfaces.msteams.serviceUrl' ? string : K extends 'surfaces.msteams.botId' ? string : K extends 'surfaces.msteams.defaultConversationId' ? string : K extends 'surfaces.msteams.defaultChannelId' ? string : K extends 'surfaces.bluebubbles.enabled' ? boolean : K extends 'surfaces.bluebubbles.serverUrl' ? string : K extends 'surfaces.bluebubbles.password' ? string : K extends 'surfaces.bluebubbles.account' ? string : K extends 'surfaces.bluebubbles.defaultChatGuid' ? string : K extends 'surfaces.mattermost.enabled' ? boolean : K extends 'surfaces.mattermost.baseUrl' ? string : K extends 'surfaces.mattermost.botToken' ? string : K extends 'surfaces.mattermost.teamId' ? string : K extends 'surfaces.mattermost.defaultChannelId' ? string : K extends 'surfaces.matrix.enabled' ? boolean : K extends 'surfaces.matrix.homeserverUrl' ? string : K extends 'surfaces.matrix.accessToken' ? string : K extends 'surfaces.matrix.userId' ? string : K extends 'surfaces.matrix.defaultRoomId' ? string : K extends 'watchers.enabled' ? boolean : K extends 'watchers.pollIntervalMs' ? number : K extends 'watchers.heartbeatIntervalMs' ? number : K extends 'watchers.recoveryWindowMinutes' ? number : K extends 'service.enabled' ? boolean : K extends 'service.autostart' ? boolean : K extends 'service.restartOnFailure' ? boolean : K extends 'service.platform' ? 'auto' | 'systemd' | 'launchd' | 'windows' | 'manual' : K extends 'service.serviceName' ? string : K extends 'service.logPath' ? string : K extends 'network.outboundTls.mode' ? 'bundled' | 'bundled+custom' | 'custom' : K extends 'network.outboundTls.customCaFile' ? string : K extends 'network.outboundTls.customCaDir' ? string : K extends 'network.outboundTls.allowInsecureLocalhost' ? boolean : K extends 'network.remoteFetch.allowPrivateHosts' ? boolean : never;
340
341
  //# sourceMappingURL=schema-types.d.ts.map