dmux 5.9.0 → 5.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/README.ja.md +1 -1
  2. package/README.md +5 -2
  3. package/dist/DmuxApp.d.ts.map +1 -1
  4. package/dist/DmuxApp.js +32 -6
  5. package/dist/DmuxApp.js.map +1 -1
  6. package/dist/actions/implementations/renameAction.d.ts.map +1 -1
  7. package/dist/actions/implementations/renameAction.js +11 -2
  8. package/dist/actions/implementations/renameAction.js.map +1 -1
  9. package/dist/components/panes/MergePane.d.ts.map +1 -1
  10. package/dist/components/panes/MergePane.js +3 -22
  11. package/dist/components/panes/MergePane.js.map +1 -1
  12. package/dist/components/panes/PaneCard.d.ts.map +1 -1
  13. package/dist/components/panes/PaneCard.js +13 -5
  14. package/dist/components/panes/PaneCard.js.map +1 -1
  15. package/dist/components/popups/inferenceSetupPopup.d.ts +21 -0
  16. package/dist/components/popups/inferenceSetupPopup.d.ts.map +1 -0
  17. package/dist/components/popups/inferenceSetupPopup.js +939 -0
  18. package/dist/components/popups/inferenceSetupPopup.js.map +1 -0
  19. package/dist/components/popups/kebabMenuPopup.d.ts +7 -0
  20. package/dist/components/popups/kebabMenuPopup.d.ts.map +1 -1
  21. package/dist/components/popups/kebabMenuPopup.js +48 -4
  22. package/dist/components/popups/kebabMenuPopup.js.map +1 -1
  23. package/dist/components/popups/settingsPopup.js +4 -0
  24. package/dist/components/popups/settingsPopup.js.map +1 -1
  25. package/dist/dashboard.js +2 -2
  26. package/dist/hooks/useAgentStatus.d.ts.map +1 -1
  27. package/dist/hooks/useAgentStatus.js +9 -2
  28. package/dist/hooks/useAgentStatus.js.map +1 -1
  29. package/dist/hooks/useInputHandling.d.ts +3 -1
  30. package/dist/hooks/useInputHandling.d.ts.map +1 -1
  31. package/dist/hooks/useInputHandling.js +30 -0
  32. package/dist/hooks/useInputHandling.js.map +1 -1
  33. package/dist/hooks/usePaneLoading.d.ts +8 -5
  34. package/dist/hooks/usePaneLoading.d.ts.map +1 -1
  35. package/dist/hooks/usePaneLoading.js +115 -68
  36. package/dist/hooks/usePaneLoading.js.map +1 -1
  37. package/dist/hooks/usePaneSync.d.ts +4 -7
  38. package/dist/hooks/usePaneSync.d.ts.map +1 -1
  39. package/dist/hooks/usePaneSync.js +12 -30
  40. package/dist/hooks/usePaneSync.js.map +1 -1
  41. package/dist/hooks/usePanes.d.ts.map +1 -1
  42. package/dist/hooks/usePanes.js +69 -30
  43. package/dist/hooks/usePanes.js.map +1 -1
  44. package/dist/hooks/useSidebarMouse.d.ts +24 -0
  45. package/dist/hooks/useSidebarMouse.d.ts.map +1 -0
  46. package/dist/hooks/useSidebarMouse.js +50 -0
  47. package/dist/hooks/useSidebarMouse.js.map +1 -0
  48. package/dist/i18n/locales/en.d.ts.map +1 -1
  49. package/dist/i18n/locales/en.js +2 -0
  50. package/dist/i18n/locales/en.js.map +1 -1
  51. package/dist/i18n/locales/ja.d.ts.map +1 -1
  52. package/dist/i18n/locales/ja.js +2 -0
  53. package/dist/i18n/locales/ja.js.map +1 -1
  54. package/dist/index.js +25 -2
  55. package/dist/index.js.map +1 -1
  56. package/dist/services/CodexAppServerClient.d.ts +58 -0
  57. package/dist/services/CodexAppServerClient.d.ts.map +1 -0
  58. package/dist/services/CodexAppServerClient.js +263 -0
  59. package/dist/services/CodexAppServerClient.js.map +1 -0
  60. package/dist/services/GrokBuildClient.d.ts +17 -0
  61. package/dist/services/GrokBuildClient.d.ts.map +1 -0
  62. package/dist/services/GrokBuildClient.js +150 -0
  63. package/dist/services/GrokBuildClient.js.map +1 -0
  64. package/dist/services/InferenceService.d.ts +22 -0
  65. package/dist/services/InferenceService.d.ts.map +1 -0
  66. package/dist/services/InferenceService.js +342 -0
  67. package/dist/services/InferenceService.js.map +1 -0
  68. package/dist/services/PaneAnalyzer.d.ts +1 -16
  69. package/dist/services/PaneAnalyzer.d.ts.map +1 -1
  70. package/dist/services/PaneAnalyzer.js +17 -101
  71. package/dist/services/PaneAnalyzer.js.map +1 -1
  72. package/dist/services/PaneWorkerManager.d.ts +1 -1
  73. package/dist/services/PaneWorkerManager.d.ts.map +1 -1
  74. package/dist/services/PaneWorkerManager.js +9 -5
  75. package/dist/services/PaneWorkerManager.js.map +1 -1
  76. package/dist/services/PopupManager.d.ts +6 -1
  77. package/dist/services/PopupManager.d.ts.map +1 -1
  78. package/dist/services/PopupManager.js +30 -0
  79. package/dist/services/PopupManager.js.map +1 -1
  80. package/dist/services/StatusDetector.d.ts.map +1 -1
  81. package/dist/services/StatusDetector.js +15 -8
  82. package/dist/services/StatusDetector.js.map +1 -1
  83. package/dist/services/TerminalPaneNamingService.d.ts +44 -0
  84. package/dist/services/TerminalPaneNamingService.d.ts.map +1 -0
  85. package/dist/services/TerminalPaneNamingService.js +273 -0
  86. package/dist/services/TerminalPaneNamingService.js.map +1 -0
  87. package/dist/services/TmuxService.d.ts +5 -0
  88. package/dist/services/TmuxService.d.ts.map +1 -1
  89. package/dist/services/TmuxService.js +10 -3
  90. package/dist/services/TmuxService.js.map +1 -1
  91. package/dist/types.d.ts +21 -0
  92. package/dist/types.d.ts.map +1 -1
  93. package/dist/utils/agentLaunch.d.ts +3 -2
  94. package/dist/utils/agentLaunch.d.ts.map +1 -1
  95. package/dist/utils/agentLaunch.js +9 -4
  96. package/dist/utils/agentLaunch.js.map +1 -1
  97. package/dist/utils/aiMerge.d.ts +4 -2
  98. package/dist/utils/aiMerge.d.ts.map +1 -1
  99. package/dist/utils/aiMerge.js +14 -59
  100. package/dist/utils/aiMerge.js.map +1 -1
  101. package/dist/utils/envKeySetup.d.ts +10 -0
  102. package/dist/utils/envKeySetup.d.ts.map +1 -0
  103. package/dist/utils/envKeySetup.js +58 -0
  104. package/dist/utils/envKeySetup.js.map +1 -0
  105. package/dist/utils/generated-agents-doc.d.ts +1 -1
  106. package/dist/utils/generated-agents-doc.js +1 -1
  107. package/dist/utils/inferenceProviders.d.ts +34 -0
  108. package/dist/utils/inferenceProviders.d.ts.map +1 -0
  109. package/dist/utils/inferenceProviders.js +265 -0
  110. package/dist/utils/inferenceProviders.js.map +1 -0
  111. package/dist/utils/inferenceSetup.d.ts +19 -0
  112. package/dist/utils/inferenceSetup.d.ts.map +1 -0
  113. package/dist/utils/inferenceSetup.js +37 -0
  114. package/dist/utils/inferenceSetup.js.map +1 -0
  115. package/dist/utils/inferenceWizard.d.ts +61 -0
  116. package/dist/utils/inferenceWizard.d.ts.map +1 -0
  117. package/dist/utils/inferenceWizard.js +175 -0
  118. package/dist/utils/inferenceWizard.js.map +1 -0
  119. package/dist/utils/onboarding.d.ts +4 -2
  120. package/dist/utils/onboarding.d.ts.map +1 -1
  121. package/dist/utils/onboarding.js +26 -53
  122. package/dist/utils/onboarding.js.map +1 -1
  123. package/dist/utils/openRouterApiKeySetup.d.ts +7 -0
  124. package/dist/utils/openRouterApiKeySetup.d.ts.map +1 -1
  125. package/dist/utils/openRouterApiKeySetup.js +21 -0
  126. package/dist/utils/openRouterApiKeySetup.js.map +1 -1
  127. package/dist/utils/paneAgentTracking.d.ts +31 -0
  128. package/dist/utils/paneAgentTracking.d.ts.map +1 -0
  129. package/dist/utils/paneAgentTracking.js +261 -0
  130. package/dist/utils/paneAgentTracking.js.map +1 -0
  131. package/dist/utils/popup.d.ts.map +1 -1
  132. package/dist/utils/popup.js +17 -5
  133. package/dist/utils/popup.js.map +1 -1
  134. package/dist/utils/prSummary.d.ts +1 -1
  135. package/dist/utils/prSummary.js +3 -3
  136. package/dist/utils/prSummary.js.map +1 -1
  137. package/dist/utils/settingsManager.d.ts.map +1 -1
  138. package/dist/utils/settingsManager.js +43 -0
  139. package/dist/utils/settingsManager.js.map +1 -1
  140. package/dist/utils/shellPaneDetection.d.ts.map +1 -1
  141. package/dist/utils/shellPaneDetection.js +2 -0
  142. package/dist/utils/shellPaneDetection.js.map +1 -1
  143. package/dist/utils/sidebarClickMap.d.ts +28 -0
  144. package/dist/utils/sidebarClickMap.d.ts.map +1 -0
  145. package/dist/utils/sidebarClickMap.js +91 -0
  146. package/dist/utils/sidebarClickMap.js.map +1 -0
  147. package/dist/utils/sidebarMouse.d.ts +55 -0
  148. package/dist/utils/sidebarMouse.d.ts.map +1 -0
  149. package/dist/utils/sidebarMouse.js +101 -0
  150. package/dist/utils/sidebarMouse.js.map +1 -0
  151. package/dist/utils/sidebarScrollOffset.d.ts +9 -0
  152. package/dist/utils/sidebarScrollOffset.d.ts.map +1 -0
  153. package/dist/utils/sidebarScrollOffset.js +23 -0
  154. package/dist/utils/sidebarScrollOffset.js.map +1 -0
  155. package/dist/utils/slug.d.ts.map +1 -1
  156. package/dist/utils/slug.js +9 -41
  157. package/dist/utils/slug.js.map +1 -1
  158. package/native/macos/prebuilt/dmux-helper.app/Contents/MacOS/dmux-helper +0 -0
  159. package/package.json +3 -3
