neoctl 0.2.53 → 0.2.55

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 (81) hide show
  1. package/README.md +0 -1
  2. package/dist/agents/agent-activity.js +1 -1
  3. package/dist/agents/agent-activity.js.map +1 -1
  4. package/dist/agents/agent-tool.js +4 -4
  5. package/dist/agents/agent-tool.js.map +1 -1
  6. package/dist/core/context-metrics.js +2 -1
  7. package/dist/core/context-metrics.js.map +1 -1
  8. package/dist/core/query-engine.d.ts +13 -0
  9. package/dist/core/query-engine.js +98 -18
  10. package/dist/core/query-engine.js.map +1 -1
  11. package/dist/core/query.d.ts +1 -0
  12. package/dist/core/query.js +10 -1
  13. package/dist/core/query.js.map +1 -1
  14. package/dist/core/run-agent.js +45 -36
  15. package/dist/core/run-agent.js.map +1 -1
  16. package/dist/index.d.ts +2 -0
  17. package/dist/index.js +2 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/model/agent-settings-boundary.d.ts +11 -0
  20. package/dist/model/agent-settings-boundary.js +53 -0
  21. package/dist/model/agent-settings-boundary.js.map +1 -0
  22. package/dist/model/anthropic-adapter.d.ts +24 -0
  23. package/dist/model/anthropic-adapter.js +106 -0
  24. package/dist/model/anthropic-adapter.js.map +1 -0
  25. package/dist/model/anthropic-mapper.d.ts +14 -0
  26. package/dist/model/anthropic-mapper.js +364 -0
  27. package/dist/model/anthropic-mapper.js.map +1 -0
  28. package/dist/model/composition-runtime.d.ts +31 -0
  29. package/dist/model/composition-runtime.js +31 -0
  30. package/dist/model/composition-runtime.js.map +1 -0
  31. package/dist/model/config.d.ts +10 -3
  32. package/dist/model/config.js +26 -10
  33. package/dist/model/config.js.map +1 -1
  34. package/dist/model/context-window.d.ts +16 -1
  35. package/dist/model/context-window.js +171 -5
  36. package/dist/model/context-window.js.map +1 -1
  37. package/dist/model/env.js +0 -1
  38. package/dist/model/env.js.map +1 -1
  39. package/dist/model/model-gateway.d.ts +4 -1
  40. package/dist/model/model-gateway.js +4 -0
  41. package/dist/model/model-gateway.js.map +1 -1
  42. package/dist/model/model-metadata.json +10 -3
  43. package/dist/model/openai-adapter.js +2 -1
  44. package/dist/model/openai-adapter.js.map +1 -1
  45. package/dist/model/provider-factory.js +28 -1
  46. package/dist/model/provider-factory.js.map +1 -1
  47. package/dist/model/settings-files.d.ts +3 -0
  48. package/dist/model/settings-files.js +43 -0
  49. package/dist/model/settings-files.js.map +1 -0
  50. package/dist/model/settings-store.d.ts +85 -0
  51. package/dist/model/settings-store.js +235 -0
  52. package/dist/model/settings-store.js.map +1 -0
  53. package/dist/model/settings-sync.d.ts +31 -0
  54. package/dist/model/settings-sync.js +81 -0
  55. package/dist/model/settings-sync.js.map +1 -0
  56. package/dist/repl/commands.d.ts +1 -1
  57. package/dist/repl/commands.js +3 -2
  58. package/dist/repl/commands.js.map +1 -1
  59. package/dist/repl/index.js +51 -25
  60. package/dist/repl/index.js.map +1 -1
  61. package/dist/session/session-store.d.ts +11 -0
  62. package/dist/session/session-store.js +18 -1
  63. package/dist/session/session-store.js.map +1 -1
  64. package/dist/tasks/task-persistence.js +2 -1
  65. package/dist/tasks/task-persistence.js.map +1 -1
  66. package/dist/tools/builtins/image-generation-tool.js +2 -0
  67. package/dist/tools/builtins/image-generation-tool.js.map +1 -1
  68. package/dist/tools/builtins/search-providers.js +2 -0
  69. package/dist/tools/builtins/search-providers.js.map +1 -1
  70. package/dist/tools/builtins/search-tool.d.ts +2 -0
  71. package/dist/tools/builtins/search-tool.js +2 -2
  72. package/dist/tools/builtins/search-tool.js.map +1 -1
  73. package/dist/types/events.d.ts +1 -0
  74. package/dist/web/index.d.ts +9 -3
  75. package/dist/web/index.js +123 -32
  76. package/dist/web/index.js.map +1 -1
  77. package/dist/web/model-settings-api.d.ts +9 -0
  78. package/dist/web/model-settings-api.js +236 -0
  79. package/dist/web/model-settings-api.js.map +1 -0
  80. package/package.json +2 -2
  81. package/scripts/initialize-model-metadata.mjs +6 -0
