automatey 0.1.10 → 0.1.16

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 (229) hide show
  1. package/README.md +121 -14
  2. package/dist/adapters/index.d.ts +1 -0
  3. package/dist/adapters/index.d.ts.map +1 -1
  4. package/dist/adapters/index.js +1 -0
  5. package/dist/adapters/index.js.map +1 -1
  6. package/dist/adapters/json-memory-client.d.ts +40 -0
  7. package/dist/adapters/json-memory-client.d.ts.map +1 -0
  8. package/dist/adapters/json-memory-client.js +187 -0
  9. package/dist/adapters/json-memory-client.js.map +1 -0
  10. package/dist/adapters/judge-client.d.ts +10 -26
  11. package/dist/adapters/judge-client.d.ts.map +1 -1
  12. package/dist/adapters/judge-client.js +5 -1
  13. package/dist/adapters/judge-client.js.map +1 -1
  14. package/dist/adapters/llm-client.d.ts +7 -0
  15. package/dist/adapters/llm-client.d.ts.map +1 -1
  16. package/dist/adapters/llm-client.js +139 -5
  17. package/dist/adapters/llm-client.js.map +1 -1
  18. package/dist/commands/agents-command.d.ts +12 -0
  19. package/dist/commands/agents-command.d.ts.map +1 -0
  20. package/dist/commands/agents-command.js +129 -0
  21. package/dist/commands/agents-command.js.map +1 -0
  22. package/dist/commands/broker-command.d.ts +3 -0
  23. package/dist/commands/broker-command.d.ts.map +1 -0
  24. package/dist/commands/broker-command.js +211 -0
  25. package/dist/commands/broker-command.js.map +1 -0
  26. package/dist/commands/enhance-command.d.ts +7 -0
  27. package/dist/commands/enhance-command.d.ts.map +1 -0
  28. package/dist/commands/enhance-command.js +43 -0
  29. package/dist/commands/enhance-command.js.map +1 -0
  30. package/dist/commands/help-command.d.ts.map +1 -1
  31. package/dist/commands/help-command.js +3 -29
  32. package/dist/commands/help-command.js.map +1 -1
  33. package/dist/commands/help-manual.d.ts +4 -0
  34. package/dist/commands/help-manual.d.ts.map +1 -0
  35. package/dist/commands/help-manual.js +227 -0
  36. package/dist/commands/help-manual.js.map +1 -0
  37. package/dist/commands/index.d.ts +10 -0
  38. package/dist/commands/index.d.ts.map +1 -1
  39. package/dist/commands/index.js +45 -0
  40. package/dist/commands/index.js.map +1 -1
  41. package/dist/commands/keep-alive-command.d.ts +3 -0
  42. package/dist/commands/keep-alive-command.d.ts.map +1 -0
  43. package/dist/commands/keep-alive-command.js +34 -0
  44. package/dist/commands/keep-alive-command.js.map +1 -0
  45. package/dist/commands/memory-command.d.ts +7 -0
  46. package/dist/commands/memory-command.d.ts.map +1 -0
  47. package/dist/commands/memory-command.js +81 -0
  48. package/dist/commands/memory-command.js.map +1 -0
  49. package/dist/commands/search-command.d.ts +7 -0
  50. package/dist/commands/search-command.d.ts.map +1 -0
  51. package/dist/commands/search-command.js +64 -0
  52. package/dist/commands/search-command.js.map +1 -0
  53. package/dist/commands/servers-command.d.ts.map +1 -1
  54. package/dist/commands/servers-command.js +61 -2
  55. package/dist/commands/servers-command.js.map +1 -1
  56. package/dist/commands/setup-command.d.ts +3 -0
  57. package/dist/commands/setup-command.d.ts.map +1 -0
  58. package/dist/commands/setup-command.js +128 -0
  59. package/dist/commands/setup-command.js.map +1 -0
  60. package/dist/commands/skills-command.d.ts +3 -0
  61. package/dist/commands/skills-command.d.ts.map +1 -0
  62. package/dist/commands/skills-command.js +201 -0
  63. package/dist/commands/skills-command.js.map +1 -0
  64. package/dist/commands/steps-command.d.ts +3 -0
  65. package/dist/commands/steps-command.d.ts.map +1 -0
  66. package/dist/commands/steps-command.js +42 -0
  67. package/dist/commands/steps-command.js.map +1 -0
  68. package/dist/commands/vscode-command.d.ts +25 -0
  69. package/dist/commands/vscode-command.d.ts.map +1 -0
  70. package/dist/commands/vscode-command.js +360 -0
  71. package/dist/commands/vscode-command.js.map +1 -0
  72. package/dist/core/agents-manager.d.ts +88 -0
  73. package/dist/core/agents-manager.d.ts.map +1 -0
  74. package/dist/core/agents-manager.js +275 -0
  75. package/dist/core/agents-manager.js.map +1 -0
  76. package/dist/core/chat-engine.d.ts +32 -1
  77. package/dist/core/chat-engine.d.ts.map +1 -1
  78. package/dist/core/chat-engine.js +678 -37
  79. package/dist/core/chat-engine.js.map +1 -1
  80. package/dist/core/config-manager.d.ts +2 -0
  81. package/dist/core/config-manager.d.ts.map +1 -1
  82. package/dist/core/config-manager.js +9 -1
  83. package/dist/core/config-manager.js.map +1 -1
  84. package/dist/core/index.d.ts +1 -1
  85. package/dist/core/index.d.ts.map +1 -1
  86. package/dist/core/index.js.map +1 -1
  87. package/dist/core/interfaces.d.ts +168 -4
  88. package/dist/core/interfaces.d.ts.map +1 -1
  89. package/dist/core/interfaces.js +2 -1
  90. package/dist/core/interfaces.js.map +1 -1
  91. package/dist/core/mcp-client-manager.d.ts.map +1 -1
  92. package/dist/core/mcp-client-manager.js +32 -4
  93. package/dist/core/mcp-client-manager.js.map +1 -1
  94. package/dist/core/mcp-config-manager.d.ts +12 -2
  95. package/dist/core/mcp-config-manager.d.ts.map +1 -1
  96. package/dist/core/mcp-config-manager.js +37 -0
  97. package/dist/core/mcp-config-manager.js.map +1 -1
  98. package/dist/core/model-builder.d.ts +2 -1
  99. package/dist/core/model-builder.d.ts.map +1 -1
  100. package/dist/core/model-builder.js +20 -0
  101. package/dist/core/model-builder.js.map +1 -1
  102. package/dist/core/skills-manager.d.ts +10 -2
  103. package/dist/core/skills-manager.d.ts.map +1 -1
  104. package/dist/core/skills-manager.js +36 -2
  105. package/dist/core/skills-manager.js.map +1 -1
  106. package/dist/core/sub-agent.d.ts +35 -0
  107. package/dist/core/sub-agent.d.ts.map +1 -1
  108. package/dist/core/sub-agent.js +42 -3
  109. package/dist/core/sub-agent.js.map +1 -1
  110. package/dist/index.js +755 -53
  111. package/dist/index.js.map +1 -1
  112. package/dist/tui/index.d.ts +1 -1
  113. package/dist/tui/index.d.ts.map +1 -1
  114. package/dist/tui/index.js +1 -1
  115. package/dist/tui/index.js.map +1 -1
  116. package/dist/tui/renderer.d.ts +26 -0
  117. package/dist/tui/renderer.d.ts.map +1 -1
  118. package/dist/tui/renderer.js +316 -16
  119. package/dist/tui/renderer.js.map +1 -1
  120. package/dist/tui/stdin-approval.d.ts +14 -1
  121. package/dist/tui/stdin-approval.d.ts.map +1 -1
  122. package/dist/tui/stdin-approval.js +99 -2
  123. package/dist/tui/stdin-approval.js.map +1 -1
  124. package/dist/utils/debounce.d.ts +10 -0
  125. package/dist/utils/debounce.d.ts.map +1 -0
  126. package/dist/utils/debounce.js +20 -0
  127. package/dist/utils/debounce.js.map +1 -0
  128. package/dist/utils/index.d.ts +2 -0
  129. package/dist/utils/index.d.ts.map +1 -1
  130. package/dist/utils/index.js +2 -0
  131. package/dist/utils/index.js.map +1 -1
  132. package/dist/utils/keep-alive.d.ts +17 -0
  133. package/dist/utils/keep-alive.d.ts.map +1 -0
  134. package/dist/utils/keep-alive.js +141 -0
  135. package/dist/utils/keep-alive.js.map +1 -0
  136. package/dist/utils/message-formatter.d.ts +2 -0
  137. package/dist/utils/message-formatter.d.ts.map +1 -1
  138. package/dist/utils/message-formatter.js +49 -9
  139. package/dist/utils/message-formatter.js.map +1 -1
  140. package/dist/utils/system-probe.d.ts +30 -0
  141. package/dist/utils/system-probe.d.ts.map +1 -0
  142. package/dist/utils/system-probe.js +301 -0
  143. package/dist/utils/system-probe.js.map +1 -0
  144. package/dist/utils/tool-acl.d.ts +39 -0
  145. package/dist/utils/tool-acl.d.ts.map +1 -0
  146. package/dist/utils/tool-acl.js +69 -0
  147. package/dist/utils/tool-acl.js.map +1 -0
  148. package/dist/utils/ui-glyphs.d.ts +19 -0
  149. package/dist/utils/ui-glyphs.d.ts.map +1 -0
  150. package/dist/utils/ui-glyphs.js +53 -0
  151. package/dist/utils/ui-glyphs.js.map +1 -0
  152. package/mcp/coder/dist/sandbox.d.ts +3 -1
  153. package/mcp/coder/dist/sandbox.d.ts.map +1 -1
  154. package/mcp/coder/dist/sandbox.js +31 -15
  155. package/mcp/coder/dist/sandbox.js.map +1 -1
  156. package/mcp/coder/dist/server.js +31 -35
  157. package/mcp/coder/dist/server.js.map +1 -1
  158. package/mcp/coder/package.json +6 -3
  159. package/mcp/desktop/dist/lib/config.d.ts +4 -0
  160. package/mcp/desktop/dist/lib/config.d.ts.map +1 -0
  161. package/mcp/desktop/dist/lib/config.js +12 -0
  162. package/mcp/desktop/dist/lib/config.js.map +1 -0
  163. package/mcp/desktop/dist/lib/factory.d.ts +5 -0
  164. package/mcp/desktop/dist/lib/factory.d.ts.map +1 -0
  165. package/mcp/desktop/dist/lib/factory.js +15 -0
  166. package/mcp/desktop/dist/lib/factory.js.map +1 -0
  167. package/mcp/desktop/dist/lib/index.d.ts +4 -0
  168. package/mcp/desktop/dist/lib/index.d.ts.map +1 -0
  169. package/mcp/desktop/dist/lib/index.js +3 -0
  170. package/mcp/desktop/dist/lib/index.js.map +1 -0
  171. package/mcp/desktop/dist/lib/types.d.ts +10 -0
  172. package/mcp/desktop/dist/lib/types.d.ts.map +1 -0
  173. package/mcp/desktop/dist/lib/types.js +2 -0
  174. package/mcp/desktop/dist/lib/types.js.map +1 -0
  175. package/mcp/desktop/dist/libnut/manager.d.ts +65 -0
  176. package/mcp/desktop/dist/libnut/manager.d.ts.map +1 -0
  177. package/mcp/desktop/dist/libnut/manager.js +219 -0
  178. package/mcp/desktop/dist/libnut/manager.js.map +1 -0
  179. package/mcp/desktop/dist/libnut/platform.d.ts +3 -0
  180. package/mcp/desktop/dist/libnut/platform.d.ts.map +1 -0
  181. package/mcp/desktop/dist/libnut/platform.js +36 -0
  182. package/mcp/desktop/dist/libnut/platform.js.map +1 -0
  183. package/mcp/desktop/dist/server.d.ts +3 -0
  184. package/mcp/desktop/dist/server.d.ts.map +1 -0
  185. package/mcp/desktop/dist/server.js +27 -0
  186. package/mcp/desktop/dist/server.js.map +1 -0
  187. package/mcp/desktop/dist/tools/index.d.ts +4 -0
  188. package/mcp/desktop/dist/tools/index.d.ts.map +1 -0
  189. package/mcp/desktop/dist/tools/index.js +14 -0
  190. package/mcp/desktop/dist/tools/index.js.map +1 -0
  191. package/mcp/desktop/dist/tools/keyboard-tools.d.ts +4 -0
  192. package/mcp/desktop/dist/tools/keyboard-tools.d.ts.map +1 -0
  193. package/mcp/desktop/dist/tools/keyboard-tools.js +39 -0
  194. package/mcp/desktop/dist/tools/keyboard-tools.js.map +1 -0
  195. package/mcp/desktop/dist/tools/mouse-tools.d.ts +4 -0
  196. package/mcp/desktop/dist/tools/mouse-tools.d.ts.map +1 -0
  197. package/mcp/desktop/dist/tools/mouse-tools.js +82 -0
  198. package/mcp/desktop/dist/tools/mouse-tools.js.map +1 -0
  199. package/mcp/desktop/dist/tools/screen-tools.d.ts +4 -0
  200. package/mcp/desktop/dist/tools/screen-tools.d.ts.map +1 -0
  201. package/mcp/desktop/dist/tools/screen-tools.js +84 -0
  202. package/mcp/desktop/dist/tools/screen-tools.js.map +1 -0
  203. package/mcp/desktop/dist/tools/system-tools.d.ts +4 -0
  204. package/mcp/desktop/dist/tools/system-tools.d.ts.map +1 -0
  205. package/mcp/desktop/dist/tools/system-tools.js +28 -0
  206. package/mcp/desktop/dist/tools/system-tools.js.map +1 -0
  207. package/mcp/desktop/dist/tools/window-tools.d.ts +4 -0
  208. package/mcp/desktop/dist/tools/window-tools.d.ts.map +1 -0
  209. package/mcp/desktop/dist/tools/window-tools.js +88 -0
  210. package/mcp/desktop/dist/tools/window-tools.js.map +1 -0
  211. package/mcp/desktop/dist/transport/http.d.ts +4 -0
  212. package/mcp/desktop/dist/transport/http.d.ts.map +1 -0
  213. package/mcp/desktop/dist/transport/http.js +73 -0
  214. package/mcp/desktop/dist/transport/http.js.map +1 -0
  215. package/mcp/desktop/package.json +29 -0
  216. package/mcp/planner/package.json +6 -3
  217. package/mcp.example.json +65 -0
  218. package/mcp.json +12 -10
  219. package/package.json +41 -20
  220. package/skills/build-and-test/SKILL.md +42 -0
  221. package/skills/code-review/SKILL.md +55 -0
  222. package/skills/command-line-commands/SKILL.md +47 -0
  223. package/skills/consolator-recording/SKILL.md +56 -0
  224. package/skills/git-workflows/SKILL.md +56 -0
  225. package/skills/linux-admin/SKILL.md +45 -0
  226. package/skills/npx-with-approval/SKILL.md +63 -0
  227. package/skills/task-planning/SKILL.md +63 -0
  228. package/skills/web-research/SKILL.md +66 -0
  229. package/skills/windows-admin/SKILL.md +45 -0
