diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 50a70e1..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,51 +0,0 @@ -version: 2 -updates: - - package-ecosystem: npm - directory: / - schedule: - interval: weekly - day: monday - time: "08:00" - timezone: Asia/Bangkok - labels: - - dependencies - open-pull-requests-limit: 2 - commit-message: - prefix: chore - include: scope - groups: - npm-safe-updates: - patterns: - - "*" - update-types: - - minor - - patch - ignore: - - dependency-name: "*" - update-types: - - version-update:semver-major - - - package-ecosystem: github-actions - directory: / - schedule: - interval: weekly - day: monday - time: "08:30" - timezone: Asia/Bangkok - labels: - - dependencies - open-pull-requests-limit: 1 - commit-message: - prefix: chore - include: scope - groups: - github-actions-safe-updates: - patterns: - - "*" - update-types: - - minor - - patch - ignore: - - dependency-name: "*" - update-types: - - version-update:semver-major diff --git a/.gitignore b/.gitignore index 7243700..9db4737 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,25 @@ packages/ragmir-core/examples/**/.ragmir/models/ packages/ragmir-core/examples/**/.ragmir/reports/ packages/ragmir-core/examples/**/.ragmir/audio/ .gitnexus + +# Ragmir +.claude/skills/ragmir +.claude/skills/ragmir-audio-summary +.claude/skills/ragmir-markdown-report +.claude/skills/ragmir-legal-dossier +.agents/skills/ragmir +.agents/skills/ragmir-audio-summary +.agents/skills/ragmir-markdown-report +.agents/skills/ragmir-legal-dossier +.kimi/skills/ragmir +.kimi/skills/ragmir-audio-summary +.kimi/skills/ragmir-markdown-report +.kimi/skills/ragmir-legal-dossier +.opencode/skills/ragmir +.opencode/skills/ragmir-audio-summary +.opencode/skills/ragmir-markdown-report +.opencode/skills/ragmir-legal-dossier +.cline/skills/ragmir +.cline/skills/ragmir-audio-summary +.cline/skills/ragmir-markdown-report +.cline/skills/ragmir-legal-dossier diff --git a/AGENTS.md b/AGENTS.md index 85d23b6..9d9a0f8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -15,6 +15,7 @@ - `packages/ragmir-tts` is the optional local/offline audio add-on used by `rgr audio`. - `packages/ragmir-landing` is a self-contained, telemetry-free Astro site. Keep it static, open-source focused, and free of vendor deployment configuration. - Ragmir Core stays retrieval-first: `local-hash` supports offline retrieval, `transformers` is the explicit semantic option, and local chat remains a separate add-on. +- Public copy must lead with model-agnostic Core and the choice between the user's preferred AI or automation and a fully local consumer. Qwen and Gemma are optional Chat profiles, never Core or MCP requirements. ## Privacy and ingestion @@ -50,3 +51,48 @@ The repository is indexed as `jcode-ragmir`. - Before editing a function, class, or method, run upstream impact analysis and report HIGH or CRITICAL risk before continuing. - Run `gitnexus_detect_changes()` before committing and refresh the index once after the final commit. - Use `gitnexus_rename` for symbol renames. If the index is stale, run `npx gitnexus analyze` before relying on it. + + +# GitNexus — Code Intelligence + +This project is indexed by GitNexus as **jcode-ragmir** (2005 symbols, 4448 relationships, 165 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely. + +> Index stale? Run `node .gitnexus/run.cjs analyze` from the project root — it auto-selects an available runner. No `.gitnexus/run.cjs` yet? `npx gitnexus analyze` (npm 11 crash → `npm i -g gitnexus`; #1939). + +## Always Do + +- **MUST run impact analysis before editing any symbol.** Before modifying a function, class, or method, run `impact({target: "symbolName", direction: "upstream"})` and report the blast radius (direct callers, affected processes, risk level) to the user. +- **MUST run `detect_changes()` before committing** to verify your changes only affect expected symbols and execution flows. For regression review, compare against the default branch: `detect_changes({scope: "compare", base_ref: "main"})`. +- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits. +- When exploring unfamiliar code, use `query({search_query: "concept"})` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance. +- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use `context({name: "symbolName"})`. +- For security review, `explain({target: "fileOrSymbol"})` lists taint findings (source→sink flows; needs `analyze --pdg`). + +## Never Do + +- NEVER edit a function, class, or method without first running `impact` on it. +- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis. +- NEVER rename symbols with find-and-replace — use `rename` which understands the call graph. +- NEVER commit changes without running `detect_changes()` to check affected scope. + +## Resources + +| Resource | Use for | +|----------|---------| +| `gitnexus://repo/jcode-ragmir/context` | Codebase overview, check index freshness | +| `gitnexus://repo/jcode-ragmir/clusters` | All functional areas | +| `gitnexus://repo/jcode-ragmir/processes` | All execution flows | +| `gitnexus://repo/jcode-ragmir/process/{name}` | Step-by-step execution trace | + +## CLI + +| Task | Read this skill file | +|------|---------------------| +| Understand architecture / "How does X work?" | `.claude/skills/gitnexus/gitnexus-exploring/SKILL.md` | +| Blast radius / "What breaks if I change X?" | `.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md` | +| Trace bugs / "Why is X failing?" | `.claude/skills/gitnexus/gitnexus-debugging/SKILL.md` | +| Rename / extract / split / refactor | `.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md` | +| Tools, resources, schema reference | `.claude/skills/gitnexus/gitnexus-guide/SKILL.md` | +| Index, status, clean, wiki CLI commands | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` | + + diff --git a/CHANGELOG.md b/CHANGELOG.md index 313a5c3..3e755a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,68 +1,32 @@ # Changelog -## Unreleased +Ragmir publishes its canonical version history through +[GitHub Releases](https://github.com/jcode-works/jcode-ragmir/releases). Each release is generated +by semantic-release from the Conventional Commits merged into `main`, after the repository +validation workflow passes. -- Rename the public CLI commands to `rgr` and `rgr-tts`. -- Keep `ragmir`, `kb`, and `ragmir-tts` as deprecated compatibility bins that warn users to migrate - to `rgr` / `rgr-tts`. -- Add deterministic prompt routing through `rgr route-prompt` and MCP `ragmir_route_prompt`. +This file is intentionally a stable entrypoint instead of a second, manually maintained copy of +the version history. -## 0.4.2 - 2026-06-29 +## Release history -- Add `rgr doctor` to diagnose initialization, index freshness, security posture, and next steps. -- Make `rgr audio` and `rgr-tts` default to the offline/confidential Transformers.js WAV path; - Edge MP3 now requires an explicit `--engine edge` command. -- Stop indexing the generated `private/README.md` helper file created by `rgr init`. -- Improve onboarding output from `rgr init` and `rgr install-skill`. +- [Latest release](https://github.com/jcode-works/jcode-ragmir/releases/latest) +- [All releases and version comparisons](https://github.com/jcode-works/jcode-ragmir/releases) +- [Current TypeScript API reference](./docs/api-reference.md) -## 0.4.1 - 2026-06-29 +Each GitHub release contains generated feature, fix, and compatibility notes plus the verification +artifacts produced by the release workflow. -- Add an Edge-compatible Ragmir TTS engine so `rgr audio` can match the global Voice Forge quality - path with `edge-tts`, `fr-FR-DeniseNeural`, and MP3 output. -- Keep Transformers.js WAV rendering as the explicit offline/confidential path. -- Remove duplicated governance documents from package directories; root project docs are the single - source of truth. +## API compatibility -## 0.4.0 - 2026-06-28 +Ragmir follows Semantic Versioning: -- Reposition Ragmir as sovereign local RAG for confidential datasets and AI agents. -- Expand default ingestion to common text, Office/OpenDocument, data, config, log, and source-code - file types. -- Add `includeExtensions` / `RAGMIR_INCLUDE_EXTENSIONS` for custom UTF-8 text file extensions. -- Add the optional `ragmir-audio-summary` bundled skill for confidential audio summaries. -- Install both the main Ragmir skill and optional audio-summary skill with `rgr install-skill`. -- Improve agent guidance for deep multi-query retrieval before synthesis. -- Make Ragmir core retrieval-only: `rgr ask` now returns cited context for external agents or LLMs - instead of generating answers internally. -- Add optional Transformers.js semantic embeddings through `embeddingProvider: "transformers"`. -- Remove Ollama providers and keep `embeddingProvider: "local-hash"` as the no-model default. -- Move the repository to a simple pnpm workspace monorepo without adding Turbo. -- Move the core `@jcode.labs/ragmir` package into `packages/ragmir-core`. -- Add `@jcode.labs/ragmir-tts` for plug-and-play JS/ONNX WAV rendering without Python or ffmpeg. -- Add `rgr audio` and update the audio-summary skill to use Ragmir TTS before advanced fallback - engines. +- `fix` commits produce patch releases. +- `feat` commits produce minor releases. +- commits with a `BREAKING CHANGE` footer produce major releases and surface the compatibility + change in the generated release notes. +- documentation commits produce patch releases so the npm documentation stays current. +- landing-only commits do not publish the library packages. -## 0.3.0 - 2026-06-28 - -- Add confidentiality hardening defaults: built-in redaction before indexing, metadata-only access - logs, and bounded MCP retrieval. -- Add `rgr security-audit` for zero-telemetry, provider, redaction, gitignore, storage, and - MCP posture checks. -- Add `rgr destroy-index --yes` to remove generated vector indexes. -- Add release verification artifacts: npm tarball, SHA256 checksums, SBOM, and manifest. -- Document air-gapped operation, threat model, MCP hardening, and secure deletion limits. - -## 0.2.1 - 2026-06-28 - -- Add maintainer positioning for Jean-Baptiste Thery and JCode Labs in the README. -- Make `rgr init` and `rgr install-skill` automatically keep `.ragmir/` ignored by Git. - -## 0.2.0 - 2026-06-28 - -- Rename public product branding to Ragmir while keeping the JCode Labs npm scope. -- Add the bundled portable `ragmir` agent skill. -- Add the MCP stdio server with `ragmir_status`, `ragmir_search`, `ragmir_ask`, and - `ragmir_audit`. -- Add production smoke coverage for the built CLI and MCP server. -- Add Biome, commitlint, publint, CodeQL, Dependabot grouping, protected npm publishing, - and open-source contribution/security documentation. +Check the release notes for the version you plan to install, then compare the +[API reference](./docs/api-reference.md) when upgrading across a major version. diff --git a/CLAUDE.md b/CLAUDE.md index 3ba7899..132fca8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -30,3 +30,50 @@ verify both surfaces and leave them unchanged when no update is needed. Ragmir stores and retrieves local cited context. It has no hosted document store, account system, native desktop shell, or cloud-vendor deployment configuration. Keep OCR optional and local, remote model downloads explicit, and normal confidential retrieval offline. +Describe Core as model-agnostic: users can connect their preferred AI or automation, or keep the +consumer local. Qwen and Gemma are optional Chat profiles, never Core or MCP requirements. + + +# GitNexus — Code Intelligence + +This project is indexed by GitNexus as **jcode-ragmir** (2005 symbols, 4448 relationships, 165 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely. + +> Index stale? Run `node .gitnexus/run.cjs analyze` from the project root — it auto-selects an available runner. No `.gitnexus/run.cjs` yet? `npx gitnexus analyze` (npm 11 crash → `npm i -g gitnexus`; #1939). + +## Always Do + +- **MUST run impact analysis before editing any symbol.** Before modifying a function, class, or method, run `impact({target: "symbolName", direction: "upstream"})` and report the blast radius (direct callers, affected processes, risk level) to the user. +- **MUST run `detect_changes()` before committing** to verify your changes only affect expected symbols and execution flows. For regression review, compare against the default branch: `detect_changes({scope: "compare", base_ref: "main"})`. +- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits. +- When exploring unfamiliar code, use `query({search_query: "concept"})` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance. +- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use `context({name: "symbolName"})`. +- For security review, `explain({target: "fileOrSymbol"})` lists taint findings (source→sink flows; needs `analyze --pdg`). + +## Never Do + +- NEVER edit a function, class, or method without first running `impact` on it. +- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis. +- NEVER rename symbols with find-and-replace — use `rename` which understands the call graph. +- NEVER commit changes without running `detect_changes()` to check affected scope. + +## Resources + +| Resource | Use for | +|----------|---------| +| `gitnexus://repo/jcode-ragmir/context` | Codebase overview, check index freshness | +| `gitnexus://repo/jcode-ragmir/clusters` | All functional areas | +| `gitnexus://repo/jcode-ragmir/processes` | All execution flows | +| `gitnexus://repo/jcode-ragmir/process/{name}` | Step-by-step execution trace | + +## CLI + +| Task | Read this skill file | +|------|---------------------| +| Understand architecture / "How does X work?" | `.claude/skills/gitnexus/gitnexus-exploring/SKILL.md` | +| Blast radius / "What breaks if I change X?" | `.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md` | +| Trace bugs / "Why is X failing?" | `.claude/skills/gitnexus/gitnexus-debugging/SKILL.md` | +| Rename / extract / split / refactor | `.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md` | +| Tools, resources, schema reference | `.claude/skills/gitnexus/gitnexus-guide/SKILL.md` | +| Index, status, clean, wiki CLI commands | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` | + + diff --git a/README.md b/README.md index 44505ac..804a83b 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,10 @@ files you choose, stores the index inside the project, and returns source-backed CLI, TypeScript API, or local MCP server. The default path needs no account, hosted document store, or model download. +Bring the AI or automation you already use. Ragmir Core does not call a model. If no retrieved +passage may leave the machine, connect a local CLI or MCP consumer, or add Ragmir Chat for cited +answer generation from a verified local model. + [Website](https://ragmir.com) · [npm](https://www.npmjs.com/package/@jcode.labs/ragmir) · [CLI reference](./docs/cli-reference.md) · [Examples](#runnable-examples) @@ -41,8 +45,8 @@ Using npm instead of pnpm? Replace `pnpm add -D` with `npm install --save-dev` a | --- | --- | --- | | `rgr` CLI | Setup, ingest, search, audit, and maintenance | Human-readable or JSON output | | TypeScript API | Embed retrieval in a Node.js application | Typed results with citations | -| Local MCP server | Give coding agents bounded project context | Read-focused retrieval tools | -| Ragmir Chat | Generate an answer with a local GGUF model | Cited local synthesis | +| Local MCP server | Give your preferred AI bounded project context | Read-focused retrieval tools | +| Ragmir Chat | Keep answer generation on the workstation | Cited offline synthesis | | Ragmir TTS | Turn a text brief into audio | Local WAV or explicit online MP3 | Ragmir Core stays retrieval-first. `ask()` returns cited context without calling an LLM. Local chat @@ -58,7 +62,7 @@ flowchart LR C --> D["Cited search results"] D --> E["CLI"] D --> F["TypeScript API"] - D --> G["MCP agents"] + D --> G["AI and automation over MCP"] D -. optional .-> H["Local GGUF chat"] B -. blank PDF pages .-> I["Configured local OCR"] ``` @@ -69,7 +73,7 @@ from the installed npm package. ## Common workflows -### Give an agent cited project context +### Connect the AI or automation you already use ```bash pnpm exec rgr setup --agents claude,codex,kimi,opencode,cline @@ -82,6 +86,11 @@ Agents can request compact evidence first, then expand one returned citation without opening a second index or reading arbitrary files. MCP clients can read `ragmir://context` for a compact base, readiness, freshness, and capability overview before choosing a tool. +Core is model-agnostic: any compatible CLI, TypeScript, or MCP consumer can use the returned +citations. A hosted AI receives the passages you return to it under that provider's data policy. A +local consumer keeps the handoff on the workstation, and the optional Chat package adds local +answer generation when the whole workflow must remain offline. + ### Route knowledge in a monorepo ```bash @@ -176,9 +185,10 @@ Core also exports `previewChunks`, `ask`, `research`, `audit`, `doctor`, `securi | Capability | Default behavior | Network boundary | | --- | --- | --- | | Core retrieval | Local files, local index, `local-hash` retrieval | No network service required | +| Preferred AI or automation | Receives only the passages the integration requests | The consumer's data policy applies; use a local consumer when passages must not leave | | Semantic embeddings | Disabled until explicitly enabled | Model download is explicit; inference can then stay local | | PDF and image OCR | Disabled until a local command is configured | No cloud OCR integration | -| Ragmir Chat | Local inference from a verified GGUF file | Setup may download the selected model | +| Ragmir Chat | Local inference from a verified GGUF profile | Setup may download the selected profile; answer generation then stays local | | Ragmir TTS | Local Transformers.js WAV rendering | Edge MP3 mode sends narration text when explicitly selected | Redaction reduces accidental exposure but is not a compliance certification. Review the @@ -218,6 +228,8 @@ outside Git or under ignored local state. | --- | --- | | [CLI reference](./docs/cli-reference.md) | Commands, options, and JSON output | | [API reference](./docs/api-reference.md) | TypeScript exports and result shapes | +| [Release history](https://github.com/jcode-works/jcode-ragmir/releases) | Generated notes, compatibility changes, and verification artifacts | +| [Changelog](./CHANGELOG.md) | Semantic Versioning and API compatibility policy | | [Configuration](./docs/configuration.md) | Sources, privacy profiles, models, limits, and extractors | | [Agent integration](./docs/agent-integration.md) | Native helpers and MCP clients | | [Troubleshooting](./docs/troubleshooting.md) | Empty indexes, OCR, retrieval, or local-model problems | @@ -236,7 +248,8 @@ pnpm example Read [CONTRIBUTING.md](./CONTRIBUTING.md) before opening a pull request. Report vulnerabilities through [SECURITY.md](./SECURITY.md), not a public issue. Release history is available in -[CHANGELOG.md](./CHANGELOG.md). +[GitHub Releases](https://github.com/jcode-works/jcode-ragmir/releases), with compatibility policy +in [CHANGELOG.md](./CHANGELOG.md). ## License diff --git a/context7.json b/context7.json index 815e6f0..cdc9364 100644 --- a/context7.json +++ b/context7.json @@ -1,7 +1,7 @@ { "$schema": "https://context7.com/schema/context7.json", "projectTitle": "Ragmir", - "description": "Open-source local-first retrieval toolkit for files selected by the project. TypeScript CLI, library, read-focused MCP server, and portable skills keep the index under ignored local state and return cited passages. Optional chat and TTS remain separate packages.", + "description": "Open-source model-agnostic retrieval toolkit for files selected by the project. TypeScript CLI, library, read-focused MCP server, and portable skills keep the index under ignored local state and return cited passages to the user's preferred AI or automation. Optional local chat and TTS remain separate packages.", "excludeFolders": [ "node_modules", "packages/ragmir-core/dist", @@ -19,7 +19,9 @@ "excludeFiles": ["CHANGELOG.md", "pnpm-lock.yaml"], "rules": [ "Ragmir Core returns cited retrieval context only; it does not synthesize answers itself.", + "Any compatible AI, automation, CLI, TypeScript application, or MCP client can consume Core results; use a local consumer when no passage may leave the machine.", "`rgr chat` is optional add-on generation via @jcode.labs/ragmir-chat; the core remains retrieval-only.", + "Qwen and Gemma are optional Ragmir Chat profiles, never requirements of Core, the CLI, the TypeScript API, or MCP.", "The `local-hash` embedding provider (default) is a lexical sha256 embedding, not semantic; use `transformers` for semantic retrieval.", "Switching `embeddingProvider` requires `rgr ingest --rebuild`, since the two providers produce incompatible vectors.", "Run `rgr doctor --fix` after upgrading or misconfiguration to repair scaffolding, `.gitignore` entries, and the agent skill install.", diff --git a/docs/agent-integration.md b/docs/agent-integration.md index 5782155..aeb371c 100644 --- a/docs/agent-integration.md +++ b/docs/agent-integration.md @@ -1,6 +1,17 @@ # Agent integration -Ragmir gives agents cited local passages through one stdio MCP server. Prepare the target repository once: +Ragmir gives the AI or automation you choose cited local passages through CLI or one stdio MCP +server. Core is model-agnostic and never calls a model itself. + +Choose the handoff that matches the corpus: + +| Path | What stays local | What crosses the boundary | +| --- | --- | --- | +| Preferred hosted AI | Corpus, index, and retrieval | Only returned passages, under the AI provider's data policy | +| Local AI or automation | Corpus, index, retrieval, and the consumer | Nothing, unless that consumer uses another network service | +| Ragmir Chat | Corpus, index, retrieval, and answer generation | One explicit model download during setup, then no network | + +Prepare the target repository once: ```bash rgr setup --agents claude,codex,kimi,opencode,cline @@ -73,6 +84,10 @@ and truncation. `ragmir_ask` returns cited evidence, not a model generated answe receive returned passages, so choose that handoff only when it matches the corpus’s confidentiality requirements. +The generated helpers cover Claude Code, Codex, Kimi, OpenCode, and Cline. Other tools can consume +the same evidence through the CLI, TypeScript API, or any compatible MCP client. Hermes, n8n +workers, CI jobs, and internal applications do not require a dedicated Ragmir model integration. + ## Verify ```bash diff --git a/docs/offline-chat-preload.md b/docs/offline-chat-preload.md index ef17b3e..3e74059 100644 --- a/docs/offline-chat-preload.md +++ b/docs/offline-chat-preload.md @@ -1,6 +1,8 @@ -# Offline chat +# Offline answer generation -Ragmir Chat is optional local generation over cited retrieval context. It does not change Ragmir Core’s retrieval-only behavior. +Ragmir Chat is the optional path for corpora whose retrieved passages must not be sent to a hosted +AI. It generates cited answers from Ragmir retrieval context on the same workstation. Ragmir Core, +the CLI, TypeScript API, and MCP server do not require Chat or any particular model. ## Prepare one profile @@ -13,11 +15,14 @@ rgr chat "What evidence supports this decision?" --profile fast --offline | Profile | Use | | --- | --- | | `lite` | Smaller Qwen2.5 profile for lower-memory machines. | -| `fast` | Default Gemma 4 profile. | +| `fast` | Default Gemma 4 profile for a stronger local answer. | | `quality` | Larger Gemma 4 profile, explicit opt-in. | Setup downloads and verifies the selected GGUF under `.ragmir/models/chat/`. Normal answers use that local file and do not download or build a runtime. +These are Chat implementation profiles, not Ragmir Core requirements. You can use Core with your +preferred AI, a local model runner, a deterministic application, or no generative model at all. + ## Air-gapped use Prepare and verify the profile on a connected machine, copy the complete profile directory into the same ignored local path, then rerun `rgr chat doctor --verify` before using `--offline`. diff --git a/llms.txt b/llms.txt index 040abcf..bb5f6c7 100644 --- a/llms.txt +++ b/llms.txt @@ -13,10 +13,14 @@ store. `rgr security-audit` - Core behavior: cited retrieval only. `ask` returns evidence, while synthesis belongs to the calling agent or optional local chat add-on. +- Consumer choice: use the AI or automation you already have through CLI, TypeScript, or MCP. Use a + local consumer or optional Chat when no retrieved passage may leave the machine. - Default retrieval: local-hash, with no model download. Semantic embeddings and local GGUF chat are explicit opt-ins. - Optional packages: `@jcode.labs/ragmir-chat` for local cited GGUF synthesis and `@jcode.labs/ragmir-tts` for local audio or explicitly selected online speech. +- Model boundary: Qwen and Gemma are optional Chat profile choices. Ragmir Core, its CLI, API, and + MCP server do not depend on either family or on any generative model. - Privacy boundary: the corpus and index stay local. A cloud agent receives retrieved passages only when the user chooses that workflow, under that provider's data policy. - OCR boundary: embedded PDF text comes first; a configured local executable runs only for blank diff --git a/package.json b/package.json index f53fd4f..2e82c01 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,7 @@ "description": "Monorepo for Ragmir Core and open-source Ragmir add-ons.", "type": "module", "license": "MIT", - "author": { - "name": "Jean-Baptiste Thery", - "url": "https://github.com/jb-thery" - }, + "author": "Jean-Baptiste Thery (https://github.com/jb-thery)", "homepage": "https://github.com/jcode-works/jcode-ragmir#readme", "repository": { "type": "git", @@ -55,5 +52,9 @@ "@semantic-release/exec": "^7.1.0", "semantic-release": "^25.0.5", "yaml": "^2.9.0" + }, + "main": "index.js", + "directories": { + "doc": "docs" } } diff --git a/packages/ragmir-chat/README.md b/packages/ragmir-chat/README.md index 6e87ec7..eb7dee4 100644 --- a/packages/ragmir-chat/README.md +++ b/packages/ragmir-chat/README.md @@ -11,6 +11,9 @@ retrieved by Ragmir Core, asks the model to answer only from that evidence, and validates the source markers in the visible answer. +Ragmir does not require this package or any model to retrieve evidence. Use Core with your preferred +AI or automation, and add Chat only when answer generation also needs to stay on the workstation. + [Ragmir overview](https://github.com/jcode-works/jcode-ragmir#readme) · [Offline chat guide](https://github.com/jcode-works/jcode-ragmir/blob/main/docs/offline-chat-preload.md) · [Core package](https://www.npmjs.com/package/@jcode.labs/ragmir) @@ -45,6 +48,9 @@ chat commands require that prepared local file and never enable remote model res ## Choose a profile +Profiles are implementation choices for this optional package. They are not requirements of +Ragmir Core, the CLI, the TypeScript API, or the MCP server. + | Profile | Model family | Choose it for | | --- | --- | --- | | `lite` | Qwen2.5 0.5B | Lower-memory machines and short evidence summaries | diff --git a/packages/ragmir-chat/package.json b/packages/ragmir-chat/package.json index d779a8a..65d0af0 100644 --- a/packages/ragmir-chat/package.json +++ b/packages/ragmir-chat/package.json @@ -1,7 +1,7 @@ { "name": "@jcode.labs/ragmir-chat", "version": "0.4.12", - "description": "Ragmir add-on for local offline cited chat with Gemma 4 and llama.cpp.", + "description": "Ragmir add-on for offline cited answer generation with verified local GGUF models and llama.cpp.", "type": "module", "license": "MIT", "author": { @@ -15,6 +15,8 @@ "offline-ai", "local-first", "gemma", + "qwen", + "local-llm", "llama-cpp", "private-ai", "rag" diff --git a/packages/ragmir-core/README.md b/packages/ragmir-core/README.md index 2260252..f33812c 100644 --- a/packages/ragmir-core/README.md +++ b/packages/ragmir-core/README.md @@ -11,6 +11,10 @@ a hosted document store. The default `local-hash` retrieval path works offline, without an account or model download. +Core is independent of the model or client that consumes those passages. Connect the AI or +automation you already use, or keep the consumer local when no retrieved passage may leave the +workstation. + [Project overview](https://github.com/jcode-works/jcode-ragmir#readme) · [CLI reference](https://github.com/jcode-works/jcode-ragmir/blob/main/docs/cli-reference.md) · [API reference](https://github.com/jcode-works/jcode-ragmir/blob/main/docs/api-reference.md) @@ -103,7 +107,7 @@ Frequently used exports: See the [complete API reference](https://github.com/jcode-works/jcode-ragmir/blob/main/docs/api-reference.md) for options and result shapes. -## Connect an AI agent +## Connect your preferred AI or automation ```bash npx rgr setup --agents claude,codex,kimi,opencode,cline @@ -116,6 +120,11 @@ exposes status, search, ask, research, exact citation expansion, audit, evaluati security tools. Retrieval responses have a global byte ceiling and expose metadata-only output metrics. The server does not expose index deletion. +Any compatible CLI, TypeScript, or MCP client can consume the same cited results. A hosted AI +receives returned passages under its provider's data policy. OpenCode or another local consumer can +keep the handoff on the workstation. Optional Ragmir Chat adds local answer generation, but Qwen, +Gemma, and every other generative model remain outside Core. + For a monorepo with root and app-specific bases, run `rgr bases --json` before retrieval when scope is unclear. The nearest configured base is active, nested MCP helpers get unique names, and every helper pins `RAGMIR_PROJECT_ROOT` so clients cannot drift to a sibling index. diff --git a/packages/ragmir-core/examples/document-evidence-benchmark/.ragmir/config.json b/packages/ragmir-core/examples/document-evidence-benchmark/.ragmir/config.json index 9c1093d..a78f794 100644 --- a/packages/ragmir-core/examples/document-evidence-benchmark/.ragmir/config.json +++ b/packages/ragmir-core/examples/document-evidence-benchmark/.ragmir/config.json @@ -1,4 +1,7 @@ { + "privacyProfile": "private", + "retrievalProfile": "balanced", + "acceptedRisks": [], "rawDir": "raw", "storageDir": ".ragmir/storage", "sourcesFile": ".ragmir/sources.txt", @@ -16,7 +19,10 @@ }, "accessLog": true, "mcpMaxTopK": 10, + "mcpMaxOutputBytes": 32768, "topK": 5, + "ingestConcurrency": 1, + "embeddingBatchSize": 16, "chunkSize": 1800, "chunkOverlap": 120 } diff --git a/packages/ragmir-core/examples/sovereign-rag-demo/.ragmir/config.json b/packages/ragmir-core/examples/sovereign-rag-demo/.ragmir/config.json index 3a4dede..c571adc 100644 --- a/packages/ragmir-core/examples/sovereign-rag-demo/.ragmir/config.json +++ b/packages/ragmir-core/examples/sovereign-rag-demo/.ragmir/config.json @@ -1,4 +1,7 @@ { + "privacyProfile": "private", + "retrievalProfile": "balanced", + "acceptedRisks": [], "rawDir": "raw", "storageDir": ".ragmir/storage", "sourcesFile": ".ragmir/sources.txt", @@ -16,7 +19,10 @@ }, "accessLog": true, "mcpMaxTopK": 10, + "mcpMaxOutputBytes": 32768, "topK": 5, + "ingestConcurrency": 1, + "embeddingBatchSize": 16, "chunkSize": 900, "chunkOverlap": 120, "includeExtensions": [".evidence"] diff --git a/packages/ragmir-landing/README.md b/packages/ragmir-landing/README.md index f5d975c..d6651b2 100644 --- a/packages/ragmir-landing/README.md +++ b/packages/ragmir-landing/README.md @@ -83,6 +83,10 @@ Keep secrets in the environment. Never commit them or expose them through `PUBLI - Keep English and French messages aligned whenever visible copy changes. - Ground product claims in the current CLI, API, package, and privacy behavior. - Keep Core retrieval separate from optional Chat and TTS generation. +- Lead with model-agnostic Core and present the user's preferred AI and a fully local consumer as + equal choices. +- Name Qwen and Gemma only in Chat-specific technical copy. They are profiles, not Core or MCP + requirements. - Describe `local-hash` as offline lexical/hash retrieval, not semantic embeddings. - State external boundaries explicitly: model download, Edge TTS, and IndexNow are opt-in actions. - Do not claim universal file support, blanket compliance, or guaranteed confidentiality. diff --git a/packages/ragmir-landing/astro.config.mjs b/packages/ragmir-landing/astro.config.mjs index 00aed04..394ce99 100644 --- a/packages/ragmir-landing/astro.config.mjs +++ b/packages/ragmir-landing/astro.config.mjs @@ -27,14 +27,6 @@ export default defineConfig({ ...(isProduction ? [ sitemap({ - lastmod: new Date(), - serialize(item) { - const path = new URL(item.url).pathname - if (/^\/(?:fr\/)?$/.test(path)) { - return { ...item, changefreq: "weekly", priority: 1.0 } - } - return { ...item, priority: 0.5 } - }, i18n: { defaultLocale, locales: { diff --git a/packages/ragmir-landing/messages/en.json b/packages/ragmir-landing/messages/en.json index bdbf673..14c5813 100644 --- a/packages/ragmir-landing/messages/en.json +++ b/packages/ragmir-landing/messages/en.json @@ -10,18 +10,18 @@ "nav_github": "GitHub", "nav_aria_label": "Main navigation", "language_label": "Language", - "seo_home_title": "Ragmir: local RAG with citations for AI agents", - "seo_home_description": "Index the files you choose, keep the index inside your project, and give AI agents source-backed passages through CLI, TypeScript, or MCP.", - "seo_home_keywords": "Ragmir, local RAG, cited retrieval, confidential documents, MCP server, TypeScript library, local-first knowledge base, AI agents, PDF search", + "seo_home_title": "Ragmir: local RAG and cited context for AI agents", + "seo_home_description": "Ragmir turns Word files, PDFs, specs, and local exports into cited context for your AI or automation, with an optional fully offline answer path.", + "seo_home_keywords": "Ragmir, local RAG, cited retrieval, offline AI, private AI, developer documentation, Word DOCX, PDF search, workflow automation, MCP server, TypeScript library, AI agents", "seo_author": "Jean-Baptiste Thery", "seo_robots": "index, follow", "seo_image_alt": "Ragmir local RAG with cited retrieval for AI agents", "seo_og_site_name": "Ragmir", "seo_application_name": "Ragmir", "hero_badge": "Local index | Verifiable citations | CLI, API & MCP | Open source", - "hero_title_line_1": "Give your AI agents source-backed passages", - "hero_title_line_2": "from the documents you choose.", - "hero_description": "Ragmir is an open-source retrieval toolkit for Node.js. It indexes the files you choose, keeps the index inside your project, and returns cited passages through a CLI, TypeScript API, or read-focused MCP server. The default path needs no account, hosted document store, or model download.", + "hero_title_line_1": "Give your AI", + "hero_title_line_2": "the project evidence it needs.", + "hero_description": "Turn specs, Word files, PDFs, and local exports into cited context for the AI or automation you already use. Keep retrieval local, or keep the full answer path offline for confidential work.", "hero_primary_cta": "Install Ragmir", "hero_secondary_cta": "See use cases", "hero_npm_downloads_label": "Ragmir downloads/month on npm", @@ -29,11 +29,11 @@ "hero_metric_private_label": "Retrieve the passages that matter instead of sending the whole corpus into a prompt.", "hero_metric_precision_value": "Verifiable citations", "hero_metric_precision_label": "Every result carries a source path, excerpt, and chunk or PDF page when available.", - "hero_metric_agents_value": "Local corpus", - "hero_metric_agents_label": "Files and index stay on your machine. A cloud agent receives passages only when you choose that workflow.", + "hero_metric_agents_value": "Your AI, your boundary", + "hero_metric_agents_label": "Use a hosted AI under its data policy, or keep the consumer local when no passage may leave the machine.", "hero_metric_mcp_value": "CLI + API + MCP", "hero_metric_mcp_label": "Use the same retrieval layer from a terminal, Node.js application, or compatible agent.", - "workspace_title": "Cited context for AI", + "workspace_title": "Cited evidence for your AI", "workspace_badge": "Synthetic", "workspace_text": "A preview of the expected flow: project files, team question, traceable answer.", "workspace_file_contracts": "docs/cahier-des-charges-v3.pdf", @@ -46,78 +46,42 @@ "workspace_status_redaction": "Redaction", "workspace_status_index": "Local index", "workspace_status_mcp": "Bounded MCP", - "demo_scenario_military_title": "Modern army", - "demo_scenario_military_description": "A defense cell keeps doctrine, cyber requirements, and exercise notes local: Ragmir gives the AI agent only cited passages for a readiness brief, without an external cloud RAG.", - "demo_scenario_dev_title": "Confidential dev", - "demo_scenario_dev_description": "A developer works from a confidential product spec: Ragmir gives Codex cited requirements, implementation scope, and tests without uploading the whole file to a hosted RAG.", - "demo_scenario_aviation_title": "Aviation", - "demo_scenario_aviation_description": "A developer opens Codex, installs Ragmir, drops an aviation spec into .ragmir/raw/, indexes docs + the local file, then generates cited E2E tests.", - "demo_scenario_security_title": "RFP", - "demo_scenario_security_description": "The security questionnaire and index stay local: Ragmir retrieves cited passages that Codex can use to draft a sourced answer.", - "demo_scenario_incident_title": "Incident", - "demo_scenario_incident_description": "Codex adds incident notes to the local corpus, retrieves the right runbooks, and patches a guardrail with a regression test.", - "demo_scenario_legal_title": "Legal", - "demo_scenario_legal_description": "An agent adds a received PDF to .ragmir/raw/, cross-checks contracts and a tax memo, then prepares a cited brief with explicit human review.", - "demo_scenario_content_title": "Content", - "demo_scenario_content_description": "A corpus of notes, sources, and one transcript stays local while the agent prepares an episode outline grounded in cited passages.", - "demo_scenario_local_title": "Local agent", - "demo_scenario_local_description": "An OpenCode/local workflow connects the same MCP server to the team's chosen model without sending the corpus to an external RAG service.", + "demo_scenario_word_title": "Confidential CDC.docx", + "demo_scenario_word_description": "Index a confidential Word specification locally, then let Codex implement only from cited rules.", + "demo_scenario_drive_title": "Synced Drive", + "demo_scenario_drive_description": "Google Drive already syncs the local folder; native Google files are exported to XLSX before Ragmir indexes the path.", + "demo_scenario_n8n_title": "n8n automation", + "demo_scenario_n8n_description": "A self-hosted n8n workflow calls a local Node worker, reads Ragmir evidence, and routes the decision to human review.", + "demo_scenario_hermes_title": "Hermes Agent", + "demo_scenario_hermes_description": "Connect Ragmir's local MCP runner to Hermes and retrieve a cited procedure without adding a hosted document store.", + "demo_scenario_monorepo_title": "Complex monorepo", + "demo_scenario_monorepo_description": "Add package READMEs, library docs, and shared ADRs from dozens of packages to the configured sources.", + "demo_scenario_gameplan_title": "Confidential plan", + "demo_scenario_gameplan_description": "Turn local strategy, budget, and risk documents into a cited execution plan with explicit assumptions.", "demo_replay_label": "Replay the story", - "demo_out_added_dependency": "Dev dependency added to the project.", - "demo_out_setup_codex": ".ragmir/ is ignored by Git; Codex MCP helper generated.", - "demo_military_out_codex_ready": "Codex CLI ready. Workspace: force-readiness-kit.", - "demo_military_out_setup": ".ragmir/ stays ignored; Codex and Claude MCP helpers generated for the defense team.", - "demo_military_out_raw_copy": "The exercise after-action note stays in .ragmir/raw/ on the secured workstation.", - "demo_military_out_sources": "sources[] targets doctrine, cyber requirements, and versioned readiness reports.", - "demo_military_out_indexed": "Indexed: doctrine=8, cyber=6, reports=3, raw=1 | 221 chunks | 0 security warnings.", - "demo_military_out_brief": "Brief: readiness gaps, owners, evidence, and human-review items; no raw document is injected into the prompt.", - "demo_military_out_done": "Cited brief generated locally in .ragmir/reports/ for internal review.", - "demo_dev_out_codex_ready": "Codex CLI ready. Workspace: secure-workspace.", - "demo_dev_out_raw_copy": "The confidential product spec is stored in .ragmir/raw/ and stays out of Git.", - "demo_dev_out_sources": "sources[] covers product docs, versioned specs, and the React feature.", - "demo_dev_out_indexed": "Indexed: docs=10, specs=4, raw=1, source=8 | 203 chunks | 0 security warnings.", - "demo_dev_out_brief": "Brief: MFA, account recovery, route guard, and audit constraints to handle before coding.", - "demo_dev_out_done": "Dev brief + E2E tests prepared from local citations without uploading the whole spec.", - "demo_aviation_out_codex_ready": "Codex CLI ready. Workspace: air-ops-ui.", - "demo_aviation_out_raw_copy": "The spec is stored in .ragmir/raw/ and stays out of Git.", - "demo_aviation_out_sources": "sources[] now covers existing docs and the React feature.", - "demo_aviation_out_indexed": "Indexed: docs=9, raw=1, source=7 | 214 chunks | 0 security warnings.", - "demo_aviation_out_requirement": "If slot swap changes ETD by more than 15 min, alternate fuel reserve must be recomputed before dispatch confirmation.", - "demo_aviation_out_tests": "covers fuel reserve, dispatch approval, rollback, and audit note", - "demo_aviation_out_done": "Codex writes the tests from [1] and [2], without uploading the whole spec.", - "demo_security_out_codex_ready": "Codex CLI ready. Workspace: policy-api.", - "demo_security_out_raw_copy": "The received questionnaire is copied into .ragmir/raw/ so it stays local.", - "demo_security_out_sources": "sources[] targets the versioned security controls and SLA.", - "demo_security_out_indexed": "Indexed: RFP=1, security=12, SLA=1 | 176 chunks | 0 security warnings.", - "demo_security_out_answer": "Answer: encryption at rest and in transit, 30-day retention, 4 h incident escalation, every point tied to a source.", - "demo_security_out_done": "The RFP draft stays in .ragmir/reports/ until human review.", - "demo_incident_out_codex_ready": "Codex CLI ready. Workspace: incident-console.", - "demo_incident_out_raw_copy": "Incident notes join the local corpus ignored by Git.", - "demo_incident_out_sources": "sources[] targets retry runbooks and reliability ADRs.", - "demo_incident_out_indexed": "Indexed: runbooks=6, ADR=4, notes=1 | 129 chunks | 0 security warnings.", - "demo_incident_out_cause": "Likely cause: parallel retries without a shared budget after an event conflict; the runbook requires a per-operation cap.", - "demo_incident_out_done": "Patch + E2E test grounded in cited runbook and local notes.", - "demo_legal_out_codex_ready": "Codex CLI ready. Workspace: founder-desk.", - "demo_legal_out_setup": ".ragmir/ stays ignored; Codex and Claude MCP helpers generated.", - "demo_legal_out_raw_copy": "The received PDF is stored locally in .ragmir/raw/.", - "demo_legal_out_sources": "sources[] targets versioned contracts and existing tax notes.", - "demo_legal_out_indexed": "Indexed: contracts=8, tax=3, raw=1 | 151 chunks | 0 security warnings.", - "demo_legal_out_risk": "Attention point: renewal notice and VAT position do not align; human review is required before sending.", - "demo_legal_out_done": "Cited brief generated in .ragmir/reports/, with evidence, inferences, and review items.", - "demo_content_out_codex_ready": "Codex CLI ready. Workspace: channel-research.", - "demo_content_out_setup": ".ragmir/ is ignored; Codex and Kimi MCP helpers generated.", - "demo_content_out_raw_copy": "The transcript joins the local corpus without leaving the machine.", - "demo_content_out_sources": "sources[] covers notes, existing episodes, and Markdown sources.", - "demo_content_out_indexed": "Indexed: sources=14, notes=6, transcript=1 | 238 chunks | 0 security warnings.", - "demo_content_out_angle": "Chosen angle: explain attention as an operational checklist, with examples from the interview and notes.", - "demo_content_out_done": "Episode outline created only from cited passages.", - "demo_local_out_agent_ready": "OpenCode ready with a local model configured separately.", - "demo_local_out_setup": ".ragmir/ is ignored; OpenCode helper generated, local-hash mode active with no API key.", - "demo_local_out_raw_copy": "The model risk review stays in the local raw folder.", - "demo_local_out_sources": "sources[] targets product docs and evaluation gates.", - "demo_local_out_indexed": "Indexed: docs=11, evals=5, raw=1 | 184 chunks | 0 security warnings.", - "demo_local_out_gate": "Gate: deployment blocked until red-team, human approval, and documented rollback are green.", - "demo_local_out_done": "Offline checklist ready for the local agent, with citations preserved.", + "demo_word_out_setup": ".ragmir/ stays Git-ignored; the Codex helper and local runner are ready.", + "demo_word_out_indexed": "Indexed locally: 2 DOCX | 74 chunks | 0 uploads.", + "demo_word_out_rules": "Rules: the token expires after 15 minutes, five failed attempts lock the account, and the email must not reveal whether the account exists.", + "demo_word_out_done": "Account recovery code and E2E coverage are grounded in the two cited Word files.", + "demo_drive_out_sync": "Google Drive already synchronized this folder. Planning and user stories are present as XLSX exports, not native shortcuts.", + "demo_drive_out_indexed": "Indexed locally: 2 XLSX, 1 DOCX, 1 PDF | 116 chunks.", + "demo_drive_out_plan": "Release one: deliver team creation before invitations, keep the current account model, then migrate the MCD in a reversible step.", + "demo_drive_out_done": "One plan reconciles the roadmap, exported stories, Word specification, and database model.", + "demo_n8n_out_indexed": "Sales corpus indexed locally: 1 DOCX, 1 PDF, 1 XLSX.", + "demo_n8n_out_input": "Webhook input: should the Acme renewal enter negotiation?", + "demo_n8n_out_decision": "Rule result: REVIEW. The budget owner is missing and the requested discount exceeds the documented exception.", + "demo_n8n_out_done": "n8n creates a Sales Ops approval task; the workflow does not close the deal automatically.", + "demo_hermes_out_setup": ".ragmir/run.cjs is ready; the corpus and index remain local.", + "demo_hermes_out_connected": "Hermes connected to the Ragmir stdio MCP server.", + "demo_hermes_out_path": "P1 path: page the incident lead now, notify the account owner within 15 minutes, and start the customer update cadence.", + "demo_hermes_out_done": "Hermes returns the procedure with citations instead of relying on remembered policy.", + "demo_monorepo_out_sources": "sources[] covers package READMEs, library docs, and root ADRs across 31 packages.", + "demo_monorepo_out_indexed": "Indexed: 31 packages | 428 files | 3,106 chunks.", + "demo_monorepo_out_plan": "Migration order: compatibility adapter, client opt-in, session rollout, then removal after every consumer upgrades.", + "demo_monorepo_out_done": "The migration plan links each step to the owning package and architectural decision.", + "demo_gameplan_out_indexed": "Indexed locally: strategy DOCX, budget XLSX, risk PDF | 93 chunks.", + "demo_gameplan_out_plan": "Thirty days: validate demand, ship the pilot, measure retention, then review runway before expansion. Every assumption is flagged.", + "demo_gameplan_out_done": "The cited plan stays under ignored .ragmir/reports/ for internal review.", "privacy_eyebrow": "Sovereign and private", "privacy_title": "Keep the corpus and index local. Control what leaves.", "privacy_text": "Ragmir has no telemetry and never uploads your corpus to a hosted RAG. Local consumers can keep the full workflow offline; a cloud agent receives retrieved passages under that provider's data policy when you choose that workflow.", @@ -143,7 +107,7 @@ "features_title": "Core retrieval first, optional add-ons when you need output.", "features_text": "Ragmir is split deliberately: the core indexes and retrieves cited local context, while optional packages add audio or local chat without turning the retrieval engine into a hosted AI platform.", "features_core_title": "Ragmir Core", - "features_core_text": "The default package keeps local retrieval inspectable before indexing, explainable after search, and bounded when agents consume it.", + "features_core_text": "The model-agnostic default package keeps local retrieval inspectable before indexing, explainable after search, and bounded for any compatible consumer.", "features_core_item_1": "Previews redacted structured chunks and size distributions without writing an index.", "features_core_item_2": "Explains RRF contributions and retriever ranks, with source and structural-context filters.", "features_core_item_3": "Routes isolated root and app bases in monorepos and exposes bounded MCP context resources.", @@ -158,55 +122,70 @@ "features_tts_item_4": "Keeps audio outputs under ignored .ragmir/audio by default.", "features_tts_item_5": "Can use Edge TTS only when online speech is explicitly acceptable.", "features_chat_title": "Ragmir Chat", - "features_chat_text": "Ragmir Chat runs verified GGUF models locally through node-llama-cpp 3.19 and writes answers grounded in Ragmir citations.", + "features_chat_text": "Optional Ragmir Chat keeps cited answer generation on the workstation with a verified local GGUF model.", "features_chat_item_1": "Grounds each answer in retrieved Ragmir passages and preserves their citations.", - "features_chat_item_2": "Adds a 491 MB Qwen2.5 0.5B lite profile for older computers, alongside default Gemma 4 E2B fast and optional E4B quality profiles.", + "features_chat_item_2": "Offers Qwen2.5 lite and Gemma 4 fast or quality profiles as local Chat choices, never as Core or MCP requirements.", "features_chat_item_3": "Uses Metal on Apple Silicon and CUDA or Vulkan on supported Linux and Windows machines, with one verified GGUF.", "features_chat_item_4": "Offers off, standard, and deep thinking modes; raw thought stays hidden and is never persisted.", "features_chat_item_5": "Downloads only during explicit setup, then runs CLI answers offline with no Ollama, Python, or hosted LLM API.", "agents_eyebrow": "Agent workflows", "agents_title": "An evidence layer for agents, not another memory system.", - "agents_text": "Ragmir complements native code search and agent memory with cited local evidence from documents. Cloud agents can query selected passages, OpenCode can keep the consumer local, and Ragmir Chat provides optional local synthesis through the CLI.", + "agents_text": "Connect Ragmir to the AI you prefer through CLI or MCP, or keep the consumer and answer generation on the workstation. Core never depends on a specific model.", "agents_command_label": "Agent command", "agents_command": "npx rgr install-agent --agents claude,codex,kimi,opencode", - "agents_targets_title": "Supported agents", - "agents_targets_text": "Cloud agents query Ragmir, OpenCode can run locally, Ragmir Chat provides optional CLI synthesis with Gemma 4 or a lite model, and Ollama remains a separate external runtime.", - "agents_cloud_name": "Cloud agents", - "agents_cloud_text": "Claude, Codex, Kimi, and GLM-style cloud agents query Ragmir through read-focused MCP, then reason from the returned passages under their provider's data policy.", - "agents_opencode_text": "OpenCode is the local agent runner option when you want to keep the workflow close to the workstation and avoid another hosted RAG service.", - "agents_chat_name": "Ragmir Chat", - "agents_chat_text": "The optional chat add-on runs a 491 MB Qwen2.5 lite model or Gemma 4 QAT GGUF locally through node-llama-cpp 3.19, cites retrieved passages, and needs no Ollama, Python, or hosted LLM API.", - "agents_ollama_text": "Ollama is not an agent target. It stays an optional external runtime when you prefer managing local models outside Ragmir.", + "agents_targets_title": "Choose where the evidence goes", + "agents_targets_text": "Send bounded cited passages to the AI you already use, keep the handoff local, generate an offline answer, or consume retrieval results without any model.", + "agents_preferred_name": "Your preferred AI", + "agents_preferred_text": "Claude, Codex, Kimi, Hermes, and other compatible clients can consume cited passages through CLI or MCP. A hosted client's data policy applies to those passages.", + "agents_local_name": "Local AI agent", + "agents_local_text": "OpenCode or another local CLI or MCP consumer can keep retrieved passages on the workstation. No hosted Ragmir service is involved.", + "agents_offline_name": "Offline answers", + "agents_offline_text": "Optional Ragmir Chat generates cited answers from one verified local GGUF. Qwen and Gemma are included profile choices, not Core requirements.", + "agents_automation_name": "Apps and automation", + "agents_automation_text": "Node.js services, n8n workers, and CI jobs consume typed or JSON retrieval results without adding a generative model.", "use_cases_eyebrow": "Use cases", - "use_cases_title": "What your agents and teams can do with Ragmir.", - "use_cases_text": "Point Ragmir at your confidential documents, repository files, and docs. Your agents get the cited passages relevant to the task, not a token-heavy dump of the whole corpus.", - "use_case_onboarding_eyebrow": "Docs & onboarding", - "use_case_onboarding_title": "Onboard from the docs, not from memory.", - "use_case_onboarding_text": "Index specifications, runbooks, ADRs, and decisions. A new developer or agent can see the cited requirements and past choices before changing code.", - "use_case_refactor_eyebrow": "Specs & contracts", - "use_case_refactor_title": "Change risky code with the full spec.", - "use_case_refactor_text": "Before an agent refactors or migrates, Ragmir gives it the cited contracts, specs, and past decisions: changes are planned on what the documents actually say, not on a guess.", - "use_case_debug_eyebrow": "Runbooks & tracing", - "use_case_debug_title": "Trace an issue across your runbooks.", - "use_case_debug_text": "Ask where a flow is documented and why it fails; Ragmir returns the cited passages from your runbooks and incident notes, giving the agent the context it usually lacks.", - "use_case_team_eyebrow": "Team memory", - "use_case_team_title": "Answer without waking up the person who knows.", - "use_case_team_text": "Team members query policies, decisions, incidents, and project notes from the same bounded local context.", - "use_case_support_eyebrow": "Support handover", - "use_case_support_title": "Give support the cited history that matters.", - "use_case_support_text": "Index team notes, technical docs, tickets, and past decisions locally so an agent can retrieve the relevant evidence for answers or handover briefs.", - "use_case_compliance_eyebrow": "Audit evidence", - "use_case_compliance_title": "Prepare audits from the evidence you already have.", - "use_case_compliance_text": "Point Ragmir at policies, controls, logs, and internal procedures to retrieve cited evidence locally. Keep the consumer local when no passage may reach a cloud provider.", - "use_case_vendor_eyebrow": "Vendor due diligence", - "use_case_vendor_title": "Explore a data room or a vendor dossier.", - "use_case_vendor_text": "Analyze contracts, policies, technical appendices, and compliance documents with citations instead of scattered manual reading.", - "use_case_legal_eyebrow": "Legal and tax", - "use_case_legal_title": "Compare clauses, obligations, and evidence.", - "use_case_legal_text": "Contracts, tax notes, company memos, or residency research stay local while the agent retrieves the relevant sources.", - "use_case_research_eyebrow": "Research and reports", - "use_case_research_title": "Write from cited sources.", - "use_case_research_text": "Briefings, Markdown reports, and summaries can separate evidence, inferences, uncertainties, and items to review.", + "use_cases_title": "Four developer workflows for local RAG with cited sources.", + "use_cases_text": "See how a private spec, incident runbook, n8n automation, or Node.js document search starts from local sources while Ragmir returns only the cited passages each tool needs. No hosted document store or whole-corpus prompt required.", + "use_cases_tabs_label": "Developer use case explorer", + "use_cases_previous": "Previous use case", + "use_cases_next": "Next use case", + "use_cases_counter": "{current} / {total}", + "use_cases_sources_label": "Local sources", + "use_cases_request_label": "Developer request", + "use_cases_retrieval_label": "Bounded cited retrieval", + "use_cases_handoff_label": "Tool and outcome", + "use_case_spec_tab": "Private spec", + "use_case_spec_eyebrow": "Codex + private DOCX", + "use_case_spec_title": "Ship what the Word spec actually requires.", + "use_case_spec_description": "A confidential specification and its acceptance criteria become a bounded, cited brief for the coding agent.", + "use_case_spec_request": "Implement account recovery and add its E2E coverage. Cite every rule.", + "use_case_spec_consumer": "Codex through local MCP", + "use_case_spec_result": "The implementation follows the documented lockout, token expiry, and privacy rules, with tests tied to each requirement.", + "use_case_spec_citation": "2 cited Word passages", + "use_case_hermes_tab": "P1 incident", + "use_case_hermes_eyebrow": "Hermes + runbooks", + "use_case_hermes_title": "Let the on-call agent read the runbook before answering.", + "use_case_hermes_description": "Hermes asks the local Ragmir MCP server for the P1 procedure instead of relying on memory.", + "use_case_hermes_request": "Map the P1 escalation path and cite the source for every step.", + "use_case_hermes_consumer": "Hermes through stdio MCP", + "use_case_hermes_result": "The operator gets the incident lead, 15-minute notification window, and customer-update cadence in the right order.", + "use_case_hermes_citation": "2 cited operating procedures", + "use_case_n8n_tab": "n8n workflow", + "use_case_n8n_eyebrow": "n8n + non-code data", + "use_case_n8n_title": "Give a no-code workflow the evidence it needs before it acts.", + "use_case_n8n_description": "A self-hosted n8n flow calls a local Node worker; Ragmir checks pricing and renewal policy without adding a cloud connector.", + "use_case_n8n_request": "Should this renewal enter negotiation or require approval?", + "use_case_n8n_consumer": "n8n through a local Node worker", + "use_case_n8n_result": "The workflow returns REVIEW, creates a human approval task, and does not close the deal automatically.", + "use_case_n8n_citation": "2 cited business rules", + "use_case_api_tab": "Document API", + "use_case_api_eyebrow": "TypeScript API + Node.js", + "use_case_api_title": "Build a local document search API with cited results.", + "use_case_api_description": "A Node.js service embeds Ragmir's TypeScript API to index project PDF, DOCX, Markdown, and structured files, then return bounded passages.", + "use_case_api_request": "Find the authentication contract and return the relevant passage, source path, and page as JSON.", + "use_case_api_consumer": "Node.js service through the TypeScript API", + "use_case_api_result": "The endpoint returns ranked passages with exact file, line, and PDF page citations for an internal search UI or coding agent.", + "use_case_api_citation": "3 ranked, cited passages", "use_case_audio_eyebrow": "Audio and micro-learning", "use_case_audio_title": "Listen to a dense dossier instead of reading it.", "use_case_audio_text": "Generate a short audio summary (MP3/WAV) from cited passages with rgr audio, to review a spec, an architecture, or a watch without staying in front of the screen.", @@ -228,18 +207,18 @@ "faq_private_question": "Does Ragmir send my confidential code or documents?", "faq_private_answer": "Ragmir indexes only the local folders you choose and keeps generated state in the git-ignored .ragmir/ folder. Core retrieval has no telemetry or document upload. Explicit model setup downloads public model weights, never your documents; cloud agents can receive cited passages when you choose to use them.", "faq_agents_question": "Which AI agents and tools does Ragmir work with?", - "faq_agents_answer": "Claude Code, Codex, Kimi, GLM/Zhipu-style cloud clients, OpenCode, and internal wrappers can query Ragmir through a local CLI or helper. Ragmir Chat adds optional Gemma 4 or lightweight Qwen2.5 synthesis through the CLI.", + "faq_agents_answer": "Ragmir Core is model-agnostic. Native helpers cover Claude Code, Codex, Kimi, OpenCode, and Cline; Hermes, other MCP clients, Node.js applications, n8n workers, and internal tools can consume the same cited results through MCP, CLI, or TypeScript.", "faq_offline_question": "Does Ragmir require an API key, a model download, or an internet connection?", - "faq_offline_answer": "No for the default path. Local-hash retrieval runs fully offline with no model or API key. Ragmir Chat downloads one verified GGUF during explicit setup, then answers offline. The 491 MB Qwen2.5 lite profile targets older computers and forces thinking off; Gemma 4 fast and quality provide stronger synthesis. Metal, CUDA, Vulkan, and CPU backends are selected automatically. No Ollama, Python, or API key is required.", + "faq_offline_answer": "No for the default path. Local-hash retrieval runs offline with no model or API key. For a fully offline workflow, use a local consumer or set up optional Ragmir Chat, which downloads and verifies one selected GGUF profile once, then generates locally. No Ollama, Python, or hosted LLM API is required.", "faq_compare_question": "How does Ragmir differ from an IDE's code indexing or a cloud RAG?", "faq_compare_answer": "Native code search already handles structured code well. Ragmir targets specifications, contracts, PDFs, runbooks, and exported team documents that need citations. Unlike a hosted RAG, Ragmir keeps its index on your machine and returns only cited passages through read-focused MCP. A cloud agent receives those passages only when you choose that workflow.", "faq_role_question": "Does Ragmir write the answers for me?", - "faq_role_answer": "Ragmir Core returns cited passages from your local files; your agent or model writes from those sources. The optional rgr chat add-on uses a verified local Qwen2.5 or Gemma 4 model to generate a cited answer. Lite disables thinking; Gemma modes keep raw thought hidden and unpersisted.", + "faq_role_answer": "Ragmir Core returns cited passages from your local files; the AI or application you choose decides what to do with them. Optional rgr chat adds cited answer generation from a verified local profile when the response must also stay on the workstation.", "faq_formats_question": "Which file formats can Ragmir index?", "faq_formats_answer": "Source code, text, Markdown, PDF, Office and OpenDocument, EPUB, HTML, CSV, JSON, and YAML, plus the custom text extensions you enable. Unsupported files are flagged explicitly, and scanned PDFs can use an optional OCR command.", "closing_eyebrow": "Start with the core", "closing_title": "Install Ragmir, keep the dossier local, query the evidence.", - "closing_text": "No hosted account is required. Lite and Gemma 4 chat stay local after explicit setup; cloud-agent use follows that provider's data handling.", + "closing_text": "Connect cited evidence to your preferred AI, or prepare a local Chat profile and keep retrieval and answer generation offline. No hosted Ragmir account is required.", "closing_primary_cta": "Open GitHub", "closing_secondary_cta": "Install", "command_copied": "Copied to clipboard", @@ -248,7 +227,10 @@ "footer_nav_label": "Footer", "footer_link_npm": "npm", "footer_link_docs": "Docs", - "footer_text": "Ragmir is built by JCode Labs for local retrieval with verifiable citations over project documents.", + "footer_link_releases": "Releases", + "footer_link_changelog": "Changelog", + "footer_link_api": "API reference", + "footer_text": "Ragmir is built by JCode Labs for developer workflows grounded in cited project documents.", "footer_version_label": "Current Ragmir version on npm", "use_case_youtube_eyebrow": "Content & media", "use_case_youtube_title": "Automate a YouTube channel from a document corpus.", diff --git a/packages/ragmir-landing/messages/fr.json b/packages/ragmir-landing/messages/fr.json index 94be083..c99657b 100644 --- a/packages/ragmir-landing/messages/fr.json +++ b/packages/ragmir-landing/messages/fr.json @@ -10,18 +10,18 @@ "nav_github": "GitHub", "nav_aria_label": "Navigation principale", "language_label": "Langue", - "seo_home_title": "Ragmir : RAG local avec citations pour agents IA", - "seo_home_description": "Indexez les fichiers choisis, gardez l'index dans le projet et fournissez aux agents IA des passages sourcés via CLI, TypeScript ou MCP.", - "seo_home_keywords": "Ragmir, RAG local, recherche citée, documents confidentiels, serveur MCP, librairie TypeScript, base de connaissance locale, agents IA, recherche PDF", + "seo_home_title": "Ragmir : RAG local et contexte cité pour agents IA", + "seo_home_description": "Ragmir transforme fichiers Word, PDF, specs et exports locaux en contexte cité pour votre IA ou vos automatisations, avec une réponse hors ligne en option.", + "seo_home_keywords": "Ragmir, RAG local, recherche citée, IA hors ligne, IA privée, documentation développeur, Word DOCX, recherche PDF, automatisation workflow, serveur MCP, bibliothèque TypeScript, agents IA", "seo_author": "Jean-Baptiste Thery", "seo_robots": "index, follow", "seo_image_alt": "Ragmir RAG local avec recherche citée pour agents IA", "seo_og_site_name": "Ragmir", "seo_application_name": "Ragmir", "hero_badge": "Index local | Citations vérifiables | CLI, API & MCP | Open source", - "hero_title_line_1": "Donnez à vos agents IA des passages sourcés", - "hero_title_line_2": "issus des documents que vous choisissez.", - "hero_description": "Ragmir est une boîte à outils de recherche open source pour Node.js. Il indexe les fichiers choisis, garde l'index dans votre projet et renvoie des passages cités via une CLI, une API TypeScript ou un serveur MCP local orienté lecture. Le parcours par défaut ne nécessite ni compte, ni stockage documentaire hébergé, ni téléchargement de modèle.", + "hero_title_line_1": "Donnez à votre IA", + "hero_title_line_2": "les preuves du projet dont elle a besoin.", + "hero_description": "Transformez specs, fichiers Word, PDF et exports locaux en contexte cité pour l'IA ou l'automatisation que vous utilisez déjà. Gardez la recherche locale, ou gardez aussi la génération des réponses hors ligne pour les travaux confidentiels.", "hero_primary_cta": "Installer Ragmir", "hero_secondary_cta": "Voir les cas d'usage", "hero_npm_downloads_label": "téléchargements/mois de Ragmir sur npm", @@ -29,11 +29,11 @@ "hero_metric_private_label": "Récupérez les passages utiles au lieu d'envoyer tout le corpus dans un prompt.", "hero_metric_precision_value": "Citations vérifiables", "hero_metric_precision_label": "Chaque résultat indique la source, l'extrait et le chunk ou la page PDF lorsqu'elle existe.", - "hero_metric_agents_value": "Corpus local", - "hero_metric_agents_label": "Fichiers et index restent sur votre machine. Un agent cloud reçoit des passages seulement si vous choisissez ce workflow.", + "hero_metric_agents_value": "Votre IA, vos règles", + "hero_metric_agents_label": "Utilisez une IA hébergée selon sa politique de données, ou gardez le consommateur local si aucun passage ne doit sortir.", "hero_metric_mcp_value": "CLI + API + MCP", "hero_metric_mcp_label": "Utilisez la même couche de recherche depuis un terminal, une application Node.js ou un agent compatible.", - "workspace_title": "Contexte cité pour l'IA", + "workspace_title": "Preuves citées pour votre IA", "workspace_badge": "Synthétique", "workspace_text": "Un aperçu du flux attendu : fichiers projet, question d'équipe, réponse traçable.", "workspace_file_contracts": "docs/cahier-des-charges-v3.pdf", @@ -46,78 +46,42 @@ "workspace_status_redaction": "Masquage", "workspace_status_index": "Index local", "workspace_status_mcp": "MCP borné", - "demo_scenario_military_title": "Armée moderne", - "demo_scenario_military_description": "Une cellule défense garde doctrines, exigences cyber et retours d'exercice en local : Ragmir donne à l'agent IA seulement les passages cités pour un brief de préparation, sans cloud RAG externe.", - "demo_scenario_dev_title": "Dev confidentiel", - "demo_scenario_dev_description": "Un développeur travaille sur un cahier des charges confidentiel : Ragmir donne à Codex les exigences citées, le périmètre et les tests sans téléverser tout le fichier vers un RAG hébergé.", - "demo_scenario_aviation_title": "Aviation", - "demo_scenario_aviation_description": "Un développeur lance Codex, installe Ragmir, ajoute un cahier des charges aérien dans .ragmir/raw/, indexe docs + fichier local, puis génère des tests E2E cités.", - "demo_scenario_security_title": "RFP", - "demo_scenario_security_description": "Le questionnaire de sécurité et l'index restent locaux : Ragmir récupère les passages cités dont Codex a besoin pour rédiger une réponse sourcée.", - "demo_scenario_incident_title": "Incident", - "demo_scenario_incident_description": "Codex ajoute les notes d'incident au corpus local, retrouve les runbooks utiles et patch une protection avec un test de non-régression.", - "demo_scenario_legal_title": "Juridique", - "demo_scenario_legal_description": "Un agent ajoute un PDF reçu dans .ragmir/raw/, croise contrats et mémo fiscal, puis prépare un brief cité avec revue humaine explicite.", - "demo_scenario_content_title": "Contenu", - "demo_scenario_content_description": "Un corpus de notes, sources et transcription reste local pendant que l'agent prépare un plan d'épisode ancré dans les passages cités.", - "demo_scenario_local_title": "Agent local", - "demo_scenario_local_description": "Un workflow OpenCode/local branche le même serveur MCP sur un modèle choisi par l'équipe, sans envoyer le corpus à un service RAG externe.", - "demo_replay_label": "Relancer l'histoire", - "demo_out_added_dependency": "Dépendance dev ajoutée au projet.", - "demo_out_setup_codex": ".ragmir/ est ignoré par Git ; helper MCP Codex généré.", - "demo_military_out_codex_ready": "Codex CLI prêt. Workspace : force-readiness-kit.", - "demo_military_out_setup": ".ragmir/ reste ignoré ; helpers MCP Codex et Claude générés pour l'équipe défense.", - "demo_military_out_raw_copy": "Le retour d'exercice reste dans .ragmir/raw/ sur le poste sécurisé.", - "demo_military_out_sources": "sources[] cible doctrine, exigences cyber et rapports de préparation déjà versionnés.", - "demo_military_out_indexed": "Indexé : doctrine=8, cyber=6, rapports=3, raw=1 | 221 chunks | 0 alerte sécurité.", - "demo_military_out_brief": "Brief : écarts de préparation, propriétaires, preuves et points de revue humaine ; aucun document brut n'est injecté dans le prompt.", - "demo_military_out_done": "Brief cité généré localement dans .ragmir/reports/ pour revue interne.", - "demo_dev_out_codex_ready": "Codex CLI prêt. Workspace : secure-workspace.", - "demo_dev_out_raw_copy": "Le cahier des charges confidentiel est rangé dans .ragmir/raw/ et reste hors Git.", - "demo_dev_out_sources": "sources[] couvre docs produit, specs versionnées et feature React.", - "demo_dev_out_indexed": "Indexé : docs=10, specs=4, raw=1, source=8 | 203 chunks | 0 alerte sécurité.", - "demo_dev_out_brief": "Brief : MFA, récupération de compte, garde route et contraintes d'audit à traiter avant le code.", - "demo_dev_out_done": "Brief dev + tests E2E préparés depuis les citations locales, sans téléverser tout le cahier des charges.", - "demo_aviation_out_codex_ready": "Codex CLI prêt. Workspace : air-ops-ui.", - "demo_aviation_out_raw_copy": "Le cahier des charges est rangé dans .ragmir/raw/ et reste hors Git.", - "demo_aviation_out_sources": "sources[] couvre maintenant la documentation existante et la feature React.", - "demo_aviation_out_indexed": "Indexé : docs=9, raw=1, source=7 | 214 chunks | 0 alerte sécurité.", - "demo_aviation_out_requirement": "Si le slot change l'ETD de plus de 15 min, la réserve carburant alternative doit être recalculée avant confirmation dispatch.", - "demo_aviation_out_tests": "couvre réserve carburant, approbation dispatch, rollback et note d'audit", - "demo_aviation_out_done": "Codex produit les tests depuis [1] et [2], sans téléverser tout le cahier des charges.", - "demo_security_out_codex_ready": "Codex CLI prêt. Workspace : policy-api.", - "demo_security_out_raw_copy": "Le questionnaire reçu est copié dans .ragmir/raw/ pour rester local.", - "demo_security_out_sources": "sources[] cible les contrôles sécurité et le SLA déjà versionnés.", - "demo_security_out_indexed": "Indexé : RFP=1, sécurité=12, SLA=1 | 176 chunks | 0 alerte sécurité.", - "demo_security_out_answer": "Réponse : chiffrement au repos et en transit, rétention 30 jours, escalade incident sous 4 h, chaque point relié à une source.", - "demo_security_out_done": "Le brouillon RFP reste dans .ragmir/reports/ jusqu'à validation humaine.", - "demo_incident_out_codex_ready": "Codex CLI prêt. Workspace : incident-console.", - "demo_incident_out_raw_copy": "Les notes d'incident rejoignent le corpus local ignoré par Git.", - "demo_incident_out_sources": "sources[] cible les runbooks de reprise et les ADR de fiabilité.", - "demo_incident_out_indexed": "Indexé : runbooks=6, ADR=4, notes=1 | 129 chunks | 0 alerte sécurité.", - "demo_incident_out_cause": "Cause probable : retries parallèles sans budget partagé après un conflit d'événement ; le runbook impose un plafond par opération.", - "demo_incident_out_done": "Patch + test E2E fondés sur le runbook et les notes locales citées.", - "demo_legal_out_codex_ready": "Codex CLI prêt. Workspace : founder-desk.", - "demo_legal_out_setup": ".ragmir/ reste ignoré ; helpers MCP Codex et Claude générés.", - "demo_legal_out_raw_copy": "Le PDF reçu est rangé en local dans .ragmir/raw/.", - "demo_legal_out_sources": "sources[] cible contrats versionnés et notes fiscales existantes.", - "demo_legal_out_indexed": "Indexé : contrats=8, fiscal=3, raw=1 | 151 chunks | 0 alerte sécurité.", - "demo_legal_out_risk": "Point d'attention : le préavis de renouvellement et la position TVA ne s'alignent pas ; revue humaine requise avant envoi.", - "demo_legal_out_done": "Brief cité généré dans .ragmir/reports/, avec preuves, inférences et points à faire valider.", - "demo_content_out_codex_ready": "Codex CLI prêt. Workspace : channel-research.", - "demo_content_out_setup": ".ragmir/ est ignoré ; helpers MCP Codex et Kimi générés.", - "demo_content_out_raw_copy": "La transcription rejoint le corpus local sans quitter la machine.", - "demo_content_out_sources": "sources[] couvre notes, épisodes existants et sources Markdown.", - "demo_content_out_indexed": "Indexé : sources=14, notes=6, transcript=1 | 238 chunks | 0 alerte sécurité.", - "demo_content_out_angle": "Angle retenu : expliquer l'attention comme une checklist opérationnelle, avec exemples tirés de l'interview et des notes.", - "demo_content_out_done": "Plan d'épisode créé uniquement à partir des passages cités.", - "demo_local_out_agent_ready": "OpenCode prêt avec modèle local configuré séparément.", - "demo_local_out_setup": ".ragmir/ est ignoré ; helper OpenCode généré, mode local-hash actif sans clé API.", - "demo_local_out_raw_copy": "La revue de risque modèle reste dans le dossier raw local.", - "demo_local_out_sources": "sources[] cible les docs produit et les gates d'évaluation.", - "demo_local_out_indexed": "Indexé : docs=11, evals=5, raw=1 | 184 chunks | 0 alerte sécurité.", - "demo_local_out_gate": "Gate : déploiement bloqué tant que red-team, approbation humaine et rollback documenté ne sont pas verts.", - "demo_local_out_done": "Checklist offline prête pour l'agent local, avec citations conservées.", + "demo_scenario_word_title": "CDC.docx confidentiel", + "demo_scenario_word_description": "Indexez un cahier des charges Word confidentiel en local, puis laissez Codex implémenter uniquement à partir de règles citées.", + "demo_scenario_drive_title": "Drive synchronisé", + "demo_scenario_drive_description": "Google Drive synchronise déjà le dossier local ; les fichiers Google natifs sont exportés en XLSX avant l'indexation par Ragmir.", + "demo_scenario_n8n_title": "Automatisation n8n", + "demo_scenario_n8n_description": "Un workflow n8n auto-hébergé appelle un worker Node local, lit les preuves fournies par Ragmir et soumet la décision à une validation humaine.", + "demo_scenario_hermes_title": "Hermes Agent", + "demo_scenario_hermes_description": "Connectez le lanceur MCP local de Ragmir à Hermes, puis récupérez une procédure citée sans ajouter de stockage documentaire hébergé.", + "demo_scenario_monorepo_title": "Monorepo complexe", + "demo_scenario_monorepo_description": "Ajoutez les README, docs de bibliothèques et ADR partagés de dizaines de packages aux sources configurées.", + "demo_scenario_gameplan_title": "Plan confidentiel", + "demo_scenario_gameplan_description": "Transformez vos documents locaux de stratégie, de budget et de gestion des risques en plan d'exécution cité, avec des hypothèses explicites.", + "demo_replay_label": "Rejouer le scénario", + "demo_word_out_setup": ".ragmir/ reste ignoré par Git ; l'assistant Codex et le lanceur local sont prêts.", + "demo_word_out_indexed": "Indexé en local : 2 DOCX | 74 segments | aucun téléversement.", + "demo_word_out_rules": "Règles : jeton valable 15 minutes, verrouillage après cinq échecs et e-mail qui ne révèle jamais si le compte existe.", + "demo_word_out_done": "Le code de récupération et les tests E2E reposent sur les deux fichiers Word cités.", + "demo_drive_out_sync": "Google Drive a déjà synchronisé ce dossier. Le planning et les récits utilisateur sont disponibles sous forme d'exports XLSX, et non de raccourcis natifs.", + "demo_drive_out_indexed": "Indexé en local : 2 XLSX, 1 DOCX, 1 PDF | 116 segments.", + "demo_drive_out_plan": "Version 1 : créer l'équipe avant les invitations, conserver le modèle de compte actuel, puis migrer le MCD au cours d'une étape réversible.", + "demo_drive_out_done": "Un plan réconcilie la feuille de route, les récits utilisateur exportés, la spécification Word et le modèle de données.", + "demo_n8n_out_indexed": "Corpus commercial indexé en local : 1 DOCX, 1 PDF, 1 XLSX.", + "demo_n8n_out_input": "Entrée webhook : le renouvellement Acme doit-il passer en négociation ?", + "demo_n8n_out_decision": "Résultat de la règle : REVIEW. Le responsable du budget manque et la remise demandée dépasse l'exception documentée.", + "demo_n8n_out_done": "n8n crée une tâche de validation pour l'équipe Sales Ops ; le workflow ne clôture pas l'opportunité automatiquement.", + "demo_hermes_out_setup": ".ragmir/run.cjs est prêt ; le corpus et l'index restent locaux.", + "demo_hermes_out_connected": "Hermes est connecté au serveur MCP stdio de Ragmir.", + "demo_hermes_out_path": "Parcours P1 : alerter le responsable de l'incident, prévenir le responsable du compte dans les 15 minutes et lancer la cadence d'information client.", + "demo_hermes_out_done": "Hermes renvoie la procédure avec ses citations au lieu de s'appuyer sur sa mémoire.", + "demo_monorepo_out_sources": "sources[] couvre les README, la documentation des bibliothèques et les ADR à la racine de 31 packages.", + "demo_monorepo_out_indexed": "Indexé : 31 packages | 428 fichiers | 3 106 segments.", + "demo_monorepo_out_plan": "Ordre de migration : adaptateur de compatibilité, activation côté client, déploiement des sessions, puis retrait une fois tous les consommateurs mis à jour.", + "demo_monorepo_out_done": "Le plan relie chaque étape au package concerné et à la décision d'architecture correspondante.", + "demo_gameplan_out_indexed": "Indexé en local : stratégie DOCX, budget XLSX, risques PDF | 93 segments.", + "demo_gameplan_out_plan": "Trente jours : valider la demande, livrer le pilote, mesurer la rétention, puis vérifier la trésorerie disponible avant de poursuivre le développement. Chaque hypothèse est signalée.", + "demo_gameplan_out_done": "Le plan cité reste dans le dossier .ragmir/reports/, ignoré par Git, pour validation interne.", "privacy_eyebrow": "Souverain et privé", "privacy_title": "Gardez le corpus et l'index en local. Contrôlez ce qui sort.", "privacy_text": "Ragmir n'ajoute aucune télémétrie et n'envoie jamais votre corpus vers un RAG hébergé. Un consommateur local peut garder tout le workflow hors ligne ; un agent cloud reçoit les passages récupérés selon la politique de son fournisseur lorsque vous choisissez ce workflow.", @@ -143,7 +107,7 @@ "features_title": "D'abord le cœur de recherche, puis des modules optionnels pour générer.", "features_text": "Ragmir est séparé volontairement : le cœur indexe et récupère du contexte local cité, tandis que les packages optionnels ajoutent l'audio ou le chat local sans transformer le moteur de recherche en plateforme IA hébergée.", "features_core_title": "Ragmir Core", - "features_core_text": "Le package par défaut rend la recherche locale inspectable avant l'indexation, explicable après la recherche et bornée lorsqu'un agent la consomme.", + "features_core_text": "Le package par défaut, indépendant du modèle, rend la recherche locale inspectable avant l'indexation, explicable après la recherche et bornée pour tout consommateur compatible.", "features_core_item_1": "Prévisualise les chunks structurés et expurgés ainsi que leurs distributions, sans écrire d'index.", "features_core_item_2": "Explique les contributions RRF et les rangs, avec des filtres de source et de contexte structurel.", "features_core_item_3": "Route des bases racine et applicatives isolées dans les monorepos et expose des ressources MCP bornées.", @@ -158,55 +122,70 @@ "features_tts_item_4": "Garde les sorties audio sous .ragmir/audio ignoré par défaut.", "features_tts_item_5": "Peut utiliser Edge TTS seulement quand la voix en ligne est explicitement acceptable.", "features_chat_title": "Ragmir Chat", - "features_chat_text": "Ragmir Chat exécute localement des modèles GGUF vérifiés via node-llama-cpp 3.19 et rédige des réponses fondées sur les citations Ragmir.", + "features_chat_text": "Ragmir Chat, optionnel, garde la génération de réponses citées sur le poste avec un modèle GGUF local vérifié.", "features_chat_item_1": "Fonde chaque réponse sur les passages récupérés par Ragmir et conserve leurs citations.", - "features_chat_item_2": "Ajoute un profil lite Qwen2.5 0.5B de 491 Mo pour les ordinateurs anciens, en plus de Gemma 4 E2B fast par défaut et E4B quality optionnel.", + "features_chat_item_2": "Propose les profils Qwen2.5 lite et Gemma 4 fast ou quality pour le Chat local, jamais comme exigences de Core ou du MCP.", "features_chat_item_3": "Utilise Metal sur Apple Silicon et CUDA ou Vulkan sur les machines Linux et Windows compatibles, avec un seul GGUF vérifié.", "features_chat_item_4": "Propose les modes de réflexion off, standard et deep ; le raisonnement brut reste masqué et n'est jamais conservé.", "features_chat_item_5": "Télécharge seulement pendant la configuration explicite, puis répond hors ligne via la CLI sans Ollama, Python ni API LLM hébergée.", "agents_eyebrow": "Workflows agents", "agents_title": "Un socle de preuves pour les agents, pas une mémoire de plus.", - "agents_text": "Ragmir complète la recherche de code native et la mémoire des agents avec des preuves locales citées issues des documents. Les agents cloud peuvent interroger les passages choisis, OpenCode peut garder le consommateur local et Ragmir Chat propose une synthèse locale optionnelle via la CLI.", + "agents_text": "Branchez Ragmir sur l'IA de votre choix via CLI ou MCP, ou gardez le consommateur et la génération de réponse sur le poste. Core ne dépend d'aucun modèle précis.", "agents_command_label": "Commande agent", "agents_command": "npx rgr install-agent --agents claude,codex,kimi,opencode", - "agents_targets_title": "Agents compatibles", - "agents_targets_text": "Les agents cloud interrogent Ragmir, OpenCode peut tourner localement, Ragmir Chat fournit une synthèse optionnelle avec Gemma 4 ou un modèle lite, et Ollama reste un runtime externe séparé.", - "agents_cloud_name": "Agents cloud", - "agents_cloud_text": "Claude, Codex, Kimi et les agents cloud type GLM interrogent Ragmir via un MCP orienté lecture, puis raisonnent depuis les passages récupérés selon la politique de données de leur fournisseur.", - "agents_opencode_text": "OpenCode est l'option runner local quand vous voulez garder le workflow près du poste et éviter un autre service RAG hébergé.", - "agents_chat_name": "Ragmir Chat", - "agents_chat_text": "L'add-on chat optionnel exécute un modèle lite Qwen2.5 de 491 Mo ou Gemma 4 QAT GGUF via node-llama-cpp 3.19, cite les passages récupérés et ne nécessite ni Ollama, ni Python, ni API LLM hébergée.", - "agents_ollama_text": "Ollama n'est pas une cible agent. Il reste un runtime externe optionnel si vous préférez gérer les modèles locaux hors de Ragmir.", + "agents_targets_title": "Choisissez où vont les preuves", + "agents_targets_text": "Envoyez des passages cités et bornés à l'IA que vous utilisez déjà, gardez le transfert en local, générez une réponse hors ligne ou consommez les résultats sans modèle.", + "agents_preferred_name": "Votre IA préférée", + "agents_preferred_text": "Claude, Codex, Kimi, Hermes et les autres clients compatibles consomment les passages cités via CLI ou MCP. La politique de données d'un client hébergé s'applique à ces passages.", + "agents_local_name": "Agent IA local", + "agents_local_text": "OpenCode ou un autre consommateur CLI ou MCP local garde les passages récupérés sur le poste. Aucun service Ragmir hébergé n'intervient.", + "agents_offline_name": "Réponses hors ligne", + "agents_offline_text": "Ragmir Chat, optionnel, génère des réponses citées avec un GGUF local vérifié. Qwen et Gemma sont des profils inclus, pas des exigences de Core.", + "agents_automation_name": "Applications et automatisations", + "agents_automation_text": "Les services Node.js, workflows n8n et tâches CI consomment les résultats typés ou JSON sans ajouter de modèle génératif.", "use_cases_eyebrow": "Cas d'usage", - "use_cases_title": "Ce que vos agents et vos équipes peuvent faire avec Ragmir.", - "use_cases_text": "Pointez Ragmir vers vos documents confidentiels, les fichiers de votre repo et votre documentation. Vos agents reçoivent les passages cités utiles à la tâche, pas un déversement coûteux en tokens de tout le corpus.", - "use_case_onboarding_eyebrow": "Docs & onboarding", - "use_case_onboarding_title": "Onboarder depuis les docs, pas de mémoire.", - "use_case_onboarding_text": "Indexez cahiers des charges, runbooks, ADR et décisions. Un nouveau développeur ou agent voit les exigences et choix passés cités avant de modifier le code.", - "use_case_refactor_eyebrow": "Specs & contrats", - "use_case_refactor_title": "Changer du code risqué avec le spec complet.", - "use_case_refactor_text": "Avant qu'un agent ne refactore ou migre, Ragmir lui fournit les contrats, specs et décisions passées cités : les changements sont planifiés sur ce que disent vraiment les documents, pas sur une supposition.", - "use_case_debug_eyebrow": "Runbooks & traçage", - "use_case_debug_title": "Tracer un incident dans vos runbooks.", - "use_case_debug_text": "Demandez où un flux est documenté et pourquoi il échoue ; Ragmir renvoie les passages cités de vos runbooks et notes d'incident, donnant à l'agent le contexte qui lui manque d'habitude.", - "use_case_team_eyebrow": "Mémoire d'équipe", - "use_case_team_title": "Répondre sans réveiller la personne qui sait.", - "use_case_team_text": "Les membres d'équipe interrogent politiques, décisions, incidents et notes projet depuis le même contexte local borné.", - "use_case_support_eyebrow": "Support et passation", - "use_case_support_title": "Donner au support l'historique cité qui compte.", - "use_case_support_text": "Indexez notes d'équipe, docs techniques, tickets et décisions passées en local pour qu'un agent récupère les preuves utiles à une réponse ou une passation.", - "use_case_compliance_eyebrow": "Preuves d'audit", - "use_case_compliance_title": "Préparer les audits depuis les preuves existantes.", - "use_case_compliance_text": "Pointez Ragmir vers politiques, contrôles, logs et procédures internes pour récupérer les preuves citées en local. Gardez le consommateur local si aucun passage ne doit atteindre un fournisseur cloud.", - "use_case_vendor_eyebrow": "Due diligence fournisseur", - "use_case_vendor_title": "Explorer une data room ou un dossier vendeur.", - "use_case_vendor_text": "Analysez contrats, politiques, annexes techniques et pièces de conformité avec des citations plutôt qu'une lecture manuelle dispersée.", - "use_case_legal_eyebrow": "Juridique et fiscal", - "use_case_legal_title": "Comparer clauses, obligations et preuves.", - "use_case_legal_text": "Contrats, notes fiscales, mémos de société ou recherches de résidence restent locaux pendant que l'agent récupère les sources utiles.", - "use_case_research_eyebrow": "Recherche et rapports", - "use_case_research_title": "Rédiger depuis des sources citées.", - "use_case_research_text": "Briefings, rapports Markdown et résumés peuvent séparer preuves, inférences, incertitudes et éléments à revoir.", + "use_cases_title": "Quatre workflows concrets de RAG local avec des sources citées.", + "use_cases_text": "Découvrez comment une spécification privée, un runbook d'incident, une automatisation n8n ou un service Node.js part de sources locales tandis que Ragmir ne renvoie que les passages cités utiles. Aucun stockage documentaire hébergé ni corpus entier injecté dans un prompt n'est requis.", + "use_cases_tabs_label": "Explorateur des cas d'usage pour développeurs", + "use_cases_previous": "Cas d'usage précédent", + "use_cases_next": "Cas d'usage suivant", + "use_cases_counter": "{current} / {total}", + "use_cases_sources_label": "Sources locales", + "use_cases_request_label": "Requête du développeur", + "use_cases_retrieval_label": "Récupération bornée avec citations", + "use_cases_handoff_label": "Outil et résultat", + "use_case_spec_tab": "Spec privée", + "use_case_spec_eyebrow": "Codex + DOCX privés", + "use_case_spec_title": "Livrez ce que le cahier des charges exige réellement.", + "use_case_spec_description": "Une spécification confidentielle et ses critères d'acceptation deviennent un contexte borné et cité pour l'agent de code.", + "use_case_spec_request": "Implémente la récupération de compte et ajoute sa couverture E2E. Cite chaque règle.", + "use_case_spec_consumer": "Codex via un serveur MCP local", + "use_case_spec_result": "L'implémentation suit les règles documentées de verrouillage, d'expiration du jeton et de confidentialité, avec des tests associés à chaque exigence.", + "use_case_spec_citation": "2 passages Word cités", + "use_case_hermes_tab": "Incident P1", + "use_case_hermes_eyebrow": "Hermes + runbooks", + "use_case_hermes_title": "Laissez l'agent d'astreinte lire le runbook avant de répondre.", + "use_case_hermes_description": "Hermes demande la procédure P1 au serveur MCP local de Ragmir au lieu de s'appuyer sur sa mémoire.", + "use_case_hermes_request": "Retrace la procédure d'escalade P1 et cite la source de chaque étape.", + "use_case_hermes_consumer": "Hermes via un MCP stdio", + "use_case_hermes_result": "L'opérateur reçoit dans le bon ordre le responsable d'incident, le délai de notification de 15 minutes et la cadence d'information client.", + "use_case_hermes_citation": "2 procédures opérationnelles citées", + "use_case_n8n_tab": "Workflow n8n", + "use_case_n8n_eyebrow": "n8n + documents métier", + "use_case_n8n_title": "Donnez au workflow no-code les preuves nécessaires avant qu'il agisse.", + "use_case_n8n_description": "Un flux n8n auto-hébergé appelle un worker Node local ; Ragmir vérifie la tarification et la politique de renouvellement sans ajouter de connecteur cloud.", + "use_case_n8n_request": "Ce renouvellement doit-il passer en négociation ou demander une validation ?", + "use_case_n8n_consumer": "n8n via un worker Node local", + "use_case_n8n_result": "Le workflow renvoie REVIEW, crée une tâche de validation humaine et ne clôture pas automatiquement l'opportunité.", + "use_case_n8n_citation": "2 règles métier citées", + "use_case_api_tab": "API documentaire", + "use_case_api_eyebrow": "API TypeScript + Node.js", + "use_case_api_title": "Construisez une API locale de recherche documentaire avec des résultats cités.", + "use_case_api_description": "Un service Node.js intègre l'API TypeScript de Ragmir pour indexer les PDF, DOCX, Markdown et fichiers structurés du projet, puis renvoyer des passages bornés.", + "use_case_api_request": "Trouve le contrat d'authentification et renvoie en JSON le passage pertinent, le chemin de la source et la page.", + "use_case_api_consumer": "Service Node.js via l'API TypeScript", + "use_case_api_result": "L'API renvoie des passages classés avec des citations exactes vers le fichier, les lignes et les pages PDF, prêts pour une recherche interne ou un agent de code.", + "use_case_api_citation": "3 passages classés et cités", "use_case_audio_eyebrow": "Audio et mini-formation", "use_case_audio_title": "Écouter un dossier dense plutôt que le lire.", "use_case_audio_text": "Générez un résumé audio court (MP3/WAV) à partir de passages cités avec rgr audio, pour réviser une spec, une architecture ou une veille sans rester devant l'écran.", @@ -228,18 +207,18 @@ "faq_private_question": "Ragmir envoie-t-il mon code ou mes documents confidentiels ?", "faq_private_answer": "Ragmir indexe uniquement les dossiers locaux que vous choisissez et garde l'état généré dans le dossier .ragmir/ ignoré par Git. La recherche du cœur n'ajoute ni télémétrie ni envoi de documents. La configuration explicite des modèles télécharge des poids publics, jamais vos documents ; un agent cloud peut recevoir les passages cités lorsque vous choisissez de l'utiliser.", "faq_agents_question": "Avec quels agents IA et outils Ragmir fonctionne-t-il ?", - "faq_agents_answer": "Claude Code, Codex, Kimi, les clients cloud type GLM/Zhipu, OpenCode et les wrappers internes peuvent interroger Ragmir via une CLI ou un helper local. Ragmir Chat ajoute une synthèse Gemma 4 ou Qwen2.5 légère via la CLI.", + "faq_agents_answer": "Ragmir Core est indépendant du modèle. Les helpers natifs couvrent Claude Code, Codex, Kimi, OpenCode et Cline ; Hermes, les autres clients MCP, les applications Node.js, les workers n8n et les outils internes consomment les mêmes résultats cités via MCP, CLI ou TypeScript.", "faq_offline_question": "Ragmir nécessite-t-il une clé API, un téléchargement de modèle ou une connexion internet ?", - "faq_offline_answer": "Non pour le chemin par défaut. La recherche local-hash fonctionne hors ligne sans modèle ni clé API. Ragmir Chat télécharge un GGUF vérifié pendant la configuration explicite, puis répond hors ligne. Le profil lite Qwen2.5 de 491 Mo cible les ordinateurs anciens et désactive le thinking ; Gemma 4 fast et quality offrent une synthèse plus forte. Metal, CUDA, Vulkan ou CPU sont sélectionnés automatiquement. Aucune clé API n'est requise, ni Ollama ni Python.", + "faq_offline_answer": "Non pour le parcours par défaut. La recherche local-hash fonctionne hors ligne sans modèle ni clé API. Pour un workflow entièrement hors ligne, utilisez un consommateur local ou configurez Ragmir Chat, qui télécharge et vérifie une fois le profil GGUF choisi, puis génère localement. Ni Ollama, ni Python, ni API LLM hébergée ne sont requis.", "faq_compare_question": "En quoi Ragmir diffère-t-il de l'indexation de code d'un IDE ou d'un RAG cloud ?", "faq_compare_answer": "La recherche de code native traite déjà bien le code structuré. Ragmir cible les specs, contrats, PDF, runbooks et exports documentaires d'équipe qui nécessitent des citations. Contrairement à un RAG hébergé, Ragmir garde son index sur votre machine et renvoie uniquement des passages cités via un MCP orienté lecture. Un agent cloud reçoit ces passages seulement si vous choisissez ce workflow.", "faq_role_question": "Est-ce que Ragmir rédige les réponses à ma place ?", - "faq_role_answer": "Ragmir Core renvoie des passages cités depuis vos fichiers locaux ; votre agent ou votre modèle rédige à partir de ces sources. L'add-on rgr chat utilise un modèle local Qwen2.5 ou Gemma 4 vérifié. Lite désactive le thinking ; les modes Gemma masquent le raisonnement brut et ne le conservent pas.", + "faq_role_answer": "Ragmir Core renvoie des passages cités depuis vos fichiers locaux ; l'IA ou l'application choisie décide quoi en faire. L'option rgr chat ajoute une génération de réponse citée avec un profil local vérifié lorsque la réponse doit aussi rester sur le poste.", "faq_formats_question": "Quels formats de fichiers Ragmir peut-il indexer ?", "faq_formats_answer": "Code source, texte, Markdown, PDF, Office et OpenDocument, EPUB, HTML, CSV, JSON et YAML, plus les extensions texte personnalisées que vous activez. Les fichiers non supportés sont signalés explicitement, et les PDF scannés peuvent utiliser une commande OCR optionnelle.", "closing_eyebrow": "Commencer par le cœur", "closing_title": "Installez Ragmir, gardez le dossier local, interrogez les preuves.", - "closing_text": "Aucun compte hébergé n'est requis. Les chats lite et Gemma 4 restent locaux après configuration explicite ; l'usage d'un agent cloud suit les règles de son fournisseur.", + "closing_text": "Branchez les preuves citées sur votre IA préférée, ou préparez un profil Chat local pour garder recherche et réponse hors ligne. Aucun compte Ragmir hébergé n'est requis.", "closing_primary_cta": "Ouvrir GitHub", "closing_secondary_cta": "Installer", "command_copied": "Copié dans le presse-papier", @@ -248,7 +227,10 @@ "footer_nav_label": "Pied de page", "footer_link_npm": "npm", "footer_link_docs": "Docs", - "footer_text": "Ragmir est construit par JCode Labs pour la recherche locale avec citations vérifiables dans les documents projet.", + "footer_link_releases": "Versions", + "footer_link_changelog": "Changelog", + "footer_link_api": "Référence API", + "footer_text": "Ragmir est développé par JCode Labs pour des workflows destinés aux développeurs et fondés sur des documents de projet cités.", "footer_version_label": "Version actuelle de Ragmir sur npm", "use_case_youtube_eyebrow": "Contenu & média", "use_case_youtube_title": "Automatisez une chaîne YouTube depuis un corpus de documents.", diff --git a/packages/ragmir-landing/public/ai.txt b/packages/ragmir-landing/public/ai.txt index beeb8e5..8a95b97 100644 --- a/packages/ragmir-landing/public/ai.txt +++ b/packages/ragmir-landing/public/ai.txt @@ -6,6 +6,8 @@ selected by the project and returns cited passages through CLI, TypeScript, or r ## Canonical claims - Core is retrieval-first. It does not call an LLM or synthesize answers. +- Core is model-agnostic. Any compatible AI, automation, CLI, TypeScript application, or MCP client + can consume its cited results. - The default `local-hash` provider works offline with no model or API key. It is lexical/hash retrieval, not semantic embeddings. - Semantic retrieval, local GGUF chat, audio rendering, and PDF OCR are explicit optional paths. @@ -13,17 +15,21 @@ selected by the project and returns cited passages through CLI, TypeScript, or r store or RAG service. - A cloud agent can receive the retrieved passages when the user chooses that workflow. Do not claim the complete workflow stays local unless the consumer is also local. +- Ragmir Chat is an optional path for local answer generation. Qwen and Gemma are Chat profile + choices, not Core, CLI, API, or MCP requirements. - Cite Ragmir results with their source path, chunk, line range, or PDF page when available. ## Best fit -Confidential PDFs, specifications, contracts, runbooks, policies, and other document corpora that -need bounded retrieval and verifiable citations. +Developer corpora assembled from specifications, PDFs, Word and Office files, and locally synced or +exported shared folders. Ragmir also fits CI jobs and internal automations that consume cited JSON +evidence before applying deterministic rules or requesting human approval. ## Avoid -Do not claim hosted storage, cloud sync, universal binary support, automatic compliance, legal -authority, or a replacement for dedicated code search or agent memory. +Do not describe Ragmir as Gemma-based. Do not claim hosted storage, cloud sync, universal binary +support, automatic compliance, legal authority, or a replacement for dedicated code search or +agent memory. See `/llms.txt` and the canonical repository README for current setup, package, format, and privacy details. diff --git a/packages/ragmir-landing/public/llms.txt b/packages/ragmir-landing/public/llms.txt index 6870e02..129e203 100644 --- a/packages/ragmir-landing/public/llms.txt +++ b/packages/ragmir-landing/public/llms.txt @@ -7,9 +7,12 @@ through a CLI, TypeScript API, or local read-focused MCP server. ## Product boundary - `@jcode.labs/ragmir` is retrieval-first. Core does not call an LLM or write generated answers. +- Core is model-agnostic. The user can connect a preferred AI or automation through CLI, + TypeScript, or MCP. - The default `local-hash` path works offline with no account, API key, or model download. - Semantic Transformers.js embeddings are an explicit opt-in and require a rebuilt index. - `@jcode.labs/ragmir-chat` adds optional cited synthesis with a local GGUF model. +- Qwen and Gemma are optional Chat profile choices, not Core or MCP requirements. - `@jcode.labs/ragmir-tts` adds optional local audio or explicitly selected online speech. - Ragmir is not a hosted document store, cloud-sync service, agent-memory replacement, or universal code-search replacement. @@ -26,9 +29,12 @@ through a CLI, TypeScript API, or local read-focused MCP server. ## Best fit -- Confidential PDFs, specifications, contracts, runbooks, policies, and exported team documents. +- Developer corpora assembled from specifications, PDFs, Word and Office files, and locally synced + or exported shared folders. - Large or fragmented corpora where answers must remain traceable to exact sources. - AI agents that need bounded evidence over MCP instead of a full-corpus prompt. +- CI jobs and internal automations that consume cited JSON evidence before applying deterministic + rules or requesting human approval. For structured code navigation, prefer a dedicated repository index. For a tiny text corpus, pass the text directly when that is simpler and safe. @@ -54,6 +60,8 @@ pnpm exec rgr search "Which decision changed the rollout?" - [README](https://github.com/jcode-works/jcode-ragmir#readme) - [CLI reference](https://github.com/jcode-works/jcode-ragmir/blob/main/docs/cli-reference.md) - [API reference](https://github.com/jcode-works/jcode-ragmir/blob/main/docs/api-reference.md) +- [Release history](https://github.com/jcode-works/jcode-ragmir/releases) +- [Changelog and compatibility policy](https://github.com/jcode-works/jcode-ragmir/blob/main/CHANGELOG.md) - [Configuration](https://github.com/jcode-works/jcode-ragmir/blob/main/docs/configuration.md) - [Agent integration](https://github.com/jcode-works/jcode-ragmir/blob/main/docs/agent-integration.md) - [Security hardening](https://github.com/jcode-works/jcode-ragmir/blob/main/SECURITY-HARDENING.md) diff --git a/packages/ragmir-landing/public/og/ragmir-og.png b/packages/ragmir-landing/public/og/ragmir-og.png index 36bfdea..d6de462 100644 Binary files a/packages/ragmir-landing/public/og/ragmir-og.png and b/packages/ragmir-landing/public/og/ragmir-og.png differ diff --git a/packages/ragmir-landing/public/og/ragmir-og.svg b/packages/ragmir-landing/public/og/ragmir-og.svg index bea114e..dd204d3 100644 --- a/packages/ragmir-landing/public/og/ragmir-og.svg +++ b/packages/ragmir-landing/public/og/ragmir-og.svg @@ -1,6 +1,6 @@ Ragmir - Local retrieval with verifiable citations for AI agents. + Local document context with verifiable citations for coding agents. @@ -22,15 +22,11 @@ Ragmir - - Give your AI agents - source-backed passages from - the documents you choose. - - - Open-source local retrieval for Node.js. - Corpus and index stay local. You control what leaves. - + Give coding agents + the document context + they need. + Word, PDFs, and Drive exports. + Indexed locally. Verifiable citations. Install Ragmir @@ -40,8 +36,8 @@ - zsh | ~/projects/air-ops-ui - CODEX + MCP - $ rgr setup + zsh | ~/projects/customer-portal + DRIVE + MCP + $ rgr sources add $ codex diff --git a/packages/ragmir-landing/src/components/hero-demo-script.ts b/packages/ragmir-landing/src/components/hero-demo-script.ts index 72662e1..2cf96d3 100644 --- a/packages/ragmir-landing/src/components/hero-demo-script.ts +++ b/packages/ragmir-landing/src/components/hero-demo-script.ts @@ -1,6 +1,8 @@ export type TerminalLineKind = | "shell" | "codex" + | "hermes" + | "n8n" | "tree" | "output" | "mcp" @@ -37,303 +39,166 @@ export interface HeroDemoScenario { export const HERO_DEMO_SCENARIOS: readonly HeroDemoScenario[] = [ { - id: "military", - titleKey: "demo_scenario_military_title", - descriptionKey: "demo_scenario_military_description", - terminalTitle: "zsh | ~/projects/force-readiness-kit", - badge: "Secure AI", + id: "word", + titleKey: "demo_scenario_word_title", + descriptionKey: "demo_scenario_word_description", + terminalTitle: "zsh | ~/projects/account-recovery", + badge: "DOCX local", lines: [ - { kind: "shell", text: "cd ~/projects/force-readiness-kit" }, - { kind: "shell", text: "codex" }, - { kind: "output", textKey: "demo_military_out_codex_ready" }, - { kind: "codex", text: "ls" }, - { kind: "tree", text: "README.md src/ docs/doctrine/ docs/cyber/ reports/" }, - { kind: "codex", text: "npx rgr setup --agents codex,claude" }, - { kind: "output", textKey: "demo_military_out_setup" }, - { - kind: "codex", - text: "mkdir -p .ragmir/raw && cp ~/Desktop/exercise-after-action.md .ragmir/raw/", - }, - { kind: "output", textKey: "demo_military_out_raw_copy", holdMs: 1400 }, - { - kind: "codex", - text: 'npx rgr sources add "docs/doctrine/**/*.md" "docs/cyber/**/*.md" "reports/readiness/**/*.md"', - }, - { kind: "output", textKey: "demo_military_out_sources" }, - { kind: "codex", text: "npx rgr doctor --fix" }, - { kind: "success", textKey: "demo_military_out_indexed", holdMs: 1500 }, - { - kind: "codex", - text: "Use Ragmir to brief readiness gaps with citations only, no raw corpus in the prompt.", - }, - { kind: "mcp", text: 'ragmir_search("readiness gaps cyber hardening exercise actions")' }, - { kind: "citation", text: "[1] .ragmir/raw/exercise-after-action.md:9" }, - { kind: "mcp", text: 'ragmir_search("secure deployment communications approval doctrine")' }, - { kind: "citation", text: "[2] docs/cyber/hardening-baseline.md:17" }, - { kind: "insight", textKey: "demo_military_out_brief", holdMs: 1800 }, - { kind: "change", text: "+ .ragmir/reports/secure-readiness-brief.md" }, - { kind: "success", textKey: "demo_military_out_done", holdMs: 1800 }, + { kind: "shell", text: "cd ~/projects/account-recovery" }, + { kind: "shell", text: "npx rgr setup --agents codex" }, + { kind: "output", textKey: "demo_word_out_setup" }, + { kind: "tree", text: "private/requirements.docx private/acceptance-criteria.docx" }, + { kind: "shell", text: 'npx rgr sources add "private/**/*.docx"' }, + { kind: "shell", text: "npx rgr doctor --fix" }, + { kind: "success", textKey: "demo_word_out_indexed", holdMs: 1400 }, + { + kind: "codex", + text: "Implement account recovery from the confidential requirements. Cite every rule.", + }, + { kind: "mcp", text: 'ragmir_search("account recovery lockout acceptance criteria")' }, + { kind: "citation", text: "[1] private/requirements.docx:12" }, + { kind: "citation", text: "[2] private/acceptance-criteria.docx:7" }, + { kind: "insight", textKey: "demo_word_out_rules", holdMs: 1700 }, + { kind: "change", text: "+ src/auth/account-recovery.ts" }, + { kind: "change", text: "+ tests/e2e/account-recovery.spec.ts" }, + { kind: "success", textKey: "demo_word_out_done", holdMs: 1700 }, ], }, { - id: "dev", - titleKey: "demo_scenario_dev_title", - descriptionKey: "demo_scenario_dev_description", - terminalTitle: "zsh | ~/projects/secure-workspace", - badge: "Confidential", + id: "drive", + titleKey: "demo_scenario_drive_title", + descriptionKey: "demo_scenario_drive_description", + terminalTitle: "zsh | ~/projects/atlas", + badge: "Synced Drive", lines: [ - { kind: "shell", text: "cd ~/projects/secure-workspace" }, - { kind: "shell", text: "codex" }, - { kind: "output", textKey: "demo_dev_out_codex_ready" }, - { kind: "codex", text: "ls" }, - { kind: "tree", text: "src/ tests/ docs/ specs/ package.json" }, - { kind: "codex", text: "npx rgr setup --agents codex" }, - { kind: "output", textKey: "demo_out_setup_codex" }, + { kind: "shell", text: "cd ~/projects/atlas" }, { - kind: "codex", - text: "mkdir -p .ragmir/raw && cp ~/Desktop/confidential-cdc-v4.pdf .ragmir/raw/", + kind: "tree", + text: "planning.xlsx user-stories.xlsx product-spec.docx database-mcd.pdf", }, - { kind: "output", textKey: "demo_dev_out_raw_copy", holdMs: 1400 }, { - kind: "codex", - text: 'npx rgr sources add "docs/**/*.md" "specs/**/*.md" "src/features/**/*.tsx"', + kind: "shell", + text: 'npx rgr sources add "$HOME/Library/CloudStorage/GoogleDrive-acme/Shared drives/Atlas/**/*"', }, - { kind: "output", textKey: "demo_dev_out_sources" }, - { kind: "codex", text: "npx rgr doctor --fix" }, - { kind: "success", textKey: "demo_dev_out_indexed", holdMs: 1500 }, + { kind: "output", textKey: "demo_drive_out_sync", holdMs: 1400 }, + { kind: "shell", text: "npx rgr ingest" }, + { kind: "success", textKey: "demo_drive_out_indexed", holdMs: 1400 }, { kind: "codex", - text: "Use Ragmir to brief requirements, implementation scope, and E2E coverage.", + text: "Plan release one from the planning, user stories, product spec, and database MCD.", }, - { kind: "mcp", text: 'ragmir_search("confidential spec onboarding acceptance criteria")' }, - { kind: "citation", text: "[1] .ragmir/raw/confidential-cdc-v4.pdf:12" }, - { kind: "mcp", text: 'ragmir_search("existing auth components route guard tests")' }, - { kind: "citation", text: "[2] docs/auth-architecture.md:7" }, - { kind: "insight", textKey: "demo_dev_out_brief", holdMs: 1800 }, - { kind: "change", text: "+ docs/evidence-brief.md" }, - { kind: "change", text: "+ tests/e2e/confidential-onboarding.spec.ts" }, - { kind: "success", textKey: "demo_dev_out_done", holdMs: 1800 }, + { kind: "mcp", text: 'ragmir_search("release one scope dependencies data model")' }, + { kind: "citation", text: "[1] planning.xlsx:Roadmap > R1" }, + { kind: "citation", text: "[2] user-stories.xlsx:Backlog > US-24" }, + { kind: "citation", text: "[3] database-mcd.pdf:4" }, + { kind: "insight", textKey: "demo_drive_out_plan", holdMs: 1700 }, + { kind: "success", textKey: "demo_drive_out_done", holdMs: 1700 }, ], }, { - id: "aviation", - titleKey: "demo_scenario_aviation_title", - descriptionKey: "demo_scenario_aviation_description", - terminalTitle: "zsh | ~/projects/air-ops-ui", - badge: "Codex + MCP", + id: "n8n", + titleKey: "demo_scenario_n8n_title", + descriptionKey: "demo_scenario_n8n_description", + terminalTitle: "n8n | sales-evidence-gate", + badge: "Self-hosted", lines: [ - { kind: "shell", text: "cd ~/projects/air-ops-ui" }, - { kind: "shell", text: "codex" }, - { kind: "output", textKey: "demo_aviation_out_codex_ready" }, - { kind: "codex", text: "ls" }, - { kind: "tree", text: "README.md package.json src/ docs/ tests/" }, - { kind: "tree", text: "src/features/slot-swap/ docs/dispatch-rules.md" }, - { kind: "codex", text: "npm install -D @jcode.labs/ragmir" }, - { kind: "output", textKey: "demo_out_added_dependency" }, - { kind: "codex", text: "npx rgr setup --agents codex" }, - { kind: "output", textKey: "demo_out_setup_codex" }, - { kind: "codex", text: "mkdir -p .ragmir/raw && cp ~/Desktop/slot-swap-cdc.md .ragmir/raw/" }, - { kind: "output", textKey: "demo_aviation_out_raw_copy", holdMs: 1400 }, - { - kind: "codex", - text: 'npx rgr sources add "docs/**/*.md" "src/features/**/*.tsx"', - }, - { kind: "output", textKey: "demo_aviation_out_sources" }, - { kind: "codex", text: "npx rgr doctor --fix" }, - { kind: "success", textKey: "demo_aviation_out_indexed", holdMs: 1500 }, - { - kind: "codex", - text: "Use Ragmir to explain Slot Swap, then add Playwright E2E tests.", - }, - { kind: "mcp", text: 'ragmir_search("Slot Swap alternate fuel reserve")' }, - { kind: "citation", text: "[1] .ragmir/raw/slot-swap-cdc.md:18" }, - { kind: "insight", textKey: "demo_aviation_out_requirement", holdMs: 1800 }, - { kind: "mcp", text: 'ragmir_search("flight board route and approvals")' }, - { kind: "citation", text: "[2] docs/dispatch-rules.md:9" }, - { kind: "change", text: "+ tests/e2e/slot-swap.spec.ts" }, - { kind: "change", textKey: "demo_aviation_out_tests" }, - { kind: "success", textKey: "demo_aviation_out_done", holdMs: 1800 }, + { kind: "shell", text: "cd ~/automation/sales-evidence" }, + { + kind: "tree", + text: "sales/account-plan.docx sales/discovery-notes.pdf sales/pricing.xlsx", + }, + { kind: "shell", text: 'npx rgr sources add "sales/**/*"' }, + { kind: "shell", text: "npx rgr ingest" }, + { kind: "success", textKey: "demo_n8n_out_indexed", holdMs: 1400 }, + { kind: "n8n", text: "Execute Command → node scripts/ragmir-sales-evidence.mjs" }, + { kind: "output", textKey: "demo_n8n_out_input" }, + { kind: "mcp", text: 'search("renewal risk budget owner pricing exception", { topK: 5 })' }, + { kind: "citation", text: "[1] sales/discovery-notes.pdf:6" }, + { kind: "citation", text: "[2] sales/pricing.xlsx:Exceptions > ACME" }, + { kind: "insight", textKey: "demo_n8n_out_decision", holdMs: 1700 }, + { kind: "success", textKey: "demo_n8n_out_done", holdMs: 1700 }, ], }, { - id: "security", - titleKey: "demo_scenario_security_title", - descriptionKey: "demo_scenario_security_description", - terminalTitle: "zsh | ~/projects/policy-api", - badge: "RFP", + id: "hermes", + titleKey: "demo_scenario_hermes_title", + descriptionKey: "demo_scenario_hermes_description", + terminalTitle: "zsh | ~/operations/support", + badge: "Hermes MCP", lines: [ - { kind: "shell", text: "cd ~/projects/policy-api" }, - { kind: "shell", text: "codex" }, - { kind: "output", textKey: "demo_security_out_codex_ready" }, - { kind: "codex", text: "ls" }, - { kind: "tree", text: "README.md src/ docs/security/ docs/sla.md" }, - { kind: "codex", text: "npx rgr setup --agents codex" }, - { kind: "output", textKey: "demo_out_setup_codex" }, - { kind: "codex", text: "mkdir -p .ragmir/raw && cp ~/Downloads/acme-rfp.xlsx .ragmir/raw/" }, - { kind: "output", textKey: "demo_security_out_raw_copy", holdMs: 1400 }, - { kind: "codex", text: 'npx rgr sources add "docs/security/**/*.md" "docs/sla.md"' }, - { kind: "output", textKey: "demo_security_out_sources" }, - { kind: "codex", text: "npx rgr doctor --fix" }, - { kind: "success", textKey: "demo_security_out_indexed", holdMs: 1500 }, + { kind: "shell", text: "cd ~/operations/support" }, + { kind: "shell", text: 'npx rgr sources add "support/**/*.docx" "runbooks/**/*.pdf"' }, + { kind: "shell", text: "npx rgr setup" }, + { kind: "output", textKey: "demo_hermes_out_setup" }, { - kind: "codex", - text: "Draft the encryption, retention, and incident answers with citations.", + kind: "shell", + text: "hermes mcp add ragmir --command node --args .ragmir/run.cjs", }, - { kind: "mcp", text: 'ragmir_search("RFP encryption retention incident response")' }, - { kind: "citation", text: "[1] .ragmir/raw/acme-rfp.xlsx:4" }, - { kind: "mcp", text: 'ragmir_search("security controls retention SLA")' }, - { kind: "citation", text: "[2] docs/security/data-controls.md:11" }, - { kind: "insight", textKey: "demo_security_out_answer", holdMs: 1800 }, - { kind: "change", text: "+ .ragmir/reports/acme-rfp-response.md" }, - { kind: "success", textKey: "demo_security_out_done", holdMs: 1800 }, - ], - }, - { - id: "incident", - titleKey: "demo_scenario_incident_title", - descriptionKey: "demo_scenario_incident_description", - terminalTitle: "zsh | ~/projects/incident-console", - badge: "Runbook", - lines: [ - { kind: "shell", text: "cd ~/projects/incident-console" }, - { kind: "shell", text: "codex" }, - { kind: "output", textKey: "demo_incident_out_codex_ready" }, - { kind: "codex", text: "ls" }, - { kind: "tree", text: "src/ tests/ docs/runbooks/ docs/adr/ package.json" }, - { kind: "codex", text: "npx rgr setup --agents codex" }, - { kind: "output", textKey: "demo_out_setup_codex" }, + { kind: "success", textKey: "demo_hermes_out_connected", holdMs: 1400 }, { - kind: "codex", - text: "mkdir -p .ragmir/raw && cp ~/Desktop/incident-2417-notes.md .ragmir/raw/", + kind: "hermes", + text: "Map the escalation path for a P1 support case. Cite the source for every step.", }, - { kind: "output", textKey: "demo_incident_out_raw_copy", holdMs: 1400 }, - { - kind: "codex", - text: 'npx rgr sources add "docs/runbooks/**/*.md" "docs/adr/**/*.md"', - }, - { kind: "output", textKey: "demo_incident_out_sources" }, - { kind: "codex", text: "npx rgr doctor --fix" }, - { kind: "success", textKey: "demo_incident_out_indexed", holdMs: 1500 }, - { kind: "codex", text: "Find the retry storm cause and patch the guardrail." }, - { kind: "mcp", text: 'ragmir_search("retry storm idempotency runbook")' }, - { kind: "citation", text: "[1] docs/runbooks/retry-storm.md:22" }, - { kind: "citation", text: "[2] .ragmir/raw/incident-2417-notes.md:6" }, - { kind: "insight", textKey: "demo_incident_out_cause", holdMs: 1800 }, - { kind: "change", text: "+ src/lib/retry-budget.ts" }, - { kind: "change", text: "+ tests/e2e/retry-storm.spec.ts" }, - { kind: "success", textKey: "demo_incident_out_done", holdMs: 1800 }, - ], - }, - { - id: "legal", - titleKey: "demo_scenario_legal_title", - descriptionKey: "demo_scenario_legal_description", - terminalTitle: "zsh | ~/projects/founder-desk", - badge: "Legal", - lines: [ - { kind: "shell", text: "cd ~/projects/founder-desk" }, - { kind: "shell", text: "codex" }, - { kind: "output", textKey: "demo_legal_out_codex_ready" }, - { kind: "codex", text: "ls" }, - { kind: "tree", text: "README.md docs/contracts/ docs/tax/ templates/ package.json" }, - { kind: "codex", text: "npx rgr setup --agents codex,claude" }, - { kind: "output", textKey: "demo_legal_out_setup" }, - { - kind: "codex", - text: "mkdir -p .ragmir/raw && cp ~/Desktop/lease-renewal-notes.pdf .ragmir/raw/", - }, - { kind: "output", textKey: "demo_legal_out_raw_copy", holdMs: 1400 }, - { - kind: "codex", - text: 'npx rgr sources add "docs/contracts/**/*.md" "docs/tax/**/*.md"', - }, - { kind: "output", textKey: "demo_legal_out_sources" }, - { kind: "codex", text: "npx rgr doctor --fix" }, - { kind: "success", textKey: "demo_legal_out_indexed", holdMs: 1500 }, - { - kind: "codex", - text: "Compare renewal obligations with the tax memo and draft a cited brief.", - }, - { kind: "mcp", text: 'ragmir_search("lease renewal notice VAT deposit deadline")' }, - { kind: "citation", text: "[1] .ragmir/raw/lease-renewal-notes.pdf:7" }, - { kind: "mcp", text: 'ragmir_search("tax memo furnished office lease VAT")' }, - { kind: "citation", text: "[2] docs/tax/vat-position.md:14" }, - { kind: "insight", textKey: "demo_legal_out_risk", holdMs: 1800 }, - { kind: "change", text: "+ .ragmir/reports/lease-renewal-brief.md" }, - { kind: "success", textKey: "demo_legal_out_done", holdMs: 1800 }, + { kind: "mcp", text: 'ragmir_search("P1 escalation owner response time")' }, + { kind: "citation", text: "[1] support/escalation-matrix.docx:9" }, + { kind: "citation", text: "[2] runbooks/p1-response.pdf:3" }, + { kind: "insight", textKey: "demo_hermes_out_path", holdMs: 1700 }, + { kind: "success", textKey: "demo_hermes_out_done", holdMs: 1700 }, ], }, { - id: "content", - titleKey: "demo_scenario_content_title", - descriptionKey: "demo_scenario_content_description", - terminalTitle: "zsh | ~/projects/channel-research", - badge: "Research", + id: "monorepo", + titleKey: "demo_scenario_monorepo_title", + descriptionKey: "demo_scenario_monorepo_description", + terminalTitle: "zsh | ~/code/platform", + badge: "31 packages", lines: [ - { kind: "shell", text: "cd ~/projects/channel-research" }, - { kind: "shell", text: "codex" }, - { kind: "output", textKey: "demo_content_out_codex_ready" }, - { kind: "codex", text: "ls" }, - { kind: "tree", text: "episodes/ sources/ scripts/ notes/ package.json" }, - { kind: "codex", text: "npx rgr setup --agents codex,kimi" }, - { kind: "output", textKey: "demo_content_out_setup" }, - { - kind: "codex", - text: "mkdir -p .ragmir/raw && cp ~/Downloads/interview-transcript.md .ragmir/raw/", - }, - { kind: "output", textKey: "demo_content_out_raw_copy", holdMs: 1400 }, + { kind: "shell", text: "cd ~/code/platform" }, + { kind: "shell", text: "npx rgr setup --agents codex" }, { - kind: "codex", - text: 'npx rgr sources add "sources/**/*.md" "notes/**/*.md" "episodes/**/*.md"', + kind: "shell", + text: 'npx rgr sources add "packages/*/README.md" "packages/*/docs/**/*" "docs/adr/**/*"', }, - { kind: "output", textKey: "demo_content_out_sources" }, - { kind: "codex", text: "npx rgr doctor --fix" }, - { kind: "success", textKey: "demo_content_out_indexed", holdMs: 1500 }, + { kind: "output", textKey: "demo_monorepo_out_sources" }, + { kind: "shell", text: "npx rgr ingest" }, + { kind: "success", textKey: "demo_monorepo_out_indexed", holdMs: 1400 }, { kind: "codex", - text: "Build a 7-minute episode outline from cited passages only.", + text: "Plan the auth contract migration across every library without breaking consumers.", }, - { kind: "mcp", text: 'ragmir_search("habit loop aviation checklist attention")' }, - { kind: "citation", text: "[1] sources/behavioral-systems.md:31" }, - { kind: "citation", text: "[2] .ragmir/raw/interview-transcript.md:12" }, - { kind: "insight", textKey: "demo_content_out_angle", holdMs: 1800 }, - { kind: "change", text: "+ scripts/episode-014-outline.md" }, - { kind: "success", textKey: "demo_content_out_done", holdMs: 1800 }, + { kind: "mcp", text: 'ragmir_search("auth contract migration consumers deprecation")' }, + { kind: "citation", text: "[1] docs/adr/0042-auth-contract.md:18" }, + { kind: "citation", text: "[2] packages/api-client/docs/migration.md:11" }, + { kind: "citation", text: "[3] packages/session/README.md:36" }, + { kind: "insight", textKey: "demo_monorepo_out_plan", holdMs: 1700 }, + { kind: "change", text: "+ docs/plans/auth-contract-migration.md" }, + { kind: "success", textKey: "demo_monorepo_out_done", holdMs: 1700 }, ], }, { - id: "local", - titleKey: "demo_scenario_local_title", - descriptionKey: "demo_scenario_local_description", - terminalTitle: "zsh | ~/projects/offline-lab", - badge: "Local", + id: "gameplan", + titleKey: "demo_scenario_gameplan_title", + descriptionKey: "demo_scenario_gameplan_description", + terminalTitle: "zsh | ~/vault/project-phoenix", + badge: "Private plan", lines: [ - { kind: "shell", text: "cd ~/projects/offline-lab" }, - { kind: "shell", text: "opencode" }, - { kind: "output", textKey: "demo_local_out_agent_ready" }, - { kind: "codex", text: "ls" }, - { kind: "tree", text: "README.md docs/ evals/ src/ package.json" }, - { kind: "codex", text: "npx rgr setup --agents opencode" }, - { kind: "output", textKey: "demo_local_out_setup" }, - { - kind: "codex", - text: "mkdir -p .ragmir/raw && cp ~/Desktop/model-risk-review.md .ragmir/raw/", - }, - { kind: "output", textKey: "demo_local_out_raw_copy", holdMs: 1400 }, - { kind: "codex", text: 'npx rgr sources add "docs/**/*.md" "evals/**/*.md"' }, - { kind: "output", textKey: "demo_local_out_sources" }, - { kind: "codex", text: "npx rgr doctor --fix" }, - { kind: "success", textKey: "demo_local_out_indexed", holdMs: 1500 }, - { - kind: "codex", - text: "Ask the local model for the approval gate using only cited context.", - }, - { kind: "mcp", text: 'ragmir_ask("What must pass before offline deployment?")' }, - { kind: "citation", text: "[1] .ragmir/raw/model-risk-review.md:5" }, - { kind: "citation", text: "[2] evals/red-team-gates.md:18" }, - { kind: "insight", textKey: "demo_local_out_gate", holdMs: 1800 }, - { kind: "change", text: "+ docs/offline-approval-checklist.md" }, - { kind: "success", textKey: "demo_local_out_done", holdMs: 1800 }, + { kind: "shell", text: "cd ~/vault/project-phoenix" }, + { kind: "tree", text: "game-plan/strategy.docx game-plan/budget.xlsx game-plan/risks.pdf" }, + { kind: "shell", text: 'npx rgr sources add "game-plan/**/*"' }, + { kind: "shell", text: "npx rgr doctor --fix" }, + { kind: "success", textKey: "demo_gameplan_out_indexed", holdMs: 1400 }, + { + kind: "codex", + text: "Turn the confidential game plan into a 30-day execution plan. Flag every assumption.", + }, + { kind: "mcp", text: 'ragmir_search("first 30 days budget dependencies top risks")' }, + { kind: "citation", text: "[1] game-plan/strategy.docx:14" }, + { kind: "citation", text: "[2] game-plan/budget.xlsx:Runway > Q3" }, + { kind: "citation", text: "[3] game-plan/risks.pdf:5" }, + { kind: "insight", textKey: "demo_gameplan_out_plan", holdMs: 1700 }, + { kind: "change", text: "+ .ragmir/reports/30-day-game-plan.md" }, + { kind: "success", textKey: "demo_gameplan_out_done", holdMs: 1700 }, ], }, ] diff --git a/packages/ragmir-landing/src/components/hero-demo.tsx b/packages/ragmir-landing/src/components/hero-demo.tsx index 54c1038..7f61969 100644 --- a/packages/ragmir-landing/src/components/hero-demo.tsx +++ b/packages/ragmir-landing/src/components/hero-demo.tsx @@ -1,13 +1,13 @@ import { - BookOpenText, + Bot, + Boxes, Code2, - Cpu, + FileText, + FolderSync, type LucideIcon, - Plane, RotateCcw, - Scale, ShieldCheck, - Wrench, + Workflow, } from "lucide-react" import { useCallback, useEffect, useMemo, useRef, useState } from "react" import { cn } from "../lib/utils" @@ -38,20 +38,16 @@ const INITIAL_PLAYBACK_STATE: PlaybackState = { isComplete: false, } -const TYPEABLE_LINE_KINDS = new Set(["shell", "codex"]) -const COPYABLE_TERMINAL_LINE_KINDS = new Set(["shell", "codex"]) -const TERMINAL_PROMPT_GRID_CLASS = "grid-cols-[4rem_minmax(0,1fr)_auto]" -const TERMINAL_CONTENT_INDENT_CLASS = "pl-[4.5rem]" +const TYPEABLE_LINE_KINDS = new Set(["shell", "codex", "hermes", "n8n"]) +const COPYABLE_TERMINAL_LINE_KINDS = new Set(["shell", "codex", "hermes", "n8n"]) const SCENARIO_ICONS: Record = { - military: ShieldCheck, - dev: Code2, - aviation: Plane, - security: ShieldCheck, - incident: Wrench, - legal: Scale, - content: BookOpenText, - local: Cpu, + word: FileText, + drive: FolderSync, + n8n: Workflow, + hermes: Bot, + monorepo: Boxes, + gameplan: ShieldCheck, } export function HeroDemo({ translations }: HeroDemoProps): React.JSX.Element { @@ -226,6 +222,8 @@ export function HeroDemo({ translations }: HeroDemoProps): React.JSX.Element { const lineClass: Record = { shell: "text-foreground/92", codex: "text-amber-300", + hermes: "text-violet-300", + n8n: "text-orange-300", tree: "text-sky-300/90", output: "text-muted-foreground", mcp: "text-[var(--accent-title)]", @@ -236,9 +234,11 @@ export function HeroDemo({ translations }: HeroDemoProps): React.JSX.Element { } const linePrefix: Partial> = { - shell: "$", - codex: "codex>", - mcp: "mcp", + shell: "$ shell", + codex: "Codex", + hermes: "Hermes Agent", + n8n: "n8n", + mcp: "Ragmir", } const progress = Math.round((playback.visibleCount / activeScenario.lines.length) * 100) @@ -271,7 +271,7 @@ export function HeroDemo({ translations }: HeroDemoProps): React.JSX.Element { >
{HERO_DEMO_SCENARIOS.map((scenario, index) => { - const Icon = SCENARIO_ICONS[scenario.id] ?? Plane + const Icon = SCENARIO_ICONS[scenario.id] ?? Code2 const isActive = scenario.id === activeScenario.id return ( @@ -381,28 +381,30 @@ function renderTerminalLine(input: { if (prefix) { return ( -
- {prefix} - {content} - {copyable && ( - - )} +
+
+ + + {prefix} + + +
+
+ {content} + {copyable && ( + + )} +
) } return ( -
+
{content}
) diff --git a/packages/ragmir-landing/src/components/landing-navbar.tsx b/packages/ragmir-landing/src/components/landing-navbar.tsx index 5fc71dc..fbb8311 100644 --- a/packages/ragmir-landing/src/components/landing-navbar.tsx +++ b/packages/ragmir-landing/src/components/landing-navbar.tsx @@ -1,5 +1,5 @@ import { ChevronDown, Globe2, Menu, X } from "lucide-react" -import { useEffect, useRef, useState } from "react" +import { useCallback, useEffect, useRef, useState } from "react" import { cn } from "../lib/utils" import { GithubIcon } from "./github-icon" import { Button } from "./ui/button" @@ -108,18 +108,23 @@ export function LandingNavbar({ const [hasScrolled, setHasScrolled] = useState(false) const [menuOpen, setMenuOpen] = useState(false) const headerRef = useRef(null) + const menuTriggerRef = useRef(null) const lastScrollY = useRef(0) const isHidden = useRef(false) const navLinks = [ - { href: localizedHomeUrl, label: t("nav_home") }, + { href: localizedUseCasesUrl, label: t("nav_use_cases") }, { href: localizedLibraryUrl, label: t("nav_library") }, { href: localizedFeaturesUrl, label: t("nav_features") }, { href: localizedAgentsUrl, label: t("nav_agents") }, - { href: localizedUseCasesUrl, label: t("nav_use_cases") }, { href: localizedTeamUrl, label: t("nav_team") }, ] + const closeMenu = useCallback(() => { + menuTriggerRef.current?.focus() + setMenuOpen(false) + }, []) + useEffect(() => { const header = headerRef.current if (!header) return @@ -160,7 +165,7 @@ export function LandingNavbar({ useEffect(() => { if (!menuOpen) return const onKeyDown = (event: KeyboardEvent) => { - if (event.key === "Escape") setMenuOpen(false) + if (event.key === "Escape") closeMenu() } document.addEventListener("keydown", onKeyDown) document.body.style.overflow = "hidden" @@ -168,7 +173,7 @@ export function LandingNavbar({ document.removeEventListener("keydown", onKeyDown) document.body.style.overflow = "" } - }, [menuOpen]) + }, [menuOpen, closeMenu]) return ( <> @@ -240,6 +245,7 @@ export function LandingNavbar({ aria-label={t("nav_menu")} className="flex size-10 items-center justify-center rounded-full border border-border text-foreground transition hover:bg-muted focus-visible:ring-2 focus-visible:ring-ring" onClick={() => setMenuOpen(true)} + ref={menuTriggerRef} type="button" >
+ + + +
+
+
+
+ “{t(useCase.requestKey)}” +
+
+ +
+
+
+
+
    + {useCase.files.map((file) => ( +
  • +
  • + ))} +
+
+ + + +
+
+ + + +
+
+
+
+

{t(useCase.consumerKey)}

+

+ {t(useCase.resultKey)} +

+
+

+

+
+
+
+ + + ) + })} +
+ + ) +} diff --git a/packages/ragmir-landing/src/layouts/layout.astro b/packages/ragmir-landing/src/layouts/layout.astro index a84156c..004b971 100644 --- a/packages/ragmir-landing/src/layouts/layout.astro +++ b/packages/ragmir-landing/src/layouts/layout.astro @@ -5,7 +5,6 @@ import "../styles/global.css" interface Props { title?: string description?: string - keywords?: string locale?: string ogType?: string ogImage?: string @@ -21,7 +20,6 @@ interface Props { const { title = "Ragmir", description = "Sovereign local RAG for confidential dossiers and AI agents.", - keywords, locale = "en", ogType = "website", ogImage = "/og/ragmir-og.png", @@ -75,7 +73,7 @@ function alternateHref(targetLocale: string): string { --- - +