code-graph-builder 0.3.0__tar.gz → 0.3.1__tar.gz

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 (119) hide show
  1. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/PKG-INFO +1 -1
  2. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/npm-package/bin/cli.mjs +106 -48
  3. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/npm-package/package.json +1 -1
  4. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/pyproject.toml +1 -1
  5. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.claude/commands/api-browse.md +0 -0
  6. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.claude/commands/api-detail.md +0 -0
  7. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.claude/commands/api-doc-gen.md +0 -0
  8. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.claude/commands/api-find.md +0 -0
  9. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.claude/commands/api-list.md +0 -0
  10. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.claude/commands/cgb-start.md +0 -0
  11. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.claude/commands/code-locate.md +0 -0
  12. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.claude/commands/code-search.md +0 -0
  13. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.claude/commands/code-snippet.md +0 -0
  14. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.claude/commands/embed-gen.md +0 -0
  15. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.claude/commands/graph-build.md +0 -0
  16. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.claude/commands/graph-query.md +0 -0
  17. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.claude/commands/list-repos.md +0 -0
  18. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.claude/commands/repo-info.md +0 -0
  19. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.claude/commands/repo-init.md +0 -0
  20. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.claude/commands/switch-repo.md +0 -0
  21. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.claude/commands/wiki-gen.md +0 -0
  22. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.claude/commands/wiki-list.md +0 -0
  23. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.claude/commands/wiki-read.md +0 -0
  24. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.env.example +0 -0
  25. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/.gitignore +0 -0
  26. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/CLAUDE_CODE_GUIDE.md +0 -0
  27. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/README.md +0 -0
  28. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/__init__.py +0 -0
  29. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/builder.py +0 -0
  30. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/cgb_cli.py +0 -0
  31. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/cli.py +0 -0
  32. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/commands_cli.py +0 -0
  33. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/config.py +0 -0
  34. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/constants.py +0 -0
  35. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/embeddings/__init__.py +0 -0
  36. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/embeddings/qwen3_embedder.py +0 -0
  37. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/embeddings/vector_store.py +0 -0
  38. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/examples/__init__.py +0 -0
  39. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/examples/example_configuration.py +0 -0
  40. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/examples/example_kuzu_usage.py +0 -0
  41. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/examples/example_semantic_search_full.py +0 -0
  42. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/examples/generate_wiki.py +0 -0
  43. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/examples/graph_export_example.py +0 -0
  44. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/examples/rag_example.py +0 -0
  45. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/examples/test_cli_demo.py +0 -0
  46. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/examples/test_embedding_api.py +0 -0
  47. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/examples/test_kuzu_local.py +0 -0
  48. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/examples/test_rag_redis.py +0 -0
  49. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/graph_updater.py +0 -0
  50. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/guidance/__init__.py +0 -0
  51. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/guidance/agent.py +0 -0
  52. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/guidance/prompts.py +0 -0
  53. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/guidance/toolset.py +0 -0
  54. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/language_spec.py +0 -0
  55. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/mcp/__init__.py +0 -0
  56. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/mcp/api_doc_generator.py +0 -0
  57. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/mcp/file_editor.py +0 -0
  58. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/mcp/pipeline.py +0 -0
  59. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/mcp/server.py +0 -0
  60. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/mcp/tools.py +0 -0
  61. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/models.py +0 -0
  62. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/parser_loader.py +0 -0
  63. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/parsers/__init__.py +0 -0
  64. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/parsers/call_processor.py +0 -0
  65. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/parsers/call_resolver.py +0 -0
  66. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/parsers/definition_processor.py +0 -0
  67. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/parsers/factory.py +0 -0
  68. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/parsers/import_processor.py +0 -0
  69. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/parsers/structure_processor.py +0 -0
  70. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/parsers/type_inference.py +0 -0
  71. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/parsers/utils.py +0 -0
  72. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/rag/__init__.py +0 -0
  73. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/rag/camel_agent.py +0 -0
  74. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/rag/client.py +0 -0
  75. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/rag/config.py +0 -0
  76. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/rag/cypher_generator.py +0 -0
  77. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/rag/llm_backend.py +0 -0
  78. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/rag/markdown_generator.py +0 -0
  79. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/rag/prompt_templates.py +0 -0
  80. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/rag/rag_engine.py +0 -0
  81. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/rag/review_report.md +0 -0
  82. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/rag/tests/__init__.py +0 -0
  83. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/rag/tests/test_camel_agent.py +0 -0
  84. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/rag/tests/test_client.py +0 -0
  85. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/rag/tests/test_config.py +0 -0
  86. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/rag/tests/test_markdown_generator.py +0 -0
  87. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/rag/tests/test_prompt_templates.py +0 -0
  88. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/services/__init__.py +0 -0
  89. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/services/graph_service.py +0 -0
  90. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/services/kuzu_service.py +0 -0
  91. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/services/memory_service.py +0 -0
  92. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/settings.py +0 -0
  93. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tests/ACCEPTANCE_CRITERIA_PHASE2.md +0 -0
  94. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tests/__init__.py +0 -0
  95. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tests/run_acceptance_check.py +0 -0
  96. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tests/test_api_find.py +0 -0
  97. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tests/test_api_find_integration.py +0 -0
  98. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tests/test_basic.py +0 -0
  99. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tests/test_c_api_extraction.py +0 -0
  100. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tests/test_call_resolution_scenarios.py +0 -0
  101. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tests/test_embedder.py +0 -0
  102. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tests/test_integration_semantic.py +0 -0
  103. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tests/test_mcp_protocol.py +0 -0
  104. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tests/test_mcp_user_flow.py +0 -0
  105. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tests/test_rag.py +0 -0
  106. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tests/test_settings.py +0 -0
  107. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tests/test_step1_graph_build.py +0 -0
  108. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tests/test_step2_api_docs.py +0 -0
  109. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tests/test_step3_embedding.py +0 -0
  110. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tests/test_vector_store.py +0 -0
  111. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tools/__init__.py +0 -0
  112. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tools/graph_query.py +0 -0
  113. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/tools/semantic_search.py +0 -0
  114. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/types.py +0 -0
  115. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/utils/__init__.py +0 -0
  116. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/code_graph_builder/utils/path_utils.py +0 -0
  117. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/core_system_prompt.md +0 -0
  118. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/mcp.json +0 -0
  119. {code_graph_builder-0.3.0 → code_graph_builder-0.3.1}/scripts/install_global.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-graph-builder
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: Code knowledge graph builder with MCP server for AI-assisted code navigation
5
5
  License: MIT
