@flaid/devmap 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +16 -6
  2. package/dist/ai/custom.d.ts +20 -0
  3. package/dist/ai/custom.d.ts.map +1 -0
  4. package/dist/ai/custom.js +142 -0
  5. package/dist/ai/custom.js.map +1 -0
  6. package/dist/ai/groq.d.ts.map +1 -1
  7. package/dist/ai/groq.js +14 -94
  8. package/dist/ai/groq.js.map +1 -1
  9. package/dist/ai/openaiCompatibleStream.d.ts +48 -0
  10. package/dist/ai/openaiCompatibleStream.d.ts.map +1 -0
  11. package/dist/ai/openaiCompatibleStream.js +94 -0
  12. package/dist/ai/openaiCompatibleStream.js.map +1 -0
  13. package/dist/ai/openrouter.d.ts.map +1 -1
  14. package/dist/ai/openrouter.js +22 -90
  15. package/dist/ai/openrouter.js.map +1 -1
  16. package/dist/ai/provider.d.ts +1 -1
  17. package/dist/ai/provider.d.ts.map +1 -1
  18. package/dist/ai/provider.js +18 -16
  19. package/dist/ai/provider.js.map +1 -1
  20. package/dist/ai/registry.d.ts +24 -0
  21. package/dist/ai/registry.d.ts.map +1 -0
  22. package/dist/ai/registry.js +47 -0
  23. package/dist/ai/registry.js.map +1 -0
  24. package/dist/commands/config.d.ts.map +1 -1
  25. package/dist/commands/config.js +14 -6
  26. package/dist/commands/config.js.map +1 -1
  27. package/dist/commands/doctor.d.ts +1 -1
  28. package/dist/commands/doctor.d.ts.map +1 -1
  29. package/dist/commands/doctor.js +2 -2
  30. package/dist/commands/doctor.js.map +1 -1
  31. package/dist/commands/init.d.ts +3 -3
  32. package/dist/commands/init.d.ts.map +1 -1
  33. package/dist/commands/init.js +81 -47
  34. package/dist/commands/init.js.map +1 -1
  35. package/dist/index.js +0 -0
  36. package/dist/utils/config.d.ts +3 -1
  37. package/dist/utils/config.d.ts.map +1 -1
  38. package/dist/utils/config.js +13 -1
  39. package/dist/utils/config.js.map +1 -1
  40. package/package.json +11 -10
@@ -1,7 +1,19 @@
1
1
  import { DevmapError } from "../utils/errors.js";
2
+ import { normalizeUsage, parseSseStream, readCompletionPayload } from "./openaiCompatibleStream.js";
2
3
  const OPENROUTER_CHAT_URL = "https://openrouter.ai/api/v1/chat/completions";
3
4
  const OPENROUTER_KEY_URL = "https://openrouter.ai/api/v1/auth/key";
4
5
  export const OPENROUTER_FREE_MODEL = "openrouter/free";