@@ -1,6 +1,9 @@
1
+ import { randomUUID } from "node:crypto";
1
2
  import { existsSync, readFileSync } from "node:fs";
2
3
  import path from "node:path";
3
4
  import { fileURLToPath } from "node:url";
5
+ import { isReasoningEffort } from "./model-gateway.js";
6
+ import { modelSettingsHome, atomicJson, locked } from "./settings-files.js";
4
7
  let cachedCatalog;
5
8
  const moduleDir = path.dirname(fileURLToPath(import.meta.url));
6
9
  export function resolveContextWindowTokens(model, env = process.env) {
@@ -22,7 +25,11 @@ export function resolveContextWindowTokens(model, env = process.env) {
22
25
  }
23
26
  export function findModelMetadata(model, catalog = loadModelCatalog()) {
24
27
  const requestedModel = normalizeModelId(model);
25
- return catalog.models.find((entry) => entry.modelIds.some((modelId) => normalizeModelId(modelId) === requestedModel));
28
+ return catalog.models.find((entry) => normalizeModelId(entry.id) === requestedModel || entry.modelIds.some((modelId) => normalizeModelId(modelId) === requestedModel));
29
+ }
30
+ export function modelProtocols(model) {
31
+ // Migration only: preserve legacy provider classification until explicitly edited.
32
+ return model.protocols ?? [model.provider === "anthropic" ? "anthropic" : "openai"];
26
33
  }
27
34
  export function supportsImageInput(model, catalog = loadModelCatalog()) {
28
35
  if (!model)
@@ -44,13 +51,172 @@ export function supportsReasoningEffort(model, effort, catalog = loadModelCatalo
44
51
  return efforts.includes(effort);
45
52
  }
46
53
  export function loadModelCatalog() {
47
- if (cachedCatalog)
48
- return cachedCatalog;
49
- const file = findModelCatalogFile();
54
+ const file = path.join(modelSettingsHome(), "model-metadata.json");
55
+ if (!initializedFiles.has(file)) {
56
+ const bundled = JSON.parse(readFileSync(findModelCatalogFile(), "utf8"));
57
+ locked(file, () => {
58
+ const catalog = existsSync(file) ? JSON.parse(readFileSync(file, "utf8")) : structuredClone(bundled);
59
+ validateModelCatalog(catalog);
60
+ const before = JSON.stringify(catalog);
61
+ let changed = !existsSync(file);
62
+ // New bundled entries may reference new sources; preserve user-owned values.
63
+ for (const [key, url] of Object.entries(bundled.sources ?? {})) {
64
+ if (!Object.hasOwn(catalog.sources ?? {}, key)) {
65
+ (catalog.sources ??= {})[key] = url;
66
+ changed = true;
67
+ }
68
+ }
69
+ for (const entry of bundled.models)
70
+ if (!catalog.models.some(m => normalizeModelId(m.id) === normalizeModelId(entry.id)) && !catalog.excludedModelIds?.some(id => normalizeModelId(id) === normalizeModelId(entry.id))) {
71
+ // Preserve user-owned aliases when a later bundled entry is introduced.
72
+ const aliases = new Set(catalog.models.flatMap(m => [m.id, ...m.modelIds].map(normalizeModelId)));
73
+ if (aliases.has(normalizeModelId(entry.id)))
74
+ continue;
75
+ const modelIds = entry.modelIds.filter(id => !aliases.has(normalizeModelId(id)) && !catalog.removedModelIds?.some(removed => normalizeModelId(removed) === normalizeModelId(id)));
76
+ if (modelIds.length)
77
+ catalog.models.push({ ...entry, modelIds });
78
+ changed = true;
79
+ }
80
+ catalog.models.sort((a, b) => a.id.localeCompare(b.id, "en", { numeric: true }));
81
+ validateModelCatalog(catalog);
82
+ if (changed || JSON.stringify(catalog) !== before || !catalog.revision) {
83
+ catalog.revision = randomUUID();
84
+ atomicJson(file, catalog);
85
+ }
86
+ });
87
+ initializedFiles.add(file);
88
+ }
89
+ // Read the small file on access: other CLI/Web processes observe saves immediately.
50
90
  const raw = readFileSync(file, "utf8");
51
- cachedCatalog = JSON.parse(raw);
91
+ if (cachedSource !== file + raw) {
92
+ const parsed = JSON.parse(raw);
93
+ validateModelCatalog(parsed);
94
+ cachedCatalog = parsed;
95
+ cachedSource = file + raw;
96
+ }
52
97
  return cachedCatalog;
53
98
  }
99
+ const initializedFiles = new Set();
100
+ let cachedSource = "";
101
+ export function validateModelCatalog(catalog) {
102
+ if (!catalog || !Array.isArray(catalog.models))
103
+ throw new Error("模型元数据格式无效。");
104
+ for (const key of ["excludedModelIds", "removedModelIds"])
105
+ if (catalog[key] !== undefined && (!Array.isArray(catalog[key]) || catalog[key].some(id => typeof id !== "string" || !id.trim())))
106
+ throw new Error("模型删除记录无效。");
107
+ const owners = new Map();
108
+ for (const m of catalog.models) {
109
+ for (const id of [m?.id, ...(Array.isArray(m?.modelIds) ? m.modelIds : [])]) {
110
+ if (typeof id !== "string")
111
+ continue;
112
+ const key = normalizeModelId(id), owner = owners.get(key);
113
+ if (owner && owner !== m)
114
+ throw new Error("模型 ID 或别名重复,已被其他条目使用。");
115
+ owners.set(key, m);
116
+ }
117
+ }
118
+ const ids = new Set(), aliases = new Set();
119
+ for (const m of catalog.models) {
120
+ if (!m || typeof m.id !== "string" || !m.id.trim() || ids.has(normalizeModelId(m.id)))
121
+ throw new Error("模型 ID 为空或重复。");
122
+ ids.add(normalizeModelId(m.id));
123
+ if (m.protocols !== undefined && (!Array.isArray(m.protocols) || !m.protocols.length || m.protocols.some(p => !["openai", "anthropic"].includes(p)) || new Set(m.protocols).size !== m.protocols.length))
124
+ throw new Error("模型兼容接口无效。");
125
+ if (typeof m.provider !== "string" || !Array.isArray(m.modelIds) || !m.modelIds.length)
126
+ throw new Error("模型缺少供应商或别名。");
127
+ for (const alias of m.modelIds) {
128
+ if (typeof alias !== "string" || !alias.trim() || aliases.has(alias.trim().toLowerCase()))
129
+ throw new Error("模型别名为空或重复。");
130
+ aliases.add(alias.trim().toLowerCase());
131
+ }
132
+ for (const key of ["contextWindowTokens", "maxOutputTokens"])
133
+ if (m[key] !== undefined && (!Number.isSafeInteger(m[key]) || m[key] <= 0))
134
+ throw new Error("模型 Token 限制须为正整数。");
135
+ for (const key of ["reasoning", "imageInput"])
136
+ if (m[key] !== undefined && typeof m[key] !== "boolean")
137
+ throw new Error("模型能力须为布尔值。");
138
+ if (m.reasoningEfforts !== undefined && (!Array.isArray(m.reasoningEfforts) || m.reasoningEfforts.some(v => !isReasoningEffort(v)) || new Set(m.reasoningEfforts).size !== m.reasoningEfforts.length))
139
+ throw new Error("推理档位无效。");
140
+ }
141
+ }
142
+ export class ModelMetadataConflict extends Error {
143
+ status = 409;
144
+ }
145
+ export function modelMetadataIds(entry) {
146
+ return [...new Set([entry.id, ...entry.modelIds].map(normalizeModelId))];
147
+ }
148
+ /** Unknown custom models remain supported; explicitly removed IDs cannot bypass validation. */
149
+ export function assertModelNotRemoved(model, catalog = loadModelCatalog()) {
150
+ if (!findModelMetadata(model, catalog) && catalog.removedModelIds?.some(id => normalizeModelId(id) === normalizeModelId(model))) {
151
+ throw new Error(`模型 ${model} 已被删除或移除别名,请重新选择模型。`);
152
+ }
153
+ }
154
+ function checkRevision(catalog, revision) {
155
+ if (revision !== undefined && catalog.revision !== revision)
156
+ throw new ModelMetadataConflict("模型库已更新,请重新加载后操作。");
157
+ }
158
+ function originalIndex(catalog, original) {
159
+ const index = catalog.models.findIndex(m => normalizeModelId(m.id) === normalizeModelId(original.id));
160
+ if (index < 0)
161
+ throw new ModelMetadataConflict("模型条目已不存在,请重新加载。");
162
+ if (JSON.stringify(catalog.models[index]) !== JSON.stringify(original))
163
+ throw new ModelMetadataConflict("模型条目已更新,请重新加载后操作。");
164
+ return index;
165
+ }
166
+ function suppress(catalog, entry, removed) {
167
+ catalog.excludedModelIds = [...new Set([...(catalog.excludedModelIds ?? []), normalizeModelId(entry.id)])];
168
+ catalog.removedModelIds = [...new Set([...(catalog.removedModelIds ?? []), ...removed])];
169
+ }
170
+ function commitCatalog(file, catalog) {
171
+ validateModelCatalog(catalog);
172
+ catalog.models.sort((a, b) => a.id.localeCompare(b.id, "en", { numeric: true }));
173
+ catalog.revision = randomUUID();
174
+ atomicJson(file, catalog);
175
+ cachedSource = "";
176
+ return catalog;
177
+ }
178
+ export function saveModelMetadata(entry, original, revision) {
179
+ loadModelCatalog();
180
+ const file = path.join(modelSettingsHome(), "model-metadata.json");
181
+ return locked(file, () => {
182
+ const catalog = JSON.parse(readFileSync(file, "utf8"));
183
+ checkRevision(catalog, revision);
184
+ entry = structuredClone(entry);
185
+ if (typeof entry?.id === "string")
186
+ entry.id = entry.id.trim();
187
+ if (original) {
188
+ const index = originalIndex(catalog, original);
189
+ const retained = new Set(modelMetadataIds(entry));
190
+ suppress(catalog, original, modelMetadataIds(original).filter(id => !retained.has(id)));
191
+ catalog.models[index] = entry;
192
+ }
193
+ else {
194
+ if (catalog.models.some(m => normalizeModelId(m.id) === normalizeModelId(entry.id)))
195
+ throw new ModelMetadataConflict("模型 ID 已存在,请重新加载。");
196
+ catalog.models.push(entry);
197
+ }
198
+ // Explicit recreation restores use, without letting bundled initialization resurrect removals.
199
+ const restored = new Set(modelMetadataIds(entry));
200
+ catalog.removedModelIds = catalog.removedModelIds?.filter(id => !restored.has(normalizeModelId(id)));
201
+ return commitCatalog(file, catalog);
202
+ });
203
+ }
204
+ export function deleteModelMetadata(original, revision, beforeCommit) {
205
+ loadModelCatalog();
206
+ const file = path.join(modelSettingsHome(), "model-metadata.json");
207
+ return locked(file, () => {
208
+ const catalog = JSON.parse(readFileSync(file, "utf8"));
209
+ checkRevision(catalog, revision);
210
+ if (!original || typeof original.id !== "string")
211
+ throw new Error("请选择要删除的模型。");
212
+ const index = originalIndex(catalog, original);
213
+ suppress(catalog, catalog.models[index], modelMetadataIds(catalog.models[index]));
214
+ catalog.models.splice(index, 1);
215
+ validateModelCatalog(catalog);
216
+ beforeCommit?.();
217
+ return commitCatalog(file, catalog);
218
+ });
219
+ }
54
220
  function findModelCatalogFile() {
55
221
  const candidates = [
56
222
  path.join(moduleDir, "model-metadata.json"),
@@ -1 +1 @@
1
- {"version":3,"file":"context-window.js","sourceRoot":"","sources":["../../src/model/context-window.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-window.js","sourceRoot":"","sources":["../../src/model/context-window.ts"],"names":[],"mappings":"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"}
package/dist/model/env.js CHANGED
@@ -12,7 +12,6 @@ MODEL_PROVIDER=openai
12
12
  # OPENAI_API_KEY=your-openai-api-key
13
13
  # OPENAI_BASE_URL=https://api.openai.com
14
14
  # OPENAI_MODEL=gpt-5.6
15
- # OPENAI_ENDPOINT=auto
16
15
 
17
16
  # Shared model runtime settings
18
17
  # MODEL_REASONING_EFFORT=high
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/model/env.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/model/env.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,9 @@ export interface ModelUsage {
8
8
  cachedTokens?: number;
9
9
  raw?: unknown;
10
10
  }
11
- export type ReasoningEffort = "none" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
11
+ export type ReasoningEffort = string;
12
+ /** API enum values, not display labels or control commands. */
13
+ export declare function isReasoningEffort(value: unknown): value is ReasoningEffort;
12
14
  export interface ReasoningConfig {
13
15
  effort?: ReasoningEffort;
14
16
  summary?: "auto" | "concise" | "detailed";
@@ -85,6 +87,7 @@ export type ModelStreamEvent = {
85
87
  } | {
86
88
  type: "usage";
87
89
  usage: ModelUsage;
90
+ provisional?: boolean;
88
91
  } | {
89
92
  type: "retrying";
90
93
  error: Error;
@@ -1,4 +1,8 @@
1
1
  import { createTextMessage } from "../types/messages.js";
2
+ /** API enum values, not display labels or control commands. */
3
+ export function isReasoningEffort(value) {
4
+ return typeof value === "string" && /^[A-Za-z0-9][A-Za-z0-9_.-]{0,63}$/.test(value) && !["default", "off"].includes(value);
5
+ }
2
6
  export class NotConfiguredModelGateway {
3
7
  async *stream(request) {
4
8
  const lastUserText = request.messages
@@ -1 +1 @@
1
- {"version":3,"file":"model-gateway.js","sourceRoot":"","sources":["../../src/model/model-gateway.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAqEzD,MAAM,OAAO,yBAAyB;IACpC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAqB;QACjC,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ;aAClC,KAAK,EAAE;aACP,OAAO,EAAE;aACT,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;aACpC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC;QAEhD,MAAM;YACJ,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,iBAAiB,CACxB,WAAW,EACX,uDAAuD,YAAY,IAAI,SAAS,EAAE,CACnF;SACF,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"model-gateway.js","sourceRoot":"","sources":["../../src/model/model-gateway.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAazD,+DAA+D;AAC/D,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,mCAAmC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7H,CAAC;AAyDD,MAAM,OAAO,yBAAyB;IACpC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAqB;QACjC,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ;aAClC,KAAK,EAAE;aACP,OAAO,EAAE;aACT,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;aACpC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC;QAEhD,MAAM;YACJ,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,iBAAiB,CACxB,WAAW,EACX,uDAAuD,YAAY,IAAI,SAAS,EAAE,CACnF;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -1,15 +1,22 @@
1
1
  {
2
- "updatedAt": "2026-09-30",
2
+ "updatedAt": "2026-11-03",
3
3
  "notes": [
4
- "Static metadata for the supported multimodal GPT model aliases.",
4
+ "Bundled metadata for current mainstream Claude models and supported OpenAI models.",
5
+ "Claude contextWindowTokens is neo's configured 256000-token usage ceiling, not the upstream model maximum or a pricing guarantee.",
5
6
  "MODEL_CONTEXT_WINDOW_TOKENS or OPENAI_CONTEXT_WINDOW_TOKENS overrides contextWindowTokens at runtime.",
6
- "modelIds are matched exactly."
7
+ "Model IDs and aliases are matched case-insensitively. Availability depends on the connected API and account."
7
8
  ],
8
9
  "sources": {
10
+ "claude-models": "https://platform.claude.com/docs/en/models/overview",
11
+ "claude-effort": "https://platform.claude.com/docs/en/build-with-claude/effort",
9
12
  "openai-models": "https://developers.openai.com/api/docs/models",
10
13
  "openai-reasoning": "https://developers.openai.com/api/docs/guides/reasoning"
11
14
  },
12
15
  "models": [
16
+ {"id": "claude-fable-5-1", "provider": "anthropic", "protocols": ["anthropic"], "modelIds": ["claude-fable-5-1"], "contextWindowTokens": 256000, "maxOutputTokens": 128000, "knowledgeCutoff": "2026-06", "reasoning": true, "reasoningEfforts": ["low", "medium", "high", "xhigh", "max"], "imageInput": true, "source": "claude-models", "notes": "Adaptive thinking; thinking cannot be disabled."},
17
+ {"id": "claude-haiku-5-5", "provider": "anthropic", "protocols": ["anthropic"], "modelIds": ["claude-haiku-5-5"], "contextWindowTokens": 256000, "maxOutputTokens": 128000, "knowledgeCutoff": "2026-06", "reasoning": true, "reasoningEfforts": ["none", "low", "medium", "high", "xhigh", "max"], "imageInput": true, "source": "claude-models", "notes": "none disables thinking; other efforts use adaptive thinking."},
18
+ {"id": "claude-opus-5-5", "provider": "anthropic", "protocols": ["anthropic"], "modelIds": ["claude-opus-5-5"], "contextWindowTokens": 256000, "maxOutputTokens": 128000, "knowledgeCutoff": "2026-06", "reasoning": true, "reasoningEfforts": ["low", "medium", "high", "xhigh", "max"], "imageInput": true, "source": "claude-models", "notes": "Adaptive thinking; thinking cannot be disabled."},
19
+ {"id": "claude-sonnet-5-5", "provider": "anthropic", "protocols": ["anthropic"], "modelIds": ["claude-sonnet-5-5"], "contextWindowTokens": 256000, "maxOutputTokens": 128000, "knowledgeCutoff": "2026-06", "reasoning": true, "reasoningEfforts": ["low", "medium", "high", "xhigh", "max"], "imageInput": true, "source": "claude-models", "notes": "Adaptive thinking; thinking cannot be disabled."},
13
20
  {
14
21
  "id": "gpt-5.6-sol",
15
22
  "provider": "openai",
@@ -27,7 +27,8 @@ export class OpenAIAdapter {
27
27
  this.credentialProvider =
28
28
  options.credentialProvider ??
29
29
  (options.apiKey ? new StaticCredentialProvider(options.apiKey) : new EnvCredentialProvider(options.apiKeyEnvName ?? "OPENAI_API_KEY"));
30
- this.baseUrl = stripTrailingSlash(options.baseUrl ?? "https://api.openai.com");
30
+ // Accept an origin or one trailing /v1; do not repair repeated /v1 segments.
31
+ this.baseUrl = stripTrailingSlash(options.baseUrl ?? "https://api.openai.com").replace(/\/v1$/, "");
31
32
  }
32
33
  async *stream(request) {
33
34
  this.assertRequestCapabilities(request);
@@ -1 +1 @@
1
- {"version":3,"file":"openai-adapter.js","sourceRoot":"","sources":["../../src/model/openai-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAEnF,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACzH,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAkBrG,MAAM,OAAO,aAAa;IAkBK;IAjBpB,IAAI,GAAG,QAAQ,CAAC;IAChB,YAAY,GAAyB;QAC5C,SAAS,EAAE,IAAI;QACf,aAAa,EAAE,IAAI;QACnB,iBAAiB,EAAE,IAAI;QACvB,gBAAgB,EAAE,IAAI;QACtB,kBAAkB,EAAE,IAAI;QACxB,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,KAAK;QAChB,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,KAAK;KACpB,CAAC;IAEe,kBAAkB,CAAqB;IACvC,SAAS,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,CAAS;IAEjC,YAA6B,OAA6B;QAA7B,YAAO,GAAP,OAAO,CAAsB;QACxD,IAAI,CAAC,kBAAkB;YACrB,OAAO,CAAC,kBAAkB;gBAC1B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,wBAAwB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,qBAAqB,CAAC,OAAO,CAAC,aAAa,IAAI,gBAAgB,CAAC,CAAC,CAAC;QACzI,IAAI,CAAC,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,IAAI,wBAAwB,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,OAAqB;QACjC,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC;QACjD,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE;YAClF,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC;YACxC,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,CAAC,aAAa,CAC1B,OAAqB,EACrB,QAAkC,EAClC,OAAe;QAEf,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACtC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,KAAK,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,UAAU,GAAG,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3D,IAAI,QAAQ,KAAK,MAAM,IAAI,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5D,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;gBACtC,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;gBAC3I,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAChC,OAAO;YACT,CAAC;YACD,MAAM,UAAU,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,CAAC,eAAe,CAAC,OAAqB;QAClD,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;QAExE,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;gBAC/C,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,eAAe;gBACnC,OAAO;gBACP,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;gBAC/B,SAAS;gBACT,MAAM,EAAE,OAAO,CAAC,YAAY;aAC7B,CAAC,CAAC;YACH,KAAK,CAAC,CAAC,wBAAwB,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAA0B;YACtE,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,eAAe;YACnC,OAAO;YACP,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;YAChC,SAAS;YACT,MAAM,EAAE,OAAO,CAAC,YAAY;SAC7B,CAAC,CAAC;QACH,KAAK,CAAC,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAEO,KAAK,CAAC,CAAC,UAAU,CAAC,OAAqB;QAC7C,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;QAExE,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ;gBAClF,CAAC,CAAC,IAAI,CAAC,cAAyC;gBAChD,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;gBAC/C,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,sBAAsB;gBAC1C,OAAO;gBACP,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,aAAa,EAAE,EAAE;gBAC1F,SAAS;gBACT,MAAM,EAAE,OAAO,CAAC,YAAY;aAC7B,CAAC,CAAC;YACH,KAAK,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAA0B;YACtE,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,sBAAsB;YAC1C,OAAO;YACP,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;YAChC,SAAS;YACT,MAAM,EAAE,OAAO,CAAC,YAAY;SAC7B,CAAC,CAAC;QACH,KAAK,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAEO,yBAAyB,CAAC,OAAqB;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAClD,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,SAAS,KAAK,KAAK,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,aAAa,CAAC;gBACtB,QAAQ,EAAE,yBAAyB;gBACnC,QAAQ,EAAE,IAAI,CAAC,IAAI;gBACnB,OAAO,EAAE,SAAS,KAAK,kEAAkE;gBACzF,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,uBAAuB,CAAC,OAAqB;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QACpD,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,IAAI,aAAa,CAAC;YACtB,QAAQ,EAAE,iBAAiB;YAC3B,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,IAAI,EAAE,sCAAsC;YAC5C,OAAO,EAAE,sBAAsB,OAAO,uCAAuC;YAC7E,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,OAAqB;QACxC,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QACjD,OAAO,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,SAAS,CAAC;IACzE,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,CAAC;QACjE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,aAAa,CAAC;gBACtB,QAAQ,EAAE,kBAAkB;gBAC5B,QAAQ,EAAE,IAAI,CAAC,IAAI;gBACnB,OAAO,EAAE,6CAA6C;gBACtD,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,aAAa,EAAE,UAAU,UAAU,EAAE,EAAE,CAAC;IACnD,CAAC;CACF;AAED,SAAS,aAAa,CAAC,OAAqB;IAC1C,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CACvC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QAC5B,MAAM,IAAI,GAAI,KAA0B,CAAC,IAAI,CAAC;QAC9C,OAAO,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,aAAa,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3H,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAoB;IAChD,OAAO,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,qCAAqC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACrH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"openai-adapter.js","sourceRoot":"","sources":["../../src/model/openai-adapter.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,36 @@
1
+ import { assertModelNotRemoved, findModelMetadata, modelProtocols } from "./context-window.js";
1
2
  import { NotConfiguredModelGateway } from "./model-gateway.js";
3
+ import { AnthropicAdapter } from "./anthropic-adapter.js";
2
4
  import { OpenAIAdapter } from "./openai-adapter.js";
3
5
  import { readModelProviderConfig } from "./config.js";
4
6
  export function createModelGatewayFromConfig(config) {
7
+ const gateway = createGateway(config);
8
+ if (!config)
9
+ return gateway;
10
+ const stream = gateway.stream.bind(gateway);
11
+ gateway.stream = (request) => {
12
+ const model = request.model ?? config.model;
13
+ assertModelNotRemoved(model);
14
+ const metadata = findModelMetadata(model);
15
+ const reasoning = request.reasoning === undefined ? config.defaultReasoning : request.reasoning;
16
+ if (metadata && !modelProtocols(metadata).includes(config.provider))
17
+ throw new Error(`模型 ${model} 不支持当前接口,请重新选择模型。`);
18
+ if (metadata?.reasoning === false && reasoning?.effort)
19
+ throw new Error(`模型 ${model} 已关闭推理,请重新选择推理设置。`);
20
+ if (metadata?.reasoningEfforts && reasoning?.effort && !metadata.reasoningEfforts.includes(reasoning.effort))
21
+ throw new Error(`模型 ${model} 的档位 ${reasoning.effort} 已不可用,请重新选择。`);
22
+ return stream(request);
23
+ };
24
+ return gateway;
25
+ }
26
+ function createGateway(config) {
5
27
  if (!config)
6
28
  return new NotConfiguredModelGateway();
29
+ if (config.provider === "anthropic")
30
+ return new AnthropicAdapter({
31
+ ...config, apiVersion: config.anthropic?.apiVersion,
32
+ thinkingBudgetTokens: config.anthropic?.thinkingBudgetTokens,
33
+ });
7
34
  return createOpenAIGateway(config);
8
35
  }
9
36
  export function createModelGatewayFromProcessEnv(env = process.env) {
@@ -14,7 +41,7 @@ function createOpenAIGateway(config) {
14
41
  apiKey: config.apiKey,
15
42
  baseUrl: config.baseUrl,
16
43
  model: config.model,
17
- endpoint: config.openai?.endpoint,
44
+ endpoint: "responses",
18
45
  timeoutMs: config.timeoutMs,
19
46
  streamIdleTimeoutMs: config.streamIdleTimeoutMs,
20
47
  maxRetries: config.maxRetries,
@@ -1 +1 @@
1
- {"version":3,"file":"provider-factory.js","sourceRoot":"","sources":["../../src/model/provider-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,UAAU,4BAA4B,CAAC,MAAuC;IAClF,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,yBAAyB,EAAE,CAAC;IAEpD,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,MAAyB,OAAO,CAAC,GAAG;IACnF,OAAO,4BAA4B,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,mBAAmB,CAAC,MAA4B;IACvD,OAAO,IAAI,aAAa,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ;QACjC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;QAC/C,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;QACrD,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;KAC1C,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"provider-factory.js","sourceRoot":"","sources":["../../src/model/provider-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const modelSettingsHome: () => string;
2
+ export declare function atomicJson(file: string, value: unknown): void;
3
+ export declare function locked<T>(file: string, action: () => T): T;
@@ -0,0 +1,43 @@
1
+ import { existsSync, mkdirSync, writeFileSync, renameSync, unlinkSync, openSync, closeSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { randomUUID } from "node:crypto";
4
+ import { getNeoctlHome } from "../paths.js";
5
+ export const modelSettingsHome = () => process.env.NEO_MODEL_CONFIG_DIR || getNeoctlHome();
6
+ export function atomicJson(file, value) {
7
+ mkdirSync(path.dirname(file), { recursive: true });
8
+ const temp = `${file}.${randomUUID()}.tmp`;
9
+ try {
10
+ writeFileSync(temp, JSON.stringify(value, null, 2) + "\n", { mode: 0o600 });
11
+ renameSync(temp, file);
12
+ }
13
+ finally {
14
+ if (existsSync(temp))
15
+ unlinkSync(temp);
16
+ }
17
+ }
18
+ export function locked(file, action) {
19
+ mkdirSync(path.dirname(file), { recursive: true });
20
+ let fd;
21
+ const deadline = Date.now() + 3000;
22
+ for (;;) {
23
+ try {
24
+ fd = openSync(file + ".lock", "wx");
25
+ break;
26
+ }
27
+ catch (error) {
28
+ if (error.code !== "EEXIST")
29
+ throw error;
30
+ if (Date.now() >= deadline)
31
+ throw new Error("配置锁被占用,请稍后重试;若所有 neo 进程已退出,请移除遗留的 .lock 文件。");
32
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 20);
33
+ }
34
+ }
35
+ try {
36
+ return action();
37
+ }
38
+ finally {
39
+ closeSync(fd);
40
+ unlinkSync(file + ".lock");
41
+ }
42
+ }
43
+ //# sourceMappingURL=settings-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-files.js","sourceRoot":"","sources":["../../src/model/settings-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC5G,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,aAAa,EAAE,CAAC;AAC3F,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,KAAc;IACrD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,UAAU,EAAE,MAAM,CAAC;IAC3C,IAAI,CAAC;QAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAAC,CAAC;YACpG,CAAC;QAAC,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;AACrD,CAAC;AACD,MAAM,UAAU,MAAM,CAAI,IAAY,EAAE,MAAe;IACrD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,IAAI,EAAU,CAAC;IACf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IACnC,SAAS,CAAC;QACR,IAAI,CAAC;YAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC;YAAC,MAAM;QAAC,CAAC;QACnD,OAAO,KAAK,EAAE,CAAC;YACb,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;YACpE,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC3F,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IACD,IAAI,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;IAAC,CAAC;YAAS,CAAC;QAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAAC,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;IAAC,CAAC;AACjF,CAAC"}
@@ -0,0 +1,85 @@
1
+ import { type ModelProviderConfig } from "./config.js";
2
+ import type { ReasoningEffort } from "./model-gateway.js";
3
+ export interface ApiConnection {
4
+ id: string;
5
+ name: string;
6
+ kind: "openai" | "anthropic";
7
+ protocols?: Array<"openai" | "anthropic">;
8
+ baseUrl: string;
9
+ key: string;
10
+ }
11
+ export interface Composition {
12
+ main: {
13
+ api: string;
14
+ protocol?: "responses" | "messages";
15
+ model: string;
16
+ effort: string;
17
+ tokens?: string | number;
18
+ timeout?: string | number;
19
+ idle?: string | number;
20
+ retries?: string | number;
21
+ };
22
+ image: {
23
+ api: string;
24
+ model: string;
25
+ timeout?: string | number;
26
+ };
27
+ search: {
28
+ api: string;
29
+ model: string;
30
+ context?: string;
31
+ tokens?: string | number;
32
+ timeout?: string | number;
33
+ toolType: string;
34
+ exa: boolean;
35
+ exaUrl: string;
36
+ exaTool: string;
37
+ exaTimeout?: string | number;
38
+ };
39
+ }
40
+ export interface SettingsState {
41
+ version: 1;
42
+ revision: string;
43
+ connections: ApiConnection[];
44
+ composition: Composition;
45
+ applied?: {
46
+ revision: string;
47
+ connections: ApiConnection[];
48
+ composition: Composition;
49
+ };
50
+ }
51
+ export declare const defaultComposition: () => Composition;
52
+ export declare function optionalInteger(value: unknown, label: string, min?: number): number | undefined;
53
+ export declare function validUrl(value: unknown): string;
54
+ export declare function connectionProtocols(a: ApiConnection): Array<"openai" | "anthropic">;
55
+ export declare function mainProvider(c: Composition, a: ApiConnection): "openai" | "anthropic";
56
+ export declare function supportedEfforts(model: string, _kind?: string): ReasoningEffort[];
57
+ export declare function validateComposition(c: Composition, connections: ApiConnection[], requireMain?: boolean): void;
58
+ export declare function compositionModelConfig(c: Composition, connections: ApiConnection[]): ModelProviderConfig | undefined;
59
+ export declare class ModelSettingsStore {
60
+ readonly file: string;
61
+ constructor(home?: string);
62
+ read(): SettingsState | undefined;
63
+ initialize(env?: NodeJS.ProcessEnv): SettingsState;
64
+ mutate(revision: string, change: (s: SettingsState) => void): SettingsState;
65
+ saveConnection(revision: string, input: ApiConnection): SettingsState;
66
+ removeConnection(revision: string, id: string, beforeDelete?: () => void): SettingsState;
67
+ clearRemovedModels(ids: readonly string[]): void;
68
+ apply(revision: string, c: Composition): SettingsState;
69
+ publicState(s?: SettingsState): {
70
+ revision: string;
71
+ connections: {
72
+ hasKey: boolean;
73
+ id: string;
74
+ name: string;
75
+ kind: "openai" | "anthropic";
76
+ protocols?: Array<"openai" | "anthropic">;
77
+ baseUrl: string;
78
+ }[];
79
+ composition: Composition;
80
+ appliedRevision: string | undefined;
81
+ pendingConnections: boolean;
82
+ catalog: import("./context-window.js").ModelCatalog;
83
+ metadataFile: string;
84
+ };
85
+ }