From 8a63d259ae31662368e09495cdcaeb5904a25571 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste THERY Date: Mon, 29 Jun 2026 03:37:52 +0700 Subject: [PATCH] feat: improve ingestion reporting and agent setup --- AGENTS.md | 11 ++ README.md | 121 +++++++++++++-- SECURITY-HARDENING.md | 44 +++++- docs/ux-dx-audit.md | 11 +- package.json | 2 +- packages/mimir-tts/package.json | 2 +- packages/mimir/README.md | 14 +- packages/mimir/dist/cli.js | 52 ++++++- packages/mimir/dist/cli.js.map | 2 +- packages/mimir/dist/config.d.ts.map | 2 +- packages/mimir/dist/config.js | 9 ++ packages/mimir/dist/config.js.map | 2 +- packages/mimir/dist/defaults.d.ts.map | 2 +- packages/mimir/dist/defaults.js | 3 + packages/mimir/dist/defaults.js.map | 2 +- packages/mimir/dist/doctor.d.ts.map | 2 +- packages/mimir/dist/doctor.js | 19 ++- packages/mimir/dist/doctor.js.map | 2 +- packages/mimir/dist/files.d.ts | 7 +- packages/mimir/dist/files.d.ts.map | 2 +- packages/mimir/dist/files.js | 121 ++++++++++++++- packages/mimir/dist/files.js.map | 2 +- packages/mimir/dist/ingest.d.ts.map | 2 +- packages/mimir/dist/ingest.js | 95 +++++++++--- packages/mimir/dist/ingest.js.map | 2 +- packages/mimir/dist/mcp.d.ts | 1 + packages/mimir/dist/mcp.d.ts.map | 2 +- packages/mimir/dist/mcp.js | 8 +- packages/mimir/dist/mcp.js.map | 2 +- packages/mimir/dist/parsing.d.ts.map | 2 +- packages/mimir/dist/parsing.js | 26 +++- packages/mimir/dist/parsing.js.map | 2 +- packages/mimir/dist/setup.js | 3 +- packages/mimir/dist/setup.js.map | 2 +- packages/mimir/dist/skill.d.ts | 3 + packages/mimir/dist/skill.d.ts.map | 2 +- packages/mimir/dist/skill.js | 70 ++++++++- packages/mimir/dist/skill.js.map | 2 +- packages/mimir/dist/types.d.ts | 32 ++++ packages/mimir/dist/types.d.ts.map | 2 +- packages/mimir/dist/version.d.ts | 2 +- packages/mimir/dist/version.js | 2 +- .../examples/sovereign-rag-demo/README.md | 13 ++ .../sovereign-rag-demo/raw/facility-scan.heic | 3 + packages/mimir/package.json | 2 +- .../mimir/skills/mimir-audio-summary/SKILL.md | 3 +- .../skills/mimir-markdown-report/SKILL.md | 110 ++++++++++++++ packages/mimir/skills/mimir/SKILL.md | 38 ++++- packages/mimir/src/cli.ts | 62 +++++++- packages/mimir/src/config.ts | 9 ++ packages/mimir/src/defaults.ts | 3 + packages/mimir/src/doctor.ts | 30 +++- packages/mimir/src/files.test.ts | 38 ++++- packages/mimir/src/files.ts | 141 +++++++++++++++++- packages/mimir/src/ingest.test.ts | 43 ++++++ packages/mimir/src/ingest.ts | 109 +++++++++++--- packages/mimir/src/mcp.test.ts | 20 +++ packages/mimir/src/mcp.ts | 12 +- packages/mimir/src/parsing.test.ts | 16 ++ packages/mimir/src/parsing.ts | 27 +++- packages/mimir/src/setup.ts | 3 +- packages/mimir/src/skill.test.ts | 23 +++ packages/mimir/src/skill.ts | 81 ++++++++++ packages/mimir/src/test-support/config.ts | 3 + packages/mimir/src/types.ts | 29 ++++ packages/mimir/src/version.ts | 2 +- 66 files changed, 1391 insertions(+), 125 deletions(-) create mode 100644 packages/mimir/examples/sovereign-rag-demo/raw/facility-scan.heic create mode 100644 packages/mimir/skills/mimir-markdown-report/SKILL.md create mode 100644 packages/mimir/src/ingest.test.ts create mode 100644 packages/mimir/src/mcp.test.ts diff --git a/AGENTS.md b/AGENTS.md index 9c56bab..693e3dc 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -32,6 +32,12 @@ Transformers.js WAV path for offline/confidential rendering, use the Edge MP3 path for global Voice Forge quality only when online TTS is explicitly acceptable, and keep generated audio under ignored local Mimir state. +- Keep report generation separate from core retrieval. The `mimir-markdown-report` skill writes cited + Markdown reports under ignored `.mimir/reports/` by default and must distinguish evidence, + inference, uncertainty, missing documents, and professional-review items. +- Ingestion must be explicit about files it did not index. Preserve `kb audit --unsupported`, + unsupported-extension summaries, secret-like file skipping, max file size limits, and checksum-based + stale detection. - Keep the repository as a simple pnpm workspace monorepo. Add Turbo only if multiple packages or apps start needing task caching/orchestration beyond `pnpm --filter`. - Keep Mimir core free of Ollama. `embeddingProvider: "local-hash"` supports ingestion, search, MCP, @@ -95,6 +101,11 @@ General principles (KISS, DRY, YAGNI, SOLID) as applied in this codebase. Match privacy and confidentiality hardening layer. - `packages/mimir/skills/mimir/SKILL.md` is the bundled portable agent skill. - `packages/mimir/skills/mimir-audio-summary/SKILL.md` is the optional bundled audio-summary skill. +- `packages/mimir/skills/mimir-markdown-report/SKILL.md` is the optional bundled Markdown-report + skill. +- `kb setup` must keep generating agent-specific MCP helpers for easy local use: + `.mimir/claude-mcp-server.json` for `claude mcp add-json` and `.mimir/codex-mcp.toml` for Codex + config layers. - `packages/mimir/examples/sovereign-rag-demo` is the tracked synthetic test workspace for manual and package validation. - `.kb/`, `.mimir/`, and project `private/` folders are local user data or generated agent diff --git a/README.md b/README.md index 6eb406c..1036403 100644 --- a/README.md +++ b/README.md @@ -64,8 +64,7 @@ Early public package. APIs may evolve before `1.0.0`. - Give Claude, Codex, Cursor, internal assistants, or other MCP-compatible tools the same private retrieval layer. - Retrieve grounded local evidence through CLI, library calls, MCP tools, or bundled agent skills. -- Optionally create listenable MP3 or WAV summaries with `kb audio`, `@jcode.labs/mimir-tts`, and - the bundled `mimir-audio-summary` skill. +- Optionally create listenable MP3/WAV summaries or cited Markdown reports with bundled skills. Mimir is not a hosted SaaS, not a remote vector database, and not a certified high-assurance system. For regulated or state-grade environments, pair it with encrypted disks, controlled machines, @@ -88,6 +87,7 @@ context. | Prepare meetings or decisions | "Give me a one-page briefing.", "What is missing before deciding?", "List action items and evidence." | | Ask questions over offline documents | "Which files mention local-only operation?", "What evidence supports this claim?" | | Generate audio briefings | "Create a listenable high-quality or offline summary of the current dossier." | +| Generate Markdown reports | "Write a cited local report with findings, risks, next actions, and sources." | ## Requirements @@ -103,6 +103,8 @@ context. external `edge-tts` CLI and render with `--engine edge`. For confidential or air-gapped content, use the Transformers.js WAV path with `--engine transformers --offline`; it does not require Python, ffmpeg, Piper, XTTS, or a local server. +- Optional Markdown reports use the bundled `mimir-markdown-report` skill and should stay under + ignored `.mimir/reports/` unless explicitly sanitized for sharing. ## Install @@ -145,12 +147,15 @@ private/ # raw documents to ingest .kb/sources.txt # optional extra source paths .mimir/skills/mimir/SKILL.md # portable agent skill .mimir/skills/mimir-audio-summary/SKILL.md -.mimir/mcp.json # MCP server config snippet +.mimir/skills/mimir-markdown-report/SKILL.md +.mimir/mcp.json # generic MCP server config snippet +.mimir/claude-mcp-server.json # Claude Code add-json payload +.mimir/codex-mcp.toml # Codex config.toml snippet .gitignore # ignores private/**, .kb/, and .mimir/ ``` -It detects the repository package manager and writes `.mimir/mcp.json` with the right command, such -as `pnpm exec kb serve-mcp`, `npx kb serve-mcp`, `yarn exec kb serve-mcp`, or `bunx kb serve-mcp`. +It detects the repository package manager and writes the MCP helper files with the right command: +`pnpm exec kb serve-mcp`, `npx kb serve-mcp`, `yarn exec kb serve-mcp`, or `bunx kb serve-mcp`. Check readiness at any time: @@ -192,7 +197,15 @@ pnpm exec kb ingest pnpm exec kb doctor ``` -When the index is ready, `kb doctor` prints `ready=true`. +When the index is ready, `kb doctor` prints `ready=true`. `kb ingest` and `kb audit` also report +files that were discovered but not indexed because the type is unsupported, the file is too large, +or the file name looks like a secret/private key. + +List skipped paths explicitly: + +```bash +pnpm exec kb audit --unsupported +``` Retrieve exact passages: @@ -286,13 +299,18 @@ This creates: ```plain text .mimir/skills/mimir/SKILL.md .mimir/skills/mimir-audio-summary/SKILL.md +.mimir/skills/mimir-markdown-report/SKILL.md .mimir/mcp.json +.mimir/claude-mcp-server.json +.mimir/codex-mcp.toml .mimir/README.md ``` Agents that support skill folders can load `.mimir/skills/mimir/` for deep local RAG usage. Load -`.mimir/skills/mimir-audio-summary/` only when an optional spoken summary is needed. Other agents can -read the generated `.mimir/README.md` and use the MCP config snippet. +`.mimir/skills/mimir-audio-summary/` only when an optional spoken summary is needed. Load +`.mimir/skills/mimir-markdown-report/` when the user asks for a cited Markdown report, dossier, +audit memo, or planning note. Other agents can read the generated `.mimir/README.md` and use the MCP +config snippet. Start the MCP server from the repository root: @@ -312,6 +330,55 @@ This MCP layer is the recommended way to let any compatible LLM or agent query t knowledge base. The LLM does not need to know about LanceDB or the raw file layout; it asks Mimir for ranked passages or cited context and uses the returned citations. +### Claude Code + +From the target repository root: + +```bash +pnpm exec kb setup +claude mcp add-json --scope local mimir "$(cat .mimir/claude-mcp-server.json)" +``` + +Claude Code provides the active project path to MCP servers through `CLAUDE_PROJECT_DIR`; Mimir uses +that value when serving MCP, so the same installed npm package can work inside each repository where +`kb setup` was run. Keep the MCP scope local unless you intentionally want to share the server +config. + +### Codex + +From the target repository root: + +```bash +pnpm exec kb setup +cat .mimir/codex-mcp.toml +``` + +Copy the printed TOML into `~/.codex/config.toml` or another trusted Codex config layer. The snippet +contains the repository `cwd`, so Codex can launch the Mimir MCP server from the right project. + +For other MCP clients that cannot set `cwd`, set `MIMIR_PROJECT_ROOT=/absolute/path/to/repository` +when launching `kb serve-mcp`. + +### Agent Demo + +From a repository that already ran `kb setup` and has Mimir wired into the current agent, ask: + +```plain text +Use Mimir to audit the local evidence. First run mimir_status and mimir_audit. Then search for +"offline retrieval approval" and produce a cited Markdown report. Do not rely on memory if Mimir +does not contain enough evidence. +``` + +Agents that support skill folders should also load: + +```plain text +.mimir/skills/mimir/ +.mimir/skills/mimir-markdown-report/ +``` + +The Markdown report skill writes reports under `.mimir/reports/` by default, which stays ignored by +Git. + Print the bundled skill path from the installed package: ```bash @@ -419,14 +486,20 @@ Mimir supports common text, document, data, config, log, and source-code files o - YAML: `.yaml`, `.yml` - CSV/TSV: `.csv`, `.tsv` - HTML: `.html`, `.htm` +- EPUB: `.epub` - PDF: `.pdf` - Office/OpenDocument: `.docx`, `.pptx`, `.xlsx`, `.odt`, `.ods`, `.odp` - Rich text: `.rtf` +- Notebook: `.ipynb` +- Subtitles/calendars/mail: `.vtt`, `.srt`, `.ics`, `.eml` - Line data and logs: `.jsonl`, `.ndjson`, `.log` -- XML feeds and documents: `.xml`, `.rss`, `.atom` +- XML feeds and documents: `.xml`, `.rss`, `.atom`, `.svg` - Config and data files: `.toml`, `.ini`, `.conf`, `.cfg`, `.properties`, `.sql` -- Source code: `.ts`, `.tsx`, `.js`, `.jsx`, `.py`, `.go`, `.rs`, `.java`, `.rb`, `.php`, `.cs`, - `.c`, `.cpp`, `.h`, `.css` +- Source code: `.ts`, `.tsx`, `.mts`, `.cts`, `.js`, `.jsx`, `.mjs`, `.cjs`, `.py`, `.go`, `.rs`, + `.java`, `.rb`, `.php`, `.cs`, `.c`, `.cpp`, `.h`, `.hpp`, `.css`, `.scss`, `.vue`, `.svelte`, + `.astro`, `.sh`, `.bash`, `.ps1` +- Documentation/code review text: `.rst`, `.adoc`, `.tex`, `.diff`, `.patch`, `.markdown`, + `.mdown` Custom UTF-8 text extensions can be enabled without changing code: @@ -447,6 +520,13 @@ that are not listed should be OCRed, transcribed, converted, or exported to text Mimir intentionally avoids pretending that every binary format can be indexed safely without extraction logic. +Secret-like files such as `.env`, `.npmrc`, private keys, and certificates are skipped by default. +Convert safe examples to a normal text format before ingestion. + +Sensitive key/certificate-like files such as `.pem`, `.key`, `.p12`, `.pfx`, `.jks`, `.gpg`, and +common secret filenames such as `.env`, `.npmrc`, `.netrc`, and `.pgpass` are skipped by default even +if they sit under a source directory. + ## Configuration Reference Default `.kb/config.json`: @@ -472,6 +552,9 @@ Default `.kb/config.json`: "topK": 5, "chunkSize": 1200, "chunkOverlap": 150, + "maxFileBytes": 50000000, + "ingestConcurrency": 4, + "embeddingBatchSize": 32, "includeExtensions": [] } ``` @@ -493,6 +576,9 @@ Environment overrides: - `KB_TOP_K` - `KB_CHUNK_SIZE` - `KB_CHUNK_OVERLAP` +- `KB_MAX_FILE_BYTES` +- `KB_INGEST_CONCURRENCY` +- `KB_EMBEDDING_BATCH_SIZE` - `KB_INCLUDE_EXTENSIONS` ## CLI Reference @@ -512,6 +598,7 @@ Mimir ships two CLIs: | `kb doctor --fix` | Create missing scaffolding, install skills/MCP config, and rebuild stale indexes when safe. | | `kb ingest` | Parse source files, redact, chunk, embed, and rebuild the local LanceDB index. | | `kb audit` | Check whether supported source files are missing from or stale in the index. | +| `kb audit --unsupported` | List files skipped because they are unsupported, too large, or secret-like. | | `kb search ""` | Retrieve ranked passages without asking an LLM to write an answer. | | `kb ask ""` | Return cited retrieval context for an agent or trusted model runtime. | | `kb security-audit` | Inspect privacy posture: telemetry, providers, redaction, Git ignore, MCP. | @@ -547,7 +634,8 @@ Mimir ships two CLIs: | Option | Applies to | Meaning | | --- | --- | --- | | `--top-k ` | `search`, `ask` | Number of passages to return. | -| `--json` | `doctor`, `security-audit`, `audio --doctor`, `mimir-tts doctor` | Print machine-readable JSON. | +| `--json` | `doctor`, `audit`, `security-audit`, `audio --doctor`, `mimir-tts doctor` | Print machine-readable JSON. | +| `--unsupported` | `audit` | List skipped file paths and reasons. | | `--strict` | `security-audit` | Exit non-zero when warnings exist. | | `--offline` | `audio`, `mimir-tts render` | Disable remote model downloads and force the local Transformers.js path. | | `--allow-remote-models` | `audio`, `mimir-tts render` | Explicitly allow model downloads for Transformers.js. | @@ -602,6 +690,15 @@ pnpm exec kb doctor If documents live elsewhere, add one path per line to `.kb/sources.txt`. Relative paths resolve from the project root. +If files exist but are not supported yet, inspect the skipped inventory: + +```bash +pnpm exec kb audit --unsupported +``` + +Then either convert them to a supported format, OCR/transcribe them, or add a safe custom UTF-8 text +extension with `includeExtensions` / `KB_INCLUDE_EXTENSIONS`. + ### Search Returns Weak Results The default `local-hash` provider is dependency-light and offline, but it is lexical/hash retrieval, diff --git a/SECURITY-HARDENING.md b/SECURITY-HARDENING.md index e471fe6..58f15b7 100644 --- a/SECURITY-HARDENING.md +++ b/SECURITY-HARDENING.md @@ -13,6 +13,10 @@ built to minimize data movement, but it is not a certified high-assurance system remote model loading disabled by default through `transformersAllowRemoteModels: false`. - Redaction before indexing: built-in DLP patterns redact common secrets and identifiers before chunks are embedded and stored. +- Secret-like files are skipped by default: common private-key, certificate, and credential + filenames/extensions are not indexed even when they appear under a source directory. +- Ingestion has a default per-file size cap through `maxFileBytes` and reports unsupported, + oversized, and secret-like skipped files. - Metadata-only access logs: access logs contain action metadata and query hashes, not raw queries or retrieved text. - Generated local state is ignored by Git: `.kb/`, `.mimir/`, and `private/**` are ignored by @@ -22,6 +26,8 @@ built to minimize data movement, but it is not a certified high-assurance system - Optional audio summaries use `kb audio` / `@jcode.labs/mimir-tts`. Transformers.js WAV is the default offline/confidential path and does not require Python, ffmpeg, Piper, XTTS, or a local TTS server. Edge MP3 gives the highest quality only when online TTS is explicitly acceptable. +- Optional Markdown reports use the bundled `mimir-markdown-report` skill and should be written + under `.mimir/reports/` by default. - npm releases are published with provenance from the protected GitHub Actions workflow. - Release artifacts include a package tarball, SHA256 checksums, SBOM, and manifest. @@ -61,8 +67,9 @@ Move the generated tarballs from `release-artifacts/` into the offline environme ```bash pnpm add -D ./jcode.labs-mimir-tts-.tgz ./jcode.labs-mimir-.tgz -pnpm exec kb init -pnpm exec kb ingest +pnpm exec kb setup +pnpm exec kb doctor --fix +pnpm exec kb audit --unsupported ``` For semantic embeddings, preload the Transformers.js-compatible embedding model files inside the @@ -104,6 +111,16 @@ Run: pnpm exec kb security-audit --strict ``` +Also run: + +```bash +pnpm exec kb audit --unsupported +``` + +This exposes local relative paths for files that were skipped because the extension is unsupported, +the file exceeds `maxFileBytes`, or the filename looks like a secret/key artifact. Use it before +assuming a dossier was fully indexed. + ## DLP Redaction Built-in redaction is enabled by default for common secret and identifier shapes: private keys, @@ -129,6 +146,23 @@ Custom patterns can be added in `.kb/config.json`: Redaction changes the indexed text, not the raw files under `private/`. +## Ingestion Boundaries + +Mimir indexes many text, document, Office/OpenDocument, PDF, EPUB, subtitle, notebook, mail, config, +and source-code formats. It does not silently ingest every binary file. Unsupported images, scans, +audio/video, old proprietary Office binaries, and unknown formats must be converted, OCRed, or +transcribed first. + +Default ingestion guardrails: + +- `maxFileBytes`: 50 MB per file by default; +- `ingestConcurrency`: four parse/chunk workers by default; +- `embeddingBatchSize`: 32 chunks per embedding batch by default; +- checksum-based stale detection for supported files; +- unsupported/skipped file reporting through `kb ingest`, `kb audit`, and `kb audit --unsupported`. + +These are configurable, but raising limits increases local memory and parsing risk. + ## Optional Audio Summaries `kb install-skill` installs an optional `mimir-audio-summary` skill. It is designed for listenable @@ -151,6 +185,12 @@ Confidentiality defaults: Generated audio can still contain sensitive information. Treat it like a derived confidential document. +## Optional Markdown Reports + +`kb install-skill` also installs `mimir-markdown-report`. Reports generated from private evidence are +derived confidential documents. Keep them under `.mimir/reports/` by default, cite source paths and +chunk numbers, and do not commit them unless the user explicitly asks for a sanitized tracked report. + ## MCP Hardening MCP gives an agent access to retrieved private context. Use it only for agents running under the diff --git a/docs/ux-dx-audit.md b/docs/ux-dx-audit.md index 13a669d..9b134c7 100644 --- a/docs/ux-dx-audit.md +++ b/docs/ux-dx-audit.md @@ -23,7 +23,10 @@ developer and agent workflow around installation, indexing, querying, safety, au | Generated helper files | `private/README.md` was indexed and could pollute retrieval results. | Fixed: generated private README is skipped by source discovery. | | Audio confidentiality | `auto` could select online Edge TTS when installed. | Fixed: default path is Transformers.js WAV; Edge MP3 requires `--engine edge`. | | Documentation shape | The package README had too much tutorial, reference, and explanation mixed together. | Fixed: the root README is canonical; package README files are minimal npm entrypoints. | -| Agent onboarding | `install-skill` installed files but gave limited operational guidance. | Fixed: command output now prints agent next steps. | +| Agent onboarding | `install-skill` installed files but gave limited operational guidance. | Fixed: command output now prints agent next steps and Claude Code/Codex MCP snippets. | +| Ingestion visibility | Unsupported files were ignored silently, which made users overestimate coverage. | Fixed: `ingest`, `audit`, and `audit --unsupported` report skipped files by reason. | +| Report generation | Users had audio summaries but no dedicated Markdown-report workflow. | Fixed: `mimir-markdown-report` skill writes cited reports under ignored local state. | +| Stale detection | Audit compared paths but did not detect changed file content. | Fixed: audit now uses stored checksums to flag stale indexed content. | ## DX Findings @@ -32,7 +35,7 @@ developer and agent workflow around installation, indexing, querying, safety, au | Local validation | `pnpm validate` already covers lint, typecheck, tests, build, smoke, package checks, and artifacts. | Good. | | Release safety | npm publish is protected by CI, environment approval, provenance, and explicit version input. | Good. | | API clarity | Core exports are small and named, but the README only shows a minimal API snippet. | Partially improved by CLI docs; deeper API docs remain future work. | -| MCP reference | Tool names are documented, but tool schemas are not deeply documented. | Future work. | +| MCP reference | Tool names and an agent demo prompt are documented, but tool schemas are not deeply documented. | Partially improved. | | Error guidance | Common setup and audio errors were not centralized. | Fixed in the root README troubleshooting section. | | Dist workflow | `dist/` is committed and documented in `CLAUDE.md`; this is unusual but CI-enforced. | Good for this repo, but keep documenting it. | @@ -44,6 +47,8 @@ developer and agent workflow around installation, indexing, querying, safety, au fully air-gapped operation requires a documented model-preload workflow. - MCP access is read-focused but still exposes private retrieved passages to the connected agent. Team/RBAC support remains out of scope. +- `audit --unsupported` intentionally lists relative paths only; users still need to avoid pasting + sensitive path names into public issue reports. - The library API is usable, but a dedicated API reference page would help external developers. ## Recommended Next Pass @@ -51,4 +56,4 @@ developer and agent workflow around installation, indexing, querying, safety, au 1. Add API reference docs for exported functions and result types. 2. Add MCP tool schema examples for agent developers. 3. Add a model-preload guide for semantic embeddings and offline TTS. -4. Add a recorded or scripted demo workspace flow for release QA. +4. Add deeper API reference docs for external library consumers once the public API grows. diff --git a/package.json b/package.json index 13bede0..60e67ad 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "jcode-mimir", - "version": "0.4.6", + "version": "0.4.7", "private": true, "description": "Monorepo for the Mimir open-source local RAG packages.", "type": "module", diff --git a/packages/mimir-tts/package.json b/packages/mimir-tts/package.json index dd53724..2a53277 100644 --- a/packages/mimir-tts/package.json +++ b/packages/mimir-tts/package.json @@ -1,6 +1,6 @@ { "name": "@jcode.labs/mimir-tts", - "version": "0.4.6", + "version": "0.4.7", "description": "Plug-and-play Edge-quality and offline text-to-speech for Mimir audio summaries.", "type": "module", "license": "MIT", diff --git a/packages/mimir/README.md b/packages/mimir/README.md index 9c96f54..4c4b9c7 100644 --- a/packages/mimir/README.md +++ b/packages/mimir/README.md @@ -17,7 +17,7 @@ same evidence through: - the `kb` CLI; - a TypeScript library API; - a local MCP stdio server for compatible AI agents; -- portable agent skills copied by `kb setup`. +- portable agent skills copied by `kb setup`, including audio and Markdown-report workflows. Mimir does not send documents to a hosted RAG service and does not generate final LLM answers in core. It returns cited retrieval context so the agent or model you trust can write from local @@ -44,9 +44,9 @@ pnpm exec kb search "your question" pnpm exec kb ask "your question" ``` -By default, Mimir indexes documents from `private/`, stores generated state under `.kb/`, and keeps -agent integration files under `.mimir/`. `kb setup` adds the matching Git ignore entries for local -generated and private data. +By default, Mimir indexes documents from `private/`, reports unsupported/skipped files during +ingestion, stores generated state under `.kb/`, and keeps agent integration files under `.mimir/`. +`kb setup` adds the matching Git ignore entries for local generated and private data. Run `pnpm exec kb doctor --fix` later to repair missing setup or rebuild stale indexes. @@ -57,6 +57,12 @@ Run `pnpm exec kb doctor --fix` later to repair missing setup or rebuild stale i - MCP server: `pnpm exec kb serve-mcp` - Bundled skills: `pnpm exec kb setup` or `pnpm exec kb install-skill` +## Claude Code And Codex + +After `pnpm exec kb setup`, use `.mimir/claude-mcp-server.json` with `claude mcp add-json`, or copy +`.mimir/codex-mcp.toml` into a trusted Codex config layer. See the canonical GitHub README for the +full agent demo. + ## License MIT (c) Jean-Baptiste Thery. diff --git a/packages/mimir/dist/cli.js b/packages/mimir/dist/cli.js index 1786de3..ad6efae 100755 --- a/packages/mimir/dist/cli.js +++ b/packages/mimir/dist/cli.js @@ -93,7 +93,12 @@ program .option("--rebuild", "Accepted for compatibility; ingest always rebuilds the local index.") .action(async () => { const result = await ingest({ cwd: process.cwd(), rebuild: true }); - console.log(pc.green(`Done. indexedFiles=${result.indexedFiles} chunks=${result.chunks} skippedFiles=${result.skippedFiles} redactions=${result.redactions} errors=${result.errors.length}`)); + console.log(pc.green(`Done. discoveredFiles=${result.discoveredFiles} supportedFiles=${result.supportedFiles} indexedFiles=${result.indexedFiles} chunks=${result.chunks} skippedFiles=${result.skippedFiles} unsupportedFiles=${result.unsupportedFiles} oversizedFiles=${result.oversizedFiles} sensitiveFiles=${result.sensitiveFiles} redactions=${result.redactions} errors=${result.errors.length}`)); + printUnsupportedSummary(result.unsupportedExtensions); + if (result.unsupportedFiles > 0 || result.oversizedFiles > 0 || result.sensitiveFiles > 0) { + const auditCommand = await kbCommand(process.cwd(), ["audit", "--unsupported"]); + console.log(pc.yellow(`Some files were not indexed. Run \`${auditCommand.display}\` for details.`)); + } for (const error of result.errors) { console.error(pc.red(` - ${error.path}: ${error.message}`)); } @@ -138,19 +143,36 @@ program program .command("audit") .description("Compare supported files on disk with the current vector index.") - .action(async () => { + .option("--unsupported", "List skipped file paths and reasons.") + .option("--json", "Print machine-readable JSON.") + .action(async (options) => { const report = await audit(process.cwd()); + if (options.json) { + console.log(JSON.stringify(report, null, 2)); + return; + } console.log(`supportedFiles=${report.supportedFiles.length}`); + console.log(`skippedFiles=${report.skippedFiles.length}`); + console.log(`unsupportedFiles=${report.skippedFiles.filter((file) => file.reason === "unsupported-extension").length}`); console.log(`indexedFiles=${report.indexedFiles.length}`); console.log(`totalChunks=${report.totalChunks}`); console.log(`missingFromIndex=${report.missingFromIndex.length}`); console.log(`staleInIndex=${report.staleInIndex.length}`); + printUnsupportedSummary(report.unsupportedExtensions); for (const file of report.missingFromIndex) { console.log(pc.yellow(`missing: ${file}`)); } for (const file of report.staleInIndex) { console.log(pc.red(`stale: ${file}`)); } + if (options.unsupported) { + for (const file of report.skippedFiles) { + console.log(pc.yellow(`skipped: ${file.relativePath} reason=${file.reason}`)); + } + } + else if (report.skippedFiles.length > 0) { + console.log(pc.yellow("Run `kb audit --unsupported` to list skipped file paths.")); + } if (report.missingFromIndex.length > 0 || report.staleInIndex.length > 0) { process.exitCode = 1; } @@ -173,6 +195,9 @@ program console.log(`redactionEnabled=${config.redaction.enabled}`); console.log(`accessLog=${config.accessLog}`); console.log(`mcpMaxTopK=${config.mcpMaxTopK}`); + console.log(`maxFileBytes=${config.maxFileBytes}`); + console.log(`ingestConcurrency=${config.ingestConcurrency}`); + console.log(`embeddingBatchSize=${config.embeddingBatchSize}`); console.log(`includeExtensions=${config.includeExtensions.join(",")}`); console.log(`chunksIndexed=${rows}`); }); @@ -271,7 +296,7 @@ program .command("serve-mcp") .description("Start the MCP server over stdio for Claude, Codex, and other MCP-compatible agents.") .action(async () => { - await serveMcp(process.cwd()); + await serveMcp(); }); program .command("skill-path") @@ -292,10 +317,13 @@ program } console.log(`Skill path: ${result.skillPath}`); console.log(`Optional audio skill path: ${result.audioSkillPath}`); + console.log(`Optional Markdown report skill path: ${result.reportSkillPath}`); console.log(`MCP config example: ${result.mcpConfigPath}`); + console.log(`Claude Code MCP server JSON: ${result.claudeConfigPath}`); + console.log(`Codex MCP TOML snippet: ${result.codexConfigPath}`); console.log(""); console.log("Next steps:"); - console.log(" 1. Add the MCP config from .mimir/mcp.json to your agent if it supports MCP."); + console.log(" 1. Add the MCP config from .mimir/ to Claude Code, Codex, or another MCP client."); console.log(" 2. Load .mimir/skills/mimir/ in agents that support skill folders."); console.log(` 3. Run \`${doctorCommand.display}\` before relying on retrieved context.`); }); @@ -374,6 +402,8 @@ function printDoctor(report) { console.log(`redactionEnabled=${report.redactionEnabled}`); console.log(`accessLog=${report.accessLog}`); console.log(`supportedFiles=${report.supportedFiles}`); + console.log(`skippedFiles=${report.skippedFiles}`); + console.log(`unsupportedFiles=${report.unsupportedFiles}`); console.log(`indexedFiles=${report.indexedFiles}`); console.log(`chunksIndexed=${report.chunksIndexed}`); console.log(`missingFromIndex=${report.missingFromIndex}`); @@ -408,11 +438,15 @@ function printSetup(result, title) { console.log(pc.cyan("Agent integration:")); console.log(` - skill: ${result.agentKit.skillPath}`); console.log(` - audio skill: ${result.agentKit.audioSkillPath}`); + console.log(` - report skill: ${result.agentKit.reportSkillPath}`); console.log(` - MCP config: ${result.agentKit.mcpConfigPath}`); + console.log(` - Claude Code MCP JSON: ${result.agentKit.claudeConfigPath}`); + console.log(` - Codex MCP TOML: ${result.agentKit.codexConfigPath}`); console.log(""); console.log(pc.cyan("Index:")); if (result.ingested) { - console.log(` - ingested indexedFiles=${result.ingested.indexedFiles} chunks=${result.ingested.chunks} errors=${result.ingested.errors.length}`); + console.log(` - ingested indexedFiles=${result.ingested.indexedFiles} chunks=${result.ingested.chunks} skippedFiles=${result.ingested.skippedFiles} errors=${result.ingested.errors.length}`); + printUnsupportedSummary(result.ingested.unsupportedExtensions); } else if (result.doctor.ready) { console.log(` - already ready chunks=${result.doctor.chunksIndexed}`); @@ -423,6 +457,14 @@ function printSetup(result, title) { console.log(""); printDoctor(result.doctor); } +function printUnsupportedSummary(extensions) { + if (extensions.length === 0) { + return; + } + console.log(pc.yellow(`unsupportedExtensions=${extensions + .map((entry) => `${entry.extension}:${entry.count}`) + .join(",")}`)); +} function printMaybeJson(value, json) { if (json) { console.log(JSON.stringify(value, null, 2)); diff --git a/packages/mimir/dist/cli.js.map b/packages/mimir/dist/cli.js.map index 5225214..2e27f64 100644 --- a/packages/mimir/dist/cli.js.map +++ b/packages/mimir/dist/cli.js.map @@ -1 +1 @@ -{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/mimir/dist/config.d.ts.map b/packages/mimir/dist/config.d.ts.map index 042b817..81150cd 100644 --- a/packages/mimir/dist/config.d.ts.map +++ b/packages/mimir/dist/config.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAwCxC,wBAAgB,eAAe,CAAC,KAAK,SAAgB,GAAG,MAAM,CAc7D;AAED,wBAAsB,UAAU,CAAC,KAAK,SAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+BvE"} \ No newline at end of file +{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AA2CxC,wBAAgB,eAAe,CAAC,KAAK,SAAgB,GAAG,MAAM,CAc7D;AAED,wBAAsB,UAAU,CAAC,KAAK,SAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkCvE"} \ No newline at end of file diff --git a/packages/mimir/dist/config.js b/packages/mimir/dist/config.js index ba7e839..60f4ef5 100644 --- a/packages/mimir/dist/config.js +++ b/packages/mimir/dist/config.js @@ -33,6 +33,9 @@ const rawConfigSchema = z.object({ topK: z.number().int().positive().default(DEFAULT_CONFIG.topK), chunkSize: z.number().int().positive().default(DEFAULT_CONFIG.chunkSize), chunkOverlap: z.number().int().nonnegative().default(DEFAULT_CONFIG.chunkOverlap), + maxFileBytes: z.number().int().positive().default(DEFAULT_CONFIG.maxFileBytes), + ingestConcurrency: z.number().int().positive().default(DEFAULT_CONFIG.ingestConcurrency), + embeddingBatchSize: z.number().int().positive().default(DEFAULT_CONFIG.embeddingBatchSize), includeExtensions: z.array(z.string().min(1)).default(DEFAULT_CONFIG.includeExtensions), }); export function findProjectRoot(start = process.cwd()) { @@ -74,6 +77,9 @@ export async function loadConfig(start = process.cwd()) { topK: withEnv.topK, chunkSize: withEnv.chunkSize, chunkOverlap: withEnv.chunkOverlap, + maxFileBytes: withEnv.maxFileBytes, + ingestConcurrency: withEnv.ingestConcurrency, + embeddingBatchSize: withEnv.embeddingBatchSize, includeExtensions: normalizeExtensions(withEnv.includeExtensions), }; } @@ -101,6 +107,9 @@ function applyEnv(config) { topK: readPositiveIntEnv("KB_TOP_K", config.topK), chunkSize: readPositiveIntEnv("KB_CHUNK_SIZE", config.chunkSize), chunkOverlap: readNonNegativeIntEnv("KB_CHUNK_OVERLAP", config.chunkOverlap), + maxFileBytes: readPositiveIntEnv("KB_MAX_FILE_BYTES", config.maxFileBytes), + ingestConcurrency: readPositiveIntEnv("KB_INGEST_CONCURRENCY", config.ingestConcurrency), + embeddingBatchSize: readPositiveIntEnv("KB_EMBEDDING_BATCH_SIZE", config.embeddingBatchSize), includeExtensions: readExtensionsEnv("KB_INCLUDE_EXTENSIONS", config.includeExtensions), }; } diff --git a/packages/mimir/dist/config.js.map b/packages/mimir/dist/config.js.map index 99e3282..343fc7f 100644 --- a/packages/mimir/dist/config.js.map +++ b/packages/mimir/dist/config.js.map @@ -1 +1 @@ -{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAG3D,MAAM,uBAAuB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,CAAA;AAEtE,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC;IACjD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC;IACzD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC;IAC3D,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC;IAC/D,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,kBAAkB,CAAC;IACzE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC;IACvD,iBAAiB,EAAE,uBAAuB,CAAC,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC;IACpF,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC;IACjE,6BAA6B,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,6BAA6B,CAAC;IAChG,SAAS,EAAE,CAAC;SACT,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC;QAC9D,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC;QAC9D,QAAQ,EAAE,CAAC;aACR,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACnC,CAAC,CACH;aACA,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC;KAC9C,CAAC;SACD,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC;IACpC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC;IACxD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC;IAC1E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC;IAC9D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC;IACxE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC;IACjF,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC;CACxF,CAAC,CAAA;AAIF,MAAM,UAAU,eAAe,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE;IACnD,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAEjC,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;YAChD,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACpC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;QACD,OAAO,GAAG,MAAM,CAAA;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE;IACpD,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;IACtD,MAAM,GAAG,GAAY,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAEjG,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAEhC,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;IAC/D,CAAC;IAED,OAAO;QACL,WAAW;QACX,MAAM,EAAE,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC;QACpD,UAAU,EAAE,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,UAAU,CAAC;QAC5D,WAAW,EAAE,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC;QAC9D,aAAa,EAAE,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC;QAClE,kBAAkB,EAAE,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,kBAAkB,CAAC;QAC5E,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,6BAA6B,EAAE,OAAO,CAAC,6BAA6B;QACpE,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,iBAAiB,EAAE,mBAAmB,CAAC,OAAO,CAAC,iBAAiB,CAAC;KAClE,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAC,WAAmB,EAAE,KAAa;IACzD,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;AAC1E,CAAC;AAED,SAAS,QAAQ,CAAC,MAAiB;IACjC,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM;QAC/C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,MAAM,CAAC,UAAU;QAC3D,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,MAAM,CAAC,WAAW;QAC9D,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,MAAM,CAAC,aAAa;QACrE,iBAAiB,EAAE,wBAAwB,CAAC,uBAAuB,EAAE,MAAM,CAAC,iBAAiB,CAAC;QAC9F,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,MAAM,CAAC,cAAc;QACvE,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,MAAM,CAAC,kBAAkB;QACpF,6BAA6B,EAAE,cAAc,CAC3C,qCAAqC,EACrC,MAAM,CAAC,6BAA6B,CACrC;QACD,SAAS,EAAE;YACT,GAAG,MAAM,CAAC,SAAS;YACnB,OAAO,EAAE,cAAc,CAAC,sBAAsB,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;YACzE,OAAO,EAAE,cAAc,CAAC,uBAAuB,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;SAC3E;QACD,SAAS,EAAE,cAAc,CAAC,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC;QAC5D,UAAU,EAAE,kBAAkB,CAAC,kBAAkB,EAAE,MAAM,CAAC,UAAU,CAAC;QACrE,IAAI,EAAE,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC;QACjD,SAAS,EAAE,kBAAkB,CAAC,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC;QAChE,YAAY,EAAE,qBAAqB,CAAC,kBAAkB,EAAE,MAAM,CAAC,YAAY,CAAC;QAC5E,iBAAiB,EAAE,iBAAiB,CAAC,uBAAuB,EAAE,MAAM,CAAC,iBAAiB,CAAC;KACxF,CAAA;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,UAAoB;IAC/C,OAAO;QACL,GAAG,IAAI,GAAG,CACR,UAAU;aACP,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;aAClD,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CACjF;KACF,CAAC,IAAI,EAAE,CAAA;AACV,CAAC;AAED,SAAS,wBAAwB,CAC/B,IAAY,EACZ,QAAwC;IAExC,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;IACnE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAA;AAChD,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,QAAiB;IACrD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAA;IAC5C,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QACnD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACnD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,QAAgB;IACxD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACtC,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAA;AAChE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,QAAgB;IAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACtC,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAA;AACjE,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,QAAkB;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACvB,CAAC"} \ No newline at end of file +{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAG3D,MAAM,uBAAuB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,CAAA;AAEtE,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC;IACjD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC;IACzD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC;IAC3D,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC;IAC/D,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,kBAAkB,CAAC;IACzE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC;IACvD,iBAAiB,EAAE,uBAAuB,CAAC,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC;IACpF,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC;IACjE,6BAA6B,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,6BAA6B,CAAC;IAChG,SAAS,EAAE,CAAC;SACT,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC;QAC9D,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC;QAC9D,QAAQ,EAAE,CAAC;aACR,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACnC,CAAC,CACH;aACA,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC;KAC9C,CAAC;SACD,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC;IACpC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC;IACxD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC;IAC1E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC;IAC9D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC;IACxE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC;IACjF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC;IAC9E,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC;IACxF,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,kBAAkB,CAAC;IAC1F,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC;CACxF,CAAC,CAAA;AAIF,MAAM,UAAU,eAAe,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE;IACnD,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAEjC,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;YAChD,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACpC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;QACD,OAAO,GAAG,MAAM,CAAA;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE;IACpD,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;IACtD,MAAM,GAAG,GAAY,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAEjG,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAEhC,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;IAC/D,CAAC;IAED,OAAO;QACL,WAAW;QACX,MAAM,EAAE,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC;QACpD,UAAU,EAAE,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,UAAU,CAAC;QAC5D,WAAW,EAAE,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC;QAC9D,aAAa,EAAE,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC;QAClE,kBAAkB,EAAE,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,kBAAkB,CAAC;QAC5E,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,6BAA6B,EAAE,OAAO,CAAC,6BAA6B;QACpE,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,iBAAiB,EAAE,mBAAmB,CAAC,OAAO,CAAC,iBAAiB,CAAC;KAClE,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAC,WAAmB,EAAE,KAAa;IACzD,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;AAC1E,CAAC;AAED,SAAS,QAAQ,CAAC,MAAiB;IACjC,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM;QAC/C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,MAAM,CAAC,UAAU;QAC3D,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,MAAM,CAAC,WAAW;QAC9D,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,MAAM,CAAC,aAAa;QACrE,iBAAiB,EAAE,wBAAwB,CAAC,uBAAuB,EAAE,MAAM,CAAC,iBAAiB,CAAC;QAC9F,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,MAAM,CAAC,cAAc;QACvE,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,MAAM,CAAC,kBAAkB;QACpF,6BAA6B,EAAE,cAAc,CAC3C,qCAAqC,EACrC,MAAM,CAAC,6BAA6B,CACrC;QACD,SAAS,EAAE;YACT,GAAG,MAAM,CAAC,SAAS;YACnB,OAAO,EAAE,cAAc,CAAC,sBAAsB,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;YACzE,OAAO,EAAE,cAAc,CAAC,uBAAuB,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;SAC3E;QACD,SAAS,EAAE,cAAc,CAAC,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC;QAC5D,UAAU,EAAE,kBAAkB,CAAC,kBAAkB,EAAE,MAAM,CAAC,UAAU,CAAC;QACrE,IAAI,EAAE,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC;QACjD,SAAS,EAAE,kBAAkB,CAAC,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC;QAChE,YAAY,EAAE,qBAAqB,CAAC,kBAAkB,EAAE,MAAM,CAAC,YAAY,CAAC;QAC5E,YAAY,EAAE,kBAAkB,CAAC,mBAAmB,EAAE,MAAM,CAAC,YAAY,CAAC;QAC1E,iBAAiB,EAAE,kBAAkB,CAAC,uBAAuB,EAAE,MAAM,CAAC,iBAAiB,CAAC;QACxF,kBAAkB,EAAE,kBAAkB,CAAC,yBAAyB,EAAE,MAAM,CAAC,kBAAkB,CAAC;QAC5F,iBAAiB,EAAE,iBAAiB,CAAC,uBAAuB,EAAE,MAAM,CAAC,iBAAiB,CAAC;KACxF,CAAA;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,UAAoB;IAC/C,OAAO;QACL,GAAG,IAAI,GAAG,CACR,UAAU;aACP,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;aAClD,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CACjF;KACF,CAAC,IAAI,EAAE,CAAA;AACV,CAAC;AAED,SAAS,wBAAwB,CAC/B,IAAY,EACZ,QAAwC;IAExC,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;IACnE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAA;AAChD,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,QAAiB;IACrD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAA;IAC5C,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QACnD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACnD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,QAAgB;IACxD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACtC,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAA;AAChE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,QAAgB;IAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACtC,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAA;AACjE,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,QAAkB;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACvB,CAAC"} \ No newline at end of file diff --git a/packages/mimir/dist/defaults.d.ts.map b/packages/mimir/dist/defaults.d.ts.map index c25f3ca..f4ecc3a 100644 --- a/packages/mimir/dist/defaults.d.ts.map +++ b/packages/mimir/dist/defaults.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,eAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,eAAO,MAAM,SAAS,WAAW,CAAA;AACjC,eAAO,MAAM,WAAW,YAAY,CAAA;AACpC,eAAO,MAAM,WAAW,oBAA0B,CAAA;AAClD,eAAO,MAAM,wBAAwB,kBAAwB,CAAA;AAE7D,eAAO,MAAM,kBAAkB,SAAe,CAAA;AAC9C,eAAO,MAAM,qBAAqB,YAAkB,CAAA;AACpD,eAAO,MAAM,uBAAuB,eAAsB,CAAA;AAE1D,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,CAqBtD,CAAA"} \ No newline at end of file +{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,eAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,eAAO,MAAM,SAAS,WAAW,CAAA;AACjC,eAAO,MAAM,WAAW,YAAY,CAAA;AACpC,eAAO,MAAM,WAAW,oBAA0B,CAAA;AAClD,eAAO,MAAM,wBAAwB,kBAAwB,CAAA;AAE7D,eAAO,MAAM,kBAAkB,SAAe,CAAA;AAC9C,eAAO,MAAM,qBAAqB,YAAkB,CAAA;AACpD,eAAO,MAAM,uBAAuB,eAAsB,CAAA;AAE1D,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,CAwBtD,CAAA"} \ No newline at end of file diff --git a/packages/mimir/dist/defaults.js b/packages/mimir/dist/defaults.js index 62d3016..a247a98 100644 --- a/packages/mimir/dist/defaults.js +++ b/packages/mimir/dist/defaults.js @@ -26,6 +26,9 @@ export const DEFAULT_CONFIG = { topK: 5, chunkSize: 1200, chunkOverlap: 150, + maxFileBytes: 50_000_000, + ingestConcurrency: 4, + embeddingBatchSize: 32, includeExtensions: [], }; //# sourceMappingURL=defaults.js.map \ No newline at end of file diff --git a/packages/mimir/dist/defaults.js.map b/packages/mimir/dist/defaults.js.map index 5ad7352..c502fa0 100644 --- a/packages/mimir/dist/defaults.js.map +++ b/packages/mimir/dist/defaults.js.map @@ -1 +1 @@ -{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAA;AAC3B,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAA;AACjC,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAA;AACpC,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,MAAM,cAAc,CAAA;AAClD,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,SAAS,SAAS,CAAA;AAE7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,MAAM,GAAG,CAAA;AAC9C,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,SAAS,GAAG,CAAA;AACpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,WAAW,KAAK,CAAA;AAE1D,MAAM,CAAC,MAAM,cAAc,GAAgC;IACzD,MAAM,EAAE,WAAW;IACnB,UAAU,EAAE,GAAG,MAAM,UAAU;IAC/B,WAAW,EAAE,GAAG,MAAM,cAAc;IACpC,aAAa,EAAE,GAAG,MAAM,aAAa;IACrC,kBAAkB,EAAE,GAAG,SAAS,SAAS;IACzC,SAAS,EAAE,QAAQ;IACnB,iBAAiB,EAAE,YAAY;IAC/B,cAAc,EAAE,qCAAqC;IACrD,6BAA6B,EAAE,KAAK;IACpC,SAAS,EAAE;QACT,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,EAAE;KACb;IACD,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,EAAE;IACd,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,GAAG;IACjB,iBAAiB,EAAE,EAAE;CACtB,CAAA"} \ No newline at end of file +{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAA;AAC3B,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAA;AACjC,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAA;AACpC,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,MAAM,cAAc,CAAA;AAClD,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,SAAS,SAAS,CAAA;AAE7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,MAAM,GAAG,CAAA;AAC9C,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,SAAS,GAAG,CAAA;AACpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,WAAW,KAAK,CAAA;AAE1D,MAAM,CAAC,MAAM,cAAc,GAAgC;IACzD,MAAM,EAAE,WAAW;IACnB,UAAU,EAAE,GAAG,MAAM,UAAU;IAC/B,WAAW,EAAE,GAAG,MAAM,cAAc;IACpC,aAAa,EAAE,GAAG,MAAM,aAAa;IACrC,kBAAkB,EAAE,GAAG,SAAS,SAAS;IACzC,SAAS,EAAE,QAAQ;IACnB,iBAAiB,EAAE,YAAY;IAC/B,cAAc,EAAE,qCAAqC;IACrD,6BAA6B,EAAE,KAAK;IACpC,SAAS,EAAE;QACT,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,EAAE;KACb;IACD,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,EAAE;IACd,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,GAAG;IACjB,YAAY,EAAE,UAAU;IACxB,iBAAiB,EAAE,CAAC;IACpB,kBAAkB,EAAE,EAAE;IACtB,iBAAiB,EAAE,EAAE;CACtB,CAAA"} \ No newline at end of file diff --git a/packages/mimir/dist/doctor.d.ts.map b/packages/mimir/dist/doctor.d.ts.map index e22c84a..e64b809 100644 --- a/packages/mimir/dist/doctor.d.ts.map +++ b/packages/mimir/dist/doctor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,wBAAsB,MAAM,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAiDvE"} \ No newline at end of file +{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,wBAAsB,MAAM,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAyDvE"} \ No newline at end of file diff --git a/packages/mimir/dist/doctor.js b/packages/mimir/dist/doctor.js index a652664..cc317d6 100644 --- a/packages/mimir/dist/doctor.js +++ b/packages/mimir/dist/doctor.js @@ -20,6 +20,8 @@ export async function doctor(cwd = process.cwd()) { const nextSteps = nextActions({ initialized, supportedFiles: auditReport.supportedFiles.length, + skippedFiles: auditReport.skippedFiles.length, + unsupportedFiles: auditReport.skippedFiles.filter((file) => file.reason === "unsupported-extension").length, chunksIndexed, missingFromIndex: auditReport.missingFromIndex.length, staleInIndex: auditReport.staleInIndex.length, @@ -40,6 +42,8 @@ export async function doctor(cwd = process.cwd()) { redactionEnabled: config.redaction.enabled, accessLog: config.accessLog, supportedFiles: auditReport.supportedFiles.length, + skippedFiles: auditReport.skippedFiles.length, + unsupportedFiles: auditReport.skippedFiles.filter((file) => file.reason === "unsupported-extension").length, indexedFiles: auditReport.indexedFiles.length, chunksIndexed, missingFromIndex: auditReport.missingFromIndex.length, @@ -60,7 +64,12 @@ function nextActions(input) { return steps; } if (input.supportedFiles === 0) { - steps.push("Add supported files under private/ or list extra source paths in .kb/sources.txt."); + if (input.skippedFiles > 0) { + steps.push("Mimir found files, but none are currently indexable. Run `kb audit --unsupported` to inspect skipped files."); + } + else { + steps.push("Add supported files under private/ or list extra source paths in .kb/sources.txt."); + } return steps; } if (input.chunksIndexed === 0 || input.missingFromIndex > 0 || input.staleInIndex > 0) { @@ -71,6 +80,9 @@ function nextActions(input) { steps.push(`Run \`${input.run(["security-audit", "--strict"])}\` and fix the reported warnings.`); } if (steps.length === 0) { + if (input.unsupportedFiles > 0) { + steps.push("Run `kb audit --unsupported` to inspect files skipped because their type is not supported."); + } steps.push(`Run \`${input.run(["search", '"your question"'])}\` to retrieve source passages.`); steps.push(`Run \`${input.run(["ask", '"your question"'])}\` to produce cited retrieval context.`); if (input.agentKitInstalled) { @@ -85,6 +97,9 @@ function nextActions(input) { function isAgentKitInstalled(projectRoot) { return (existsSync(path.join(projectRoot, MIMIR_DIR, "skills", "mimir", "SKILL.md")) && existsSync(path.join(projectRoot, MIMIR_DIR, "skills", "mimir-audio-summary", "SKILL.md")) && - existsSync(path.join(projectRoot, MIMIR_DIR, "mcp.json"))); + existsSync(path.join(projectRoot, MIMIR_DIR, "skills", "mimir-markdown-report", "SKILL.md")) && + existsSync(path.join(projectRoot, MIMIR_DIR, "mcp.json")) && + existsSync(path.join(projectRoot, MIMIR_DIR, "claude-mcp-server.json")) && + existsSync(path.join(projectRoot, MIMIR_DIR, "codex-mcp.toml"))); } //# sourceMappingURL=doctor.js.map \ No newline at end of file diff --git a/packages/mimir/dist/doctor.js.map b/packages/mimir/dist/doctor.js.map index 198d38f..1c4b2d1 100644 --- a/packages/mimir/dist/doctor.js.map +++ b/packages/mimir/dist/doctor.js.map @@ -1 +1 @@ -{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/mimir/dist/files.d.ts b/packages/mimir/dist/files.d.ts index 20807eb..76507b1 100644 --- a/packages/mimir/dist/files.d.ts +++ b/packages/mimir/dist/files.d.ts @@ -1,5 +1,10 @@ -import type { Config, SourceFile } from "./types.js"; +import type { Config, SkippedSourceFile, SourceFile, SourceInventory } from "./types.js"; export declare const DEFAULT_SUPPORTED_EXTENSIONS: Set; export declare function listSourceFiles(config: Config): Promise; +export declare function inventorySourceFiles(config: Config): Promise; export declare function supportedExtensions(config: Config): Set; +export declare function summarizeUnsupportedExtensions(skippedFiles: SkippedSourceFile[]): Array<{ + extension: string; + count: number; +}>; //# sourceMappingURL=files.d.ts.map \ No newline at end of file diff --git a/packages/mimir/dist/files.d.ts.map b/packages/mimir/dist/files.d.ts.map index fca1bf8..f8e5015 100644 --- a/packages/mimir/dist/files.d.ts.map +++ b/packages/mimir/dist/files.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAIpD,eAAO,MAAM,4BAA4B,aA+CvC,CAAA;AAEF,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA4C3E;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAE/D"} \ No newline at end of file +{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAyBxF,eAAO,MAAM,4BAA4B,aAyEvC,CAAA;AAEF,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAE3E;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAqFnF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAE/D;AAED,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,iBAAiB,EAAE,GAChC,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAW7C"} \ No newline at end of file diff --git a/packages/mimir/dist/files.js b/packages/mimir/dist/files.js index 0635ed9..c81d413 100644 --- a/packages/mimir/dist/files.js +++ b/packages/mimir/dist/files.js @@ -5,84 +5,164 @@ import path from "node:path"; import fg from "fast-glob"; import { PRIVATE_DIR } from "./defaults.js"; const GENERATED_SOURCE_README = `${PRIVATE_DIR}/README.md`; +const NO_EXTENSION = "(none)"; +const SENSITIVE_FILE_NAMES = new Set([ + ".env", + ".env.local", + ".env.production", + ".npmrc", + ".pypirc", + ".netrc", + ".pgpass", +]); +const SENSITIVE_EXTENSIONS = new Set([ + ".crt", + ".der", + ".gpg", + ".jks", + ".key", + ".keystore", + ".p12", + ".pem", + ".pfx", +]); export const DEFAULT_SUPPORTED_EXTENSIONS = new Set([ ".atom", + ".adoc", + ".astro", + ".bash", ".c", + ".cjs", ".cfg", ".conf", ".cpp", ".cs", ".css", ".csv", + ".cts", + ".diff", ".docx", + ".eml", + ".epub", ".go", ".h", + ".hpp", ".htm", ".html", + ".ics", ".ini", ".java", ".js", ".json", ".jsonl", ".jsx", + ".ipynb", ".log", + ".markdown", ".md", + ".mdown", ".mdx", + ".mjs", + ".mts", ".ndjson", ".odp", ".ods", ".odt", + ".patch", ".pdf", ".php", ".pptx", ".properties", + ".ps1", ".py", ".rb", + ".rst", ".rs", ".rss", ".rtf", + ".scss", + ".srt", + ".svelte", + ".svg", + ".sh", ".sql", + ".tex", ".text", ".toml", ".ts", ".tsv", ".tsx", ".txt", + ".vtt", + ".vue", ".xml", ".xlsx", ".yaml", ".yml", ]); export async function listSourceFiles(config) { + return (await inventorySourceFiles(config)).supportedFiles; +} +export async function inventorySourceFiles(config) { const roots = await sourceRoots(config); const files = new Map(); + const skippedFiles = new Map(); + let discoveredFiles = 0; for (const root of roots) { if (!existsSync(root)) { continue; } - const entries = await fg("**/*", { + const entries = (await fg("**/*", { cwd: root, absolute: true, onlyFiles: true, dot: false, followSymbolicLinks: false, ignore: ["**/.git/**", "**/node_modules/**", "**/.kb/**", "**/.mimir/**"], - }); - for (const absolutePath of entries) { + objectMode: true, + stats: true, + unique: true, + })); + for (const entry of entries) { + const absolutePath = path.isAbsolute(entry.path) ? entry.path : path.resolve(root, entry.path); const relativePath = path.relative(config.projectRoot, absolutePath); if (relativePath === GENERATED_SOURCE_README) { continue; } + discoveredFiles += 1; const extension = path.extname(absolutePath).toLowerCase(); + const info = entry.stats ?? (await stat(absolutePath)); + const source = path.relative(root, absolutePath) || path.basename(absolutePath); + const skipped = skippedSourceFile(absolutePath, relativePath, source, extension, info.size); + if (skipped) { + skippedFiles.set(absolutePath, skipped); + continue; + } if (!supportedExtensions(config).has(extension)) { + skippedFiles.set(absolutePath, { + relativePath, + source, + extension: extension || NO_EXTENSION, + bytes: info.size, + reason: "unsupported-extension", + }); + continue; + } + if (info.size > config.maxFileBytes) { + skippedFiles.set(absolutePath, { + relativePath, + source, + extension: extension || NO_EXTENSION, + bytes: info.size, + reason: "oversized", + }); continue; } - const info = await stat(absolutePath); const buffer = await readFile(absolutePath); files.set(absolutePath, { absolutePath, relativePath, - source: path.relative(root, absolutePath) || path.basename(absolutePath), + source, extension, bytes: info.size, mtimeMs: info.mtimeMs, @@ -90,11 +170,27 @@ export async function listSourceFiles(config) { }); } } - return [...files.values()].sort((a, b) => a.relativePath.localeCompare(b.relativePath)); + return { + discoveredFiles, + supportedFiles: [...files.values()].sort((a, b) => a.relativePath.localeCompare(b.relativePath)), + skippedFiles: [...skippedFiles.values()].sort((a, b) => a.relativePath.localeCompare(b.relativePath)), + }; } export function supportedExtensions(config) { return new Set([...DEFAULT_SUPPORTED_EXTENSIONS, ...config.includeExtensions]); } +export function summarizeUnsupportedExtensions(skippedFiles) { + const counts = new Map(); + for (const file of skippedFiles) { + if (file.reason !== "unsupported-extension") { + continue; + } + counts.set(file.extension, (counts.get(file.extension) ?? 0) + 1); + } + return [...counts.entries()] + .sort(([a], [b]) => a.localeCompare(b)) + .map(([extension, count]) => ({ extension, count })); +} async function sourceRoots(config) { const roots = [config.rawDir]; if (!existsSync(config.sourcesFile)) { @@ -110,4 +206,17 @@ async function sourceRoots(config) { } return roots; } +function skippedSourceFile(absolutePath, relativePath, source, extension, bytes) { + const baseName = path.basename(absolutePath).toLowerCase(); + if (!SENSITIVE_FILE_NAMES.has(baseName) && !SENSITIVE_EXTENSIONS.has(extension)) { + return null; + } + return { + relativePath, + source, + extension: extension || NO_EXTENSION, + bytes, + reason: "sensitive-name", + }; +} //# sourceMappingURL=files.js.map \ No newline at end of file diff --git a/packages/mimir/dist/files.js.map b/packages/mimir/dist/files.js.map index 4fe4b90..ed6fb94 100644 --- a/packages/mimir/dist/files.js.map +++ b/packages/mimir/dist/files.js.map @@ -1 +1 @@ -{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/mimir/dist/ingest.d.ts.map b/packages/mimir/dist/ingest.d.ts.map index b46d11b..4447eaf 100644 --- a/packages/mimir/dist/ingest.d.ts.map +++ b/packages/mimir/dist/ingest.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../src/ingest.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,YAAY,EAIb,MAAM,YAAY,CAAA;AAKnB,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CA4D/E;AAED,wBAAsB,KAAK,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAoCrE"} \ No newline at end of file +{"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../src/ingest.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,YAAY,EAKb,MAAM,YAAY,CAAA;AAInB,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CA+E/E;AAED,wBAAsB,KAAK,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CA0DrE"} \ No newline at end of file diff --git a/packages/mimir/dist/ingest.js b/packages/mimir/dist/ingest.js index d9ed010..0d5fe2b 100644 --- a/packages/mimir/dist/ingest.js +++ b/packages/mimir/dist/ingest.js @@ -2,40 +2,51 @@ import { recordAccess } from "./access-log.js"; import { chunkDocument } from "./chunking.js"; import { loadConfig } from "./config.js"; import { embedTexts } from "./embeddings.js"; -import { listSourceFiles } from "./files.js"; +import { inventorySourceFiles, summarizeUnsupportedExtensions } from "./files.js"; import { parseFile } from "./parsing.js"; import { redactText, totalRedactions } from "./redaction.js"; import { openRowsTable, writeRows } from "./store.js"; -const EMBED_BATCH_SIZE = 32; const MAX_AUDIT_ROWS = 100_000; export async function ingest(options = {}) { const config = await loadConfig(String(options.cwd ?? process.cwd())); - const files = await listSourceFiles(config); + const inventory = await inventorySourceFiles(config); + const files = inventory.supportedFiles; const allChunks = []; const errors = []; const redactionCounts = []; - let skippedFiles = 0; - for (const file of files) { + let emptyFiles = 0; + const results = await mapLimit(files, config.ingestConcurrency, async (file) => { try { const parsed = await parseFile(file); const redacted = redactText(parsed.text, config); - redactionCounts.push(...redacted.counts); const chunks = chunkDocument({ ...parsed, text: redacted.text }, config.chunkSize, config.chunkOverlap); - if (chunks.length === 0) { - skippedFiles += 1; - } - allChunks.push(...chunks); + return { chunks, redactions: redacted.counts, error: null }; } catch (error) { - errors.push({ - path: file.relativePath, - message: error instanceof Error ? error.message : String(error), - }); + return { + chunks: [], + redactions: [], + error: { + path: file.relativePath, + message: error instanceof Error ? error.message : String(error), + }, + }; + } + }); + for (const result of results) { + if (result.error) { + errors.push(result.error); + continue; } + redactionCounts.push(...result.redactions); + if (result.chunks.length === 0) { + emptyFiles += 1; + } + allChunks.push(...result.chunks); } const rows = []; - for (let i = 0; i < allChunks.length; i += EMBED_BATCH_SIZE) { - const batch = allChunks.slice(i, i + EMBED_BATCH_SIZE); + for (let i = 0; i < allChunks.length; i += config.embeddingBatchSize) { + const batch = allChunks.slice(i, i + config.embeddingBatchSize); const embeddings = await embedTexts(batch.map((chunk) => chunk.text), config); for (const [index, chunk] of batch.entries()) { const vector = embeddings[index]; @@ -54,20 +65,29 @@ export async function ingest(options = {}) { return { indexedFiles: new Set(rows.map((row) => row.relativePath)).size, chunks: rows.length, - skippedFiles, + discoveredFiles: inventory.discoveredFiles, + supportedFiles: files.length, + skippedFiles: inventory.skippedFiles.length + emptyFiles, + unsupportedFiles: countSkipped(inventory.skippedFiles, "unsupported-extension"), + oversizedFiles: countSkipped(inventory.skippedFiles, "oversized"), + sensitiveFiles: countSkipped(inventory.skippedFiles, "sensitive-name"), + unsupportedExtensions: summarizeUnsupportedExtensions(inventory.skippedFiles), redactions: totalRedactions(redactionCounts), errors, }; } export async function audit(cwd = process.cwd()) { const config = await loadConfig(cwd); - const files = await listSourceFiles(config); + const inventory = await inventorySourceFiles(config); + const files = inventory.supportedFiles; const supportedFiles = files.map((file) => file.relativePath); const table = await openRowsTable(config); if (!table) { return { indexedFiles: [], supportedFiles, + skippedFiles: inventory.skippedFiles, + unsupportedExtensions: summarizeUnsupportedExtensions(inventory.skippedFiles), missingFromIndex: supportedFiles, staleInIndex: [], totalChunks: 0, @@ -75,19 +95,56 @@ export async function audit(cwd = process.cwd()) { } const rows = (await table.query().limit(MAX_AUDIT_ROWS).toArray()); const counts = new Map(); + const checksums = new Map(); for (const row of rows) { counts.set(row.relativePath, (counts.get(row.relativePath) ?? 0) + 1); + if (row.checksum) { + const fileChecksums = checksums.get(row.relativePath) ?? new Set(); + fileChecksums.add(row.checksum); + checksums.set(row.relativePath, fileChecksums); + } } const supportedSet = new Set(supportedFiles); const indexedSet = new Set(counts.keys()); + const currentChecksums = new Map(files.map((file) => [file.relativePath, file.checksum])); return { indexedFiles: [...counts.entries()] .sort(([a], [b]) => a.localeCompare(b)) .map(([source, chunks]) => ({ source, chunks })), supportedFiles, + skippedFiles: inventory.skippedFiles, + unsupportedExtensions: summarizeUnsupportedExtensions(inventory.skippedFiles), missingFromIndex: supportedFiles.filter((file) => !indexedSet.has(file)), - staleInIndex: [...indexedSet].filter((file) => !supportedSet.has(file)).sort(), + staleInIndex: [...indexedSet] + .filter((file) => { + if (!supportedSet.has(file)) { + return true; + } + const currentChecksum = currentChecksums.get(file); + const indexedChecksums = checksums.get(file); + return !currentChecksum || !indexedChecksums?.has(currentChecksum); + }) + .sort(), totalChunks: rows.length, }; } +async function mapLimit(items, concurrency, worker) { + const results = new Array(items.length); + let nextIndex = 0; + async function run() { + while (nextIndex < items.length) { + const index = nextIndex; + nextIndex += 1; + const item = items[index]; + if (item !== undefined) { + results[index] = await worker(item); + } + } + } + await Promise.all(Array.from({ length: Math.min(concurrency, items.length) }, () => run())); + return results; +} +function countSkipped(files, reason) { + return files.filter((file) => file.reason === reason).length; +} //# sourceMappingURL=ingest.js.map \ No newline at end of file diff --git a/packages/mimir/dist/ingest.js.map b/packages/mimir/dist/ingest.js.map index 0192595..9727bdc 100644 --- a/packages/mimir/dist/ingest.js.map +++ b/packages/mimir/dist/ingest.js.map @@ -1 +1 @@ -{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../src/ingest.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../src/ingest.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/mimir/dist/mcp.d.ts b/packages/mimir/dist/mcp.d.ts index a83dc4e..741bb05 100644 --- a/packages/mimir/dist/mcp.d.ts +++ b/packages/mimir/dist/mcp.d.ts @@ -1,2 +1,3 @@ export declare function serveMcp(cwd?: string): Promise; +export declare function resolveMcpProjectRoot(env?: NodeJS.ProcessEnv, fallback?: string): string; //# sourceMappingURL=mcp.d.ts.map \ No newline at end of file diff --git a/packages/mimir/dist/mcp.d.ts.map b/packages/mimir/dist/mcp.d.ts.map index 281a76a..21b2807 100644 --- a/packages/mimir/dist/mcp.d.ts.map +++ b/packages/mimir/dist/mcp.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAeA,wBAAsB,QAAQ,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6EjE"} \ No newline at end of file +{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAeA,wBAAsB,QAAQ,CAAC,GAAG,SAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAgF3E;AAED,wBAAgB,qBAAqB,CACnC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,QAAQ,SAAgB,GACvB,MAAM,CAER"} \ No newline at end of file diff --git a/packages/mimir/dist/mcp.js b/packages/mimir/dist/mcp.js index aa88f56..27c1baa 100644 --- a/packages/mimir/dist/mcp.js +++ b/packages/mimir/dist/mcp.js @@ -11,7 +11,7 @@ const queryToolInputSchema = z.object({ query: z.string().min(1), topK: z.number().int().positive().optional(), }); -export async function serveMcp(cwd = process.cwd()) { +export async function serveMcp(cwd = resolveMcpProjectRoot()) { const server = new McpServer({ name: "mimir", version: VERSION, @@ -35,6 +35,9 @@ export async function serveMcp(cwd = process.cwd()) { llmGeneration: false, redactionEnabled: config.redaction.enabled, mcpMaxTopK: config.mcpMaxTopK, + maxFileBytes: config.maxFileBytes, + ingestConcurrency: config.ingestConcurrency, + embeddingBatchSize: config.embeddingBatchSize, includeExtensions: config.includeExtensions, chunksIndexed, }; @@ -62,6 +65,9 @@ export async function serveMcp(cwd = process.cwd()) { }, async () => textResult(await securityAudit(cwd))); await server.connect(new StdioServerTransport()); } +export function resolveMcpProjectRoot(env = process.env, fallback = process.cwd()) { + return env.MIMIR_PROJECT_ROOT ?? env.CLAUDE_PROJECT_DIR ?? fallback; +} function textResult(value) { return { content: [ diff --git a/packages/mimir/dist/mcp.js.map b/packages/mimir/dist/mcp.js.map index 6158aed..c865678 100644 --- a/packages/mimir/dist/mcp.js.map +++ b/packages/mimir/dist/mcp.js.map @@ -1 +1 @@ -{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/mimir/dist/parsing.d.ts.map b/packages/mimir/dist/parsing.d.ts.map index 91d92ba..01d4299 100644 --- a/packages/mimir/dist/parsing.d.ts.map +++ b/packages/mimir/dist/parsing.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"parsing.d.ts","sourceRoot":"","sources":["../src/parsing.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAI5D,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CA8CzE"} \ No newline at end of file +{"version":3,"file":"parsing.d.ts","sourceRoot":"","sources":["../src/parsing.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAI5D,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAkDzE"} \ No newline at end of file diff --git a/packages/mimir/dist/parsing.js b/packages/mimir/dist/parsing.js index 9ac1219..536cf46 100644 --- a/packages/mimir/dist/parsing.js +++ b/packages/mimir/dist/parsing.js @@ -24,6 +24,9 @@ export async function parseFile(file) { case ".odp": text = await parseOpenDocument(file.absolutePath); break; + case ".epub": + text = await parseEpub(file.absolutePath); + break; case ".html": case ".htm": text = htmlToText(await readFile(file.absolutePath, "utf8"), { @@ -35,6 +38,7 @@ export async function parseFile(file) { }); break; case ".json": + case ".ipynb": text = JSON.stringify(JSON.parse(await readFile(file.absolutePath, "utf8")), null, 2); break; case ".yaml": @@ -86,13 +90,33 @@ async function parseOpenDocument(filePath) { const entries = unzipOfficeFile(await readFile(filePath)); return xmlEntriesToText(entries, [/^content\.xml$/u, /^meta\.xml$/u]); } +async function parseEpub(filePath) { + const entries = unzipOfficeFile(await readFile(filePath)); + const parts = []; + for (const [name, content] of [...entries.entries()].sort(([a], [b]) => a.localeCompare(b))) { + if (!/\.(?:xhtml|html|htm|xml)$/iu.test(name)) { + continue; + } + const text = htmlToText(content, { + wordwrap: false, + selectors: [ + { selector: "a", options: { ignoreHref: true } }, + { selector: "img", format: "skip" }, + ], + }); + if (text.trim()) { + parts.push(text); + } + } + return parts.join("\n\n"); +} function unzipOfficeFile(buffer) { const unzipped = unzipSync(new Uint8Array(buffer), { filter: (file) => file.originalSize <= MAX_OFFICE_XML_ENTRY_BYTES, }); const entries = new Map(); for (const [name, content] of Object.entries(unzipped)) { - if (name.endsWith(".xml")) { + if (/\.(?:xml|xhtml|html|htm)$/iu.test(name)) { entries.set(name, strFromU8(content)); } } diff --git a/packages/mimir/dist/parsing.js.map b/packages/mimir/dist/parsing.js.map index 08091dc..a09df3d 100644 --- a/packages/mimir/dist/parsing.js.map +++ b/packages/mimir/dist/parsing.js.map @@ -1 +1 @@ -{"version":3,"file":"parsing.js","sourceRoot":"","sources":["../src/parsing.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"parsing.js","sourceRoot":"","sources":["../src/parsing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AACrD,OAAO,IAAI,MAAM,MAAM,CAAA;AAGvB,MAAM,0BAA0B,GAAG,UAAU,CAAA;AAE7C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAgB;IAC9C,IAAI,IAAY,CAAA;IAEhB,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;QACvB,KAAK,MAAM;YACT,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACxC,MAAK;QACP,KAAK,OAAO;YACV,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACzC,MAAK;QACP,KAAK,OAAO;YACV,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACzC,MAAK;QACP,KAAK,OAAO;YACV,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACzC,MAAK;QACP,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,IAAI,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACjD,MAAK;QACP,KAAK,OAAO;YACV,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACzC,MAAK;QACP,KAAK,OAAO,CAAC;QACb,KAAK,MAAM;YACT,IAAI,GAAG,UAAU,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE;gBAC3D,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE;oBACT,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE;oBAChD,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;iBACpC;aACF,CAAC,CAAA;YACF,MAAK;QACP,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ;YACX,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YACrF,MAAK;QACP,KAAK,OAAO,CAAC;QACb,KAAK,MAAM;YACT,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;YAC5E,MAAK;QACP,KAAK,MAAM;YACT,IAAI,GAAG,QAAQ,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAA;YAC1D,MAAK;QACP;YACE,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;IACpD,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAA;AAC5C,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,QAAgB;IACvC,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;IACzD,OAAO,gBAAgB,CAAC,OAAO,EAAE;QAC/B,wBAAwB;QACxB,yBAAyB;QACzB,yBAAyB;QACzB,yBAAyB;QACzB,wBAAwB;QACxB,wBAAwB;KACzB,CAAC,CAAA;AACJ,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,QAAgB;IACvC,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;IACzD,OAAO,gBAAgB,CAAC,OAAO,EAAE;QAC/B,+BAA+B;QAC/B,yCAAyC;KAC1C,CAAC,CAAA;AACJ,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,QAAgB;IACvC,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;IACzD,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC,CAAA;IACnF,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;SAClC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACjE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;IAEzC,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;QACnD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAC1B,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IAC/C,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;IACzD,OAAO,gBAAgB,CAAC,OAAO,EAAE,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC,CAAA;AACvE,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,QAAgB;IACvC,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;IACzD,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,SAAQ;QACV,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE;YAC/B,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE;gBACT,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE;gBAChD,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;aACpC;SACF,CAAC,CAAA;QACF,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAC3B,CAAC;AAED,SAAS,eAAe,CAAC,MAAc;IACrC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE;QACjD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,IAAI,0BAA0B;KAClE,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;IACzC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,IAAI,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,OAA4B,EAAE,QAAkB;IACxE,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;YAC3B,IAAI,IAAI,EAAE,CAAC;gBACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAC3B,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW;IACrC,OAAO,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;AACpF,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW,EAAE,aAAuB;IAC5D,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;QAC/D,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC1B,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC;aACjE,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YACjB,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YAChC,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YAClC,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAA;YAC1D,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,SAAS,CAAC,MAAM,CAAC,CAAA;YAC1B,CAAC;YAED,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAA;YAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,EAAE,CAAA;YACX,CAAC;YAED,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;YAC3D,CAAC;YACD,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAA;QACpC,CAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAAC,CAAA;QAElB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,OAAe;IAChD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAClC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AACvC,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,aAAa,CAClB,iBAAiB,CACf,GAAG;SACA,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;SAC3B,OAAO,CAAC,iDAAiD,EAAE,IAAI,CAAC;SAChE,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC;SACzB,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAC/B,CACF,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO,KAAK;SACT,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;SAC5B,OAAO,CAAC,qBAAqB,EAAE,GAAG,CAAC;SACnC,OAAO,CAAC,sBAAsB,EAAE,GAAG,CAAC;SACpC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;AAC3B,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,KAAK;SACT,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;AAC5B,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,QAAgB;IACtC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACvC,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;IAC1D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3D,OAAO,MAAM,CAAC,IAAI,CAAA;AACpB,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK;SACT,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;SACtB,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;SAC1B,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC;SAC5B,IAAI,EAAE,CAAA;AACX,CAAC"} \ No newline at end of file diff --git a/packages/mimir/dist/setup.js b/packages/mimir/dist/setup.js index 41cd655..ce88614 100644 --- a/packages/mimir/dist/setup.js +++ b/packages/mimir/dist/setup.js @@ -39,7 +39,8 @@ function setupNextSteps(report) { if (report.ready) { return [ "Ask questions with the search or ask command shown by `kb doctor`.", - "Connect an AI with .mimir/mcp.json or load .mimir/skills/mimir/.", + "Connect Claude Code with .mimir/claude-mcp-server.json, Codex with .mimir/codex-mcp.toml, or another AI with .mimir/mcp.json.", + "Load .mimir/skills/mimir/ in agents that support skill folders.", ]; } return report.nextSteps; diff --git a/packages/mimir/dist/setup.js.map b/packages/mimir/dist/setup.js.map index 7a2cf39..4b21fd3 100644 --- a/packages/mimir/dist/setup.js.map +++ b/packages/mimir/dist/setup.js.map @@ -1 +1 @@ -{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,SAAS,EAAuB,MAAM,sBAAsB,CAAA;AACrE,OAAO,EAA2B,YAAY,EAAE,MAAM,YAAY,CAAA;AAoBlE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAwB,EAAE;IAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAA;IACtC,MAAM,cAAc,GAAuC,EAAE,GAAG,EAAE,CAAA;IAClE,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACpC,cAAc,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;IAC9C,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,CAAA;IACnD,IAAI,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAA;IAC9B,IAAI,QAAQ,GAAwB,IAAI,CAAA;IAExC,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QACtD,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/C,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEhD,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,UAAU,EAAE,OAAO,CAAC,OAAO;QAC3B,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC;KAClC,CAAA;AACH,CAAC;AAED,SAAS,aAAa,CAAC,MAAoB;IACzC,OAAO,CACL,MAAM,CAAC,cAAc,GAAG,CAAC;QACzB,MAAM,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC;QACpC,CAAC,MAAM,CAAC,aAAa,KAAK,CAAC,IAAI,MAAM,CAAC,gBAAgB,GAAG,CAAC,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,CACvF,CAAA;AACH,CAAC;AAED,SAAS,cAAc,CAAC,MAAoB;IAC1C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO;YACL,oEAAoE;YACpE,kEAAkE;SACnE,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAC,SAAS,CAAA;AACzB,CAAC"} \ No newline at end of file +{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,SAAS,EAAuB,MAAM,sBAAsB,CAAA;AACrE,OAAO,EAA2B,YAAY,EAAE,MAAM,YAAY,CAAA;AAoBlE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAwB,EAAE;IAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAA;IACtC,MAAM,cAAc,GAAuC,EAAE,GAAG,EAAE,CAAA;IAClE,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACpC,cAAc,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;IAC9C,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,CAAA;IACnD,IAAI,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAA;IAC9B,IAAI,QAAQ,GAAwB,IAAI,CAAA;IAExC,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QACtD,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/C,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEhD,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,UAAU,EAAE,OAAO,CAAC,OAAO;QAC3B,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC;KAClC,CAAA;AACH,CAAC;AAED,SAAS,aAAa,CAAC,MAAoB;IACzC,OAAO,CACL,MAAM,CAAC,cAAc,GAAG,CAAC;QACzB,MAAM,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC;QACpC,CAAC,MAAM,CAAC,aAAa,KAAK,CAAC,IAAI,MAAM,CAAC,gBAAgB,GAAG,CAAC,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,CACvF,CAAA;AACH,CAAC;AAED,SAAS,cAAc,CAAC,MAAoB;IAC1C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO;YACL,oEAAoE;YACpE,+HAA+H;YAC/H,iEAAiE;SAClE,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAC,SAAS,CAAA;AACzB,CAAC"} \ No newline at end of file diff --git a/packages/mimir/dist/skill.d.ts b/packages/mimir/dist/skill.d.ts index fc7d323..fc56f15 100644 --- a/packages/mimir/dist/skill.d.ts +++ b/packages/mimir/dist/skill.d.ts @@ -5,7 +5,10 @@ export interface InstallSkillOptions { export interface InstallSkillResult { skillPath: string; audioSkillPath: string; + reportSkillPath: string; mcpConfigPath: string; + claudeConfigPath: string; + codexConfigPath: string; readmePath: string; written: string[]; } diff --git a/packages/mimir/dist/skill.d.ts.map b/packages/mimir/dist/skill.d.ts.map index 7b1f8fd..8d0e555 100644 --- a/packages/mimir/dist/skill.d.ts.map +++ b/packages/mimir/dist/skill.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAMD,wBAAgB,gBAAgB,CAAC,SAAS,SAAqB,GAAG,MAAM,CAEvE;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAoDjG"} \ No newline at end of file +{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAOD,wBAAgB,gBAAgB,CAAC,SAAS,SAAqB,GAAG,MAAM,CAEvE;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAyEjG"} \ No newline at end of file diff --git a/packages/mimir/dist/skill.js b/packages/mimir/dist/skill.js index 37e8591..4a54139 100644 --- a/packages/mimir/dist/skill.js +++ b/packages/mimir/dist/skill.js @@ -7,6 +7,7 @@ import { kbCommand } from "./package-manager.js"; const PACKAGE_ROOT = path.dirname(path.dirname(fileURLToPath(import.meta.url))); const PRIMARY_SKILL_NAME = "mimir"; const AUDIO_SKILL_NAME = "mimir-audio-summary"; +const REPORT_SKILL_NAME = "mimir-markdown-report"; export function bundledSkillPath(skillName = PRIMARY_SKILL_NAME) { return path.join(PACKAGE_ROOT, "skills", skillName); } @@ -15,22 +16,34 @@ export async function installSkill(options = {}) { const targetDir = path.resolve(cwd, options.targetDir ?? DEFAULT_SKILL_TARGET_DIR); const skillPath = path.join(targetDir, PRIMARY_SKILL_NAME); const audioSkillPath = path.join(targetDir, AUDIO_SKILL_NAME); + const reportSkillPath = path.join(targetDir, REPORT_SKILL_NAME); const mimirDir = path.resolve(cwd, MIMIR_DIR); const mcpConfigPath = path.join(mimirDir, "mcp.json"); + const claudeConfigPath = path.join(mimirDir, "claude-mcp-server.json"); + const codexConfigPath = path.join(mimirDir, "codex-mcp.toml"); const readmePath = path.join(mimirDir, "README.md"); await mkdir(targetDir, { recursive: true }); await mkdir(mimirDir, { recursive: true }); await cp(bundledSkillPath(PRIMARY_SKILL_NAME), skillPath, { recursive: true, force: true }); await cp(bundledSkillPath(AUDIO_SKILL_NAME), audioSkillPath, { recursive: true, force: true }); + await cp(bundledSkillPath(REPORT_SKILL_NAME), reportSkillPath, { + recursive: true, + force: true, + }); const serveCommand = await kbCommand(cwd, ["serve-mcp"]); const doctorCommand = await kbCommand(cwd, ["doctor"]); await writeFile(mcpConfigPath, `${JSON.stringify(mcpConfig(cwd, serveCommand), null, 2)}\n`, "utf8"); - await writeFile(readmePath, agentKitReadme(skillPath, audioSkillPath, mcpConfigPath, serveCommand.display, doctorCommand.display), "utf8"); + await writeFile(claudeConfigPath, `${JSON.stringify(claudeMcpServer(serveCommand), null, 2)}\n`, "utf8"); + await writeFile(codexConfigPath, codexMcpConfig(cwd, serveCommand), "utf8"); + await writeFile(readmePath, agentKitReadme(skillPath, audioSkillPath, reportSkillPath, mcpConfigPath, codexConfigPath, serveCommand.display, doctorCommand.display), "utf8"); const wroteGitignore = await ensureMimirGitignore(cwd); const written = [ path.relative(cwd, skillPath), path.relative(cwd, audioSkillPath), + path.relative(cwd, reportSkillPath), path.relative(cwd, mcpConfigPath), + path.relative(cwd, claudeConfigPath), + path.relative(cwd, codexConfigPath), path.relative(cwd, readmePath), ]; if (wroteGitignore) { @@ -39,7 +52,10 @@ export async function installSkill(options = {}) { return { skillPath, audioSkillPath, + reportSkillPath, mcpConfigPath, + claudeConfigPath, + codexConfigPath, readmePath, written, }; @@ -55,7 +71,28 @@ function mcpConfig(cwd, serveCommand) { }, }; } -function agentKitReadme(skillPath, audioSkillPath, mcpConfigPath, serveCommand, doctorCommand) { +function claudeMcpServer(serveCommand) { + return { + type: "stdio", + command: serveCommand.command, + args: serveCommand.args, + }; +} +function codexMcpConfig(cwd, serveCommand) { + return `[mcp_servers.mimir] +command = ${tomlString(serveCommand.command)} +args = ${tomlArray(serveCommand.args)} +cwd = ${tomlString(cwd)} + +`; +} +function tomlArray(values) { + return `[${values.map(tomlString).join(", ")}]`; +} +function tomlString(value) { + return JSON.stringify(value); +} +function agentKitReadme(skillPath, audioSkillPath, reportSkillPath, mcpConfigPath, codexConfigPath, serveCommand, doctorCommand) { return `# Mimir Agent Kit This folder contains portable agent instructions for Mimir. @@ -80,6 +117,15 @@ Use it only when the user asks for a listenable summary. It renders generated au local Mimir state by default. Use Transformers.js WAV for confidential content and Edge MP3 only when online TTS is explicitly acceptable. +Optional Markdown-report skill folder: + +\`\`\`plain text +${reportSkillPath} +\`\`\` + +Use it when the user asks for a cited Markdown report, dossier, audit memo, or planning note. It +writes reports under ignored local Mimir state by default. + ## MCP MCP config example: @@ -94,6 +140,26 @@ Use the MCP server when your agent supports MCP tools. The server command is: ${serveCommand} \`\`\` +Claude Code local setup: + +\`\`\`bash +claude mcp add-json --scope local mimir "$(cat ${MIMIR_DIR}/claude-mcp-server.json)" +\`\`\` + +Run that command from this repository root. Mimir also reads \`CLAUDE_PROJECT_DIR\`, so the server +uses the active Claude Code project as the knowledge-base root. + +For other MCP clients that cannot set a working directory, launch the server with +\`MIMIR_PROJECT_ROOT=/absolute/path/to/repository\`. + +Codex setup: + +\`\`\`plain text +${codexConfigPath} +\`\`\` + +Copy that TOML snippet into \`~/.codex/config.toml\` or another trusted Codex config layer. + Before relying on retrieved context, run: \`\`\`bash diff --git a/packages/mimir/dist/skill.js.map b/packages/mimir/dist/skill.js.map index 6197171..d7fe6f4 100644 --- a/packages/mimir/dist/skill.js.map +++ b/packages/mimir/dist/skill.js.map @@ -1 +1 @@ -{"version":3,"file":"skill.js","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,wBAAwB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAehD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAC/E,MAAM,kBAAkB,GAAG,OAAO,CAAA;AAClC,MAAM,gBAAgB,GAAG,qBAAqB,CAAA;AAE9C,MAAM,UAAU,gBAAgB,CAAC,SAAS,GAAG,kBAAkB;IAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAA+B,EAAE;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IACtD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,IAAI,wBAAwB,CAAC,CAAA;IAClF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAA;IAC1D,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAA;IAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;IAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;IAEnD,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3C,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,MAAM,EAAE,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3F,MAAM,EAAE,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAE9F,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;IACxD,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IACtD,MAAM,SAAS,CACb,aAAa,EACb,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAC5D,MAAM,CACP,CAAA;IACD,MAAM,SAAS,CACb,UAAU,EACV,cAAc,CACZ,SAAS,EACT,cAAc,EACd,aAAa,EACb,YAAY,CAAC,OAAO,EACpB,aAAa,CAAC,OAAO,CACtB,EACD,MAAM,CACP,CAAA;IACD,MAAM,cAAc,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,CAAA;IAEtD,MAAM,OAAO,GAAG;QACd,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;KAC/B,CAAA;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC5B,CAAC;IAED,OAAO;QACL,SAAS;QACT,cAAc;QACd,aAAa;QACb,UAAU;QACV,OAAO;KACR,CAAA;AACH,CAAC;AAED,SAAS,SAAS,CAAC,GAAW,EAAE,YAAmD;IACjF,OAAO;QACL,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,OAAO,EAAE,YAAY,CAAC,OAAO;gBAC7B,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,GAAG;aACJ;SACF;KACF,CAAA;AACH,CAAC;AAED,SAAS,cAAc,CACrB,SAAiB,EACjB,cAAsB,EACtB,aAAqB,EACrB,YAAoB,EACpB,aAAqB;IAErB,OAAO;;;;;;;;;EASP,SAAS;;;;;;;;EAQT,cAAc;;;;;;;;;;;;EAYd,aAAa;;;;;;EAMb,YAAY;;;;;;EAMZ,aAAa;;;CAGd,CAAA;AACD,CAAC"} \ No newline at end of file +{"version":3,"file":"skill.js","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/mimir/dist/types.d.ts b/packages/mimir/dist/types.d.ts index cf360cb..27a70b1 100644 --- a/packages/mimir/dist/types.d.ts +++ b/packages/mimir/dist/types.d.ts @@ -17,6 +17,9 @@ export interface Config { topK: number; chunkSize: number; chunkOverlap: number; + maxFileBytes: number; + ingestConcurrency: number; + embeddingBatchSize: number; includeExtensions: string[]; } export type EmbeddingProvider = "local-hash" | "transformers"; @@ -44,6 +47,19 @@ export interface SourceFile { mtimeMs: number; checksum: string; } +export type SkippedSourceReason = "unsupported-extension" | "oversized" | "sensitive-name"; +export interface SkippedSourceFile { + relativePath: string; + source: string; + extension: string; + bytes: number; + reason: SkippedSourceReason; +} +export interface SourceInventory { + discoveredFiles: number; + supportedFiles: SourceFile[]; + skippedFiles: SkippedSourceFile[]; +} export interface ParsedDocument { file: SourceFile; text: string; @@ -66,9 +82,18 @@ export interface IngestOptions { rebuild?: boolean; } export interface IngestResult { + discoveredFiles: number; + supportedFiles: number; indexedFiles: number; chunks: number; skippedFiles: number; + unsupportedFiles: number; + oversizedFiles: number; + sensitiveFiles: number; + unsupportedExtensions: Array<{ + extension: string; + count: number; + }>; redactions: number; errors: Array<{ path: string; @@ -96,6 +121,11 @@ export interface AuditReport { chunks: number; }>; supportedFiles: string[]; + skippedFiles: SkippedSourceFile[]; + unsupportedExtensions: Array<{ + extension: string; + count: number; + }>; missingFromIndex: string[]; staleInIndex: string[]; totalChunks: number; @@ -118,6 +148,8 @@ export interface DoctorReport { redactionEnabled: boolean; accessLog: boolean; supportedFiles: number; + skippedFiles: number; + unsupportedFiles: number; indexedFiles: number; chunksIndexed: number; missingFromIndex: number; diff --git a/packages/mimir/dist/types.d.ts.map b/packages/mimir/dist/types.d.ts.map index a0e9a79..61bc4df 100644 --- a/packages/mimir/dist/types.d.ts.map +++ b/packages/mimir/dist/types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/mimir/dist/version.d.ts b/packages/mimir/dist/version.d.ts index d973dfe..0c5cd99 100644 --- a/packages/mimir/dist/version.d.ts +++ b/packages/mimir/dist/version.d.ts @@ -1,2 +1,2 @@ -export declare const VERSION = "0.4.6"; +export declare const VERSION = "0.4.7"; //# sourceMappingURL=version.d.ts.map \ No newline at end of file diff --git a/packages/mimir/dist/version.js b/packages/mimir/dist/version.js index abae8cf..fb35f2c 100644 --- a/packages/mimir/dist/version.js +++ b/packages/mimir/dist/version.js @@ -1,2 +1,2 @@ -export const VERSION = "0.4.6"; +export const VERSION = "0.4.7"; //# sourceMappingURL=version.js.map \ No newline at end of file diff --git a/packages/mimir/examples/sovereign-rag-demo/README.md b/packages/mimir/examples/sovereign-rag-demo/README.md index 67f4fef..ef89312 100644 --- a/packages/mimir/examples/sovereign-rag-demo/README.md +++ b/packages/mimir/examples/sovereign-rag-demo/README.md @@ -13,6 +13,7 @@ This folder must never contain real-world sensitive, regulated, or production do - JSONL incident timelines. - YAML policy metadata. - A custom `.evidence` text extension enabled through `.kb/config.json`. +- Unsupported/skipped-file reporting through `audit --unsupported`. ## Run From This Repository Checkout @@ -32,6 +33,7 @@ node ../../dist/cli.js search "offline retrieval approval" node ../../dist/cli.js search "dataset residency" node ../../dist/cli.js ask "What evidence supports offline operation?" node ../../dist/cli.js audit +node ../../dist/cli.js audit --unsupported node ../../dist/cli.js status ``` @@ -46,6 +48,17 @@ Retrieval is lexical/hash-based rather than model-semantic. - `who owns the usage review` - `what documents support sovereign deployment` +## Agent Report Prompt + +After running `kb setup` in a real project, an MCP-compatible agent can use the generated +`.mimir/mcp.json`. For this synthetic demo, ask an agent: + +```plain text +Use Mimir to inspect the local knowledge base, search for "offline retrieval approval", and write a +cited Markdown report under .mimir/reports/demo-sovereign-rag.md. Mention any unsupported or stale +files reported by the audit. +``` + ## Switch To Transformers Semantic Mode To compare no-model retrieval with semantic local retrieval, change `.kb/config.json`: diff --git a/packages/mimir/examples/sovereign-rag-demo/raw/facility-scan.heic b/packages/mimir/examples/sovereign-rag-demo/raw/facility-scan.heic new file mode 100644 index 0000000..29aebfb --- /dev/null +++ b/packages/mimir/examples/sovereign-rag-demo/raw/facility-scan.heic @@ -0,0 +1,3 @@ +Synthetic placeholder for an unsupported scanned document format. + +Convert scans to OCR text or PDF before expecting Mimir to index their content. diff --git a/packages/mimir/package.json b/packages/mimir/package.json index 7b43a46..a4e3d9f 100644 --- a/packages/mimir/package.json +++ b/packages/mimir/package.json @@ -1,6 +1,6 @@ { "name": "@jcode.labs/mimir", - "version": "0.4.6", + "version": "0.4.7", "description": "Mimir: open-source sovereign local RAG for confidential datasets and AI agents.", "type": "module", "license": "MIT", diff --git a/packages/mimir/skills/mimir-audio-summary/SKILL.md b/packages/mimir/skills/mimir-audio-summary/SKILL.md index fec5109..40006eb 100644 --- a/packages/mimir/skills/mimir-audio-summary/SKILL.md +++ b/packages/mimir/skills/mimir-audio-summary/SKILL.md @@ -33,6 +33,7 @@ From the repository root, run: pnpm exec kb doctor pnpm exec kb status pnpm exec kb audit +pnpm exec kb audit --unsupported pnpm exec kb security-audit ``` @@ -40,7 +41,7 @@ If the audit reports missing or stale files, run: ```bash pnpm exec kb doctor --fix -pnpm exec kb audit +pnpm exec kb audit --unsupported ``` `kb doctor --fix` rebuilds the index only when supported files are present and the privacy posture diff --git a/packages/mimir/skills/mimir-markdown-report/SKILL.md b/packages/mimir/skills/mimir-markdown-report/SKILL.md new file mode 100644 index 0000000..b5f513d --- /dev/null +++ b/packages/mimir/skills/mimir-markdown-report/SKILL.md @@ -0,0 +1,110 @@ +--- +name: mimir-markdown-report +description: >- + Create a cited Markdown report from a Mimir local knowledge base. Use when the user asks for a + report, dossier, audit memo, planning note, evidence summary, or Markdown deliverable grounded in + private repository documents indexed by Mimir. +--- + +# Mimir Markdown Report + +Use this skill to write a Markdown report from local Mimir evidence without leaking raw documents. +Generated reports are derived artifacts and should stay local unless the user explicitly decides a +sanitized report is safe to commit or share. + +## Confidentiality Rules + +- Treat source documents, retrieved passages, notes, drafts, and generated reports as sensitive. +- Prefer writing reports under `.mimir/reports/`, which is ignored by Git when Mimir is installed. +- Do not commit generated reports by default. +- Do not paste long raw passages into the report. Use summaries, short cited extracts when needed, + and source references. +- Separate proven facts, inference, uncertainty, and missing evidence. +- For legal, tax, medical, immigration, financial, or compliance reports, include a professional + review section instead of presenting the report as final advice. + +## 1. Verify The Knowledge Base + +From the repository root: + +```bash +pnpm exec kb doctor +pnpm exec kb audit +pnpm exec kb security-audit +``` + +If files are missing, stale, or setup is incomplete: + +```bash +pnpm exec kb doctor --fix +pnpm exec kb audit --unsupported +``` + +Do not write a final report from stale evidence unless the user explicitly accepts that limitation. + +## 2. Build An Evidence Plan + +For a broad report, use multiple targeted retrieval passes instead of one generic query: + +```bash +pnpm exec kb search "
" --top-k 8 +pnpm exec kb search "" --top-k 8 +pnpm exec kb ask "" --top-k 8 +``` + +When MCP is available, prefer `mimir_search`, `mimir_ask`, `mimir_audit`, and +`mimir_security_audit` over shell commands. + +Keep a working note of source paths and chunk numbers for each claim you plan to include. + +## 3. Write The Report + +Default report structure: + +```markdown +# + +## Scope + +## Executive Summary + +## Evidence Inventory + +## Findings + +## Risks And Open Questions + +## Recommended Next Actions + +## Sources +``` + +Use tables only when they make comparisons easier. Keep each finding tied to one or more source +paths and chunk numbers when possible. + +## 4. Save Locally + +Create the report directory: + +```bash +mkdir -p .mimir/reports +``` + +Write the report to: + +```plain text +.mimir/reports/.md +``` + +If the user explicitly wants a tracked report, create a sanitized file outside `.mimir/` and state +which private details were excluded. + +## 5. Report The Result + +After writing the report, tell the user: + +- the report path; +- whether the index was ready; +- how many source paths were used; +- any unsupported, stale, or missing files that weaken the report; +- whether the report is safe to commit or should remain local. diff --git a/packages/mimir/skills/mimir/SKILL.md b/packages/mimir/skills/mimir/SKILL.md index d28fb6e..5ad44d0 100644 --- a/packages/mimir/skills/mimir/SKILL.md +++ b/packages/mimir/skills/mimir/SKILL.md @@ -23,6 +23,7 @@ private/ # raw documents to ingest .kb/sources.txt # optional extra source paths .kb/storage/ # generated local index .kb/access.log # metadata-only access log +.mimir/reports/ # generated local Markdown reports ``` ## Data Safety @@ -63,7 +64,7 @@ npx kb setup ``` Use `status`, `audit`, and `security-audit` for deeper checks after `doctor` explains the current -state. +state. Use `audit --unsupported` when files exist but may not have been indexed. ## Provider Modes @@ -100,6 +101,7 @@ After documents are added or changed: ```bash pnpm exec kb doctor --fix pnpm exec kb audit +pnpm exec kb audit --unsupported pnpm exec kb security-audit pnpm exec kb status ``` @@ -160,6 +162,18 @@ If the agent supports MCP, configure a server for the repository: } ``` +For Claude Code, run this from the target repository root after `pnpm exec kb setup`: + +```bash +claude mcp add-json --scope local mimir "$(cat .mimir/claude-mcp-server.json)" +``` + +For Codex, copy `.mimir/codex-mcp.toml` into `~/.codex/config.toml` or another trusted Codex config +layer. + +For other MCP clients that cannot set `cwd`, set `MIMIR_PROJECT_ROOT=/absolute/path/to/repository` +when launching `kb serve-mcp`. + Available MCP tools: - `mimir_status`: show config and chunk count. @@ -178,13 +192,26 @@ destroy-index --yes` from the shell when the user explicitly wants to remove the If the user asks for a listenable or TTS summary, load the optional `.mimir/skills/mimir-audio-summary/` skill installed by `pnpm exec kb setup`. -That skill should: +The audio skill should: - gather evidence through Mimir first; - write narration text only to a temp file outside the repository; - render generated audio under `.mimir/audio/` by default; - prefer offline TTS engines for confidential content. +## Optional Markdown Reports + +If the user asks for a Markdown report, dossier, audit memo, planning note, or decision brief, load +the optional `.mimir/skills/mimir-markdown-report/` skill installed by `pnpm exec kb setup`. + +The report skill should: + +- gather evidence through multiple Mimir searches first; +- cite source paths and chunk numbers; +- separate facts, inference, uncertainty, and missing evidence; +- write reports under `.mimir/reports/` by default; +- keep generated reports uncommitted unless the user explicitly wants a sanitized tracked report. + ## Installing This Skill Into A Repository Most repositories should run the full setup command: @@ -204,11 +231,16 @@ This creates: ```plain text .mimir/skills/mimir/SKILL.md +.mimir/skills/mimir-audio-summary/SKILL.md +.mimir/skills/mimir-markdown-report/SKILL.md .mimir/mcp.json +.mimir/claude-mcp-server.json +.mimir/codex-mcp.toml .mimir/README.md ``` -Agents that understand skill folders can load `.mimir/skills/mimir/`. Other agents can read `.mimir/README.md` and `.mimir/mcp.json`. +Agents that understand skill folders can load `.mimir/skills/mimir/`. Other agents can read +`.mimir/README.md` and `.mimir/mcp.json`. ## Answer Style diff --git a/packages/mimir/src/cli.ts b/packages/mimir/src/cli.ts index 51f9dc2..0d033e1 100644 --- a/packages/mimir/src/cli.ts +++ b/packages/mimir/src/cli.ts @@ -108,9 +108,16 @@ program const result = await ingest({ cwd: process.cwd(), rebuild: true }) console.log( pc.green( - `Done. indexedFiles=${result.indexedFiles} chunks=${result.chunks} skippedFiles=${result.skippedFiles} redactions=${result.redactions} errors=${result.errors.length}`, + `Done. discoveredFiles=${result.discoveredFiles} supportedFiles=${result.supportedFiles} indexedFiles=${result.indexedFiles} chunks=${result.chunks} skippedFiles=${result.skippedFiles} unsupportedFiles=${result.unsupportedFiles} oversizedFiles=${result.oversizedFiles} sensitiveFiles=${result.sensitiveFiles} redactions=${result.redactions} errors=${result.errors.length}`, ), ) + printUnsupportedSummary(result.unsupportedExtensions) + if (result.unsupportedFiles > 0 || result.oversizedFiles > 0 || result.sensitiveFiles > 0) { + const auditCommand = await kbCommand(process.cwd(), ["audit", "--unsupported"]) + console.log( + pc.yellow(`Some files were not indexed. Run \`${auditCommand.display}\` for details.`), + ) + } for (const error of result.errors) { console.error(pc.red(` - ${error.path}: ${error.message}`)) } @@ -161,13 +168,24 @@ program program .command("audit") .description("Compare supported files on disk with the current vector index.") - .action(async () => { + .option("--unsupported", "List skipped file paths and reasons.") + .option("--json", "Print machine-readable JSON.") + .action(async (options: { unsupported?: boolean; json?: boolean }) => { const report = await audit(process.cwd()) + if (options.json) { + console.log(JSON.stringify(report, null, 2)) + return + } console.log(`supportedFiles=${report.supportedFiles.length}`) + console.log(`skippedFiles=${report.skippedFiles.length}`) + console.log( + `unsupportedFiles=${report.skippedFiles.filter((file) => file.reason === "unsupported-extension").length}`, + ) console.log(`indexedFiles=${report.indexedFiles.length}`) console.log(`totalChunks=${report.totalChunks}`) console.log(`missingFromIndex=${report.missingFromIndex.length}`) console.log(`staleInIndex=${report.staleInIndex.length}`) + printUnsupportedSummary(report.unsupportedExtensions) for (const file of report.missingFromIndex) { console.log(pc.yellow(`missing: ${file}`)) @@ -175,6 +193,13 @@ program for (const file of report.staleInIndex) { console.log(pc.red(`stale: ${file}`)) } + if (options.unsupported) { + for (const file of report.skippedFiles) { + console.log(pc.yellow(`skipped: ${file.relativePath} reason=${file.reason}`)) + } + } else if (report.skippedFiles.length > 0) { + console.log(pc.yellow("Run `kb audit --unsupported` to list skipped file paths.")) + } if (report.missingFromIndex.length > 0 || report.staleInIndex.length > 0) { process.exitCode = 1 @@ -199,6 +224,9 @@ program console.log(`redactionEnabled=${config.redaction.enabled}`) console.log(`accessLog=${config.accessLog}`) console.log(`mcpMaxTopK=${config.mcpMaxTopK}`) + console.log(`maxFileBytes=${config.maxFileBytes}`) + console.log(`ingestConcurrency=${config.ingestConcurrency}`) + console.log(`embeddingBatchSize=${config.embeddingBatchSize}`) console.log(`includeExtensions=${config.includeExtensions.join(",")}`) console.log(`chunksIndexed=${rows}`) }) @@ -307,7 +335,7 @@ program "Start the MCP server over stdio for Claude, Codex, and other MCP-compatible agents.", ) .action(async () => { - await serveMcp(process.cwd()) + await serveMcp() }) program @@ -334,10 +362,15 @@ program } console.log(`Skill path: ${result.skillPath}`) console.log(`Optional audio skill path: ${result.audioSkillPath}`) + console.log(`Optional Markdown report skill path: ${result.reportSkillPath}`) console.log(`MCP config example: ${result.mcpConfigPath}`) + console.log(`Claude Code MCP server JSON: ${result.claudeConfigPath}`) + console.log(`Codex MCP TOML snippet: ${result.codexConfigPath}`) console.log("") console.log("Next steps:") - console.log(" 1. Add the MCP config from .mimir/mcp.json to your agent if it supports MCP.") + console.log( + " 1. Add the MCP config from .mimir/ to Claude Code, Codex, or another MCP client.", + ) console.log(" 2. Load .mimir/skills/mimir/ in agents that support skill folders.") console.log(` 3. Run \`${doctorCommand.display}\` before relying on retrieved context.`) }) @@ -462,6 +495,8 @@ function printDoctor(report: Awaited>): void { console.log(`redactionEnabled=${report.redactionEnabled}`) console.log(`accessLog=${report.accessLog}`) console.log(`supportedFiles=${report.supportedFiles}`) + console.log(`skippedFiles=${report.skippedFiles}`) + console.log(`unsupportedFiles=${report.unsupportedFiles}`) console.log(`indexedFiles=${report.indexedFiles}`) console.log(`chunksIndexed=${report.chunksIndexed}`) console.log(`missingFromIndex=${report.missingFromIndex}`) @@ -496,13 +531,17 @@ function printSetup(result: Awaited>, title: str console.log(pc.cyan("Agent integration:")) console.log(` - skill: ${result.agentKit.skillPath}`) console.log(` - audio skill: ${result.agentKit.audioSkillPath}`) + console.log(` - report skill: ${result.agentKit.reportSkillPath}`) console.log(` - MCP config: ${result.agentKit.mcpConfigPath}`) + console.log(` - Claude Code MCP JSON: ${result.agentKit.claudeConfigPath}`) + console.log(` - Codex MCP TOML: ${result.agentKit.codexConfigPath}`) console.log("") console.log(pc.cyan("Index:")) if (result.ingested) { console.log( - ` - ingested indexedFiles=${result.ingested.indexedFiles} chunks=${result.ingested.chunks} errors=${result.ingested.errors.length}`, + ` - ingested indexedFiles=${result.ingested.indexedFiles} chunks=${result.ingested.chunks} skippedFiles=${result.ingested.skippedFiles} errors=${result.ingested.errors.length}`, ) + printUnsupportedSummary(result.ingested.unsupportedExtensions) } else if (result.doctor.ready) { console.log(` - already ready chunks=${result.doctor.chunksIndexed}`) } else { @@ -512,6 +551,19 @@ function printSetup(result: Awaited>, title: str printDoctor(result.doctor) } +function printUnsupportedSummary(extensions: Array<{ extension: string; count: number }>): void { + if (extensions.length === 0) { + return + } + console.log( + pc.yellow( + `unsupportedExtensions=${extensions + .map((entry) => `${entry.extension}:${entry.count}`) + .join(",")}`, + ), + ) +} + function printMaybeJson(value: unknown, json: boolean | undefined): void { if (json) { console.log(JSON.stringify(value, null, 2)) diff --git a/packages/mimir/src/config.ts b/packages/mimir/src/config.ts index 70e8efe..b6052df 100644 --- a/packages/mimir/src/config.ts +++ b/packages/mimir/src/config.ts @@ -38,6 +38,9 @@ const rawConfigSchema = z.object({ topK: z.number().int().positive().default(DEFAULT_CONFIG.topK), chunkSize: z.number().int().positive().default(DEFAULT_CONFIG.chunkSize), chunkOverlap: z.number().int().nonnegative().default(DEFAULT_CONFIG.chunkOverlap), + maxFileBytes: z.number().int().positive().default(DEFAULT_CONFIG.maxFileBytes), + ingestConcurrency: z.number().int().positive().default(DEFAULT_CONFIG.ingestConcurrency), + embeddingBatchSize: z.number().int().positive().default(DEFAULT_CONFIG.embeddingBatchSize), includeExtensions: z.array(z.string().min(1)).default(DEFAULT_CONFIG.includeExtensions), }) @@ -88,6 +91,9 @@ export async function loadConfig(start = process.cwd()): Promise { topK: withEnv.topK, chunkSize: withEnv.chunkSize, chunkOverlap: withEnv.chunkOverlap, + maxFileBytes: withEnv.maxFileBytes, + ingestConcurrency: withEnv.ingestConcurrency, + embeddingBatchSize: withEnv.embeddingBatchSize, includeExtensions: normalizeExtensions(withEnv.includeExtensions), } } @@ -120,6 +126,9 @@ function applyEnv(config: RawConfig): RawConfig { topK: readPositiveIntEnv("KB_TOP_K", config.topK), chunkSize: readPositiveIntEnv("KB_CHUNK_SIZE", config.chunkSize), chunkOverlap: readNonNegativeIntEnv("KB_CHUNK_OVERLAP", config.chunkOverlap), + maxFileBytes: readPositiveIntEnv("KB_MAX_FILE_BYTES", config.maxFileBytes), + ingestConcurrency: readPositiveIntEnv("KB_INGEST_CONCURRENCY", config.ingestConcurrency), + embeddingBatchSize: readPositiveIntEnv("KB_EMBEDDING_BATCH_SIZE", config.embeddingBatchSize), includeExtensions: readExtensionsEnv("KB_INCLUDE_EXTENSIONS", config.includeExtensions), } } diff --git a/packages/mimir/src/defaults.ts b/packages/mimir/src/defaults.ts index 784f521..a7046df 100644 --- a/packages/mimir/src/defaults.ts +++ b/packages/mimir/src/defaults.ts @@ -30,5 +30,8 @@ export const DEFAULT_CONFIG: Omit = { topK: 5, chunkSize: 1200, chunkOverlap: 150, + maxFileBytes: 50_000_000, + ingestConcurrency: 4, + embeddingBatchSize: 32, includeExtensions: [], } diff --git a/packages/mimir/src/doctor.ts b/packages/mimir/src/doctor.ts index a7f1d32..fa184e3 100644 --- a/packages/mimir/src/doctor.ts +++ b/packages/mimir/src/doctor.ts @@ -23,6 +23,10 @@ export async function doctor(cwd = process.cwd()): Promise { const nextSteps = nextActions({ initialized, supportedFiles: auditReport.supportedFiles.length, + skippedFiles: auditReport.skippedFiles.length, + unsupportedFiles: auditReport.skippedFiles.filter( + (file) => file.reason === "unsupported-extension", + ).length, chunksIndexed, missingFromIndex: auditReport.missingFromIndex.length, staleInIndex: auditReport.staleInIndex.length, @@ -44,6 +48,10 @@ export async function doctor(cwd = process.cwd()): Promise { redactionEnabled: config.redaction.enabled, accessLog: config.accessLog, supportedFiles: auditReport.supportedFiles.length, + skippedFiles: auditReport.skippedFiles.length, + unsupportedFiles: auditReport.skippedFiles.filter( + (file) => file.reason === "unsupported-extension", + ).length, indexedFiles: auditReport.indexedFiles.length, chunksIndexed, missingFromIndex: auditReport.missingFromIndex.length, @@ -62,6 +70,8 @@ export async function doctor(cwd = process.cwd()): Promise { interface NextActionInput { initialized: boolean supportedFiles: number + skippedFiles: number + unsupportedFiles: number chunksIndexed: number missingFromIndex: number staleInIndex: number @@ -79,7 +89,15 @@ function nextActions(input: NextActionInput): string[] { } if (input.supportedFiles === 0) { - steps.push("Add supported files under private/ or list extra source paths in .kb/sources.txt.") + if (input.skippedFiles > 0) { + steps.push( + "Mimir found files, but none are currently indexable. Run `kb audit --unsupported` to inspect skipped files.", + ) + } else { + steps.push( + "Add supported files under private/ or list extra source paths in .kb/sources.txt.", + ) + } return steps } @@ -95,6 +113,11 @@ function nextActions(input: NextActionInput): string[] { } if (steps.length === 0) { + if (input.unsupportedFiles > 0) { + steps.push( + "Run `kb audit --unsupported` to inspect files skipped because their type is not supported.", + ) + } steps.push(`Run \`${input.run(["search", '"your question"'])}\` to retrieve source passages.`) steps.push( `Run \`${input.run(["ask", '"your question"'])}\` to produce cited retrieval context.`, @@ -115,6 +138,9 @@ function isAgentKitInstalled(projectRoot: string): boolean { return ( existsSync(path.join(projectRoot, MIMIR_DIR, "skills", "mimir", "SKILL.md")) && existsSync(path.join(projectRoot, MIMIR_DIR, "skills", "mimir-audio-summary", "SKILL.md")) && - existsSync(path.join(projectRoot, MIMIR_DIR, "mcp.json")) + existsSync(path.join(projectRoot, MIMIR_DIR, "skills", "mimir-markdown-report", "SKILL.md")) && + existsSync(path.join(projectRoot, MIMIR_DIR, "mcp.json")) && + existsSync(path.join(projectRoot, MIMIR_DIR, "claude-mcp-server.json")) && + existsSync(path.join(projectRoot, MIMIR_DIR, "codex-mcp.toml")) ) } diff --git a/packages/mimir/src/files.test.ts b/packages/mimir/src/files.test.ts index 6915b0e..6976171 100644 --- a/packages/mimir/src/files.test.ts +++ b/packages/mimir/src/files.test.ts @@ -2,7 +2,7 @@ import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises" import os from "node:os" import path from "node:path" import { afterEach, describe, expect, it } from "vitest" -import { listSourceFiles } from "./files.js" +import { inventorySourceFiles, listSourceFiles } from "./files.js" import { testConfig } from "./test-support/config.js" const tempDirs: string[] = [] @@ -23,18 +23,54 @@ describe("listSourceFiles", () => { await mkdir(path.join(root, "private", ".mimir"), { recursive: true }) await writeFile(path.join(root, "private", "events.jsonl"), '{"event":"login"}\n', "utf8") await writeFile(path.join(root, "private", "schema.sql"), "select 1;\n", "utf8") + await writeFile( + path.join(root, "private", "component.vue"), + "\n", + "utf8", + ) + await writeFile( + path.join(root, "private", "loader.mjs"), + "export const evidence = true\n", + "utf8", + ) + await writeFile(path.join(root, "private", "captions.vtt"), "WEBVTT\n\nEvidence\n", "utf8") await writeFile(path.join(root, "private", "notes.transcript"), "call notes\n", "utf8") await writeFile(path.join(root, "private", "README.md"), "generated helper\n", "utf8") await writeFile(path.join(root, "private", "image.png"), "not indexed\n", "utf8") + await writeFile(path.join(root, "private", "private.pem"), "not indexed\n", "utf8") await writeFile(path.join(root, "private", ".kb", "index.md"), "ignored\n", "utf8") await writeFile(path.join(root, "private", ".mimir", "agent.md"), "ignored\n", "utf8") const files = await listSourceFiles(testConfig(root, { includeExtensions: [".transcript"] })) expect(files.map((file) => file.relativePath)).toEqual([ + "private/captions.vtt", + "private/component.vue", "private/events.jsonl", + "private/loader.mjs", "private/notes.transcript", "private/schema.sql", ]) + + const inventory = await inventorySourceFiles( + testConfig(root, { includeExtensions: [".transcript"], maxFileBytes: 20 }), + ) + + expect(inventory.skippedFiles).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + relativePath: "private/image.png", + reason: "unsupported-extension", + }), + expect.objectContaining({ + relativePath: "private/private.pem", + reason: "sensitive-name", + }), + expect.objectContaining({ + relativePath: "private/component.vue", + reason: "oversized", + }), + ]), + ) }) }) diff --git a/packages/mimir/src/files.ts b/packages/mimir/src/files.ts index 8c43380..78bfb08 100644 --- a/packages/mimir/src/files.ts +++ b/packages/mimir/src/files.ts @@ -4,53 +4,100 @@ import { readFile, stat } from "node:fs/promises" import path from "node:path" import fg from "fast-glob" import { PRIVATE_DIR } from "./defaults.js" -import type { Config, SourceFile } from "./types.js" +import type { Config, SkippedSourceFile, SourceFile, SourceInventory } from "./types.js" const GENERATED_SOURCE_README = `${PRIVATE_DIR}/README.md` +const NO_EXTENSION = "(none)" +const SENSITIVE_FILE_NAMES = new Set([ + ".env", + ".env.local", + ".env.production", + ".npmrc", + ".pypirc", + ".netrc", + ".pgpass", +]) +const SENSITIVE_EXTENSIONS = new Set([ + ".crt", + ".der", + ".gpg", + ".jks", + ".key", + ".keystore", + ".p12", + ".pem", + ".pfx", +]) export const DEFAULT_SUPPORTED_EXTENSIONS = new Set([ ".atom", + ".adoc", + ".astro", + ".bash", ".c", + ".cjs", ".cfg", ".conf", ".cpp", ".cs", ".css", ".csv", + ".cts", + ".diff", ".docx", + ".eml", + ".epub", ".go", ".h", + ".hpp", ".htm", ".html", + ".ics", ".ini", ".java", ".js", ".json", ".jsonl", ".jsx", + ".ipynb", ".log", + ".markdown", ".md", + ".mdown", ".mdx", + ".mjs", + ".mts", ".ndjson", ".odp", ".ods", ".odt", + ".patch", ".pdf", ".php", ".pptx", ".properties", + ".ps1", ".py", ".rb", + ".rst", ".rs", ".rss", ".rtf", + ".scss", + ".srt", + ".svelte", + ".svg", + ".sh", ".sql", + ".tex", ".text", ".toml", ".ts", ".tsv", ".tsx", ".txt", + ".vtt", + ".vue", ".xml", ".xlsx", ".yaml", @@ -58,40 +105,77 @@ export const DEFAULT_SUPPORTED_EXTENSIONS = new Set([ ]) export async function listSourceFiles(config: Config): Promise { + return (await inventorySourceFiles(config)).supportedFiles +} + +export async function inventorySourceFiles(config: Config): Promise { const roots = await sourceRoots(config) const files = new Map() + const skippedFiles = new Map() + let discoveredFiles = 0 for (const root of roots) { if (!existsSync(root)) { continue } - const entries = await fg("**/*", { + const entries = (await fg("**/*", { cwd: root, absolute: true, onlyFiles: true, dot: false, followSymbolicLinks: false, ignore: ["**/.git/**", "**/node_modules/**", "**/.kb/**", "**/.mimir/**"], - }) + objectMode: true, + stats: true, + unique: true, + })) as Array<{ path: string; stats?: { size: number; mtimeMs: number } }> - for (const absolutePath of entries) { + for (const entry of entries) { + const absolutePath = path.isAbsolute(entry.path) ? entry.path : path.resolve(root, entry.path) const relativePath = path.relative(config.projectRoot, absolutePath) if (relativePath === GENERATED_SOURCE_README) { continue } + discoveredFiles += 1 const extension = path.extname(absolutePath).toLowerCase() + const info = entry.stats ?? (await stat(absolutePath)) + const source = path.relative(root, absolutePath) || path.basename(absolutePath) + const skipped = skippedSourceFile(absolutePath, relativePath, source, extension, info.size) + + if (skipped) { + skippedFiles.set(absolutePath, skipped) + continue + } + if (!supportedExtensions(config).has(extension)) { + skippedFiles.set(absolutePath, { + relativePath, + source, + extension: extension || NO_EXTENSION, + bytes: info.size, + reason: "unsupported-extension", + }) + continue + } + + if (info.size > config.maxFileBytes) { + skippedFiles.set(absolutePath, { + relativePath, + source, + extension: extension || NO_EXTENSION, + bytes: info.size, + reason: "oversized", + }) continue } - const info = await stat(absolutePath) const buffer = await readFile(absolutePath) files.set(absolutePath, { absolutePath, relativePath, - source: path.relative(root, absolutePath) || path.basename(absolutePath), + source, extension, bytes: info.size, mtimeMs: info.mtimeMs, @@ -100,13 +184,36 @@ export async function listSourceFiles(config: Config): Promise { } } - return [...files.values()].sort((a, b) => a.relativePath.localeCompare(b.relativePath)) + return { + discoveredFiles, + supportedFiles: [...files.values()].sort((a, b) => + a.relativePath.localeCompare(b.relativePath), + ), + skippedFiles: [...skippedFiles.values()].sort((a, b) => + a.relativePath.localeCompare(b.relativePath), + ), + } } export function supportedExtensions(config: Config): Set { return new Set([...DEFAULT_SUPPORTED_EXTENSIONS, ...config.includeExtensions]) } +export function summarizeUnsupportedExtensions( + skippedFiles: SkippedSourceFile[], +): Array<{ extension: string; count: number }> { + const counts = new Map() + for (const file of skippedFiles) { + if (file.reason !== "unsupported-extension") { + continue + } + counts.set(file.extension, (counts.get(file.extension) ?? 0) + 1) + } + return [...counts.entries()] + .sort(([a], [b]) => a.localeCompare(b)) + .map(([extension, count]) => ({ extension, count })) +} + async function sourceRoots(config: Config): Promise { const roots = [config.rawDir] if (!existsSync(config.sourcesFile)) { @@ -124,3 +231,23 @@ async function sourceRoots(config: Config): Promise { return roots } + +function skippedSourceFile( + absolutePath: string, + relativePath: string, + source: string, + extension: string, + bytes: number, +): SkippedSourceFile | null { + const baseName = path.basename(absolutePath).toLowerCase() + if (!SENSITIVE_FILE_NAMES.has(baseName) && !SENSITIVE_EXTENSIONS.has(extension)) { + return null + } + return { + relativePath, + source, + extension: extension || NO_EXTENSION, + bytes, + reason: "sensitive-name", + } +} diff --git a/packages/mimir/src/ingest.test.ts b/packages/mimir/src/ingest.test.ts new file mode 100644 index 0000000..8fd7931 --- /dev/null +++ b/packages/mimir/src/ingest.test.ts @@ -0,0 +1,43 @@ +import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises" +import os from "node:os" +import path from "node:path" +import { afterEach, describe, expect, it } from "vitest" +import { audit, ingest } from "./ingest.js" +import { initProject } from "./init.js" + +const tempDirs: string[] = [] + +afterEach(async () => { + for (const dir of tempDirs.splice(0)) { + await rm(dir, { recursive: true, force: true }) + } +}) + +describe("ingest", () => { + it("reports skipped files and detects stale indexed content by checksum", async () => { + const root = await mkdtemp(path.join(os.tmpdir(), "mimir-ingest-")) + tempDirs.push(root) + await initProject(root) + await mkdir(path.join(root, "private"), { recursive: true }) + await writeFile(path.join(root, "private", "evidence.md"), "First version.\n", "utf8") + await writeFile(path.join(root, "private", "scan.heic"), "unsupported image\n", "utf8") + + const result = await ingest({ cwd: root }) + expect(result.discoveredFiles).toBe(2) + expect(result.supportedFiles).toBe(1) + expect(result.unsupportedFiles).toBe(1) + expect(result.unsupportedExtensions).toEqual([{ extension: ".heic", count: 1 }]) + + await writeFile(path.join(root, "private", "evidence.md"), "Changed version.\n", "utf8") + const report = await audit(root) + + expect(report.missingFromIndex).toEqual([]) + expect(report.staleInIndex).toEqual(["private/evidence.md"]) + expect(report.skippedFiles).toEqual([ + expect.objectContaining({ + relativePath: "private/scan.heic", + reason: "unsupported-extension", + }), + ]) + }) +}) diff --git a/packages/mimir/src/ingest.ts b/packages/mimir/src/ingest.ts index 419051a..655f48a 100644 --- a/packages/mimir/src/ingest.ts +++ b/packages/mimir/src/ingest.ts @@ -2,7 +2,7 @@ import { recordAccess } from "./access-log.js" import { chunkDocument } from "./chunking.js" import { loadConfig } from "./config.js" import { embedTexts } from "./embeddings.js" -import { listSourceFiles } from "./files.js" +import { inventorySourceFiles, summarizeUnsupportedExtensions } from "./files.js" import { parseFile } from "./parsing.js" import { redactText, totalRedactions } from "./redaction.js" import { openRowsTable, writeRows } from "./store.js" @@ -11,46 +11,59 @@ import type { IngestOptions, IngestResult, RedactionCount, + SkippedSourceReason, TextChunk, VectorRow, } from "./types.js" -const EMBED_BATCH_SIZE = 32 const MAX_AUDIT_ROWS = 100_000 export async function ingest(options: IngestOptions = {}): Promise { const config = await loadConfig(String(options.cwd ?? process.cwd())) - const files = await listSourceFiles(config) + const inventory = await inventorySourceFiles(config) + const files = inventory.supportedFiles const allChunks: TextChunk[] = [] const errors: IngestResult["errors"] = [] const redactionCounts: RedactionCount[] = [] - let skippedFiles = 0 + let emptyFiles = 0 - for (const file of files) { + const results = await mapLimit(files, config.ingestConcurrency, async (file) => { try { const parsed = await parseFile(file) const redacted = redactText(parsed.text, config) - redactionCounts.push(...redacted.counts) const chunks = chunkDocument( { ...parsed, text: redacted.text }, config.chunkSize, config.chunkOverlap, ) - if (chunks.length === 0) { - skippedFiles += 1 - } - allChunks.push(...chunks) + return { chunks, redactions: redacted.counts, error: null } } catch (error) { - errors.push({ - path: file.relativePath, - message: error instanceof Error ? error.message : String(error), - }) + return { + chunks: [], + redactions: [], + error: { + path: file.relativePath, + message: error instanceof Error ? error.message : String(error), + }, + } } + }) + + for (const result of results) { + if (result.error) { + errors.push(result.error) + continue + } + redactionCounts.push(...result.redactions) + if (result.chunks.length === 0) { + emptyFiles += 1 + } + allChunks.push(...result.chunks) } const rows: VectorRow[] = [] - for (let i = 0; i < allChunks.length; i += EMBED_BATCH_SIZE) { - const batch = allChunks.slice(i, i + EMBED_BATCH_SIZE) + for (let i = 0; i < allChunks.length; i += config.embeddingBatchSize) { + const batch = allChunks.slice(i, i + config.embeddingBatchSize) const embeddings = await embedTexts( batch.map((chunk) => chunk.text), config, @@ -74,7 +87,13 @@ export async function ingest(options: IngestOptions = {}): Promise return { indexedFiles: new Set(rows.map((row) => row.relativePath)).size, chunks: rows.length, - skippedFiles, + discoveredFiles: inventory.discoveredFiles, + supportedFiles: files.length, + skippedFiles: inventory.skippedFiles.length + emptyFiles, + unsupportedFiles: countSkipped(inventory.skippedFiles, "unsupported-extension"), + oversizedFiles: countSkipped(inventory.skippedFiles, "oversized"), + sensitiveFiles: countSkipped(inventory.skippedFiles, "sensitive-name"), + unsupportedExtensions: summarizeUnsupportedExtensions(inventory.skippedFiles), redactions: totalRedactions(redactionCounts), errors, } @@ -82,7 +101,8 @@ export async function ingest(options: IngestOptions = {}): Promise export async function audit(cwd = process.cwd()): Promise { const config = await loadConfig(cwd) - const files = await listSourceFiles(config) + const inventory = await inventorySourceFiles(config) + const files = inventory.supportedFiles const supportedFiles = files.map((file) => file.relativePath) const table = await openRowsTable(config) @@ -90,6 +110,8 @@ export async function audit(cwd = process.cwd()): Promise { return { indexedFiles: [], supportedFiles, + skippedFiles: inventory.skippedFiles, + unsupportedExtensions: summarizeUnsupportedExtensions(inventory.skippedFiles), missingFromIndex: supportedFiles, staleInIndex: [], totalChunks: 0, @@ -98,22 +120,71 @@ export async function audit(cwd = process.cwd()): Promise { const rows = (await table.query().limit(MAX_AUDIT_ROWS).toArray()) as Array<{ relativePath: string + checksum?: string }> const counts = new Map() + const checksums = new Map>() for (const row of rows) { counts.set(row.relativePath, (counts.get(row.relativePath) ?? 0) + 1) + if (row.checksum) { + const fileChecksums = checksums.get(row.relativePath) ?? new Set() + fileChecksums.add(row.checksum) + checksums.set(row.relativePath, fileChecksums) + } } const supportedSet = new Set(supportedFiles) const indexedSet = new Set(counts.keys()) + const currentChecksums = new Map(files.map((file) => [file.relativePath, file.checksum])) return { indexedFiles: [...counts.entries()] .sort(([a], [b]) => a.localeCompare(b)) .map(([source, chunks]) => ({ source, chunks })), supportedFiles, + skippedFiles: inventory.skippedFiles, + unsupportedExtensions: summarizeUnsupportedExtensions(inventory.skippedFiles), missingFromIndex: supportedFiles.filter((file) => !indexedSet.has(file)), - staleInIndex: [...indexedSet].filter((file) => !supportedSet.has(file)).sort(), + staleInIndex: [...indexedSet] + .filter((file) => { + if (!supportedSet.has(file)) { + return true + } + const currentChecksum = currentChecksums.get(file) + const indexedChecksums = checksums.get(file) + return !currentChecksum || !indexedChecksums?.has(currentChecksum) + }) + .sort(), totalChunks: rows.length, } } + +async function mapLimit( + items: T[], + concurrency: number, + worker: (item: T) => Promise, +): Promise { + const results = new Array(items.length) + let nextIndex = 0 + + async function run(): Promise { + while (nextIndex < items.length) { + const index = nextIndex + nextIndex += 1 + const item = items[index] + if (item !== undefined) { + results[index] = await worker(item) + } + } + } + + await Promise.all(Array.from({ length: Math.min(concurrency, items.length) }, () => run())) + return results +} + +function countSkipped( + files: Array<{ reason: SkippedSourceReason }>, + reason: SkippedSourceReason, +): number { + return files.filter((file) => file.reason === reason).length +} diff --git a/packages/mimir/src/mcp.test.ts b/packages/mimir/src/mcp.test.ts new file mode 100644 index 0000000..b852406 --- /dev/null +++ b/packages/mimir/src/mcp.test.ts @@ -0,0 +1,20 @@ +import { describe, expect, it } from "vitest" +import { resolveMcpProjectRoot } from "./mcp.js" + +describe("resolveMcpProjectRoot", () => { + it("prefers explicit Mimir roots, then Claude Code project roots, then cwd", () => { + expect( + resolveMcpProjectRoot( + { + MIMIR_PROJECT_ROOT: "/repo/mimir", + CLAUDE_PROJECT_DIR: "/repo/claude", + }, + "/repo/cwd", + ), + ).toBe("/repo/mimir") + expect(resolveMcpProjectRoot({ CLAUDE_PROJECT_DIR: "/repo/claude" }, "/repo/cwd")).toBe( + "/repo/claude", + ) + expect(resolveMcpProjectRoot({}, "/repo/cwd")).toBe("/repo/cwd") + }) +}) diff --git a/packages/mimir/src/mcp.ts b/packages/mimir/src/mcp.ts index 0e4fd96..8939891 100644 --- a/packages/mimir/src/mcp.ts +++ b/packages/mimir/src/mcp.ts @@ -13,7 +13,7 @@ const queryToolInputSchema = z.object({ topK: z.number().int().positive().optional(), }) -export async function serveMcp(cwd = process.cwd()): Promise { +export async function serveMcp(cwd = resolveMcpProjectRoot()): Promise { const server = new McpServer({ name: "mimir", version: VERSION, @@ -41,6 +41,9 @@ export async function serveMcp(cwd = process.cwd()): Promise { llmGeneration: false, redactionEnabled: config.redaction.enabled, mcpMaxTopK: config.mcpMaxTopK, + maxFileBytes: config.maxFileBytes, + ingestConcurrency: config.ingestConcurrency, + embeddingBatchSize: config.embeddingBatchSize, includeExtensions: config.includeExtensions, chunksIndexed, } @@ -92,6 +95,13 @@ export async function serveMcp(cwd = process.cwd()): Promise { await server.connect(new StdioServerTransport()) } +export function resolveMcpProjectRoot( + env: NodeJS.ProcessEnv = process.env, + fallback = process.cwd(), +): string { + return env.MIMIR_PROJECT_ROOT ?? env.CLAUDE_PROJECT_DIR ?? fallback +} + function textResult(value: unknown): { content: Array<{ type: "text"; text: string }> } { return { content: [ diff --git a/packages/mimir/src/parsing.test.ts b/packages/mimir/src/parsing.test.ts index 5a64c6e..f3e5455 100644 --- a/packages/mimir/src/parsing.test.ts +++ b/packages/mimir/src/parsing.test.ts @@ -51,6 +51,22 @@ describe("parseFile", () => { expect(parsed.text).toContain("Invoice\t24000\tPaid") }) + + it("extracts text from epub html entries", async () => { + const root = await mkdtemp(path.join(os.tmpdir(), "mimir-epub-")) + tempDirs.push(root) + const filePath = path.join(root, "brief.epub") + await writeFile( + filePath, + zipSync({ + "OPS/chapter.xhtml": strToU8("

Sovereign report

"), + }), + ) + + const parsed = await parseFile(sourceFile(root, filePath, ".epub")) + + expect(parsed.text).toContain("SOVEREIGN REPORT") + }) }) function sourceFile(root: string, absolutePath: string, extension: string): SourceFile { diff --git a/packages/mimir/src/parsing.ts b/packages/mimir/src/parsing.ts index a735656..3c90c09 100644 --- a/packages/mimir/src/parsing.ts +++ b/packages/mimir/src/parsing.ts @@ -28,6 +28,9 @@ export async function parseFile(file: SourceFile): Promise { case ".odp": text = await parseOpenDocument(file.absolutePath) break + case ".epub": + text = await parseEpub(file.absolutePath) + break case ".html": case ".htm": text = htmlToText(await readFile(file.absolutePath, "utf8"), { @@ -39,6 +42,7 @@ export async function parseFile(file: SourceFile): Promise { }) break case ".json": + case ".ipynb": text = JSON.stringify(JSON.parse(await readFile(file.absolutePath, "utf8")), null, 2) break case ".yaml": @@ -97,13 +101,34 @@ async function parseOpenDocument(filePath: string): Promise { return xmlEntriesToText(entries, [/^content\.xml$/u, /^meta\.xml$/u]) } +async function parseEpub(filePath: string): Promise { + const entries = unzipOfficeFile(await readFile(filePath)) + const parts: string[] = [] + for (const [name, content] of [...entries.entries()].sort(([a], [b]) => a.localeCompare(b))) { + if (!/\.(?:xhtml|html|htm|xml)$/iu.test(name)) { + continue + } + const text = htmlToText(content, { + wordwrap: false, + selectors: [ + { selector: "a", options: { ignoreHref: true } }, + { selector: "img", format: "skip" }, + ], + }) + if (text.trim()) { + parts.push(text) + } + } + return parts.join("\n\n") +} + function unzipOfficeFile(buffer: Buffer): Map { const unzipped = unzipSync(new Uint8Array(buffer), { filter: (file) => file.originalSize <= MAX_OFFICE_XML_ENTRY_BYTES, }) const entries = new Map() for (const [name, content] of Object.entries(unzipped)) { - if (name.endsWith(".xml")) { + if (/\.(?:xml|xhtml|html|htm)$/iu.test(name)) { entries.set(name, strFromU8(content)) } } diff --git a/packages/mimir/src/setup.ts b/packages/mimir/src/setup.ts index 59ad06c..9a76fc5 100644 --- a/packages/mimir/src/setup.ts +++ b/packages/mimir/src/setup.ts @@ -65,7 +65,8 @@ function setupNextSteps(report: DoctorReport): string[] { if (report.ready) { return [ "Ask questions with the search or ask command shown by `kb doctor`.", - "Connect an AI with .mimir/mcp.json or load .mimir/skills/mimir/.", + "Connect Claude Code with .mimir/claude-mcp-server.json, Codex with .mimir/codex-mcp.toml, or another AI with .mimir/mcp.json.", + "Load .mimir/skills/mimir/ in agents that support skill folders.", ] } return report.nextSteps diff --git a/packages/mimir/src/skill.test.ts b/packages/mimir/src/skill.test.ts index d31a289..711e174 100644 --- a/packages/mimir/src/skill.test.ts +++ b/packages/mimir/src/skill.test.ts @@ -20,15 +20,32 @@ describe("installSkill", () => { const result = await installSkill({ cwd: root }) const skill = await readFile(path.join(result.skillPath, "SKILL.md"), "utf8") const audioSkill = await readFile(path.join(result.audioSkillPath, "SKILL.md"), "utf8") + const reportSkill = await readFile(path.join(result.reportSkillPath, "SKILL.md"), "utf8") const mcpConfig = JSON.parse(await readFile(result.mcpConfigPath, "utf8")) as { mcpServers: { mimir: { command: string; args: string[]; cwd: string } } } + const claudeConfig = JSON.parse(await readFile(result.claudeConfigPath, "utf8")) as { + type: string + command: string + args: string[] + } + const codexConfig = await readFile(result.codexConfigPath, "utf8") expect(skill).toContain("name: mimir") expect(audioSkill).toContain("name: mimir-audio-summary") + expect(reportSkill).toContain("name: mimir-markdown-report") expect(mcpConfig.mcpServers.mimir.command).toBe("pnpm") expect(mcpConfig.mcpServers.mimir.args).toEqual(["exec", "kb", "serve-mcp"]) expect(mcpConfig.mcpServers.mimir.cwd).toBe(root) + expect(claudeConfig).toEqual({ + type: "stdio", + command: "pnpm", + args: ["exec", "kb", "serve-mcp"], + }) + expect(codexConfig).toContain("[mcp_servers.mimir]") + expect(codexConfig).toContain('command = "pnpm"') + expect(codexConfig).toContain('args = ["exec", "kb", "serve-mcp"]') + expect(codexConfig).toContain(`cwd = ${JSON.stringify(root)}`) }) it("adds Mimir runtime folders to gitignore without duplicating entries", async () => { @@ -42,6 +59,9 @@ describe("installSkill", () => { expect(first.written).toContain(".gitignore") expect(second.written).not.toContain(".gitignore") expect(first.written).toContain(path.join(".mimir", "skills", "mimir-audio-summary")) + expect(first.written).toContain(path.join(".mimir", "skills", "mimir-markdown-report")) + expect(first.written).toContain(path.join(".mimir", "claude-mcp-server.json")) + expect(first.written).toContain(path.join(".mimir", "codex-mcp.toml")) expect(gitignore.match(/^\.kb\/$/gm)).toHaveLength(1) expect(gitignore.match(/^\.mimir\/$/gm)).toHaveLength(1) }) @@ -55,10 +75,13 @@ describe("installSkill", () => { const mcpConfig = JSON.parse(await readFile(result.mcpConfigPath, "utf8")) as { mcpServers: { mimir: { command: string; args: string[] } } } + const codexConfig = await readFile(result.codexConfigPath, "utf8") const readme = await readFile(result.readmePath, "utf8") expect(mcpConfig.mcpServers.mimir.command).toBe("npx") expect(mcpConfig.mcpServers.mimir.args).toEqual(["kb", "serve-mcp"]) + expect(codexConfig).toContain('command = "npx"') + expect(codexConfig).toContain('args = ["kb", "serve-mcp"]') expect(readme).toContain("npx kb serve-mcp") }) }) diff --git a/packages/mimir/src/skill.ts b/packages/mimir/src/skill.ts index 212b24a..a25a52b 100644 --- a/packages/mimir/src/skill.ts +++ b/packages/mimir/src/skill.ts @@ -13,7 +13,10 @@ export interface InstallSkillOptions { export interface InstallSkillResult { skillPath: string audioSkillPath: string + reportSkillPath: string mcpConfigPath: string + claudeConfigPath: string + codexConfigPath: string readmePath: string written: string[] } @@ -21,6 +24,7 @@ export interface InstallSkillResult { const PACKAGE_ROOT = path.dirname(path.dirname(fileURLToPath(import.meta.url))) const PRIMARY_SKILL_NAME = "mimir" const AUDIO_SKILL_NAME = "mimir-audio-summary" +const REPORT_SKILL_NAME = "mimir-markdown-report" export function bundledSkillPath(skillName = PRIMARY_SKILL_NAME): string { return path.join(PACKAGE_ROOT, "skills", skillName) @@ -31,14 +35,21 @@ export async function installSkill(options: InstallSkillOptions = {}): Promise>): unknown { + return { + type: "stdio", + command: serveCommand.command, + args: serveCommand.args, + } +} + +function codexMcpConfig(cwd: string, serveCommand: Awaited>): string { + return `[mcp_servers.mimir] +command = ${tomlString(serveCommand.command)} +args = ${tomlArray(serveCommand.args)} +cwd = ${tomlString(cwd)} + +` +} + +function tomlArray(values: string[]): string { + return `[${values.map(tomlString).join(", ")}]` +} + +function tomlString(value: string): string { + return JSON.stringify(value) +} + function agentKitReadme( skillPath: string, audioSkillPath: string, + reportSkillPath: string, mcpConfigPath: string, + codexConfigPath: string, serveCommand: string, doctorCommand: string, ): string { @@ -123,6 +175,15 @@ Use it only when the user asks for a listenable summary. It renders generated au local Mimir state by default. Use Transformers.js WAV for confidential content and Edge MP3 only when online TTS is explicitly acceptable. +Optional Markdown-report skill folder: + +\`\`\`plain text +${reportSkillPath} +\`\`\` + +Use it when the user asks for a cited Markdown report, dossier, audit memo, or planning note. It +writes reports under ignored local Mimir state by default. + ## MCP MCP config example: @@ -137,6 +198,26 @@ Use the MCP server when your agent supports MCP tools. The server command is: ${serveCommand} \`\`\` +Claude Code local setup: + +\`\`\`bash +claude mcp add-json --scope local mimir "$(cat ${MIMIR_DIR}/claude-mcp-server.json)" +\`\`\` + +Run that command from this repository root. Mimir also reads \`CLAUDE_PROJECT_DIR\`, so the server +uses the active Claude Code project as the knowledge-base root. + +For other MCP clients that cannot set a working directory, launch the server with +\`MIMIR_PROJECT_ROOT=/absolute/path/to/repository\`. + +Codex setup: + +\`\`\`plain text +${codexConfigPath} +\`\`\` + +Copy that TOML snippet into \`~/.codex/config.toml\` or another trusted Codex config layer. + Before relying on retrieved context, run: \`\`\`bash diff --git a/packages/mimir/src/test-support/config.ts b/packages/mimir/src/test-support/config.ts index 4025b7c..45f596b 100644 --- a/packages/mimir/src/test-support/config.ts +++ b/packages/mimir/src/test-support/config.ts @@ -33,6 +33,9 @@ export function testConfig( topK: DEFAULT_CONFIG.topK, chunkSize: DEFAULT_CONFIG.chunkSize, chunkOverlap: DEFAULT_CONFIG.chunkOverlap, + maxFileBytes: DEFAULT_CONFIG.maxFileBytes, + ingestConcurrency: DEFAULT_CONFIG.ingestConcurrency, + embeddingBatchSize: DEFAULT_CONFIG.embeddingBatchSize, includeExtensions: [...DEFAULT_CONFIG.includeExtensions], } diff --git a/packages/mimir/src/types.ts b/packages/mimir/src/types.ts index e0a389a..f660948 100644 --- a/packages/mimir/src/types.ts +++ b/packages/mimir/src/types.ts @@ -18,6 +18,9 @@ export interface Config { topK: number chunkSize: number chunkOverlap: number + maxFileBytes: number + ingestConcurrency: number + embeddingBatchSize: number includeExtensions: string[] } @@ -51,6 +54,22 @@ export interface SourceFile { checksum: string } +export type SkippedSourceReason = "unsupported-extension" | "oversized" | "sensitive-name" + +export interface SkippedSourceFile { + relativePath: string + source: string + extension: string + bytes: number + reason: SkippedSourceReason +} + +export interface SourceInventory { + discoveredFiles: number + supportedFiles: SourceFile[] + skippedFiles: SkippedSourceFile[] +} + export interface ParsedDocument { file: SourceFile text: string @@ -77,9 +96,15 @@ export interface IngestOptions { } export interface IngestResult { + discoveredFiles: number + supportedFiles: number indexedFiles: number chunks: number skippedFiles: number + unsupportedFiles: number + oversizedFiles: number + sensitiveFiles: number + unsupportedExtensions: Array<{ extension: string; count: number }> redactions: number errors: Array<{ path: string; message: string }> } @@ -105,6 +130,8 @@ export interface AskResult { export interface AuditReport { indexedFiles: Array<{ source: string; chunks: number }> supportedFiles: string[] + skippedFiles: SkippedSourceFile[] + unsupportedExtensions: Array<{ extension: string; count: number }> missingFromIndex: string[] staleInIndex: string[] totalChunks: number @@ -129,6 +156,8 @@ export interface DoctorReport { redactionEnabled: boolean accessLog: boolean supportedFiles: number + skippedFiles: number + unsupportedFiles: number indexedFiles: number chunksIndexed: number missingFromIndex: number diff --git a/packages/mimir/src/version.ts b/packages/mimir/src/version.ts index 68fd830..52aba59 100644 --- a/packages/mimir/src/version.ts +++ b/packages/mimir/src/version.ts @@ -1 +1 @@ -export const VERSION = "0.4.6" +export const VERSION = "0.4.7"