@manishbht/helpcode 0.3.4 → 0.3.6

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.
@@ -12,11 +12,21 @@ import * as path from 'path';
12
12
  import { loadState } from '../core/state.js';
13
13
  import { renderCockpit } from '../core/cockpit.js';
14
14
  import { buildCockpitViewModel, renderCockpitHtml } from '../core/cockpitHtml.js';
15
+ import { quotaFor } from '../core/quota.js';
15
16
  import { c, log } from '../lib/ui.js';
16
17
  export async function handleCockpit(opts = {}) {
17
18
  const state = loadState();
18
19
  if (opts.html) {
19
- const vm = buildCockpitViewModel(state.sousChefLog);
20
+ // Real quota fraction per provider, for the panel bars.
21
+ const quotaLookup = (providerId) => {
22
+ if (!state.quotas)
23
+ return null;
24
+ const s = quotaFor(state.quotas, providerId);
25
+ if (!s || s.limitPerDay === null)
26
+ return null;
27
+ return s.usedToday / s.limitPerDay;
28
+ };
29
+ const vm = buildCockpitViewModel(state.sousChefLog, quotaLookup);
20
30
  const html = renderCockpitHtml(vm);
21
31
  const outPath = opts.out ?? path.join('.helpcode', 'cockpit.html');
22
32
  const dir = path.dirname(outPath);
@@ -1 +1 @@
1
- {"version":3,"file":"cockpit.js","sourceRoot":"","sources":["../../../src/commands/cockpit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAyC,EAAE;IAC7E,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAE1B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,EAAE,GAAG,qBAAqB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACzC,GAAG,CAAC,EAAE,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;QACtC,GAAG,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,CAAC;AACX,CAAC"}
1
+ {"version":3,"file":"cockpit.js","sourceRoot":"","sources":["../../../src/commands/cockpit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAyC,EAAE;IAC7E,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAE1B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,wDAAwD;QACxD,MAAM,WAAW,GAAG,CAAC,UAAkB,EAAiB,EAAE;YACxD,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YAC/B,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAC7C,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC9C,OAAO,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,WAAW,CAAC;QACrC,CAAC,CAAC;QACF,MAAM,EAAE,GAAG,qBAAqB,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACzC,GAAG,CAAC,EAAE,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;QACtC,GAAG,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -14,10 +14,8 @@
14
14
  import { loadProjectConfig } from '../core/project.js';
15
15
  import { loadState, saveState, appendSousChefEvent } from '../core/state.js';
16
16
  import { decomposeTask, buildDecompositionPrompt, parseDecomposition } from '../core/decompose.js';
17
- import { geminiGenerate, GeminiError } from '../core/gemini.js';
18
- import { loadGeminiKey } from '../core/keys.js';
17
+ import { firstAvailableProvider } from '../core/remoteRouter.js';
19
18
  import { c, log } from '../lib/ui.js';
20
- const GEMINI_MODEL = 'gemini-2.5-flash-lite';
21
19
  export async function handlePlan(task) {
22
20
  if (!task || !task.trim()) {
23
21
  log.err('Usage: helpcode plan "<task to break down>"');
@@ -85,33 +83,31 @@ async function decomposeViaSousChef(task, config) {
85
83
  // Local failed for an availability reason — fall through to remote.
86
84
  log.dim(`local model unavailable (${local.reason})`);
87
85
  }
88
- // 2. Remote free-tier, if a key is configured. Decomposition is always
89
- // privacy-allowed (task description only, no code).
90
- const key = loadGeminiKey();
91
- if (!key) {
86
+ // 2. Remote free-tier, if any provider has a key. Decomposition is always
87
+ // privacy-allowed (task description only, no code). A project may name a
88
+ // preferred provider via config.remote.provider.
89
+ const provider = firstAvailableProvider(process.env, config.remote?.provider);
90
+ if (!provider) {
92
91
  if (!config.ollama?.enabled) {
93
92
  return { ok: false, steps: [], worker: 'local', model: null,
94
93
  reason: 'no local model enabled and no free-tier key configured' };
95
94
  }
96
95
  return { ok: false, steps: [], worker: 'local', model: null, reason: 'local model unavailable' };
97
96
  }
98
- log.dim(`thinking through the steps (free-tier ${GEMINI_MODEL})...`);
97
+ log.dim(`thinking through the steps (free-tier ${provider.label} · ${provider.model})...`);
99
98
  try {
100
- const text = await geminiGenerate(buildDecompositionPrompt(task), {
101
- apiKey: key, model: GEMINI_MODEL, timeoutMs: 30000,
102
- });
99
+ const text = await provider.generate(buildDecompositionPrompt(task));
103
100
  const steps = parseDecomposition(text);
104
101
  if (steps.length >= 2) {
105
- return { ok: true, steps, worker: 'remote', model: GEMINI_MODEL, reason: '' };
102
+ return { ok: true, steps, worker: 'remote', model: provider.model, reason: '' };
106
103
  }
107
104
  if (steps.length === 1) {
108
- return { ok: false, steps, worker: 'remote', model: GEMINI_MODEL, reason: 'single step — not worth decomposing' };
105
+ return { ok: false, steps, worker: 'remote', model: provider.model, reason: 'single step — not worth decomposing' };
109
106
  }
110
- return { ok: false, steps: [], worker: 'remote', model: GEMINI_MODEL, reason: 'no steps parsed' };
107
+ return { ok: false, steps: [], worker: 'remote', model: provider.model, reason: 'no steps parsed' };
111
108
  }
112
109
  catch (e) {
113
- const why = e instanceof GeminiError ? e.message : e.message;
114
- return { ok: false, steps: [], worker: 'remote', model: GEMINI_MODEL, reason: `remote failed: ${why}` };
110
+ return { ok: false, steps: [], worker: 'remote', model: provider.model, reason: `remote failed: ${e.message}` };
115
111
  }
116
112
  }
117
113
  //# sourceMappingURL=plan.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/commands/plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/commands/plan.ts"],"names":[],"mappings":"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"}
@@ -14,11 +14,9 @@ import { truncateLines, extractTraceback } from '../lib/compress.js';
14
14
  import { loadState, saveState, appendSousChefEvent } from '../core/state.js';
15
15
  import { projectExists, loadProjectConfig } from '../core/project.js';
16
16
  import { triageOutput, shouldTriage } from '../core/triage.js';
17
- import { geminiGenerate } from '../core/gemini.js';
18
- import { loadGeminiKey } from '../core/keys.js';
17
+ import { firstAvailableProvider } from '../core/remoteRouter.js';
19
18
  import { shouldShowRemoteCodeNotice, remoteCodeNoticeText } from '../core/consent.js';
20
19
  import { c, log } from '../lib/ui.js';
21
- const REMOTE_TRIAGE_MODEL = 'gemini-2.5-flash-lite';
22
20
  function maybeShowRemoteCodeNotice(task, model) {
23
21
  try {
24
22
  const s = loadState();
@@ -71,22 +69,20 @@ export async function handleRun(command, opts = {}) {
71
69
  const rawForTriage = [result.stdout, result.stderr].filter(Boolean).join('\n').trim();
72
70
  if (cfg?.ollama && shouldTriage(rawForTriage, cfg.ollama)) {
73
71
  // Triage output is code-bearing, so a remote fallback is only offered when
74
- // the project opted into allowRemoteCode AND a key is present.
72
+ // the project opted into allowRemoteCode AND a provider key is present.
75
73
  let remoteGenerate;
76
74
  let remoteModel = null;
77
75
  if (cfg.remote?.allowRemoteCode === true) {
78
- const key = loadGeminiKey();
79
- if (key) {
80
- remoteModel = REMOTE_TRIAGE_MODEL;
81
- remoteGenerate = (prompt) => geminiGenerate(prompt, {
82
- apiKey: key, model: REMOTE_TRIAGE_MODEL, timeoutMs: 30000,
83
- });
76
+ const provider = firstAvailableProvider(process.env, cfg.remote?.provider);
77
+ if (provider) {
78
+ remoteModel = `${provider.label} · ${provider.model}`;
79
+ remoteGenerate = (prompt) => provider.generate(prompt);
84
80
  }
85
81
  }
86
82
  const triaged = await triageOutput(rawForTriage, cfg.ollama, { remoteGenerate });
87
83
  if (triaged.triaged) {
88
84
  if (triaged.remote) {
89
- maybeShowRemoteCodeNotice('output_triage', remoteModel ?? REMOTE_TRIAGE_MODEL);
85
+ maybeShowRemoteCodeNotice('output_triage', remoteModel ?? 'free-tier');
90
86
  }
91
87
  const who = triaged.remote ? `free-tier ${remoteModel}` : 'local model';
92
88
  savedOutput = [
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/run.ts"],"names":[],"mappings":"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"}
@@ -46,7 +46,7 @@ export interface CockpitViewModel {
46
46
  coming: ComingVM[];
47
47
  generatedAt: string;
48
48
  }
49
- export declare function buildCockpitViewModel(log: SousChefEvent[]): CockpitViewModel;
49
+ export declare function buildCockpitViewModel(log: SousChefEvent[], quotaLookup?: (providerId: string) => number | null): CockpitViewModel;
50
50
  /** Turn the real event log into helpcode-shell-style terminal lines. */
51
51
  export declare function buildCliLines(log: SousChefEvent[]): CliLineVM[];
52
52
  export declare function renderCockpitHtml(vm: CockpitViewModel): string;
@@ -16,6 +16,18 @@
16
16
  */
17
17
  import { summariseWorkers, sessionMetrics } from './cockpit.js';
18
18
  const RECENT_CAP = 12;
19
+ /** Map a model string back to its provider id, for quota lookup. */
20
+ function providerIdFromModel(model) {
21
+ if (!model)
22
+ return null;
23
+ if (model.startsWith('gemini'))
24
+ return 'gemini';
25
+ if (model.startsWith('grok'))
26
+ return 'grok';
27
+ if (model.startsWith('gpt'))
28
+ return 'openai';
29
+ return null;
30
+ }
19
31
  function tierLabel(kind) {
20
32
  switch (kind) {
21
33
  case 'local': return 'local';
@@ -32,15 +44,27 @@ function comingCatalogue() {
32
44
  { name: 'Live quota bars', note: 'real per-provider free-tier usage tracking' },
33
45
  ];
34
46
  }
35
- export function buildCockpitViewModel(log) {
36
- const workers = summariseWorkers(log).map(w => ({
37
- model: w.model ?? tierLabel(w.kind),
38
- kind: w.kind,
39
- tierLabel: tierLabel(w.kind),
40
- events: w.eventsThisSession,
41
- lastSummary: w.lastSummary,
42
- quotaUsed: w.quotaUsed,
43
- }));
47
+ export function buildCockpitViewModel(log, quotaLookup) {
48
+ const workers = summariseWorkers(log).map(w => {
49
+ let quotaUsed = w.quotaUsed;
50
+ // For remote workers, look up real quota fraction by provider id.
51
+ if (w.kind === 'remote' && quotaLookup) {
52
+ const pid = providerIdFromModel(w.model);
53
+ if (pid) {
54
+ const frac = quotaLookup(pid);
55
+ if (frac !== null)
56
+ quotaUsed = frac;
57
+ }
58
+ }
59
+ return {
60
+ model: w.model ?? tierLabel(w.kind),
61
+ kind: w.kind,
62
+ tierLabel: tierLabel(w.kind),
63
+ events: w.eventsThisSession,
64
+ lastSummary: w.lastSummary,
65
+ quotaUsed,
66
+ };
67
+ });
44
68
  const recent = [...log]
45
69
  .sort((a, b) => a.at.localeCompare(b.at))
46
70
  .slice(-RECENT_CAP)
@@ -197,7 +221,7 @@ export function renderCockpitHtml(vm) {
197
221
  --brick:#cc785c;--brick2:#da7756;--brick-dim:#2a1610;
198
222
  --font-mono:'JetBrains Mono','Fira Mono','Courier New',monospace;
199
223
  }
200
- body{background:var(--bg);color:var(--text);font-family:'system-ui',sans-serif;font-size:13px;min-height:800px;padding:12px;display:flex;flex-direction:column;gap:8px}
224
+ body{background:var(--bg);color:var(--text);font-family:'system-ui',sans-serif;font-size:13px;min-height:800px;padding:12px;display:flex;flex-direction:column;gap:8px;max-width:1400px;margin:0 auto}
201
225
  .sr-only{position:absolute;width:1px;height:1px;overflow:hidden}
202
226
  .topbar{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--bg2);border:0.5px solid var(--border);border-radius:8px}
203
227
  .topbar-left{display:flex;align-items:center;gap:12px}
@@ -354,7 +378,7 @@ footer{color:var(--text3);font-size:10px;margin-top:4px;padding:8px 4px;text-ali
354
378
  <span style="margin-left:6px;font-size:10px;color:var(--text3)">helpcode · sous-chef shell · live</span>
355
379
  </div>
356
380
  <div class="cli-output">
357
- \${vm.cli.map(l => \`<div class="cli-line-\${l.kind}">\${esc(l.text)}</div>\`).join('')}
381
+ ${vm.cli.map(l => `<div class="cli-line-${l.kind}">${esc(l.text)}</div>`).join('')}
358
382
  </div>
359
383
  <div class="cli-input-row">
360
384
  <span class="cli-prompt">\u276f</span>
@@ -1 +1 @@
1
- {"version":3,"file":"cockpitHtml.js","sourceRoot":"","sources":["../../../src/core/cockpitHtml.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cockpitHtml.js","sourceRoot":"","sources":["../../../src/core/cockpitHtml.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,12 @@
15
15
  * process.env). Returns the key string, or null if none is configured.
16
16
  */
17
17
  export declare function loadGeminiKey(cwd?: string, env?: Record<string, string | undefined>): string | null;
18
+ /**
19
+ * Resolve an API key for any provider, by its env var name, with the same
20
+ * precedence: env var first, then .helpcode/keys.json (keyed by a short name).
21
+ * `envVar` is e.g. "XAI_API_KEY"; `fileKey` is the keys.json field, e.g. "grok".
22
+ */
23
+ export declare function loadProviderKey(envVar: string, fileKey: string, cwd?: string, env?: Record<string, string | undefined>): string | null;
18
24
  /**
19
25
  * Whether a keys.json exists but is NOT gitignored — a footgun worth warning
20
26
  * about (the user could commit their key). Best-effort: checks for a literal
@@ -39,6 +39,30 @@ export function loadGeminiKey(cwd = process.cwd(), env = process.env) {
39
39
  return null;
40
40
  }
41
41
  }
42
+ /**
43
+ * Resolve an API key for any provider, by its env var name, with the same
44
+ * precedence: env var first, then .helpcode/keys.json (keyed by a short name).
45
+ * `envVar` is e.g. "XAI_API_KEY"; `fileKey` is the keys.json field, e.g. "grok".
46
+ */
47
+ export function loadProviderKey(envVar, fileKey, cwd = process.cwd(), env = process.env) {
48
+ const fromEnv = env[envVar];
49
+ if (typeof fromEnv === 'string' && fromEnv.trim().length > 0) {
50
+ return fromEnv.trim();
51
+ }
52
+ const file = path.join(cwd, KEYS_FILE);
53
+ if (!fs.existsSync(file))
54
+ return null;
55
+ try {
56
+ const parsed = JSON.parse(fs.readFileSync(file, 'utf-8'));
57
+ const k = parsed?.[fileKey];
58
+ if (typeof k === 'string' && k.trim().length > 0)
59
+ return k.trim();
60
+ return null;
61
+ }
62
+ catch {
63
+ return null;
64
+ }
65
+ }
42
66
  /**
43
67
  * Whether a keys.json exists but is NOT gitignored — a footgun worth warning
44
68
  * about (the user could commit their key). Best-effort: checks for a literal
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/core/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAEtD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAc,OAAO,CAAC,GAAG,EAAE,EAC3B,MAA0C,OAAO,CAAC,GAAG;IAErD,6DAA6D;IAC7D,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,CAAC;IACnC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7D,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,yBAAyB;IACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC;QACzB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,qDAAqD;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAE3C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,8BAA8B;IAE9E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC7B,CAAC,KAAK,YAAY;YAClB,CAAC,KAAK,WAAW;YACjB,CAAC,KAAK,qBAAqB;YAC3B,CAAC,KAAK,WAAW;YACjB,CAAC,KAAK,aAAa,CACpB,CAAC;QACF,OAAO,CAAC,OAAO,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/core/keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * OpenAI-compatible remote sous-chef providers (v0.3.5).
3
+ *
4
+ * Kimi (Moonshot), Grok (xAI), and ChatGPT (OpenAI) all expose the same
5
+ * OpenAI chat-completions API shape, so they share ONE client
6
+ * (openaiCompatGenerate) and differ only in configuration: base URL, default
7
+ * model, env var, and free-tier data-policy note. To users they're three
8
+ * distinct providers (three panels, three keys); under the hood, one code path.
9
+ *
10
+ * Gemini stays separate (core/gemini.ts) because its REST shape differs.
11
+ *
12
+ * PRIVACY: every provider here is a free tier that MAY train on inputs (Grok's
13
+ * free credits are explicitly a data-sharing program; Gemini likewise; Kimi
14
+ * verify per current terms). So all are governed by the same privacy gate in
15
+ * core/souschef.ts — decomposition by default, code only with allowRemoteCode.
16
+ * The freeTierNote is surfaced so the user sees the tradeoff per provider.
17
+ */
18
+ export interface ProviderConfig {
19
+ id: string;
20
+ /** Human label for the cockpit. */
21
+ label: string;
22
+ /** OpenAI-compatible base URL (without the /chat/completions suffix). */
23
+ baseUrl: string;
24
+ /** Default model id for this provider's free/cheap tier. */
25
+ defaultModel: string;
26
+ /** Env var that holds this provider's API key. */
27
+ envVar: string;
28
+ /** One-line note on the free-tier data/training policy. */
29
+ freeTierNote: string;
30
+ }
31
+ /**
32
+ * The registry. Models/URLs verified around mid-2026; they drift, so they're
33
+ * config, not hardcoded logic — easy to bump. Pick exact models at use time if
34
+ * a default is deprecated.
35
+ */
36
+ export declare const PROVIDERS: ProviderConfig[];
37
+ export declare function getProvider(id: string): ProviderConfig | null;
38
+ export declare class OpenAICompatError extends Error {
39
+ readonly quotaExhausted: boolean;
40
+ constructor(message: string, quotaExhausted?: boolean);
41
+ }
42
+ type FetchImpl = (url: string, init?: RequestInit) => Promise<Response>;
43
+ export interface OpenAICompatCall {
44
+ baseUrl: string;
45
+ model: string;
46
+ apiKey: string;
47
+ timeoutMs: number;
48
+ }
49
+ export interface OpenAICompatDeps {
50
+ fetchImpl?: FetchImpl;
51
+ }
52
+ /** Extract the assistant message content from a chat-completions body. */
53
+ export declare function parseChatCompletion(body: any): string;
54
+ /**
55
+ * Call any OpenAI-compatible chat-completions endpoint. Returns the text on
56
+ * success; throws OpenAICompatError on any failure (quotaExhausted set for
57
+ * 429s) so callers fall back to a cheaper worker.
58
+ */
59
+ export declare function openaiCompatGenerate(prompt: string, call: OpenAICompatCall, deps?: OpenAICompatDeps): Promise<string>;
60
+ export {};
@@ -0,0 +1,109 @@
1
+ /**
2
+ * OpenAI-compatible remote sous-chef providers (v0.3.5).
3
+ *
4
+ * Kimi (Moonshot), Grok (xAI), and ChatGPT (OpenAI) all expose the same
5
+ * OpenAI chat-completions API shape, so they share ONE client
6
+ * (openaiCompatGenerate) and differ only in configuration: base URL, default
7
+ * model, env var, and free-tier data-policy note. To users they're three
8
+ * distinct providers (three panels, three keys); under the hood, one code path.
9
+ *
10
+ * Gemini stays separate (core/gemini.ts) because its REST shape differs.
11
+ *
12
+ * PRIVACY: every provider here is a free tier that MAY train on inputs (Grok's
13
+ * free credits are explicitly a data-sharing program; Gemini likewise; Kimi
14
+ * verify per current terms). So all are governed by the same privacy gate in
15
+ * core/souschef.ts — decomposition by default, code only with allowRemoteCode.
16
+ * The freeTierNote is surfaced so the user sees the tradeoff per provider.
17
+ */
18
+ /**
19
+ * The registry. Models/URLs verified around mid-2026; they drift, so they're
20
+ * config, not hardcoded logic — easy to bump. Pick exact models at use time if
21
+ * a default is deprecated.
22
+ */
23
+ export const PROVIDERS = [
24
+ {
25
+ id: 'grok',
26
+ label: 'Grok',
27
+ baseUrl: 'https://api.x.ai/v1',
28
+ defaultModel: 'grok-4.1-fast',
29
+ envVar: 'XAI_API_KEY',
30
+ freeTierNote: 'xAI free credits via data-sharing — inputs MAY train xAI models.',
31
+ },
32
+ {
33
+ id: 'openai',
34
+ label: 'ChatGPT',
35
+ baseUrl: 'https://api.openai.com/v1',
36
+ defaultModel: 'gpt-5.4-mini',
37
+ envVar: 'OPENAI_API_KEY',
38
+ freeTierNote: 'OpenAI API — check whether your account/tier trains on inputs.',
39
+ },
40
+ ];
41
+ export function getProvider(id) {
42
+ return PROVIDERS.find(p => p.id === id) ?? null;
43
+ }
44
+ // --- the shared OpenAI-compatible client ---------------------------------
45
+ export class OpenAICompatError extends Error {
46
+ quotaExhausted;
47
+ constructor(message, quotaExhausted = false) {
48
+ super(message);
49
+ this.name = 'OpenAICompatError';
50
+ this.quotaExhausted = quotaExhausted;
51
+ }
52
+ }
53
+ const DEFAULT_TIMEOUT = 30000;
54
+ /** Extract the assistant message content from a chat-completions body. */
55
+ export function parseChatCompletion(body) {
56
+ const choice = body?.choices?.[0];
57
+ const content = choice?.message?.content;
58
+ return typeof content === 'string' ? content : '';
59
+ }
60
+ /**
61
+ * Call any OpenAI-compatible chat-completions endpoint. Returns the text on
62
+ * success; throws OpenAICompatError on any failure (quotaExhausted set for
63
+ * 429s) so callers fall back to a cheaper worker.
64
+ */
65
+ export async function openaiCompatGenerate(prompt, call, deps = {}) {
66
+ const fetchImpl = deps.fetchImpl ?? globalThis.fetch;
67
+ const timeoutMs = call.timeoutMs ?? DEFAULT_TIMEOUT;
68
+ const url = `${call.baseUrl.replace(/\/$/, '')}/chat/completions`;
69
+ const controller = new AbortController();
70
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
71
+ let response;
72
+ try {
73
+ response = await fetchImpl(url, {
74
+ method: 'POST',
75
+ headers: {
76
+ 'content-type': 'application/json',
77
+ authorization: `Bearer ${call.apiKey}`,
78
+ },
79
+ body: JSON.stringify({
80
+ model: call.model,
81
+ messages: [{ role: 'user', content: prompt }],
82
+ }),
83
+ signal: controller.signal,
84
+ });
85
+ }
86
+ catch (e) {
87
+ clearTimeout(timer);
88
+ const why = e?.name === 'AbortError' ? 'timed out' : e.message;
89
+ throw new OpenAICompatError(`request failed: ${why}`);
90
+ }
91
+ clearTimeout(timer);
92
+ let body;
93
+ try {
94
+ body = await response.json();
95
+ }
96
+ catch {
97
+ throw new OpenAICompatError(`bad response (status ${response.status}, non-JSON)`);
98
+ }
99
+ if (!response.ok) {
100
+ const msg = body?.error?.message ?? `HTTP ${response.status}`;
101
+ const isQuota = response.status === 429;
102
+ throw new OpenAICompatError(`API error: ${msg}`, isQuota);
103
+ }
104
+ const text = parseChatCompletion(body).trim();
105
+ if (!text)
106
+ throw new OpenAICompatError('provider returned no usable text');
107
+ return text;
108
+ }
109
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/core/providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Per-provider quota tracking (v0.3.6).
3
+ *
4
+ * Free tiers are rate-limited per day. helpcode tracks a best-effort daily
5
+ * request count per provider so the cockpit can show a real usage bar and the
6
+ * router can skip a provider that's exhausted (after a 429). This is NOT a
7
+ * perfect mirror of each provider's accounting (which is server-side and often
8
+ * per-project, not per-key) — it's a local estimate, enough to inform routing
9
+ * and the UI.
10
+ *
11
+ * Pure functions over a QuotaState object; `now` is injectable for tests.
12
+ * Counts reset when the UTC day rolls over.
13
+ */
14
+ import { QuotaState } from '../types.js';
15
+ import { QuotaStatus } from './souschef.js';
16
+ /**
17
+ * Known free-tier daily request limits (approximate, mid-2026; they drift).
18
+ * null = unknown limit (we still count, but can't show a fraction).
19
+ */
20
+ export declare const PROVIDER_LIMITS: Record<string, number | null>;
21
+ export declare function emptyQuotas(): QuotaState;
22
+ /** Record one request against a provider (increments today's count). */
23
+ export declare function recordRequest(q: QuotaState, provider: string, now?: Date): void;
24
+ /** Mark a provider throttled until the given time (e.g. after a 429). */
25
+ export declare function markThrottled(q: QuotaState, provider: string, until: Date, now?: Date): void;
26
+ /** Is the provider currently throttled? */
27
+ export declare function isThrottled(q: QuotaState, provider: string, now?: Date): boolean;
28
+ /** Build a QuotaStatus for the cockpit/router, accounting for day reset. */
29
+ export declare function quotaFor(q: QuotaState, provider: string, now?: Date): QuotaStatus | null;
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Per-provider quota tracking (v0.3.6).
3
+ *
4
+ * Free tiers are rate-limited per day. helpcode tracks a best-effort daily
5
+ * request count per provider so the cockpit can show a real usage bar and the
6
+ * router can skip a provider that's exhausted (after a 429). This is NOT a
7
+ * perfect mirror of each provider's accounting (which is server-side and often
8
+ * per-project, not per-key) — it's a local estimate, enough to inform routing
9
+ * and the UI.
10
+ *
11
+ * Pure functions over a QuotaState object; `now` is injectable for tests.
12
+ * Counts reset when the UTC day rolls over.
13
+ */
14
+ /**
15
+ * Known free-tier daily request limits (approximate, mid-2026; they drift).
16
+ * null = unknown limit (we still count, but can't show a fraction).
17
+ */
18
+ export const PROVIDER_LIMITS = {
19
+ gemini: 1000, // Gemini 2.5 Flash-Lite free: ~1000 req/day
20
+ grok: null, // xAI free credits are $-based, not a clean req/day cap
21
+ openai: null, // depends on account tier
22
+ };
23
+ export function emptyQuotas() {
24
+ return { providers: {} };
25
+ }
26
+ function utcDay(now) {
27
+ return now.toISOString().slice(0, 10); // YYYY-MM-DD
28
+ }
29
+ /** Get the provider's record, resetting it if the stored day is stale. */
30
+ function currentRecord(q, provider, now) {
31
+ const today = utcDay(now);
32
+ const existing = q.providers[provider];
33
+ if (!existing || existing.day !== today) {
34
+ // New day (or first time): fresh count, but preserve a future throttle.
35
+ const throttledUntil = existing?.throttledUntil;
36
+ const fresh = { day: today, count: 0 };
37
+ if (throttledUntil && new Date(throttledUntil) > now) {
38
+ fresh.throttledUntil = throttledUntil;
39
+ }
40
+ q.providers[provider] = fresh;
41
+ }
42
+ return q.providers[provider];
43
+ }
44
+ /** Record one request against a provider (increments today's count). */
45
+ export function recordRequest(q, provider, now = new Date()) {
46
+ const rec = currentRecord(q, provider, now);
47
+ rec.count += 1;
48
+ }
49
+ /** Mark a provider throttled until the given time (e.g. after a 429). */
50
+ export function markThrottled(q, provider, until, now = new Date()) {
51
+ const rec = currentRecord(q, provider, now);
52
+ rec.throttledUntil = until.toISOString();
53
+ }
54
+ /** Is the provider currently throttled? */
55
+ export function isThrottled(q, provider, now = new Date()) {
56
+ const rec = q.providers[provider];
57
+ if (!rec?.throttledUntil)
58
+ return false;
59
+ return new Date(rec.throttledUntil) > now;
60
+ }
61
+ /** Build a QuotaStatus for the cockpit/router, accounting for day reset. */
62
+ export function quotaFor(q, provider, now = new Date()) {
63
+ if (!(provider in PROVIDER_LIMITS))
64
+ return null;
65
+ const today = utcDay(now);
66
+ const rec = q.providers[provider];
67
+ const usedToday = rec && rec.day === today ? rec.count : 0;
68
+ return {
69
+ usedToday,
70
+ limitPerDay: PROVIDER_LIMITS[provider],
71
+ throttled: isThrottled(q, provider, now),
72
+ };
73
+ }
74
+ //# sourceMappingURL=quota.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota.js","sourceRoot":"","sources":["../../../src/core/quota.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Remote provider routing (v0.3.5).
3
+ *
4
+ * Picks which remote sous-chef to use among the configured providers, based on
5
+ * which one has a key available. Unifies the two client shapes — Gemini (its
6
+ * own REST) and the OpenAI-compatible trio (Kimi, Grok, ChatGPT) — behind one
7
+ * `generate(prompt)` function so callers (plan, selection, triage) don't care
8
+ * which provider answered.
9
+ *
10
+ * Priority order: Gemini first (the original, most-tested), then Kimi, Grok,
11
+ * ChatGPT. A caller may pass a preferred id to override the order when that
12
+ * provider has a key.
13
+ */
14
+ import { QuotaStatus } from './souschef.js';
15
+ export interface ResolvedProvider {
16
+ id: string;
17
+ label: string;
18
+ model: string;
19
+ key: string;
20
+ freeTierNote: string;
21
+ /** Run a prompt through this provider's client. Throws on failure. */
22
+ generate: (prompt: string, timeoutMs?: number) => Promise<string>;
23
+ }
24
+ /** Read-only: current quota status for a provider (for the cockpit). */
25
+ export declare function providerQuotaStatus(id: string, cwd?: string): QuotaStatus | null;
26
+ /**
27
+ * Find the first remote provider that has a key. If `preferred` is given and
28
+ * that provider has a key, it wins; otherwise fall back to priority order.
29
+ */
30
+ export declare function firstAvailableProvider(env?: Record<string, string | undefined>, preferred?: string, cwd?: string): ResolvedProvider | null;
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Remote provider routing (v0.3.5).
3
+ *
4
+ * Picks which remote sous-chef to use among the configured providers, based on
5
+ * which one has a key available. Unifies the two client shapes — Gemini (its
6
+ * own REST) and the OpenAI-compatible trio (Kimi, Grok, ChatGPT) — behind one
7
+ * `generate(prompt)` function so callers (plan, selection, triage) don't care
8
+ * which provider answered.
9
+ *
10
+ * Priority order: Gemini first (the original, most-tested), then Kimi, Grok,
11
+ * ChatGPT. A caller may pass a preferred id to override the order when that
12
+ * provider has a key.
13
+ */
14
+ import { PROVIDERS, openaiCompatGenerate, OpenAICompatError } from './providers.js';
15
+ import { geminiGenerate, GeminiError } from './gemini.js';
16
+ import { loadGeminiKey, loadProviderKey } from './keys.js';
17
+ import { loadState, saveState } from './state.js';
18
+ import { recordRequest, markThrottled, isThrottled, quotaFor } from './quota.js';
19
+ const GEMINI_MODEL = 'gemini-2.5-flash-lite';
20
+ /** Priority order for auto-selection (Gemini first, then the OAI-compat trio). */
21
+ const PRIORITY = ['gemini', 'grok', 'openai'];
22
+ /**
23
+ * Persist a quota mutation: load state, mutate its quotas, save. Best-effort —
24
+ * quota tracking must never break the actual generation.
25
+ */
26
+ function withQuota(mutate) {
27
+ try {
28
+ const state = loadState();
29
+ if (!state.quotas)
30
+ state.quotas = { providers: {} };
31
+ mutate(state.quotas);
32
+ saveState(state);
33
+ }
34
+ catch {
35
+ // ignore — quota is advisory
36
+ }
37
+ }
38
+ /** Wrap a provider's raw generate to record usage and mark throttling on 429. */
39
+ function trackedGenerate(id, raw) {
40
+ return async (prompt, timeoutMs) => {
41
+ withQuota(q => recordRequest(q, id));
42
+ try {
43
+ return await raw(prompt, timeoutMs);
44
+ }
45
+ catch (e) {
46
+ const quotaHit = (e instanceof GeminiError && e.quotaExhausted)
47
+ || (e instanceof OpenAICompatError && e.quotaExhausted);
48
+ if (quotaHit) {
49
+ // back off this provider for an hour (best-effort; real retry-after varies)
50
+ const until = new Date(Date.now() + 60 * 60 * 1000);
51
+ withQuota(q => markThrottled(q, id, until));
52
+ }
53
+ throw e;
54
+ }
55
+ };
56
+ }
57
+ function makeGemini(key) {
58
+ const raw = (prompt, timeoutMs = 30000) => geminiGenerate(prompt, { apiKey: key, model: GEMINI_MODEL, timeoutMs });
59
+ return {
60
+ id: 'gemini',
61
+ label: 'Gemini',
62
+ model: GEMINI_MODEL,
63
+ key,
64
+ freeTierNote: 'Gemini free tier — inputs may train Google models.',
65
+ generate: trackedGenerate('gemini', raw),
66
+ };
67
+ }
68
+ function makeOpenAICompat(p, key) {
69
+ const raw = (prompt, timeoutMs = 30000) => openaiCompatGenerate(prompt, {
70
+ baseUrl: p.baseUrl, model: p.defaultModel, apiKey: key, timeoutMs,
71
+ });
72
+ return {
73
+ id: p.id,
74
+ label: p.label,
75
+ model: p.defaultModel,
76
+ key,
77
+ freeTierNote: p.freeTierNote,
78
+ generate: trackedGenerate(p.id, raw),
79
+ };
80
+ }
81
+ /** Resolve a single provider by id, if it has a key and isn't throttled. */
82
+ function resolveById(id, env, cwd) {
83
+ // Skip a provider currently backed off after a 429.
84
+ try {
85
+ const state = loadState(cwd);
86
+ if (state.quotas && isThrottled(state.quotas, id))
87
+ return null;
88
+ }
89
+ catch {
90
+ // if state can't be read, don't block resolution
91
+ }
92
+ if (id === 'gemini') {
93
+ const key = loadGeminiKey(cwd, env);
94
+ return key ? makeGemini(key) : null;
95
+ }
96
+ const p = PROVIDERS.find(x => x.id === id);
97
+ if (!p)
98
+ return null;
99
+ const key = loadProviderKey(p.envVar, p.id, cwd, env);
100
+ return key ? makeOpenAICompat(p, key) : null;
101
+ }
102
+ /** Read-only: current quota status for a provider (for the cockpit). */
103
+ export function providerQuotaStatus(id, cwd = process.cwd()) {
104
+ try {
105
+ const state = loadState(cwd);
106
+ if (!state.quotas)
107
+ return null;
108
+ return quotaFor(state.quotas, id);
109
+ }
110
+ catch {
111
+ return null;
112
+ }
113
+ }
114
+ /**
115
+ * Find the first remote provider that has a key. If `preferred` is given and
116
+ * that provider has a key, it wins; otherwise fall back to priority order.
117
+ */
118
+ export function firstAvailableProvider(env = process.env, preferred, cwd = process.cwd()) {
119
+ if (preferred) {
120
+ const p = resolveById(preferred, env, cwd);
121
+ if (p)
122
+ return p;
123
+ }
124
+ for (const id of PRIORITY) {
125
+ const p = resolveById(id, env, cwd);
126
+ if (p)
127
+ return p;
128
+ }
129
+ return null;
130
+ }
131
+ //# sourceMappingURL=remoteRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remoteRouter.js","sourceRoot":"","sources":["../../../src/core/remoteRouter.ts"],"names":[],"mappings":"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"}
@@ -16,11 +16,9 @@ import * as fs from 'fs';
16
16
  import * as path from 'path';
17
17
  import { isOllamaReachable } from './ollama.js';
18
18
  import { llmSelectFiles, selectFilesWithGenerate } from './llmSelector.js';
19
- import { geminiGenerate } from './gemini.js';
20
- import { loadGeminiKey } from './keys.js';
19
+ import { firstAvailableProvider } from './remoteRouter.js';
21
20
  import { shouldShowRemoteCodeNotice, remoteCodeNoticeText } from './consent.js';
22
21
  import { loadState, saveState } from './state.js';
23
- const REMOTE_SELECTION_MODEL = 'gemini-2.5-flash-lite';
24
22
  /**
25
23
  * Show the one-time "code is leaving the machine to a free tier" notice if it
26
24
  * hasn't been shown before, and persist that it has. Best-effort; never throws.
@@ -99,27 +97,26 @@ export async function selectFilesWithStrategy(taskDescription, config, opts = {}
99
97
  return heuristicResult(taskDescription, config, wantLlm ? 'local model unavailable; used keyword heuristic' : '');
100
98
  }
101
99
  /**
102
- * Attempt remote file selection via Gemini. Returns null on any failure (caller
103
- * falls back to heuristic). Shows the one-time code-consent notice on first use.
100
+ * Attempt remote file selection via the first available free-tier provider.
101
+ * Returns null on any failure (caller falls back to heuristic). Shows the
102
+ * one-time code-consent notice on first use.
104
103
  */
105
104
  async function tryRemoteSelection(taskDescription, config) {
106
- const key = loadGeminiKey();
107
- if (!key)
105
+ const provider = firstAvailableProvider(process.env, config.remote?.provider);
106
+ if (!provider)
108
107
  return null;
109
108
  // One-time consent notice (code is about to leave the machine to a free tier).
110
- maybeShowRemoteCodeNotice('file_selection', REMOTE_SELECTION_MODEL);
109
+ maybeShowRemoteCodeNotice('file_selection', `${provider.label} · ${provider.model}`);
111
110
  try {
112
111
  const allFiles = walkAllSourceFiles(config).slice(0, LLM_CANDIDATE_CAP);
113
- const selections = await selectFilesWithGenerate(taskDescription, allFiles, config.root, MAX_RESULTS, (prompt) => geminiGenerate(prompt, {
114
- apiKey: key, model: REMOTE_SELECTION_MODEL, timeoutMs: 30000,
115
- }));
112
+ const selections = await selectFilesWithGenerate(taskDescription, allFiles, config.root, MAX_RESULTS, (prompt) => provider.generate(prompt));
116
113
  if (selections.length === 0)
117
114
  return null;
118
115
  const files = selections.map(s => ({
119
116
  filepath: path.join(config.root, s.path),
120
117
  reason: s.reason,
121
118
  }));
122
- return { files, strategy: 'remote', fallbackReason: '', remoteModel: REMOTE_SELECTION_MODEL };
119
+ return { files, strategy: 'remote', fallbackReason: '', remoteModel: provider.model };
123
120
  }
124
121
  catch {
125
122
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"selector.js","sourceRoot":"","sources":["../../../src/core/selector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"selector.js","sourceRoot":"","sources":["../../../src/core/selector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGlD;;;GAGG;AACH,SAAS,yBAAyB,CAAC,IAAkB,EAAE,KAAa;IAClE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;QACjE,IAAI,0BAA0B,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;YAC9E,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YACzD,KAAK,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC;YACtE,SAAS,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;AACH,CAAC;AAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa;IAC7D,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IACxD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ;CACtD,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IACxD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAC3C,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,iBAAiB,GAAG,EAAE,CAAC,CAAG,4CAA4C;AAyB5E;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,eAAuB,EACvB,MAAqB,EACrB,OAAqC,EAAE;IAEvC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEjE,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;gBACxE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,eAAe,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE;oBAC9E,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,KAAK,EAAE,WAAW;oBAClB,SAAS,EAAE,MAAM,CAAC,SAAS;iBAC5B,CAAC,CAAC;gBACH,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1B,MAAM,KAAK,GAAmB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACjD,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;wBACxC,MAAM,EAAE,CAAC,CAAC,MAAM;qBACjB,CAAC,CAAC,CAAC;oBACJ,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;gBACxD,CAAC;gBACD,mCAAmC;YACrC,CAAC;YAAC,MAAM,CAAC;gBACP,mCAAmC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,uEAAuE;IACvE,mEAAmE;IACnE,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QACjE,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;IAC5B,CAAC;IAED,OAAO,eAAe,CAAC,eAAe,EAAE,MAAM,EAC5C,OAAO,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,kBAAkB,CAC/B,eAAuB,EACvB,MAAqB;IAErB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9E,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,+EAA+E;IAC/E,yBAAyB,CAAC,gBAAgB,EAAE,GAAG,QAAQ,CAAC,KAAK,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAErF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACxE,MAAM,UAAU,GAAG,MAAM,uBAAuB,CAC9C,eAAe,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EACnD,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CACtC,CAAC;QACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACzC,MAAM,KAAK,GAAmB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACjD,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;YACxC,MAAM,EAAE,CAAC,CAAC,MAAM;SACjB,CAAC,CAAC,CAAC;QACJ,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,eAAuB,EACvB,MAAqB,EACrB,cAAsB;IAEtB,MAAM,KAAK,GAAG,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClE,QAAQ;QACR,MAAM,EAAE,sCAAsC;KAC/C,CAAC,CAAC,CAAC;IACJ,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;AAC1D,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,kBAAkB,CAAC,MAAqB;IACtD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACtE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,SAAS;QACpC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,eAAuB,EAAE,MAAqB;IACxE,MAAM,QAAQ,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;IAClD,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,SAAS;QACpC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;YACjB,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACxC,IAAI,KAAK,GAAG,CAAC;gBAAE,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC/D,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,QAAkB;IAC5D,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;IAED,oEAAoE;IACpE,kEAAkE;IAClE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAC/B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACnD,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,KAAK,IAAI,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAC3C,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,OAAO,GAAG,CAAC;YAAE,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,sBAAsB;IACxE,CAAC;IAED,gBAAgB;IAChB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACrF,IAAI,OAAO,IAAI,mBAAmB;YAAE,KAAK,IAAI,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,oEAAoE;IACpE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;QACxB,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;QAChE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI;QAC/D,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;QAC/D,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI;QAC/D,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO;QAC5D,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ;KAC/B,CAAC,CAAC;IACH,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB,EAAE,MAAc;IACxD,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IACtB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACpD,KAAK,EAAE,CAAC;QACR,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,IAAI,CAAC,GAAW,EAAE,QAAoC;IAC7D,IAAI,OAAoB,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACxE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1B,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBAC9C,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
package/dist/src/index.js CHANGED
@@ -20,7 +20,7 @@ import { handleCockpit } from './commands/cockpit.js';
20
20
  import { handleReset } from './commands/reset.js';
21
21
  import { HelpcodeError } from './lib/errors.js';
22
22
  import { c, log } from './lib/ui.js';
23
- const VERSION = '0.3.4';
23
+ const VERSION = '0.3.6';
24
24
  const HELP = `helpcode v${VERSION}
25
25
 
26
26
  A local agent that makes Claude.ai conversations efficient enough to ship
@@ -37,6 +37,12 @@ export interface RemoteSettings {
37
37
  * effect.
38
38
  */
39
39
  allowRemoteCode: boolean;
40
+ /**
41
+ * Preferred remote provider id ("gemini" | "kimi" | "grok" | "openai"). If
42
+ * set and that provider has a key, it's used; otherwise helpcode falls back
43
+ * to priority order among providers that have keys.
44
+ */
45
+ provider?: string;
40
46
  }
41
47
  /** Local-LLM configuration. Opt-in; absent or disabled = heuristic only. */
42
48
  export interface OllamaSettings {
@@ -66,12 +72,26 @@ export interface AgentState {
66
72
  sousChefLog: SousChefEvent[];
67
73
  /** One-time UI flags (e.g. consent notices already shown). Optional. */
68
74
  flags?: StateFlags;
75
+ /** Per-provider quota tracking (v0.3.6). Optional; absent = none recorded. */
76
+ quotas?: QuotaState;
69
77
  }
70
78
  /** One-time flags persisted so we don't repeat notices. All optional. */
71
79
  export interface StateFlags {
72
80
  /** True once the "sending code to a free tier" notice has been shown. */
73
81
  remoteCodeNoticeShown?: boolean;
74
82
  }
83
+ /** Per-provider quota tracking (v0.3.6). */
84
+ export interface ProviderQuota {
85
+ /** UTC day (YYYY-MM-DD) the count applies to. */
86
+ day: string;
87
+ /** Requests made on that day. */
88
+ count: number;
89
+ /** ISO timestamp the provider is throttled until (after a 429), if any. */
90
+ throttledUntil?: string;
91
+ }
92
+ export interface QuotaState {
93
+ providers: Record<string, ProviderQuota>;
94
+ }
75
95
  export interface CurrentTask {
76
96
  id: string;
77
97
  description: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@manishbht/helpcode",
3
- "version": "0.3.4",
3
+ "version": "0.3.6",
4
4
  "description": "A local agent that makes Claude.ai conversations efficient enough to ship real projects on a Pro subscription.",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",