gnosys 4.4.4 → 4.4.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -234,17 +234,49 @@ export function getProviderModel(config, provider) {
234
234
  default: return config.llm.anthropic.model;
235
235
  }
236
236
  }
237
+ /**
238
+ * Resolve an API key from multiple sources in priority order:
239
+ * 1. Config (gnosys.json)
240
+ * 2. GNOSYS_<PROVIDER>_KEY env var (new convention)
241
+ * 3. macOS Keychain (if on macOS)
242
+ * 4. Legacy env var (ANTHROPIC_API_KEY, etc.)
243
+ * 5. ~/.config/gnosys/.env (read at startup)
244
+ */
245
+ function resolveApiKey(configKey, gnosysEnvVar, legacyEnvVar) {
246
+ // 1. Config value
247
+ if (configKey)
248
+ return configKey;
249
+ // 2. New GNOSYS_*_KEY env var
250
+ if (process.env[gnosysEnvVar])
251
+ return process.env[gnosysEnvVar];
252
+ // 3. macOS Keychain
253
+ if (process.platform === "darwin") {
254
+ try {
255
+ const { execSync } = require("child_process");
256
+ const result = execSync(`security find-generic-password -a "$USER" -s "${gnosysEnvVar}" -w 2>/dev/null`, { stdio: "pipe", encoding: "utf-8", timeout: 2000 }).trim();
257
+ if (result)
258
+ return result;
259
+ }
260
+ catch {
261
+ // Not in keychain — fall through
262
+ }
263
+ }
264
+ // 4. Legacy env var
265
+ if (legacyEnvVar && process.env[legacyEnvVar])
266
+ return process.env[legacyEnvVar];
267
+ return undefined;
268
+ }
237
269
  /**
238
270
  * Get the Groq API key, checking config first then env var.
239
271
  */
240
272
  export function getGroqApiKey(config) {
241
- return config.llm.groq.apiKey || process.env.GROQ_API_KEY;
273
+ return resolveApiKey(config.llm.groq.apiKey, "GNOSYS_GROQ_KEY", "GROQ_API_KEY");
242
274
  }
243
275
  /**
244
276
  * Get the OpenAI API key, checking config first then env var.
245
277
  */
246
278
  export function getOpenAIApiKey(config) {
247
- return config.llm.openai.apiKey || process.env.OPENAI_API_KEY;
279
+ return resolveApiKey(config.llm.openai.apiKey, "GNOSYS_OPENAI_KEY", "OPENAI_API_KEY");
248
280
  }
249
281
  /**
250
282
  * Get the OpenAI base URL from config.
@@ -262,7 +294,7 @@ export function getLMStudioBaseUrl(config) {
262
294
  * Get the Anthropic API key, checking config first then env var.
263
295
  */
264
296
  export function getAnthropicApiKey(config) {
265
- return config.llm.anthropic.apiKey || process.env.ANTHROPIC_API_KEY;
297
+ return resolveApiKey(config.llm.anthropic.apiKey, "GNOSYS_ANTHROPIC_KEY", "ANTHROPIC_API_KEY");
266
298
  }
267
299
  /**
268
300
  * Get the Ollama base URL from config.
@@ -274,19 +306,19 @@ export function getOllamaBaseUrl(config) {
274
306
  * Get the xAI API key, checking config first then env var.
275
307
  */
276
308
  export function getXAIApiKey(config) {
277
- return config.llm.xai.apiKey || process.env.XAI_API_KEY;
309
+ return resolveApiKey(config.llm.xai.apiKey, "GNOSYS_XAI_KEY", "XAI_API_KEY");
278
310
  }
279
311
  /**
280
312
  * Get the Mistral API key, checking config first then env var.
281
313
  */
282
314
  export function getMistralApiKey(config) {
283
- return config.llm.mistral.apiKey || process.env.MISTRAL_API_KEY;
315
+ return resolveApiKey(config.llm.mistral.apiKey, "GNOSYS_MISTRAL_KEY", "MISTRAL_API_KEY");
284
316
  }
