@@ -182,7 +182,8 @@ pub fn main() !void {
182182 var stderr_buf : [4096 ]u8 = undefined ;
183183 var stderr_writer = std .fs .File .stderr ().writer (& stderr_buf );
184184 const se = & stderr_writer .interface ;
185- _ = se .print ("error: embedding_api=openai requires embedding_api_key to be set in config\n " , .{}) catch {};
185+ _ = se .print ("error: embedding_api=openai requires an API key.\n " ++
186+ " Set CODESCAN_EMBEDDING_SERVER_API_KEY env var or embedding_api_key in .codescan/config.ini\n " , .{}) catch {};
186187 std .process .exit (1 );
187188 }
188189
@@ -298,9 +299,11 @@ pub fn main() !void {
298299 } else {
299300 if (d .default_model ) | dm | {
300301 _ = stderr .print (" Found oMLX on {s} with model '{s}'.\n " ++
301- " Set embedding_api_key in .codescan/config.ini then run 'codescan index'.\n " , .{ d .url , dm }) catch {};
302+ " Set CODESCAN_EMBEDDING_SERVER_API_KEY env var (or embedding_api_key in config)\n " ++
303+ " then run 'codescan index'.\n " , .{ d .url , dm }) catch {};
302304 } else {
303- _ = stderr .print (" Found oMLX on {s}. Configure embedding_api_key in .codescan/config.ini\n " ++
305+ _ = stderr .print (" Found oMLX on {s}.\n " ++
306+ " Set CODESCAN_EMBEDDING_SERVER_API_KEY env var (or embedding_api_key in config)\n " ++
304307 " then run 'codescan index' for semantic search.\n " , .{d .url }) catch {};
305308 }
306309 }
@@ -1442,6 +1445,14 @@ fn resolveSettings(allocator: std.mem.Allocator, parsed: cli.Parsed, cfg: config
14421445 else = > return err ,
14431446 }
14441447
1448+ var env_api_key : ? []u8 = null ;
1449+ if (std .process .getEnvVarOwned (allocator , "CODESCAN_EMBEDDING_SERVER_API_KEY" )) | value | {
1450+ env_api_key = value ;
1451+ } else | err | switch (err ) {
1452+ error .EnvironmentVariableNotFound = > {},
1453+ else = > return err ,
1454+ }
1455+
14451456 if (cfg .output ) | value | settings .output = value ;
14461457 if (cfg .top_n ) | value | settings .top_n = value ;
14471458 if (cfg .root_path ) | value | settings .root_path = value ;
@@ -1546,8 +1557,10 @@ fn resolveSettings(allocator: std.mem.Allocator, parsed: cli.Parsed, cfg: config
15461557 }
15471558 }
15481559
1549- // Format Bearer token from api key
1550- if (cfg .embedding_api_key ) | key | {
1560+ // Format Bearer token from api key (env var overrides config)
1561+ const api_key = env_api_key orelse cfg .embedding_api_key ;
1562+ defer if (env_api_key ) | k | allocator .free (k ); // always free owned env string
1563+ if (api_key ) | key | {
15511564 settings .embedding_auth_header = try std .fmt .allocPrint (allocator , "Bearer {s}" , .{key });
15521565 settings .embedding_auth_header_owned = true ;
15531566 }
0 commit comments