package/README.md CHANGED
@@ -45,7 +45,7 @@
45
45
  - **Sessions**: Save/load conversation sessions in `~/.automatey/sessions/`
46
46
  - **Checkpoints**: `/checkpoint` — full conversation snapshots with BM25 keyword search
47
47
  - **Auto-compact**: LLM summarises older context when usage ≥ 90%
48
- - **Skills**: Progressive SKILL.md loading from `.agents/skills/`
48
+ - **Skills**: Progressive SKILL.md loading from the canonical universal path `.agents/skills/`, plus extra directories via `AUTOMATEY_SKILLS_DIRS`
49
49
  - **Eval system**: `/eval <file.jsonl>` runs MCQ, keyword, and regex benchmarks with per-category accuracy reports
50
50
  - **Planner MCP**: Bundled `mcp/planner` — todos + plans, prompts for task breakdown
51
51
  - **Coder MCP**: Bundled `mcp/coder` — read/write/edit files, run commands, glob files, prompts for analysis
@@ -196,10 +196,6 @@ ay "summarise this repo" # one-shot against the current directory
196
196
  | `~/.automatey/planner/` | Planner MCP server data |
197
197
  | `~/.automatey/logs/` | Agent log files |
198
198
 
199
- > JSON / JSONC in `mcp.json`: Standard JSON does not allow `//` comments.
200
- > The agent uses a JSONC parser — `//` line comments and `/* */` block comments
201
- > are fully supported in all `mcp.json` files.
202
-
203
199
  ## MCP Config — `mcp.json`