285
317
  /**
286
318
  * Get the Custom provider API key, checking config first then env var.
287
319
  */
288
320
  export function getCustomApiKey(config) {
289
- return config.llm.custom?.apiKey || process.env.GNOSYS_LLM_API_KEY;
321
+ return resolveApiKey(config.llm.custom?.apiKey, "GNOSYS_CUSTOM_KEY", "GNOSYS_LLM_API_KEY");
290
322
  }
291
323
  // ─── Migration ───────────────────────────────────────────────────────────
292
324
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * Gnosys Interactive Setup Wizard.
3
3
  *
4
4
  * Guides users through provider selection, model tier, API key storage,
5
- * IDE integration, and optional web knowledge base configuration.
5
+ * IDE integration. Web knowledge base is set up separately via: gnosys web init
6
6
  *
7
7
  * Uses Node.js built-in readline/promises — no external dependencies.
8
8
  */
@@ -19,10 +19,19 @@ export interface SetupResult {
19
19
  structuringModel: string;
20
20
  apiKeyWritten: boolean;
21
21
  ides: string[];
22
- mode: "agent" | "web" | "both";
22
+ mode: "agent";
23
23
  upgraded: boolean;
24
24
  }
25
25
  export declare const PROVIDER_TIERS: Record<string, ModelTier[]>;
26
+ /**
27
+ * Fetch models from OpenRouter, cache for 24 hours, fall back to hardcoded.
28
+ * Returns updated PROVIDER_TIERS for cloud providers only.
29
+ */
30
+ export declare function fetchDynamicModels(): Promise<Record<string, ModelTier[]>>;
31
+ /**
32
+ * Get model tiers for a provider — tries dynamic first, falls back to hardcoded.
33
+ */
34
+ export declare function getModelTiers(provider: string): Promise<ModelTier[]>;
26
35
  /**
27
36
  * Returns the cheapest capable model for structuring tasks.
28
37
  * Structuring (keyword extraction, tagging) doesn't need a flagship model.
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/lib/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAwCH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAkCtD,CAAC;AAsCF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAUjF;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC9E;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA4BtE;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAsEhD;AA8HD,wBAAsB,QAAQ,CAAC,IAAI,EAAE;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,WAAW,CAAC,CAqZvB"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/lib/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAwCH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAkCtD,CAAC;AAyBF;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CA2F/E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAM1E;AAsCD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAUjF;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC9E;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA4BtE;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAsEhD;AA8HD,wBAAsB,QAAQ,CAAC,IAAI,EAAE;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,WAAW,CAAC,CA+cvB"}
package/dist/lib/setup.js CHANGED
@@ -2,7 +2,7 @@
2
2
  * Gnosys Interactive Setup Wizard.
3
3
  *
4
4
  * Guides users through provider selection, model tier, API key storage,
5
- * IDE integration, and optional web knowledge base configuration.
5
+ * IDE integration. Web knowledge base is set up separately via: gnosys web init
6
6
  *
7
7
  * Uses Node.js built-in readline/promises — no external dependencies.
8
8
  */
@@ -71,6 +71,120 @@ export const PROVIDER_TIERS = {
71
71
  ],
72
72
  custom: [],
73
73
  };
