From 8795d96c5ac2937b0830ae96794e8ae6e578ae5f Mon Sep 17 00:00:00 2001 From: Jamius Siam Date: Fri, 19 Jun 2026 01:09:06 +0600 Subject: [PATCH 01/11] Added builtin ask plugin --- CLAUDE.md | 9 +- docs/CONFIGURATION.md | 13 +++ package.json | 5 + pnpm-lock.yaml | 148 +++++++++++++++++++++++- src/cli.ts | 60 +++++++++- src/plugins/builtin-ai-ask/main.test.ts | 127 ++++++++++++++++++++ src/plugins/builtin-ai-ask/main.ts | 118 +++++++++++++++++++ src/plugins/config.test.ts | 1 + src/plugins/config.ts | 2 + src/setup.test.ts | 8 +- src/setup.ts | 8 +- 11 files changed, 486 insertions(+), 13 deletions(-) create mode 100644 src/plugins/builtin-ai-ask/main.test.ts create mode 100644 src/plugins/builtin-ai-ask/main.ts diff --git a/CLAUDE.md b/CLAUDE.md index 08c747e..461d7a5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -29,7 +29,7 @@ Follow these rules when editing code in this project. `sibyl` is a CLI web search/crawl tool for AI Agents (`bin: sibyl` → `dist/cli.js`) with a filesystem-based plugin system. Key modules: -- `src/cli.ts` — entry point. Ensures dirs + config exist, loads plugins, builds a `PluginContext` (`buildPluginContext`), and dispatches commands (`search`, `fetch`, `help`/`--help`/`-h`, `version`/`--version`). Only `search` and `fetch` are wired up via the async `handleSearch`/`handleFetch` helpers (awaited by `main`), each passing the context as the last arg to the selected plugin's `fn`. The `fetch` command prints the fetch plugin's output directly — the CLI doesn't dispatch a separate `parse` step, but a fetch plugin may itself run the configured parse plugin via `context.configuredPlugins.parse` (`builtin-brightdata-fetch`, `builtin-crawl4ai-fetch`, and `builtin-alterlab-fetch` do; `builtin-firecrawl-fetch` does only in its raw-HTML mode; `builtin-exa-fetch` returns content as-is). `ask` is part of the contract but not dispatched by any command. `main` is exported and only auto-runs when the file is the actual CLI entry (`import.meta.url` vs `process.argv[1]` guard), so tests can import it without side effects. +- `src/cli.ts` — entry point. Ensures dirs + config exist, loads plugins, builds a `PluginContext` (`buildPluginContext`), and dispatches commands (`search`, `fetch`, `ask`, `help`/`--help`/`-h`, `version`/`--version`). `search`, `fetch`, and `ask` are wired up via the async `handleSearch`/`handleFetch`/`handleAsk` helpers (awaited by `main`), each passing the context as the last arg to the selected plugin's `fn`. The `fetch` command prints the fetch plugin's output directly — the CLI doesn't dispatch a separate `parse` step, but a fetch plugin may itself run the configured parse plugin via `context.configuredPlugins.parse` (`builtin-brightdata-fetch`, `builtin-crawl4ai-fetch`, and `builtin-alterlab-fetch` do; `builtin-firecrawl-fetch` does only in its raw-HTML mode; `builtin-exa-fetch` returns content as-is). The `ask` command (`sibyl ask `) passes the URL as the ask plugin's first arg; analogously, an ask plugin may itself fetch that URL via `context.configuredPlugins.fetch` before answering (`builtin-ai-ask` does). `main` is exported and only auto-runs when the file is the actual CLI entry (`import.meta.url` vs `process.argv[1]` guard), so tests can import it without side effects. - `src/setup.ts` — ensures `~/.sibyl` and `~/.sibyl/plugins` exist, and loads/creates/validates `~/.sibyl/config.json` (all on every invocation). - `src/plugin-loader.ts` — assembles the active plugin set: builtin plugins + external (on-disk) plugins; validates the external ones. - `src/plugins/config.ts` — `getBuiltinPlugins()`, the in-repo builtin plugin registry. @@ -48,7 +48,7 @@ Plugins live in `~/.sibyl/plugins//main.js` (note: `.js`, loaded at runtim 3. `fn` — the function implementing the plugin's logic. Every `fn` receives a `PluginContext` as its **last** argument; its signature otherwise depends on `type` (`src/@types/plugin.ts`): - `search`: `(query, context) => Promise` - `fetch`: `(url, context) => Promise` - - `ask`: `(parsedContent, query, context) => Promise` + - `ask`: `(src, query, context) => Promise` (the dispatched `ask` command passes a URL as `src`) - `parse`: `(html, context) => Promise` `PluginContext` (`src/@types/plugin.ts`) lets a plugin reach the rest of the plugin system: `{ configuredPlugins: Partial>, allPlugins: PluginTypeDeclaration[], getPlugin(name): PluginTypeDeclaration | null }`. `configuredPlugins` is keyed by type (the per-type selection from config), `allPlugins` is everything loaded, and `getPlugin` looks up by name. It's built once in `cli.ts` and threaded to every `fn`; plugins consume it only if needed (a 1-arg `fn` still satisfies the contract via structural typing). This is how a fetch plugin runs the configured parser: `context.configuredPlugins.parse?.fn(html, context)`. @@ -65,15 +65,16 @@ When changing the plugin shape, update all three together: `src/@types/plugin.ts `loadPlugins()` (`plugin-loader.ts`) returns `[...getBuiltinPlugins(), ...externalPlugins]`. -- Builtins are **compiled into the binary, not loaded from disk**. `src/plugins/config.ts` statically imports each builtin's `SilbylPlugin` (e.g. from `src/plugins/builtin-exa-search/main.ts`) and returns them as `PluginTypeDeclaration` objects — they bypass `validatePlugin` and the `main.js` discovery path. Each builtin `main.ts` types its `SilbylPlugin` with the matching interface (`SearchPlugin` / `FetchPlugin` / `ParsePlugin`) so `type` stays a literal. +- Builtins are **compiled into the binary, not loaded from disk**. `src/plugins/config.ts` statically imports each builtin's `SilbylPlugin` (e.g. from `src/plugins/builtin-exa-search/main.ts`) and returns them as `PluginTypeDeclaration` objects — they bypass `validatePlugin` and the `main.js` discovery path. Each builtin `main.ts` types its `SilbylPlugin` with the matching interface (`SearchPlugin` / `FetchPlugin` / `AskPlugin` / `ParsePlugin`) so `type` stays a literal. - Builtin names are prefixed `builtin-` by convention. External plugin folders starting with `builtin-` are rejected during discovery (reserved namespace), so user plugins cannot shadow a builtin. - To add a builtin: create `src/plugins/builtin-/main.ts` exporting a typed `SilbylPlugin` (with `fn`), then register it in `getBuiltinPlugins()`. +- `builtin-ai-ask` (the `ask` builtin) reads a URL via the configured fetch plugin, then answers a question over that content using the **Vercel AI SDK**, with the provider selectable via `SIBYL_AI_PROVIDER` (`openai` / `anthropic` / `ollama` / `openrouter`), `SIBYL_MODEL_NAME`, and a per-provider key (`OPENAI_API_KEY` etc.; Ollama uses `OLLAMA_BASE_URL`, no key). It loads `ai` and each provider package (`@ai-sdk/*`, `ollama-ai-provider-v2`, `@openrouter/ai-sdk-provider`) via **dynamic `import()`** inside the `fn` — never at module top level — because `getBuiltinPlugins()` imports every builtin module on every CLI run, so top-level SDK imports would slow `search`/`fetch` too. ### Config (`~/.sibyl/config.json`) Shape: `SibylConfig` (`src/@types/sibyl-config.ts`) — `{ plugins: Partial>, variables: { name, value }[] }`. `plugins` maps `type` → plugin name (e.g. `{ "search": "builtin-exa-search" }`); keying by type structurally enforces at most one plugin per type. `variables` is a list of `{ name, value }` pairs injected into `process.env`. -- `loadOrCreateConfigFile()` (`setup.ts`) writes a default config (`writeDefaultSibylConfig`) when the file is missing or empty, then parses, validates, and injects variables. The default selects `builtin-searxng-search` / `builtin-crawl4ai-fetch` / `builtin-parse-htmlToMd` with no `variables` (fully local, no-API-key backends). +- `loadOrCreateConfigFile()` (`setup.ts`) writes a default config (`writeDefaultSibylConfig`) when the file is missing or empty, then parses, validates, and injects variables. The default selects `builtin-searxng-search` / `builtin-crawl4ai-fetch` / `builtin-parse-htmlToMd` / `builtin-ai-ask` plus one variable (`SIBYL_SHOW_SEARCH_DESCRIPTION=true`); the search/fetch/parse backends are fully local and need no API key, while the `ask` command additionally needs `SIBYL_AI_PROVIDER` / `SIBYL_MODEL_NAME` (and a provider API key unless using Ollama) to be set. - `injectConfigVariables()` (`setup.ts`) sets `process.env[name] = value` for each config variable. **Config wins over the environment** — a variable named in config overrides any existing env var; names absent from config fall back to their existing env value. (Plugins like `builtin-exa-search` read `process.env.EXA_API_KEY` at call time, so they pick up either source.) - `validateConfig()` checks each entry's name is a non-empty string; on failure it `console.error`s and `process.exit(1)` (hard exit, not a skip-with-warning like plugin loading). - Plugin selection: `loadPlugins()` loads _all_ available plugins (builtins + disk), then `cli.ts` picks the one to run **by name from config** — e.g. the `search` command looks up `config.plugins.search` and finds the loaded plugin whose `type === "search"` and `name` matches. Missing config entry or no matching loaded plugin → `console.error` + non-zero exit. diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index 522b038..3a4c579 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -121,6 +121,19 @@ Requires a Crawl4AI server, e.g., via Docker. See more at [https://hub.docker.co | `BRIGHTDATA_API_KEY` | Yes | — | Bright Data API key. | | `BRIGHTDATA_WEB_UNLOCKER_API_ZONE` | Yes | — | Bright Data Web Unlocker API zone. | +#### `builtin-ai-ask` — `ask` + +Reads a URL through the configured `fetch` plugin, then asks an LLM the question against that content. A working `fetch` plugin must also be configured (`plugins.fetch`). + +| Variable | Required | Default | Description | +| -------------------- | ----------- | ---------------------------- | -------------------------------------------------------------------------------------------- | +| `SIBYL_AI_PROVIDER` | Yes | — | LLM provider: one of `openai`, `anthropic`, `ollama`, `openrouter`. | +| `SIBYL_MODEL_NAME` | Yes | — | Model id passed to the provider (e.g. `gpt-6`, `claude-sonnet-4-6`, `llama3.1`). | +| `OPENAI_API_KEY` | Conditional | — | Required when `SIBYL_AI_PROVIDER=openai`. | +| `ANTHROPIC_API_KEY` | Conditional | — | Required when `SIBYL_AI_PROVIDER=anthropic`. | +| `OPENROUTER_API_KEY` | Conditional | — | Required when `SIBYL_AI_PROVIDER=openrouter`. | +| `OLLAMA_BASE_URL` | No | `http://localhost:11433/api` | Base URL of a running Ollama server; used only when `SIBYL_AI_PROVIDER=ollama` (no API key). | + #### `builtin-parse-htmlToMd` — `parse` No environment variables. diff --git a/package.json b/package.json index 9fc2494..75cae2c 100644 --- a/package.json +++ b/package.json @@ -61,9 +61,14 @@ "vitest": "^4.1.8" }, "dependencies": { + "@ai-sdk/anthropic": "^3.0.85", + "@ai-sdk/openai": "^3.0.72", + "@openrouter/ai-sdk-provider": "^2.9.1", + "ai": "^6.0.207", "cheerio": "^1.2.0", "defuddle": "^0.18.1", "linkedom": "^0.18.12", + "ollama-ai-provider-v2": "^3.6.0", "turndown": "^7.2.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9f15cd5..66b384e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,18 @@ importers: .: dependencies: + '@ai-sdk/anthropic': + specifier: ^3.0.85 + version: 3.0.85(zod@4.4.3) + '@ai-sdk/openai': + specifier: ^3.0.72 + version: 3.0.72(zod@4.4.3) + '@openrouter/ai-sdk-provider': + specifier: ^2.9.1 + version: 2.9.1(ai@6.0.207(zod@4.4.3))(zod@4.4.3) + ai: + specifier: ^6.0.207 + version: 6.0.207(zod@4.4.3) cheerio: specifier: ^1.2.0 version: 1.2.0 @@ -17,6 +29,9 @@ importers: linkedom: specifier: ^0.18.12 version: 0.18.12 + ollama-ai-provider-v2: + specifier: ^3.6.0 + version: 3.6.0(ai@6.0.207(zod@4.4.3))(zod@4.4.3) turndown: specifier: ^7.2.4 version: 7.2.4 @@ -59,10 +74,38 @@ importers: version: 8.60.1(eslint@10.4.1)(typescript@6.0.3) vitest: specifier: ^4.1.8 - version: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 4.1.8(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.4)(yaml@2.9.0)) packages: + '@ai-sdk/anthropic@3.0.85': + resolution: {integrity: sha512-fNeDB644l5wbRNQU0FnI+F7UTtOenMnPtACfMPUJaS2zJfuBlseEa1TMg+otHkETZgaJB+6Na51NQEv0+m7czw==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/gateway@3.0.133': + resolution: {integrity: sha512-Ebs+7iS9zUgJu5B0RlxM2JmDWzq79Cpd6YdiqcCzB5qFdpfQJPUDiXutqlQP89F2XGjOdDeidulBTXUdXWzOxw==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/openai@3.0.72': + resolution: {integrity: sha512-ZF545m6pCXLUTERFfRCyfM7WsG4Nu/A+jlXQjSv7w22dGov02ssB0e1kviI3NLIERfRF/U+n2rKbFuUjzYY7CQ==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/provider-utils@4.0.30': + resolution: {integrity: sha512-VO7I+vPffqI5sMnPoUq5DCSqKIgQIk/naJWRdQVpz2ma2zoprC/lqiJiUEl2s6DfvTD76TbhD3q39ROjlA6rGw==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/provider@3.0.10': + resolution: {integrity: sha512-Q3BZ27qfpYqnCYGvE3vt+Qi6LGOF9R5Nmzn+9JoM1lCRsD9mYaIhfJLkSunN48nfGXJ6n+XNV0J/XVpqGQl7Dw==} + engines: {node: '>=18'} + '@babel/helper-string-parser@7.29.7': resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} @@ -327,6 +370,17 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 + '@openrouter/ai-sdk-provider@2.9.1': + resolution: {integrity: sha512-okgq07Vdkro4CB5INbfhwa0e6VR1HS7sidNcfHN/MeXLJvX1JmQCff/vem6tcxwT9r1avyFrXSlfv9B28D/Pag==} + engines: {node: '>=18'} + peerDependencies: + ai: ^6.0.0 + zod: ^3.25.0 || ^4.0.0 + + '@opentelemetry/api@1.9.1': + resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==} + engines: {node: '>=8.0.0'} + '@oxc-project/types@0.133.0': resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} @@ -514,6 +568,10 @@ packages: resolution: {integrity: sha512-EbGRQg4FhrmwLodl+t3JNAnXHWVr9Vp+Zl1QBZVPY4ByfkzIT8cX3K6QWODHtkIZqqJVEWvhHSx3v5PDHsaQag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@vercel/oidc@3.2.0': + resolution: {integrity: sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug==} + engines: {node: '>= 20'} + '@vitest/coverage-v8@4.1.8': resolution: {integrity: sha512-lt3kovsyHwYe00wq4D1ti0Z974fWj4NLp6siqiyEufUpyFwK9Yhi7rBhac9JL5aA0zoMrJqc4vYPZRUnI7l7nw==} peerDependencies: @@ -566,6 +624,12 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + ai@6.0.207: + resolution: {integrity: sha512-9rAHnqU+AvxyqO6WgiWj7hQENX6AprHXZWZEdBWwgnA854D2Mje/PiTmbcFqO+2Cck1lII0NLRQJY9lmdSorMw==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + ajv@6.15.0: resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} @@ -754,6 +818,10 @@ packages: eventemitter3@5.0.4: resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + eventsource-parser@3.1.0: + resolution: {integrity: sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==} + engines: {node: '>=18.0.0'} + expect-type@1.3.0: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} @@ -878,6 +946,9 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -1027,6 +1098,13 @@ packages: resolution: {integrity: sha512-AWGB9WFcRXOQs48Z/udjI5ZcZMHXwX8XPByNpOydgcGsDLIzjGizhoMWJyKAWze7AVW/2W1i+/gPX4YtKe5cyg==} engines: {node: '>=12.20.0'} + ollama-ai-provider-v2@3.6.0: + resolution: {integrity: sha512-1Om3FVJYhBwkAr5kQ+BX1s/tdVdtVdoFQWrX4PBQHDHPISyGt24CjhtggEjUYpy5ait0YeVfZwEpIYjgD8Ih7Q==} + engines: {node: '>=20'} + peerDependencies: + ai: ^5.0.0 || ^6.0.0 + zod: ^4.0.16 + onetime@7.0.0: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} @@ -1350,8 +1428,41 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + snapshots: + '@ai-sdk/anthropic@3.0.85(zod@4.4.3)': + dependencies: + '@ai-sdk/provider': 3.0.10 + '@ai-sdk/provider-utils': 4.0.30(zod@4.4.3) + zod: 4.4.3 + + '@ai-sdk/gateway@3.0.133(zod@4.4.3)': + dependencies: + '@ai-sdk/provider': 3.0.10 + '@ai-sdk/provider-utils': 4.0.30(zod@4.4.3) + '@vercel/oidc': 3.2.0 + zod: 4.4.3 + + '@ai-sdk/openai@3.0.72(zod@4.4.3)': + dependencies: + '@ai-sdk/provider': 3.0.10 + '@ai-sdk/provider-utils': 4.0.30(zod@4.4.3) + zod: 4.4.3 + + '@ai-sdk/provider-utils@4.0.30(zod@4.4.3)': + dependencies: + '@ai-sdk/provider': 3.0.10 + '@standard-schema/spec': 1.1.0 + eventsource-parser: 3.1.0 + zod: 4.4.3 + + '@ai-sdk/provider@3.0.10': + dependencies: + json-schema: 0.4.0 + '@babel/helper-string-parser@7.29.7': {} '@babel/helper-validator-identifier@7.29.7': {} @@ -1529,6 +1640,13 @@ snapshots: '@tybys/wasm-util': 0.10.2 optional: true + '@openrouter/ai-sdk-provider@2.9.1(ai@6.0.207(zod@4.4.3))(zod@4.4.3)': + dependencies: + ai: 6.0.207(zod@4.4.3) + zod: 4.4.3 + + '@opentelemetry/api@1.9.1': {} + '@oxc-project/types@0.133.0': {} '@rolldown/binding-android-arm64@1.0.3': @@ -1699,6 +1817,8 @@ snapshots: '@typescript-eslint/types': 8.60.1 eslint-visitor-keys: 5.0.1 + '@vercel/oidc@3.2.0': {} + '@vitest/coverage-v8@4.1.8(vitest@4.1.8)': dependencies: '@bcoe/v8-coverage': 1.0.2 @@ -1711,7 +1831,7 @@ snapshots: obug: 2.1.2 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.4)(yaml@2.9.0)) + vitest: 4.1.8(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.4)(yaml@2.9.0)) '@vitest/expect@4.1.8': dependencies: @@ -1763,6 +1883,14 @@ snapshots: acorn@8.16.0: {} + ai@6.0.207(zod@4.4.3): + dependencies: + '@ai-sdk/gateway': 3.0.133(zod@4.4.3) + '@ai-sdk/provider': 3.0.10 + '@ai-sdk/provider-utils': 4.0.30(zod@4.4.3) + '@opentelemetry/api': 1.9.1 + zod: 4.4.3 + ajv@6.15.0: dependencies: fast-deep-equal: 3.1.3 @@ -2005,6 +2133,8 @@ snapshots: eventemitter3@5.0.4: {} + eventsource-parser@3.1.0: {} + expect-type@1.3.0: {} fast-deep-equal@3.1.3: {} @@ -2100,6 +2230,8 @@ snapshots: json-schema-traverse@0.4.1: {} + json-schema@0.4.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} keyv@4.5.4: @@ -2234,6 +2366,13 @@ snapshots: obug@2.1.2: {} + ollama-ai-provider-v2@3.6.0(ai@6.0.207(zod@4.4.3))(zod@4.4.3): + dependencies: + '@ai-sdk/provider': 3.0.10 + '@ai-sdk/provider-utils': 4.0.30(zod@4.4.3) + ai: 6.0.207(zod@4.4.3) + zod: 4.4.3 + onetime@7.0.0: dependencies: mimic-function: 5.0.1 @@ -2441,7 +2580,7 @@ snapshots: tsx: 4.22.4 yaml: 2.9.0 - vitest@4.1.8(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.4)(yaml@2.9.0)): + vitest@4.1.8(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/coverage-v8@4.1.8)(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.4)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.8 '@vitest/mocker': 4.1.8(vite@8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.4)(yaml@2.9.0)) @@ -2464,6 +2603,7 @@ snapshots: vite: 8.0.16(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.4)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: + '@opentelemetry/api': 1.9.1 '@types/node': 25.9.1 '@vitest/coverage-v8': 4.1.8(vitest@4.1.8) transitivePeerDependencies: @@ -2502,3 +2642,5 @@ snapshots: optional: true yocto-queue@0.1.0: {} + + zod@4.4.3: {} diff --git a/src/cli.ts b/src/cli.ts index 6510a69..0c2b644 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -6,6 +6,7 @@ */ import { loadOrCreateConfigDir, loadOrCreateConfigFile, loadOrCreatePluginsDir } from "./setup.ts"; import type { + AskPlugin, FetchPlugin, PluginContext, PluginType, @@ -64,6 +65,23 @@ export async function main(argv: string[]): Promise { await handleFetch(plugins, config, url, context); break; } + case "ask": { + const url = rest[0]?.trim(); + const query = rest.slice(1).join(" ").trim(); + + if (!url || !query) { + console.error('Usage: sibyl ask ""'); + exit(1); + } + + if (!isValidHttpUrl(url)) { + console.error(`Invalid URL: ${url}`); + exit(1); + } + + await handleAsk(plugins, config, url, query, context); + break; + } case "--version": case "version": console.log("sibyl 0.1.0"); @@ -152,6 +170,38 @@ async function handleFetch( } } +async function handleAsk( + plugins: PluginTypeDeclaration[], + config: SibylConfig, + url: string, + query: string, + context: PluginContext, +): Promise { + const askPluginName = config.plugins.ask; + + if (!askPluginName) { + console.error("No ask plugin configured in `~/.sibyl/config.json`"); + exit(1); + } + + const askPlugin = plugins.find( + (plugin) => plugin.type === "ask" && plugin.name === askPluginName, + ) as AskPlugin; + + if (!askPlugin) { + console.error(`Configured ask plugin \`${askPluginName}\` not found`); + exit(1); + } + + try { + const result = await askPlugin.fn(url, query, context); + console.log(result); + } catch (error) { + console.error(`Error asking using ${askPlugin.name}: ${error}`); + exit(1); + } +} + function printHelp(): void { console.log(`sibyl - CLI tool @@ -159,14 +209,16 @@ Usage: sibyl [options] Commands: - search Search the web - fetch Fetch the content of a URL - help Show this help - version Show version + search Search the web + fetch Fetch the content of a URL + ask Answer a question using a URL's content via an LLM + help Show this help + version Show version Examples: sibyl search "react vite bootstrap" sibyl fetch https://vite.dev/guide + sibyl ask https://vite.dev/guide "how do I start a react project with vite?" `); } diff --git a/src/plugins/builtin-ai-ask/main.test.ts b/src/plugins/builtin-ai-ask/main.test.ts new file mode 100644 index 0000000..6eceb5d --- /dev/null +++ b/src/plugins/builtin-ai-ask/main.test.ts @@ -0,0 +1,127 @@ +/* + * Author: Jamius Siam + * Since: 18/06/2026 + */ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { generateText } from "ai"; +import { SilbylPlugin } from "./main.ts"; +import type { FetchPlugin, PluginContext } from "../../@types/plugin.ts"; + +vi.mock("ai", () => ({ generateText: vi.fn() })); +vi.mock("@ai-sdk/openai", () => ({ + createOpenAI: vi.fn(() => (modelName: string) => ({ provider: "openai", modelName })), +})); + +const askFn = SilbylPlugin.fn; +const mockedGenerateText = vi.mocked(generateText); + +function resolveAnswer(text: string): void { + // @ts-ignore Complicated type, ignoring for now + mockedGenerateText.mockResolvedValue({ text }); +} + +function makeContext(fetchFn?: (url: string) => Promise): PluginContext { + const fetchPlugin: FetchPlugin | undefined = fetchFn + ? { name: "mock-fetch", type: "fetch", fn: (url) => fetchFn(url) } + : undefined; + + return { + configuredPlugins: fetchPlugin ? { fetch: fetchPlugin } : {}, + allPlugins: fetchPlugin ? [fetchPlugin] : [], + getPlugin: () => null, + }; +} + +const okContext = makeContext(async () => "page body content"); + +let envSnapshot: NodeJS.ProcessEnv; + +beforeEach(() => { + envSnapshot = { ...process.env }; + process.env.SIBYL_AI_PROVIDER = "openai"; + process.env.SIBYL_MODEL_NAME = "gpt-test"; + process.env.OPENAI_API_KEY = "test-key"; + delete process.env.OLLAMA_BASE_URL; + + mockedGenerateText.mockReset(); + resolveAnswer("the answer"); +}); + +afterEach(() => { + vi.unstubAllGlobals(); + for (const key of Object.keys(process.env)) { + if (!(key in envSnapshot)) delete process.env[key]; + } + Object.assign(process.env, envSnapshot); +}); + +describe("builtin-ai-ask", () => { + it("throws when no `fetch` plugin is configured", async () => { + await expect(askFn("https://a.com", "what?", makeContext())).rejects.toThrow( + "No `fetch` plugin configured.", + ); + }); + + it("throws when `SIBYL_AI_PROVIDER` is missing or invalid", async () => { + process.env.SIBYL_AI_PROVIDER = "gemini"; + + await expect(askFn("https://a.com", "what?", okContext)).rejects.toThrow( + "Missing or invalid `SIBYL_AI_PROVIDER` environment variable.", + ); + }); + + it("throws when `SIBYL_MODEL_NAME` is missing", async () => { + delete process.env.SIBYL_MODEL_NAME; + + await expect(askFn("https://a.com", "what?", okContext)).rejects.toThrow( + "Missing `SIBYL_MODEL_NAME` environment variable.", + ); + }); + + it("throws when the provider API key is missing", async () => { + delete process.env.OPENAI_API_KEY; + + await expect(askFn("https://a.com", "what?", okContext)).rejects.toThrow( + "Missing `OPENAI_API_KEY` environment variable.", + ); + }); + + it("throws when the fetch service is unreachable", async () => { + const context = makeContext(() => Promise.reject(new Error("ECONNREFUSED"))); + + await expect(askFn("https://a.com", "what?", context)).rejects.toThrow( + /Failed to fetch `https:\/\/a\.com` using the configured fetch plugin `mock-fetch`/, + ); + expect(mockedGenerateText).not.toHaveBeenCalled(); + }); + + it("throws when the fetched content is empty", async () => { + const context = makeContext(async () => " "); + + await expect(askFn("https://a.com", "what?", context)).rejects.toThrow( + "No content fetched from: https://a.com", + ); + }); + + it("throws when the AI provider is unreachable", async () => { + mockedGenerateText.mockRejectedValue(new Error("fetch failed")); + + await expect(askFn("https://a.com", "what?", okContext)).rejects.toThrow( + /AI provider `openai` failed to answer/, + ); + }); + + it("sends the system prompt, content and question, with an abort signal", async () => { + const answer = await askFn("https://a.com", "what is it about?", okContext); + + expect(answer).toBe("the answer"); + expect(mockedGenerateText).toHaveBeenCalledWith( + expect.objectContaining({ + system: expect.stringContaining("Reply with just the answer"), + prompt: expect.stringContaining("page body content"), + abortSignal: expect.any(AbortSignal), + }), + ); + expect(mockedGenerateText.mock.calls[0]?.[0]?.prompt).toContain("what is it about?"); + }); +}); diff --git a/src/plugins/builtin-ai-ask/main.ts b/src/plugins/builtin-ai-ask/main.ts new file mode 100644 index 0000000..bb9e426 --- /dev/null +++ b/src/plugins/builtin-ai-ask/main.ts @@ -0,0 +1,118 @@ +/* + * Author: Jamius Siam + * Since: 18/06/2026 + */ +import type { AskPlugin, FetchPlugin, PluginContext } from "../../@types/plugin.ts"; +import type { LanguageModelV3 } from "@openrouter/ai-sdk-provider"; + +const REQUEST_TIMEOUT_MS = 30_000; + +const SYSTEM_PROMPT = + "You answer the user's question using only the provided web page content. " + + "Reply with just the answer, with no preamble and without " + + "restating the question. If the content does not contain the answer, say so plainly."; + +type AiProvider = "openai" | "anthropic" | "ollama" | "openrouter"; + +function isAiProvider(value: string): value is AiProvider { + return ( + value === "openai" || value === "anthropic" || value === "ollama" || value === "openrouter" + ); +} + +function requireEnv(name: string): string { + const value = process.env[name]; + if (!value) { + throw new Error(`Missing \`${name}\` environment variable.`); + } + return value; +} + +async function buildModel(provider: AiProvider, modelName: string): Promise { + switch (provider) { + case "openai": { + const apiKey = requireEnv("OPENAI_API_KEY"); + const { createOpenAI } = await import("@ai-sdk/openai"); + return createOpenAI({ apiKey })(modelName); + } + case "anthropic": { + const apiKey = requireEnv("ANTHROPIC_API_KEY"); + const { createAnthropic } = await import("@ai-sdk/anthropic"); + return createAnthropic({ apiKey })(modelName); + } + case "openrouter": { + const apiKey = requireEnv("OPENROUTER_API_KEY"); + const { createOpenRouter } = await import("@openrouter/ai-sdk-provider"); + return createOpenRouter({ apiKey })(modelName); + } + case "ollama": { + const baseURL = process.env.OLLAMA_BASE_URL ?? "http://localhost:11434/api"; + const { createOllama } = await import("ollama-ai-provider-v2"); + return createOllama({ baseURL })(modelName); + } + } +} + +async function askFn(src: string, query: string, context: PluginContext): Promise { + const fetchPlugin = context.configuredPlugins.fetch as FetchPlugin | undefined; + if (!fetchPlugin) { + throw new Error( + "No `fetch` plugin configured. The `ask` plugin reads the URL through the configured " + + "fetch plugin — set `plugins.fetch` in `~/.sibyl/config.json`.", + ); + } + + const provider = (process.env.SIBYL_AI_PROVIDER ?? "").trim().toLowerCase(); + if (!isAiProvider(provider)) { + throw new Error( + "Missing or invalid `SIBYL_AI_PROVIDER` environment variable. " + + "Expected one of: openai, anthropic, ollama, openrouter.", + ); + } + + const modelName = process.env.SIBYL_MODEL_NAME?.trim(); + if (!modelName) { + throw new Error("Missing `SIBYL_MODEL_NAME` environment variable."); + } + + const model = await buildModel(provider, modelName); + + let content: string; + try { + content = (await fetchPlugin.fn(src, context)).trim(); + } catch (err) { + throw new Error( + `Failed to fetch \`${src}\` using the configured fetch plugin \`${fetchPlugin.name}\`: ${err}`, + { cause: err }, + ); + } + + if (!content) { + throw new Error(`No content fetched from: ${src}`); + } + + const { generateText } = await import("ai"); + + try { + const { text } = await generateText({ + model, + system: SYSTEM_PROMPT, + prompt: `Web page content:\n\n${content}\n\nQuestion: ${query}`, + abortSignal: AbortSignal.timeout(REQUEST_TIMEOUT_MS), + }); + + return text.trim(); + } catch (err) { + throw new Error( + `AI provider \`${provider}\` failed to answer ` + + `(is it reachable and is \`${modelName}\` a valid model?): ${err}`, + { cause: err }, + ); + } +} + +export const SilbylPlugin: AskPlugin = { + name: "builtin-ai-ask", + type: "ask", + fn: askFn, +}; diff --git a/src/plugins/config.test.ts b/src/plugins/config.test.ts index 7d4228f..628d117 100644 --- a/src/plugins/config.test.ts +++ b/src/plugins/config.test.ts @@ -21,6 +21,7 @@ describe("getBuiltinPlugins", () => { ["builtin-alterlab-search", "search"], ["builtin-firecrawl-search", "search"], ["builtin-firecrawl-fetch", "fetch"], + ["builtin-ai-ask", "ask"], ]); for (const plugin of plugins) { diff --git a/src/plugins/config.ts b/src/plugins/config.ts index babd108..606e86d 100644 --- a/src/plugins/config.ts +++ b/src/plugins/config.ts @@ -14,6 +14,7 @@ import { SilbylPlugin as firecrawlSearch } from "./builtin-firecrawl-search/main import { SilbylPlugin as firecrawlFetch } from "./builtin-firecrawl-fetch/main.ts"; import { SilbylPlugin as parseHtmlToMd } from "./builtin-parse-htmlToMd/main.ts"; import { SilbylPlugin as searxngSearch } from "./builtin-searxng-search/main.ts"; +import { SilbylPlugin as aiAsk } from "./builtin-ai-ask/main.ts"; export function getBuiltinPlugins(): PluginTypeDeclaration[] { return [ @@ -28,5 +29,6 @@ export function getBuiltinPlugins(): PluginTypeDeclaration[] { alterlabSearch, firecrawlSearch, firecrawlFetch, + aiAsk, ]; } diff --git a/src/setup.test.ts b/src/setup.test.ts index e77557c..1bcc301 100644 --- a/src/setup.test.ts +++ b/src/setup.test.ts @@ -26,8 +26,14 @@ const DEFAULT_CONFIG: SibylConfig = { search: "builtin-searxng-search", fetch: "builtin-crawl4ai-fetch", parse: "builtin-parse-htmlToMd", + ask: "builtin-ai-ask", }, - variables: [], + variables: [ + { + name: "SIBYL_SHOW_SEARCH_DESCRIPTION", + value: "true", + }, + ], }; let home: string; diff --git a/src/setup.ts b/src/setup.ts index 942fc20..712fad0 100644 --- a/src/setup.ts +++ b/src/setup.ts @@ -57,8 +57,14 @@ export function writeDefaultSibylConfig(): void { search: "builtin-searxng-search", fetch: "builtin-crawl4ai-fetch", parse: "builtin-parse-htmlToMd", + ask: "builtin-ai-ask", }, - variables: [], + variables: [ + { + name: "SIBYL_SHOW_SEARCH_DESCRIPTION", + value: "true", + }, + ], }; fs.writeFileSync(configFile, JSON.stringify(sibylConfig, null, 2)); From ba62be306e7f60c9c0a6458053d63deb1aaf7823 Mon Sep 17 00:00:00 2001 From: Jamius Siam Date: Fri, 19 Jun 2026 01:31:49 +0600 Subject: [PATCH 02/11] Updated example query and clarified README commands descriptions --- README.md | 14 +++++++------- src/cli.ts | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index f0a00c7..5699b79 100644 --- a/README.md +++ b/README.md @@ -76,13 +76,13 @@ Get a working setup in a few steps: ## Commands -| Command | Description | -| -------------- | ----------------------------------------------------------------------------------------------------------------------------- | -| `search` | Searches the web
`sibyl search "react vite boostrap"` | -| `fetch` | Gets the content of a site in token-efficient markdown
`sibyl fetch https://vite.dev/guide` | -| `ask` | Asks a query using LLM from a site's content
`sibyl ask https://vite.dev/guide "how to start a react project with vite"` | -| `--help`, `-h` | Show help. | -| `--version` | Show version. | +| Command | Description | +| -------------------- | ----------------------------------------------------------------------------------------------------------------------------- | +| search | Searches the web
`sibyl search "react vite"` | +| fetch | Prints the content of a site in token-efficient markdown
`sibyl fetch https://vite.dev/guide` | +| ask | Asks a query using LLM from a site's content
`sibyl ask https://vite.dev/guide "how to start a react project with vite"` | +| `--help`, `-h` | Shows help. | +| `--version` | Shows version. | ## Configuration diff --git a/src/cli.ts b/src/cli.ts index 0c2b644..41b1cd2 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -216,7 +216,7 @@ Commands: version Show version Examples: - sibyl search "react vite bootstrap" + sibyl search "react vite" sibyl fetch https://vite.dev/guide sibyl ask https://vite.dev/guide "how do I start a react project with vite?" `); From 86c7cf649fe05d14d270e3d844967d0f507f5235 Mon Sep 17 00:00:00 2001 From: Jamius Siam Date: Fri, 19 Jun 2026 01:48:19 +0600 Subject: [PATCH 03/11] Added SIBYL_SHOW_SEARCH_DESCRIPTION variable in CONFIGURATION.md --- docs/CONFIGURATION.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index 3a4c579..3c0524a 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -11,7 +11,12 @@ Sibyl reads its config from `~/.sibyl/config.json`, created with sensible defaul "fetch": "builtin-crawl4ai-fetch", "parse": "builtin-parse-htmlToMd" }, - "variables": [] + "variables": [ + { + "name": "SIBYL_SHOW_SEARCH_DESCRIPTION", + "value": "true" + } + ] } ``` From 049185d3965d6f5332277815081363e5e964453b Mon Sep 17 00:00:00 2001 From: Jamius Siam Date: Fri, 19 Jun 2026 01:50:26 +0600 Subject: [PATCH 04/11] Fixed Ollama port info in docs --- docs/CONFIGURATION.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index 3c0524a..cdf803d 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -137,7 +137,7 @@ Reads a URL through the configured `fetch` plugin, then asks an LLM the question | `OPENAI_API_KEY` | Conditional | — | Required when `SIBYL_AI_PROVIDER=openai`. | | `ANTHROPIC_API_KEY` | Conditional | — | Required when `SIBYL_AI_PROVIDER=anthropic`. | | `OPENROUTER_API_KEY` | Conditional | — | Required when `SIBYL_AI_PROVIDER=openrouter`. | -| `OLLAMA_BASE_URL` | No | `http://localhost:11433/api` | Base URL of a running Ollama server; used only when `SIBYL_AI_PROVIDER=ollama` (no API key). | +| `OLLAMA_BASE_URL` | No | `http://localhost:11434/api` | Base URL of a running Ollama server; used only when `SIBYL_AI_PROVIDER=ollama` (no API key). | #### `builtin-parse-htmlToMd` — `parse` From 1cae901f2f42ab9aa8000bbe8440245a7e4af91d Mon Sep 17 00:00:00 2001 From: Jamius Siam Date: Fri, 19 Jun 2026 01:51:12 +0600 Subject: [PATCH 05/11] Updated README to fix formatting of Sibyl name --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5699b79..a937d0f 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ --- -**_Sibyl_** gives your AI Agent the web, without the bloat — extensible and lightweight by design 🕷️ +**Sibyl** gives your AI Agent the web, without the bloat - extensible and lightweight by design 🕷️ --- From 8a04cad61fa20df0a043f049ba319270d3546731 Mon Sep 17 00:00:00 2001 From: Jamius Siam Date: Fri, 19 Jun 2026 15:28:56 +0600 Subject: [PATCH 06/11] Added tests for ask command functionality in CLI --- src/cli.test.ts | 85 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 3 deletions(-) diff --git a/src/cli.test.ts b/src/cli.test.ts index 8c1da08..e89ef49 100644 --- a/src/cli.test.ts +++ b/src/cli.test.ts @@ -24,6 +24,7 @@ import { loadOrCreateConfigFile } from "./setup.ts"; import { loadPlugins } from "./plugin-loader.ts"; import { exit } from "./exit.ts"; import type { + AskPlugin, FetchPlugin, PluginContext, PluginTypeDeclaration, @@ -39,6 +40,7 @@ const contextMatcher = expect.objectContaining({ let searchFn: Mock; let fetchFn: Mock; +let askFn: Mock; let plugins: PluginTypeDeclaration[]; let config: SibylConfig; @@ -48,13 +50,15 @@ beforeEach(() => { searchFn = vi.fn(async () => "search result"); fetchFn = vi.fn(async () => "fetch result"); + askFn = vi.fn(async () => "ask result"); const searchPlugin: SearchPlugin = { name: "test-search", type: "search", fn: searchFn }; const fetchPlugin: FetchPlugin = { name: "test-fetch", type: "fetch", fn: fetchFn }; - plugins = [searchPlugin, fetchPlugin]; + const askPlugin: AskPlugin = { name: "test-ask", type: "ask", fn: askFn }; + plugins = [searchPlugin, fetchPlugin, askPlugin]; config = { - plugins: { search: "test-search", fetch: "test-fetch" }, + plugins: { search: "test-search", fetch: "test-fetch", ask: "test-ask" }, variables: [], }; @@ -123,6 +127,32 @@ describe("dispatch & argument validation", () => { expect(console.log).toHaveBeenCalledWith("fetch result"); }); + it.each([ + { argv: ["ask"], label: "no url" }, + { argv: ["ask", "https://vite.dev"], label: "url but no question" }, + { argv: ["ask", "https://vite.dev", " "], label: "whitespace-only question" }, + ])("errors when ask is missing url or question ($label)", async ({ argv }) => { + await expect(main(argv)).rejects.toThrow("process.exit"); + + expect(console.error).toHaveBeenCalledWith('Usage: sibyl ask ""'); + expect(exit).toHaveBeenCalledWith(1); + }); + + it("errors when ask url is invalid", async () => { + await expect(main(["ask", "not-a-url", "some question"])).rejects.toThrow("process.exit"); + + expect(console.error).toHaveBeenCalledWith("Invalid URL: not-a-url"); + expect(exit).toHaveBeenCalledWith(1); + expect(askFn).not.toHaveBeenCalled(); + }); + + it("joins and trims the question before passing it to the ask plugin", async () => { + await main(["ask", "https://vite.dev", "how", "to", "start"]); + + expect(askFn).toHaveBeenCalledWith("https://vite.dev", "how to start", contextMatcher); + expect(console.log).toHaveBeenCalledWith("ask result"); + }); + it("errors and prints help on an unknown command", async () => { await expect(main(["bogus"])).rejects.toThrow("process.exit"); @@ -173,9 +203,14 @@ describe("handleSearch", () => { expect(context).not.toBeNull(); expect(context.allPlugins).toBe(plugins); - expect(context.configuredPlugins).toEqual({ search: plugins[0], fetch: plugins[1] }); + expect(context.configuredPlugins).toEqual({ + search: plugins[0], + fetch: plugins[1], + ask: plugins[2], + }); expect(context.getPlugin("test-search")).toBe(plugins[0]); expect(context.getPlugin("test-fetch")).toBe(plugins[1]); + expect(context.getPlugin("test-ask")).toBe(plugins[2]); expect(context.getPlugin("nope")).toBeNull(); }); @@ -236,3 +271,47 @@ describe("handleFetch", () => { expect(exit).toHaveBeenCalledWith(1); }); }); + +describe("handleAsk", () => { + it("errors when no ask plugin is configured", async () => { + vi.mocked(loadOrCreateConfigFile).mockReturnValue({ plugins: {}, variables: [] }); + + await expect(main(["ask", "https://vite.dev", "q"])).rejects.toThrow("process.exit"); + + expect(console.error).toHaveBeenCalledWith( + "No ask plugin configured in `~/.sibyl/config.json`", + ); + expect(exit).toHaveBeenCalledWith(1); + }); + + it("errors when the configured ask plugin is not loaded", async () => { + vi.mocked(loadOrCreateConfigFile).mockReturnValue({ + plugins: { ask: "missing-plugin" }, + variables: [], + }); + + await expect(main(["ask", "https://vite.dev", "q"])).rejects.toThrow("process.exit"); + + expect(console.error).toHaveBeenCalledWith("Configured ask plugin `missing-plugin` not found"); + expect(exit).toHaveBeenCalledWith(1); + }); + + it("logs the plugin result on success", async () => { + await main(["ask", "https://vite.dev", "q"]); + + expect(askFn).toHaveBeenCalledWith("https://vite.dev", "q", contextMatcher); + expect(console.log).toHaveBeenCalledWith("ask result"); + expect(exit).not.toHaveBeenCalled(); + }); + + it("errors when the plugin rejects", async () => { + askFn.mockRejectedValue(new Error("boom")); + + await expect(main(["ask", "https://vite.dev", "q"])).rejects.toThrow("process.exit"); + + expect(console.error).toHaveBeenCalledWith( + expect.stringContaining("Error asking using test-ask:"), + ); + expect(exit).toHaveBeenCalledWith(1); + }); +}); From 681b7292378c44305160949c014c8d3355aeb012 Mon Sep 17 00:00:00 2001 From: Jamius Siam Date: Fri, 19 Jun 2026 15:29:06 +0600 Subject: [PATCH 07/11] Lowered Codecov patch coverage target to 85% --- codecov.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codecov.yml b/codecov.yml index 941fff6..c1e1870 100644 --- a/codecov.yml +++ b/codecov.yml @@ -6,7 +6,7 @@ coverage: threshold: 2% patch: default: - target: 90% + target: 85% threshold: 2% comment: From e5aaa577944b5c66e88043e5e38bfb0fee2072bb Mon Sep 17 00:00:00 2001 From: Jamius Siam Date: Fri, 19 Jun 2026 15:33:03 +0600 Subject: [PATCH 08/11] Fixed review comments --- docs/CONFIGURATION.md | 3 ++- src/plugins/builtin-ai-ask/main.test.ts | 2 +- src/plugins/builtin-ai-ask/main.ts | 3 +-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index cdf803d..c4d8c33 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -9,7 +9,8 @@ Sibyl reads its config from `~/.sibyl/config.json`, created with sensible defaul "plugins": { "search": "builtin-searxng-search", "fetch": "builtin-crawl4ai-fetch", - "parse": "builtin-parse-htmlToMd" + "parse": "builtin-parse-htmlToMd", + "ask": "builtin-ai-ask" }, "variables": [ { diff --git a/src/plugins/builtin-ai-ask/main.test.ts b/src/plugins/builtin-ai-ask/main.test.ts index 6eceb5d..8e169f2 100644 --- a/src/plugins/builtin-ai-ask/main.test.ts +++ b/src/plugins/builtin-ai-ask/main.test.ts @@ -16,7 +16,7 @@ const askFn = SilbylPlugin.fn; const mockedGenerateText = vi.mocked(generateText); function resolveAnswer(text: string): void { - // @ts-ignore Complicated type, ignoring for now + // @ts-expect-error Complicated type in mocked return, ignoring for now. mockedGenerateText.mockResolvedValue({ text }); } diff --git a/src/plugins/builtin-ai-ask/main.ts b/src/plugins/builtin-ai-ask/main.ts index bb9e426..9864dca 100644 --- a/src/plugins/builtin-ai-ask/main.ts +++ b/src/plugins/builtin-ai-ask/main.ts @@ -3,7 +3,6 @@ * Since: 18/06/2026 */ import type { AskPlugin, FetchPlugin, PluginContext } from "../../@types/plugin.ts"; -import type { LanguageModelV3 } from "@openrouter/ai-sdk-provider"; const REQUEST_TIMEOUT_MS = 30_000; @@ -28,7 +27,7 @@ function requireEnv(name: string): string { return value; } -async function buildModel(provider: AiProvider, modelName: string): Promise { +async function buildModel(provider: AiProvider, modelName: string) { switch (provider) { case "openai": { const apiKey = requireEnv("OPENAI_API_KEY"); From b14e04ee61540b92bece7e9f52fae83be65e3ddf Mon Sep 17 00:00:00 2001 From: Jamius Siam Date: Fri, 19 Jun 2026 21:45:58 +0600 Subject: [PATCH 09/11] Updated plugin documentation formatting and added missing plugin environment variable details --- README.md | 4 +- docs/CONFIGURATION.md | 140 +++++++++++++++++++++++---------------- docs/CREATING-PLUGINS.md | 2 +- 3 files changed, 85 insertions(+), 61 deletions(-) diff --git a/README.md b/README.md index a937d0f..ebee671 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,11 @@ [![sibyl License Page](https://img.shields.io/badge/license-Apache_2.0-brightgreen)](https://raw.githubusercontent.com/postapsis/sibyl/refs/heads/main/LICENSE) [![sibyl CI Status](https://github.com/postapsis/sibyl/actions/workflows/ci.yaml/badge.svg)](https://github.com/postapsis/sibyl/actions/workflows/ci.yaml) [![codecov](https://codecov.io/gh/postapsis/sibyl/branch/main/graph/badge.svg?token=NOTP4DPWO4)](https://codecov.io/gh/postapsis/sibyl) -
--- -**Sibyl** gives your AI Agent the web, without the bloat - extensible and lightweight by design 🕷️ +Local-first web search and exploration for your AI agents, without the bloat.\ +Extensible and lightweight by design 🕷️ --- diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index c4d8c33..ffe50ed 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -1,8 +1,14 @@ -## Configuration +--- +title: "Configuration" +order: 1 +slug: "configuration" +--- -### Configuration file +# Configuration -Sibyl reads its config from `~/.sibyl/config.json`, created with sensible defaults on first run. It has two sections: +## Configuration file + +Sibyl reads its configuration from `~/.sibyl/config.json`, created with sensible defaults on first run. It has two sections: ```json { @@ -21,44 +27,62 @@ Sibyl reads its config from `~/.sibyl/config.json`, created with sensible defaul } ``` -#### `plugins` section +### The `plugins` section Maps each plugin type (`search` / `fetch` / `ask` / `parse`) to the **name** of the plugin to use for it. Exactly one -plugin per type. The value must match a plugin's `name` (a builtin like `builtin-exa-search`, or one of your custom-written plugins). - -#### `variables` section +plugin per type. The value must match a plugin's `name` (a built-in like `builtin-exa-search`, or one of your custom-written plugins). + +
+The built-in plugins are: + +1. SearXNG Search - `builtin-searxng-search` +2. Crawl4AI Fetch - `builtin-crawl4ai-fetch` +3. Exa Search - `builtin-exa-search` +4. Exa Fetch - `builtin-exa-fetch` +5. Firecrawl Search - `builtin-firecrawl-search` +6. Firecrawl Fetch - `builtin-firecrawl-fetch` +7. AlterLab Search - `builtin-alterlab-search` +8. AlterLab Fetch - `builtin-alterlab-fetch` +9. Bright Data Search - `builtin-brightdata-search` +10. Bright Data Fetch - `builtin-brightdata-fetch` +11. AI Ask (Supports OpenAI, Anthropic, Ollama, OpenRouter) - `builtin-ai-ask` +12. HTML to Markdown Parse - `builtin-parse-htmlToMd` + +### The `variables` section A list of `{ name, value }` pairs injected into the process environment at startup. Use this to provide secrets and settings (e.g., API keys) that plugins read via `process.env`. -Precedence: **config wins over the environment.** A variable defined here overrides any existing environment variable of +Precedence: **Variable in the configuration file wins over the environment.** A variable defined here overrides any existing environment variable of the same name; anything not listed here falls back to the real environment. For example, a plugin reading -`process.env.EXA_API_KEY` gets the config value if present, otherwise whatever was exported in your shell. +`process.env.EXA_API_KEY` gets the configuration value if present, otherwise whatever was exported in your shell. -### Plugin environment variables +## Plugin environment variables -Each builtin plugin reads the variables below (set them via `variables` or the real environment, per the precedence rule -above). A **required** variable causes the plugin to error if it is unset. +Each built-in plugin reads the variables below (set them via `variables` or the real environment, per the precedence rule +above). A **required** variable causes the plugin to error if it is not set. -All `search` plugins also honor the following environment variables +All `search` plugins also honor the following environment variables: -1. **`SIBYL_SEARCH_RESULTS_LIMIT`** (default `10`): Sibyl passes it to the search - provider's API when the provider supports a result-count parameter, and always slices the returned results down to this +1. **`SIBYL_SEARCH_RESULTS_LIMIT`** (default `10`): Sibyl passes it to the search provider if it supports a result-count parameter, and always slices the returned results down to this limit. 2. **`SIBYL_SHOW_SEARCH_DESCRIPTION`** (default `true`): When `"true"`, includes result snippet/description in the output. -#### `builtin-searxng-search` — `search` +
+Here is a list of all the environment variables for the built-in plugins: + +### SearXNG Search -| Variable | Required | Default | Description | -| ------------------------------- | -------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------- | -| `SIBYL_SEARXNG_URL` | No | `http://localhost:8080` | Base URL of a running SearXNG instance. Sibyl uses `/search` endpoint with `format=json`. | -| `SIBYL_SEARXNG_ENGINES` | No | _(none)_ | Comma-separated SearXNG engines to query (e.g. `google`); omitted when unset. | -| `SIBYL_SHOW_SEARCH_DESCRIPTION` | No | `true` | When `"true"`, includes result content in the output. | -| `SIBYL_SEARCH_RESULTS_LIMIT` | No | `10` | Maximum number of search results to return; passed to the provider when supported and always applied by slicing. | +| Variable | Required | Default | Description | +| ------------------------------- | -------- | ----------------------- | ------------------------------------------------------------------------------------------------------- | +| `SIBYL_SEARXNG_URL` | No | `http://localhost:8080` | Base URL of a running SearXNG instance. Sibyl uses `/search` endpoint with `format=json`. | +| `SIBYL_SEARXNG_ENGINES` | No | _(none)_ | Comma-separated SearXNG engines to query (e.g. `google`); omitted when unset. | +| `SIBYL_SHOW_SEARCH_DESCRIPTION` | No | `true` | When `"true"`, includes result content in the output. | +| `SIBYL_SEARCH_RESULTS_LIMIT` | No | `10` | Maximum number of search results to return; passed to the when supported and always applied by slicing. | Requires a SearXNG instance with the **JSON output format enabled**. See more at [https://github.com/searxng/searxng/discussions/3542](https://github.com/searxng/searxng/discussions/3542) -#### `builtin-crawl4ai-fetch` — `fetch` +### Crawl4AI Fetch | Variable | Required | Default | Description | | -------------------- | -------- | ------------------------ | ----------------------------------------------------------------------------------------- | @@ -66,80 +90,80 @@ Requires a SearXNG instance with the **JSON output format enabled**. See more at Requires a Crawl4AI server, e.g., via Docker. See more at [https://hub.docker.com/r/unclecode/crawl4ai](https://hub.docker.com/r/unclecode/crawl4ai) -#### `builtin-exa-search` — `search` +### Exa Search -| Variable | Required | Default | Description | -| ------------------------------- | -------- | ------- | ---------------------------------------------------------------------------------------------------------------- | -| `EXA_API_KEY` | Yes | — | Exa API key. | -| `SIBYL_SHOW_SEARCH_DESCRIPTION` | No | `true` | When `"true"`, includes result highlights in the output. | -| `SIBYL_SEARCH_RESULTS_LIMIT` | No | `10` | Maximum number of search results to return; passed to the provider when supported and always applied by slicing. | +| Variable | Required | Default | Description | +| ------------------------------- | -------- | ------- | ------------------------------------------------------------------------------------------------------- | +| `EXA_API_KEY` | Yes | — | Exa API key. | +| `SIBYL_SHOW_SEARCH_DESCRIPTION` | No | `true` | When `"true"`, includes result highlights in the output. | +| `SIBYL_SEARCH_RESULTS_LIMIT` | No | `10` | Maximum number of search results to return; passed to the when supported and always applied by slicing. | -#### `builtin-exa-fetch` — `fetch` +### Exa Fetch | Variable | Required | Default | Description | | ------------- | -------- | ------- | ------------ | | `EXA_API_KEY` | Yes | — | Exa API key. | -#### `builtin-firecrawl-search` — `search` +### Firecrawl Search -| Variable | Required | Default | Description | -| ------------------------------- | -------- | ------- | ---------------------------------------------------------------------------------------------------------------- | -| `FIRECRAWL_API_KEY` | Yes | — | Firecrawl API key (includes the `fc-` prefix). | -| `SIBYL_SHOW_SEARCH_DESCRIPTION` | No | `true` | When `"true"`, includes result descriptions in the output. | -| `SIBYL_SEARCH_RESULTS_LIMIT` | No | `10` | Maximum number of search results to return; passed to the provider when supported and always applied by slicing. | +| Variable | Required | Default | Description | +| ------------------------------- | -------- | ------- | ------------------------------------------------------------------------------------------------------- | +| `FIRECRAWL_API_KEY` | Yes | — | Firecrawl API key (includes the `fc-` prefix). | +| `SIBYL_SHOW_SEARCH_DESCRIPTION` | No | `true` | When `"true"`, includes result descriptions in the output. | +| `SIBYL_SEARCH_RESULTS_LIMIT` | No | `10` | Maximum number of search results to return; passed to the when supported and always applied by slicing. | -#### `builtin-firecrawl-fetch` — `fetch` +### Firecrawl Fetch | Variable | Required | Default | Description | | -------------------------------- | -------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `FIRECRAWL_API_KEY` | Yes | — | Firecrawl API key (includes the `fc-` prefix). | | `SIBYL_FIRECRAWL_FETCH_USE_HTML` | No | `false` | When `"true"`, fetches the raw HTML and runs it through the configured `parse` plugin; otherwise returns the markdown from Firecrawl with extra blank lines collapsed. | -#### `builtin-alterlab-search` — `search` +### AlterLab Search -| Variable | Required | Default | Description | -| ------------------------------- | -------- | ------- | ---------------------------------------------------------------------------------------------------------------- | -| `ALTERLAB_API_KEY` | Yes | — | AlterLab API key. | -| `SIBYL_SHOW_SEARCH_DESCRIPTION` | No | `true` | When `"true"`, includes result snippets in the output. | -| `SIBYL_SEARCH_RESULTS_LIMIT` | No | `10` | Maximum number of search results to return; passed to the provider when supported and always applied by slicing. | +| Variable | Required | Default | Description | +| ------------------------------- | -------- | ------- | ------------------------------------------------------------------------------------------------------- | +| `ALTERLAB_API_KEY` | Yes | — | AlterLab API key. | +| `SIBYL_SHOW_SEARCH_DESCRIPTION` | No | `true` | When `"true"`, includes result snippets in the output. | +| `SIBYL_SEARCH_RESULTS_LIMIT` | No | `10` | Maximum number of search results to return; passed to the when supported and always applied by slicing. | -#### `builtin-alterlab-fetch` — `fetch` +### AlterLab Fetch | Variable | Required | Default | Description | | ------------------ | -------- | ------- | ----------------- | | `ALTERLAB_API_KEY` | Yes | — | AlterLab API key. | -#### `builtin-brightdata-search` — `search` +### Bright Data Search -| Variable | Required | Default | Description | -| ------------------------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------------------- | -| `BRIGHTDATA_API_KEY` | Yes | — | Bright Data API key. | -| `BRIGHTDATA_SERP_API_ZONE` | Yes | — | Bright Data SERP API zone. | -| `SIBYL_SHOW_SEARCH_DESCRIPTION` | No | `true` | When `"true"`, includes result descriptions in the output. | -| `BRIGHTDATA_SERP_API_LANGUAGE` | No | `en` | Search language (Google `hl`). | -| `BRIGHTDATA_SERP_API_COUNTRY` | No | _(none)_ | Search country (Google `gl`); omitted when unset. | -| `SIBYL_SEARCH_RESULTS_LIMIT` | No | `10` | Maximum number of search results to return; passed to the provider when supported and always applied by slicing. | +| Variable | Required | Default | Description | +| ------------------------------- | -------- | -------- | ------------------------------------------------------------------------------------------------------- | +| `BRIGHTDATA_API_KEY` | Yes | — | Bright Data API key. | +| `BRIGHTDATA_SERP_API_ZONE` | Yes | — | Bright Data SERP API zone. | +| `SIBYL_SHOW_SEARCH_DESCRIPTION` | No | `true` | When `"true"`, includes result descriptions in the output. | +| `BRIGHTDATA_SERP_API_LANGUAGE` | No | `en` | Search language (Google `hl`). | +| `BRIGHTDATA_SERP_API_COUNTRY` | No | _(none)_ | Search country (Google `gl`); omitted when unset. | +| `SIBYL_SEARCH_RESULTS_LIMIT` | No | `10` | Maximum number of search results to return; passed to the when supported and always applied by slicing. | -#### `builtin-brightdata-fetch` — `fetch` +### Bright Data Fetch | Variable | Required | Default | Description | | ---------------------------------- | -------- | ------- | ---------------------------------- | | `BRIGHTDATA_API_KEY` | Yes | — | Bright Data API key. | | `BRIGHTDATA_WEB_UNLOCKER_API_ZONE` | Yes | — | Bright Data Web Unlocker API zone. | -#### `builtin-ai-ask` — `ask` +### AI Ask Reads a URL through the configured `fetch` plugin, then asks an LLM the question against that content. A working `fetch` plugin must also be configured (`plugins.fetch`). | Variable | Required | Default | Description | | -------------------- | ----------- | ---------------------------- | -------------------------------------------------------------------------------------------- | -| `SIBYL_AI_PROVIDER` | Yes | — | LLM provider: one of `openai`, `anthropic`, `ollama`, `openrouter`. | -| `SIBYL_MODEL_NAME` | Yes | — | Model id passed to the provider (e.g. `gpt-6`, `claude-sonnet-4-6`, `llama3.1`). | +| `SIBYL_AI_PROVIDER` | Yes | — | LLM: one of `openai`, `anthropic`, `ollama`, `openrouter`. | +| `SIBYL_MODEL_NAME` | Yes | — | Model id passed to the (e.g. `gpt-5.4-mini`, `claude-sonnet-4-6`, `llama3.1`). | | `OPENAI_API_KEY` | Conditional | — | Required when `SIBYL_AI_PROVIDER=openai`. | | `ANTHROPIC_API_KEY` | Conditional | — | Required when `SIBYL_AI_PROVIDER=anthropic`. | | `OPENROUTER_API_KEY` | Conditional | — | Required when `SIBYL_AI_PROVIDER=openrouter`. | | `OLLAMA_BASE_URL` | No | `http://localhost:11434/api` | Base URL of a running Ollama server; used only when `SIBYL_AI_PROVIDER=ollama` (no API key). | -#### `builtin-parse-htmlToMd` — `parse` +### HTML to Markdown Parse No environment variables. diff --git a/docs/CREATING-PLUGINS.md b/docs/CREATING-PLUGINS.md index 62bce2a..3475e25 100644 --- a/docs/CREATING-PLUGINS.md +++ b/docs/CREATING-PLUGINS.md @@ -37,7 +37,7 @@ plugin system: | Field | Description | | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | `configuredPlugins` | The plugin selected for each type in your config, keyed by type — e.g. `context.configuredPlugins.parse`. Only configured types are present. | -| `allPlugins` | An array of every loaded plugin (builtins + your custom ones). | +| `allPlugins` | An array of every loaded plugin (built-ins + your custom ones). | | `getPlugin(name)` | Returns the loaded plugin whose `name` matches, or `null` if none does. | Each entry is a `{ name, type, fn }` object, so one plugin can invoke another — e.g. a `fetch` plugin can run the From 61b12b26005950e08bd9481bce93bf079e47af3f Mon Sep 17 00:00:00 2001 From: Jamius Siam Date: Fri, 19 Jun 2026 21:47:20 +0600 Subject: [PATCH 10/11] Removed CONFIGURATION.md frontmatter --- docs/CONFIGURATION.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index ffe50ed..efa8e09 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -1,9 +1,3 @@ ---- -title: "Configuration" -order: 1 -slug: "configuration" ---- - # Configuration ## Configuration file From 69ed7bfcd47fa04f33df01d6b241ea7699ea43ae Mon Sep 17 00:00:00 2001 From: Jamius Siam Date: Sat, 20 Jun 2026 18:54:07 +0600 Subject: [PATCH 11/11] Optimized the banner image --- media-kit/banner.png | Bin 104056 -> 38140 bytes 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 media-kit/banner.png diff --git a/media-kit/banner.png b/media-kit/banner.png old mode 100755 new mode 100644 index aee686768a02d3fafb410a567054bccd9b5991a0..a3a3e118ffd1ce937a43c3e4d5dd63f624b6fabc GIT binary patch literal 38140 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%0AEuBFdn}%nws;EPF}Ug~UjD^%ihxv$*CUFZIfrv9 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 z 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