204
200
 
205
201
  The agent looks for MCP config in this order:
@@ -215,26 +211,27 @@ cp mcp.example.json mcp.json # project-local
215
211
  cp mcp.example.json ~/.automatey/mcp.json # global
216
212
  ```
217
213
 
214
+ Prefer strict JSON with no comments. Field descriptions and examples live in [docs/MCP-CONFIG.md](c:\build\automatey-org\automatey\docs\MCP-CONFIG.md).
215
+
218
216
  Example `mcp.json`:
219
217
 
220
- ```jsonc
218
+ ```json
221
219
  {
222
- // JSONC is supported — '//' and '/* */' comments are stripped before parsing
223
220
  "mcpServers": {
224
221
  "planner": {
225
- "type": "stdio",
222
+ "transport": "stdio",
226
223
  "command": "node",
227
224
  "args": ["./mcp/planner/dist/server.js"]
228
225
  },
229
226
  "brave-search": {
230
- "type": "stdio",
227
+ "transport": "stdio",
231
228
  "command": "npx",
232
229
  "args": ["-y", "@brave/brave-search-mcp-server", "--transport", "stdio"],
233
230
  "env": { "BRAVE_API_KEY": "${env:BRAVE_API_KEY}" },
234
231
  "requiresEnv": "BRAVE_API_KEY"
235
232
  },
236
233
  "memento": {
237
- "type": "http",
234
+ "transport": "http",
238
235
  "url": "http://localhost:3500/mcp",
239
236
  "portCheck": true
240
237
  }
@@ -242,10 +239,6 @@ Example `mcp.json`:
242
239
  }
243
240
  ```