74
+ // ─── Dynamic Model Fetching (OpenRouter) ─────────────────────────────────────
75
+ const OPENROUTER_API = "https://openrouter.ai/api/v1/models";
76
+ const CACHE_FILE = path.join(os.homedir(), ".config", "gnosys", "models-cache.json");
77
+ const CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
78
+ // Map OpenRouter provider prefixes to our provider names
79
+ const OPENROUTER_PREFIX_MAP = {
80
+ anthropic: "anthropic",
81
+ openai: "openai",
82
+ "x-ai": "xai",
83
+ mistralai: "mistral",
84
+ // groq models are on OpenRouter under meta-llama but groq-hosted
85
+ // We skip dynamic for groq/ollama/lmstudio since they're local or have specific APIs
86
+ };
87
+ /**
88
+ * Fetch models from OpenRouter, cache for 24 hours, fall back to hardcoded.
89
+ * Returns updated PROVIDER_TIERS for cloud providers only.
90
+ */
91
+ export async function fetchDynamicModels() {
92
+ // Check cache first
93
+ try {
94
+ const stat = await fs.stat(CACHE_FILE);
95
+ if (Date.now() - stat.mtimeMs < CACHE_TTL_MS) {
96
+ const cached = JSON.parse(await fs.readFile(CACHE_FILE, "utf-8"));
97
+ if (cached && typeof cached === "object")
98
+ return cached;
99
+ }
100
+ }
101
+ catch {
102
+ // No cache or expired
103
+ }
104
+ // Fetch from OpenRouter
105
+ try {
106
+ const controller = new AbortController();
107
+ const timeout = setTimeout(() => controller.abort(), 5000);
108
+ const resp = await fetch(OPENROUTER_API, { signal: controller.signal });
109
+ clearTimeout(timeout);
110
+ if (!resp.ok)
111
+ throw new Error(`HTTP ${resp.status}`);
112
+ const data = (await resp.json());
113
+ const result = {};
114
+ for (const [prefix, ourProvider] of Object.entries(OPENROUTER_PREFIX_MAP)) {
115
+ const models = data.data
116
+ .filter((m) => m.id.startsWith(prefix + "/"))
117
+ .map((m) => {
118
+ const modelId = m.id.slice(prefix.length + 1);
119
+ const input = parseFloat(m.pricing?.prompt ?? "0") * 1e6;
120
+ const output = parseFloat(m.pricing?.completion ?? "0") * 1e6;
121
+ return { modelId, name: m.name ?? modelId, input, output, ctx: m.context_length ?? 0 };
122
+ })
123
+ .filter((m) => m.input > 0 || m.output > 0) // skip free/broken entries
124
+ .filter((m) => !m.modelId.includes("preview") || m.modelId.includes("flash")) // skip most previews
125
+ .filter((m) => !m.modelId.includes(":") || m.modelId.includes(":thinking")) // skip variants except thinking
126
+ .sort((a, b) => a.input - b.input);
127
+ if (models.length === 0)
128
+ continue;
129
+ // Auto-categorize into tiers by price quartiles
130
+ const tiers = [];
131
+ const cheapest = models[0];
132
+ const midIdx = Math.floor(models.length / 2);
133
+ const mid = models[midIdx] ?? cheapest;
134
+ const expensive = models[models.length - 1];
135
+ // Pick up to 5 distinct price points: cheapest, 25th, median, 75th, most expensive
136
+ const seen = new Set();
137
+ const picks = [
138
+ { m: cheapest, label: "Budget" },
139
+ { m: models[Math.floor(models.length * 0.25)] ?? cheapest, label: "Economy" },
140
+ { m: mid, label: "Balanced" },
141
+ { m: models[Math.floor(models.length * 0.75)] ?? expensive, label: "Advanced" },
142
+ { m: expensive, label: "Premium" },
143
+ ];
144
+ for (const pick of picks) {
145
+ if (seen.has(pick.m.modelId))
146
+ continue;
147
+ seen.add(pick.m.modelId);
148
+ const isRecommended = pick.m.modelId === mid.modelId;
149
+ tiers.push({
150
+ name: pick.label,
151
+ model: pick.m.modelId,
152
+ input: Math.round(pick.m.input * 100) / 100,
153
+ output: Math.round(pick.m.output * 100) / 100,
154
+ recommended: isRecommended,
155
+ });
156
+ }
157
+ // Ensure at least one is recommended
158
+ if (!tiers.some((t) => t.recommended) && tiers.length > 0) {
159
+ tiers[Math.floor(tiers.length / 2)].recommended = true;
160
+ }
161
+ result[ourProvider] = tiers;
162
+ }
163
+ // Cache the result
164
+ try {
165
+ await fs.mkdir(path.dirname(CACHE_FILE), { recursive: true });
166
+ await fs.writeFile(CACHE_FILE, JSON.stringify(result, null, 2), "utf-8");
167
+ }
168
+ catch {
169
+ // Non-critical
170
+ }
171
+ return result;
172
+ }
173
+ catch {
174
+ // Offline or error — return empty (caller falls back to hardcoded)
175
+ return {};
176
+ }
177
+ }
178
+ /**
179
+ * Get model tiers for a provider — tries dynamic first, falls back to hardcoded.
180
+ */
181
+ export async function getModelTiers(provider) {
182
+ const dynamic = await fetchDynamicModels();
183
+ if (dynamic[provider] && dynamic[provider].length > 0) {
184
+ return dynamic[provider];
185
+ }
186
+ return PROVIDER_TIERS[provider] ?? [];
187
+ }
74
188
  // ─── Provider display names and env var mapping ─────────────────────────────