6
6
  Requires-Python: >=3.10
@@ -113,70 +113,119 @@ async function runSetup() {
113
113
  (await ask(` Workspace path [${WORKSPACE_DIR}]: `)).trim() || WORKSPACE_DIR;
114
114
  log("");
115
115
 
116
- // --- LLM API Key ---
117
- log("── 2/3 LLM API Key (for natural language queries & descriptions) ──");
116
+ // --- LLM Provider ---
117
+ log("── 2/3 LLM Provider (for natural language queries & descriptions) ──");
118
118
  log("");
119
- log(" Supported providers (OpenAI-compatible):");
120
- log(" - Moonshot / Kimi https://platform.moonshot.cn");
121
- log(" - OpenAI https://platform.openai.com");
122
- log(" - DeepSeek https://platform.deepseek.com");
123
- log(" - Any OpenAI-compatible endpoint");
119
+ log(" Select your LLM provider:");
124
120
  log("");
121
+ log(" 1) Moonshot / Kimi https://platform.moonshot.cn");
122
+ log(" 2) OpenAI https://platform.openai.com");
123
+ log(" 3) DeepSeek https://platform.deepseek.com");
124
+ log(" 4) OpenRouter https://openrouter.ai");
125
+ log(" 5) Custom (any OpenAI-compatible endpoint)");
126
+ log(" 6) Skip (configure later)");
127
+ log("");
128
+
129
+ const providers = {
130
+ "1": { name: "Moonshot", url: "https://api.moonshot.cn/v1", model: "kimi-k2.5" },
131
+ "2": { name: "OpenAI", url: "https://api.openai.com/v1", model: "gpt-4o" },
132
+ "3": { name: "DeepSeek", url: "https://api.deepseek.com/v1", model: "deepseek-chat" },
133
+ "4": { name: "OpenRouter", url: "https://openrouter.ai/api/v1", model: "anthropic/claude-sonnet-4" },
134
+ };
125
135
 
126
136
  if (existing.LLM_API_KEY) {
127
- log(` Current key: ${mask(existing.LLM_API_KEY)}`);
137
+ log(` Current: ${mask(existing.LLM_API_KEY)} → ${existing.LLM_BASE_URL || "?"}`);
128
138
  }
129
139
 
130
- const llmKey =
131
- (await ask(" LLM API Key (sk-...): ")).trim() || existing.LLM_API_KEY || "";
140
+ const choice = (await ask(" Choose provider [1-6]: ")).trim() || "6";
132
141
 
142
+ let llmKey = existing.LLM_API_KEY || "";
133
143
  let llmBaseUrl = existing.LLM_BASE_URL || "";
134
144
  let llmModel = existing.LLM_MODEL || "";
135
145
 
136
- if (llmKey) {
137
- log("");
138
- log(" Detecting provider from key...");
139
-
140
- if (llmKey.startsWith("sk-") && !llmKey.startsWith("sk-ant-")) {
141
- // Could be Moonshot, OpenAI, or other
142
- const urlInput = (
143
- await ask(
144
- ` API Base URL [${llmBaseUrl || "https://api.moonshot.cn/v1"}]: `
145
- )
146
- ).trim();
147
- llmBaseUrl = urlInput || llmBaseUrl || "https://api.moonshot.cn/v1";
148
-
149
- if (llmBaseUrl.includes("moonshot")) {
150
- llmModel = (await ask(` Model name [kimi-k2.5]: `)).trim() || "kimi-k2.5";
151
- } else if (llmBaseUrl.includes("openai")) {
152
- llmModel = (await ask(` Model name [gpt-4o]: `)).trim() || "gpt-4o";
153
- } else if (llmBaseUrl.includes("deepseek")) {
154
- llmModel = (await ask(` Model name [deepseek-chat]: `)).trim() || "deepseek-chat";
155
- } else {
156
- llmModel =
157
- (await ask(` Model name [${llmModel || "gpt-4o"}]: `)).trim() ||
158
- llmModel ||
159
- "gpt-4o";
160
- }
146
+ if (choice !== "6") {
147
+ const provider = providers[choice];
148
+
149
+ if (provider) {
150
+ log(`\n → ${provider.name} selected`);
151
+ llmBaseUrl = provider.url;
152
+ llmModel = provider.model;
153
+ } else {
154
+ // Choice "5" or invalid custom
155
+ log("\n → Custom provider");
156
+ llmBaseUrl = (await ask(" API Base URL: ")).trim() || llmBaseUrl;
157
+ llmModel = (await ask(" Model name: ")).trim() || llmModel || "gpt-4o";
158
+ }
159
+
160
+ llmKey = (await ask(` API Key (sk-...): `)).trim() || existing.LLM_API_KEY || "";
161
+
162
+ if (llmKey) {
163
+ // Allow overriding URL and model
164
+ const urlOverride = (await ask(` Base URL [${llmBaseUrl}]: `)).trim();
165
+ if (urlOverride) llmBaseUrl = urlOverride;
166
+ const modelOverride = (await ask(` Model [${llmModel}]: `)).trim();
167
+ if (modelOverride) llmModel = modelOverride;
161
168
  }
162
169
  }
163
170
  log("");
164
171
 
165
- // --- Embedding API Key ---
166
- log("── 3/3 Embedding API Key (for semantic code search) ─────");
172
+ // --- Embedding Provider ---
173
+ log("── 3/3 Embedding Provider (for semantic code search) ─────");
174
+ log("");
175
+ log(" Select your embedding provider:");
167
176
  log("");
168
- log(" Used for vector embedding of code (Qwen3 text-embedding-v4).");
169
- log(" Get a free key at: https://dashscope.console.aliyun.com");
177
+ log(" 1) DashScope / Qwen https://dashscope.console.aliyun.com (free tier)");
178
+ log(" 2) OpenAI Embeddings https://platform.openai.com");
179
+ log(" 3) Custom (any OpenAI-compatible embedding endpoint)");
180
+ log(" 4) Skip (configure later)");
170
181
  log("");
171
182
 
172
- if (existing.DASHSCOPE_API_KEY) {
173
- log(` Current key: ${mask(existing.DASHSCOPE_API_KEY)}`);
183
+ const embedProviders = {
184
+ "1": { name: "DashScope", url: "https://dashscope.aliyuncs.com/api/v1", model: "text-embedding-v4", keyEnv: "DASHSCOPE_API_KEY", urlEnv: "DASHSCOPE_BASE_URL" },
185
+ "2": { name: "OpenAI", url: "https://api.openai.com/v1", model: "text-embedding-3-small", keyEnv: "OPENAI_API_KEY", urlEnv: "OPENAI_BASE_URL" },
186
+ };
187
+
188
+ if (existing.DASHSCOPE_API_KEY || existing.EMBED_API_KEY) {
189
+ const ek = existing.DASHSCOPE_API_KEY || existing.EMBED_API_KEY;
190
+ log(` Current: ${mask(ek)} → ${existing.DASHSCOPE_BASE_URL || existing.EMBED_BASE_URL || "?"}`);
174
191
  }
175
192
 
176
- const dashscopeKey =
177
- (await ask(" DashScope API Key (sk-...): ")).trim() ||
178
- existing.DASHSCOPE_API_KEY ||
179
- "";
193
+ const embedChoice = (await ask(" Choose provider [1-4]: ")).trim() || "4";
194
+
195
+ let embedKey = "";
196
+ let embedUrl = "";
197
+ let embedModel = "";
198
+ let embedKeyEnv = "DASHSCOPE_API_KEY";
199
+ let embedUrlEnv = "DASHSCOPE_BASE_URL";
200
+
201
+ if (embedChoice !== "4") {
202
+ const ep = embedProviders[embedChoice];
203
+
204
+ if (ep) {
205
+ log(`\n → ${ep.name} selected`);
206
+ embedUrl = ep.url;
207
+ embedModel = ep.model;
208
+ embedKeyEnv = ep.keyEnv;
209
+ embedUrlEnv = ep.urlEnv;
210
+ } else {
211
+ // Choice "3" or invalid → custom
212
+ log("\n → Custom embedding provider");
213
+ embedUrl = (await ask(" Embedding API Base URL: ")).trim();
214
+ embedModel = (await ask(" Embedding model name: ")).trim() || "text-embedding-3-small";
215
+ embedKeyEnv = "EMBED_API_KEY";
216
+ embedUrlEnv = "EMBED_BASE_URL";
217
+ }
218
+
219
+ embedKey = (await ask(` API Key: `)).trim() ||
220
+ existing[embedKeyEnv] || existing.DASHSCOPE_API_KEY || "";
221
+
222
+ if (embedKey) {
223
+ const urlOverride = (await ask(` Base URL [${embedUrl}]: `)).trim();
224
+ if (urlOverride) embedUrl = urlOverride;
225
+ const modelOverride = (await ask(` Model [${embedModel}]: `)).trim();
226
+ if (modelOverride) embedModel = modelOverride;
227
+ }
228
+ }
180
229
 
181
230
  rl.close();
182
231
 
@@ -186,18 +235,27 @@ async function runSetup() {
186
235
  LLM_API_KEY: llmKey,
187
236
  LLM_BASE_URL: llmBaseUrl,
188
237
  LLM_MODEL: llmModel,
189
- DASHSCOPE_API_KEY: dashscopeKey,
190
- DASHSCOPE_BASE_URL: "https://dashscope.aliyuncs.com/api/v1",
191
238
  };
192
239
 
240
+ // Save embedding config with the correct env var names
241
+ if (embedKey) {
242
+ config[embedKeyEnv] = embedKey;
243
+ config[embedUrlEnv] = embedUrl;
244
+ if (embedModel) config.EMBED_MODEL = embedModel;
245
+ }
246
+
193
247
  saveEnvFile(config);
194
248
 
249
+ const embedDisplay = embedKey
250
+ ? `${mask(embedKey)} → ${embedModel || embedUrl}`
251
+ : "not configured (optional)";
252
+
195
253
  log("");
196
254
  log("── Configuration saved ─────────────────────────────────────");
197
255
  log(` File: ${ENV_FILE}`);
198
256
  log("");
199
257
  log(" LLM: " + (llmKey ? `${mask(llmKey)} → ${llmModel}` : "not configured (optional)"));
200
- log(" Embedding: " + (dashscopeKey ? mask(dashscopeKey) : "not configured (optional)"));
258
+ log(" Embedding: " + embedDisplay);
201
259
  log(" Workspace: " + workspace);
202
260
  log("");
203
261
  log("── Next steps ──────────────────────────────────────────────");
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "code-graph-builder",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Code knowledge graph builder with MCP server for AI-assisted code navigation",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "code-graph-builder"
7
- version = "0.3.0"
7
+ version = "0.3.1"
8
8
  description = "Code knowledge graph builder with MCP server for AI-assisted code navigation"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}