mindweave 2.5.0 → 3.0.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 (255) hide show
  1. package/README.md +81 -145
  2. package/dist/cli/App.js +579 -304
  3. package/dist/cli/App.js.map +1 -1
  4. package/dist/cli/analytics.js +27 -18
  5. package/dist/cli/analytics.js.map +1 -1
  6. package/dist/cli/attachments.js +34 -0
  7. package/dist/cli/attachments.js.map +1 -1
  8. package/dist/cli/bannerFit.js +70 -0
  9. package/dist/cli/bannerFit.js.map +1 -0
  10. package/dist/cli/bootstrap.js +41 -3
  11. package/dist/cli/bootstrap.js.map +1 -1
  12. package/dist/cli/commands.js +4 -1
  13. package/dist/cli/commands.js.map +1 -1
  14. package/dist/cli/components/ApprovalBox.js +3 -2
  15. package/dist/cli/components/ApprovalBox.js.map +1 -1
  16. package/dist/cli/components/BlockView.js +27 -6
  17. package/dist/cli/components/BlockView.js.map +1 -1
  18. package/dist/cli/components/FirstRunFrame.js +2 -1
  19. package/dist/cli/components/FirstRunFrame.js.map +1 -1
  20. package/dist/cli/components/KeyManager.js +5 -4
  21. package/dist/cli/components/KeyManager.js.map +1 -1
  22. package/dist/cli/components/KeySetup.js +29 -13
  23. package/dist/cli/components/KeySetup.js.map +1 -1
  24. package/dist/cli/components/MarathonBox.js +64 -0
  25. package/dist/cli/components/MarathonBox.js.map +1 -0
  26. package/dist/cli/components/McpMinitabs.js +8 -7
  27. package/dist/cli/components/McpMinitabs.js.map +1 -1
  28. package/dist/cli/components/Picker.js +4 -3
  29. package/dist/cli/components/Picker.js.map +1 -1
  30. package/dist/cli/components/PromptInput.js +47 -8
  31. package/dist/cli/components/PromptInput.js.map +1 -1
  32. package/dist/cli/components/PulseDot.js +42 -0
  33. package/dist/cli/components/PulseDot.js.map +1 -0
  34. package/dist/cli/components/SubagentView.js +9 -6
  35. package/dist/cli/components/SubagentView.js.map +1 -1
  36. package/dist/cli/components/TipLine.js +2 -1
  37. package/dist/cli/components/TipLine.js.map +1 -1
  38. package/dist/cli/components/ToolGroup.js +65 -49
  39. package/dist/cli/components/ToolGroup.js.map +1 -1
  40. package/dist/cli/components/ToolLine.js +20 -19
  41. package/dist/cli/components/ToolLine.js.map +1 -1
  42. package/dist/cli/components/TrustGate.js +2 -1
  43. package/dist/cli/components/TrustGate.js.map +1 -1
  44. package/dist/cli/components/minitabs.js +3 -2
  45. package/dist/cli/components/minitabs.js.map +1 -1
  46. package/dist/cli/desktopApp.js +45 -0
  47. package/dist/cli/desktopApp.js.map +1 -0
  48. package/dist/cli/help.js +1 -0
  49. package/dist/cli/help.js.map +1 -1
  50. package/dist/cli/inkOutputPatch.js +285 -0
  51. package/dist/cli/inkOutputPatch.js.map +1 -0
  52. package/dist/cli/inkSpeed.js +29 -0
  53. package/dist/cli/inkSpeed.js.map +1 -0
  54. package/dist/cli/inkSpeedLoader.js +47 -0
  55. package/dist/cli/inkSpeedLoader.js.map +1 -0
  56. package/dist/cli/inputText.js +30 -0
  57. package/dist/cli/inputText.js.map +1 -0
  58. package/dist/cli/keyManager.js +2 -1
  59. package/dist/cli/keyManager.js.map +1 -1
  60. package/dist/cli/keyPrefs.js +90 -0
  61. package/dist/cli/keyPrefs.js.map +1 -0
  62. package/dist/cli/keySetup.js +5 -2
  63. package/dist/cli/keySetup.js.map +1 -1
  64. package/dist/cli/marathonUi.js +113 -0
  65. package/dist/cli/marathonUi.js.map +1 -0
  66. package/dist/cli/markdown.js +63 -11
  67. package/dist/cli/markdown.js.map +1 -1
  68. package/dist/cli/modes.js +3 -3
  69. package/dist/cli/modes.js.map +1 -1
  70. package/dist/cli/prodEnv.js +43 -0
  71. package/dist/cli/prodEnv.js.map +1 -0
  72. package/dist/cli/revealPace.js +5 -5
  73. package/dist/cli/revealPace.js.map +1 -1
  74. package/dist/cli/revealQueue.js +120 -0
  75. package/dist/cli/revealQueue.js.map +1 -0
  76. package/dist/cli/theme.js +47 -0
  77. package/dist/cli/theme.js.map +1 -0
  78. package/dist/cli/toolDisplay.js +112 -18
  79. package/dist/cli/toolDisplay.js.map +1 -1
  80. package/dist/cli/transcript.js +1 -1
  81. package/dist/cli/transcript.js.map +1 -1
  82. package/dist/cli/virtualWindow.js +14 -2
  83. package/dist/cli/virtualWindow.js.map +1 -1
  84. package/dist/cli/wheelAccel.js +73 -0
  85. package/dist/cli/wheelAccel.js.map +1 -0
  86. package/dist/cli/widestLinePatch.js +48 -0
  87. package/dist/cli/widestLinePatch.js.map +1 -0
  88. package/dist/cli/workingVerb.js +88 -28
  89. package/dist/cli/workingVerb.js.map +1 -1
  90. package/dist/cli/wrap.js +1 -1
  91. package/dist/cli/wrap.js.map +1 -1
  92. package/dist/core/contextSettings.js +84 -0
  93. package/dist/core/contextSettings.js.map +1 -0
  94. package/dist/core/limitsView.js +40 -0
  95. package/dist/core/limitsView.js.map +1 -0
  96. package/dist/core/mcpServers.js +164 -0
  97. package/dist/core/mcpServers.js.map +1 -0
  98. package/dist/core/permissions.js +209 -0
  99. package/dist/core/permissions.js.map +1 -0
  100. package/dist/core/providerKeys.js +187 -0
  101. package/dist/core/providerKeys.js.map +1 -0
  102. package/dist/core/rulesSkills.js +142 -0
  103. package/dist/core/rulesSkills.js.map +1 -0
  104. package/dist/core/spendView.js +90 -0
  105. package/dist/core/spendView.js.map +1 -0
  106. package/dist/core/turnRunner.js +759 -0
  107. package/dist/core/turnRunner.js.map +1 -0
  108. package/dist/drivers/anthropic/client.js +101 -26
  109. package/dist/drivers/anthropic/client.js.map +1 -1
  110. package/dist/drivers/anthropic/manifest.js +43 -13
  111. package/dist/drivers/anthropic/manifest.js.map +1 -1
  112. package/dist/drivers/cerebras/manifest.js +13 -3
  113. package/dist/drivers/cerebras/manifest.js.map +1 -1
  114. package/dist/drivers/deepseek/manifest.js +24 -34
  115. package/dist/drivers/deepseek/manifest.js.map +1 -1
  116. package/dist/drivers/glm/manifest.js +21 -6
  117. package/dist/drivers/glm/manifest.js.map +1 -1
  118. package/dist/drivers/groq/manifest.js +5 -2
  119. package/dist/drivers/groq/manifest.js.map +1 -1
  120. package/dist/drivers/kimi/manifest.js +13 -10
  121. package/dist/drivers/kimi/manifest.js.map +1 -1
  122. package/dist/drivers/meta/manifest.js +21 -16
  123. package/dist/drivers/meta/manifest.js.map +1 -1
  124. package/dist/drivers/minimax/manifest.js +15 -12
  125. package/dist/drivers/minimax/manifest.js.map +1 -1
  126. package/dist/drivers/ollama/catalog.js +71 -0
  127. package/dist/drivers/ollama/catalog.js.map +1 -0
  128. package/dist/drivers/ollama/client.js +164 -0
  129. package/dist/drivers/ollama/client.js.map +1 -0
  130. package/dist/drivers/ollama/endpoint.js +42 -0
  131. package/dist/drivers/ollama/endpoint.js.map +1 -0
  132. package/dist/drivers/ollama/index.js +5 -0
  133. package/dist/drivers/ollama/index.js.map +1 -0
  134. package/dist/drivers/ollama/manifest.js +64 -0
  135. package/dist/drivers/ollama/manifest.js.map +1 -0
  136. package/dist/drivers/openai/client.js +10 -4
  137. package/dist/drivers/openai/client.js.map +1 -1
  138. package/dist/drivers/openai/manifest.js +69 -18
  139. package/dist/drivers/openai/manifest.js.map +1 -1
  140. package/dist/drivers/qwen/manifest.js +19 -6
  141. package/dist/drivers/qwen/manifest.js.map +1 -1
  142. package/dist/drivers/registry.js +11 -0
  143. package/dist/drivers/registry.js.map +1 -1
  144. package/dist/drivers/retryPolicy.js +26 -1
  145. package/dist/drivers/retryPolicy.js.map +1 -1
  146. package/dist/drivers/xai/client.js +12 -10
  147. package/dist/drivers/xai/client.js.map +1 -1
  148. package/dist/drivers/xai/manifest.js +62 -25
  149. package/dist/drivers/xai/manifest.js.map +1 -1
  150. package/dist/dynamo/auxModel.js +54 -0
  151. package/dist/dynamo/auxModel.js.map +1 -0
  152. package/dist/dynamo/engine.js +407 -99
  153. package/dist/dynamo/engine.js.map +1 -1
  154. package/dist/dynamo/guard.js +10 -0
  155. package/dist/dynamo/guard.js.map +1 -1
  156. package/dist/dynamo/liveMeter.js +25 -6
  157. package/dist/dynamo/liveMeter.js.map +1 -1
  158. package/dist/dynamo/marathon.js +409 -0
  159. package/dist/dynamo/marathon.js.map +1 -0
  160. package/dist/dynamo/marathonPrompt.js +45 -0
  161. package/dist/dynamo/marathonPrompt.js.map +1 -0
  162. package/dist/dynamo/model.js +6 -2
  163. package/dist/dynamo/model.js.map +1 -1
  164. package/dist/dynamo/toolBatches.js +58 -0
  165. package/dist/dynamo/toolBatches.js.map +1 -0
  166. package/dist/dynamo/usageLimits.js +446 -0
  167. package/dist/dynamo/usageLimits.js.map +1 -0
  168. package/dist/governor/freshness.js +10 -7
  169. package/dist/governor/freshness.js.map +1 -1
  170. package/dist/governor/index.js +76 -9
  171. package/dist/governor/index.js.map +1 -1
  172. package/dist/governor/write.js +43 -14
  173. package/dist/governor/write.js.map +1 -1
  174. package/dist/index.js +18 -151
  175. package/dist/index.js.map +1 -1
  176. package/dist/main.js +162 -0
  177. package/dist/main.js.map +1 -0
  178. package/dist/mcp/manager.js +18 -0
  179. package/dist/mcp/manager.js.map +1 -1
  180. package/dist/memory/allMetas.js +69 -0
  181. package/dist/memory/allMetas.js.map +1 -0
  182. package/dist/memory/compaction.js +70 -15
  183. package/dist/memory/compaction.js.map +1 -1
  184. package/dist/memory/earlier.js +15 -0
  185. package/dist/memory/earlier.js.map +1 -0
  186. package/dist/memory/profile.js +93 -0
  187. package/dist/memory/profile.js.map +1 -0
  188. package/dist/memory/rewind.js +262 -0
  189. package/dist/memory/rewind.js.map +1 -0
  190. package/dist/memory/session.js +42 -10
  191. package/dist/memory/session.js.map +1 -1
  192. package/dist/memory/sessionMemory.js +48 -13
  193. package/dist/memory/sessionMemory.js.map +1 -1
  194. package/dist/memory/sessionMemoryCompact.js +1 -1
  195. package/dist/memory/sessionMemoryCompact.js.map +1 -1
  196. package/dist/memory/sessionTitle.js +50 -0
  197. package/dist/memory/sessionTitle.js.map +1 -0
  198. package/dist/memory/store.js +42 -1
  199. package/dist/memory/store.js.map +1 -1
  200. package/dist/memory/types.js.map +1 -1
  201. package/dist/tools/askUser.js +14 -0
  202. package/dist/tools/askUser.js.map +1 -1
  203. package/dist/tools/backgroundShells.js +208 -5
  204. package/dist/tools/backgroundShells.js.map +1 -1
  205. package/dist/tools/browser.js +176 -0
  206. package/dist/tools/browser.js.map +1 -0
  207. package/dist/tools/cdp.js +165 -0
  208. package/dist/tools/cdp.js.map +1 -0
  209. package/dist/tools/checkpoints.js +208 -5
  210. package/dist/tools/checkpoints.js.map +1 -1
  211. package/dist/tools/deferredNative.js +2 -0
  212. package/dist/tools/deferredNative.js.map +1 -1
  213. package/dist/tools/detail.js +9 -6
  214. package/dist/tools/detail.js.map +1 -1
  215. package/dist/tools/edit.js +2 -1
  216. package/dist/tools/edit.js.map +1 -1
  217. package/dist/tools/exitPlan.js +4 -0
  218. package/dist/tools/exitPlan.js.map +1 -1
  219. package/dist/tools/hiddenDesktop.js +273 -0
  220. package/dist/tools/hiddenDesktop.js.map +1 -0
  221. package/dist/tools/listeningPorts.js +134 -0
  222. package/dist/tools/listeningPorts.js.map +1 -0
  223. package/dist/tools/mcpSearch.js +8 -0
  224. package/dist/tools/mcpSearch.js.map +1 -1
  225. package/dist/tools/mindweaveStatus.js +1 -1
  226. package/dist/tools/mindweaveStatus.js.map +1 -1
  227. package/dist/tools/registry.js +3 -0
  228. package/dist/tools/registry.js.map +1 -1
  229. package/dist/tools/replaceSymbol.js +2 -1
  230. package/dist/tools/replaceSymbol.js.map +1 -1
  231. package/dist/tools/runCommand.js +113 -9
  232. package/dist/tools/runCommand.js.map +1 -1
  233. package/dist/tools/screenshot.js +4 -6
  234. package/dist/tools/screenshot.js.map +1 -1
  235. package/dist/tools/screenshotWin.js +26 -9
  236. package/dist/tools/screenshotWin.js.map +1 -1
  237. package/dist/tools/stateCheckpoint.js +128 -0
  238. package/dist/tools/stateCheckpoint.js.map +1 -0
  239. package/dist/tools/todo.js +6 -0
  240. package/dist/tools/todo.js.map +1 -1
  241. package/dist/tools/ui.js +1295 -0
  242. package/dist/tools/ui.js.map +1 -0
  243. package/dist/tools/uiHide.js +356 -0
  244. package/dist/tools/uiHide.js.map +1 -0
  245. package/dist/tools/uiPage.js +861 -0
  246. package/dist/tools/uiPage.js.map +1 -0
  247. package/dist/tools/uiWin.js +506 -0
  248. package/dist/tools/uiWin.js.map +1 -0
  249. package/dist/tools/webFetch.js +32 -25
  250. package/dist/tools/webFetch.js.map +1 -1
  251. package/dist/tools/webSearch.js +12 -0
  252. package/dist/tools/webSearch.js.map +1 -1
  253. package/dist/tools/writeFile.js +2 -1
  254. package/dist/tools/writeFile.js.map +1 -1
  255. package/package.json +78 -75