75
189
  const PROVIDER_DISPLAY = {
76
190
  anthropic: "Anthropic (Claude)",
@@ -83,12 +197,12 @@ const PROVIDER_DISPLAY = {
83
197
  custom: "Custom (any OpenAI-compatible API)",
84
198
  };
85
199
  const PROVIDER_ENV_VAR = {
86
- anthropic: "ANTHROPIC_API_KEY",
87
- openai: "OPENAI_API_KEY",
88
- groq: "GROQ_API_KEY",
89
- xai: "XAI_API_KEY",
90
- mistral: "MISTRAL_API_KEY",
91
- custom: "GNOSYS_LLM_API_KEY",
200
+ anthropic: "GNOSYS_ANTHROPIC_KEY",
201
+ openai: "GNOSYS_OPENAI_KEY",
202
+ groq: "GNOSYS_GROQ_KEY",
203
+ xai: "GNOSYS_XAI_KEY",
204
+ mistral: "GNOSYS_MISTRAL_KEY",
205
+ custom: "GNOSYS_CUSTOM_KEY",
92
206
  };
93
207
  // Ordered list for the menu
94
208
  const PROVIDER_ORDER = [
@@ -459,18 +573,21 @@ export async function runSetup(opts) {
459
573
  }
460
574
  }
461
575
  }