6
+ function unreadableResponseError() {
7
+ return new DevmapError("OpenRouter returned an unreadable response.", "Try again shortly or choose another model.");
8
+ }
9
+ const OPENROUTER_PAYLOAD_MESSAGES = {
10
+ unreadable: unreadableResponseError
11
+ };
12
+ const OPENROUTER_STREAM_MESSAGES = {
13
+ missingBody: unreadableResponseError,
14
+ unreadable: unreadableResponseError,
15
+ interrupted: unreadableResponseError
16
+ };
5
17
  export class OpenRouterClient {
6
18
  apiKey;
7
19
  fetchImplementation;
@@ -13,7 +25,7 @@ export class OpenRouterClient {
13
25
  const response = await this.sendRequest(request, false);
14
26
  if (!response.ok)
15
27
  throw await mapOpenRouterResponseError(response);
16
- const payload = await readCompletionPayload(response);
28
+ const payload = await readCompletionPayload(response, OPENROUTER_PAYLOAD_MESSAGES);
17
29
  const content = payload.choices[0]?.message?.content?.trim();
18
30
  if (!content) {
19
31
  throw new DevmapError("OpenRouter returned an empty response.", "Try again or choose another model.");
@@ -28,7 +40,15 @@ export class OpenRouterClient {
28
40
  const response = await this.sendRequest(request, true);
29
41
  if (!response.ok)
30
42
  throw await mapOpenRouterResponseError(response);
31
- return readCompletionStream(response, request.model, onDelta);
43
+ const payload = await parseSseStream(response, request.model, onDelta, { messages: OPENROUTER_STREAM_MESSAGES });
44
+ if (!payload.content.trim()) {
45
+ throw new DevmapError("OpenRouter returned an empty response.", "Try again or choose another model.");
46
+ }
47
+ return {
48
+ content: payload.content.trim(),
49
+ model: payload.model,
50
+ ...(payload.usage ? { usage: payload.usage } : {})
51
+ };
32
52
  }
33
53
  async sendRequest(request, stream) {
34
54
  const models = resolveModels(request);
@@ -84,84 +104,6 @@ function resolveModels(request) {
84
104
  ...(request.fallbackModel ? [request.fallbackModel] : [])
85
105
  ].filter((model) => model.trim().length > 0)));
86
106
  }
87
- async function readCompletionPayload(response) {
88
- try {
89
- const payload = await response.json();
90
- return {
91
- model: payload.model,
92
- choices: Array.isArray(payload.choices) ? payload.choices : [],
93
- usage: payload.usage
94
- };
95
- }
96
- catch {
97
- throw unreadableResponseError();
98
- }
99
- }
100
- async function readCompletionStream(response, requestedModel, onDelta) {
101
- if (!response.body)
102
- throw unreadableResponseError();
103
- const reader = response.body.getReader();
104
- const decoder = new TextDecoder();
105
- let buffer = "";
106
- let content = "";
107
- let model = requestedModel;
108
- let usage;
109
- const consume = (event) => {
110
- const data = event
111
- .split(/\r?\n/)
112
- .filter((line) => line.startsWith("data:"))
113
- .map((line) => line.slice(5).trimStart())
114
- .join("\n");
115
- if (!data)
116
- return false;
117
- if (data.trim() === "[DONE]")
118
- return true;
119
- try {
120
- const payload = JSON.parse(data);
121
- model = payload.model || model;
122
- const delta = payload.choices?.[0]?.delta?.content;
123
- if (delta) {
124
- content += delta;
125
- onDelta(delta);
126
- }
127
- if (payload.usage)
128
- usage = normalizeUsage(payload.usage);
129
- return false;
130
- }
131
- catch {
132
- throw unreadableResponseError();
133
- }
134
- };
135
- try {
136
- let done = false;
137
- while (!done) {
138
- const chunk = await reader.read();
139
- buffer += decoder.decode(chunk.value, { stream: !chunk.done });
140
- const events = buffer.split(/\r?\n\r?\n/);
141
- buffer = events.pop() ?? "";
142
- for (const event of events) {
143
- if (consume(event)) {
144
- done = true;
145
- break;
146
- }
147
- }
148
- if (chunk.done) {
149
- if (!done && buffer.trim())
150
- consume(buffer);
151
- break;
152
- }
153
- }
154
- }
155
- catch (error) {
156
- if (error instanceof DevmapError)
157
- throw error;
158
- throw unreadableResponseError();
159
- }
160
- if (!content.trim()) {
161
- throw new DevmapError("OpenRouter returned an empty response.", "Try again or choose another model.");
162
- }
163
- return { content: content.trim(), model, ...(usage ? { usage } : {}) };
164
- }
165
107
  async function mapOpenRouterResponseError(response) {
166
108
  if (response.status === 401 || response.status === 403) {
167
109
  return new DevmapError("The OpenRouter API key is invalid or no longer authorized.", "Run devmap init again with a valid OpenRouter API key.");
@@ -174,14 +116,4 @@ async function mapOpenRouterResponseError(response) {
174
116
  }
175
117
  return new DevmapError(`OpenRouter could not complete the request (HTTP ${response.status}).`, "Run devmap doctor and verify the selected model.");
176
118
  }
177
- function unreadableResponseError() {
178
- return new DevmapError("OpenRouter returned an unreadable response.", "Try again shortly or choose another model.");
179
- }
180
- function normalizeUsage(usage) {
181
- return {
182
- promptTokens: usage.prompt_tokens ?? 0,
183
- completionTokens: usage.completion_tokens ?? 0,
184
- totalTokens: usage.total_tokens ?? 0
185
- };
186
- }
187
119
  //# sourceMappingURL=openrouter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../src/ai/openrouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AASjD,MAAM,mBAAmB,GAAG,+CAA+C,CAAC;AAC5E,MAAM,kBAAkB,GAAG,uCAAuC,CAAC;AACnE,MAAM,CAAC,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AAWvD,MAAM,OAAO,gBAAgB;IAIR;IAHF,mBAAmB,CAAe;IAEnD,YACmB,MAAc,EAC/B,eAA6C,EAAE;QAD9B,WAAM,GAAN,MAAM,CAAQ;QAG/B,IAAI,CAAC,mBAAmB,GAAG,YAAY,CAAC,KAAK,IAAI,KAAK,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAA4B;QACzC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,MAAM,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QAEnE,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC7D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,WAAW,CACnB,wCAAwC,EACxC,oCAAoC,CACrC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO;YACP,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK;YACrC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CACV,OAA4B,EAC5B,OAAuB;QAEvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,MAAM,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QACnE,OAAO,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,OAA4B,EAC5B,MAAe;QAEf,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,EAAE;gBACzD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;oBACtC,cAAc,EAAE,kBAAkB;oBAClC,cAAc,EAAE,oCAAoC;oBACpD,oBAAoB,EAAE,QAAQ;iBAC/B;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1D,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,UAAU,EAAE,OAAO,CAAC,mBAAmB,IAAI,IAAI;oBAC/C,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG;oBACvC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpC,CAAC;aACH,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,WAAW,CACnB,kCAAkC,EAClC,uDAAuD,CACxD,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAc,EACd,eAA6C,EAAE;IAE/C,MAAM,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,MAAc,EACd,MAAe,EACf,eAA6C,EAAE;IAE/C,MAAM,mBAAmB,GAAG,YAAY,CAAC,KAAK,IAAI,KAAK,CAAC;IACxD,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,mBAAmB,CAAC,kBAAkB,EAAE;YACvD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE;SAC/C,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,WAAW,CACnB,kCAAkC,EAClC,2DAA2D,CAC5D,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvD,MAAM,IAAI,WAAW,CACnB,oCAAoC,EACpC,6DAA6D,CAC9D,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,WAAW,CACnB,0CAA0C,QAAQ,CAAC,MAAM,GAAG,EAC5D,0DAA0D,CAC3D,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;AACnD,CAAC;AAcD,SAAS,aAAa,CAAC,OAA4B;IACjD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;QACxB,OAAO,CAAC,KAAK;QACb,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;QACjC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1D,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,QAAkB;IACrD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAgC,CAAC;QACpE,OAAO;YACL,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAC9D,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,uBAAuB,EAAE,CAAC;IAClC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,QAAkB,EAClB,cAAsB,EACtB,OAAuB;IAEvB,IAAI,CAAC,QAAQ,CAAC,IAAI;QAAE,MAAM,uBAAuB,EAAE,CAAC;IACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,KAAK,GAAG,cAAc,CAAC;IAC3B,IAAI,KAA+B,CAAC;IAEpC,MAAM,OAAO,GAAG,CAAC,KAAa,EAAW,EAAE;QACzC,MAAM,IAAI,GAAG,KAAK;aACf,KAAK,CAAC,OAAO,CAAC;aACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;aAC1C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;aACxC,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE1C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAI9B,CAAC;YACF,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;YAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC;YACnD,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,IAAI,KAAK,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YACD,IAAI,OAAO,CAAC,KAAK;gBAAE,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,uBAAuB,EAAE,CAAC;QAClC,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC;QACH,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,OAAO,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAClC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC1C,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAC5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACnB,IAAI,GAAG,IAAI,CAAC;oBACZ,MAAM;gBACR,CAAC;YACH,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE;oBAAE,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC5C,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW;YAAE,MAAM,KAAK,CAAC;QAC9C,MAAM,uBAAuB,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACpB,MAAM,IAAI,WAAW,CACnB,wCAAwC,EACxC,oCAAoC,CACrC,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,KAAK,UAAU,0BAA0B,CAAC,QAAkB;IAC1D,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvD,OAAO,IAAI,WAAW,CACpB,4DAA4D,EAC5D,wDAAwD,CACzD,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,OAAO,IAAI,WAAW,CACpB,gCAAgC,EAChC,uCAAuC,CACxC,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;QAC3B,OAAO,IAAI,WAAW,CACpB,wCAAwC,EACxC,0DAA0D,CAC3D,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,WAAW,CACpB,mDAAmD,QAAQ,CAAC,MAAM,IAAI,EACtE,kDAAkD,CACnD,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO,IAAI,WAAW,CACpB,6CAA6C,EAC7C,4CAA4C,CAC7C,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAe;IACrC,OAAO;QACL,YAAY,EAAE,KAAK,CAAC,aAAa,IAAI,CAAC;QACtC,gBAAgB,EAAE,KAAK,CAAC,iBAAiB,IAAI,CAAC;QAC9C,WAAW,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC;KACrC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../src/ai/openrouter.ts"],"names":[],"mappings":"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"}
@@ -11,5 +11,5 @@ export declare function resolveAiRouting(config: DevmapConfig, task: AiTask): {
11
11
  fallbackModels: readonly string[];
12
12
  };
13
13
  export declare function providerDisplayName(provider: DevmapConfig["provider"]): string;
14
- export declare function inspectAiProvider(provider: DevmapConfig["provider"], apiKey: string, model: string): Promise<ProviderInspection>;
14
+ export declare function inspectAiProvider(config: DevmapConfig, model: string): Promise<ProviderInspection>;
15
15
  //# sourceMappingURL=provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAa3C,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,eAAe,GAAG,SAAS,CAAC;AAC7D,MAAM,MAAM,kBAAkB,GAAG;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9E,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,QAAQ,CAI7D;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAatD;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,GAAG,MAAM,CAE9E;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,EAClC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,CAAC,CAI7B"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,eAAe,GAAG,SAAS,CAAC;AAC7D,MAAM,MAAM,kBAAkB,GAAG;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9E,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,QAAQ,CAS7D;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAkBtD;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,GAAG,MAAM,CAE9E;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,CAAC,CAG7B"}
@@ -1,28 +1,30 @@
1
- import { DEFAULT_AI_FALLBACKS, DEFAULT_AI_MODELS, GroqClient, inspectGroqProvider } from "./groq.js";
2
- import { inspectOpenRouterProvider, OpenRouterClient, OPENROUTER_FREE_MODEL } from "./openrouter.js";
1
+ import { DevmapError } from "../utils/errors.js";
2
+ import { PROVIDERS } from "./registry.js";
3
3
  export function createAiClient(config) {
4
- return config.provider === "openrouter"
5
- ? new OpenRouterClient(config.apiKey ?? "")
6
- : new GroqClient(config.apiKey ?? "");
4
+ const descriptor = PROVIDERS[config.provider];
5
+ if (descriptor.requiresBaseUrl && !config.baseUrl?.trim()) {
6
+ throw new DevmapError(`${descriptor.displayName} requires an endpoint base URL.`, "Run devmap init and set the base URL of your OpenAI-compatible endpoint.");
7
+ }
8
+ return descriptor.createClient(config.apiKey ?? "", config.baseUrl);
7
9
  }
8
10
  export function resolveAiRouting(config, task) {
9
11
  if (config.model !== "auto") {
10
12
  return { model: config.model, fallbackModels: [] };
11
13
  }
12
- if (config.provider === "openrouter") {
13
- return { model: OPENROUTER_FREE_MODEL, fallbackModels: [] };
14
+ const descriptor = PROVIDERS[config.provider];
15
+ const resolved = descriptor.supportsAutoModel
16
+ ? descriptor.resolveAutoModel?.(task)
17
+ : undefined;
18
+ if (!resolved) {
19
+ throw new DevmapError(`${descriptor.displayName} doesn't support automatic model selection.`, "Run devmap init and choose a model explicitly.");
14
20
  }
15
- return {
16
- model: DEFAULT_AI_MODELS[task],
17
- fallbackModels: DEFAULT_AI_FALLBACKS[task]
18
- };
21
+ return resolved;
19
22
  }
20
23
  export function providerDisplayName(provider) {
21
- return provider === "openrouter" ? "OpenRouter" : "Groq";
24
+ return PROVIDERS[provider].displayName;
22
25
  }
23
- export function inspectAiProvider(provider, apiKey, model) {
24
- return provider === "openrouter"
25
- ? inspectOpenRouterProvider(apiKey, model)
26
- : inspectGroqProvider(apiKey, model);
26
+ export function inspectAiProvider(config, model) {
27
+ const descriptor = PROVIDERS[config.provider];
28
+ return descriptor.inspect(config.apiKey ?? "", model, config.baseUrl);
27
29
  }
28
30
  //# sourceMappingURL=provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,iBAAiB,CAAC;AAKzB,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,OAAO,MAAM,CAAC,QAAQ,KAAK,YAAY;QACrC,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;QAC3C,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,MAAoB,EACpB,IAAY;IAEZ,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;IACrD,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QACrC,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;IAC9D,CAAC;IAED,OAAO;QACL,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC;QAC9B,cAAc,EAAE,oBAAoB,CAAC,IAAI,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAkC;IACpE,OAAO,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,QAAkC,EAClC,MAAc,EACd,KAAa;IAEb,OAAO,QAAQ,KAAK,YAAY;QAC9B,CAAC,CAAC,yBAAyB,CAAC,MAAM,EAAE,KAAK,CAAC;QAC1C,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAK1C,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,UAAU,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;QAC1D,MAAM,IAAI,WAAW,CACnB,GAAG,UAAU,CAAC,WAAW,iCAAiC,EAC1D,0EAA0E,CAC3E,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,MAAoB,EACpB,IAAY;IAEZ,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;IACrD,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,UAAU,CAAC,iBAAiB;QAC3C,CAAC,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC;QACrC,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,WAAW,CACnB,GAAG,UAAU,CAAC,WAAW,6CAA6C,EACtE,gDAAgD,CACjD,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAkC;IACpE,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAAoB,EACpB,KAAa;IAEb,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9C,OAAO,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AACxE,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { AiClient } from "./types.js";
2
+ export type ProviderId = "groq" | "openrouter" | "custom";
3
+ export type ProviderDescriptor = {
4
+ id: ProviderId;
5
+ displayName: string;
6
+ envVarName: string;
7
+ requiresBaseUrl: boolean;
8
+ defaultBaseUrl?: string;
9
+ defaultModel?: string;
10
+ apiKeyHintUrl?: string;
11
+ supportsAutoModel: boolean;
12
+ resolveAutoModel?: (task: "analyze" | "flowNarration" | "explain") => {
13
+ model: string;
14
+ fallbackModels: readonly string[];
15
+ };
16
+ createClient: (apiKey: string, baseUrl?: string) => AiClient;
17
+ listModels?: (apiKey: string, baseUrl?: string) => Promise<string[]>;
18
+ inspect: (apiKey: string, model: string | undefined, baseUrl?: string) => Promise<{
19
+ reachable: true;
20
+ modelAvailable: boolean;
21
+ }>;
22
+ };
23
+ export declare const PROVIDERS: Record<ProviderId, ProviderDescriptor>;
24
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/ai/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAmB3C,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,YAAY,GAAG,QAAQ,CAAC;AAE1D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,UAAU,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,CACjB,IAAI,EAAE,SAAS,GAAG,eAAe,GAAG,SAAS,KAC1C;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC;IAC1D,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,QAAQ,CAAC;IAC7D,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACrE,OAAO,EAAE,CACP,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC;QAAE,SAAS,EAAE,IAAI,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC5D,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,kBAAkB,CA0C5D,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { DEFAULT_AI_FALLBACKS, DEFAULT_AI_MODELS, GroqClient, inspectGroqProvider, listGroqModels } from "./groq.js";
2
+ import { inspectOpenRouterProvider, OpenRouterClient, OPENROUTER_FREE_MODEL } from "./openrouter.js";
3
+ import { CustomProviderClient, inspectCustomProvider, listCustomModels } from "./custom.js";
4
+ export const PROVIDERS = {
5
+ groq: {
6
+ id: "groq",
7
+ displayName: "Groq",
8
+ envVarName: "GROQ_API_KEY",
9
+ requiresBaseUrl: false,
10
+ supportsAutoModel: true,
11
+ apiKeyHintUrl: "https://console.groq.com/keys",
12
+ resolveAutoModel: (task) => ({
13
+ model: DEFAULT_AI_MODELS[task],
14
+ fallbackModels: DEFAULT_AI_FALLBACKS[task]
15
+ }),
16
+ createClient: (apiKey) => new GroqClient(apiKey),
17
+ listModels: (apiKey) => listGroqModels(apiKey),
18
+ inspect: (apiKey, model) => inspectGroqProvider(apiKey, model)
19
+ },
20
+ openrouter: {
21
+ id: "openrouter",
22
+ displayName: "OpenRouter",
23
+ envVarName: "OPENROUTER_API_KEY",
24
+ requiresBaseUrl: false,
25
+ supportsAutoModel: true,
26
+ defaultModel: OPENROUTER_FREE_MODEL,
27
+ apiKeyHintUrl: "https://openrouter.ai/keys",
28
+ resolveAutoModel: () => ({
29
+ model: OPENROUTER_FREE_MODEL,
30
+ fallbackModels: []
31
+ }),
32
+ createClient: (apiKey) => new OpenRouterClient(apiKey),
33
+ inspect: (apiKey, model) => inspectOpenRouterProvider(apiKey, model)
34
+ },
35
+ custom: {
36
+ id: "custom",
37
+ displayName: "Custom (OpenAI-compatible)",
38
+ envVarName: "CUSTOM_API_KEY",
39
+ requiresBaseUrl: true,
40
+ defaultBaseUrl: "http://localhost:20128/v1",
41
+ supportsAutoModel: false,
42
+ createClient: (apiKey, baseUrl) => new CustomProviderClient(apiKey, baseUrl ?? ""),
43
+ listModels: (apiKey, baseUrl) => listCustomModels(apiKey, baseUrl ?? ""),
44
+ inspect: (apiKey, model, baseUrl) => inspectCustomProvider(apiKey, baseUrl ?? "", model)
45
+ }
46
+ };
47
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/ai/registry.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,cAAc,EACf,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAyBrB,MAAM,CAAC,MAAM,SAAS,GAA2C;IAC/D,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM;QACV,WAAW,EAAE,MAAM;QACnB,UAAU,EAAE,cAAc;QAC1B,eAAe,EAAE,KAAK;QACtB,iBAAiB,EAAE,IAAI;QACvB,aAAa,EAAE,+BAA+B;QAC9C,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC3B,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC;YAC9B,cAAc,EAAE,oBAAoB,CAAC,IAAI,CAAC;SAC3C,CAAC;QACF,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC;QAChD,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC;QAC9C,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC;KAC/D;IACD,UAAU,EAAE;QACV,EAAE,EAAE,YAAY;QAChB,WAAW,EAAE,YAAY;QACzB,UAAU,EAAE,oBAAoB;QAChC,eAAe,EAAE,KAAK;QACtB,iBAAiB,EAAE,IAAI;QACvB,YAAY,EAAE,qBAAqB;QACnC,aAAa,EAAE,4BAA4B;QAC3C,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;YACvB,KAAK,EAAE,qBAAqB;YAC5B,cAAc,EAAE,EAAE;SACnB,CAAC;QACF,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC;QACtD,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,yBAAyB,CAAC,MAAM,EAAE,KAAK,CAAC;KACrE;IACD,MAAM,EAAE;QACN,EAAE,EAAE,QAAQ;QACZ,WAAW,EAAE,4BAA4B;QACzC,UAAU,EAAE,gBAAgB;QAC5B,eAAe,EAAE,IAAI;QACrB,cAAc,EAAE,2BAA2B;QAC3C,iBAAiB,EAAE,KAAK;QACxB,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,oBAAoB,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;QAClF,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;QACxE,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC;KACzF;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAG5B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChD,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,YAAY,GAAE,kBAAuB,GACpC,OAAO,CAAC,IAAI,CAAC,CASf"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAI5B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChD,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,YAAY,GAAE,kBAAuB,GACpC,OAAO,CAAC,IAAI,CAAC,CASf"}
@@ -1,5 +1,6 @@
1
1
  import { resolve } from "node:path";
2
2
  import { readConfig, writeConfig, writeLocalConfig } from "../utils/config.js";
3
+ import { PROVIDERS } from "../ai/registry.js";
3
4
  import { output, withJsonOutput } from "../utils/output.js";
4
5
  export async function configModelCommand(model, dependencies = {}) {
5
6
  if (dependencies.json) {
@@ -28,6 +29,13 @@ async function updateModel(model, dependencies) {
28
29
  hint: "Run devmap init before changing the model."
29
30
  };
30
31
  }
32
+ const descriptor = PROVIDERS[config.provider];
33
+ const autoRouting = descriptor.supportsAutoModel
34
+ ? descriptor.resolveAutoModel?.("analyze")
35
+ : undefined;
36
+ const resolvedModel = autoRouting && autoRouting.fallbackModels.length === 0
37
+ ? autoRouting.model
38
+ : undefined;
31
39
  if (dependencies.local) {
32
40
  const projectRoot = resolve(dependencies.projectRoot ?? process.cwd());
33
41
  await writeLocalConfig(projectRoot, { model: selectedModel });
@@ -38,8 +46,8 @@ async function updateModel(model, dependencies) {
38
46
  provider: config.provider,
39
47
  model: selectedModel,
40
48
  automaticRouting: selectedModel === "auto",
41
- ...(selectedModel === "auto" && config.provider === "openrouter"
42
- ? { resolvedModel: "openrouter/free" }
49
+ ...(selectedModel === "auto" && resolvedModel
50
+ ? { resolvedModel }
43
51
  : {})
44
52
  };
45
53
  }
@@ -48,8 +56,8 @@ async function updateModel(model, dependencies) {
48
56
  model: selectedModel
49
57
  });
50
58
  output.success(selectedModel === "auto"
51
- ? config.provider === "openrouter"
52
- ? "Restored OpenRouter free model routing (openrouter/free)."
59
+ ? resolvedModel
60
+ ? `Restored ${descriptor.displayName} free model routing (${resolvedModel}).`
53
61
  : "Restored automatic command-based model routing."
54
62
  : `Default model override set to ${selectedModel}.`);
55
63
  return {
@@ -57,8 +65,8 @@ async function updateModel(model, dependencies) {
57
65
  provider: config.provider,
58
66
  model: selectedModel,
59
67
  automaticRouting: selectedModel === "auto",
60
- ...(selectedModel === "auto" && config.provider === "openrouter"
61
- ? { resolvedModel: "openrouter/free" }
68
+ ...(selectedModel === "auto" && resolvedModel
69
+ ? { resolvedModel }
62
70
  : {})
63
71
  };
64
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ export type DoctorDependencies = {
5
5
  projectRoot?: string;
6
6
  loadConfig?: () => Promise<DevmapConfig | null>;
7
7
  loadLocalConfig?: (projectRoot: string) => Promise<LocalDevmapConfig | null>;
8
- inspectProvider?: (apiKey: string, model: string, provider: DevmapConfig["provider"]) => Promise<ProviderInspection>;
8
+ inspectProvider?: (config: DevmapConfig, model: string) => Promise<ProviderInspection>;
9
9
  };
10
10
  export declare function doctorCommand(dependencies?: DoctorDependencies): Promise<void>;
11
11
  //# sourceMappingURL=doctor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAQ3B,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACvB,MAAM,oBAAoB,CAAC;AAO5B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChD,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IAC7E,eAAe,CAAC,EAAE,CAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,KAC/B,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAClC,CAAC;AAEF,wBAAsB,aAAa,CACjC,YAAY,GAAE,kBAAuB,GACpC,OAAO,CAAC,IAAI,CAAC,CASf"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAQ3B,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACvB,MAAM,oBAAoB,CAAC;AAO5B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChD,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IAC7E,eAAe,CAAC,EAAE,CAChB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,KACV,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAClC,CAAC;AAEF,wBAAsB,aAAa,CACjC,YAAY,GAAE,kBAAuB,GACpC,OAAO,CAAC,IAAI,CAAC,CASf"}
@@ -24,7 +24,7 @@ async function runDoctor(dependencies) {
24
24
  const loadConfig = dependencies.loadConfig ?? readConfig;
25
25
  const loadLocalConfig = dependencies.loadLocalConfig ?? readLocalConfig;
26
26
  const inspectProvider = dependencies.inspectProvider
27
- ?? ((apiKey, model, provider) => (inspectAiProvider(provider, apiKey, model)));
27
+ ?? ((config, model) => inspectAiProvider(config, model));
28
28
  const [config, localConfig, snapshotResult, files] = await Promise.all([
29
29
  loadConfig(),
30
30
  loadLocalConfig(projectRoot),
@@ -74,7 +74,7 @@ async function runDoctor(dependencies) {
74
74
  }
75
75
  else {
76
76
  try {
77
- const provider = await inspectProvider(config.apiKey, selectedModel, config.provider);
77
+ const provider = await inspectProvider(config, selectedModel);
78
78
  apiKeyStatus = provider.reachable ? "valid" : "unreachable";
79
79
  modelStatus = provider.modelAvailable
80
80
  ? describeModel(selectedModel, modelSource)
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
- import { type DevmapConfig } from "../utils/config.js";
1
+ import { type DevmapConfig, type DevmapProvider } from "../utils/config.js";
2
2
  import { type Prompt } from "../utils/prompt.js";
3
3
  export type InitDependencies = {
4
4
  json?: boolean;
5
5
  projectRoot?: string;
6
6
  prompt?: Prompt;
7
- validateApiKey?: (apiKey: string, provider: DevmapConfig["provider"]) => Promise<void>;
8
- listGroqModels?: (apiKey: string) => Promise<string[]>;
7
+ validateApiKey?: (apiKey: string, provider: DevmapProvider, baseUrl?: string) => Promise<void>;
8
+ listModels?: (apiKey: string, baseUrl?: string) => Promise<string[]>;
9
9
  isInteractive?: boolean;
10
10
  environmentApiKey?: string;
11
11
  environmentOpenRouterApiKey?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAQA,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUhF,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG/D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,CACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,KAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChD,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD,CAAC;AAEF,wBAAsB,WAAW,CAAC,YAAY,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CASpF"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAU5B,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG/D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,CACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,cAAc,EACxB,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACrE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChD,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD,CAAC;AAEF,wBAAsB,WAAW,CAAC,YAAY,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CASpF"}