@@ -0,0 +1,164 @@
1
+ import { ProviderHttpError, renderMessages, toStop } from "../openaiCompat/wire.js";
2
+ import { salvagePartialTurn } from "../partialTurn.js";
3
+ import { isAbortLike } from "../retryPolicy.js";
4
+ import { clientId } from "../clientId.js";
5
+ import { manifestForModel } from "../registry.js";
6
+ import { baseUrl } from "./endpoint.js";
7
+ import { BUFFERED_OUTPUT_TOKENS, localWindow, wireId } from "./manifest.js";
8
+ /** For the shared stop-reason and error vocabulary only; this driver does not use the OpenAI wire. */
9
+ const AS_PROVIDER = { label: "Ollama" };
10
+ /** Tool arguments are a JSON string everywhere else; `/api/chat` wants the object. */
11
+ function argsObject(raw) {
12
+ try {
13
+ const parsed = JSON.parse(raw || "{}");
14
+ return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
15
+ }
16
+ catch {
17
+ return {};
18
+ }
19
+ }
20
+ /**
21
+ * The shared rendering, reshaped: images as bare base64, tool calls with object arguments, and a
22
+ * tool result carrying the name of the tool it answers (Ollama matches results by name, not id).
23
+ */
24
+ export function toNativeMessages(messages) {
25
+ const names = new Map();
26
+ return messages.map((m) => {
27
+ const out = { role: m.role, content: m.content };
28
+ if (m.images?.length)
29
+ out.images = m.images.map((i) => i.data);
30
+ if (m.tool_calls?.length) {
31
+ out.tool_calls = m.tool_calls.map((c) => {
32
+ names.set(c.id, c.function.name);
33
+ return { function: { name: c.function.name, arguments: argsObject(c.function.arguments) } };
34
+ });
35
+ }
36
+ if (m.role === "tool" && m.tool_call_id && names.has(m.tool_call_id))
37
+ out.tool_name = names.get(m.tool_call_id);
38
+ return out;
39
+ });
40
+ }
41
+ /** Whether the chosen model has a thinking switch at all (from what discovery reported). */
42
+ function canThink(config) {
43
+ return !!config && manifestForModel(config.model).thinkLevels(config.model).some((l) => l.thinking);
44
+ }
45
+ export function buildRequest(req, stream, maxTokens) {
46
+ const model = req.model?.model ?? "";
47
+ const window = manifestForModel(model).contextWindow(model) || localWindow();
48
+ const body = {
49
+ model: wireId(model),
50
+ messages: toNativeMessages(renderMessages(req)),
51
+ stream,
52
+ // Every request states its window: otherwise Ollama's default applies and the rest is cut.
53
+ options: { num_ctx: window, ...(maxTokens ? { num_predict: maxTokens } : {}) },
54
+ };
55
+ // Stated either way for a model that has the switch: one that thinks by default (Qwen3) would
56
+ // otherwise think on every turn the user chose Standard for.
57
+ if (canThink(req.model))
58
+ body.think = req.model?.thinking === true;
59
+ if (req.tools?.length)
60
+ body.tools = req.tools;
61
+ return body;
62
+ }
63
+ function toUsage(chunk) {
64
+ const promptTokens = chunk.prompt_eval_count ?? 0;
65
+ const completionTokens = chunk.eval_count ?? 0;
66
+ return {
67
+ promptTokens,
68
+ completionTokens,
69
+ totalTokens: promptTokens + completionTokens,
70
+ cacheHitTokens: 0,
71
+ cacheMissTokens: promptTokens,
72
+ };
73
+ }
74
+ function toToolCall(c, index) {
75
+ const args = c.function.arguments;
76
+ return {
77
+ id: c.id || `call_${index}`,
78
+ name: c.function.name,
79
+ arguments: typeof args === "string" ? args : JSON.stringify(args ?? {}),
80
+ };
81
+ }
82
+ async function post(body, signal) {
83
+ const response = await fetch(`${baseUrl()}/api/chat`, {
84
+ method: "POST",
85
+ headers: { "Content-Type": "application/json", "User-Agent": clientId() },
86
+ body: JSON.stringify(body),
87
+ signal,
88
+ });
89
+ if (!response.ok) {
90
+ const detail = await response.text().catch(() => "");
91
+ throw new ProviderHttpError(response.status, detail, "Ollama", response.statusText);
92
+ }
93
+ return response;
94
+ }
95
+ /** Each JSON line of a streamed reply (Ollama streams newline-delimited JSON, not SSE). */
96
+ async function* jsonLines(response) {
97
+ if (!response.body)
98
+ return;
99
+ const decoder = new TextDecoder();
100
+ let buffer = "";
101
+ for await (const piece of response.body) {
102
+ buffer += decoder.decode(piece, { stream: true });
103
+ let nl;
104
+ while ((nl = buffer.indexOf("\n")) !== -1) {
105
+ const line = buffer.slice(0, nl).trim();
106
+ buffer = buffer.slice(nl + 1);
107
+ if (line)
108
+ yield JSON.parse(line);
109
+ }
110
+ }
111
+ if (buffer.trim())
112
+ yield JSON.parse(buffer);
113
+ }
114
+ export async function toolTurn(req, options = {}) {
115
+ const response = await post(buildRequest(req, false, BUFFERED_OUTPUT_TOKENS), options.signal);
116
+ const chunk = (await response.json());
117
+ if (chunk.error)
118
+ throw new Error(`Ollama: ${chunk.error}`);
119
+ return {
120
+ content: chunk.message?.content ?? "",
121
+ toolCalls: (chunk.message?.tool_calls ?? []).map(toToolCall),
122
+ stop: toStop(AS_PROVIDER, chunk.done_reason),
123
+ usage: toUsage(chunk),
124
+ };
125
+ }
126
+ export async function streamTurn(req, options = {}) {
127
+ const onEvent = options.onEvent ?? (() => { });
128
+ const response = await post(buildRequest(req, true), options.signal);
129
+ let content = "";
130
+ const calls = [];
131
+ let usage;
132
+ let reason;
133
+ try {
134
+ for await (const chunk of jsonLines(response)) {
135
+ if (chunk.error)
136
+ throw new Error(`Ollama: ${chunk.error}`);
137
+ const m = chunk.message;
138
+ if (m?.thinking)
139
+ onEvent({ type: "reasoning", delta: m.thinking });
140
+ if (m?.content) {
141
+ content += m.content;
142
+ onEvent({ type: "text", delta: m.content });
143
+ }
144
+ // Ollama sends each tool call whole, in one line, rather than in fragments.
145
+ for (const c of m?.tool_calls ?? []) {
146
+ const call = toToolCall(c, calls.length);
147
+ onEvent({ type: "tool_start", index: calls.length, id: call.id, name: call.name });
148
+ onEvent({ type: "tool_args", index: calls.length, delta: call.arguments });
149
+ calls.push(call);
150
+ }
151
+ if (chunk.done) {
152
+ reason = chunk.done_reason;
153
+ usage = toUsage(chunk);
154
+ }
155
+ }
156
+ }
157
+ catch (error) {
158
+ if (isAbortLike(error))
159
+ throw error;
160
+ return salvagePartialTurn(content, error);
161
+ }
162
+ return { content, toolCalls: calls, usage, stop: toStop(AS_PROVIDER, reason) };
163
+ }
164
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/drivers/ollama/client.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,EAAuB,MAAM,yBAAyB,CAAC;AACzG,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5E,sGAAsG;AACtG,MAAM,WAAW,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAoB,CAAC;AAY1D,sFAAsF;AACtF,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;QACvC,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAuB;IACtD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACxB,MAAM,GAAG,GAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAChE,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM;YAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YACzB,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACjC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;YAC9F,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,YAAY,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC;YAAE,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAE,CAAC;QACjH,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC;AAED,4FAA4F;AAC5F,SAAS,QAAQ,CAAC,MAA+B;IAC/C,OAAO,CAAC,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAiB,EAAE,MAAe,EAAE,SAAkB;IACjF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC;IAC7E,MAAM,IAAI,GAA4B;QACpC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;QACpB,QAAQ,EAAE,gBAAgB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM;QACN,2FAA2F;QAC3F,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;KAC/E,CAAC;IACF,8FAA8F;IAC9F,6DAA6D;IAC7D,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IACnE,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM;QAAE,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC;AAYD,SAAS,OAAO,CAAC,KAAkB;IACjC,MAAM,YAAY,GAAG,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC;IAClD,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;IAC/C,OAAO;QACL,YAAY;QACZ,gBAAgB;QAChB,WAAW,EAAE,YAAY,GAAG,gBAAgB;QAC5C,cAAc,EAAE,CAAC;QACjB,eAAe,EAAE,YAAY;KAC9B,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,CAAkE,EAAE,KAAa;IACnG,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;IAClC,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,QAAQ,KAAK,EAAE;QAC3B,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;QACrB,SAAS,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;KACxE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAA6B,EAAE,MAAoB;IACrE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,EAAE,WAAW,EAAE;QACpD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE;QACzE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAC1B,MAAM;KACP,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACrD,MAAM,IAAI,iBAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,2FAA2F;AAC3F,KAAK,SAAS,CAAC,CAAC,SAAS,CAAC,QAAkB;IAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI;QAAE,OAAO;IAC3B,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,CAAC,IAA4C,EAAE,CAAC;QAChF,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,IAAI,EAAU,CAAC;QACf,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,IAAI;gBAAE,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAgB,CAAC;QAClD,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAgB,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAiB,EAAE,UAAuB,EAAE;IACzE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,sBAAsB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9F,MAAM,KAAK,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAgB,CAAC;IACrD,IAAI,KAAK,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3D,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE;QACrC,SAAS,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;QAC5D,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC;QAC5C,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAiB,EAAE,UAAyB,EAAE;IAC7E,MAAM,OAAO,GAA6B,OAAO,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACrE,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,IAAI,KAAwB,CAAC;IAC7B,IAAI,MAA0B,CAAC;IAC/B,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C,IAAI,KAAK,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3D,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;YACxB,IAAI,CAAC,EAAE,QAAQ;gBAAE,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACnE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;gBACf,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC;gBACrB,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9C,CAAC;YACD,4EAA4E;YAC5E,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC;gBACpC,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBACzC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACnF,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC3E,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC;gBAC3B,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,WAAW,CAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC;QACpC,OAAO,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC;AACjF,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * endpoint.ts — where the local Ollama server is.
3
+ *
4
+ * Its own module so the catalogue (which only lists models) and the client (which talks to one)
5
+ * agree on the address without the catalogue loading any wire code.
6
+ *
7
+ * Ollama's own variable, `OLLAMA_HOST`, is honoured the way Ollama reads it: a bare `host:port`
8
+ * or a full URL, and `0.0.0.0` (which a server binds to, but nobody can connect to) means this
9
+ * machine. `MINDWEAVE_OLLAMA_URL` overrides both, for a server somewhere else.
10
+ */
11
+ export const DEFAULT_URL = "http://127.0.0.1:11434";
12
+ /** The server's root URL, no trailing slash. Read on each call, so a changed variable counts. */
13
+ export function baseUrl(env = process.env) {
14
+ const own = env.MINDWEAVE_OLLAMA_URL?.trim();
15
+ if (own)
16
+ return own.replace(/\/+$/, "");
17
+ const host = env.OLLAMA_HOST?.trim();
18
+ if (!host)
19
+ return DEFAULT_URL;
20
+ const withScheme = /^[a-z]+:\/\//i.test(host) ? host : `http://${host}`;
21
+ try {
22
+ const url = new URL(withScheme);
23
+ if (url.hostname === "0.0.0.0" || url.hostname === "::" || url.hostname === "[::]")
24
+ url.hostname = "127.0.0.1";
25
+ if (!url.port && url.protocol === "http:" && !/:\d+$/.test(host))
26
+ url.port = "11434";
27
+ return url.toString().replace(/\/+$/, "");
28
+ }
29
+ catch {
30
+ return DEFAULT_URL;
31
+ }
32
+ }
33
+ /**
34
+ * The variable that says the server answered with at least one usable model.
35
+ *
36
+ * Every provider is "connected" when its key variable is set, and every part of Mindweave that
37
+ * decides what can run (first-run setup, the fallback to another provider, the app's composer)
38
+ * reads that one fact. A local server has no key, so discovery sets this variable when the
39
+ * server is up and clears it when it is not: the same fact, with no second code path.
40
+ */
41
+ export const RUNNING_ENV = "MINDWEAVE_OLLAMA_RUNNING";
42
+ //# sourceMappingURL=endpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../../../src/drivers/ollama/endpoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,wBAAwB,CAAC;AAEpD,iGAAiG;AACjG,MAAM,UAAU,OAAO,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC1D,MAAM,GAAG,GAAG,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC;IAC7C,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IACrC,IAAI,CAAC,IAAI;QAAE,OAAO,WAAW,CAAC;IAC9B,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;IACxE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QAChC,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM;YAAE,GAAG,CAAC,QAAQ,GAAG,WAAW,CAAC;QAC/G,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC;QACrF,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,0BAA0B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { streamTurn, toolTurn } from "./client.js";
2
+ import { ollamaManifest } from "./manifest.js";
3
+ export const ollamaDriver = { ...ollamaManifest, toolTurn, streamTurn };
4
+ export default ollamaDriver;
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/drivers/ollama/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,CAAC,MAAM,YAAY,GAAW,EAAE,GAAG,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAEhF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,64 @@
1
+ import { RUNNING_ENV } from "./endpoint.js";
2
+ /** The namespace every Ollama model id carries inside Mindweave. */
3
+ export const PREFIX = "ollama:";
4
+ /** Ollama's own name for a namespaced id. */
5
+ export function wireId(model) {
6
+ return model.startsWith(PREFIX) ? model.slice(PREFIX.length) : model;
7
+ }
8
+ /**
9
+ * The context each request asks Ollama for, in tokens.
10
+ *
11
+ * Ollama loads a model with a small window by default (a few thousand tokens) and silently
12
+ * drops whatever does not fit, which an agent's instructions and tools alone can exceed. So
13
+ * every request states its window. 32K by default: room for the agent's instructions and a real
14
+ * conversation. It costs memory (the model's cache for 32K tokens can be several GB), so
15
+ * `MINDWEAVE_OLLAMA_CONTEXT` sets another size for a smaller machine. A model trained on less
16
+ * keeps its own figure (see `catalog.ts`).
17
+ */
18
+ export const LOCAL_WINDOW = 32_768;
19
+ /** The window asked for: `MINDWEAVE_OLLAMA_CONTEXT` when set to a sensible number, else 32K. */
20
+ export function localWindow(env = process.env) {
21
+ const n = Number(env.MINDWEAVE_OLLAMA_CONTEXT);
22
+ return Number.isInteger(n) && n >= 2048 ? n : LOCAL_WINDOW;
23
+ }
24
+ /** Nothing is billed: the model runs here. */
25
+ const FREE = { cacheHit: 0, cacheMiss: 0, output: 0 };
26
+ export function price(_model) {
27
+ return FREE;
28
+ }
29
+ export function thinkLevels(_model) {
30
+ return [{ label: "Standard", description: "answer directly", thinking: false, effort: "low" }];
31
+ }
32
+ export function contextWindow(_model) {
33
+ return localWindow();
34
+ }
35
+ /** A buffered call's ceiling, well inside the window it shares. */
36
+ export const BUFFERED_OUTPUT_TOKENS = 4_096;
37
+ export function bufferedOutputTokens(_model) {
38
+ return BUFFERED_OUTPUT_TOKENS;
39
+ }
40
+ /** Keep a saved local model even before discovery has listed it; see OpenRouter's. */
41
+ export function normalize(config) {
42
+ const thinking = config.thinking === true;
43
+ return { model: config.model, thinking, effort: thinking ? "high" : "low" };
44
+ }
45
+ export function ownsModel(model) {
46
+ return model.startsWith(PREFIX);
47
+ }
48
+ export const ollamaManifest = {
49
+ id: "ollama",
50
+ label: "Ollama",
51
+ apiKeyEnv: RUNNING_ENV,
52
+ keysUrl: "https://ollama.com/download",
53
+ local: true,
54
+ // Empty until discovery: only what is pulled on this machine is offered.
55
+ models: [],
56
+ thinkLevels,
57
+ price,
58
+ contextWindow,
59
+ bufferedOutputTokens,
60
+ normalize,
61
+ ownsModel,
62
+ discoverModels: async () => (await import("./catalog.js")).discoverModels(),
63
+ };
64
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/drivers/ollama/manifest.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,oEAAoE;AACpE,MAAM,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC;AAEhC,6CAA6C;AAC7C,MAAM,UAAU,MAAM,CAAC,KAAc;IACnC,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACvE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC;AAEnC,gGAAgG;AAChG,MAAM,UAAU,WAAW,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC9D,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AAC7D,CAAC;AAED,8CAA8C;AAC9C,MAAM,IAAI,GAAe,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAElE,MAAM,UAAU,KAAK,CAAC,MAAe;IACnC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAe;IACzC,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAe;IAC3C,OAAO,WAAW,EAAE,CAAC;AACvB,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAE5C,MAAM,UAAU,oBAAoB,CAAC,MAAe;IAClD,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,SAAS,CAAC,MAAmB;IAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC;IAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,QAAQ;IACf,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,6BAA6B;IACtC,KAAK,EAAE,IAAI;IACX,yEAAyE;IACzE,MAAM,EAAE,EAAE;IACV,WAAW;IACX,KAAK;IACL,aAAa;IACb,oBAAoB;IACpB,SAAS;IACT,SAAS;IACT,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,EAAE;CAC5E,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { basename } from "node:path";
2
2
  import { clientId } from "../clientId.js";