244
241
 
245
- Conditional loading:
246
- - `requiresEnv` — skip server if env var is missing (no key = no server, no error)
247
- - `portCheck: true` — skip HTTP/SSE server if the URL is unreachable at startup (1 s probe)
248
-
249
242
  ## Config
250
243
 
251
244
  Config lives in `~/.automatey/config.json` (auto-created on first run):
@@ -318,6 +311,120 @@ Checkpoints are full conversation snapshots saved to `~/.automatey/checkpoints/`
318
311
 
319
312
  The BM25 search indexes the full message history of every checkpoint and ranks them by keyword relevance.
320
313
 
314
+ ## Sub-Agents
315
+
316
+ Sub-agents let the main agent delegate focused tasks to a nested ReAct loop — with its own tools, model, and system prompt. The parent spawns the sub-agent, waits for its result, and continues.
317
+
318
+ ### How it works
319
+
320
+ The LLM calls the built-in `run_subagent` tool:
321
+
322
+ ```
323
+ run_subagent(
324
+ description: "Write and test a Node.js hello-world script",
325
+ prompt: "Create hello.js that prints Hello World, run it with node, and confirm the output.",
326
+ agentName: "nemotron-coder" // optional — uses a named .agent.md definition
327
+ )
328
+ ```
329
+
330
+ The sub-agent runs its own ReAct loop (up to `maxToolRounds`) and returns a plain-text result to the main agent.
331
+
332
+ ### Named agents — `.agent.md` files
333
+
334
+ Define reusable agents as `.agent.md` files in `.agents/agents/` (project-local) or `~/.agents/agents/` (global). Format is YAML frontmatter + system prompt body:
335
+
336
+ ```markdown
337
+ ---
338
+ name: nemotron-coder
339
+ description: >
340
+ Code generation sub-agent on the local Nemotron vLLM instance.
341
+ Use for writing, editing, and running code — offloads code tasks
342
+ to a local model without burning cloud API quota.
343
+ model: auto
344
+ provider: nemotron
345
+ baseUrl: http://192.168.0.58:8002/v1
346
+ tools:
347
+ - read_file
348
+ - write_file
349
+ - execute_command
350
+ - glob_files
351
+ - list_dir
352
+ - search_text
353
+ - edit_file
354
+ maxToolRounds: 12
355
+ ---
356
+
357
+ You are a code-generation agent running on a local Nemotron model.
358
+ Write complete, working code and save it to disk.
359
+ Use execute_command to run and verify output. Never truncate code.
360
+ ```
361
+
362
+ Place in:
363
+ - **`.agents/agents/nemotron-coder.agent.md`** — project-local (resolved from `cwd` at runtime)
364
+ - **`~/.agents/agents/nemotron-coder.agent.md`** — global (available in every directory)
365
+
366
+ Extra directories: set `AUTOMATEY_AGENTS_DIRS` (path-separator-delimited) to add more search paths.
367
+
368
+ ### Frontmatter fields
369
+
370
+ | Field | Description |
371
+ |---|---|
372
+ | `name` | Agent identifier (falls back to filename stem) |
373
+ | `description` | When to use this agent — shown to the LLM in the system prompt |
374
+ | `model` | Model ID, `auto`, or wildcard mask (e.g. `*Super*`, `nvidia/*`) |
375
+ | `provider` | `nemotron` \| `openai` \| `anthropic` \| `perplexity` |
376
+ | `baseUrl` | Base URL for OpenAI-compatible endpoints |
377
+ | `apiKey` | API key — supports `${ENV_VAR}` interpolation |
378
+ | `tools` | Allowlist of tool names (absent = inherit all parent tools) |
379
+ | `mcpServers` | Allowlist of MCP server names (absent = inherit all) |
380
+ | `maxToolRounds` | Max ReAct rounds (absent = parent's setting) |
381
+
382
+ ### Model resolution
383
+
384
+ For `nemotron` agents, `model` supports the same resolution as the main config:
385
+
386
+ ```yaml
387
+ model: auto # picks the first model from /v1/models
388
+ model: "*Super*" # glob-matches the first model containing "Super"
389
+ model: nvidia/* # any nvidia/ model
390
+ model: nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4 # exact ID
391
+ ```
392
+
393
+ automatey probes the `baseUrl`'s `/v1/models` endpoint at sub-agent spawn time to resolve wildcards.
394
+
395
+ ### Listing agents
396
+
397
+ ```
398
+ /agents list # show all discovered agents + scope (project / global)
399
+ /agents info <name> # show frontmatter + system prompt for an agent
400
+ /agents help # usage and file format reference
401
+ ```
402
+
403
+ ### Example prompts
404
+
405
+ ```
406
+ Write a CLI tool in Go that downloads a URL to a file — use nemotron-coder
407
+ ```
408
+
409
+ ```
410
+ Run nemotron-coder to generate a Python FastAPI stub for a todo list API, then run it and show me the /docs URL
411
+ ```
412
+
413
+ ```
414
+ Delegate to nemotron-coder: read package.json, bump the patch version, and commit it
415
+ ```
416
+
417
+ ### Generic sub-agents (no `.agent.md`)
418
+
419
+ Omit `agentName` and the parent's own LLM client and full tool set are used:
420
+
421
+ ```
422
+ Split this task into three parallel sub-agents: one for backend tests,
423
+ one for frontend tests, one for linting. Run each and summarise.
424
+ ```
425
+
426
+ > Sub-agents are stateless — they do not share session, context, or compaction with the parent. Each sub-agent starts fresh with an empty context containing only its system prompt and the prompt passed by the parent.
427
+
321
428
  ## Built-in MCP Servers
322
429
 
323
430
  ### 🗂 Coder (`mcp/coder`)
@@ -2,4 +2,5 @@ export { LLMClient } from './llm-client.ts';
2
2
  export type { LLMClientConfig } from './llm-client.ts';
3
3
  export { judgeResult, judgeQuality, judgeConfigFromEnv, JudgeVerdictSchema, QualityVerdictSchema, } from './judge-client.ts';
4
4
  export type { JudgeConfig, JudgeMode, JudgeVerdict, QualityVerdict, } from './judge-client.ts';
5
+ export { JsonMemoryClient } from './json-memory-client.ts';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EACL,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,cAAc,GACf,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EACL,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  // Adapters barrel
2
2
  export { LLMClient } from "./llm-client.js";
3
3
  export { judgeResult, judgeQuality, judgeConfigFromEnv, JudgeVerdictSchema, QualityVerdictSchema, } from "./judge-client.js";
4
+ export { JsonMemoryClient } from "./json-memory-client.js";
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAClB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EACL,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAClB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EACL,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * JsonMemoryClient — A zero-dependency file-backed memory implementation.
3
+ *
4
+ * Stores memories as a JSON array in `~/.automatey/memory.json`.
5
+ * Full-text search is BM25-inspired: tf-idf over words, substring matching for
6
+ * short queries.
7
+ *
8
+ * Trade-offs vs Memento / SQLite:
9
+ * + Zero dependencies — no native addons, no network
10
+ * + JSON is human-readable and grep-able
11
+ * − No vector embeddings → purely lexical recall
12
+ * − Full scan on search (fast up to ~50K entries)
13
+ * − No URL hydration or LLM cleanup in enhanceMemory (throws)
14
+ *
15
+ * Switch to MementoMemoryClient or SqliteMemoryClient for semantic search.
16
+ */
17
+ import type { IMemoryClient, Memory, MemoryEnhanceOptions, MemoryEnhanceResult, MemoryResult, MemorySearchOptions, MemoryStoreOptions } from '#core/interfaces';
18
+ export declare class JsonMemoryClient implements IMemoryClient {
19
+ private storePath;
20
+ private memories;
21
+ private connected;
22
+ constructor(storePath?: string);
23
+ connect(): Promise<void>;
24
+ disconnect(): Promise<void>;
25
+ isConnected(): boolean;
26
+ searchMemory(query: string, options?: MemorySearchOptions): Promise<MemoryResult[]>;
27
+ storeMemory(text: string, options?: MemoryStoreOptions): Promise<string>;
28
+ getMemory(id: string): Promise<Memory | null>;
29
+ updateMemory(id: string, updates: {
30
+ text?: string;
31
+ tags?: string[];
32
+ metadata?: Record<string, unknown>;
33
+ }): Promise<void>;
34
+ enhanceMemory(_id: string, _options?: MemoryEnhanceOptions): Promise<MemoryEnhanceResult>;
35
+ private assertConnected;
36
+ private persist;
37
+ private toMemory;
38
+ private tryParseJson;
39
+ }
40
+ //# sourceMappingURL=json-memory-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-memory-client.d.ts","sourceRoot":"","sources":["../../src/adapters/json-memory-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,OAAO,KAAK,EACV,aAAa,EACb,MAAM,EACN,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AA6C1B,qBAAa,gBAAiB,YAAW,aAAa;IACpD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,CAAC,EAAE,MAAM;IAIxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAaxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,WAAW,IAAI,OAAO;IAIhB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA2CnF,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBxE,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAO7C,YAAY,CAChB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAC9E,OAAO,CAAC,IAAI,CAAC;IAYV,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAS/F,OAAO,CAAC,eAAe;YAIT,OAAO;IAIrB,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,YAAY;CAGrB"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * JsonMemoryClient — A zero-dependency file-backed memory implementation.
3
+ *
4
+ * Stores memories as a JSON array in `~/.automatey/memory.json`.
5
+ * Full-text search is BM25-inspired: tf-idf over words, substring matching for
6
+ * short queries.
7
+ *
8
+ * Trade-offs vs Memento / SQLite:
9
+ * + Zero dependencies — no native addons, no network
10
+ * + JSON is human-readable and grep-able
11
+ * − No vector embeddings → purely lexical recall
12
+ * − Full scan on search (fast up to ~50K entries)
13
+ * − No URL hydration or LLM cleanup in enhanceMemory (throws)
14
+ *
15
+ * Switch to MementoMemoryClient or SqliteMemoryClient for semantic search.
16
+ */
17
+ import { createHash } from 'node:crypto';
18
+ import { existsSync } from 'node:fs';
19
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
20
+ import { homedir } from 'node:os';
21
+ import { join } from 'node:path';
22
+ // ── Token / TF-IDF helpers ────────────────────────────────────────────────
23
+ function tokenize(text) {
24
+ return text
25
+ .toLowerCase()
26
+ .replace(/[^a-z0-9\s]/g, ' ')
27
+ .split(/\s+/)
28
+ .filter(t => t.length > 1);
29
+ }
30
+ /** Compute a simple BM25-inspired score (k1=1.5, b=0.75). */
31
+ function bm25Score(queryTokens, docTokens, avgDocLen) {
32
+ const k1 = 1.5;
33
+ const b = 0.75;
34
+ const docLen = docTokens.length;
35
+ const freqMap = new Map();
36
+ for (const t of docTokens)
37
+ freqMap.set(t, (freqMap.get(t) ?? 0) + 1);
38
+ let score = 0;
39
+ for (const qt of queryTokens) {
40
+ const tf = freqMap.get(qt) ?? 0;
41
+ if (tf === 0)
42
+ continue;
43
+ const idf = 1; // no corpus IDF without global stats — treat as 1
44
+ const tfNorm = (tf * (k1 + 1)) / (tf + k1 * (1 - b + b * (docLen / avgDocLen)));
45
+ score += idf * tfNorm;
46
+ }
47
+ return score;
48
+ }
49
+ // ── JsonMemoryClient ──────────────────────────────────────────────────────
50
+ export class JsonMemoryClient {
51
+ storePath;
52
+ memories = [];
53
+ connected = false;
54
+ constructor(storePath) {
55
+ this.storePath = storePath ?? join(homedir(), '.automatey', 'memory.json');
56
+ }
57
+ async connect() {
58
+ await mkdir(join(homedir(), '.automatey'), { recursive: true });
59
+ if (existsSync(this.storePath)) {
60
+ try {
61
+ const raw = await readFile(this.storePath, 'utf-8');
62
+ this.memories = JSON.parse(raw);
63
+ }
64
+ catch {
65
+ this.memories = [];
66
+ }
67
+ }
68
+ this.connected = true;
69
+ }
70
+ async disconnect() {
71
+ this.connected = false;
72
+ }
73
+ isConnected() {
74
+ return this.connected;
75
+ }
76
+ async searchMemory(query, options) {
77
+ this.assertConnected();
78
+ const k = options?.k ?? 8;
79
+ const namespaces = options?.namespace
80
+ ? Array.isArray(options.namespace) ? options.namespace : [options.namespace]
81
+ : null;
82
+ const tagFilter = options?.tagFilter?.split(',').map(t => t.trim().toLowerCase()) ?? null;
83
+ const queryTokens = tokenize(query);
84
+ const lowerQuery = query.toLowerCase();
85
+ // Filter to matching namespaces + tags
86
+ let pool = this.memories.filter(m => {
87
+ if (namespaces && !namespaces.includes(m.namespace))
88
+ return false;
89
+ if (tagFilter && !tagFilter.every(t => m.tags.some(mt => mt.toLowerCase().includes(t))))
90
+ return false;
91
+ return true;
92
+ });
93
+ if (pool.length === 0)
94
+ return [];
95
+ const avgDocLen = pool.reduce((s, m) => s + tokenize(m.text).length, 0) / pool.length;
96
+ const scored = pool.map(mem => {
97
+ const docTokens = tokenize(mem.text);
98
+ let score = bm25Score(queryTokens, docTokens, avgDocLen);
99
+ // Boost exact substring matches
100
+ if (mem.text.toLowerCase().includes(lowerQuery))
101
+ score += 2;
102
+ return { mem, score };
103
+ });
104
+ return scored
105
+ .filter(x => x.score > 0)
106
+ .sort((a, b) => b.score - a.score)
107
+ .slice(0, k)
108
+ .map(x => ({
109
+ id: x.mem.id,
110
+ text: x.mem.text,
111
+ score: Math.min(x.score / 10, 1), // normalise to [0,1] approximately
112
+ namespace: x.mem.namespace,
113
+ tags: x.mem.tags,
114
+ }));
115
+ }
116
+ async storeMemory(text, options) {
117
+ this.assertConnected();
118
+ const id = createHash('sha256').update(text + Date.now()).digest('hex').slice(0, 16);
119
+ const now = new Date().toISOString();
120
+ const record = {
121
+ id,
122
+ text,
123
+ namespace: options?.namespace ?? 'default',
124
+ tags: options?.tags?.split(',').map(t => t.trim()).filter(Boolean) ?? [],
125
+ metadata: options?.metadata ? this.tryParseJson(options.metadata) : {},
126
+ createdAt: now,
127
+ updatedAt: now,
128
+ };
129
+ this.memories.push(record);
130
+ await this.persist();
131
+ return id;
132
+ }
133
+ async getMemory(id) {
134
+ this.assertConnected();
135
+ const m = this.memories.find(x => x.id === id);
136
+ if (!m)
137
+ return null;
138
+ return this.toMemory(m);
139
+ }
140
+ async updateMemory(id, updates) {
141
+ this.assertConnected();
142
+ const idx = this.memories.findIndex(x => x.id === id);
143
+ if (idx < 0)
144
+ throw new Error(`Memory not found: ${id}`);
145
+ const m = this.memories[idx];
146
+ if (updates.text !== undefined)
147
+ m.text = updates.text;
148
+ if (updates.tags !== undefined)
149
+ m.tags = updates.tags;
150
+ if (updates.metadata !== undefined)
151
+ m.metadata = updates.metadata;
152
+ m.updatedAt = new Date().toISOString();
153
+ await this.persist();
154
+ }
155
+ async enhanceMemory(_id, _options) {
156
+ throw new Error('JsonMemoryClient does not support enhanceMemory. ' +
157
+ 'Use MementoMemoryClient for URL hydration and LLM cleanup.');
158
+ }
159
+ // ── Private helpers ──────────────────────────────────────────────────────
160
+ assertConnected() {
161
+ if (!this.connected)
162
+ throw new Error('JsonMemoryClient not connected. Call connect() first.');
163
+ }
164
+ async persist() {
165
+ await writeFile(this.storePath, JSON.stringify(this.memories, null, 2), 'utf-8');
166
+ }
167
+ toMemory(m) {
168
+ return {
169
+ id: m.id,
170
+ text: m.text,
171
+ namespace: m.namespace,
172
+ tags: m.tags,
173
+ metadata: m.metadata,
174
+ createdAt: new Date(m.createdAt),
175
+ updatedAt: new Date(m.updatedAt),
176
+ };
177
+ }
178
+ tryParseJson(s) {
179
+ try {
180
+ return JSON.parse(s);
181
+ }
182
+ catch {
183
+ return {};
184
+ }
185
+ }
186
+ }
187
+ //# sourceMappingURL=json-memory-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-memory-client.js","sourceRoot":"","sources":["../../src/adapters/json-memory-client.ts"],"names":[],"mappings":"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"}
@@ -16,18 +16,14 @@
16
16
  import { z } from 'zod';
17
17
  import type { LLMProvider } from '#core/interfaces';
18
18
  export declare const JudgeVerdictSchema: z.ZodObject<{
19
- verdict: z.ZodEnum<["correct", "incorrect", "uncertain"]>;
19
+ verdict: z.ZodEnum<{
20
+ correct: "correct";
21
+ incorrect: "incorrect";
22
+ uncertain: "uncertain";
23
+ }>;
20
24
  reasoning: z.ZodString;
21
25
  confidence: z.ZodNumber;
22
- }, "strip", z.ZodTypeAny, {
23
- reasoning: string;
24
- verdict: "correct" | "incorrect" | "uncertain";
25
- confidence: number;
26
- }, {
27
- reasoning: string;
28
- verdict: "correct" | "incorrect" | "uncertain";
29
- confidence: number;
30
- }>;
26
+ }, z.core.$strip>;
31
27
  export type JudgeVerdict = z.infer<typeof JudgeVerdictSchema> & {
32
28
  /** Cited URLs from Perplexity responses (when EVAL_JUDGE_PROVIDER=perplexity). */
33
29
  sources?: string[];
@@ -63,22 +59,10 @@ export declare function judgeResult(config: JudgeConfig, question: string, expec
63
59
  export declare const QualityVerdictSchema: z.ZodObject<{
64
60
  score: z.ZodNumber;
65
61
  reasoning: z.ZodString;
66
- strengths: z.ZodArray<z.ZodString, "many">;
67
- weaknesses: z.ZodArray<z.ZodString, "many">;
68
- suggestions: z.ZodArray<z.ZodString, "many">;
69
- }, "strip", z.ZodTypeAny, {
70
- reasoning: string;
71
- score: number;
72
- strengths: string[];
73
- weaknesses: string[];
74
- suggestions: string[];
75
- }, {
76
- reasoning: string;
77
- score: number;
78
- strengths: string[];
79
- weaknesses: string[];
80
- suggestions: string[];
81
- }>;
62
+ strengths: z.ZodArray<z.ZodString>;
63
+ weaknesses: z.ZodArray<z.ZodString>;
64
+ suggestions: z.ZodArray<z.ZodString>;
65
+ }, z.core.$strip>;
82
66
  export type QualityVerdict = z.infer<typeof QualityVerdictSchema>;
83
67
  /**
84
68
  * Judge agent output quality with a structured 0-10 score and feedback.
@@ -1 +1 @@
1
- {"version":3,"file":"judge-client.d.ts","sourceRoot":"","sources":["../../src/adapters/judge-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAKpD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,GAAG;IAC9D,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAaD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CA0B/E;AAqBD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,CAAC,CA4BvB;AAID;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EAM/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAelE;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,CAAC,CA0BzB"}
1
+ {"version":3,"file":"judge-client.d.ts","sourceRoot":"","sources":["../../src/adapters/judge-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAKpD,eAAO,MAAM,kBAAkB;;;;;;;;iBAI7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,GAAG;IAC9D,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAiBD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CA0B/E;AAqBD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,CAAC,CA4BvB;AAID;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;iBAM/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAelE;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,CAAC,CA0BzB"}
@@ -28,6 +28,10 @@ const DEFAULT_MODELS = {
28
28
  openai: 'gpt-4o-mini',
29
29
  anthropic: 'claude-haiku-4-5',
30
30
  nemotron: 'nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16',
31
+ google: 'gemini-2.0-flash',
32
+ groq: 'llama-3.3-70b-versatile',
33
+ mistral: 'mistral-small-latest',
34
+ xai: 'grok-3-mini',
31
35
  };
32
36
  // ── Config factory ────────────────────────────────────────────────────────────
33
37
  /**
@@ -38,7 +42,7 @@ export function judgeConfigFromEnv(overrideBaseUrl) {
38
42
  const provider = process.env.EVAL_JUDGE_PROVIDER;
39
43
  if (!provider)
40
44
  return null;
41
- const validProviders = ['perplexity', 'openai', 'anthropic', 'nemotron'];
45
+ const validProviders = ['perplexity', 'openai', 'anthropic', 'nemotron', 'google', 'groq', 'mistral', 'xai'];
42
46
  if (!validProviders.includes(provider)) {
43
47
  throw new Error(`EVAL_JUDGE_PROVIDER="${provider}" is not valid. Choose from: ${validProviders.join(', ')}`);
44
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"judge-client.js","sourceRoot":"","sources":["../../src/adapters/judge-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"judge-client.js","sourceRoot":"","sources":["../../src/adapters/judge-client.ts"],"names":[],"mappings":"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"}
@@ -49,7 +49,14 @@ export declare class LLMClient implements ILLMClient {
49
49
  */
50
50
  private _buildProviderOptions;
51
51
  private _toAIMessages;
52
+ /**
53
+ * Flatten oneOf/anyOf in property schemas to the first concrete type.
54
+ * vLLM's Jinja2 chat template cannot handle oneOf/anyOf in tool parameter schemas.
55
+ */
56
+ private _flattenSchema;
52
57
  private _toAITools;
53
58
  private _mapFinish;
59
+ private _recoverFromReasoning;
60
+ private _stripThinkingArtifacts;
54
61
  }