@@ -0,0 +1,150 @@
1
+ import { spawn } from 'child_process';
2
+ import os from 'os';
3
+ function grokSubscriptionEnvironment() {
4
+ // A Grok Build subscription must use the cached OAuth session, not silently
5
+ // fall back to usage-billed xAI API access when both are configured.
6
+ const { XAI_API_KEY: _xaiApiKey, ...environment } = process.env;
7
+ return environment;
8
+ }
9
+ function runGrokCommand(args, options) {
10
+ return new Promise((resolve, reject) => {
11
+ const child = spawn('grok', args, {
12
+ env: grokSubscriptionEnvironment(),
13
+ stdio: ['ignore', 'pipe', 'pipe'],
14
+ });
15
+ let stdout = '';
16
+ let stderr = '';
17
+ let settled = false;
18
+ let timedOut = false;
19
+ const append = (kind, chunk) => {
20
+ const text = chunk.toString();
21
+ if (kind === 'stdout')
22
+ stdout = `${stdout}${text}`.slice(-100_000);
23
+ else
24
+ stderr = `${stderr}${text}`.slice(-100_000);
25
+ options.onOutput?.(text);
26
+ };
27
+ child.stdout.on('data', (chunk) => append('stdout', chunk));
28
+ child.stderr.on('data', (chunk) => append('stderr', chunk));
29
+ const abort = () => {
30
+ if (settled)
31
+ return;
32
+ child.kill('SIGTERM');
33
+ };
34
+ options.signal?.addEventListener('abort', abort, { once: true });
35
+ const timeout = setTimeout(() => {
36
+ timedOut = true;
37
+ child.kill('SIGTERM');
38
+ }, options.timeoutMs);
39
+ child.once('error', (error) => {
40
+ if (settled)
41
+ return;
42
+ settled = true;
43
+ clearTimeout(timeout);
44
+ options.signal?.removeEventListener('abort', abort);
45
+ reject(error.code === 'ENOENT'
46
+ ? new Error('Grok Build CLI is not installed. Install it from https://x.ai/cli')
47
+ : error);
48
+ });
49
+ child.once('close', (exitCode) => {
50
+ if (settled)
51
+ return;
52
+ settled = true;
53
+ clearTimeout(timeout);
54
+ options.signal?.removeEventListener('abort', abort);
55
+ if (options.signal?.aborted) {
56
+ reject(new Error('Grok Build request aborted'));
57
+ return;
58
+ }
59
+ if (timedOut) {
60
+ reject(new Error('Grok Build request timed out'));
61
+ return;
62
+ }
63
+ resolve({ stdout, stderr, exitCode });
64
+ });
65
+ });
66
+ }
67
+ export function parseGrokModelsOutput(output) {
68
+ const defaultModel = output.match(/^Default model:\s*(\S+)/mi)?.[1];
69
+ const models = output
70
+ .split('\n')
71
+ .map((line) => line.match(/^\s*[*-]\s+(\S+?)(?:\s+\(default\))?\s*$/i)?.[1])
72
+ .filter((id) => Boolean(id))
73
+ .map((id) => ({ id, name: id }));
74
+ if (defaultModel && !models.some((model) => model.id === defaultModel)) {
75
+ models.unshift({ id: defaultModel, name: defaultModel });
76
+ }
77
+ return {
78
+ authenticated: !/not authenticated/i.test(output),
79
+ models,
80
+ defaultModel,
81
+ };
82
+ }
83
+ export async function getGrokBuildStatus(timeoutMs = 5_000) {
84
+ const result = await runGrokCommand(['models'], { timeoutMs });
85
+ const output = `${result.stdout}\n${result.stderr}`;
86
+ if (result.exitCode !== 0 && !output.trim()) {
87
+ throw new Error(`Grok Build model discovery exited with code ${result.exitCode ?? 'unknown'}`);
88
+ }
89
+ return parseGrokModelsOutput(output);
90
+ }
91
+ export async function loginToGrokBuild(onOutput, signal) {
92
+ const result = await runGrokCommand(['login', '--oauth'], {
93
+ timeoutMs: 5 * 60_000,
94
+ signal,
95
+ onOutput,
96
+ });
97
+ if (result.exitCode !== 0) {
98
+ const detail = (result.stderr || result.stdout).trim();
99
+ throw new Error(detail || `Grok Build login exited with code ${result.exitCode ?? 'unknown'}`);
100
+ }
101
+ const status = await getGrokBuildStatus();
102
+ if (!status.authenticated) {
103
+ throw new Error('Grok Build did not report an authenticated subscription session.');
104
+ }
105
+ }
106
+ export async function listGrokBuildModels() {
107
+ const status = await getGrokBuildStatus();
108
+ if (!status.authenticated) {
109
+ throw new Error('Grok Build is not signed in. Run `grok login` or sign in from dmux.');
110
+ }
111
+ return status.models;
112
+ }
113
+ export async function generateGrokBuildText(model, prompt, options = {}) {
114
+ const args = [
115
+ '--no-auto-update',
116
+ '--cwd', os.tmpdir(),
117
+ '--model', model,
118
+ '--output-format', 'json',
119
+ '--max-turns', '1',
120
+ '--no-memory',
121
+ '--no-subagents',
122
+ '--disable-web-search',
123
+ '--tools', '',
124
+ '--verbatim',
125
+ '--system-prompt-override',
126
+ options.system || 'You are a text inference service. Never use tools. Return only the requested answer.',
127
+ ...(options.outputSchema ? ['--json-schema', JSON.stringify(options.outputSchema)] : []),
128
+ '--single', prompt,
129
+ ];
130
+ const result = await runGrokCommand(args, {
131
+ timeoutMs: options.timeoutMs ?? 20_000,
132
+ signal: options.signal,
133
+ });
134
+ if (result.exitCode !== 0) {
135
+ const detail = (result.stderr || result.stdout).trim();
136
+ throw new Error(detail || `Grok Build inference exited with code ${result.exitCode ?? 'unknown'}`);
137
+ }
138
+ let data;
139
+ try {
140
+ data = JSON.parse(result.stdout);
141
+ }
142
+ catch {
143
+ throw new Error('Grok Build returned invalid JSON output');
144
+ }
145
+ const text = typeof data?.text === 'string' ? data.text.trim() : '';
146
+ if (!text)
147
+ throw new Error('Grok Build returned an empty response');
148
+ return text;
149
+ }
150
+ //# sourceMappingURL=GrokBuildClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrokBuildClient.js","sourceRoot":"","sources":["../../src/services/GrokBuildClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AAepB,SAAS,2BAA2B;IAClC,4EAA4E;IAC5E,qEAAqE;IACrE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAChE,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,cAAc,CACrB,IAAc,EACd,OAIC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE;YAChC,GAAG,EAAE,2BAA2B,EAAE;YAClC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC;QACH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,MAAM,MAAM,GAAG,CAAC,IAAyB,EAAE,KAAsB,EAAE,EAAE;YACnE,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,IAAI,KAAK,QAAQ;gBAAE,MAAM,GAAG,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;;gBAC9D,MAAM,GAAG,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;YACjD,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC,CAAC;QACF,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QAC5D,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,IAAI,OAAO;gBAAE,OAAO;YACpB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC,CAAC;QACF,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,QAAQ,GAAG,IAAI,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAEtB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC5B,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACpD,MAAM,CACH,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAChD,CAAC,CAAC,IAAI,KAAK,CAAC,mEAAmE,CAAC;gBAChF,CAAC,CAAC,KAAK,CACV,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;YAC/B,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACpD,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;gBAClD,OAAO;YACT,CAAC;YACD,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,MAAM;SAClB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,2CAA2C,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAC3E,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SACzC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACnC,IAAI,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,YAAY,CAAC,EAAE,CAAC;QACvE,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO;QACL,aAAa,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;QACjD,MAAM;QACN,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,SAAS,GAAG,KAAK;IACxD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;IACpD,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,+CAA+C,MAAM,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAiC,EACjC,MAAoB;IAEpB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE;QACxD,SAAS,EAAE,CAAC,GAAG,MAAM;QACrB,MAAM;QACN,QAAQ;KACT,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,qCAAqC,MAAM,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAC;IACjG,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAa,EACb,MAAc,EACd,UAKI,EAAE;IAEN,MAAM,IAAI,GAAG;QACX,kBAAkB;QAClB,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE;QACpB,SAAS,EAAE,KAAK;QAChB,iBAAiB,EAAE,MAAM;QACzB,aAAa,EAAE,GAAG;QAClB,aAAa;QACb,gBAAgB;QAChB,sBAAsB;QACtB,SAAS,EAAE,EAAE;QACb,YAAY;QACZ,0BAA0B;QAC1B,OAAO,CAAC,MAAM,IAAI,sFAAsF;QACxG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,UAAU,EAAE,MAAM;KACnB,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE;QACxC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,MAAM;QACtC,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,yCAAyC,MAAM,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAC;IACrG,CAAC;IACD,IAAI,IAAS,CAAC;IACd,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { type InferenceModel } from '../utils/inferenceProviders.js';
2
+ import type { InferenceTarget } from '../types.js';
3
+ export interface GenerateInferenceOptions {
4
+ system?: string;
5
+ maxTokens?: number;
6
+ temperature?: number;
7
+ timeoutMs?: number;
8
+ signal?: AbortSignal;
9
+ projectRoot?: string;
10
+ outputSchema?: Record<string, unknown>;
11
+ targets?: InferenceTarget[];
12
+ }
13
+ export declare class InferenceRequestError extends Error {
14
+ readonly providerId: string;
15
+ readonly modelId: string;
16
+ readonly status?: number | undefined;
17
+ constructor(message: string, providerId: string, modelId: string, status?: number | undefined);
18
+ }
19
+ export declare function hasConfiguredInferenceSync(projectRoot?: string): boolean;
20
+ export declare function generateInferenceText(prompt: string, options?: GenerateInferenceOptions): Promise<string | null>;
21
+ export declare function discoverInferenceModels(target: Omit<InferenceTarget, 'modelId'>): Promise<InferenceModel[]>;
22
+ //# sourceMappingURL=InferenceService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InferenceService.d.ts","sourceRoot":"","sources":["../../src/services/InferenceService.ts"],"names":[],"mappings":"AAOA,OAAO,EAKL,KAAK,cAAc,EAEpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,qBAAa,qBAAsB,SAAQ,KAAK;aAG5B,UAAU,EAAE,MAAM;aAClB,OAAO,EAAE,MAAM;aACf,MAAM,CAAC,EAAE,MAAM;gBAH/B,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,YAAA;CAKlC;AAsBD,wBAAgB,0BAA0B,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAExE;AAySD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoBxB;AAcD,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GACvC,OAAO,CAAC,cAAc,EAAE,CAAC,CAyE3B"}
@@ -0,0 +1,342 @@
1
+ import { LogService } from './LogService.js';
2
+ import { getCodexAppServerClient } from './CodexAppServerClient.js';
3
+ import { generateGrokBuildText, listGrokBuildModels, } from './GrokBuildClient.js';
4
+ import { SettingsManager } from '../utils/settingsManager.js';
5
+ import { getInferenceApiKey, getInferenceProvider, hasInferenceApiKeySync, resolveInferenceProvider, } from '../utils/inferenceProviders.js';
6
+ export class InferenceRequestError extends Error {
7
+ providerId;
8
+ modelId;
9
+ status;
10
+ constructor(message, providerId, modelId, status) {
11
+ super(message);
12
+ this.providerId = providerId;
13
+ this.modelId = modelId;
14
+ this.status = status;
15
+ this.name = 'InferenceRequestError';
16
+ }
17
+ }
18
+ const LEGACY_OPENROUTER_TARGETS = [
19
+ { providerId: 'openrouter', modelId: 'google/gemini-2.5-flash' },
20
+ { providerId: 'openrouter', modelId: 'openai/gpt-4o-mini' },
21
+ { providerId: 'openrouter', modelId: 'openai/gpt-oss-120b:free' },
22
+ { providerId: 'openrouter', modelId: 'nvidia/nemotron-3-super-120b-a12b:free' },
23
+ ];
24
+ function configuredTargets(projectRoot) {
25
+ const settings = new SettingsManager(projectRoot || process.cwd()).getSettings();
26
+ const targets = [];
27
+ if (settings.inferencePrimary)
28
+ targets.push(settings.inferencePrimary);
29
+ if (settings.inferenceBackup)
30
+ targets.push(settings.inferenceBackup);
31
+ if (targets.length > 0)
32
+ return targets;
33
+ const openRouter = getInferenceProvider('openrouter');
34
+ return openRouter && hasInferenceApiKeySync(openRouter)
35
+ ? LEGACY_OPENROUTER_TARGETS
36
+ : [];
37
+ }
38
+ export function hasConfiguredInferenceSync(projectRoot) {
39
+ return configuredTargets(projectRoot).length > 0;
40
+ }
41
+ function combineSignals(signal, timeoutMs) {
42
+ const timeoutController = new AbortController();
43
+ const timeout = setTimeout(() => timeoutController.abort(), timeoutMs);
44
+ return {
45
+ signal: signal
46
+ ? AbortSignal.any([signal, timeoutController.signal])
47
+ : timeoutController.signal,
48
+ cleanup: () => clearTimeout(timeout),
49
+ };
50
+ }
51
+ function extractOpenAiText(data) {
52
+ const content = data?.choices?.[0]?.message?.content;
53
+ if (typeof content === 'string')
54
+ return content.trim();
55
+ if (Array.isArray(content)) {
56
+ return content
57
+ .map((part) => typeof part === 'string' ? part : part?.text)
58
+ .filter((part) => typeof part === 'string')
59
+ .join('')
60
+ .trim();
61
+ }
62
+ return '';
63
+ }
64
+ async function readApiError(response) {
65
+ const text = (await response.text()).slice(0, 1000);
66
+ try {
67
+ const data = JSON.parse(text);
68
+ return data?.error?.message || data?.message || JSON.stringify(data);
69
+ }
70
+ catch {
71
+ return text;
72
+ }
73
+ }
74
+ function extractOpenAiResponsesText(data) {
75
+ if (typeof data?.output_text === 'string')
76
+ return data.output_text.trim();
77
+ return (data?.output || [])
78
+ .flatMap((item) => Array.isArray(item?.content) ? item.content : [])
79
+ .filter((part) => part?.type === 'output_text' && typeof part.text === 'string')
80
+ .map((part) => part.text)
81
+ .join('')
82
+ .trim();
83
+ }
84
+ async function callOpenAiResponses(provider, target, apiKey, prompt, options, signal) {
85
+ const response = await fetch(`${provider.baseUrl}/responses`, {
86
+ method: 'POST',
87
+ headers: {
88
+ Authorization: `Bearer ${apiKey}`,
89
+ 'Content-Type': 'application/json',
90
+ },
91
+ body: JSON.stringify({
92
+ model: target.modelId,
93
+ input: prompt,
94
+ ...(options.system ? { instructions: options.system } : {}),
95
+ max_output_tokens: options.maxTokens ?? 1000,
96
+ }),
97
+ signal,
98
+ });
99
+ if (!response.ok) {
100
+ throw new InferenceRequestError(`${provider.name} API error (${target.modelId}): ${response.status} ${await readApiError(response)}`, provider.id, target.modelId, response.status);
101
+ }
102
+ const text = extractOpenAiResponsesText(await response.json());
103
+ if (!text) {
104
+ throw new InferenceRequestError(`${provider.name} returned an empty response`, provider.id, target.modelId);
105
+ }
106
+ return text;
107
+ }
108
+ async function callOpenAiCompatible(provider, target, apiKey, prompt, options, signal) {
109
+ const baseUrl = provider.baseUrl?.replace(/\/+$/, '');
110
+ if (!baseUrl)
111
+ throw new Error(`Provider ${provider.name} has no API URL`);
112
+ const messages = [
113
+ ...(options.system ? [{ role: 'system', content: options.system }] : []),
114
+ { role: 'user', content: prompt },
115
+ ];
116
+ const tokenField = provider.maxTokensParam || 'max_tokens';
117
+ const body = {
118
+ model: target.modelId,
119
+ messages,
120
+ [tokenField]: options.maxTokens ?? 1000,
121
+ };
122
+ if (options.temperature !== undefined)
123
+ body.temperature = options.temperature;
124
+ const response = await fetch(`${baseUrl}/chat/completions`, {
125
+ method: 'POST',
126
+ headers: {
127
+ Authorization: `Bearer ${apiKey}`,
128
+ 'Content-Type': 'application/json',
129
+ ...(provider.id === 'openrouter'
130
+ ? { 'HTTP-Referer': 'https://github.com/standardagents/dmux', 'X-Title': 'dmux' }
131
+ : {}),
132
+ },
133
+ body: JSON.stringify(body),
134
+ signal,
135
+ });
136
+ if (!response.ok) {
137
+ const detail = await readApiError(response);
138
+ throw new InferenceRequestError(`${provider.name} API error (${target.modelId}): ${response.status} ${detail}`, provider.id, target.modelId, response.status);
139
+ }
140
+ const text = extractOpenAiText(await response.json());
141
+ if (!text) {
142
+ throw new InferenceRequestError(`${provider.name} returned an empty response`, provider.id, target.modelId);
143
+ }
144
+ return text;
145
+ }
146
+ async function callAnthropic(provider, target, apiKey, prompt, options, signal) {
147
+ const response = await fetch(`${provider.baseUrl}/messages`, {
148
+ method: 'POST',
149
+ headers: {
150
+ 'x-api-key': apiKey,
151
+ 'anthropic-version': '2023-06-01',
152
+ 'Content-Type': 'application/json',
153
+ },
154
+ body: JSON.stringify({
155
+ model: target.modelId,
156
+ max_tokens: options.maxTokens ?? 1000,
157
+ ...(options.system ? { system: options.system } : {}),
158
+ ...(options.temperature !== undefined ? { temperature: options.temperature } : {}),
159
+ messages: [{ role: 'user', content: prompt }],
160
+ }),
161
+ signal,
162
+ });
163
+ if (!response.ok) {
164
+ throw new InferenceRequestError(`${provider.name} API error (${target.modelId}): ${response.status} ${await readApiError(response)}`, provider.id, target.modelId, response.status);
165
+ }
166
+ const data = await response.json();
167
+ const text = (data?.content || [])
168
+ .filter((part) => part?.type === 'text' && typeof part.text === 'string')
169
+ .map((part) => part.text)
170
+ .join('')
171
+ .trim();
172
+ if (!text)
173
+ throw new Error(`${provider.name} returned an empty response`);
174
+ return text;
175
+ }
176
+ async function callCohere(provider, target, apiKey, prompt, options, signal) {
177
+ const response = await fetch(`${provider.baseUrl}/v2/chat`, {
178
+ method: 'POST',
179
+ headers: { Authorization: `Bearer ${apiKey}`, 'Content-Type': 'application/json' },
180
+ body: JSON.stringify({
181
+ model: target.modelId,
182
+ messages: [
183
+ ...(options.system ? [{ role: 'system', content: options.system }] : []),
184
+ { role: 'user', content: prompt },
185
+ ],
186
+ max_tokens: options.maxTokens ?? 1000,
187
+ ...(options.temperature !== undefined ? { temperature: options.temperature } : {}),
188
+ }),
189
+ signal,
190
+ });
191
+ if (!response.ok) {
192
+ throw new InferenceRequestError(`${provider.name} API error (${target.modelId}): ${response.status} ${await readApiError(response)}`, provider.id, target.modelId, response.status);
193
+ }
194
+ const data = await response.json();
195
+ const text = (data?.message?.content || [])
196
+ .map((part) => part?.text)
197
+ .filter((part) => typeof part === 'string')
198
+ .join('')
199
+ .trim();
200
+ if (!text)
201
+ throw new Error(`${provider.name} returned an empty response`);
202
+ return text;
203
+ }
204
+ async function callTarget(target, prompt, options) {
205
+ const provider = resolveInferenceProvider(target);
206
+ if (!provider)
207
+ throw new Error(`Unknown inference provider: ${target.providerId}`);
208
+ if (provider.protocol === 'chatgpt') {
209
+ return getCodexAppServerClient().generateText(target.modelId, prompt, {
210
+ system: options.system,
211
+ timeoutMs: options.timeoutMs,
212
+ signal: options.signal,
213
+ outputSchema: options.outputSchema,
214
+ });
215
+ }
216
+ if (provider.protocol === 'grok-build') {
217
+ return generateGrokBuildText(target.modelId, prompt, {
218
+ system: options.system,
219
+ timeoutMs: options.timeoutMs,
220
+ signal: options.signal,
221
+ outputSchema: options.outputSchema,
222
+ });
223
+ }
224
+ const credential = await getInferenceApiKey(provider);
225
+ if (!credential) {
226
+ throw new InferenceRequestError(`Missing ${provider.envKeys[0] || 'API key'} for ${provider.name}`, provider.id, target.modelId);
227
+ }
228
+ const combined = combineSignals(options.signal, options.timeoutMs ?? 12_000);
229
+ try {
230
+ if (provider.protocol === 'openai-responses') {
231
+ return await callOpenAiResponses(provider, target, credential.apiKey, prompt, options, combined.signal);
232
+ }
233
+ if (provider.protocol === 'anthropic') {
234
+ return await callAnthropic(provider, target, credential.apiKey, prompt, options, combined.signal);
235
+ }
236
+ if (provider.protocol === 'cohere') {
237
+ return await callCohere(provider, target, credential.apiKey, prompt, options, combined.signal);
238
+ }
239
+ return await callOpenAiCompatible(provider, target, credential.apiKey, prompt, options, combined.signal);
240
+ }
241
+ finally {
242
+ combined.cleanup();
243
+ }
244
+ }
245
+ export async function generateInferenceText(prompt, options = {}) {
246
+ const targets = options.targets ?? configuredTargets(options.projectRoot);
247
+ if (targets.length === 0)
248
+ return null;
249
+ const errors = [];
250
+ for (const target of targets) {
251
+ try {
252
+ return await callTarget(target, prompt, options);
253
+ }
254
+ catch (error) {
255
+ const message = error instanceof Error ? error.message : String(error);
256
+ errors.push(message);
257
+ LogService.getInstance().debug(`Inference failed with ${target.providerId}/${target.modelId}: ${message}`, 'inference');
258
+ if (options.signal?.aborted)
259
+ throw error;
260
+ }
261
+ }
262
+ throw new Error(`All inference targets failed. ${errors.join(' | ')}`);
263
+ }
264
+ function normalizeModels(models, sort = true) {
265
+ const seen = new Set();
266
+ const normalized = models.filter((model) => {
267
+ if (!model.id || seen.has(model.id))
268
+ return false;
269
+ seen.add(model.id);
270
+ return true;
271
+ });
272
+ return sort
273
+ ? normalized.sort((left, right) => left.name.localeCompare(right.name))
274
+ : normalized;
275
+ }
276
+ export async function discoverInferenceModels(target) {
277
+ const provider = resolveInferenceProvider({ ...target, modelId: '__discovery__' });
278
+ if (!provider)
279
+ throw new Error(`Unknown inference provider: ${target.providerId}`);
280
+ if (provider.modelDiscovery === 'chatgpt') {
281
+ return normalizeModels(await getCodexAppServerClient().listModels());
282
+ }
283
+ if (provider.modelDiscovery === 'grok-build') {
284
+ // `grok models` places the account's default model first.
285
+ return normalizeModels(await listGrokBuildModels(), false);
286
+ }
287
+ const credential = await getInferenceApiKey(provider);
288
+ if (!credential)
289
+ throw new Error(`Missing ${provider.envKeys[0]} for ${provider.name}`);
290
+ let url;
291
+ const headers = { Accept: 'application/json' };
292
+ if (provider.modelDiscovery === 'google') {
293
+ url = `https://generativelanguage.googleapis.com/v1beta/models?pageSize=1000&key=${encodeURIComponent(credential.apiKey)}`;
294
+ }
295
+ else if (provider.modelDiscovery === 'cohere') {
296
+ url = `${provider.baseUrl}/v1/models?page_size=1000`;
297
+ headers.Authorization = `Bearer ${credential.apiKey}`;
298
+ }
299
+ else {
300
+ const modelUrl = `${provider.baseUrl?.replace(/\/+$/, '')}/models`;
301
+ if (provider.protocol === 'anthropic') {
302
+ url = `${modelUrl}?limit=1000`;
303
+ headers['x-api-key'] = credential.apiKey;
304
+ headers['anthropic-version'] = '2023-06-01';
305
+ }
306
+ else {
307
+ url = modelUrl;
308
+ headers.Authorization = `Bearer ${credential.apiKey}`;
309
+ }
310
+ }
311
+ const combined = combineSignals(undefined, 15_000);
312
+ try {
313
+ const response = await fetch(url, { headers, signal: combined.signal });
314
+ if (!response.ok) {
315
+ throw new Error(`${provider.name} model discovery failed: ${response.status} ${await readApiError(response)}`);
316
+ }
317
+ const data = await response.json();
318
+ if (provider.modelDiscovery === 'google') {
319
+ return normalizeModels((data?.models || [])
320
+ .filter((model) => model?.supportedGenerationMethods?.includes('generateContent'))
321
+ .map((model) => ({
322
+ id: String(model.name || '').replace(/^models\//, ''),
323
+ name: model.displayName || String(model.name || '').replace(/^models\//, ''),
324
+ description: model.description,
325
+ })));
326
+ }
327
+ if (provider.modelDiscovery === 'cohere') {
328
+ return normalizeModels((data?.models || [])
329
+ .filter((model) => !Array.isArray(model?.endpoints) || model.endpoints.includes('chat'))
330
+ .map((model) => ({ id: model.name, name: model.name, description: model.description })));
331
+ }
332
+ return normalizeModels((data?.data || []).map((model) => ({
333
+ id: model.id,
334
+ name: model.name || model.display_name || model.id,
335
+ description: model.description,
336
+ })));
337
+ }
338
+ finally {
339
+ combined.cleanup();
340
+ }
341
+ }
342
+ //# sourceMappingURL=InferenceService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InferenceService.js","sourceRoot":"","sources":["../../src/services/InferenceService.ts"],"names":[],"mappings":"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"}
@@ -22,14 +22,10 @@ interface PaneContext {
22
22
  }
23
23
  export declare function normalizePaneContentForAnalysis(content: string, maxLines?: number): string;
24
24
  export declare class PaneAnalyzer {
25
- private apiKey;
26
- private preferredModelStack;
27
- private freeFallbackModelStack;
28
25
  private cache;
29
26
  private readonly CACHE_TTL;
30
27
  private readonly MAX_CACHE_SIZE;
31
28
  private pendingRequests;
32
- constructor();
33
29
  /**
34
30
  * Hash content for cache key
35
31
  */
@@ -46,18 +42,7 @@ export declare class PaneAnalyzer {
46
42
  * Clear all cache entries (useful for testing)
47
43
  */
48
44
  clearCache(): void;
49
- /**
50
- * Make a single API request to a specific model
51
- */
52
- private tryModel;
53
- private raceModelStack;
54
- private formatModelError;
55
- /**
56
- * Makes a request to OpenRouter API with tiered model fallback.
57
- * Preferred models race in parallel so the fastest healthy paid model wins.
58
- * If they are unavailable or the key is capped, a tested free JSON-capable model
59
- * gets a second chance without winning normal healthy requests by speed alone.
60
- */
45
+ /** Make a request through the configured primary/backup inference stack. */
61
46
  private makeRequestWithFallback;
62
47
  /**
63
48
  * Stage 1: Determines the state of the pane
@@ -1 +1 @@
1
- {"version":3,"file":"PaneAnalyzer.d.ts","sourceRoot":"","sources":["../../src/services/PaneAnalyzer.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,SAAS,GAAG,eAAe,GAAG,aAAa,GAAG,aAAa,CAAC;AAGxE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,aAAa,CAAC,EAAE;QACd,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAOD,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAmBD,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAoC,GAC7C,MAAM,CAWR;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,mBAAmB,CAGzB;IACF,OAAO,CAAC,sBAAsB,CAG5B;IAGF,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;IAGtC,OAAO,CAAC,eAAe,CAA4C;;IAMnE;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,SAAS;IAYjB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAShB;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;OAEG;YACW,QAAQ;YAoCR,cAAc;IA2B5B,OAAO,CAAC,gBAAgB;IAIxB;;;;;OAKG;YACW,uBAAuB;IAsDrC;;;;;OAKG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA0ElG;;;;;OAKG;IACG,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IA6GvC;;OAEG;IACG,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,gBAAgB,GAAG,eAAe,CAAC,CAAC;IA4D9E;;OAEG;YACW,aAAa;IA0C3B;;;;;;;OAOG;IACG,WAAW,CACf,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,WAAW,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,YAAY,CAAC;CAqFzB"}
1
+ {"version":3,"file":"PaneAnalyzer.d.ts","sourceRoot":"","sources":["../../src/services/PaneAnalyzer.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,SAAS,GAAG,eAAe,GAAG,aAAa,GAAG,aAAa,CAAC;AAGxE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,aAAa,CAAC,EAAE;QACd,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAOD,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAmBD,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAoC,GAC7C,MAAM,CAWR;AAED,qBAAa,YAAY;IAEvB,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;IAGtC,OAAO,CAAC,eAAe,CAA4C;IAEnE;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,SAAS;IAYjB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAShB;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB,4EAA4E;YAC9D,uBAAuB;IAiBrC;;;;;OAKG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAyElG;;;;;OAKG;IACG,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IA6GvC;;OAEG;IACG,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,gBAAgB,GAAG,eAAe,CAAC,CAAC;IA4D9E;;OAEG;YACW,aAAa;IA0C3B;;;;;;;OAOG;IACG,WAAW,CACf,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,WAAW,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,YAAY,CAAC;CAqFzB"}