462
- // ─── Step 1/5 Usage mode ────────────────────────────────────────
463
- const modeIndex = await askChoice(rl, `${BOLD}Step 1/5${RESET} ${DIM}\u2014${RESET} How will you use Gnosys?\n\n${DIM} Agent memory sets up persistent memory for your IDE and CLI.\n Web knowledge base is configured separately from your web project\n and uses its own API key. You can always add it later with: gnosys web init${RESET}`, [
464
- "Agent memory (IDE + CLI)",
465
- "Web knowledge base (serverless chatbots)",
466
- "Both",
467
- ]);
468
- const mode = modeIndex === 0 ? "agent" : modeIndex === 1 ? "web" : "both";
469
- // ─── Step 2/5 Provider ──────────────────────────────────────────
576
+ // ─── Pre-fetch dynamic models ─────────────────────────────────────
577
+ console.log(`${DIM}Fetching latest model pricing...${RESET}`);
578
+ const dynamicModels = await fetchDynamicModels();
579
+ if (Object.keys(dynamicModels).length > 0) {
580
+ console.log(`${DIM}${CHECK} Live pricing loaded from OpenRouter${RESET}`);
581
+ }
582
+ else {
583
+ console.log(`${DIM}Using bundled model data (offline or fetch failed)${RESET}`);
584
+ }
585
+ console.log();
586
+ // ─── Step 1/4 — Provider ──────────────────────────────────────────
470
587
  const providerOptions = PROVIDER_ORDER.map((key) => {
471
- const tiers = PROVIDER_TIERS[key];
588
+ const tiers = dynamicModels[key] ?? PROVIDER_TIERS[key];
472
589
  const display = PROVIDER_DISPLAY[key];
473
- if (tiers.length === 0)
590
+ if (!tiers || tiers.length === 0)
474
591
  return display;
475
592
  const minIn = Math.min(...tiers.map((t) => t.input));
476
593
  const maxOut = Math.max(...tiers.map((t) => t.output));
@@ -480,13 +597,13 @@ export async function runSetup(opts) {
480
597
  });
481
598
  // Add "Skip" option
482
599
  providerOptions.push("Skip (core memory works without LLM)");
483
- const providerIndex = await askChoice(rl, `${BOLD}Step 2/5${RESET} ${DIM}\u2014${RESET} Choose your LLM provider`, providerOptions);
600
+ const providerIndex = await askChoice(rl, `${BOLD}Step 1/4${RESET} ${DIM}\u2014${RESET} Choose your LLM provider`, providerOptions);
484
601
  const isSkip = providerIndex === PROVIDER_ORDER.length; // last option
485
602
  const provider = isSkip ? "skip" : PROVIDER_ORDER[providerIndex];
486
- // ─── Step 3/5 — Model tier ────────────────────────────────────────
603
+ // ─── Step 2/4 — Model tier ────────────────────────────────────────
487
604
  let model = "";
488
605
  if (!isSkip && provider !== "custom") {
489
- const tiers = PROVIDER_TIERS[provider];
606
+ const tiers = dynamicModels[provider] ?? PROVIDER_TIERS[provider];
490
607
  if (tiers.length > 0) {
491
608
  const isLocal = provider === "ollama" || provider === "lmstudio";
492
609
  const tierOptions = tiers.map((t) => {
@@ -496,14 +613,14 @@ export async function runSetup(opts) {
496
613
  }
497
614
  return `${t.name} (${t.model}) ${DIM}${formatPrice(t.input, t.output)}${RESET}${rec}`;
498
615
  });
499
- const tierIndex = await askChoice(rl, `${BOLD}Step 3/5${RESET} ${DIM}\u2014${RESET} Choose model tier`, tierOptions);
616
+ const tierIndex = await askChoice(rl, `${BOLD}Step 2/4${RESET} ${DIM}\u2014${RESET} Choose model tier`, tierOptions);
500
617
  model = tiers[tierIndex].model;
501
618
  }
502
619
  }
503
620
  else if (provider === "custom") {
504
621
  // Custom: ask for base URL and model name
505
622
  console.log();
506
- console.log(`${BOLD}Step 3/5${RESET} ${DIM}\u2014${RESET} Custom provider details`);
623
+ console.log(`${BOLD}Step 2/4${RESET} ${DIM}\u2014${RESET} Custom provider details`);
507
624
  console.log();
508
625
  const baseUrl = await askInput(rl, "Base URL (OpenAI-compatible)");
509
626
  model = await askInput(rl, "Model name");
@@ -540,33 +657,134 @@ export async function runSetup(opts) {
540
657
  else if (isSkip) {
541
658
  // Skip step 3 entirely
542
659
  console.log();
543
- console.log(`${DIM}Step 3/5 \u2014 Model tier: skipped${RESET}`);
660
+ console.log(`${DIM}Step 2/4 \u2014 Model tier: skipped${RESET}`);
544
661
  }
545
- // ─── Step 4/5 — API key ───────────────────────────────────────────
662
+ // ─── Step 3/4 — API key ───────────────────────────────────────────
546
663
  let apiKeyWritten = false;
664
+ let apiKeySource = "";
547
665
  const needsKey = !isSkip &&
548
666
  provider !== "ollama" &&
549
667
  provider !== "lmstudio";
668
+ // Determine the env var name for this provider
669
+ const envVarName = provider === "custom" ? "GNOSYS_CUSTOM_KEY" :
670
+ `GNOSYS_${provider.toUpperCase()}_KEY`;
671
+ // Also check legacy env var names
672
+ const legacyEnvVars = {
673
+ anthropic: "ANTHROPIC_API_KEY",
674
+ openai: "OPENAI_API_KEY",
675
+ groq: "GROQ_API_KEY",
676
+ xai: "XAI_API_KEY",
677
+ mistral: "MISTRAL_API_KEY",
678
+ };
679
+ const legacyEnvVar = legacyEnvVars[provider] ?? "";
550
680
  if (needsKey) {
551
681
  console.log();
552
- console.log(`${BOLD}Step 4/5${RESET} ${DIM}\u2014${RESET} API Key`);
682
+ console.log(`${BOLD}Step 3/4${RESET} ${DIM}\u2014${RESET} API Key`);
553
683
  console.log();
554
- const providerLabel = provider === "custom" ? "API" : PROVIDER_DISPLAY[provider]?.split(" ")[0] ?? provider;
555
- const key = await askInput(rl, `Enter your ${providerLabel} API key (press Enter to skip)`);
556
- if (key) {
557
- await writeApiKey(provider, key);
558
- console.log(`${CHECK} Key saved to ~/.config/gnosys/.env (${maskKey(key)})`);
684
+ // Check if key already exists in environment
685
+ const existingKey = process.env[envVarName] || (legacyEnvVar ? process.env[legacyEnvVar] : "");
686
+ if (existingKey) {
687
+ const source = process.env[envVarName] ? envVarName : legacyEnvVar;
688
+ console.log(` ${CHECK} Found existing key in $${source} (${maskKey(existingKey)})`);
559
689
  apiKeyWritten = true;
690
+ apiKeySource = "env";
560
691
  }
561
692
  else {
562
- console.log(`${DIM}Skipped. You can set it later in ~/.config/gnosys/.env${RESET}`);
693
+ console.log(` Provider: ${GREEN}${provider}${RESET}`);
694
+ console.log(` Env var: ${GREEN}${envVarName}${RESET}`);
695
+ console.log();
696
+ const isMac = process.platform === "darwin";
697
+ const shell = path.basename(process.env.SHELL ?? "zsh");
698
+ const profileFile = shell === "bash" ? "~/.bash_profile" : "~/.zshrc";
699
+ const options = [];
700
+ if (isMac) {
701
+ options.push(`Store in macOS Keychain (recommended \u2014 most secure, no plaintext on disk)`);
702
+ }
703
+ options.push(`Set via environment variable (${profileFile})`, `Save to ~/.config/gnosys/.env (\u26a0 plaintext on disk \u2014 least secure)`, `Skip (configure later)`);
704
+ const keyChoice = await askChoice(rl, "", options);
705
+ // Adjust index based on whether macOS Keychain option was shown
706
+ const keychainIdx = isMac ? 0 : -1;
707
+ const envIdx = isMac ? 1 : 0;
708
+ const dotenvIdx = isMac ? 2 : 1;
709
+ const skipIdx = isMac ? 3 : 2;
710
+ if (keyChoice === keychainIdx) {
711
+ // macOS Keychain
712
+ console.log();
713
+ console.log(` Run this in a ${BOLD}separate terminal${RESET}:`);
714
+ console.log();
715
+ console.log(` ${GREEN}security add-generic-password -a "$USER" -s "${envVarName}" -w "your-key-here"${RESET}`);
716
+ console.log();
717
+ console.log(` ${DIM}Replace "your-key-here" with your actual API key.${RESET}`);
718
+ console.log(` ${DIM}Gnosys will read it automatically at runtime.${RESET}`);
719
+ console.log();
720
+ await askInput(rl, "Press Enter after setting the key...", { default: "" });
721
+ // Verify the key was set
722
+ try {
723
+ const { execSync } = await import("child_process");
724
+ const result = execSync(`security find-generic-password -a "$USER" -s "${envVarName}" -w`, { stdio: "pipe", encoding: "utf-8" }).trim();
725
+ if (result) {
726
+ console.log(` ${CHECK} Key verified in macOS Keychain (${maskKey(result)})`);
727
+ apiKeyWritten = true;
728
+ apiKeySource = "keychain";
729
+ }
730
+ }
731
+ catch {
732
+ console.log(` ${WARN} Could not verify key in Keychain. You can set it later.`);
733
+ }
734
+ }
735
+ else if (keyChoice === envIdx) {
736
+ // Environment variable
737
+ console.log();
738
+ console.log(` Run this in a ${BOLD}separate terminal${RESET}:`);
739
+ console.log();
740
+ console.log(` ${GREEN}echo 'export ${envVarName}=your-key-here' >> ${profileFile} && source ${profileFile}${RESET}`);
741
+ console.log();
742
+ console.log(` ${DIM}Replace "your-key-here" with your actual API key.${RESET}`);
743
+ console.log(` ${DIM}The key is stored in your shell profile (${profileFile}).${RESET}`);
744
+ console.log();
745
+ await askInput(rl, "Press Enter after setting the key...", { default: "" });
746
+ // Verify
747
+ // Note: we can't detect it in this process since env was set in another terminal
748
+ console.log(` ${DIM}Key will be available in new terminal sessions.${RESET}`);
749
+ apiKeyWritten = true;
750
+ apiKeySource = "env";
751
+ }
752
+ else if (keyChoice === dotenvIdx) {
753
+ // .env file (least secure)
754
+ console.log();
755
+ console.log(` ${WARN} ${BOLD}Security warning:${RESET} This stores your key as plaintext in`);
756
+ console.log(` ~/.config/gnosys/.env. Anyone with access to your user account`);
757
+ console.log(` can read it. If this directory syncs to a cloud service (iCloud,`);
758
+ console.log(` Dropbox), the key will be uploaded in plaintext.`);
759
+ console.log();
760
+ const confirm = await askYesNo(rl, "Continue with plaintext storage?", false);
761
+ if (confirm) {
762
+ const key = await askInput(rl, `Enter your API key`);
763
+ if (key) {
764
+ await writeApiKey(provider, key);
765
+ console.log(` ${CHECK} Key saved to ~/.config/gnosys/.env (${maskKey(key)})`);
766
+ apiKeyWritten = true;
767
+ apiKeySource = "dotenv";
768
+ }
769
+ }
770
+ else {
771
+ console.log(` ${DIM}Skipped. Choose a different method next time.${RESET}`);
772
+ }
773
+ }
774
+ else {
775
+ // Skip
776
+ console.log(` ${DIM}Skipped. Set your key later using one of these methods:`);
777
+ console.log(` \u2022 macOS Keychain: security add-generic-password -a "$USER" -s "${envVarName}" -w "key"${isMac ? "" : " (macOS only)"}`);
778
+ console.log(` \u2022 Shell profile: echo 'export ${envVarName}=key' >> ${profileFile}`);
779
+ console.log(` \u2022 Dotenv file: echo '${envVarName}=key' >> ~/.config/gnosys/.env${RESET}`);
780
+ }
563
781
  }
564
782
  }
565
783
  else {
566
784
  console.log();
567
- console.log(`${DIM}Step 4/5 \u2014 API key: not needed${RESET}`);
785
+ console.log(`${DIM}Step 3/4 \u2014 API key: not needed (local provider)${RESET}`);
568
786
  }
569
- // ─── Step 5/5 — IDE integration ───────────────────────────────────
787
+ // ─── Step 4/4 — IDE integration ───────────────────────────────────
570
788
  const detectedIdes = await detectIDEs(projectDir);
571
789
  const configuredIdes = [];
572
790
  if (detectedIdes.length > 0) {
@@ -577,7 +795,7 @@ export async function runSetup(opts) {
577
795
  };
578
796
  const detectedNames = detectedIdes.map((id) => ideLabels[id] ?? id).join(", ");
579
797
  console.log();
580
- console.log(`${BOLD}Step 5/5${RESET} ${DIM}\u2014${RESET} IDE Integration`);
798
+ console.log(`${BOLD}Step 4/4${RESET} ${DIM}\u2014${RESET} IDE Integration`);
581
799
  console.log();
582
800
  console.log(`Detected: ${GREEN}${detectedNames}${RESET}`);
583
801
  const ideOptions = [];
@@ -625,46 +843,7 @@ export async function runSetup(opts) {
625
843
  }
626
844
  else {
627
845
  console.log();
628
- console.log(`${DIM}Step 5/5 \u2014 IDE integration: no IDEs detected${RESET}`);
629
- }
630
- // ─── Web extra steps (only if mode is web or both) ────────────────
631
- let sitemapUrl = "";
632
- let outputDir = "";
633
- let llmEnrich = true;
634
- if (mode === "web" || mode === "both") {
635
- console.log();
636
- console.log(`${BOLD}Web Knowledge Base Configuration${RESET}`);
637
- console.log();
638
- console.log(`${DIM}The web knowledge base is independent from agent memory.`);
639
- console.log(`It doesn't use your central gnosys.db or the API key you just set.`);
640
- console.log(`It runs from your web project repo and uses its own LLM key (set`);
641
- console.log(`in CI/CD secrets or the web project's gnosys.json).`);
642
- console.log();
643
- console.log(`You can skip this now and set it up later from your web project:`);
644
- console.log(` cd your-web-project && gnosys init && gnosys web init`);
645
- console.log();
646
- console.log(`If your site is already deployed, enter the sitemap URL.`);
647
- console.log(`For local dev, use your local server URL.`);
648
- console.log(` \u2022 Deployed: https://yoursite.com/sitemap.xml`);
649
- console.log(` \u2022 Local dev: http://localhost:3000/sitemap.xml`);
650
- console.log(` \u2022 Skip: press Enter${RESET}`);
651
- console.log();
652
- sitemapUrl = await askInput(rl, "Sitemap URL");
653
- console.log();
654
- console.log(`${DIM}The knowledge folder is created inside your project and should`);
655
- console.log(`be committed to git. It deploys with your app \u2014 no database needed.${RESET}`);
656
- console.log();
657
- outputDir = await askInput(rl, "Output directory", { default: "./knowledge" });
658
- llmEnrich = await askYesNo(rl, "Enable LLM enrichment for ingested pages?", true);
659
- console.log();
660
- console.log(`${DIM}Tip: Add "postbuild": "gnosys web build" to package.json`);
661
- console.log(`so every deploy automatically re-crawls and rebuilds the index.${RESET}`);
662
- console.log();
663
- if (sitemapUrl) {
664
- console.log(` ${CHECK} Sitemap: ${sitemapUrl}`);
665
- }
666
- console.log(` ${CHECK} Output: ${outputDir}`);
667
- console.log(` ${CHECK} LLM enrichment: ${llmEnrich ? "enabled" : "disabled"}`);
846
+ console.log(`${DIM}Step 4/4 \u2014 IDE integration: no IDEs detected${RESET}`);
668
847
  }
669
848
  // ─── Compute structuring model ────────────────────────────────────
670
849
  const structuringModel = isSkip ? "" : getStructuringModel(provider, model);
@@ -684,12 +863,6 @@ export async function runSetup(opts) {
684
863
  const ideNames = configuredIdes.map((id) => ideLabels[id] ?? id).join(", ");
685
864
  summaryRows.push(["IDEs:", ideNames]);
686
865
  }
687
- if (mode === "web" || mode === "both") {
688
- summaryRows.push(["Mode:", mode]);
689
- if (sitemapUrl)
690
- summaryRows.push(["Sitemap:", sitemapUrl]);
691
- summaryRows.push(["Output:", outputDir || "./knowledge"]);
692
- }
693
866
  printBox("Setup Complete", summaryRows);
694
867
  console.log(`Next: Run ${CYAN}gnosys init${RESET} in any project to start using memory.`);
695
868
  console.log();
@@ -701,7 +874,7 @@ export async function runSetup(opts) {
701
874
  structuringModel,
702
875
  apiKeyWritten,
703
876
  ides: configuredIdes,
704
- mode,
877
+ mode: "agent",
705
878
  upgraded,
706
879
  };
707
880
  }