55
62
  //# sourceMappingURL=llm-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/adapters/llm-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAcH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACX,OAAO,EAGR,MAAM,kBAAkB,CAAC;AAG1B,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,SAAU,YAAW,UAAU;IAC1C,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAW;IAClC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,gBAAgB,CAAU;IAClC,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,EAAE,eAAe;IASnC,kBAAkB,IAAI,MAAM,EAAE;IAC9B,eAAe,IAAI,MAAM;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IASvB,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;YAgB/D,OAAO;YA8FP,SAAS;IA8CvB,OAAO,CAAC,WAAW;IAwDnB,yFAAyF;IACzF,OAAO,CAAC,uBAAuB;IAI/B,0EAA0E;IAC1E,OAAO,CAAC,mBAAmB;IAQ3B;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAiC7B,OAAO,CAAC,aAAa;IAyCrB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,UAAU;CAKnB"}
1
+ {"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/adapters/llm-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAkBH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACX,OAAO,EAGR,MAAM,kBAAkB,CAAC;AAG1B,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,SAAU,YAAW,UAAU;IAC1C,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAW;IAClC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,gBAAgB,CAAU;IAClC,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,EAAE,eAAe;IASnC,kBAAkB,IAAI,MAAM,EAAE;IAC9B,eAAe,IAAI,MAAM;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IASvB,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;YAkB/D,OAAO;YA8GP,SAAS;IAgEvB,OAAO,CAAC,WAAW;IA4EnB,yFAAyF;IACzF,OAAO,CAAC,uBAAuB;IAK/B,0EAA0E;IAC1E,OAAO,CAAC,mBAAmB;IAQ3B;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAiC7B,OAAO,CAAC,aAAa;IAyCrB;;;OAGG;IACH,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,qBAAqB;IA4C7B,OAAO,CAAC,uBAAuB;CAMhC"}