3
3
  import { RETRY_MAX_ATTEMPTS } from "../retryPolicy.js";
4
- import { BUFFERED_OUTPUT_TOKENS, DEFAULT_MODEL } from "./manifest.js";
4
+ import { BUFFERED_OUTPUT_TOKENS, DEFAULT_MODEL, canSkipReasoning } from "./manifest.js";
5
5
  const MODEL = process.env.MINDWEAVE_MODEL ?? DEFAULT_MODEL;
6
6
  /** Output ceiling for a streamed turn. This caps reasoning AND answer together, so
7
7
  * it needs headroom at the higher rungs; the family accepts up to 128K. */
@@ -11,10 +11,13 @@ const MAX_TOKENS_STREAM = 64_000;
11
11
  * the manifest because core reserves room for it when setting the compaction bars. */
12
12
  const MAX_TOKENS_BUFFERED = BUFFERED_OUTPUT_TOKENS;
13
13
  let client = null;
14
+ /** The key `client` was built with. A different live key (switched with /key, or by the
15
+ * app's key manager) rebuilds it; the old code kept the first key for the whole process. */
16
+ let clientKey;
14
17
  /** The shared SDK client, or a clear setup error if no key is configured yet. */
15
18
  async function api() {
16
- if (!client) {
17
- const apiKey = process.env.OPENAI_API_KEY;
19
+ const apiKey = process.env.OPENAI_API_KEY;
20
+ if (!client || apiKey !== clientKey) {
18
21
  if (!apiKey) {
19
22
  throw new Error("No OPENAI_API_KEY found. Add your key to the global config so Mindweave works " +
20
23
  "in every project:\n" +
@@ -28,6 +31,7 @@ async function api() {
28
31
  // here means a session behaves the same way whichever provider it is pointed at,
29
32
  // and that an SDK upgrade changing its default cannot quietly change ours.
30
33
  client = new OpenAIClient({ apiKey, maxRetries: RETRY_MAX_ATTEMPTS - 1, defaultHeaders: { "User-Agent": clientId() } });
34
+ clientKey = apiKey;
31
35
  }
32
36
  return client;
33
37
  }
@@ -140,7 +144,9 @@ export function buildBody(req, maxTokens) {
140
144
  max_output_tokens: maxTokens,
141
145
  // Reasoning is ONE dial here: `none` is the off switch rather than a separate
142
146
  // flag, so the shared thinking/effort pair collapses into a single rung.
143
- reasoning: { effort: cfg?.thinking ? cfg.effort : "none" },
147
+ // Astra and GPT-6.1 Sol have no `none`; `normalize` keeps them thinking, and a stray
148
+ // no-thinking config still gets the lightest rung rather than a refused request.
149
+ reasoning: { effort: cfg?.thinking ? cfg.effort : canSkipReasoning(cfg?.model ?? MODEL) ? "none" : "low" },
144
150
  store: false,
145
151
  };
146
152
  const tools = renderTools(req);
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/drivers/openai/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/drivers/openai/client.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,7 @@
1
1
  export const ASTRA = "gpt-6-astra";
2
+ export const SOL_61 = "gpt-6.1-sol";
3
+ export const SOL_6 = "gpt-6-sol";
4
+ export const LUNA_6 = "gpt-6-luna";
2
5
  export const SOL = "gpt-5.6-sol";
3
6
  export const TERRA = "gpt-5.6-terra";
4
7
  export const LUNA = "gpt-5.6-luna";
@@ -13,23 +16,51 @@ export const DEFAULT_MODEL = TERRA;
13
16
  */
14
17
  export const MODELS = [
15
18
  { id: TERRA, label: "GPT-5.6 Terra", description: "balanced intelligence and cost — the default" },
16
- { id: ASTRA, label: "GPT-6 Astra", description: "the newest flagship — the most capable, and the priciest" },
19
+ { id: ASTRA, label: "GPT-6 Astra", description: "the GPT-6 flagship — the most capable, and the priciest" },
20
+ { id: SOL_61, label: "GPT-6.1 Sol", description: "the newest Sol, at GPT-6 Sol's rate" },
21
+ { id: SOL_6, label: "GPT-6 Sol", description: "GPT-6 at Terra's input rate, with cheaper output" },
22
+ { id: LUNA_6, label: "GPT-6 Luna", description: "the cheapest GPT-6, for high-volume work" },
17
23
  { id: SOL, label: "GPT-5.6 Sol", description: "the GPT-5.6 frontier tier" },
18
24
  { id: LUNA, label: "GPT-5.6 Luna", description: "cheap and quick, for high-volume work" },
19
25
  ];
26
+ /**
27
+ * The models that cannot be asked NOT to reason. OpenAI's pages list their `effort` as
28
+ * low, medium, high, xhigh and max: `none` is not on the list, and the reasoning guide
29
+ * says so for both ("GPT-6 Astra does not support `none`", "GPT-6.1 Sol does not support
30
+ * `none` or `minimal`", developers.openai.com, checked 2026-10-01). Every other model
31
+ * here lists `none` among its efforts. Sending `none` to one of these two is the
32
+ * request the API refuses, so the "answer directly" rung does not exist for them.
33
+ */
34
+ const ALWAYS_REASONS = new Set([ASTRA, SOL_61]);
35
+ /** Whether this model accepts `reasoning.effort: "none"`, the off switch. */
36
+ export function canSkipReasoning(model) {
37
+ return !ALWAYS_REASONS.has(model);
38
+ }
20
39
  /**
21
40
  * The reasoning levels offered by `/think`.
22
41
  *
23
42
  * OpenAI expresses reasoning as a single `effort` rung with `none` as its off
24
43
  * switch, rather than a separate on/off flag plus a budget. That maps onto the
25
44
  * shared shape cleanly: `thinking: false` becomes `none` on the wire, and the four
26
- * thinking rungs are sent as themselves. All three models take the same ladder.
45
+ * thinking rungs are sent as themselves.
27
46
  *
28
- * The provider also accepts `minimal` between `none` and `low`. It is not offered:
29
- * it would be a fifth rung whose difference from `low` no user could predict, and
30
- * the ladder is more useful short.
47
+ * The two models in `ALWAYS_REASONS` have no `none`, so their ladder starts at `low`
48
+ * and says so: a rung that sat there as "answer directly" would be a setting that
49
+ * ends in a refused request.
50
+ *
51
+ * The provider also accepts `minimal` between `none` and `low` on some models. It is not
52
+ * offered: it would be a fifth rung whose difference from `low` no user could predict,
53
+ * and the ladder is more useful short.
31
54
  */
32
- export function thinkLevels(_model) {
55
+ export function thinkLevels(model) {
56
+ if (!canSkipReasoning(model)) {
57
+ return [
58
+ { label: "Standard", description: "always thinks — lighter budget", thinking: true, effort: "low" },
59
+ { label: "Thinking", description: "think first, then answer", thinking: true, effort: "medium" },
60
+ { label: "Deep", description: "more reasoning, more tool work", thinking: true, effort: "high" },
61
+ { label: "Maximum", description: "maximum reasoning budget", thinking: true, effort: "max" },
62
+ ];
63
+ }
33
64
  return [
34
65
  { label: "Standard", description: "answer directly — fastest", thinking: false, effort: "high" },
35
66
  { label: "Thinking", description: "think first, then answer", thinking: true, effort: "medium" },
@@ -38,12 +69,30 @@ export function thinkLevels(_model) {
38
69
  ];
39
70
  }
40
71
  /**
41
- * List prices (USD / 1M tokens). Cached input bills at a tenth of fresh input,
42
- * which is what keeps a re-sent conversation cheap.
72
+ * List prices (USD / 1M tokens), short-context tier (this manifest does not model
73
+ * OpenAI's separate long-context pricing above ~200K input — see `contextWindow`,
74
+ * which caps the usable window below that tier anyway). Cached input bills at a
75
+ * tenth of fresh input, which is what keeps a re-sent conversation cheap.
76
+ *
77
+ * Sol is running promotional pricing — $4 / $20 rather than its $5 / $30 (2.5x
78
+ * Terra) list price — "available at least through November 21, 2026"
79
+ * (developers.openai.com/api/docs/pricing, checked 2026-09-20). Recorded as the
80
+ * plain current price rather than branched on the date, same call the Gemini
81
+ * manifest makes for its own promo: a fixed expiry with no announced successor
82
+ * price belongs in a review before that date, not a guess baked in now.
43
83
  */
44
84
  const PRICES = {
45
85
  [ASTRA]: { cacheHit: 1, cacheMiss: 10, output: 50 },
46
- [SOL]: { cacheHit: 0.5, cacheMiss: 5, output: 30 },
86
+ // GPT-6 Sol and Luna: list prices, no promotion (developers.openai.com/api/docs/pricing,
87
+ // checked 2026-09-23).
88
+ [SOL_6]: { cacheHit: 0.2, cacheMiss: 2, output: 10 },
89
+ // GPT-6.1 Sol: the same input and output rate as GPT-6 Sol with HALF its cache-read price
90
+ // (developers.openai.com/api/docs/pricing, checked 2026-10-01). Over 272K input tokens the
91
+ // whole request bills at 2x input and cache and 1.5x output; the usable window here is far
92
+ // below that, so it is not modelled.
93
+ [SOL_61]: { cacheHit: 0.1, cacheMiss: 2, output: 10 },
94
+ [LUNA_6]: { cacheHit: 0.01, cacheMiss: 0.1, output: 0.5 },
95
+ [SOL]: { cacheHit: 0.4, cacheMiss: 4, output: 20 },
47
96
  [TERRA]: { cacheHit: 0.2, cacheMiss: 2, output: 12 },
48
97
  [LUNA]: { cacheHit: 0.02, cacheMiss: 0.2, output: 1.2 },
49
98
  };
@@ -52,7 +101,7 @@ export function price(model) {
52
101
  return PRICES[model] ?? PRICES[DEFAULT_MODEL];
53
102
  }
54
103
  /**
55
- * The model's USABLE context window. All three STORE 1.05M tokens (922K of it
104
+ * The model's USABLE context window. Every model here STORES 1.05M tokens (922K of it
56
105
  * input), but this is deliberately the sharp window rather than the storage cap:
57
106
  * on BYOK every token in the window is the user's money on every turn, so
58
107
  * anchoring compaction at 1M would mean carrying an enormous prompt long after it
@@ -64,7 +113,7 @@ export function contextWindow(_model) {
64
113
  /**
65
114
  * The ceiling this driver puts on a single BUFFERED (non-streaming) call.
66
115
  *
67
- * All three models accept 128K output, but a non-streaming request that runs that
116
+ * Every model here accepts 128K output, but a non-streaming request that runs that
68
117
  * long risks an HTTP timeout, so the buffered path — core's small internal calls,
69
118
  * like a compaction summary — is capped far lower. `client.ts` sends this value and
70
119
  * `dynamo/contextWindow.ts` reserves it; one exported constant means the request
@@ -83,16 +132,18 @@ export function acceptsImages(_model) {
83
132
  /**
84
133
  * Coerce a stored or unknown config onto a model this provider actually serves.
85
134
  *
86
- * There is no per-model rule to enforce here — the family shares one ladder, so an
87
- * unknown model id falls back and an unknown effort clamps, and that is all. The
88
- * result is then snapped onto a rung `/think` actually lists, so a config carried
89
- * in from another provider by `/model` cannot leave the user on a setting the menu
90
- * has no tick beside.
135
+ * Two corrections. A model that cannot skip reasoning is moved onto thinking, at the
136
+ * LIGHTEST rung rather than whatever effort the old config carried: a "no thinking" config
137
+ * arrives from another model with effort `high`, and landing on `high` would spend more of
138
+ * the user's money than the setting they chose. Then the result is snapped onto a rung
139
+ * `/think` actually lists, so a config carried in from another provider by `/model` cannot
140
+ * leave the user on a setting the menu has no tick beside.
91
141
  */
92
142
  export function normalize(config) {
93
143
  const model = PRICES[config.model] ? config.model : DEFAULT_MODEL;
94
- const thinking = config.thinking === true;
95
- const effort = EFFORTS.includes(config.effort) ? config.effort : "high";
144
+ const forcedOn = !canSkipReasoning(model) && config.thinking !== true;
145
+ const thinking = forcedOn || config.thinking === true;
146
+ const effort = forcedOn ? "low" : EFFORTS.includes(config.effort) ? config.effort : "high";
96
147
  return { model, thinking, effort: snapToOfferedRung(model, thinking, effort) };
97
148
  }
98
149
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/drivers/openai/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/drivers/openai/manifest.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  export const MAX_38 = "qwen3.8-max";
2
2
  export const MAX_37 = "qwen3.7-max";
3
3
  export const PLUS = "qwen3.7-plus";
4
+ export const FLASH_38 = "qwen3.8-flash";
4
5
  export const FLASH = "qwen3.5-flash";
5
6
  /** The model used when nothing is saved and no env override is set. */
6
7
  export const DEFAULT_MODEL = PLUS;
@@ -10,14 +11,15 @@ export const DEFAULT_MODEL = PLUS;
10
11
  *
11
12
  * Plus leads rather than Max: it is roughly a sixth of Max's rate and carries the
12
13
  * same 1M window, so it is the one that is rarely the wrong answer for ordinary
13
- * work. Both Max tiers are listed because the older one is materially cheaper and
14
- * has not been withdrawn.
14
+ * work. The older Max stays listed because it has not been withdrawn, but it now
15
+ * costs MORE than 3.8 Max, and its description says so rather than implying a saving.
15
16
  */
16
17
  export const MODELS = [
17
18
  { id: PLUS, label: "Qwen3.7 Plus", description: "balanced and cheap to run — the default" },
18
19
  { id: MAX_38, label: "Qwen3.8 Max", description: "the flagship, for the hardest work" },
19
- { id: MAX_37, label: "Qwen3.7 Max", description: "the previous flagship, at half the rate" },
20
- { id: FLASH, label: "Qwen3.5 Flash", description: "fastest and cheapest, for simple work" },
20
+ { id: MAX_37, label: "Qwen3.7 Max", description: "the previous flagship — pricier than 3.8 Max" },
21
+ { id: FLASH_38, label: "Qwen3.8 Flash", description: "the newest Flash — fast and cheap" },
22
+ { id: FLASH, label: "Qwen3.5 Flash", description: "the previous Flash, cheaper still" },
21
23
  ];
22
24
  /**
23
25
  * The reasoning levels offered by `/think`.
@@ -50,11 +52,22 @@ export function thinkLevels(_model) {
50
52
  * one these figures come from. This driver targets international, so these are
51
53
  * the rates that apply to it.
52
54
  */
55
+ /*
56
+ * Checked against Alibaba's International price table 2026-09-23 (alibabacloud.com,
57
+ * model-studio/model-pricing). Implicit cache hits bill at 20% of input EXCEPT on the
58
+ * Qwen3.8 models, which Alibaba lists as exceptions priced in its console; their cache
59
+ * figures are the rates OpenRouter's live listing carries for the same models.
60
+ *
61
+ * 3.7 Max and 3.5 Flash used to sit at half and about two thirds of their real price
62
+ * here, so every session on them reported well under what it cost.
63
+ */
53
64
  const PRICES = {
54
65
  [MAX_38]: { cacheHit: 0.25, cacheMiss: 2, output: 6 },
55
- [MAX_37]: { cacheHit: 0.25, cacheMiss: 1.25, output: 3.75 },
66
+ [MAX_37]: { cacheHit: 0.5, cacheMiss: 2.5, output: 7.5 },
67
+ // Limited-time 20% off the $0.40 / $1.60 list price.
56
68
  [PLUS]: { cacheHit: 0.064, cacheMiss: 0.32, output: 1.28 },
57
- [FLASH]: { cacheHit: 0.013, cacheMiss: 0.065, output: 0.26 },
69
+ [FLASH_38]: { cacheHit: 0.016, cacheMiss: 0.15, output: 0.47 },
70
+ [FLASH]: { cacheHit: 0.02, cacheMiss: 0.1, output: 0.4 },
58
71
  };
59
72
  /** Cache-aware list price for a model, falling back to the default model's. */
60
73
  export function price(model) {