diff --git a/.gitignore b/.gitignore index cd3c341..fe128e4 100644 --- a/.gitignore +++ b/.gitignore @@ -12,7 +12,6 @@ private/** *.tgz release-artifacts/ *.pid -*dist packages/ragmir-core/dist/ packages/ragmir-tts/dist/ diff --git a/AGENTS.md b/AGENTS.md index fa8aea6..cb9f37e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -33,8 +33,9 @@ repairs. `ragmir init`, `ragmir install-skill`, and `ragmir ingest` remain available as explicit lower-level commands. - Keep monorepo source onboarding simple: the `sources` array in `.ragmir/config.json` accepts paths, - glob patterns, and `!` exclusions. The legacy `.ragmir/sources.txt` file (managed by `ragmir sources - add/list`) is still read and merged when present, but `ragmir init` no longer creates it. + glob patterns, and `!` exclusions, and `ragmir sources add/list` read and write that array. The + legacy `.ragmir/sources.txt` file is still read (read-only) and merged when present, but it is never + created or written anymore; `ragmir init` no longer creates it. - Keep product documentation canonical in the root `README.md`. Package README files under `packages/*/README.md` are intentionally minimal npm entrypoints and must link clearly to the GitHub root README because npm displays package README files separately. @@ -263,8 +264,9 @@ General principles (KISS, DRY, YAGNI, SOLID) as applied in this codebase. Match - `packages/ragmir-core/src/defaults.ts` owns shared default paths, provider defaults, and generated-state ignore constants. Keep config/init/security/gitignore aligned through this module instead of copying literals. -- `packages/ragmir-core/src/sources.ts` owns the `.ragmir/sources.txt` management API used by - `ragmir sources add/list`; file discovery itself remains in `files.ts`. +- `packages/ragmir-core/src/sources.ts` owns the `sources` array management API used by + `ragmir sources add/list` (reads/writes `.ragmir/config.json`); file discovery itself remains in + `files.ts`. - `packages/ragmir-core/src/skill.ts` owns agent skill installation and the per-agent `agentHelpers`/MCP config generation (`AgentHelperFile`) behind `ragmir setup` and `ragmir install-skill`/`install-agent`. Add a new agent target through `SUPPORTED_AGENT_TARGETS` diff --git a/CHANGELOG.md b/CHANGELOG.md index 5338478..8f0ea58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,16 +1,21 @@ # Changelog +> Historical note: earlier 0.x releases used the `kb` binary name and `.kb/` state +> directory. `kb` remains a legacy alias for `ragmir`, and `.kb/` is still recognized +> for backward compatibility. The entries below are rewritten with the current +> `ragmir` command name for clarity. + ## 0.4.2 - 2026-06-29 -- Add `kb doctor` to diagnose initialization, index freshness, security posture, and next steps. -- Make `kb audio` and `ragmir-tts` default to the offline/confidential Transformers.js WAV path; +- Add `ragmir doctor` to diagnose initialization, index freshness, security posture, and next steps. +- Make `ragmir audio` and `ragmir-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 `kb init`. -- Improve onboarding output from `kb init` and `kb install-skill`. +- Stop indexing the generated `private/README.md` helper file created by `ragmir init`. +- Improve onboarding output from `ragmir init` and `ragmir install-skill`. ## 0.4.1 - 2026-06-29 -- Add an Edge-compatible Ragmir TTS engine so `kb audio` can match the global Voice Forge quality +- Add an Edge-compatible Ragmir TTS engine so `ragmir 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 @@ -21,27 +26,27 @@ - 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` / `KB_INCLUDE_EXTENSIONS` for custom UTF-8 text file extensions. +- Add `includeExtensions` / `RAGMIR_INCLUDE_EXTENSIONS` (legacy alias `KB_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 `kb install-skill`. +- Install both the main Ragmir skill and optional audio-summary skill with `ragmir install-skill`. - Improve agent guidance for deep multi-query retrieval before synthesis. -- Make Ragmir core retrieval-only: `kb ask` now returns cited context for external agents or LLMs +- Make Ragmir core retrieval-only: `ragmir 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 `kb audio` and update the audio-summary skill to use Ragmir TTS before advanced fallback +- Add `ragmir audio` and update the audio-summary skill to use Ragmir TTS before advanced fallback engines. ## 0.3.0 - 2026-06-28 - Add confidentiality hardening defaults: built-in redaction before indexing, metadata-only access logs, and bounded MCP retrieval. -- Add `kb security-audit` for zero-telemetry, provider, redaction, gitignore, storage, and +- Add `ragmir security-audit` for zero-telemetry, provider, redaction, gitignore, storage, and MCP posture checks. -- Add `kb destroy-index --yes` to remove generated vector indexes. +- Add `ragmir 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. @@ -49,7 +54,7 @@ - Add GitHub Sponsors funding metadata and document suggested sponsor tiers. - Add maintainer positioning for Jean-Baptiste Thery and JCode Labs in the README. -- Make `kb init` and `kb install-skill` automatically keep `.kb/` and `.ragmir/` +- Make `ragmir init` and `ragmir install-skill` automatically keep `.ragmir/` (and legacy `.kb/`) ignored by Git. ## 0.2.0 - 2026-06-28 diff --git a/README.md b/README.md index 06c09d7..92b420b 100644 --- a/README.md +++ b/README.md @@ -870,10 +870,21 @@ Each entry is one of: - a **glob** pattern — any entry containing `*`, `?`, `[`, or `{`; - an **exclusion** — starts with `!` and filters the glob matches. -> **Legacy `sources.txt`.** Paths listed one per line in `.ragmir/sources.txt` are still read when the -> file exists, and `ragmir sources add` / `ragmir sources list` continue to manage it. Entries from both -> the `sources` array and `sources.txt` are merged, so existing projects keep working unchanged. New -> projects should prefer the `sources` array — `ragmir init` no longer creates a `sources.txt`. +```mermaid +flowchart LR + Raw["rawDir
.ragmir/raw/"] --> Merge["Source merge"] + Cfg["sources[]
in config.json"] --> Merge + Legacy["legacy sources.txt
(read-only, optional)"] -.-> Merge + Merge --> Discover["file discovery"] + Discover --> Index["LanceDB index"] +``` + +> **Legacy `sources.txt`.** `ragmir sources add` and `ragmir sources list` read and write the `sources` +> array in `.ragmir/config.json` — this is the canonical location. A pre-existing `.ragmir/sources.txt` +> is still read (read-only) and merged with the config array, so existing projects keep working +> unchanged; nothing writes to it anymore. New projects never get a `sources.txt`. + +Environment overrides: Environment overrides: diff --git a/SECURITY-HARDENING.md b/SECURITY-HARDENING.md index 07920a5..3d3a417 100644 --- a/SECURITY-HARDENING.md +++ b/SECURITY-HARDENING.md @@ -46,13 +46,13 @@ unencrypted disk. ## At-Rest Encryption Native encrypted LanceDB storage is not implemented yet. For sensitive environments, put the -repository and `.kb/` on an encrypted volume: +repository and `.ragmir/` on an encrypted volume: - macOS: FileVault or an encrypted APFS volume. - Linux: LUKS, fscrypt, or an encrypted VM disk. -- Containers/VMs: mount `.kb/` on an encrypted host volume. +- Containers/VMs: mount `.ragmir/` on an encrypted host volume. -`kb destroy-index --yes` removes generated index files, but secure deletion on SSDs and copy-on-write +`ragmir destroy-index --yes` removes generated index files, but secure deletion on SSDs and copy-on-write filesystems cannot be guaranteed without encrypted storage and key destruction. ## Air-Gapped Operation @@ -128,7 +128,7 @@ assuming a dossier was fully indexed. Built-in redaction is enabled by default for common secret and identifier shapes: private keys, JWTs, API tokens, emails, IBANs, and card-like numbers. -Custom patterns can be added in `.kb/config.json`: +Custom patterns can be added in `.ragmir/config.json`: ```json { diff --git a/SECURITY.md b/SECURITY.md index 0de83ea..14cae63 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -18,5 +18,5 @@ or private document disclosure. ## Data Boundary Ragmir is designed to index local project documents. Raw project documents, -`.kb/`, `.ragmir/`, environment files, credentials, customer records, and commercial validation notes +`.ragmir/` (and legacy `.kb/` where present), environment files, credentials, customer records, and commercial validation notes must remain outside commits. diff --git a/docs/cli-reference.md b/docs/cli-reference.md index 5b9cdc5..5d2e6a4 100644 --- a/docs/cli-reference.md +++ b/docs/cli-reference.md @@ -16,8 +16,8 @@ Ragmir ships two CLIs: | `ragmir doctor --fix` | Create missing scaffolding, install skills/MCP config, and update stale indexes when safe. | | `ragmir models pull` | Download the configured Transformers.js embedding model into `embeddingModelPath`. | | `ragmir models pull --enable` | Download the embedding model and switch Ragmir config to safe Transformers embeddings. | -| `ragmir sources add "../apps/*/docs/**/*.md"` | Add source paths, glob patterns, or `!` exclusions to `.ragmir/sources.txt`. | -| `ragmir sources list` | List active extra source entries from `.ragmir/sources.txt`. | +| `ragmir sources add "../apps/*/docs/**/*.md"` | Add source paths, glob patterns, or `!` exclusions to the `sources` array in `.ragmir/config.json`. | +| `ragmir sources list` | List active extra source entries (merged from `config.json` and any legacy `sources.txt`). | | `ragmir ingest` | Parse changed source files, redact, chunk, embed, and update the local LanceDB index. | | `ragmir ingest --rebuild` | Force a full re-index, required after switching embedding provider or model. | | `ragmir audit` | Check whether supported source files are missing from or stale in the index. | diff --git a/packages/ragmir-core/dist/access-log.d.ts b/packages/ragmir-core/dist/access-log.d.ts deleted file mode 100644 index c1bed5e..0000000 --- a/packages/ragmir-core/dist/access-log.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { AccessLogAction, AccessLogUsageOptions, AccessLogUsageReport, Config } from "./types.js"; -export interface AccessLogEvent { - action: AccessLogAction; - query?: string; - topK?: number; - resultCount?: number; - redactions?: number; -} -export declare function recordAccess(config: Config, event: AccessLogEvent): Promise; -export declare function accessLogUsageReport(options?: AccessLogUsageOptions): Promise; -//# sourceMappingURL=access-log.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/access-log.d.ts.map b/packages/ragmir-core/dist/access-log.d.ts.map deleted file mode 100644 index 7db67bf..0000000 --- a/packages/ragmir-core/dist/access-log.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"access-log.d.ts","sourceRoot":"","sources":["../src/access-log.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,MAAM,EACP,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,eAAe,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAqBD,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAWvF;AAED,wBAAsB,oBAAoB,CACxC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC,CAuD/B"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/access-log.js b/packages/ragmir-core/dist/access-log.js deleted file mode 100644 index d3a813e..0000000 --- a/packages/ragmir-core/dist/access-log.js +++ /dev/null @@ -1,145 +0,0 @@ -import { createHash } from "node:crypto"; -import { existsSync } from "node:fs"; -import { appendFile, mkdir, readFile } from "node:fs/promises"; -import path from "node:path"; -import { loadConfig } from "./config.js"; -const ACCESS_LOG_ACTIONS = [ - "ingest", - "search", - "ask", - "research", - "evaluate", - "destroy-index", -]; -const ACCESS_LOG_ACTION_SET = new Set(ACCESS_LOG_ACTIONS); -const DEFAULT_USAGE_REPORT_DAYS = 7; -const MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1000; -export async function recordAccess(config, event) { - if (!config.accessLog) { - return; - } - try { - await mkdir(path.dirname(config.accessLogPath), { recursive: true }); - await appendFile(config.accessLogPath, `${JSON.stringify(toLogLine(event))}\n`, "utf8"); - } - catch { - // Access logging is best-effort so read-only workspaces do not block local use. - } -} -export async function accessLogUsageReport(options = {}) { - const config = await loadConfig(String(options.cwd ?? process.cwd())); - const days = normalizeUsageReportDays(options.days); - const until = new Date(); - const since = new Date(until.getTime() - days * MILLISECONDS_PER_DAY); - const eventsByAction = emptyEventsByAction(); - const queryHashes = new Set(); - let totalEvents = 0; - let invalidLines = 0; - let resultCountTotal = 0; - let resultCountEvents = 0; - let lastEventAt = null; - if (existsSync(config.accessLogPath)) { - const lines = (await readFile(config.accessLogPath, "utf8")).split(/\r?\n/u).filter(Boolean); - for (const line of lines) { - const event = parseAccessLogLine(line); - if (!event) { - invalidLines += 1; - continue; - } - const timestamp = Date.parse(event.timestamp); - if (!Number.isFinite(timestamp) || - timestamp < since.getTime() || - timestamp > until.getTime()) { - continue; - } - totalEvents += 1; - eventsByAction[event.action] += 1; - if (event.queryHash) { - queryHashes.add(event.queryHash); - } - if (typeof event.resultCount === "number") { - resultCountTotal += event.resultCount; - resultCountEvents += 1; - } - if (lastEventAt === null || event.timestamp > lastEventAt) { - lastEventAt = event.timestamp; - } - } - } - return { - accessLogEnabled: config.accessLog, - since: since.toISOString(), - until: until.toISOString(), - totalEvents, - invalidLines, - eventsByAction, - uniqueQueryHashes: queryHashes.size, - averageResultCount: resultCountEvents === 0 ? null : resultCountTotal / resultCountEvents, - lastEventAt, - }; -} -function toLogLine(event) { - return { - timestamp: new Date().toISOString(), - action: event.action, - queryHash: event.query ? hashQuery(event.query) : undefined, - topK: event.topK, - resultCount: event.resultCount, - redactions: event.redactions, - }; -} -function hashQuery(query) { - return createHash("sha256").update(query).digest("hex"); -} -function emptyEventsByAction() { - return { - ingest: 0, - search: 0, - ask: 0, - research: 0, - evaluate: 0, - "destroy-index": 0, - }; -} -function normalizeUsageReportDays(days) { - if (days === undefined) { - return DEFAULT_USAGE_REPORT_DAYS; - } - if (!Number.isInteger(days) || days <= 0) { - throw new Error("usage-report days must be a positive integer."); - } - return days; -} -function parseAccessLogLine(line) { - try { - const parsed = JSON.parse(line); - if (!isAccessLogLine(parsed)) { - return null; - } - return parsed; - } - catch { - return null; - } -} -function isAccessLogLine(value) { - return (typeof value === "object" && - value !== null && - hasTimestamp(value) && - hasAction(value) && - hasOptionalQueryHash(value) && - hasOptionalResultCount(value)); -} -function hasTimestamp(value) { - return "timestamp" in value && typeof value.timestamp === "string"; -} -function hasAction(value) { - return ("action" in value && typeof value.action === "string" && ACCESS_LOG_ACTION_SET.has(value.action)); -} -function hasOptionalQueryHash(value) { - return !("queryHash" in value) || typeof value.queryHash === "string"; -} -function hasOptionalResultCount(value) { - return !("resultCount" in value) || typeof value.resultCount === "number"; -} -//# sourceMappingURL=access-log.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/access-log.js.map b/packages/ragmir-core/dist/access-log.js.map deleted file mode 100644 index 0627cd9..0000000 --- a/packages/ragmir-core/dist/access-log.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"access-log.js","sourceRoot":"","sources":["../src/access-log.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/chunking.d.ts b/packages/ragmir-core/dist/chunking.d.ts deleted file mode 100644 index e722f30..0000000 --- a/packages/ragmir-core/dist/chunking.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { ParsedDocument, TextChunk } from "./types.js"; -export declare function chunkDocument(document: ParsedDocument, chunkSize: number, chunkOverlap: number): TextChunk[]; -//# sourceMappingURL=chunking.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/chunking.d.ts.map b/packages/ragmir-core/dist/chunking.d.ts.map deleted file mode 100644 index 9c95f0d..0000000 --- a/packages/ragmir-core/dist/chunking.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"chunking.d.ts","sourceRoot":"","sources":["../src/chunking.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAM3D,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,SAAS,EAAE,CAqCb"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/chunking.js b/packages/ragmir-core/dist/chunking.js deleted file mode 100644 index 4b92d0a..0000000 --- a/packages/ragmir-core/dist/chunking.js +++ /dev/null @@ -1,58 +0,0 @@ -import { createHash } from "node:crypto"; -const PARAGRAPH_BREAK_MIN_RATIO = 0.45; -const SENTENCE_BREAK_MIN_RATIO = 0.55; -const WHITESPACE_BREAK_MIN_RATIO = 0.75; -export function chunkDocument(document, chunkSize, chunkOverlap) { - if (!document.text) { - return []; - } - const chunks = []; - let cursor = 0; - let chunkIndex = 0; - while (cursor < document.text.length) { - const end = chooseChunkEnd(document.text, cursor, chunkSize); - const text = document.text.slice(cursor, end).trim(); - if (text) { - const id = createHash("sha256") - .update(`${document.file.relativePath}:${chunkIndex}:${text}`) - .digest("hex"); - chunks.push({ - id, - source: document.file.source, - relativePath: document.file.relativePath, - chunkIndex, - text, - checksum: document.file.checksum, - bytes: document.file.bytes, - mtimeMs: document.file.mtimeMs, - }); - chunkIndex += 1; - } - if (end >= document.text.length) { - break; - } - cursor = Math.max(end - chunkOverlap, cursor + 1); - } - return chunks; -} -function chooseChunkEnd(text, cursor, chunkSize) { - const hardEnd = Math.min(cursor + chunkSize, text.length); - if (hardEnd === text.length) { - return hardEnd; - } - const window = text.slice(cursor, hardEnd); - const paragraphBreak = window.lastIndexOf("\n\n"); - if (paragraphBreak > chunkSize * PARAGRAPH_BREAK_MIN_RATIO) { - return cursor + paragraphBreak; - } - const sentenceBreak = Math.max(window.lastIndexOf(". "), window.lastIndexOf("? "), window.lastIndexOf("! ")); - if (sentenceBreak > chunkSize * SENTENCE_BREAK_MIN_RATIO) { - return cursor + sentenceBreak + 1; - } - const whitespace = window.lastIndexOf(" "); - if (whitespace > chunkSize * WHITESPACE_BREAK_MIN_RATIO) { - return cursor + whitespace; - } - return hardEnd; -} -//# sourceMappingURL=chunking.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/chunking.js.map b/packages/ragmir-core/dist/chunking.js.map deleted file mode 100644 index 864588a..0000000 --- a/packages/ragmir-core/dist/chunking.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"chunking.js","sourceRoot":"","sources":["../src/chunking.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/cli.d.ts b/packages/ragmir-core/dist/cli.d.ts deleted file mode 100644 index faaadd5..0000000 --- a/packages/ragmir-core/dist/cli.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env node -export {}; -//# sourceMappingURL=cli.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/cli.d.ts.map b/packages/ragmir-core/dist/cli.d.ts.map deleted file mode 100644 index f022439..0000000 --- a/packages/ragmir-core/dist/cli.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/ragmir-core/dist/cli.js b/packages/ragmir-core/dist/cli.js deleted file mode 100755 index dd3bb99..0000000 --- a/packages/ragmir-core/dist/cli.js +++ /dev/null @@ -1,944 +0,0 @@ -#!/usr/bin/env node -import path from "node:path"; -import { isTtsLanguage, TTS_LANGUAGES } from "@jcode.labs/ragmir-tts"; -import { Command } from "commander"; -import pc from "picocolors"; -import { accessLogUsageReport } from "./access-log.js"; -import { loadConfig } from "./config.js"; -import { DEFAULT_SKILL_TARGET_DIR } from "./defaults.js"; -import { destroyIndex } from "./destroy.js"; -import { doctor } from "./doctor.js"; -import { pullEmbeddingModel } from "./embeddings.js"; -import { evaluateGoldenQueries } from "./evaluate.js"; -import { countSkippedByReason } from "./files.js"; -import { audit, ingest } from "./ingest.js"; -import { initProject } from "./init.js"; -import { serveMcp } from "./mcp.js"; -import { ragmirCommand } from "./package-manager.js"; -import { ask, search } from "./query.js"; -import { compactResearchReport, compactSearchResults, research } from "./research.js"; -import { securityAudit } from "./security.js"; -import { enableSemanticEmbeddings } from "./semantic-config.js"; -import { setupProject } from "./setup.js"; -import { bundledSkillPath, installAgentSkills, installSkill, parseAgentTargets, SUPPORTED_AGENT_TARGETS, } from "./skill.js"; -import { addSourceEntries, listSourceEntries } from "./sources.js"; -import { countRows } from "./store.js"; -import { VERSION } from "./version.js"; -const SEARCH_TEXT_PREVIEW_LENGTH = 900; -const TTS_PACKAGE_NAME = "@jcode.labs/ragmir-tts"; -const program = new Command(); -program - .name("ragmir") - .description("Local-first RAG knowledge base for private project documents.") - .version(VERSION) - .option("--project-root ", "Run project-scoped commands against this local workspace."); -const modelsCommand = program.command("models").description("Manage local embedding models."); -modelsCommand - .command("pull") - .description("Download the configured Transformers.js embedding model into embeddingModelPath.") - .option("--enable", "Switch Ragmir config to Transformers embeddings after the model is ready.") - .option("--json", "Print machine-readable JSON.") - .action(async (options, command) => { - const cwd = projectRoot(command); - const config = await loadConfig(cwd); - const result = await pullEmbeddingModel(config); - const semanticConfig = options.enable ? await enableSemanticEmbeddings(cwd) : null; - if (options.json) { - console.log(JSON.stringify(semanticConfig ? { ...result, semanticConfig } : result, null, 2)); - return; - } - console.log(pc.green("Embedding model ready.")); - console.log(`embeddingModel=${result.embeddingModel}`); - console.log(`embeddingModelPath=${result.embeddingModelPath}`); - if (semanticConfig) { - console.log(`semanticConfig=${semanticConfig.configPath}`); - console.log(`embeddingProvider=${semanticConfig.embeddingProvider}`); - console.log(`transformersAllowRemoteModels=${semanticConfig.transformersAllowRemoteModels}`); - } - console.log(""); - console.log("Next steps:"); - if (semanticConfig) { - console.log(" 1. Run `ragmir ingest --rebuild` so existing vectors use the semantic model."); - console.log(" 2. Run `ragmir doctor` to confirm readiness."); - } - else { - console.log(" 1. Re-run `ragmir models pull --enable` to switch Ragmir config safely."); - console.log(" 2. Run `ragmir ingest --rebuild` so existing vectors use the semantic model."); - } -}); -program - .command("doctor") - .description("Diagnose setup, index freshness, privacy posture, and next steps.") - .option("--fix", "Create missing scaffolding, install the agent kit, and rebuild stale indexes.") - .option("--json", "Print machine-readable JSON.") - .action(async (options, command) => { - const cwd = projectRoot(command); - if (options.fix) { - const result = await setupProject({ cwd }); - if (options.json) { - console.log(JSON.stringify(result, null, 2)); - return; - } - printSetup(result, "Ragmir repair complete."); - return; - } - const report = await doctor(cwd); - if (options.json) { - console.log(JSON.stringify(report, null, 2)); - return; - } - printDoctor(report); -}); -program - .command("setup") - .description("Initialize Ragmir, install the agent kit, run doctor, and ingest when safe.") - .option("--target-dir ", "Directory where the skill folder should be copied.", DEFAULT_SKILL_TARGET_DIR) - .option("--agents ", `Agent MCP helpers to generate: all, ${SUPPORTED_AGENT_TARGETS.join(", ")}.`, "all") - .option("--mcp-name ", "MCP server name used in generated config.", "ragmir") - .option("--mcp-command ", "Custom MCP stdio command for generated helper files.") - .option("--mcp-arg ", "Argument for --mcp-command. Repeat for multiple arguments.", collectOptionValue, []) - .option("--semantic", "Download the configured Transformers.js embedding model and enable higher-quality semantic retrieval.") - .option("--no-ingest", "Skip automatic indexing even when supported files are present.") - .option("--json", "Print machine-readable JSON.") - .action(async (options, command) => { - const cwd = projectRoot(command); - const setupOptions = { - cwd, - targetDir: options.targetDir, - agents: parseAgentTargets(options.agents), - mcpServerName: options.mcpName, - }; - addOption(setupOptions, "semantic", options.semantic); - addOption(setupOptions, "ingest", options.ingest); - addOption(setupOptions, "mcpCommand", options.mcpCommand); - if (options.mcpArg.length > 0) { - setupOptions.mcpArgs = options.mcpArg; - } - const result = await setupProject(setupOptions); - if (options.json) { - console.log(JSON.stringify(result, null, 2)); - return; - } - printSetup(result, "Ragmir setup complete."); -}); -program - .command("init") - .description("Create local .ragmir config, raw-document folder, and gitignore rules.") - .action(async (_options, command) => { - const cwd = projectRoot(command); - const created = await initProject(cwd); - if (created.length === 0) { - console.log(pc.green("Already initialized.")); - const doctorCommand = await ragmirCommand(cwd, ["doctor"]); - console.log(`Run \`${doctorCommand.display}\` to check readiness.`); - return; - } - console.log(pc.green("Created:")); - for (const file of created) { - console.log(` - ${file}`); - } - const ingestCommand = await ragmirCommand(cwd, ["ingest"]); - const doctorCommand = await ragmirCommand(cwd, ["doctor"]); - const searchCommand = await ragmirCommand(cwd, ["search", "your question"]); - console.log(""); - console.log(pc.cyan("Next steps:")); - console.log(" 1. Add supported documents under .ragmir/raw/"); - console.log(` 2. Run \`${ingestCommand.display}\``); - console.log(` 3. Run \`${doctorCommand.display}\``); - console.log(` 4. Query with \`${searchCommand.display}\``); -}); -const sourcesCommand = program - .command("sources") - .description("Manage extra source paths and glob patterns in .ragmir/sources.txt."); -sourcesCommand - .command("list") - .description("List extra source paths and glob patterns.") - .option("--json", "Print machine-readable JSON.") - .action(async (options, command) => { - const cwd = projectRoot(command); - const result = await listSourceEntries(cwd); - if (options.json) { - console.log(JSON.stringify(result, null, 2)); - return; - } - console.log(`sourcesFile=${path.relative(cwd, result.sourcesFile) || result.sourcesFile}`); - if (result.entries.length === 0) { - console.log("No extra source entries."); - console.log('Add one with `ragmir sources add "../apps/*/docs/**/*.md"`.'); - return; - } - for (const entry of result.entries) { - console.log(` - ${entry}`); - } -}); -sourcesCommand - .command("add") - .description("Add extra source paths or glob patterns.") - .argument("", "Source paths, glob patterns, or ! exclusion patterns.") - .option("--json", "Print machine-readable JSON.") - .action(async (entries, options, command) => { - const cwd = projectRoot(command); - const result = await addSourceEntries({ cwd, entries }); - if (options.json) { - console.log(JSON.stringify(result, null, 2)); - return; - } - console.log(`sourcesFile=${path.relative(cwd, result.sourcesFile) || result.sourcesFile}`); - for (const entry of result.added) { - console.log(pc.green(`added ${entry}`)); - } - for (const entry of result.skipped) { - console.log(pc.dim(`skipped existing ${entry}`)); - } -}); -program - .command("ingest") - .description("Parse changed documents, redact, chunk, embed locally, and update LanceDB.") - .option("--rebuild", "Force a full local index rebuild instead of reusing unchanged rows.") - .option("--json", "Print machine-readable JSON.") - .action(async (options, command) => { - const cwd = projectRoot(command); - const ingestOptions = { cwd }; - addOption(ingestOptions, "rebuild", options.rebuild); - const result = await ingest(ingestOptions); - if (options.json) { - console.log(JSON.stringify(result, null, 2)); - if (result.errors.length > 0) { - process.exitCode = 1; - } - return; - } - console.log(pc.green(`Done. discoveredFiles=${result.discoveredFiles} supportedFiles=${result.supportedFiles} indexedFiles=${result.indexedFiles} rebuiltFiles=${result.rebuiltFiles} reusedFiles=${result.reusedFiles} chunks=${result.chunks} skippedFiles=${result.skippedFiles} unsupportedFiles=${result.unsupportedFiles} oversizedFiles=${result.oversizedFiles} sensitiveFiles=${result.sensitiveFiles} emptyTextFiles=${result.emptyTextFiles.length} redactions=${result.redactions} errors=${result.errors.length}`)); - printUnsupportedSummary(result.unsupportedExtensions); - printEmptyTextFiles(result.emptyTextFiles); - if (result.unsupportedFiles > 0 || result.oversizedFiles > 0 || result.sensitiveFiles > 0) { - const auditCommand = await ragmirCommand(cwd, ["audit", "--unsupported"]); - console.log(pc.yellow(`Some files were not indexed. Run \`${auditCommand.display}\` for details.`)); - } - for (const error of result.errors) { - console.error(pc.red(` - ${error.path}: ${error.message}`)); - } - if (result.errors.length > 0) { - process.exitCode = 1; - } -}); -program - .command("search") - .description("Retrieve the most relevant passages without calling an LLM.") - .argument("", "Search query.") - .option("-k, --top-k ", "Number of passages to return.", parsePositiveInt) - .option("--compact", "Return short snippets instead of full passages.") - .option("--json", "Print machine-readable JSON.") - .action(async (query, options, command) => { - const cwd = projectRoot(command); - const results = await search(query, withTopK(cwd, options.topK)); - const outputResults = options.compact ? compactSearchResults(results) : results; - if (options.json) { - console.log(JSON.stringify({ query, results: outputResults }, null, 2)); - if (results.length === 0) { - process.exitCode = 1; - } - return; - } - if (results.length === 0) { - const repairCommand = await ragmirCommand(cwd, ["doctor", "--fix"]); - console.error(pc.yellow(`No results. Add documents or run \`${repairCommand.display}\`.`)); - process.exitCode = 1; - return; - } - for (const [index, result] of outputResults.entries()) { - const distance = result.distance === null ? "n/a" : result.distance.toFixed(4); - console.log(`\n${pc.cyan(`[${index + 1}] ${result.relativePath}`)} chunk=${result.chunkIndex} distance=${distance}`); - console.log("snippet" in result ? result.snippet : result.text.slice(0, SEARCH_TEXT_PREVIEW_LENGTH)); - } -}); -program - .command("ask") - .description("Return cited retrieval context for a question without calling an LLM.") - .argument("", "Question to answer.") - .option("-k, --top-k ", "Number of passages to use.", parsePositiveInt) - .option("--json", "Print machine-readable JSON.") - .action(async (query, options, command) => { - const cwd = projectRoot(command); - const result = await ask(query, withTopK(cwd, options.topK)); - if (options.json) { - console.log(JSON.stringify({ query, ...result }, null, 2)); - if (result.sources.length === 0) { - process.exitCode = 1; - } - return; - } - console.log(`\n${result.answer}\n`); - if (result.sources.length > 0) { - console.log(pc.dim("Sources:")); - for (const [index, source] of result.sources.entries()) { - console.log(` [${index + 1}] ${source.relativePath} chunk=${source.chunkIndex}`); - } - } -}); -program - .command("research") - .description("Run an audit-backed multi-query research pass with cited evidence.") - .argument("", "Research question or topic.") - .option("-k, --top-k ", "Maximum number of evidence passages to keep.", parsePositiveInt) - .option("--no-code", "Skip the lightweight repository code search.") - .option("--compact", "Return snippets instead of full retrieved passages.") - .option("--json", "Print machine-readable JSON.") - .action(async (query, options, command) => { - const cwd = projectRoot(command); - const researchOptions = { cwd }; - addOption(researchOptions, "topK", options.topK); - addOption(researchOptions, "includeCode", options.code); - const report = await research(query, researchOptions); - const output = options.compact ? compactResearchReport(report) : report; - if (options.json) { - console.log(JSON.stringify(output, null, 2)); - if (!report.ready) { - process.exitCode = 1; - } - return; - } - printResearchReport(output); - if (!report.ready) { - process.exitCode = 1; - } -}); -program - .command("evaluate") - .description("Measure retrieval recall against a JSON golden query file.") - .requiredOption("--golden ", "JSON file with queries and expected relative source paths.") - .option("-k, --top-k ", "Default number of passages to evaluate per query.", parsePositiveInt) - .option("--fail-under ", "Exit non-zero only when recall is below this threshold from 0 to 1.", parseRecallThreshold) - .option("--json", "Print machine-readable JSON.") - .action(async (options, command) => { - const cwd = projectRoot(command); - const evaluationOptions = { - cwd, - goldenPath: options.golden, - }; - addOption(evaluationOptions, "topK", options.topK); - const result = await evaluateGoldenQueries(evaluationOptions); - const minimumRecall = options.failUnder ?? 1; - const passed = result.recall >= minimumRecall; - if (options.json) { - const payload = options.failUnder === undefined ? result : { ...result, minimumRecall, passed }; - console.log(JSON.stringify(payload, null, 2)); - if (!passed) { - process.exitCode = 1; - } - return; - } - const thresholdSummary = options.failUnder === undefined - ? "" - : ` minimumRecall=${minimumRecall.toFixed(3)} passed=${passed}`; - console.log(`golden=${result.goldenPath} total=${result.total} hits=${result.hits} misses=${result.misses} recall=${result.recall.toFixed(3)}${thresholdSummary}`); - for (const testCase of result.cases) { - const label = testCase.id ? `${testCase.id}: ${testCase.query}` : testCase.query; - const status = testCase.hit ? pc.green("hit") : pc.red("miss"); - const rank = testCase.bestRank === null ? "n/a" : String(testCase.bestRank); - console.log(`${status} rank=${rank} topK=${testCase.topK} ${label}`); - if (!testCase.hit) { - console.log(` expected=${testCase.expectedPaths.join(",")}`); - console.log(` returned=${testCase.returnedPaths.join(",")}`); - } - } - if (!passed) { - process.exitCode = 1; - } -}); -program - .command("audit") - .description("Compare supported files on disk with the current vector index.") - .option("--unsupported", "List skipped file paths and reasons.") - .option("--json", "Print machine-readable JSON.") - .action(async (options, command) => { - const cwd = projectRoot(command); - const report = await audit(cwd); - if (options.json) { - console.log(JSON.stringify(report, null, 2)); - return; - } - console.log(`supportedFiles=${report.supportedFiles.length}`); - console.log(`skippedFiles=${report.skippedFiles.length}`); - console.log(`unsupportedFiles=${countSkippedByReason(report.skippedFiles, "unsupported-extension")}`); - console.log(`indexedFiles=${report.indexedFiles.length}`); - console.log(`totalChunks=${report.totalChunks}`); - console.log(`emptyTextFiles=${report.emptyTextFiles.length}`); - console.log(`missingFromIndex=${report.missingFromIndex.length}`); - console.log(`staleInIndex=${report.staleInIndex.length}`); - console.log(`duplicateCandidates=${report.sourceDiagnostics.duplicateCandidates.length}`); - console.log(`archiveCandidates=${report.sourceDiagnostics.archiveCandidates.length}`); - console.log(`mirrorCandidates=${report.sourceDiagnostics.mirrorCandidates.length}`); - printUnsupportedSummary(report.unsupportedExtensions); - for (const file of report.missingFromIndex) { - console.log(pc.yellow(`missing: ${file}`)); - } - for (const file of report.staleInIndex) { - console.log(pc.red(`stale: ${file}`)); - } - if (options.unsupported) { - for (const file of report.skippedFiles) { - console.log(pc.yellow(`skipped: ${file.relativePath} reason=${file.reason} recommendation=${file.recommendation}`)); - } - for (const candidate of report.sourceDiagnostics.duplicateCandidates) { - console.log(pc.yellow(`duplicate-candidate: ${candidate.key} files=${candidate.files.join(",")}`)); - } - for (const candidate of report.sourceDiagnostics.archiveCandidates) { - console.log(pc.yellow(`archive-candidate: ${candidate.relativePath} reason=${candidate.reason}`)); - } - for (const candidate of report.sourceDiagnostics.mirrorCandidates) { - console.log(pc.yellow(`mirror-candidate: ${candidate.relativePath} reason=${candidate.reason}`)); - } - } - else if (report.skippedFiles.length > 0) { - console.log(pc.yellow("Run `ragmir audit --unsupported` to list skipped file paths.")); - } - if (report.missingFromIndex.length > 0 || report.staleInIndex.length > 0) { - process.exitCode = 1; - } -}); -program - .command("usage-report") - .description("Summarize the metadata-only local access log.") - .option("--days ", "Number of recent days to include.", parsePositiveInt, 7) - .option("--json", "Print machine-readable JSON.") - .action(async (options, command) => { - const cwd = projectRoot(command); - const report = await accessLogUsageReport({ cwd, days: options.days }); - if (options.json) { - console.log(JSON.stringify(report, null, 2)); - return; - } - console.log(`accessLogEnabled=${report.accessLogEnabled}`); - console.log(`since=${report.since}`); - console.log(`until=${report.until}`); - console.log(`totalEvents=${report.totalEvents}`); - console.log(`invalidLines=${report.invalidLines}`); - console.log(`uniqueQueryHashes=${report.uniqueQueryHashes}`); - console.log(`averageResultCount=${report.averageResultCount ?? "n/a"}`); - console.log(`lastEventAt=${report.lastEventAt ?? "n/a"}`); - for (const [action, count] of Object.entries(report.eventsByAction)) { - console.log(`events.${action}=${count}`); - } -}); -program - .command("status") - .description("Show active configuration and index row count.") - .option("--json", "Print machine-readable JSON.") - .action(async (options, command) => { - const cwd = projectRoot(command); - const config = await loadConfig(cwd); - const rows = await countRows(config); - const status = { - projectRoot: config.projectRoot, - rawDir: config.rawDir, - storageDir: config.storageDir, - sourcesFile: config.sourcesFile, - accessLogPath: config.accessLogPath, - embeddingModelPath: config.embeddingModelPath, - embeddingProvider: config.embeddingProvider, - embeddingModel: config.embeddingModel, - transformersAllowRemoteModels: config.transformersAllowRemoteModels, - redactionEnabled: config.redaction.enabled, - accessLog: config.accessLog, - mcpMaxTopK: config.mcpMaxTopK, - topK: config.topK, - chunkSize: config.chunkSize, - chunkOverlap: config.chunkOverlap, - maxFileBytes: config.maxFileBytes, - ingestConcurrency: config.ingestConcurrency, - embeddingBatchSize: config.embeddingBatchSize, - includeExtensions: config.includeExtensions, - pdfOcrCommand: config.pdfOcrCommand, - pdfOcrTimeoutMs: config.pdfOcrTimeoutMs, - imageOcrCommand: config.imageOcrCommand, - imageOcrTimeoutMs: config.imageOcrTimeoutMs, - legacyWordCommand: config.legacyWordCommand, - legacyWordTimeoutMs: config.legacyWordTimeoutMs, - chunksIndexed: rows, - }; - if (options.json) { - console.log(JSON.stringify(status, null, 2)); - return; - } - console.log(`projectRoot=${config.projectRoot}`); - console.log(`rawDir=${config.rawDir}`); - console.log(`storageDir=${config.storageDir}`); - console.log(`sourcesFile=${config.sourcesFile}`); - console.log(`accessLogPath=${config.accessLogPath}`); - console.log(`embeddingModelPath=${config.embeddingModelPath}`); - console.log(`embeddingProvider=${config.embeddingProvider}`); - console.log(`embeddingModel=${config.embeddingModel}`); - console.log(`transformersAllowRemoteModels=${config.transformersAllowRemoteModels}`); - console.log(`redactionEnabled=${config.redaction.enabled}`); - console.log(`accessLog=${config.accessLog}`); - console.log(`mcpMaxTopK=${config.mcpMaxTopK}`); - console.log(`topK=${config.topK}`); - console.log(`chunkSize=${config.chunkSize}`); - console.log(`chunkOverlap=${config.chunkOverlap}`); - console.log(`maxFileBytes=${config.maxFileBytes}`); - console.log(`ingestConcurrency=${config.ingestConcurrency}`); - console.log(`embeddingBatchSize=${config.embeddingBatchSize}`); - console.log(`includeExtensions=${config.includeExtensions.join(",")}`); - console.log(`pdfOcrCommand=${config.pdfOcrCommand.join(" ")}`); - console.log(`pdfOcrTimeoutMs=${config.pdfOcrTimeoutMs}`); - console.log(`imageOcrCommand=${config.imageOcrCommand.join(" ")}`); - console.log(`imageOcrTimeoutMs=${config.imageOcrTimeoutMs}`); - console.log(`legacyWordCommand=${config.legacyWordCommand.join(" ")}`); - console.log(`legacyWordTimeoutMs=${config.legacyWordTimeoutMs}`); - console.log(`chunksIndexed=${rows}`); -}); -program - .command("security-audit") - .description("Show local privacy, provider, redaction, MCP, and gitignore posture.") - .option("--json", "Print machine-readable JSON.") - .option("--strict", "Exit with code 1 when warnings are present.") - .action(async (options, command) => { - const cwd = projectRoot(command); - const report = await securityAudit(cwd); - if (options.json) { - console.log(JSON.stringify(report, null, 2)); - } - else { - console.log(`zeroTelemetry=${report.zeroTelemetry}`); - console.log(`embeddingProvider=${report.providers.embedding}`); - console.log(`embeddingModel=${report.providers.embeddingModel}`); - console.log(`embeddingModelPath=${report.providers.embeddingModelPath}`); - console.log(`transformersAllowRemoteModels=${report.providers.transformersAllowRemoteModels}`); - console.log(`llmGeneration=${report.providers.llmGeneration}`); - console.log(`redactionEnabled=${report.redaction.enabled}`); - console.log(`redactionBuiltIn=${report.redaction.builtIn}`); - console.log(`accessLog=${report.accessLog.enabled}`); - console.log(`accessLogStoresRawQueries=${report.accessLog.storesRawQueries}`); - console.log(`storageGitIgnored=${report.storage.gitIgnored}`); - console.log(`mcpMaxTopK=${report.mcp.maxTopK}`); - console.log(`mcpDestructiveToolsExposed=${report.mcp.destructiveToolsExposed}`); - for (const warning of report.warnings) { - console.log(pc.yellow(`warning: ${warning}`)); - } - } - if (options.strict && report.warnings.length > 0) { - process.exitCode = 1; - } -}); -program - .command("destroy-index") - .description("Remove the generated local vector index from Ragmir storage.") - .option("--yes", "Confirm deletion without an interactive prompt.") - .action(async (options, command) => { - const cwd = projectRoot(command); - if (!options.yes) { - console.error(pc.red("Refusing to delete the index without --yes.")); - process.exitCode = 1; - return; - } - const result = await destroyIndex(cwd); - console.log(`storageDir=${result.storageDir}`); - console.log(`removed=${result.removed}`); - console.log(result.note); -}); -program - .command("audio") - .description("Render a narration text file to local speech audio with Ragmir TTS.") - .argument("[text-file]", "Narration text file to render.") - .option("-o, --out ", "Output MP3 or WAV path.") - .option("--engine ", "TTS engine: auto, edge, or transformers.") - .option("--lang ", "TTS language: en, es, or fr. Selects the model and Edge voice.") - .option("--model ", "Transformers.js TTS model ID.") - .option("--model-path ", "Local model/cache path.") - .option("--offline", "Force the Transformers.js local/offline WAV path.") - .option("--allow-remote-models", "Explicitly allow remote model downloads.") - .option("--voice ", "Edge voice. Defaults to fr-FR-DeniseNeural.") - .option("--rate ", "Edge rate. Defaults to +0%.") - .option("--speaker-embeddings ", "Optional model-specific speaker embedding path or URL.") - .option("--speed ", "Optional model-specific speech speed.", parseNumber) - .option("--doctor", "Show TTS runtime readiness instead of rendering.") - .option("--json", "Print machine-readable JSON.") - .action(async (textFile, options, command) => { - const cwd = projectRoot(command); - const tts = await loadTts(); - if (options.doctor) { - const report = await tts.doctor(); - printMaybeJson(report, options.json); - return; - } - if (!textFile) { - console.error(pc.red("Missing text file. Use `ragmir audio `.")); - process.exitCode = 1; - return; - } - const renderOptions = { - cwd, - textFile, - engine: audioEngine(options), - }; - addOption(renderOptions, "language", audioLanguage(options)); - addOption(renderOptions, "outputPath", options.out); - addOption(renderOptions, "model", options.model); - addOption(renderOptions, "modelPath", options.modelPath); - addOption(renderOptions, "allowRemoteModels", audioAllowRemoteModels(options)); - addOption(renderOptions, "voice", options.voice); - addOption(renderOptions, "rate", options.rate); - addOption(renderOptions, "speakerEmbeddings", options.speakerEmbeddings); - addOption(renderOptions, "speed", options.speed); - const result = await tts.renderSpeech(renderOptions); - printMaybeJson(result, options.json); -}); -program - .command("serve-mcp") - .description("Start the MCP server over stdio for Claude, Codex, and other MCP-compatible agents.") - .action(async (_options, command) => { - const explicitRoot = explicitProjectRoot(command); - await serveMcp(explicitRoot); -}); -program - .command("skill-path") - .description("Print the bundled Ragmir skill path for agents that can load SKILL.md folders.") - .action(() => { - console.log(bundledSkillPath()); -}); -program - .command("install-skill") - .description("Copy the bundled agent skill and MCP config snippet into the current repository.") - .option("--target-dir ", "Directory where the skill folder should be copied.", DEFAULT_SKILL_TARGET_DIR) - .option("--agents ", `Agent MCP helpers to generate: all, ${SUPPORTED_AGENT_TARGETS.join(", ")}.`, "all") - .option("--mcp-name ", "MCP server name used in generated config.", "ragmir") - .option("--mcp-command ", "Custom MCP stdio command for generated helper files.") - .option("--mcp-arg ", "Argument for --mcp-command. Repeat for multiple arguments.", collectOptionValue, []) - .action(async (options, command) => { - const cwd = projectRoot(command); - const installOptions = { - cwd, - targetDir: options.targetDir, - agents: parseAgentTargets(options.agents), - mcpServerName: options.mcpName, - }; - addOption(installOptions, "mcpCommand", options.mcpCommand); - if (options.mcpArg.length > 0) { - installOptions.mcpArgs = options.mcpArg; - } - const result = await installSkill(installOptions); - const doctorCommand = await ragmirCommand(cwd, ["doctor"]); - console.log("Installed Ragmir agent kit:"); - for (const file of result.written) { - console.log(` - ${file}`); - } - console.log(`Skill path: ${result.skillPath}`); - console.log(`Optional audio skill path: ${result.audioSkillPath}`); - console.log(`Optional Markdown report skill path: ${result.reportSkillPath}`); - console.log(`MCP config example: ${result.mcpConfigPath}`); - for (const helper of result.agentHelpers) { - console.log(`${helper.label} MCP helper: ${helper.path}`); - } - console.log(`Agent setup guide: ${result.agentSetupPath}`); - console.log(""); - console.log("Next steps:"); - console.log(" 1. Run `ragmir install-agent --agents claude` or another targeted agent list."); - console.log(" 2. Add the MCP config from .ragmir/ to the same agent when MCP tools are needed."); - console.log(` 3. Run \`${doctorCommand.display}\` before relying on retrieved context.`); -}); -program - .command("install-agent") - .description("Install Ragmir skills into native Claude, Codex, Kimi, OpenCode, or Cline folders.") - .option("--agents ", `Comma-separated agents: all, ${SUPPORTED_AGENT_TARGETS.join(", ")}.`, "all") - .option("--scope ", "Install scope: project or user.", "project") - .option("--mode ", "Expose skills as links or physical copies: link or copy.", "link") - .option("--json", "Print machine-readable JSON.") - .action(async (options, command) => { - const cwd = projectRoot(command); - const scope = parseAgentInstallScope(options.scope); - const mode = parseAgentInstallMode(options.mode); - const agents = parseAgentTargets(options.agents); - const result = await installAgentSkills({ cwd, agents, scope, mode }); - if (options.json) { - console.log(JSON.stringify(result, null, 2)); - return; - } - console.log(`Installed Ragmir skills for ${scope}-scope agent discovery:`); - for (const installation of result.installations) { - console.log(` - ${installation.label}: ${installation.targetDir} (${installation.mode})`); - } - console.log(""); - console.log("MCP helper files:"); - console.log(` - generic: ${result.projectKit.mcpConfigPath}`); - for (const helper of result.projectKit.agentHelpers) { - console.log(` - ${helper.label}: ${helper.path}`); - } - console.log(""); - console.log("Next steps:"); - console.log(" 1. Keep editing the canonical skills under .ragmir/skills/."); - console.log(" 2. Restart or reload the selected agent so it discovers the exposed SKILL.md files."); - console.log(" 3. Wire the matching MCP helper if the agent should call Ragmir tools directly."); - console.log(` 4. Run \`${(await ragmirCommand(cwd, ["doctor"])).display}\`.`); -}); -try { - await program.parseAsync(process.argv); -} -catch (error) { - console.error(pc.red(error instanceof Error ? error.message : String(error))); - process.exitCode = 1; -} -function parsePositiveInt(value) { - const parsed = Number.parseInt(value, 10); - if (!Number.isInteger(parsed) || parsed <= 0) { - throw new Error("Expected a positive integer."); - } - return parsed; -} -function parseRecallThreshold(value) { - const trimmed = value.trim(); - const parsed = Number(trimmed); - if (trimmed.length === 0 || !Number.isFinite(parsed) || parsed < 0 || parsed > 1) { - throw new Error("Expected a recall threshold between 0 and 1."); - } - return parsed; -} -function parseNumber(value) { - const parsed = Number.parseFloat(value); - if (!Number.isFinite(parsed)) { - throw new Error("Expected a number."); - } - return parsed; -} -function collectOptionValue(value, previous) { - return [...previous, value]; -} -function projectRoot(command) { - return explicitProjectRoot(command) ?? process.cwd(); -} -function explicitProjectRoot(command) { - const options = command.optsWithGlobals(); - return options.projectRoot ? path.resolve(options.projectRoot) : undefined; -} -function withTopK(cwd, topK) { - return topK === undefined ? { cwd } : { cwd, topK }; -} -async function loadTts() { - const module = await import(TTS_PACKAGE_NAME); - if (!isTtsModule(module)) { - throw new Error(`${TTS_PACKAGE_NAME} did not expose the expected TTS API.`); - } - return module; -} -function isTtsModule(value) { - return (typeof value === "object" && - value !== null && - "doctor" in value && - typeof value.doctor === "function" && - "renderSpeech" in value && - typeof value.renderSpeech === "function"); -} -function audioAllowRemoteModels(options) { - if (options.offline) { - return false; - } - if (options.allowRemoteModels) { - return true; - } - return undefined; -} -function audioLanguage(options) { - if (options.lang === undefined) { - return undefined; - } - if (isTtsLanguage(options.lang)) { - return options.lang; - } - throw new Error(`Expected --lang to be one of: ${TTS_LANGUAGES.join(", ")}.`); -} -function audioEngine(options) { - if (options.offline) { - return "transformers"; - } - if (options.engine === undefined) { - if (options.out?.toLowerCase().endsWith(".mp3")) { - throw new Error("MP3 output uses online Edge TTS. Re-run with `--engine edge` only when sending narration text to Edge TTS is acceptable."); - } - return "transformers"; - } - if (options.engine === "auto" || options.engine === "edge" || options.engine === "transformers") { - return options.engine; - } - throw new Error("Expected --engine to be auto, edge, or transformers."); -} -function parseAgentInstallScope(value) { - if (value === "project" || value === "user") { - return value; - } - throw new Error("Expected --scope to be project or user."); -} -function parseAgentInstallMode(value) { - if (value === "link" || value === "copy") { - return value; - } - throw new Error("Expected --mode to be link or copy."); -} -function printDoctor(report) { - console.log(`projectRoot=${report.projectRoot}`); - console.log(`initialized=${report.initialized}`); - console.log(`ready=${report.ready}`); - console.log(`packageManager=${report.packageManager}`); - console.log(`runCommand=${report.runCommand}`); - console.log(`agentKitInstalled=${report.agentKitInstalled}`); - console.log(`embeddingProvider=${report.embeddingProvider}`); - console.log(`transformersAllowRemoteModels=${report.transformersAllowRemoteModels}`); - console.log(`redactionEnabled=${report.redactionEnabled}`); - console.log(`accessLog=${report.accessLog}`); - console.log(`supportedFiles=${report.supportedFiles}`); - console.log(`skippedFiles=${report.skippedFiles}`); - console.log(`unsupportedFiles=${report.unsupportedFiles}`); - console.log(`indexedFiles=${report.indexedFiles}`); - console.log(`chunksIndexed=${report.chunksIndexed}`); - console.log(`missingFromIndex=${report.missingFromIndex}`); - console.log(`staleInIndex=${report.staleInIndex}`); - console.log(`securityWarnings=${report.securityWarnings.length}`); - if (report.securityWarnings.length > 0) { - for (const warning of report.securityWarnings) { - console.log(pc.yellow(`warning: ${warning}`)); - } - } - console.log("nextSteps:"); - for (const step of report.nextSteps) { - console.log(` - ${step}`); - } -} -function printResearchReport(report) { - console.log(`query=${report.query}`); - console.log(`ready=${report.ready}`); - console.log(`generatedQueries=${report.generatedQueries.length}`); - console.log(`audit.supportedFiles=${report.audit.supportedFiles} audit.indexedFiles=${report.audit.indexedFiles} audit.totalChunks=${report.audit.totalChunks} audit.skippedFiles=${report.audit.skippedFiles} audit.missingFromIndex=${report.audit.missingFromIndex} audit.staleInIndex=${report.audit.staleInIndex}`); - console.log(`securityWarnings=${report.securityWarnings.length}`); - console.log(`sourceDiagnostics.duplicates=${report.sourceDiagnostics.duplicateCandidates.length} sourceDiagnostics.archives=${report.sourceDiagnostics.archiveCandidates.length} sourceDiagnostics.mirrors=${report.sourceDiagnostics.mirrorCandidates.length}`); - if (report.sourceDiagnostics.duplicateCandidates.length > 0) { - console.log(""); - console.log(pc.cyan("Duplicate Candidates:")); - for (const candidate of report.sourceDiagnostics.duplicateCandidates.slice(0, 5)) { - console.log(` - ${candidate.key}: ${candidate.files.join(", ")}`); - } - } - if (report.evidence.length > 0) { - console.log(""); - console.log(pc.cyan("Evidence:")); - for (const [index, evidence] of report.evidence.entries()) { - const distance = evidence.distance === null ? "n/a" : evidence.distance.toFixed(4); - console.log(` [${index + 1}] ${evidence.relativePath} chunk=${evidence.chunkIndex} distance=${distance}`); - console.log(` ${researchEvidencePreview(evidence)}`); - } - } - if (report.codeEvidence.length > 0) { - console.log(""); - console.log(pc.cyan("Code Evidence:")); - for (const evidence of report.codeEvidence.slice(0, 10)) { - console.log(` - ${evidence.relativePath}:${evidence.lineNumber} terms=${evidence.matchedTerms.join(",")}`); - console.log(` ${evidence.snippet}`); - } - } - if (report.gaps.length > 0) { - console.log(""); - console.log(pc.yellow("Gaps:")); - for (const gap of report.gaps) { - console.log(pc.yellow(` - ${gap}`)); - } - } - console.log(""); - console.log(pc.cyan("Next Steps:")); - for (const step of report.nextSteps) { - console.log(` - ${step}`); - } -} -function researchEvidencePreview(evidence) { - if ("snippet" in evidence) { - return evidence.snippet; - } - return evidence.text.replace(/\s+/gu, " ").trim().slice(0, SEARCH_TEXT_PREVIEW_LENGTH); -} -function printSetup(result, title) { - console.log(pc.green(title)); - console.log(`projectRoot=${result.projectRoot}`); - console.log(`packageManager=${result.packageManager}`); - console.log(`runCommand=${result.runCommand}`); - console.log(""); - console.log(pc.cyan("Scaffolding:")); - if (result.created.length === 0) { - console.log(" - already initialized"); - } - else { - for (const file of result.created) { - console.log(` - ${file}`); - } - } - console.log(""); - console.log(pc.cyan("Agent integration:")); - console.log(` - skill: ${result.agentKit.skillPath}`); - console.log(` - audio skill: ${result.agentKit.audioSkillPath}`); - console.log(` - report skill: ${result.agentKit.reportSkillPath}`); - console.log(` - MCP config: ${result.agentKit.mcpConfigPath}`); - for (const helper of result.agentKit.agentHelpers) { - console.log(` - ${helper.label} MCP helper: ${helper.path}`); - } - console.log(` - agent setup guide: ${result.agentKit.agentSetupPath}`); - console.log(""); - if (result.semantic) { - console.log(pc.cyan("Semantic retrieval:")); - console.log(" - enabled for higher-quality natural-language retrieval"); - console.log(` - embedding model: ${result.semantic.model.embeddingModel}`); - console.log(` - model path: ${result.semantic.model.embeddingModelPath}`); - console.log(" - remote model loading after setup: false"); - } - else { - console.log(pc.cyan("Semantic retrieval:")); - console.log(" - skipped; default local-hash retrieval is fully local but not semantic. Run `ragmir setup --semantic` or `ragmir models pull --enable` when a one-time model download is acceptable."); - } - console.log(""); - console.log(pc.cyan("Index:")); - if (result.ingested) { - console.log(` - ingested indexedFiles=${result.ingested.indexedFiles} rebuiltFiles=${result.ingested.rebuiltFiles} reusedFiles=${result.ingested.reusedFiles} chunks=${result.ingested.chunks} skippedFiles=${result.ingested.skippedFiles} emptyTextFiles=${result.ingested.emptyTextFiles.length} errors=${result.ingested.errors.length}`); - printUnsupportedSummary(result.ingested.unsupportedExtensions); - printEmptyTextFiles(result.ingested.emptyTextFiles); - } - else if (result.doctor.ready) { - console.log(` - already ready chunks=${result.doctor.chunksIndexed}`); - } - else { - console.log(" - skipped; add supported files or run doctor --fix when ready"); - } - console.log(""); - printDoctor(result.doctor); -} -function printUnsupportedSummary(extensions) { - if (extensions.length === 0) { - return; - } - console.log(pc.yellow(`unsupportedExtensions=${extensions - .map((entry) => `${entry.extension}:${entry.count}`) - .join(",")}`)); -} -function printEmptyTextFiles(files) { - if (files.length === 0) { - return; - } - console.log(pc.yellow(`emptyTextFiles=${files.length}`)); - for (const file of files) { - console.log(pc.yellow(`empty-text: ${file}`)); - } - console.log(pc.yellow("These supported files produced no indexable text. For scanned/image-only sources, configure pdfOcrCommand or imageOcrCommand, or store local OCR text beside the source file.")); -} -function printMaybeJson(value, json) { - if (json) { - console.log(JSON.stringify(value, null, 2)); - return; - } - if (typeof value === "object" && value !== null) { - for (const [key, entry] of Object.entries(value)) { - console.log(`${key}=${String(entry)}`); - } - return; - } - console.log(String(value)); -} -function addOption(target, key, value) { - if (value !== undefined) { - target[key] = value; - } -} -//# sourceMappingURL=cli.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/cli.js.map b/packages/ragmir-core/dist/cli.js.map deleted file mode 100644 index a1961f3..0000000 --- a/packages/ragmir-core/dist/cli.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/config.d.ts b/packages/ragmir-core/dist/config.d.ts deleted file mode 100644 index 038e2eb..0000000 --- a/packages/ragmir-core/dist/config.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "./types.js"; -interface ProjectConfigFile { - projectRoot: string; - configPath: string; - legacy: boolean; -} -export declare function findProjectRoot(start?: string): string; -export declare function findProjectConfig(start?: string): ProjectConfigFile; -export declare function loadConfig(start?: string): Promise; -export {}; -//# sourceMappingURL=config.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/config.d.ts.map b/packages/ragmir-core/dist/config.d.ts.map deleted file mode 100644 index 1066483..0000000 --- a/packages/ragmir-core/dist/config.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAkDxC,UAAU,iBAAiB;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,wBAAgB,eAAe,CAAC,KAAK,SAAgB,GAAG,MAAM,CAE7D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,SAAgB,GAAG,iBAAiB,CA+B1E;AAED,wBAAsB,UAAU,CAAC,KAAK,SAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+CvE"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/config.js b/packages/ragmir-core/dist/config.js deleted file mode 100644 index ca2279c..0000000 --- a/packages/ragmir-core/dist/config.js +++ /dev/null @@ -1,224 +0,0 @@ -import { existsSync } from "node:fs"; -import { readFile } from "node:fs/promises"; -import path from "node:path"; -import { z } from "zod"; -import { CONFIG_PATH, DEFAULT_CONFIG, LEGACY_CONFIG_PATH, LEGACY_DEFAULT_CONFIG, } from "./defaults.js"; -import { isRecord } from "./guards.js"; -const embeddingProviderSchema = z.enum(["local-hash", "transformers"]); -const rawConfigSchema = z.object({ - rawDir: z.string().default(DEFAULT_CONFIG.rawDir), - storageDir: z.string().default(DEFAULT_CONFIG.storageDir), - sourcesFile: z.string().default(DEFAULT_CONFIG.sourcesFile), - sources: z.array(z.string().min(1)).default(DEFAULT_CONFIG.sources), - accessLogPath: z.string().default(DEFAULT_CONFIG.accessLogPath), - embeddingModelPath: z.string().default(DEFAULT_CONFIG.embeddingModelPath), - tableName: z.string().default(DEFAULT_CONFIG.tableName), - embeddingProvider: embeddingProviderSchema.default(DEFAULT_CONFIG.embeddingProvider), - embeddingModel: z.string().default(DEFAULT_CONFIG.embeddingModel), - transformersAllowRemoteModels: z.boolean().default(DEFAULT_CONFIG.transformersAllowRemoteModels), - redaction: z - .object({ - enabled: z.boolean().default(DEFAULT_CONFIG.redaction.enabled), - builtIn: z.boolean().default(DEFAULT_CONFIG.redaction.builtIn), - patterns: z - .array(z.object({ - name: z.string().min(1), - pattern: z.string().min(1), - flags: z.string().optional(), - replacement: z.string().optional(), - })) - .default(DEFAULT_CONFIG.redaction.patterns), - }) - .default(DEFAULT_CONFIG.redaction), - accessLog: z.boolean().default(DEFAULT_CONFIG.accessLog), - mcpMaxTopK: z.number().int().positive().default(DEFAULT_CONFIG.mcpMaxTopK), - topK: z.number().int().positive().default(DEFAULT_CONFIG.topK), - chunkSize: z.number().int().positive().default(DEFAULT_CONFIG.chunkSize), - chunkOverlap: z.number().int().nonnegative().default(DEFAULT_CONFIG.chunkOverlap), - maxFileBytes: z.number().int().positive().default(DEFAULT_CONFIG.maxFileBytes), - ingestConcurrency: z.number().int().positive().default(DEFAULT_CONFIG.ingestConcurrency), - embeddingBatchSize: z.number().int().positive().default(DEFAULT_CONFIG.embeddingBatchSize), - includeExtensions: z.array(z.string().min(1)).default(DEFAULT_CONFIG.includeExtensions), - pdfOcrCommand: z.array(z.string().min(1)).default(DEFAULT_CONFIG.pdfOcrCommand), - pdfOcrTimeoutMs: z.number().int().positive().default(DEFAULT_CONFIG.pdfOcrTimeoutMs), - imageOcrCommand: z.array(z.string().min(1)).default(DEFAULT_CONFIG.imageOcrCommand), - imageOcrTimeoutMs: z.number().int().positive().default(DEFAULT_CONFIG.imageOcrTimeoutMs), - legacyWordCommand: z.array(z.string().min(1)).default(DEFAULT_CONFIG.legacyWordCommand), - legacyWordTimeoutMs: z.number().int().positive().default(DEFAULT_CONFIG.legacyWordTimeoutMs), -}); -export function findProjectRoot(start = process.cwd()) { - return findProjectConfig(start).projectRoot; -} -export function findProjectConfig(start = process.cwd()) { - let current = path.resolve(start); - while (true) { - if (existsSync(path.join(current, CONFIG_PATH))) { - return { - projectRoot: current, - configPath: path.join(current, CONFIG_PATH), - legacy: false, - }; - } - if (existsSync(path.join(current, LEGACY_CONFIG_PATH))) { - return { - projectRoot: current, - configPath: path.join(current, LEGACY_CONFIG_PATH), - legacy: true, - }; - } - const parent = path.dirname(current); - if (parent === current) { - const projectRoot = path.resolve(start); - return { - projectRoot, - configPath: path.join(projectRoot, CONFIG_PATH), - legacy: false, - }; - } - current = parent; - } -} -export async function loadConfig(start = process.cwd()) { - const projectConfig = findProjectConfig(start); - const hasConfig = existsSync(projectConfig.configPath); - const raw = hasConfig ? JSON.parse(await readFile(projectConfig.configPath, "utf8")) : {}; - if (!isRecord(raw)) { - throw new Error(`${path.relative(projectConfig.projectRoot, projectConfig.configPath)} must contain a JSON object.`); - } - const defaults = projectConfig.legacy ? LEGACY_DEFAULT_CONFIG : DEFAULT_CONFIG; - const parsed = rawConfigSchema.parse({ ...defaults, ...raw }); - const withEnv = applyEnv(parsed); - if (withEnv.chunkOverlap >= withEnv.chunkSize) { - throw new Error("chunkOverlap must be lower than chunkSize."); - } - return { - projectRoot: projectConfig.projectRoot, - rawDir: resolveFromRoot(projectConfig.projectRoot, withEnv.rawDir), - storageDir: resolveFromRoot(projectConfig.projectRoot, withEnv.storageDir), - sourcesFile: resolveFromRoot(projectConfig.projectRoot, withEnv.sourcesFile), - sources: withEnv.sources, - accessLogPath: resolveFromRoot(projectConfig.projectRoot, withEnv.accessLogPath), - embeddingModelPath: resolveFromRoot(projectConfig.projectRoot, withEnv.embeddingModelPath), - tableName: withEnv.tableName, - embeddingProvider: withEnv.embeddingProvider, - embeddingModel: withEnv.embeddingModel, - transformersAllowRemoteModels: withEnv.transformersAllowRemoteModels, - redaction: withEnv.redaction, - accessLog: withEnv.accessLog, - mcpMaxTopK: withEnv.mcpMaxTopK, - topK: withEnv.topK, - chunkSize: withEnv.chunkSize, - chunkOverlap: withEnv.chunkOverlap, - maxFileBytes: withEnv.maxFileBytes, - ingestConcurrency: withEnv.ingestConcurrency, - embeddingBatchSize: withEnv.embeddingBatchSize, - includeExtensions: normalizeExtensions(withEnv.includeExtensions), - pdfOcrCommand: withEnv.pdfOcrCommand, - pdfOcrTimeoutMs: withEnv.pdfOcrTimeoutMs, - imageOcrCommand: withEnv.imageOcrCommand, - imageOcrTimeoutMs: withEnv.imageOcrTimeoutMs, - legacyWordCommand: withEnv.legacyWordCommand, - legacyWordTimeoutMs: withEnv.legacyWordTimeoutMs, - }; -} -function resolveFromRoot(projectRoot, input) { - return path.isAbsolute(input) ? input : path.resolve(projectRoot, input); -} -function applyEnv(config) { - return { - ...config, - rawDir: readStringEnv("RAGMIR_RAW_DIR", "KB_RAW_DIR", config.rawDir), - storageDir: readStringEnv("RAGMIR_STORAGE_DIR", "KB_STORAGE_DIR", config.storageDir), - sourcesFile: readStringEnv("RAGMIR_SOURCES_FILE", "KB_SOURCES_FILE", config.sourcesFile), - accessLogPath: readStringEnv("RAGMIR_ACCESS_LOG_PATH", "KB_ACCESS_LOG_PATH", config.accessLogPath), - embeddingProvider: readEmbeddingProviderEnv("RAGMIR_EMBEDDING_PROVIDER", "KB_EMBEDDING_PROVIDER", config.embeddingProvider), - embeddingModel: readStringEnv("RAGMIR_EMBEDDING_MODEL", "KB_EMBEDDING_MODEL", config.embeddingModel), - embeddingModelPath: readStringEnv("RAGMIR_EMBEDDING_MODEL_PATH", "KB_EMBEDDING_MODEL_PATH", config.embeddingModelPath), - transformersAllowRemoteModels: readBooleanEnv("RAGMIR_TRANSFORMERS_ALLOW_REMOTE_MODELS", "KB_TRANSFORMERS_ALLOW_REMOTE_MODELS", config.transformersAllowRemoteModels), - redaction: { - ...config.redaction, - enabled: readBooleanEnv("RAGMIR_REDACTION_ENABLED", "KB_REDACTION_ENABLED", config.redaction.enabled), - builtIn: readBooleanEnv("RAGMIR_REDACTION_BUILT_IN", "KB_REDACTION_BUILT_IN", config.redaction.builtIn), - }, - accessLog: readBooleanEnv("RAGMIR_ACCESS_LOG", "KB_ACCESS_LOG", config.accessLog), - mcpMaxTopK: readPositiveIntEnv("RAGMIR_MCP_MAX_TOP_K", "KB_MCP_MAX_TOP_K", config.mcpMaxTopK), - topK: readPositiveIntEnv("RAGMIR_TOP_K", "KB_TOP_K", config.topK), - chunkSize: readPositiveIntEnv("RAGMIR_CHUNK_SIZE", "KB_CHUNK_SIZE", config.chunkSize), - chunkOverlap: readNonNegativeIntEnv("RAGMIR_CHUNK_OVERLAP", "KB_CHUNK_OVERLAP", config.chunkOverlap), - maxFileBytes: readPositiveIntEnv("RAGMIR_MAX_FILE_BYTES", "KB_MAX_FILE_BYTES", config.maxFileBytes), - ingestConcurrency: readPositiveIntEnv("RAGMIR_INGEST_CONCURRENCY", "KB_INGEST_CONCURRENCY", config.ingestConcurrency), - embeddingBatchSize: readPositiveIntEnv("RAGMIR_EMBEDDING_BATCH_SIZE", "KB_EMBEDDING_BATCH_SIZE", config.embeddingBatchSize), - includeExtensions: readExtensionsEnv("RAGMIR_INCLUDE_EXTENSIONS", "KB_INCLUDE_EXTENSIONS", config.includeExtensions), - pdfOcrCommand: readJsonStringArrayEnv("RAGMIR_PDF_OCR_COMMAND", "KB_PDF_OCR_COMMAND", config.pdfOcrCommand), - pdfOcrTimeoutMs: readPositiveIntEnv("RAGMIR_PDF_OCR_TIMEOUT_MS", "KB_PDF_OCR_TIMEOUT_MS", config.pdfOcrTimeoutMs), - imageOcrCommand: readJsonStringArrayEnv("RAGMIR_IMAGE_OCR_COMMAND", "KB_IMAGE_OCR_COMMAND", config.imageOcrCommand), - imageOcrTimeoutMs: readPositiveIntEnv("RAGMIR_IMAGE_OCR_TIMEOUT_MS", "KB_IMAGE_OCR_TIMEOUT_MS", config.imageOcrTimeoutMs), - legacyWordCommand: readJsonStringArrayEnv("RAGMIR_LEGACY_WORD_COMMAND", "KB_LEGACY_WORD_COMMAND", config.legacyWordCommand), - legacyWordTimeoutMs: readPositiveIntEnv("RAGMIR_LEGACY_WORD_TIMEOUT_MS", "KB_LEGACY_WORD_TIMEOUT_MS", config.legacyWordTimeoutMs), - }; -} -function normalizeExtensions(extensions) { - return [ - ...new Set(extensions - .map((extension) => extension.trim().toLowerCase()) - .filter(Boolean) - .map((extension) => (extension.startsWith(".") ? extension : `.${extension}`))), - ].sort(); -} -function readEmbeddingProviderEnv(name, legacyName, fallback) { - const parsed = embeddingProviderSchema.safeParse(process.env[name] ?? process.env[legacyName]); - return parsed.success ? parsed.data : fallback; -} -function readStringEnv(name, legacyName, fallback) { - return process.env[name] ?? process.env[legacyName] ?? fallback; -} -function readBooleanEnv(name, legacyName, fallback) { - const raw = (process.env[name] ?? process.env[legacyName])?.toLowerCase(); - if (raw === "1" || raw === "true" || raw === "yes") { - return true; - } - if (raw === "0" || raw === "false" || raw === "no") { - return false; - } - return fallback; -} -function readPositiveIntEnv(name, legacyName, fallback) { - const raw = process.env[name] ?? process.env[legacyName]; - if (!raw) { - return fallback; - } - const value = Number.parseInt(raw, 10); - return Number.isInteger(value) && value > 0 ? value : fallback; -} -function readNonNegativeIntEnv(name, legacyName, fallback) { - const raw = process.env[name] ?? process.env[legacyName]; - if (!raw) { - return fallback; - } - const value = Number.parseInt(raw, 10); - return Number.isInteger(value) && value >= 0 ? value : fallback; -} -function readExtensionsEnv(name, legacyName, fallback) { - const raw = process.env[name] ?? process.env[legacyName]; - if (!raw) { - return fallback; - } - return raw.split(","); -} -function readJsonStringArrayEnv(name, legacyName, fallback) { - const raw = process.env[name] ?? process.env[legacyName]; - if (!raw) { - return fallback; - } - try { - const parsed = JSON.parse(raw); - return Array.isArray(parsed) && - parsed.every((value) => typeof value === "string" && value.length > 0) - ? parsed - : fallback; - } - catch { - return fallback; - } -} -//# sourceMappingURL=config.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/config.js.map b/packages/ragmir-core/dist/config.js.map deleted file mode 100644 index 32918ad..0000000 --- a/packages/ragmir-core/dist/config.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/defaults.d.ts b/packages/ragmir-core/dist/defaults.d.ts deleted file mode 100644 index b2d6434..0000000 --- a/packages/ragmir-core/dist/defaults.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { Config } from "./types.js"; -export declare const RAGMIR_DIR = ".ragmir"; -export declare const LEGACY_KB_DIR = ".kb"; -export declare const LEGACY_PRIVATE_DIR = "private"; -export declare const RAGMIR_RAW_DIR = ".ragmir/raw"; -export declare const CONFIG_PATH = ".ragmir/config.json"; -export declare const LEGACY_CONFIG_PATH = ".kb/config.json"; -export declare const DEFAULT_SKILL_TARGET_DIR = ".ragmir/skills"; -export declare const RAGMIR_PROJECT_ROOT_ENV = "RAGMIR_PROJECT_ROOT"; -export declare const SOURCES_FILE_HEADER: string[]; -export declare const RAGMIR_GITIGNORE_ENTRY = ".ragmir/"; -export declare const LEGACY_KB_GITIGNORE_ENTRY = ".kb/"; -export declare const LEGACY_PRIVATE_GITIGNORE_ENTRY = "private/"; -export declare const LEGACY_PRIVATE_GITIGNORE_FALLBACK_ENTRY = "private/**"; -export declare const DEFAULT_CONFIG: Omit; -export declare const LEGACY_DEFAULT_CONFIG: Omit; -//# sourceMappingURL=defaults.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/defaults.d.ts.map b/packages/ragmir-core/dist/defaults.d.ts.map deleted file mode 100644 index 9ec205d..0000000 --- a/packages/ragmir-core/dist/defaults.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,eAAO,MAAM,UAAU,YAAY,CAAA;AACnC,eAAO,MAAM,aAAa,QAAQ,CAAA;AAClC,eAAO,MAAM,kBAAkB,YAAY,CAAA;AAC3C,eAAO,MAAM,cAAc,gBAAsB,CAAA;AACjD,eAAO,MAAM,WAAW,wBAA8B,CAAA;AACtD,eAAO,MAAM,kBAAkB,oBAAiC,CAAA;AAChE,eAAO,MAAM,wBAAwB,mBAAyB,CAAA;AAE9D,eAAO,MAAM,uBAAuB,wBAAwB,CAAA;AAE5D,eAAO,MAAM,mBAAmB,UAM/B,CAAA;AAED,eAAO,MAAM,sBAAsB,aAAmB,CAAA;AACtD,eAAO,MAAM,yBAAyB,SAAsB,CAAA;AAC5D,eAAO,MAAM,8BAA8B,aAA2B,CAAA;AACtE,eAAO,MAAM,uCAAuC,eAA6B,CAAA;AAEjF,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,CA+BtD,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,CAM7D,CAAA"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/defaults.js b/packages/ragmir-core/dist/defaults.js deleted file mode 100644 index c0b140f..0000000 --- a/packages/ragmir-core/dist/defaults.js +++ /dev/null @@ -1,59 +0,0 @@ -export const RAGMIR_DIR = ".ragmir"; -export const LEGACY_KB_DIR = ".kb"; -export const LEGACY_PRIVATE_DIR = "private"; -export const RAGMIR_RAW_DIR = `${RAGMIR_DIR}/raw`; -export const CONFIG_PATH = `${RAGMIR_DIR}/config.json`; -export const LEGACY_CONFIG_PATH = `${LEGACY_KB_DIR}/config.json`; -export const DEFAULT_SKILL_TARGET_DIR = `${RAGMIR_DIR}/skills`; -export const RAGMIR_PROJECT_ROOT_ENV = "RAGMIR_PROJECT_ROOT"; -export const SOURCES_FILE_HEADER = [ - "# Optional extra source paths or glob patterns, one per line.", - "# Relative paths resolve from the project root. Prefix glob exclusions with !.", - "# Example: ../apps/*/docs/**/*.md", - "# Example: !../apps/**/node_modules/**", - "", -]; -export const RAGMIR_GITIGNORE_ENTRY = `${RAGMIR_DIR}/`; -export const LEGACY_KB_GITIGNORE_ENTRY = `${LEGACY_KB_DIR}/`; -export const LEGACY_PRIVATE_GITIGNORE_ENTRY = `${LEGACY_PRIVATE_DIR}/`; -export const LEGACY_PRIVATE_GITIGNORE_FALLBACK_ENTRY = `${LEGACY_PRIVATE_DIR}/**`; -export const DEFAULT_CONFIG = { - rawDir: RAGMIR_RAW_DIR, - storageDir: `${RAGMIR_DIR}/storage`, - sourcesFile: `${RAGMIR_DIR}/sources.txt`, - sources: [], - accessLogPath: `${RAGMIR_DIR}/access.log`, - embeddingModelPath: `${RAGMIR_DIR}/models`, - tableName: "chunks", - embeddingProvider: "local-hash", - embeddingModel: "mixedbread-ai/mxbai-embed-xsmall-v1", - transformersAllowRemoteModels: false, - redaction: { - enabled: true, - builtIn: true, - patterns: [], - }, - accessLog: true, - mcpMaxTopK: 10, - topK: 8, - chunkSize: 1200, - chunkOverlap: 200, - maxFileBytes: 50_000_000, - ingestConcurrency: 4, - embeddingBatchSize: 32, - includeExtensions: [], - pdfOcrCommand: [], - pdfOcrTimeoutMs: 120_000, - imageOcrCommand: [], - imageOcrTimeoutMs: 120_000, - legacyWordCommand: [], - legacyWordTimeoutMs: 120_000, -}; -export const LEGACY_DEFAULT_CONFIG = { - ...DEFAULT_CONFIG, - rawDir: LEGACY_PRIVATE_DIR, - storageDir: `${LEGACY_KB_DIR}/storage`, - sourcesFile: `${LEGACY_KB_DIR}/sources.txt`, - accessLogPath: `${LEGACY_KB_DIR}/access.log`, -}; -//# sourceMappingURL=defaults.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/defaults.js.map b/packages/ragmir-core/dist/defaults.js.map deleted file mode 100644 index b43049d..0000000 --- a/packages/ragmir-core/dist/defaults.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAA;AACnC,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAA;AAClC,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAA;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,UAAU,MAAM,CAAA;AACjD,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,UAAU,cAAc,CAAA;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,aAAa,cAAc,CAAA;AAChE,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,UAAU,SAAS,CAAA;AAE9D,MAAM,CAAC,MAAM,uBAAuB,GAAG,qBAAqB,CAAA;AAE5D,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,+DAA+D;IAC/D,gFAAgF;IAChF,mCAAmC;IACnC,wCAAwC;IACxC,EAAE;CACH,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,UAAU,GAAG,CAAA;AACtD,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,aAAa,GAAG,CAAA;AAC5D,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,kBAAkB,GAAG,CAAA;AACtE,MAAM,CAAC,MAAM,uCAAuC,GAAG,GAAG,kBAAkB,KAAK,CAAA;AAEjF,MAAM,CAAC,MAAM,cAAc,GAAgC;IACzD,MAAM,EAAE,cAAc;IACtB,UAAU,EAAE,GAAG,UAAU,UAAU;IACnC,WAAW,EAAE,GAAG,UAAU,cAAc;IACxC,OAAO,EAAE,EAAE;IACX,aAAa,EAAE,GAAG,UAAU,aAAa;IACzC,kBAAkB,EAAE,GAAG,UAAU,SAAS;IAC1C,SAAS,EAAE,QAAQ;IACnB,iBAAiB,EAAE,YAAY;IAC/B,cAAc,EAAE,qCAAqC;IACrD,6BAA6B,EAAE,KAAK;IACpC,SAAS,EAAE;QACT,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,EAAE;KACb;IACD,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,EAAE;IACd,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,GAAG;IACjB,YAAY,EAAE,UAAU;IACxB,iBAAiB,EAAE,CAAC;IACpB,kBAAkB,EAAE,EAAE;IACtB,iBAAiB,EAAE,EAAE;IACrB,aAAa,EAAE,EAAE;IACjB,eAAe,EAAE,OAAO;IACxB,eAAe,EAAE,EAAE;IACnB,iBAAiB,EAAE,OAAO;IAC1B,iBAAiB,EAAE,EAAE;IACrB,mBAAmB,EAAE,OAAO;CAC7B,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAgC;IAChE,GAAG,cAAc;IACjB,MAAM,EAAE,kBAAkB;IAC1B,UAAU,EAAE,GAAG,aAAa,UAAU;IACtC,WAAW,EAAE,GAAG,aAAa,cAAc;IAC3C,aAAa,EAAE,GAAG,aAAa,aAAa;CAC7C,CAAA"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/destroy.d.ts b/packages/ragmir-core/dist/destroy.d.ts deleted file mode 100644 index 4421081..0000000 --- a/packages/ragmir-core/dist/destroy.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { DestroyIndexResult } from "./types.js"; -export declare function destroyIndex(cwd?: string): Promise; -//# sourceMappingURL=destroy.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/destroy.d.ts.map b/packages/ragmir-core/dist/destroy.d.ts.map deleted file mode 100644 index 106314a..0000000 --- a/packages/ragmir-core/dist/destroy.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../src/destroy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpD,wBAAsB,YAAY,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAYnF"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/destroy.js b/packages/ragmir-core/dist/destroy.js deleted file mode 100644 index 3cf9253..0000000 --- a/packages/ragmir-core/dist/destroy.js +++ /dev/null @@ -1,16 +0,0 @@ -import { existsSync } from "node:fs"; -import { rm } from "node:fs/promises"; -import { recordAccess } from "./access-log.js"; -import { loadConfig } from "./config.js"; -export async function destroyIndex(cwd = process.cwd()) { - const config = await loadConfig(cwd); - const existed = existsSync(config.storageDir); - await recordAccess(config, { action: "destroy-index" }); - await rm(config.storageDir, { recursive: true, force: true }); - return { - storageDir: config.storageDir, - removed: existed, - note: "Generated index removed. For forensic deletion guarantees, keep .ragmir/ on an encrypted volume and rotate/destroy the volume key.", - }; -} -//# sourceMappingURL=destroy.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/destroy.js.map b/packages/ragmir-core/dist/destroy.js.map deleted file mode 100644 index 5804525..0000000 --- a/packages/ragmir-core/dist/destroy.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"destroy.js","sourceRoot":"","sources":["../src/destroy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACpD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAA;IACpC,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAE7C,MAAM,YAAY,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAA;IACvD,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAE7D,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,oIAAoI;KAC3I,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/doctor.d.ts b/packages/ragmir-core/dist/doctor.d.ts deleted file mode 100644 index 96bd395..0000000 --- a/packages/ragmir-core/dist/doctor.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { DoctorReport } from "./types.js"; -export declare function doctor(cwd?: string): Promise; -//# sourceMappingURL=doctor.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/doctor.d.ts.map b/packages/ragmir-core/dist/doctor.d.ts.map deleted file mode 100644 index ace103f..0000000 --- a/packages/ragmir-core/dist/doctor.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,wBAAsB,MAAM,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAsDvE"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/doctor.js b/packages/ragmir-core/dist/doctor.js deleted file mode 100644 index 47660b0..0000000 --- a/packages/ragmir-core/dist/doctor.js +++ /dev/null @@ -1,117 +0,0 @@ -import { existsSync } from "node:fs"; -import path from "node:path"; -import { findProjectConfig, loadConfig } from "./config.js"; -import { RAGMIR_DIR } from "./defaults.js"; -import { countSkippedByReason } from "./files.js"; -import { audit } from "./ingest.js"; -import { ragmirCommand } from "./package-manager.js"; -import { securityAudit } from "./security.js"; -import { AGENT_HELPER_CONFIG_FILENAMES, AGENT_SETUP_FILENAME, MCP_CONFIG_FILENAME, SKILL_NAMES, } from "./skill.js"; -import { countRows } from "./store.js"; -export async function doctor(cwd = process.cwd()) { - const projectConfig = findProjectConfig(cwd); - const initialized = existsSync(projectConfig.configPath); - const config = await loadConfig(cwd); - const command = await ragmirCommand(config.projectRoot, []); - const agentKitInstalled = isAgentKitInstalled(config.projectRoot); - const [auditReport, securityReport, chunksIndexed] = await Promise.all([ - audit(config.projectRoot), - securityAudit(config.projectRoot), - countRows(config), - ]); - const nextSteps = nextActions({ - initialized, - supportedFiles: auditReport.supportedFiles.length, - skippedFiles: auditReport.skippedFiles.length, - unsupportedFiles: countSkippedByReason(auditReport.skippedFiles, "unsupported-extension"), - chunksIndexed, - missingFromIndex: auditReport.missingFromIndex.length, - staleInIndex: auditReport.staleInIndex.length, - warnings: securityReport.warnings.length, - embeddingProvider: config.embeddingProvider, - agentKitInstalled, - run: (args) => command.display + (args.length > 0 ? ` ${args.join(" ")}` : ""), - }); - return { - projectRoot: config.projectRoot, - initialized, - packageManager: command.packageManager, - runCommand: command.display, - agentKitInstalled, - rawDir: config.rawDir, - storageDir: config.storageDir, - embeddingProvider: config.embeddingProvider, - transformersAllowRemoteModels: config.transformersAllowRemoteModels, - redactionEnabled: config.redaction.enabled, - accessLog: config.accessLog, - supportedFiles: auditReport.supportedFiles.length, - skippedFiles: auditReport.skippedFiles.length, - unsupportedFiles: countSkippedByReason(auditReport.skippedFiles, "unsupported-extension"), - indexedFiles: auditReport.indexedFiles.length, - chunksIndexed, - missingFromIndex: auditReport.missingFromIndex.length, - staleInIndex: auditReport.staleInIndex.length, - securityWarnings: securityReport.warnings, - ready: initialized && - chunksIndexed > 0 && - auditReport.missingFromIndex.length === 0 && - auditReport.staleInIndex.length === 0 && - securityReport.warnings.length === 0, - nextSteps, - }; -} -function nextActions(input) { - const steps = []; - if (!input.initialized) { - steps.push(`Run \`${input.run(["setup"])}\` to initialize Ragmir and install the agent kit.`); - return steps; - } - if (input.supportedFiles === 0) { - if (input.skippedFiles > 0) { - steps.push("Ragmir found files, but none are currently indexable. Run `ragmir audit --unsupported` to inspect skipped files."); - } - else { - steps.push('Add supported files under .ragmir/raw/ or list extra source paths in the "sources" array of .ragmir/config.json.'); - } - return steps; - } - if (input.chunksIndexed === 0 || input.missingFromIndex > 0 || input.staleInIndex > 0) { - steps.push(`Run \`${input.run(["doctor", "--fix"])}\` to rebuild stale or missing index data.`); - steps.push(`Run \`${input.run(["audit"])}\` to verify missingFromIndex=0 and staleInIndex=0.`); - steps.push("If files remain missing because they are scanned or image-only, configure `pdfOcrCommand` or `imageOcrCommand`, or convert scans/images to OCR text before ingesting."); - } - if (input.warnings > 0) { - steps.push(`Run \`${input.run(["security-audit", "--strict"])}\` and fix the reported warnings.`); - } - if (steps.length === 0) { - if (input.unsupportedFiles > 0) { - steps.push("Run `ragmir audit --unsupported` to inspect files skipped because their type is not supported."); - } - if (input.embeddingProvider === "local-hash") { - steps.push(`For natural-language Q&A, run \`${input.run(["models", "pull", "--enable"])}\`, then run \`${input.run(["ingest", "--rebuild"])}\`.`); - } - steps.push(`Run \`${input.run(["search", '"your question"'])}\` to retrieve source passages.`); - steps.push(`Run \`${input.run(["ask", '"your question"'])}\` to produce cited retrieval context.`); - steps.push(`Run \`${input.run(["research", '"your topic"'])}\` for audit-backed multi-query evidence.`); - if (input.agentKitInstalled) { - steps.push("Run `ragmir install-agent --agents claude` or another targeted agent list for native skill discovery."); - steps.push("Wire the matching MCP helper from .ragmir/ when the agent should call Ragmir tools directly."); - } - else { - steps.push(`Run \`${input.run(["install-skill"])}\` if an AI agent should use the local knowledge base.`); - } - } - return steps; -} -function isAgentKitInstalled(projectRoot) { - const ragmirDir = path.join(projectRoot, RAGMIR_DIR); - const requiredPaths = [ - ...SKILL_NAMES.map((skillName) => path.join(ragmirDir, "skills", skillName, "SKILL.md")), - path.join(ragmirDir, MCP_CONFIG_FILENAME), - path.join(ragmirDir, AGENT_SETUP_FILENAME), - ]; - const agentHelpers = Object.values(AGENT_HELPER_CONFIG_FILENAMES).map((filename) => path.join(ragmirDir, filename)); - return (requiredPaths.every((requiredPath) => existsSync(requiredPath)) && - agentHelpers.some((helperPath) => existsSync(helperPath))); -} -//# sourceMappingURL=doctor.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/doctor.js.map b/packages/ragmir-core/dist/doctor.js.map deleted file mode 100644 index b4b3700..0000000 --- a/packages/ragmir-core/dist/doctor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/embeddings.d.ts b/packages/ragmir-core/dist/embeddings.d.ts deleted file mode 100644 index 1c17878..0000000 --- a/packages/ragmir-core/dist/embeddings.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { Config } from "./types.js"; -export interface PullEmbeddingModelResult { - embeddingModel: string; - embeddingModelPath: string; -} -export declare function embedTexts(texts: string[], config: Config): Promise; -export declare function pullEmbeddingModel(config: Config): Promise; -export declare function embedText(text: string, config: Config): Promise; -//# sourceMappingURL=embeddings.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/embeddings.d.ts.map b/packages/ragmir-core/dist/embeddings.d.ts.map deleted file mode 100644 index fbe0177..0000000 --- a/packages/ragmir-core/dist/embeddings.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../src/embeddings.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAYxC,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,MAAM,CAAA;IACtB,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAUrF;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAe1F;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAM/E"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/embeddings.js b/packages/ragmir-core/dist/embeddings.js deleted file mode 100644 index 5ca54e2..0000000 --- a/packages/ragmir-core/dist/embeddings.js +++ /dev/null @@ -1,110 +0,0 @@ -import { createHash } from "node:crypto"; -import { mkdir } from "node:fs/promises"; -import { tokenize } from "./text.js"; -const LOCAL_HASH_DIMENSIONS = 384; -const LONG_TOKEN_MIN_LENGTH = 6; -const LONG_TOKEN_WEIGHT = 1.4; -const transformersPipelines = new Map(); -export async function embedTexts(texts, config) { - if (texts.length === 0) { - return []; - } - if (config.embeddingProvider === "local-hash") { - return texts.map(localHashEmbedding); - } - return embedWithTransformers(texts, config); -} -export async function pullEmbeddingModel(config) { - await mkdir(config.embeddingModelPath, { recursive: true }); - const extractor = await transformersExtractor({ - ...config, - embeddingProvider: "transformers", - transformersAllowRemoteModels: true, - }); - await extractor(["Ragmir semantic embedding model bootstrap."], { - pooling: "mean", - normalize: true, - }); - return { - embeddingModel: config.embeddingModel, - embeddingModelPath: config.embeddingModelPath, - }; -} -export async function embedText(text, config) { - const [embedding] = await embedTexts([text], config); - if (!embedding) { - throw new Error("No embedding returned for query."); - } - return embedding; -} -async function embedWithTransformers(texts, config) { - const extractor = await transformersExtractor(config); - const output = await extractor(texts, { pooling: "mean", normalize: true }); - const rows = tensorToEmbeddingRows(output); - if (rows.length !== texts.length) { - throw new Error(`Expected ${texts.length} embeddings, received ${rows.length}.`); - } - return rows; -} -async function transformersExtractor(config) { - const key = [ - config.embeddingModel, - config.embeddingModelPath, - String(config.transformersAllowRemoteModels), - ].join("\n"); - const cached = transformersPipelines.get(key); - if (cached) { - return cached; - } - const transformers = await import("@huggingface/transformers"); - transformers.env.localModelPath = config.embeddingModelPath; - transformers.env.cacheDir = config.embeddingModelPath; - transformers.env.allowRemoteModels = config.transformersAllowRemoteModels; - const extractor = (await transformers.pipeline("feature-extraction", config.embeddingModel)); - transformersPipelines.set(key, extractor); - return extractor; -} -function localHashEmbedding(text) { - const vector = Array.from({ length: LOCAL_HASH_DIMENSIONS }, () => 0); - const tokens = tokenize(text); - for (const token of tokens) { - const hash = createHash("sha256").update(token).digest(); - const index = hash.readUInt32BE(0) % LOCAL_HASH_DIMENSIONS; - const sign = (hash.at(4) ?? 0) % 2 === 0 ? 1 : -1; - vector[index] = (vector[index] ?? 0) + sign * tokenWeight(token); - } - const magnitude = Math.sqrt(vector.reduce((sum, value) => sum + value * value, 0)); - if (magnitude === 0) { - return vector; - } - return vector.map((value) => value / magnitude); -} -function tokenWeight(token) { - return token.length >= LONG_TOKEN_MIN_LENGTH ? LONG_TOKEN_WEIGHT : 1; -} -function tensorToEmbeddingRows(output) { - if (!hasToList(output)) { - throw new Error("Transformers embedding output does not expose tolist()."); - } - const value = output.tolist(); - if (isNumberMatrix(value)) { - return value; - } - if (isNumberArray(value)) { - return [value]; - } - throw new Error("Transformers embedding output is not a numeric vector matrix."); -} -function hasToList(value) { - return (typeof value === "object" && - value !== null && - "tolist" in value && - typeof value.tolist === "function"); -} -function isNumberArray(value) { - return Array.isArray(value) && value.every((item) => typeof item === "number"); -} -function isNumberMatrix(value) { - return Array.isArray(value) && value.every(isNumberArray); -} -//# sourceMappingURL=embeddings.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/embeddings.js.map b/packages/ragmir-core/dist/embeddings.js.map deleted file mode 100644 index d42bdfa..0000000 --- a/packages/ragmir-core/dist/embeddings.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../src/embeddings.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/evaluate.d.ts b/packages/ragmir-core/dist/evaluate.d.ts deleted file mode 100644 index 920876b..0000000 --- a/packages/ragmir-core/dist/evaluate.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { EvaluationOptions, EvaluationResult } from "./types.js"; -export declare function evaluateGoldenQueries(options: EvaluationOptions): Promise; -//# sourceMappingURL=evaluate.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/evaluate.d.ts.map b/packages/ragmir-core/dist/evaluate.d.ts.map deleted file mode 100644 index 423ceac..0000000 --- a/packages/ragmir-core/dist/evaluate.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../src/evaluate.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,iBAAiB,EACjB,gBAAgB,EAEjB,MAAM,YAAY,CAAA;AAqBnB,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkDjG"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/evaluate.js b/packages/ragmir-core/dist/evaluate.js deleted file mode 100644 index 2341f9d..0000000 --- a/packages/ragmir-core/dist/evaluate.js +++ /dev/null @@ -1,97 +0,0 @@ -import { readFile } from "node:fs/promises"; -import path from "node:path"; -import { z } from "zod"; -import { recordAccess } from "./access-log.js"; -import { loadConfig } from "./config.js"; -import { search } from "./query.js"; -const goldenQuerySchema = z - .object({ - id: z.string().min(1).optional(), - query: z.string().min(1), - expectedPaths: z.array(z.string().min(1)).min(1), - topK: z.number().int().positive().optional(), -}) - .strict(); -const goldenFileSchema = z.union([ - z.array(goldenQuerySchema).min(1), - z - .object({ - topK: z.number().int().positive().optional(), - queries: z.array(goldenQuerySchema).min(1), - }) - .strict(), -]); -export async function evaluateGoldenQueries(options) { - const cwd = path.resolve(String(options.cwd ?? process.cwd())); - const config = await loadConfig(cwd); - const goldenPath = path.resolve(cwd, String(options.goldenPath)); - const goldenFile = await readGoldenFile(goldenPath); - const defaultTopK = boundedTopK(options.topK ?? goldenFile.topK ?? 3, options.maxTopK); - const cases = []; - for (const goldenQuery of goldenFile.queries) { - const topK = boundedTopK(goldenQuery.topK ?? defaultTopK, options.maxTopK); - const results = await search(goldenQuery.query, { cwd, topK }); - const returnedPaths = results.map((result) => result.relativePath); - const matchedPaths = returnedPaths.filter((resultPath) => goldenQuery.expectedPaths.includes(resultPath)); - const bestRank = returnedPaths.findIndex((resultPath) => goldenQuery.expectedPaths.includes(resultPath)) + 1; - const result = { - query: goldenQuery.query, - expectedPaths: goldenQuery.expectedPaths, - topK, - returnedPaths, - matchedPaths, - hit: matchedPaths.length > 0, - bestRank: bestRank > 0 ? bestRank : null, - }; - if (goldenQuery.id !== undefined) { - result.id = goldenQuery.id; - } - cases.push(result); - } - const hits = cases.filter((result) => result.hit).length; - await recordAccess(config, { - action: "evaluate", - topK: defaultTopK, - resultCount: cases.length, - }); - return { - goldenPath, - embeddingProvider: config.embeddingProvider, - embeddingModel: config.embeddingModel, - topK: defaultTopK, - total: cases.length, - hits, - misses: cases.length - hits, - recall: hits / cases.length, - cases, - }; -} -async function readGoldenFile(goldenPath) { - const raw = await readFile(goldenPath, "utf8"); - const parsed = goldenFileSchema.parse(JSON.parse(raw)); - if (Array.isArray(parsed)) { - return { queries: parsed.map(normalizeGoldenQuery) }; - } - const result = { queries: parsed.queries.map(normalizeGoldenQuery) }; - if (parsed.topK !== undefined) { - return { ...result, topK: parsed.topK }; - } - return result; -} -function normalizeGoldenQuery(value) { - const result = { - query: value.query, - expectedPaths: value.expectedPaths, - }; - if (value.id !== undefined) { - result.id = value.id; - } - if (value.topK !== undefined) { - result.topK = value.topK; - } - return result; -} -function boundedTopK(topK, maxTopK) { - return maxTopK === undefined ? topK : Math.min(topK, maxTopK); -} -//# sourceMappingURL=evaluate.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/evaluate.js.map b/packages/ragmir-core/dist/evaluate.js.map deleted file mode 100644 index 676de16..0000000 --- a/packages/ragmir-core/dist/evaluate.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../src/evaluate.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/files.d.ts b/packages/ragmir-core/dist/files.d.ts deleted file mode 100644 index 9d4ee5e..0000000 --- a/packages/ragmir-core/dist/files.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { Config, SkippedSourceFile, SkippedSourceReason, SourceFile, SourceInventory } from "./types.js"; -export declare const OCR_IMAGE_EXTENSIONS: Set; -export declare const DEFAULT_FAST_GLOB_IGNORES: string[]; -export declare const DEFAULT_SUPPORTED_EXTENSIONS: Set; -export declare function listSourceFiles(config: Config): Promise; -export declare function inventorySourceFiles(config: Config): Promise; -export declare function supportedExtensions(config: Config): Set; -export declare function summarizeUnsupportedExtensions(skippedFiles: SkippedSourceFile[]): Array<{ - extension: string; - count: number; -}>; -export declare function isSensitiveFilePath(absolutePath: string): boolean; -export declare function countSkippedByReason(files: Array<{ - reason: SkippedSourceReason; -}>, reason: SkippedSourceReason): number; -//# sourceMappingURL=files.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/files.d.ts.map b/packages/ragmir-core/dist/files.d.ts.map deleted file mode 100644 index 2f5b4ec..0000000 --- a/packages/ragmir-core/dist/files.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,MAAM,EACN,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,eAAe,EAChB,MAAM,YAAY,CAAA;AAoCnB,eAAO,MAAM,oBAAoB,aAY/B,CAAA;AA4BF,eAAO,MAAM,yBAAyB,UAKrC,CAAA;AAcD,eAAO,MAAM,4BAA4B,aA8EvC,CAAA;AAEF,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAE3E;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA8HnF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAO/D;AASD,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,iBAAiB,EAAE,GAChC,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAW7C;AA8CD,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAQjE;AAMD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC,EAC7C,MAAM,EAAE,mBAAmB,GAC1B,MAAM,CAER"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/files.js b/packages/ragmir-core/dist/files.js deleted file mode 100644 index e2c0ce1..0000000 --- a/packages/ragmir-core/dist/files.js +++ /dev/null @@ -1,388 +0,0 @@ -import { createHash } from "node:crypto"; -import { existsSync } from "node:fs"; -import { readFile, stat } from "node:fs/promises"; -import path from "node:path"; -import fg from "fast-glob"; -import { DEFAULT_CONFIG, LEGACY_KB_DIR, LEGACY_PRIVATE_DIR, RAGMIR_DIR } from "./defaults.js"; -const GENERATED_SOURCE_READMES = new Set([ - `${DEFAULT_CONFIG.rawDir}/README.md`, - `${LEGACY_PRIVATE_DIR}/README.md`, -]); -const NO_EXTENSION = "(none)"; -const SENSITIVE_FILE_NAMES = new Set([ - ".htpasswd", - ".netrc", - ".npmrc", - ".pgpass", - ".pypirc", - "credentials", - "id_dsa", - "id_ecdsa", - "id_ed25519", - "id_rsa", -]); -const SENSITIVE_EXTENSIONS = new Set([ - ".asc", - ".cer", - ".crt", - ".der", - ".gpg", - ".jks", - ".kdbx", - ".key", - ".keystore", - ".ovpn", - ".p12", - ".p8", - ".pem", - ".pfx", - ".ppk", -]); -export const OCR_IMAGE_EXTENSIONS = new Set([ - ".avif", - ".bmp", - ".gif", - ".heic", - ".heif", - ".jpeg", - ".jpg", - ".png", - ".tif", - ".tiff", - ".webp", -]); -const LEGACY_WORD_EXTENSIONS = new Set([".doc"]); -const LEGACY_EXCEL_EXTENSIONS = new Set([".xls"]); -const TRANSCRIPTION_EXTENSIONS = new Set([ - ".aac", - ".aiff", - ".flac", - ".m4a", - ".mkv", - ".mov", - ".mp3", - ".mp4", - ".ogg", - ".wav", - ".webm", -]); -const DEFAULT_SUPPORTED_FILE_NAMES = new Set([ - ".dockerignore", - ".gitignore", - ".npmignore", - "dockerfile", - "gemfile", - "gradlew", - "makefile", - "mvnw", - "procfile", - "rakefile", -]); -export const DEFAULT_FAST_GLOB_IGNORES = [ - "**/.git/**", - "**/node_modules/**", - `**/${LEGACY_KB_DIR}/**`, - `**/${RAGMIR_DIR}/**`, -]; -const GLOB_PATTERN_CHARS = /[*?[{]/u; -export const DEFAULT_SUPPORTED_EXTENSIONS = new Set([ - ".atom", - ".adoc", - ".astro", - ".bash", - ".bat", - ".c", - ".cjs", - ".cfg", - ".cmd", - ".conf", - ".cpp", - ".cs", - ".css", - ".csv", - ".cts", - ".diff", - ".docx", - ".eml", - ".epub", - ".example", - ".exemple", - ".go", - ".h", - ".hpp", - ".htm", - ".html", - ".ics", - ".ini", - ".java", - ".js", - ".json", - ".jsonl", - ".jsx", - ".ipynb", - ".log", - ".markdown", - ".md", - ".mdown", - ".mdx", - ".mmd", - ".mjs", - ".mts", - ".ndjson", - ".odp", - ".ods", - ".odt", - ".patch", - ".pdf", - ".php", - ".pptx", - ".properties", - ".ps1", - ".py", - ".rb", - ".rst", - ".rs", - ".rss", - ".rtf", - ".scss", - ".srt", - ".svelte", - ".svg", - ".sh", - ".sql", - ".tex", - ".text", - ".toml", - ".ts", - ".tsv", - ".tsx", - ".txt", - ".vtt", - ".vue", - ".xml", - ".xlsx", - ".yaml", - ".yml", -]); -export async function listSourceFiles(config) { - return (await inventorySourceFiles(config)).supportedFiles; -} -export async function inventorySourceFiles(config) { - const inputs = await sourceInputs(config); - const files = new Map(); - const skippedFiles = new Map(); - let discoveredFiles = 0; - const recordSourceFile = async (absolutePath, info, source) => { - const relativePath = path.relative(config.projectRoot, absolutePath); - if (GENERATED_SOURCE_READMES.has(relativePath)) { - return; - } - discoveredFiles += 1; - const extension = path.extname(absolutePath).toLowerCase(); - const skipped = skippedSourceFile(absolutePath, relativePath, source, extension, info.size); - if (skipped) { - skippedFiles.set(absolutePath, skipped); - return; - } - if (!isSupportedSourceFile(absolutePath, extension, config)) { - const normalizedExtension = extension || NO_EXTENSION; - skippedFiles.set(absolutePath, { - relativePath, - source, - extension: normalizedExtension, - bytes: info.size, - reason: "unsupported-extension", - recommendation: skippedRecommendation("unsupported-extension", normalizedExtension), - }); - return; - } - if (info.size > config.maxFileBytes) { - const normalizedExtension = extension || NO_EXTENSION; - skippedFiles.set(absolutePath, { - relativePath, - source, - extension: normalizedExtension, - bytes: info.size, - reason: "oversized", - recommendation: skippedRecommendation("oversized", normalizedExtension), - }); - return; - } - const buffer = await readFile(absolutePath); - files.set(absolutePath, { - absolutePath, - relativePath, - source, - extension, - bytes: info.size, - mtimeMs: info.mtimeMs, - checksum: createHash("sha256").update(buffer).digest("hex"), - }); - }; - for (const root of inputs.roots) { - if (!existsSync(root)) { - continue; - } - const rootInfo = await stat(root); - const entries = rootInfo.isDirectory() - ? (await fg("**/*", { - cwd: root, - absolute: true, - onlyFiles: true, - dot: true, - followSymbolicLinks: false, - ignore: DEFAULT_FAST_GLOB_IGNORES, - objectMode: true, - stats: true, - unique: true, - })) - : [{ path: root, stats: { size: rootInfo.size, mtimeMs: rootInfo.mtimeMs } }]; - for (const entry of entries) { - const absolutePath = path.isAbsolute(entry.path) ? entry.path : path.resolve(root, entry.path); - const info = entry.stats ?? (await stat(absolutePath)); - const relativePath = path.relative(config.projectRoot, absolutePath); - const source = rootInfo.isDirectory() - ? path.relative(root, absolutePath) || path.basename(absolutePath) - : relativePath || path.basename(absolutePath); - await recordSourceFile(absolutePath, info, source); - } - } - if (inputs.patterns.length > 0) { - const entries = (await fg(inputs.patterns, { - cwd: config.projectRoot, - absolute: true, - onlyFiles: true, - dot: true, - followSymbolicLinks: false, - ignore: [...DEFAULT_FAST_GLOB_IGNORES, ...inputs.ignorePatterns], - objectMode: true, - stats: true, - unique: true, - })); - for (const entry of entries) { - const absolutePath = path.isAbsolute(entry.path) - ? entry.path - : path.resolve(config.projectRoot, entry.path); - const info = entry.stats ?? (await stat(absolutePath)); - const relativePath = path.relative(config.projectRoot, absolutePath); - await recordSourceFile(absolutePath, info, relativePath || path.basename(absolutePath)); - } - } - return { - discoveredFiles, - supportedFiles: [...files.values()].sort((a, b) => a.relativePath.localeCompare(b.relativePath)), - skippedFiles: [...skippedFiles.values()].sort((a, b) => a.relativePath.localeCompare(b.relativePath)), - }; -} -export function supportedExtensions(config) { - return new Set([ - ...DEFAULT_SUPPORTED_EXTENSIONS, - ...(config.imageOcrCommand.length > 0 ? OCR_IMAGE_EXTENSIONS : []), - ...(config.legacyWordCommand.length > 0 ? LEGACY_WORD_EXTENSIONS : []), - ...config.includeExtensions, - ]); -} -function isSupportedSourceFile(absolutePath, extension, config) { - if (supportedExtensions(config).has(extension)) { - return true; - } - return DEFAULT_SUPPORTED_FILE_NAMES.has(path.basename(absolutePath).toLowerCase()); -} -export function summarizeUnsupportedExtensions(skippedFiles) { - const counts = new Map(); - for (const file of skippedFiles) { - if (file.reason !== "unsupported-extension") { - continue; - } - counts.set(file.extension, (counts.get(file.extension) ?? 0) + 1); - } - return [...counts.entries()] - .sort(([a], [b]) => a.localeCompare(b)) - .map(([extension, count]) => ({ extension, count })); -} -async function sourceInputs(config) { - const roots = [config.rawDir]; - const patterns = []; - const ignorePatterns = []; - const classifyEntry = (entry) => { - const trimmed = entry.trim(); - if (!trimmed || trimmed.startsWith("#")) { - return; - } - if (trimmed.startsWith("!")) { - ignorePatterns.push(sourcePattern(config.projectRoot, trimmed.slice(1).trim())); - return; - } - if (GLOB_PATTERN_CHARS.test(trimmed)) { - patterns.push(sourcePattern(config.projectRoot, trimmed)); - return; - } - roots.push(path.isAbsolute(trimmed) ? trimmed : path.resolve(config.projectRoot, trimmed)); - }; - // Inline `sources` from config.json are the primary mechanism; the legacy - // sources.txt file is still read when present so existing projects keep working. - for (const entry of config.sources) { - classifyEntry(entry); - } - if (existsSync(config.sourcesFile)) { - const content = await readFile(config.sourcesFile, "utf8"); - for (const line of content.split(/\r?\n/u)) { - classifyEntry(line); - } - } - return { roots, patterns, ignorePatterns }; -} -function sourcePattern(projectRoot, input) { - if (path.isAbsolute(input)) { - return path.relative(projectRoot, input).replaceAll(path.sep, "/"); - } - return input.replaceAll(path.sep, "/"); -} -export function isSensitiveFilePath(absolutePath) { - const baseName = path.basename(absolutePath).toLowerCase(); - const extension = path.extname(absolutePath).toLowerCase(); - return (isEnvFileName(baseName) || - SENSITIVE_FILE_NAMES.has(baseName) || - SENSITIVE_EXTENSIONS.has(extension)); -} -function isEnvFileName(baseName) { - return baseName === ".env" || baseName.startsWith(".env."); -} -export function countSkippedByReason(files, reason) { - return files.filter((file) => file.reason === reason).length; -} -function skippedSourceFile(absolutePath, relativePath, source, extension, bytes) { - if (!isSensitiveFilePath(absolutePath)) { - return null; - } - return { - relativePath, - source, - extension: extension || NO_EXTENSION, - bytes, - reason: "sensitive-name", - recommendation: skippedRecommendation("sensitive-name", extension || NO_EXTENSION), - }; -} -function skippedRecommendation(reason, extension) { - if (reason === "sensitive-name") { - return "Review manually; secret-like files are skipped to avoid indexing credentials or private keys."; - } - if (reason === "oversized") { - return "Split, compress, or raise maxFileBytes only after confirming the file is safe and useful."; - } - if (OCR_IMAGE_EXTENSIONS.has(extension)) { - return "Configure imageOcrCommand for local image OCR, save extracted text as a supported text file, or convert to an OCRed PDF before ingesting."; - } - if (LEGACY_WORD_EXTENSIONS.has(extension)) { - return "Configure legacyWordCommand for local legacy Word extraction, or convert to DOCX, PDF, HTML, or text before ingesting."; - } - if (LEGACY_EXCEL_EXTENSIONS.has(extension)) { - return "Convert legacy XLS workbooks to XLSX, CSV, PDF, HTML, or text before ingesting."; - } - if (TRANSCRIPTION_EXTENSIONS.has(extension)) { - return "Transcribe to text, VTT, or SRT before ingesting."; - } - return "Convert to a supported text, PDF, Office, OpenDocument, EPUB, or HTML format; use includeExtensions only for UTF-8 text files."; -} -//# sourceMappingURL=files.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/files.js.map b/packages/ragmir-core/dist/files.js.map deleted file mode 100644 index b4ba3d6..0000000 --- a/packages/ragmir-core/dist/files.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/gitignore.d.ts b/packages/ragmir-core/dist/gitignore.d.ts deleted file mode 100644 index 207a74c..0000000 --- a/packages/ragmir-core/dist/gitignore.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export declare const RAGMIR_GITIGNORE_ENTRIES: string[]; -export declare function ensureRagmirGitignore(cwd?: string): Promise; -//# sourceMappingURL=gitignore.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/gitignore.d.ts.map b/packages/ragmir-core/dist/gitignore.d.ts.map deleted file mode 100644 index a6efdf9..0000000 --- a/packages/ragmir-core/dist/gitignore.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../src/gitignore.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,wBAAwB,UAA2B,CAAA;AAEhE,wBAAsB,qBAAqB,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBjF"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/gitignore.js b/packages/ragmir-core/dist/gitignore.js deleted file mode 100644 index 16d5f78..0000000 --- a/packages/ragmir-core/dist/gitignore.js +++ /dev/null @@ -1,27 +0,0 @@ -import { existsSync } from "node:fs"; -import { readFile, writeFile } from "node:fs/promises"; -import path from "node:path"; -import { RAGMIR_GITIGNORE_ENTRY } from "./defaults.js"; -export const RAGMIR_GITIGNORE_ENTRIES = [RAGMIR_GITIGNORE_ENTRY]; -export async function ensureRagmirGitignore(cwd = process.cwd()) { - const root = path.resolve(cwd); - const gitignorePath = path.join(root, ".gitignore"); - const current = existsSync(gitignorePath) ? await readFile(gitignorePath, "utf8") : ""; - const currentLines = new Set(current - .split(/\r?\n/) - .map((line) => line.trim()) - .filter(Boolean)); - const missingEntries = RAGMIR_GITIGNORE_ENTRIES.filter((entry) => !currentLines.has(entry)); - if (missingEntries.length === 0) { - return false; - } - const hasRagmirHeader = currentLines.has("# Ragmir") || currentLines.has("# JCode Ragmir"); - const block = [hasRagmirHeader ? undefined : "# Ragmir", ...missingEntries] - .filter((line) => line !== undefined) - .join("\n"); - const prefix = current.trimEnd(); - const next = `${prefix ? `${prefix}\n\n` : ""}${block}\n`; - await writeFile(gitignorePath, next, "utf8"); - return true; -} -//# sourceMappingURL=gitignore.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/gitignore.js.map b/packages/ragmir-core/dist/gitignore.js.map deleted file mode 100644 index a9c94f7..0000000 --- a/packages/ragmir-core/dist/gitignore.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../src/gitignore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAEtD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,sBAAsB,CAAC,CAAA;AAEhE,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;IACnD,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACtF,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,OAAO;SACJ,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CACnB,CAAA;IACD,MAAM,cAAc,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;IAE3F,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,eAAe,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1F,MAAM,KAAK,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,cAAc,CAAC;SACxE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC;SACpC,IAAI,CAAC,IAAI,CAAC,CAAA;IACb,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;IAChC,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;IAEzD,MAAM,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IAC5C,OAAO,IAAI,CAAA;AACb,CAAC"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/guards.d.ts b/packages/ragmir-core/dist/guards.d.ts deleted file mode 100644 index 292e2b7..0000000 --- a/packages/ragmir-core/dist/guards.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare function isRecord(value: unknown): value is Record; -//# sourceMappingURL=guards.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/guards.d.ts.map b/packages/ragmir-core/dist/guards.d.ts.map deleted file mode 100644 index f989bc1..0000000 --- a/packages/ragmir-core/dist/guards.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/guards.js b/packages/ragmir-core/dist/guards.js deleted file mode 100644 index 9be99a5..0000000 --- a/packages/ragmir-core/dist/guards.js +++ /dev/null @@ -1,4 +0,0 @@ -export function isRecord(value) { - return typeof value === "object" && value !== null && !Array.isArray(value); -} -//# sourceMappingURL=guards.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/guards.js.map b/packages/ragmir-core/dist/guards.js.map deleted file mode 100644 index 88fb045..0000000 --- a/packages/ragmir-core/dist/guards.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"guards.js","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/index.d.ts b/packages/ragmir-core/dist/index.d.ts deleted file mode 100644 index dbc4295..0000000 --- a/packages/ragmir-core/dist/index.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -export { accessLogUsageReport } from "./access-log.js"; -export { loadConfig } from "./config.js"; -export { destroyIndex } from "./destroy.js"; -export { doctor } from "./doctor.js"; -export { pullEmbeddingModel } from "./embeddings.js"; -export { evaluateGoldenQueries } from "./evaluate.js"; -export { audit, ingest } from "./ingest.js"; -export { initProject } from "./init.js"; -export { serveMcp } from "./mcp.js"; -export type { PackageManager, RagmirCommand } from "./package-manager.js"; -export { detectPackageManager, kbCommand, ragmirCommand } from "./package-manager.js"; -export { ask, search } from "./query.js"; -export { redactText } from "./redaction.js"; -export { compactResearchReport, compactSearchResults, research } from "./research.js"; -export { securityAudit } from "./security.js"; -export { enableSemanticEmbeddings } from "./semantic-config.js"; -export type { SetupOptions, SetupResult, SetupSemanticResult } from "./setup.js"; -export { setupProject } from "./setup.js"; -export type { AgentHelperFile, AgentInstallMode, AgentInstallScope, AgentSkillInstallation, AgentTarget, InstallAgentSkillsOptions, InstallAgentSkillsResult, InstallSkillOptions, InstallSkillResult, } from "./skill.js"; -export { bundledSkillPath, installAgentSkills, installSkill, parseAgentTargets, SUPPORTED_AGENT_TARGETS, } from "./skill.js"; -export type { AddSourceEntriesOptions, AddSourceEntriesResult, SourceEntriesResult, } from "./sources.js"; -export { addSourceEntries, listSourceEntries } from "./sources.js"; -export type { AccessLogAction, AccessLogUsageOptions, AccessLogUsageReport, AskResult, AuditReport, CodeEvidence, CompactSearchResult, Config, DestroyIndexResult, DoctorReport, EvaluationCaseResult, EvaluationOptions, EvaluationResult, GoldenQuery, IngestResult, ResearchEvidence, ResearchOptions, ResearchReport, SearchResult, SecurityAuditReport, SourceDiagnostics, SourceDuplicateCandidate, SourcePathCandidate, } from "./types.js"; -export { VERSION } from "./version.js"; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/index.d.ts.map b/packages/ragmir-core/dist/index.d.ts.map deleted file mode 100644 index 0d22167..0000000 --- a/packages/ragmir-core/dist/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzE,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACrF,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,WAAW,EACX,yBAAyB,EACzB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAClE,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,SAAS,EACT,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,MAAM,EACN,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/index.js b/packages/ragmir-core/dist/index.js deleted file mode 100644 index 911536b..0000000 --- a/packages/ragmir-core/dist/index.js +++ /dev/null @@ -1,20 +0,0 @@ -export { accessLogUsageReport } from "./access-log.js"; -export { loadConfig } from "./config.js"; -export { destroyIndex } from "./destroy.js"; -export { doctor } from "./doctor.js"; -export { pullEmbeddingModel } from "./embeddings.js"; -export { evaluateGoldenQueries } from "./evaluate.js"; -export { audit, ingest } from "./ingest.js"; -export { initProject } from "./init.js"; -export { serveMcp } from "./mcp.js"; -export { detectPackageManager, kbCommand, ragmirCommand } from "./package-manager.js"; -export { ask, search } from "./query.js"; -export { redactText } from "./redaction.js"; -export { compactResearchReport, compactSearchResults, research } from "./research.js"; -export { securityAudit } from "./security.js"; -export { enableSemanticEmbeddings } from "./semantic-config.js"; -export { setupProject } from "./setup.js"; -export { bundledSkillPath, installAgentSkills, installSkill, parseAgentTargets, SUPPORTED_AGENT_TARGETS, } from "./skill.js"; -export { addSourceEntries, listSourceEntries } from "./sources.js"; -export { VERSION } from "./version.js"; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/index.js.map b/packages/ragmir-core/dist/index.js.map deleted file mode 100644 index f785664..0000000 --- a/packages/ragmir-core/dist/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACrF,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAYzC,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,YAAY,CAAA;AAMnB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AA0BlE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/ingest.d.ts b/packages/ragmir-core/dist/ingest.d.ts deleted file mode 100644 index 42ae7bb..0000000 --- a/packages/ragmir-core/dist/ingest.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { AuditReport, IngestOptions, IngestResult } from "./types.js"; -export declare function ingest(options?: IngestOptions): Promise; -export declare function audit(cwd?: string): Promise; -//# sourceMappingURL=ingest.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/ingest.d.ts.map b/packages/ragmir-core/dist/ingest.d.ts.map deleted file mode 100644 index 5db752a..0000000 --- a/packages/ragmir-core/dist/ingest.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../src/ingest.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,YAAY,EAMb,MAAM,YAAY,CAAA;AAmBnB,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAuG/E;AAkCD,wBAAsB,KAAK,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAiErE"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/ingest.js b/packages/ragmir-core/dist/ingest.js deleted file mode 100644 index c8b24d2..0000000 --- a/packages/ragmir-core/dist/ingest.js +++ /dev/null @@ -1,268 +0,0 @@ -import path from "node:path"; -import { recordAccess } from "./access-log.js"; -import { chunkDocument } from "./chunking.js"; -import { loadConfig } from "./config.js"; -import { embedTexts } from "./embeddings.js"; -import { countSkippedByReason, inventorySourceFiles, summarizeUnsupportedExtensions, } from "./files.js"; -import { parseFile } from "./parsing.js"; -import { redactText, totalRedactions } from "./redaction.js"; -import { openRowsTable, readEmptyTextFiles, readRows, writeEmptyTextFiles, writeRows, } from "./store.js"; -import { normalizeForMatch } from "./text.js"; -const MAX_AUDIT_ROWS = 100_000; -const MAX_SOURCE_DIAGNOSTIC_ITEMS = 20; -const ARCHIVE_PATH_PATTERNS = [ - /(^|[/_-])archive(s)?([/_-]|$)/iu, - /(^|[/_-])backup(s)?([/_-]|$)/iu, - /(^|[/_-])legacy([/_-]|$)/iu, - /(^|[/_-])old([/_-]|$)/iu, - /(^|[/_-])obsolete([/_-]|$)/iu, - /(^|[/_-])poc([/_-]|$)/iu, -]; -const MIRROR_PATH_PATTERNS = [ - /(^|[/_-])raw[_-]?files([/_-]|$)/iu, - /(^|[/_-])google[_-]?drive([/_-]|$)/iu, - /(^|[/_-])drive[_-]?mirror([/_-]|$)/iu, - /(^|[/_-])export(s)?([/_-]|$)/iu, -]; -export async function ingest(options = {}) { - const config = await loadConfig(String(options.cwd ?? process.cwd())); - const inventory = await inventorySourceFiles(config); - const files = inventory.supportedFiles; - const currentFiles = new Map(files.map((file) => [file.relativePath, file])); - const existingRows = options.rebuild ? [] : await readRows(config); - const reusableRows = options.rebuild ? [] : reusableIndexRows(existingRows, currentFiles, config); - const reusableFiles = new Set(reusableRows.map((row) => row.relativePath)); - const filesToIndex = options.rebuild - ? files - : files.filter((file) => !reusableFiles.has(file.relativePath)); - const allChunks = []; - const errors = []; - const redactionCounts = []; - const emptyTextFiles = []; - const results = await mapLimit(filesToIndex, config.ingestConcurrency, async (file) => { - try { - const parsed = await parseFile(file, config); - const redacted = redactText(parsed.text, config); - const chunks = chunkDocument({ ...parsed, text: redacted.text }, config.chunkSize, config.chunkOverlap); - return { path: file.relativePath, chunks, redactions: redacted.counts, error: null }; - } - catch (error) { - return { - path: file.relativePath, - chunks: [], - redactions: [], - error: { - path: file.relativePath, - message: error instanceof Error ? error.message : String(error), - }, - }; - } - }); - for (const result of results) { - if (result.error) { - errors.push(result.error); - continue; - } - redactionCounts.push(...result.redactions); - if (result.chunks.length === 0) { - emptyTextFiles.push(result.path); - } - allChunks.push(...result.chunks); - } - const rows = []; - for (let i = 0; i < allChunks.length; i += config.embeddingBatchSize) { - const batch = allChunks.slice(i, i + config.embeddingBatchSize); - const embeddings = await embedTexts(batch.map((chunk) => chunk.text), config); - for (const [index, chunk] of batch.entries()) { - const vector = embeddings[index]; - if (!vector) { - throw new Error(`Missing embedding for chunk ${chunk.relativePath}#${chunk.chunkIndex}.`); - } - rows.push({ - ...chunk, - vector, - embeddingProvider: config.embeddingProvider, - embeddingModel: config.embeddingModel, - }); - } - } - const indexRows = [...reusableRows, ...rows]; - await writeRows(indexRows, config); - await writeEmptyTextFiles(emptyTextFiles.flatMap((relativePath) => { - const file = currentFiles.get(relativePath); - return file ? [{ relativePath, checksum: file.checksum }] : []; - }), config); - await recordAccess(config, { - action: "ingest", - resultCount: indexRows.length, - redactions: totalRedactions(redactionCounts), - }); - return { - indexedFiles: new Set(indexRows.map((row) => row.relativePath)).size, - rebuiltFiles: new Set(rows.map((row) => row.relativePath)).size, - reusedFiles: reusableFiles.size, - chunks: indexRows.length, - discoveredFiles: inventory.discoveredFiles, - supportedFiles: files.length, - skippedFiles: inventory.skippedFiles.length + emptyTextFiles.length, - unsupportedFiles: countSkippedByReason(inventory.skippedFiles, "unsupported-extension"), - oversizedFiles: countSkippedByReason(inventory.skippedFiles, "oversized"), - sensitiveFiles: countSkippedByReason(inventory.skippedFiles, "sensitive-name"), - emptyTextFiles, - unsupportedExtensions: summarizeUnsupportedExtensions(inventory.skippedFiles), - redactions: totalRedactions(redactionCounts), - errors, - }; -} -function reusableIndexRows(rows, currentFiles, config) { - const rowsByFile = new Map(); - for (const row of rows) { - const fileRows = rowsByFile.get(row.relativePath) ?? []; - fileRows.push(row); - rowsByFile.set(row.relativePath, fileRows); - } - const reusableRows = []; - for (const [relativePath, fileRows] of rowsByFile) { - const file = currentFiles.get(relativePath); - if (!file) { - continue; - } - if (fileRows.every((row) => row.checksum === file.checksum && - row.embeddingProvider === config.embeddingProvider && - row.embeddingModel === config.embeddingModel)) { - reusableRows.push(...fileRows); - } - } - return reusableRows; -} -export async function audit(cwd = process.cwd()) { - const config = await loadConfig(cwd); - const inventory = await inventorySourceFiles(config); - const files = inventory.supportedFiles; - const supportedFiles = files.map((file) => file.relativePath); - const table = await openRowsTable(config); - const emptyTextFiles = await currentEmptyTextFiles(config, files); - if (!table) { - return { - indexedFiles: [], - supportedFiles, - skippedFiles: inventory.skippedFiles, - emptyTextFiles: [...emptyTextFiles], - unsupportedExtensions: summarizeUnsupportedExtensions(inventory.skippedFiles), - sourceDiagnostics: sourceDiagnostics(files, inventory.skippedFiles), - missingFromIndex: supportedFiles.filter((file) => !emptyTextFiles.has(file)), - staleInIndex: [], - totalChunks: 0, - }; - } - const rows = (await table.query().limit(MAX_AUDIT_ROWS).toArray()); - const counts = new Map(); - const checksums = new Map(); - for (const row of rows) { - counts.set(row.relativePath, (counts.get(row.relativePath) ?? 0) + 1); - if (row.checksum) { - const fileChecksums = checksums.get(row.relativePath) ?? new Set(); - fileChecksums.add(row.checksum); - checksums.set(row.relativePath, fileChecksums); - } - } - const supportedSet = new Set(supportedFiles); - const indexedSet = new Set(counts.keys()); - const currentChecksums = new Map(files.map((file) => [file.relativePath, file.checksum])); - return { - indexedFiles: [...counts.entries()] - .sort(([a], [b]) => a.localeCompare(b)) - .map(([source, chunks]) => ({ source, chunks })), - supportedFiles, - skippedFiles: inventory.skippedFiles, - emptyTextFiles: [...emptyTextFiles].sort(), - unsupportedExtensions: summarizeUnsupportedExtensions(inventory.skippedFiles), - sourceDiagnostics: sourceDiagnostics(files, inventory.skippedFiles), - missingFromIndex: supportedFiles.filter((file) => !indexedSet.has(file) && !emptyTextFiles.has(file)), - staleInIndex: [...indexedSet] - .filter((file) => { - if (!supportedSet.has(file)) { - return true; - } - const currentChecksum = currentChecksums.get(file); - const indexedChecksums = checksums.get(file); - return !currentChecksum || !indexedChecksums?.has(currentChecksum); - }) - .sort(), - totalChunks: rows.length, - }; -} -function sourceDiagnostics(supportedFiles, skippedFiles) { - const relativePaths = [ - ...supportedFiles.map((file) => file.relativePath), - ...skippedFiles.map((file) => file.relativePath), - ]; - return { - duplicateCandidates: duplicateCandidates(supportedFiles), - archiveCandidates: pathCandidates(relativePaths, ARCHIVE_PATH_PATTERNS, "archive-like path"), - mirrorCandidates: pathCandidates(relativePaths, MIRROR_PATH_PATTERNS, "mirror-like path"), - }; -} -function duplicateCandidates(files) { - const byChecksum = new Map(); - const byLogicalName = new Map(); - for (const file of files) { - appendGrouped(byChecksum, `sha256:${file.checksum.slice(0, 12)}`, file.relativePath); - const logicalName = normalizedLogicalName(file.relativePath); - if (logicalName.length >= 6) { - appendGrouped(byLogicalName, `name:${logicalName}`, file.relativePath); - } - } - const exact = groupedDuplicates(byChecksum); - const logical = groupedDuplicates(byLogicalName).filter((candidate) => !exact.some((exactCandidate) => candidate.files.every((file) => exactCandidate.files.includes(file)))); - return [...exact, ...logical] - .sort((a, b) => b.files.length - a.files.length || a.key.localeCompare(b.key)) - .slice(0, MAX_SOURCE_DIAGNOSTIC_ITEMS); -} -function pathCandidates(relativePaths, patterns, reason) { - return relativePaths - .filter((relativePath) => patterns.some((pattern) => pattern.test(relativePath))) - .sort((a, b) => a.localeCompare(b)) - .slice(0, MAX_SOURCE_DIAGNOSTIC_ITEMS) - .map((relativePath) => ({ relativePath, reason })); -} -function appendGrouped(groups, key, relativePath) { - const paths = groups.get(key) ?? []; - paths.push(relativePath); - groups.set(key, paths); -} -function groupedDuplicates(groups) { - return [...groups.entries()] - .filter(([, files]) => files.length > 1) - .map(([key, files]) => ({ key, files: [...new Set(files)].sort() })); -} -function normalizedLogicalName(relativePath) { - return normalizeForMatch(path.basename(relativePath, path.extname(relativePath))).replace(/[^a-z0-9]+/gu, ""); -} -async function currentEmptyTextFiles(config, files) { - const currentChecksums = new Map(files.map((file) => [file.relativePath, file.checksum])); - const emptyTextFiles = new Set(); - for (const record of await readEmptyTextFiles(config)) { - if (currentChecksums.get(record.relativePath) === record.checksum) { - emptyTextFiles.add(record.relativePath); - } - } - return emptyTextFiles; -} -async function mapLimit(items, concurrency, worker) { - const results = new Array(items.length); - let nextIndex = 0; - async function run() { - while (nextIndex < items.length) { - const index = nextIndex; - nextIndex += 1; - const item = items[index]; - if (item !== undefined) { - results[index] = await worker(item); - } - } - } - await Promise.all(Array.from({ length: Math.min(concurrency, items.length) }, () => run())); - return results; -} -//# sourceMappingURL=ingest.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/ingest.js.map b/packages/ragmir-core/dist/ingest.js.map deleted file mode 100644 index 7db23fc..0000000 --- a/packages/ragmir-core/dist/ingest.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../src/ingest.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/init.d.ts b/packages/ragmir-core/dist/init.d.ts deleted file mode 100644 index fb0d5f1..0000000 --- a/packages/ragmir-core/dist/init.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare function initProject(cwd?: string): Promise; -//# sourceMappingURL=init.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/init.d.ts.map b/packages/ragmir-core/dist/init.d.ts.map deleted file mode 100644 index 06fdc7a..0000000 --- a/packages/ragmir-core/dist/init.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAMA,wBAAsB,WAAW,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmCxE"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/init.js b/packages/ragmir-core/dist/init.js deleted file mode 100644 index db844ec..0000000 --- a/packages/ragmir-core/dist/init.js +++ /dev/null @@ -1,33 +0,0 @@ -import { existsSync } from "node:fs"; -import { mkdir, writeFile } from "node:fs/promises"; -import path from "node:path"; -import { CONFIG_PATH, DEFAULT_CONFIG, LEGACY_CONFIG_PATH, RAGMIR_DIR } from "./defaults.js"; -import { ensureRagmirGitignore } from "./gitignore.js"; -export async function initProject(cwd = process.cwd()) { - const root = path.resolve(cwd); - const ragmirDir = path.join(root, RAGMIR_DIR); - const rawDir = path.join(root, DEFAULT_CONFIG.rawDir); - const created = []; - await mkdir(ragmirDir, { recursive: true }); - const configPath = path.join(root, CONFIG_PATH); - const legacyConfigPath = path.join(root, LEGACY_CONFIG_PATH); - const hasConfig = existsSync(configPath); - const hasLegacyConfig = existsSync(legacyConfigPath); - if (!hasConfig && !hasLegacyConfig) { - await mkdir(rawDir, { recursive: true }); - await writeFile(configPath, `${JSON.stringify(DEFAULT_CONFIG, null, 2)}\n`, "utf8"); - created.push(path.relative(root, configPath)); - } - if (!hasConfig && !hasLegacyConfig) { - const readmePath = path.join(rawDir, "README.md"); - if (!existsSync(readmePath)) { - await writeFile(readmePath, "# Ragmir raw documents\n\nPut local documents to ingest here. Keep this folder ignored by Git.\n", "utf8"); - created.push(path.relative(root, readmePath)); - } - } - if (await ensureRagmirGitignore(root)) { - created.push(".gitignore"); - } - return created; -} -//# sourceMappingURL=init.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/init.js.map b/packages/ragmir-core/dist/init.js.map deleted file mode 100644 index af6a2e9..0000000 --- a/packages/ragmir-core/dist/init.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;IACrD,MAAM,OAAO,GAAa,EAAE,CAAA;IAE5B,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAE3C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;IAC/C,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAA;IAC5D,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;IACxC,MAAM,eAAe,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAA;IACpD,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACxC,MAAM,SAAS,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACnF,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QACjD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,MAAM,SAAS,CACb,UAAU,EACV,kGAAkG,EAClG,MAAM,CACP,CAAA;YACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IAED,IAAI,MAAM,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC5B,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/mcp.d.ts b/packages/ragmir-core/dist/mcp.d.ts deleted file mode 100644 index 3ff9040..0000000 --- a/packages/ragmir-core/dist/mcp.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export declare function serveMcp(cwd?: string): Promise; -export declare function resolveMcpProjectRoot(env?: NodeJS.ProcessEnv, fallback?: string): string; -export declare function searchOptions(cwd: string, topK: number | undefined): Promise<{ - cwd: string; - topK?: number; -}>; -export declare function projectRelativeGoldenPath(cwd: string, goldenPath: string): string; -//# sourceMappingURL=mcp.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/mcp.d.ts.map b/packages/ragmir-core/dist/mcp.d.ts.map deleted file mode 100644 index 9343376..0000000 --- a/packages/ragmir-core/dist/mcp.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAwCA,wBAAsB,QAAQ,CAAC,GAAG,SAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAgJ3E;AAED,wBAAgB,qBAAqB,CACnC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,QAAQ,SAAgB,GACvB,MAAM,CAYR;AAaD,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAIzC;AAmBD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAQjF"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/mcp.js b/packages/ragmir-core/dist/mcp.js deleted file mode 100644 index 245a7d1..0000000 --- a/packages/ragmir-core/dist/mcp.js +++ /dev/null @@ -1,189 +0,0 @@ -import { existsSync } from "node:fs"; -import path from "node:path"; -import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; -import { z } from "zod"; -import { accessLogUsageReport } from "./access-log.js"; -import { findProjectConfig, loadConfig } from "./config.js"; -import { RAGMIR_PROJECT_ROOT_ENV } from "./defaults.js"; -import { evaluateGoldenQueries } from "./evaluate.js"; -import { audit } from "./ingest.js"; -import { ask, search } from "./query.js"; -import { compactResearchReport, compactSearchResults, research } from "./research.js"; -import { securityAudit } from "./security.js"; -import { countRows } from "./store.js"; -import { VERSION } from "./version.js"; -const queryToolInputSchema = z.object({ - query: z.string().min(1), - topK: z.number().int().positive().optional(), -}); -const searchToolInputSchema = queryToolInputSchema.extend({ - compact: z.boolean().optional(), -}); -const researchToolInputSchema = queryToolInputSchema.extend({ - includeCode: z.boolean().optional(), - compact: z.boolean().optional(), -}); -const evaluateToolInputSchema = z.object({ - goldenPath: z.string().min(1), - topK: z.number().int().positive().optional(), - failUnder: z.number().min(0).max(1).optional(), -}); -const usageReportInputSchema = z.object({ - days: z.number().int().positive().optional(), -}); -export async function serveMcp(cwd = resolveMcpProjectRoot()) { - const server = new McpServer({ - name: "ragmir", - version: VERSION, - }); - server.registerTool("ragmir_status", { - title: "Ragmir Status", - description: "Show active Ragmir configuration and indexed chunk count.", - inputSchema: z.object({}), - }, async () => { - const config = await loadConfig(cwd); - const chunksIndexed = await countRows(config); - const output = { - projectRoot: config.projectRoot, - rawDir: config.rawDir, - storageDir: config.storageDir, - sourcesFile: config.sourcesFile, - embeddingProvider: config.embeddingProvider, - embeddingModel: config.embeddingModel, - embeddingModelPath: config.embeddingModelPath, - transformersAllowRemoteModels: config.transformersAllowRemoteModels, - llmGeneration: false, - redactionEnabled: config.redaction.enabled, - mcpMaxTopK: config.mcpMaxTopK, - maxFileBytes: config.maxFileBytes, - ingestConcurrency: config.ingestConcurrency, - embeddingBatchSize: config.embeddingBatchSize, - includeExtensions: config.includeExtensions, - pdfOcrCommand: config.pdfOcrCommand, - pdfOcrTimeoutMs: config.pdfOcrTimeoutMs, - imageOcrCommand: config.imageOcrCommand, - imageOcrTimeoutMs: config.imageOcrTimeoutMs, - legacyWordCommand: config.legacyWordCommand, - legacyWordTimeoutMs: config.legacyWordTimeoutMs, - chunksIndexed, - }; - return textResult(output); - }); - server.registerTool("ragmir_search", { - title: "Ragmir Search", - description: "Retrieve relevant passages from the local Ragmir knowledge base.", - inputSchema: searchToolInputSchema, - }, async ({ query, topK, compact }) => { - const results = await search(query, await searchOptions(cwd, topK)); - return textResult(compact ? compactSearchResults(results) : results); - }); - server.registerTool("ragmir_ask", { - title: "Ragmir Ask", - description: "Return cited retrieval context for a question without calling an LLM.", - inputSchema: queryToolInputSchema, - }, async ({ query, topK }) => textResult(await ask(query, await searchOptions(cwd, topK)))); - server.registerTool("ragmir_research", { - title: "Ragmir Research", - description: "Run an audit-backed multi-query research pass with cited evidence and optional code matches.", - inputSchema: researchToolInputSchema, - }, async ({ query, topK, includeCode, compact }) => { - const options = await searchOptions(cwd, topK); - const researchOptions = { cwd }; - addOption(researchOptions, "topK", options.topK); - addOption(researchOptions, "includeCode", includeCode); - const result = await research(query, researchOptions); - return textResult(compact ? compactResearchReport(result) : result); - }); - server.registerTool("ragmir_audit", { - title: "Ragmir Audit", - description: "Compare supported source files on disk with the current vector index.", - inputSchema: z.object({}), - }, async () => textResult(await audit(cwd))); - server.registerTool("ragmir_evaluate", { - title: "Ragmir Evaluate", - description: "Measure retrieval recall against a local golden query file.", - inputSchema: evaluateToolInputSchema, - }, async ({ goldenPath, topK, failUnder }) => { - const result = await evaluateGoldenQueries(await evaluationOptions(cwd, goldenPath, topK)); - if (failUnder === undefined) { - return textResult(result); - } - const minimumRecall = failUnder; - return textResult({ - ...result, - minimumRecall, - passed: result.recall >= minimumRecall, - }); - }); - server.registerTool("ragmir_security_audit", { - title: "Ragmir Security Audit", - description: "Show local privacy, provider, redaction, MCP, and gitignore posture.", - inputSchema: z.object({}), - }, async () => textResult(await securityAudit(cwd))); - server.registerTool("ragmir_usage_report", { - title: "Ragmir Usage Report", - description: "Summarize the metadata-only local access log.", - inputSchema: usageReportInputSchema, - }, async ({ days }) => { - const options = { cwd }; - if (days !== undefined) { - options.days = days; - } - return textResult(await accessLogUsageReport(options)); - }); - await server.connect(new StdioServerTransport()); -} -export function resolveMcpProjectRoot(env = process.env, fallback = process.cwd()) { - const explicitRoot = env[RAGMIR_PROJECT_ROOT_ENV]; - if (explicitRoot) { - return explicitRoot; - } - const fallbackConfig = findProjectConfig(fallback); - if (existsSync(fallbackConfig.configPath)) { - return fallbackConfig.projectRoot; - } - return env.CLAUDE_PROJECT_DIR ?? fallback; -} -function textResult(value) { - return { - content: [ - { - type: "text", - text: JSON.stringify(value, null, 2), - }, - ], - }; -} -export async function searchOptions(cwd, topK) { - const config = await loadConfig(cwd); - const boundedTopK = Math.min(topK ?? config.topK, config.mcpMaxTopK); - return { cwd, topK: boundedTopK }; -} -async function evaluationOptions(cwd, goldenPath, topK) { - const config = await loadConfig(cwd); - const result = { - cwd, - goldenPath: projectRelativeGoldenPath(cwd, goldenPath), - maxTopK: config.mcpMaxTopK, - }; - if (topK === undefined) { - return result; - } - return { ...result, topK: Math.min(topK, config.mcpMaxTopK) }; -} -export function projectRelativeGoldenPath(cwd, goldenPath) { - const root = path.resolve(cwd); - const absolutePath = path.resolve(root, goldenPath); - const relativePath = path.relative(root, absolutePath); - if (relativePath.length === 0 || relativePath.startsWith("..") || path.isAbsolute(relativePath)) { - throw new Error("ragmir_evaluate goldenPath must stay inside the MCP project root."); - } - return relativePath; -} -function addOption(target, key, value) { - if (value !== undefined) { - target[key] = value; - } -} -//# sourceMappingURL=mcp.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/mcp.js.map b/packages/ragmir-core/dist/mcp.js.map deleted file mode 100644 index 27dca0b..0000000 --- a/packages/ragmir-core/dist/mcp.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/package-manager.d.ts b/packages/ragmir-core/dist/package-manager.d.ts deleted file mode 100644 index cc5839b..0000000 --- a/packages/ragmir-core/dist/package-manager.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type PackageManager = "pnpm" | "npm" | "yarn" | "bun"; -export interface RagmirCommand { - packageManager: PackageManager; - command: string; - args: string[]; - display: string; -} -export declare function detectPackageManager(cwd?: string): Promise; -export declare function ragmirCommand(cwd: string, args: string[]): Promise; -export declare const kbCommand: typeof ragmirCommand; -//# sourceMappingURL=package-manager.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/package-manager.d.ts.map b/packages/ragmir-core/dist/package-manager.d.ts.map deleted file mode 100644 index c27a6ae..0000000 --- a/packages/ragmir-core/dist/package-manager.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../src/package-manager.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAA;AAG5D,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,cAAc,CAAA;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,wBAAsB,oBAAoB,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAsBvF;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CASvF;AAED,eAAO,MAAM,SAAS,sBAAgB,CAAA"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/package-manager.js b/packages/ragmir-core/dist/package-manager.js deleted file mode 100644 index 24fd8cd..0000000 --- a/packages/ragmir-core/dist/package-manager.js +++ /dev/null @@ -1,93 +0,0 @@ -import { existsSync } from "node:fs"; -import { readFile } from "node:fs/promises"; -import path from "node:path"; -const RAGMIR_CLI_BIN = "ragmir"; -export async function detectPackageManager(cwd = process.cwd()) { - const root = path.resolve(cwd); - const packageManager = await packageJsonManager(root); - if (packageManager) { - return packageManager; - } - if (existsSync(path.join(root, "pnpm-lock.yaml"))) { - return "pnpm"; - } - if (existsSync(path.join(root, "package-lock.json")) || - existsSync(path.join(root, "npm-shrinkwrap.json"))) { - return "npm"; - } - if (existsSync(path.join(root, "yarn.lock"))) { - return "yarn"; - } - if (existsSync(path.join(root, "bun.lock")) || existsSync(path.join(root, "bun.lockb"))) { - return "bun"; - } - return "pnpm"; -} -export async function ragmirCommand(cwd, args) { - const packageManager = await detectPackageManager(cwd); - const commandArgs = commandArgsFor(packageManager, args); - return { - packageManager, - command: commandArgs.command, - args: commandArgs.args, - display: displayCommand(packageManager, args), - }; -} -export const kbCommand = ragmirCommand; -async function packageJsonManager(root) { - const packageJsonPath = path.join(root, "package.json"); - if (!existsSync(packageJsonPath)) { - return null; - } - try { - const packageJson = JSON.parse(await readFile(packageJsonPath, "utf8")); - if (typeof packageJson.packageManager !== "string") { - return null; - } - if (packageJson.packageManager.startsWith("pnpm@")) { - return "pnpm"; - } - if (packageJson.packageManager.startsWith("npm@")) { - return "npm"; - } - if (packageJson.packageManager.startsWith("yarn@")) { - return "yarn"; - } - if (packageJson.packageManager.startsWith("bun@")) { - return "bun"; - } - } - catch { - return null; - } - return null; -} -function commandArgsFor(packageManager, args) { - switch (packageManager) { - case "npm": - return { command: "npx", args: [RAGMIR_CLI_BIN, ...args] }; - case "yarn": - return { command: "yarn", args: ["exec", RAGMIR_CLI_BIN, ...args] }; - case "bun": - return { command: "bunx", args: [RAGMIR_CLI_BIN, ...args] }; - case "pnpm": - return { command: "pnpm", args: ["exec", RAGMIR_CLI_BIN, ...args] }; - } -} -function displayCommand(packageManager, args) { - const suffix = args.map(formatArg).join(" "); - switch (packageManager) { - case "npm": - return `npx ${RAGMIR_CLI_BIN}${suffix ? ` ${suffix}` : ""}`; - case "yarn": - return `yarn exec ${RAGMIR_CLI_BIN}${suffix ? ` ${suffix}` : ""}`; - case "bun": - return `bunx ${RAGMIR_CLI_BIN}${suffix ? ` ${suffix}` : ""}`; - case "pnpm": - return `pnpm exec ${RAGMIR_CLI_BIN}${suffix ? ` ${suffix}` : ""}`; - } -} -function formatArg(arg) { - return /\s/.test(arg) ? JSON.stringify(arg) : arg; -} -//# sourceMappingURL=package-manager.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/package-manager.js.map b/packages/ragmir-core/dist/package-manager.js.map deleted file mode 100644 index 2293fd2..0000000 --- a/packages/ragmir-core/dist/package-manager.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../src/package-manager.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/parsing.d.ts b/packages/ragmir-core/dist/parsing.d.ts deleted file mode 100644 index ae83d3d..0000000 --- a/packages/ragmir-core/dist/parsing.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { ParsedDocument, SourceFile } from "./types.js"; -export interface ParseFileOptions { - projectRoot?: string; - pdfOcrCommand?: string[]; - pdfOcrTimeoutMs?: number; - imageOcrCommand?: string[]; - imageOcrTimeoutMs?: number; - legacyWordCommand?: string[]; - legacyWordTimeoutMs?: number; -} -export declare function parseFile(file: SourceFile, options?: ParseFileOptions): Promise; -//# sourceMappingURL=parsing.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/parsing.d.ts.map b/packages/ragmir-core/dist/parsing.d.ts.map deleted file mode 100644 index 5ea121e..0000000 --- a/packages/ragmir-core/dist/parsing.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"parsing.d.ts","sourceRoot":"","sources":["../src/parsing.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAa5D,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC,CA4DzB"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/parsing.js b/packages/ragmir-core/dist/parsing.js deleted file mode 100644 index a3d345c..0000000 --- a/packages/ragmir-core/dist/parsing.js +++ /dev/null @@ -1,307 +0,0 @@ -import { createRequire as _createRequire } from "module"; -const __require = _createRequire(import.meta.url); -import { spawn } from "node:child_process"; -import { readFile } from "node:fs/promises"; -import { strFromU8, unzipSync } from "fflate"; -import { htmlToText } from "html-to-text"; -import readExcelFile from "read-excel-file/node"; -const mammoth = __require("mammoth"); -import { extractText, getDocumentProxy } from "unpdf"; -import YAML from "yaml"; -import { OCR_IMAGE_EXTENSIONS } from "./files.js"; -const MAX_OFFICE_XML_ENTRY_BYTES = 25_000_000; -const MAX_EXTERNAL_TEXT_STDIO_BYTES = 25_000_000; -const LONG_BASE64_TEXT_PATTERN = /\b[A-Za-z0-9+/]{240,}={0,2}\b/gu; -const HTML_TO_TEXT_OPTIONS = { - wordwrap: false, - selectors: [ - { selector: "a", options: { ignoreHref: true } }, - { selector: "img", format: "skip" }, - ], -}; -export async function parseFile(file, options = {}) { - let text; - switch (file.extension) { - case ".pdf": - text = await parsePdf(file.absolutePath, options); - break; - case ".doc": - text = await parseLegacyWord(file.absolutePath, options); - break; - case ".docx": - text = await parseDocx(file.absolutePath); - break; - case ".pptx": - text = await parsePptx(file.absolutePath); - break; - case ".xlsx": - text = await parseXlsx(file.absolutePath); - break; - case ".avif": - case ".bmp": - case ".gif": - case ".heic": - case ".heif": - case ".jpeg": - case ".jpg": - case ".png": - case ".tif": - case ".tiff": - case ".webp": - text = await parseImage(file.absolutePath, file.extension, options); - break; - case ".odt": - case ".ods": - case ".odp": - text = await parseOpenDocument(file.absolutePath); - break; - case ".epub": - text = await parseEpub(file.absolutePath); - break; - case ".html": - case ".htm": - text = htmlToText(await readFile(file.absolutePath, "utf8"), HTML_TO_TEXT_OPTIONS); - break; - case ".json": - case ".ipynb": - text = JSON.stringify(JSON.parse(await readFile(file.absolutePath, "utf8")), null, 2); - break; - case ".yaml": - case ".yml": - text = YAML.stringify(YAML.parse(await readFile(file.absolutePath, "utf8"))); - break; - case ".rtf": - text = stripRtf(await readFile(file.absolutePath, "utf8")); - break; - default: - text = await readFile(file.absolutePath, "utf8"); - } - return { file, text: normalizeText(text) }; -} -async function parseDocx(filePath) { - const result = await mammoth.extractRawText({ path: filePath }); - return result.value; -} -async function parsePptx(filePath) { - const entries = unzipOfficeFile(await readFile(filePath)); - return xmlEntriesToText(entries, [ - /^ppt\/slides\/slide\d+\.xml$/u, - /^ppt\/notesSlides\/notesSlide\d+\.xml$/u, - ]); -} -async function parseXlsx(filePath) { - const workbook = await readExcelFile(filePath, { trim: false }); - const sheets = []; - for (const sheet of workbook) { - const rows = sheet.data.map(spreadsheetRowToText).filter((row) => row.some(Boolean)); - if (rows.length > 0) { - sheets.push(`# ${sheet.sheet}`, rows.map((row) => row.join("\t")).join("\n")); - } - } - return sheets.join("\n\n"); -} -async function parseImage(filePath, extension, options) { - if (!OCR_IMAGE_EXTENSIONS.has(extension)) { - return ""; - } - if (!options.imageOcrCommand || options.imageOcrCommand.length === 0) { - return ""; - } - return runExternalTextCommand(filePath, { - command: options.imageOcrCommand, - cwd: options.projectRoot, - label: "OCR command", - timeoutMs: options.imageOcrTimeoutMs ?? 120_000, - pathEnvName: "RAGMIR_IMAGE_PATH", - }); -} -async function parseLegacyWord(filePath, options) { - if (!options.legacyWordCommand || options.legacyWordCommand.length === 0) { - return ""; - } - return runExternalTextCommand(filePath, { - command: options.legacyWordCommand, - cwd: options.projectRoot, - label: "legacy Word command", - timeoutMs: options.legacyWordTimeoutMs ?? 120_000, - pathEnvName: "RAGMIR_LEGACY_WORD_PATH", - }); -} -async function parseOpenDocument(filePath) { - const entries = unzipOfficeFile(await readFile(filePath)); - return xmlEntriesToText(entries, [/^content\.xml$/u, /^meta\.xml$/u]); -} -async function parseEpub(filePath) { - const entries = unzipOfficeFile(await readFile(filePath)); - const parts = []; - for (const [name, content] of [...entries.entries()].sort(([a], [b]) => a.localeCompare(b))) { - if (!/\.(?:xhtml|html|htm|xml)$/iu.test(name)) { - continue; - } - const text = htmlToText(content, HTML_TO_TEXT_OPTIONS); - if (text.trim()) { - parts.push(text); - } - } - return parts.join("\n\n"); -} -function unzipOfficeFile(buffer) { - const unzipped = unzipSync(new Uint8Array(buffer), { - filter: (file) => file.originalSize <= MAX_OFFICE_XML_ENTRY_BYTES, - }); - const entries = new Map(); - for (const [name, content] of Object.entries(unzipped)) { - if (/\.(?:xml|rels|xhtml|html|htm)$/iu.test(name)) { - entries.set(name, strFromU8(content)); - } - } - return entries; -} -function xmlEntriesToText(entries, patterns) { - const parts = []; - for (const [name, xml] of [...entries.entries()].sort(([a], [b]) => a.localeCompare(b))) { - if (patterns.some((pattern) => pattern.test(name))) { - const text = xmlToText(xml); - if (text) { - parts.push(text); - } - } - } - return parts.join("\n\n"); -} -function trimTrailingEmptyValues(values) { - let end = values.length; - while (end > 0 && values[end - 1] === "") { - end -= 1; - } - return values.slice(0, end); -} -function spreadsheetRowToText(row) { - return trimTrailingEmptyValues(row.map(spreadsheetCellToText)); -} -function spreadsheetCellToText(value) { - if (value === null || value === undefined) { - return ""; - } - if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") { - return String(value); - } - if (value instanceof Date) { - return value.toISOString(); - } - return JSON.stringify(value); -} -function xmlToText(xml) { - return normalizeText(decodeXmlEntities(xml - .replace(//gu, " ") - .replace(//gu, "\n") - .replace(/<\/(?:w:p|a:p|text:p|text:h|table:table-row)>/gu, "\n") - .replace(/<[^>]+>/gu, " ") - .replace(/[ \t]{2,}/gu, " "))); -} -function stripRtf(input) { - return input - .replace(/\\par[d]?/gu, "\n") - .replace(/\\'[0-9a-fA-F]{2}/gu, " ") - .replace(/\\[a-zA-Z]+-?\d* ?/gu, " ") - .replace(/[{}]/gu, " "); -} -function decodeXmlEntities(input) { - return input - .replace(/</gu, "<") - .replace(/>/gu, ">") - .replace(/"/gu, '"') - .replace(/'/gu, "'") - .replace(/&/gu, "&"); -} -async function parsePdf(filePath, options) { - const buffer = await readFile(filePath); - const pdf = await getDocumentProxy(new Uint8Array(buffer)); - const result = await extractText(pdf, { mergePages: true }); - if (normalizeText(result.text)) { - return result.text; - } - if (!options.pdfOcrCommand || options.pdfOcrCommand.length === 0) { - return result.text; - } - return runExternalTextCommand(filePath, { - command: options.pdfOcrCommand, - cwd: options.projectRoot, - label: "OCR command", - timeoutMs: options.pdfOcrTimeoutMs ?? 120_000, - pathEnvName: "RAGMIR_PDF_PATH", - }); -} -async function runExternalTextCommand(filePath, options) { - const command = options.command ?? []; - const [executable, ...configuredArgs] = command; - if (!executable) { - return ""; - } - const hasInputPlaceholder = command.some((part) => part.includes("{input}")); - const args = configuredArgs.map((part) => part.replaceAll("{input}", filePath)); - if (!hasInputPlaceholder) { - args.push(filePath); - } - return new Promise((resolve, reject) => { - const child = spawn(executable, args, { - cwd: options.cwd, - env: { ...process.env, [options.pathEnvName]: filePath }, - stdio: ["ignore", "pipe", "pipe"], - }); - let stdout = ""; - let stderr = ""; - let didTimeout = false; - let outputTooLarge = false; - const timeout = setTimeout(() => { - didTimeout = true; - child.kill("SIGTERM"); - }, options.timeoutMs); - child.stdout.setEncoding("utf8"); - child.stderr.setEncoding("utf8"); - child.stdout.on("data", (chunk) => { - stdout += chunk; - if (Buffer.byteLength(stdout, "utf8") > MAX_EXTERNAL_TEXT_STDIO_BYTES) { - outputTooLarge = true; - child.kill("SIGTERM"); - } - }); - child.stderr.on("data", (chunk) => { - stderr += chunk; - if (Buffer.byteLength(stderr, "utf8") > MAX_EXTERNAL_TEXT_STDIO_BYTES) { - outputTooLarge = true; - child.kill("SIGTERM"); - } - }); - child.on("error", (error) => { - clearTimeout(timeout); - reject(new Error(`${options.label} failed to start: ${error.message}`)); - }); - child.on("close", (code) => { - clearTimeout(timeout); - if (didTimeout) { - reject(new Error(`${options.label} timed out.`)); - return; - } - if (outputTooLarge) { - reject(new Error(`${options.label} produced too much output.`)); - return; - } - if (code !== 0) { - const detail = stderr.trim(); - reject(new Error(detail ? `${options.label} failed: ${detail}` : `${options.label} failed.`)); - return; - } - resolve(stdout); - }); - }); -} -function normalizeText(input) { - return input - .replace(LONG_BASE64_TEXT_PATTERN, " ") - .replace(/\r\n/g, "\n") - .replace(/[ \t]+\n/g, "\n") - .replace(/\n{4,}/g, "\n\n\n") - .trim(); -} -//# sourceMappingURL=parsing.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/parsing.js.map b/packages/ragmir-core/dist/parsing.js.map deleted file mode 100644 index fedd394..0000000 --- a/packages/ragmir-core/dist/parsing.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"parsing.js","sourceRoot":"","sources":["../src/parsing.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/query.d.ts b/packages/ragmir-core/dist/query.d.ts deleted file mode 100644 index d176c72..0000000 --- a/packages/ragmir-core/dist/query.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { AskResult, SearchOptions, SearchResult } from "./types.js"; -export declare function search(query: string, options?: SearchOptions): Promise; -export declare function vectorCandidateLimit(topK: number): number; -export declare function ask(query: string, options?: SearchOptions): Promise; -//# sourceMappingURL=query.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/query.d.ts.map b/packages/ragmir-core/dist/query.d.ts.map deleted file mode 100644 index 596d4c4..0000000 --- a/packages/ragmir-core/dist/query.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AA0BxE,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA8BhG;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAsB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,CAsBxF"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/query.js b/packages/ragmir-core/dist/query.js deleted file mode 100644 index d7be3b9..0000000 --- a/packages/ragmir-core/dist/query.js +++ /dev/null @@ -1,180 +0,0 @@ -import { recordAccess } from "./access-log.js"; -import { loadConfig } from "./config.js"; -import { embedText } from "./embeddings.js"; -import { openRowsTable } from "./store.js"; -import { normalizeForMatch, tokenize } from "./text.js"; -const MIN_VECTOR_CANDIDATES = 80; -const VECTOR_CANDIDATE_MULTIPLIER = 4; -const HYBRID_TEXT_SCAN_LIMIT = 5_000; -const VECTOR_SCORE_WEIGHT = 0.55; -const LEXICAL_SCORE_WEIGHT = 0.45; -const EXACT_QUERY_BOOST = 0.15; -const BM25_K1 = 1.2; -const BM25_B = 0.75; -export async function search(query, options = {}) { - const config = await loadConfig(String(options.cwd ?? process.cwd())); - const table = await openRowsTable(config); - if (!table) { - return []; - } - const topK = options.topK ?? config.topK; - const vector = await embedText(query, config); - const vectorRows = (await table - .vectorSearch(vector) - .limit(vectorCandidateLimit(topK)) - .toArray()); - const textRows = (await table.query().limit(HYBRID_TEXT_SCAN_LIMIT).toArray()); - const rows = rankHybridRows(query, vectorRows, textRows).slice(0, topK); - const results = rows.map((row) => ({ - source: row.row.source, - relativePath: row.row.relativePath, - chunkIndex: row.row.chunkIndex, - text: row.row.text, - distance: typeof row.row._distance === "number" ? row.row._distance : null, - })); - await recordAccess(config, { - action: "search", - query, - topK, - resultCount: results.length, - }); - return results; -} -export function vectorCandidateLimit(topK) { - return Math.max(MIN_VECTOR_CANDIDATES, topK * VECTOR_CANDIDATE_MULTIPLIER); -} -export async function ask(query, options = {}) { - const config = await loadConfig(String(options.cwd ?? process.cwd())); - const sources = await search(query, options); - if (sources.length === 0) { - return { - answer: "No relevant passages were found. Add documents and run `ragmir doctor --fix` first.", - sources, - }; - } - await recordAccess(config, { - action: "ask", - query, - topK: options.topK ?? config.topK, - resultCount: sources.length, - }); - return { - answer: retrievalOnlyAnswer(sources), - sources, - }; -} -function retrievalOnlyAnswer(sources) { - const snippets = sources - .map((source, index) => { - const text = source.text.replace(/\s+/gu, " ").trim(); - return `[${index + 1}] ${source.relativePath}#${source.chunkIndex}: ${text}`; - }) - .join("\n\n"); - return [ - "Ragmir returns retrieval context only. Use these passages as grounded context for your agent or LLM:", - "", - snippets, - ].join("\n"); -} -function rankHybridRows(query, vectorRows, textRows) { - const queryTokens = tokenize(query); - const rows = mergeRows(vectorRows, textRows); - const vectorScores = new Map(); - for (const row of vectorRows) { - vectorScores.set(rowKey(row), vectorScore(row)); - } - const lexicalScores = bm25Scores(queryTokens, rows); - const maxVectorScore = Math.max(...vectorScores.values(), 0); - const maxLexicalScore = Math.max(...lexicalScores.values(), 0); - const normalizedQuery = normalizeForMatch(query); - return rows - .map((row) => { - const key = rowKey(row); - const vector = normalizeScore(vectorScores.get(key) ?? 0, maxVectorScore); - const lexical = normalizeScore(lexicalScores.get(key) ?? 0, maxLexicalScore); - const exactBoost = normalizedQuery.length > 0 && normalizeForMatch(row.text).includes(normalizedQuery) - ? EXACT_QUERY_BOOST - : 0; - return { - row, - vectorScore: vector, - lexicalScore: lexical, - combinedScore: vector * VECTOR_SCORE_WEIGHT + lexical * LEXICAL_SCORE_WEIGHT + exactBoost, - }; - }) - .filter((ranked) => ranked.combinedScore > 0) - .sort((a, b) => { - const scoreDelta = b.combinedScore - a.combinedScore; - if (scoreDelta !== 0) { - return scoreDelta; - } - const distanceDelta = rowDistance(a.row) - rowDistance(b.row); - if (Number.isFinite(distanceDelta) && distanceDelta !== 0) { - return distanceDelta; - } - return (a.row.relativePath.localeCompare(b.row.relativePath) || a.row.chunkIndex - b.row.chunkIndex); - }); -} -function mergeRows(vectorRows, textRows) { - const rows = new Map(); - for (const row of textRows) { - rows.set(rowKey(row), row); - } - for (const row of vectorRows) { - rows.set(rowKey(row), row); - } - return [...rows.values()]; -} -function bm25Scores(queryTokens, rows) { - const scores = new Map(); - if (queryTokens.length === 0 || rows.length === 0) { - return scores; - } - const uniqueQueryTokens = [...new Set(queryTokens)]; - const documents = rows.map((row) => { - const tokens = tokenize(row.text); - const frequencies = new Map(); - for (const token of tokens) { - frequencies.set(token, (frequencies.get(token) ?? 0) + 1); - } - return { row, tokens, frequencies }; - }); - const averageLength = documents.reduce((sum, document) => sum + document.tokens.length, 0) / documents.length || 1; - const documentFrequencies = new Map(); - for (const token of uniqueQueryTokens) { - documentFrequencies.set(token, documents.filter((document) => document.frequencies.has(token)).length); - } - for (const document of documents) { - let score = 0; - for (const token of uniqueQueryTokens) { - const frequency = document.frequencies.get(token) ?? 0; - if (frequency === 0) { - continue; - } - const documentFrequency = documentFrequencies.get(token) ?? 0; - const inverseDocumentFrequency = Math.log(1 + (documents.length - documentFrequency + 0.5) / (documentFrequency + 0.5)); - const denominator = frequency + BM25_K1 * (1 - BM25_B + BM25_B * (document.tokens.length / averageLength)); - score += inverseDocumentFrequency * ((frequency * (BM25_K1 + 1)) / denominator); - } - if (score > 0) { - scores.set(rowKey(document.row), score); - } - } - return scores; -} -function vectorScore(row) { - const distance = rowDistance(row); - return 1 / (1 + distance); -} -function rowDistance(row) { - return typeof row._distance === "number" && row._distance >= 0 - ? row._distance - : Number.POSITIVE_INFINITY; -} -function normalizeScore(score, maxScore) { - return maxScore > 0 ? score / maxScore : 0; -} -function rowKey(row) { - return `${row.relativePath}\0${row.chunkIndex}`; -} -//# sourceMappingURL=query.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/query.js.map b/packages/ragmir-core/dist/query.js.map deleted file mode 100644 index 079107c..0000000 --- a/packages/ragmir-core/dist/query.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/redaction.d.ts b/packages/ragmir-core/dist/redaction.d.ts deleted file mode 100644 index f2e09d5..0000000 --- a/packages/ragmir-core/dist/redaction.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { Config, RedactionCount } from "./types.js"; -export declare function redactText(input: string, config: Config): { - text: string; - counts: RedactionCount[]; -}; -export declare function totalRedactions(counts: RedactionCount[]): number; -//# sourceMappingURL=redaction.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/redaction.d.ts.map b/packages/ragmir-core/dist/redaction.d.ts.map deleted file mode 100644 index d62b48e..0000000 --- a/packages/ragmir-core/dist/redaction.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../src/redaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAoB,MAAM,YAAY,CAAA;AAkE1E,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,EAAE,CAAA;CAAE,CAyB5C;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,CAEhE"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/redaction.js b/packages/ragmir-core/dist/redaction.js deleted file mode 100644 index da2c817..0000000 --- a/packages/ragmir-core/dist/redaction.js +++ /dev/null @@ -1,93 +0,0 @@ -const BUILT_IN_PATTERNS = [ - { - name: "private_key", - pattern: "-----BEGIN [A-Z ]*PRIVATE KEY-----[\\s\\S]*?-----END [A-Z ]*PRIVATE KEY-----", - flags: "g", - }, - { - name: "jwt", - pattern: "\\beyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\b", - flags: "g", - }, - { - name: "api_token", - pattern: "\\b(?:sk|pk|ghp|gho|github_pat|npm)_[A-Za-z0-9_=-]{20,}\\b|\\b[A-Za-z0-9_-]{32,}\\.[A-Za-z0-9_-]{16,}\\.[A-Za-z0-9_-]{16,}\\b", - flags: "g", - }, - { - name: "openai_api_key", - pattern: "\\bsk-(?:proj-)?[A-Za-z0-9_-]{20,}\\b", - flags: "g", - }, - { - name: "aws_access_key_id", - pattern: "\\b(?:AKIA|ASIA)[0-9A-Z]{16}\\b", - flags: "g", - }, - { - name: "google_api_key", - pattern: "\\bAIza[0-9A-Za-z_-]{35}\\b", - flags: "g", - }, - { - name: "slack_token", - pattern: "\\bxox[baprs]-[0-9A-Za-z-]{10,}\\b", - flags: "g", - }, - { - name: "sendgrid_api_key", - pattern: "\\bSG\\.[A-Za-z0-9_-]{22}\\.[A-Za-z0-9_-]{43}\\b", - flags: "g", - }, - { - name: "url_credentials", - pattern: "\\b[a-z][a-z0-9+.-]*://[^\\s:/@]+:[^\\s/@]+@", - flags: "gi", - }, - { - name: "email", - pattern: "\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b", - flags: "gi", - }, - { - name: "iban", - pattern: "\\b[A-Z]{2}\\d{2}[A-Z0-9]{11,30}\\b", - flags: "gi", - }, - { - name: "credit_card", - pattern: "\\b(?:\\d[ -]*?){13,19}\\b", - flags: "g", - }, -]; -export function redactText(input, config) { - if (!config.redaction.enabled) { - return { text: input, counts: [] }; - } - let text = input; - const counts = []; - const patterns = [ - ...(config.redaction.builtIn ? BUILT_IN_PATTERNS : []), - ...config.redaction.patterns, - ]; - for (const pattern of patterns) { - const regexp = compilePattern(pattern); - let count = 0; - text = text.replace(regexp, () => { - count += 1; - return pattern.replacement ?? `[REDACTED_${pattern.name.toUpperCase()}]`; - }); - if (count > 0) { - counts.push({ name: pattern.name, count }); - } - } - return { text, counts }; -} -export function totalRedactions(counts) { - return counts.reduce((total, entry) => total + entry.count, 0); -} -function compilePattern(pattern) { - const flags = pattern.flags?.includes("g") ? pattern.flags : `${pattern.flags ?? ""}g`; - return new RegExp(pattern.pattern, flags); -} -//# sourceMappingURL=redaction.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/redaction.js.map b/packages/ragmir-core/dist/redaction.js.map deleted file mode 100644 index 4becfce..0000000 --- a/packages/ragmir-core/dist/redaction.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"redaction.js","sourceRoot":"","sources":["../src/redaction.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/research.d.ts b/packages/ragmir-core/dist/research.d.ts deleted file mode 100644 index 2d702c8..0000000 --- a/packages/ragmir-core/dist/research.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { CompactSearchResult, ResearchEvidence, ResearchOptions, ResearchReport, SearchResult } from "./types.js"; -export declare function research(query: string, options?: ResearchOptions): Promise; -export declare function compactSearchResults(results: SearchResult[], maxLength?: number): CompactSearchResult[]; -export declare function compactResearchReport(report: ResearchReport): Omit & { - evidence: Array & { - snippet: string; - }>; -}; -//# sourceMappingURL=research.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/research.d.ts.map b/packages/ragmir-core/dist/research.d.ts.map deleted file mode 100644 index 6e0be07..0000000 --- a/packages/ragmir-core/dist/research.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../src/research.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAEV,mBAAmB,EAEnB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,YAAY,EACb,MAAM,YAAY,CAAA;AAwDnB,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,CAsEzB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,YAAY,EAAE,EACvB,SAAS,SAAyB,GACjC,mBAAmB,EAAE,CAQvB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,GAAG;IAChG,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACtE,CAYA"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/research.js b/packages/ragmir-core/dist/research.js deleted file mode 100644 index ed5d8e8..0000000 --- a/packages/ragmir-core/dist/research.js +++ /dev/null @@ -1,335 +0,0 @@ -import { readFile } from "node:fs/promises"; -import path from "node:path"; -import fg from "fast-glob"; -import { recordAccess } from "./access-log.js"; -import { loadConfig } from "./config.js"; -import { countSkippedByReason, DEFAULT_FAST_GLOB_IGNORES, isSensitiveFilePath } from "./files.js"; -import { audit } from "./ingest.js"; -import { search } from "./query.js"; -import { redactText } from "./redaction.js"; -import { securityAudit } from "./security.js"; -import { normalizeForMatch } from "./text.js"; -const DEFAULT_RESEARCH_QUERY_LIMIT = 5; -const DEFAULT_CODE_EVIDENCE_LIMIT = 20; -const CODE_EVIDENCE_CANDIDATE_MULTIPLIER = 5; -const COMPACT_SNIPPET_LENGTH = 260; -const CODE_SCAN_MAX_BYTES = 256_000; -const CODE_SCAN_EXTENSIONS = new Set([ - ".c", - ".cjs", - ".cpp", - ".cs", - ".go", - ".java", - ".js", - ".json", - ".jsonl", - ".jsx", - ".kt", - ".md", - ".mdx", - ".mjs", - ".mts", - ".php", - ".py", - ".rb", - ".rs", - ".sql", - ".txt", - ".ts", - ".tsx", - ".vue", - ".yaml", - ".yml", -]); -const CODE_SCAN_IGNORE = [ - ...DEFAULT_FAST_GLOB_IGNORES, - "**/dist/**", - "**/build/**", - "**/.next/**", - "**/coverage/**", - "**/release-artifacts/**", - "**/bun.lock", - "**/bun.lockb", - "**/Cargo.lock", - "**/composer.lock", - "**/Gemfile.lock", - "**/go.sum", - "**/npm-shrinkwrap.json", - "**/package-lock.json", - "**/Pipfile.lock", - "**/pnpm-lock.yaml", - "**/poetry.lock", - "**/yarn.lock", -]; -export async function research(query, options = {}) { - const normalizedQuery = query.trim(); - if (!normalizedQuery) { - throw new Error("Research query must not be empty."); - } - const config = await loadConfig(String(options.cwd ?? process.cwd())); - const topK = options.topK ?? config.topK; - const [auditReport, securityReport] = await Promise.all([ - audit(config.projectRoot), - securityAudit(config.projectRoot), - ]); - const generatedQueries = researchQueries(normalizedQuery); - const perQueryTopK = Math.max(2, Math.ceil(topK / 2)); - const searchResults = await Promise.all(generatedQueries.map(async (generatedQuery) => ({ - query: generatedQuery, - results: await search(generatedQuery, { cwd: config.projectRoot, topK: perQueryTopK }), - }))); - const evidence = mergeEvidence(searchResults).slice(0, topK); - const codeEvidence = options.includeCode === false - ? [] - : await findCodeEvidence(config, normalizedQuery, DEFAULT_CODE_EVIDENCE_LIMIT); - const unsupportedFiles = countSkippedByReason(auditReport.skippedFiles, "unsupported-extension"); - const gaps = researchGaps({ - evidenceCount: evidence.length, - codeEvidenceCount: codeEvidence.length, - includeCode: options.includeCode !== false, - missingFromIndex: auditReport.missingFromIndex.length, - staleInIndex: auditReport.staleInIndex.length, - securityWarnings: securityReport.warnings.length, - unsupportedFiles, - duplicateCandidates: auditReport.sourceDiagnostics.duplicateCandidates.length, - archiveCandidates: auditReport.sourceDiagnostics.archiveCandidates.length, - mirrorCandidates: auditReport.sourceDiagnostics.mirrorCandidates.length, - }); - await recordAccess(config, { - action: "research", - query: normalizedQuery, - topK, - resultCount: evidence.length, - }); - return { - query: normalizedQuery, - generatedQueries, - ready: evidence.length > 0 && - auditReport.missingFromIndex.length === 0 && - auditReport.staleInIndex.length === 0 && - securityReport.warnings.length === 0, - audit: { - supportedFiles: auditReport.supportedFiles.length, - skippedFiles: auditReport.skippedFiles.length, - unsupportedFiles, - indexedFiles: auditReport.indexedFiles.length, - totalChunks: auditReport.totalChunks, - missingFromIndex: auditReport.missingFromIndex.length, - staleInIndex: auditReport.staleInIndex.length, - emptyTextFiles: auditReport.emptyTextFiles.length, - }, - securityWarnings: securityReport.warnings, - sourceDiagnostics: auditReport.sourceDiagnostics, - evidence, - codeEvidence, - gaps, - nextSteps: researchNextSteps(gaps), - }; -} -export function compactSearchResults(results, maxLength = COMPACT_SNIPPET_LENGTH) { - return results.map((result) => ({ - source: result.source, - relativePath: result.relativePath, - chunkIndex: result.chunkIndex, - snippet: compactText(result.text, maxLength), - distance: result.distance, - })); -} -export function compactResearchReport(report) { - return { - ...report, - evidence: report.evidence.map((evidence) => ({ - source: evidence.source, - relativePath: evidence.relativePath, - chunkIndex: evidence.chunkIndex, - snippet: compactText(evidence.text), - distance: evidence.distance, - queries: evidence.queries, - })), - }; -} -function researchQueries(query) { - const trimmed = query.trim(); - const queries = [ - trimmed, - `${trimmed} scope requirements rules`, - `${trimmed} actors permissions workflow status validation`, - `${trimmed} dates deadlines planning risks blockers`, - `${trimmed} integration API data model export dependencies`, - ]; - return [...new Set(queries)].slice(0, DEFAULT_RESEARCH_QUERY_LIMIT); -} -function mergeEvidence(searchResults) { - const bySource = new Map(); - for (const searchResult of searchResults) { - for (const result of searchResult.results) { - const key = `${result.relativePath}\0${result.chunkIndex}`; - const existing = bySource.get(key); - if (existing) { - existing.queries.push(searchResult.query); - continue; - } - bySource.set(key, { - source: result.source, - relativePath: result.relativePath, - chunkIndex: result.chunkIndex, - text: result.text, - distance: result.distance, - queries: [searchResult.query], - }); - } - } - return [...bySource.values()]; -} -async function findCodeEvidence(config, query, limit) { - const terms = meaningfulTerms(query); - if (terms.length === 0) { - return []; - } - const ignore = [...CODE_SCAN_IGNORE, ...projectRelativeIgnores(config)]; - const minimumMatchedTerms = terms.length === 1 ? 1 : 2; - const candidateLimit = Math.max(limit, limit * CODE_EVIDENCE_CANDIDATE_MULTIPLIER); - const entries = (await fg("**/*", { - cwd: config.projectRoot, - absolute: true, - onlyFiles: true, - dot: true, - followSymbolicLinks: false, - ignore, - objectMode: true, - stats: true, - unique: true, - })); - const candidates = []; - for (const entry of entries) { - if (candidates.length >= candidateLimit) { - break; - } - const absolutePath = path.isAbsolute(entry.path) - ? entry.path - : path.resolve(config.projectRoot, entry.path); - if (!isScannableCodePath(absolutePath) || - isSensitiveFilePath(absolutePath) || - (entry.stats?.size ?? 0) > CODE_SCAN_MAX_BYTES) { - continue; - } - const relativePath = path.relative(config.projectRoot, absolutePath); - const content = await readFile(absolutePath, "utf8").catch(() => null); - if (content === null) { - continue; - } - for (const [index, line] of content.split(/\r?\n/u).entries()) { - const normalizedLine = normalizeForMatch(line); - const matchedTerms = terms.filter((term) => normalizedLine.includes(term)); - if (matchedTerms.length < minimumMatchedTerms) { - continue; - } - const redactedSnippet = redactText(line.trim(), config).text; - candidates.push({ - relativePath, - lineNumber: index + 1, - snippet: redactedSnippet.slice(0, COMPACT_SNIPPET_LENGTH), - matchedTerms, - }); - break; - } - } - return candidates.sort(compareCodeEvidence).slice(0, limit); -} -function compareCodeEvidence(a, b) { - return (b.matchedTerms.length - a.matchedTerms.length || - a.relativePath.localeCompare(b.relativePath) || - a.lineNumber - b.lineNumber); -} -function projectRelativeIgnores(config) { - return [config.rawDir, config.storageDir, config.embeddingModelPath] - .map((absolutePath) => path.relative(config.projectRoot, absolutePath)) - .filter((relativePath) => relativePath && !relativePath.startsWith("..")) - .map((relativePath) => `${relativePath}/**`); -} -function isScannableCodePath(absolutePath) { - const extension = path.extname(absolutePath).toLowerCase(); - return CODE_SCAN_EXTENSIONS.has(extension); -} -function meaningfulTerms(query) { - return [ - ...new Set(normalizeForMatch(query) - .match(/[\p{L}\p{N}]{3,}/gu) - ?.filter((term) => !STOP_WORDS.has(term)) ?? []), - ].slice(0, 8); -} -function researchGaps(input) { - const gaps = []; - if (input.evidenceCount === 0) { - gaps.push("No retrieved evidence matched the research query."); - } - if (input.includeCode && input.codeEvidenceCount === 0) { - gaps.push("No code evidence matched the research query."); - } - if (input.missingFromIndex > 0) { - gaps.push(`${input.missingFromIndex} supported source files are missing from the index.`); - } - if (input.staleInIndex > 0) { - gaps.push(`${input.staleInIndex} indexed source files are stale.`); - } - if (input.securityWarnings > 0) { - gaps.push(`${input.securityWarnings} security warnings require review.`); - } - if (input.unsupportedFiles > 0) { - gaps.push(`${input.unsupportedFiles} source files were skipped because their type is unsupported.`); - } - if (input.duplicateCandidates > 0) { - gaps.push(`${input.duplicateCandidates} possible duplicate source groups need source-truth review.`); - } - if (input.archiveCandidates > 0 || input.mirrorCandidates > 0) { - gaps.push("Some source paths look like archives, exports, raw files, or drive mirrors."); - } - return gaps; -} -function researchNextSteps(gaps) { - if (gaps.length === 0) { - return [ - "Use the cited evidence as grounded context for an AI agent or reviewer.", - "Run targeted searches for names, dates, amounts, and decisions before high-stakes conclusions.", - ]; - } - return gaps.map((gap) => { - if (gap.includes("missing") || gap.includes("stale")) { - return "Run `ragmir doctor --fix`, then rerun `ragmir research`."; - } - if (gap.includes("unsupported")) { - return "Run `ragmir audit --unsupported` and transcribe, OCR, convert, or explicitly configure unsupported formats."; - } - if (gap.includes("duplicate") || gap.includes("archive") || gap.includes("mirror")) { - return "Review source diagnostics and prefer the canonical source before presenting conclusions."; - } - if (gap.includes("code evidence")) { - return "Run repository-aware code search to compare documents with implementation."; - } - return "Add or refresh source documents, then rerun the research command."; - }); -} -function compactText(text, maxLength = COMPACT_SNIPPET_LENGTH) { - const normalized = text.replace(/\s+/gu, " ").trim(); - if (normalized.length <= maxLength) { - return normalized; - } - return `${normalized.slice(0, Math.max(0, maxLength - 3)).trimEnd()}...`; -} -const STOP_WORDS = new Set([ - "about", - "avec", - "dans", - "des", - "for", - "les", - "pour", - "que", - "qui", - "sur", - "the", - "une", - "what", -]); -//# sourceMappingURL=research.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/research.js.map b/packages/ragmir-core/dist/research.js.map deleted file mode 100644 index 023bd78..0000000 --- a/packages/ragmir-core/dist/research.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"research.js","sourceRoot":"","sources":["../src/research.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/security.d.ts b/packages/ragmir-core/dist/security.d.ts deleted file mode 100644 index 01ad6b4..0000000 --- a/packages/ragmir-core/dist/security.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { SecurityAuditReport } from "./types.js"; -export declare function securityAudit(cwd?: string): Promise; -//# sourceMappingURL=security.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/security.d.ts.map b/packages/ragmir-core/dist/security.d.ts.map deleted file mode 100644 index 90ff434..0000000 --- a/packages/ragmir-core/dist/security.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAErD,wBAAsB,aAAa,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAgFrF"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/security.js b/packages/ragmir-core/dist/security.js deleted file mode 100644 index da3cbae..0000000 --- a/packages/ragmir-core/dist/security.js +++ /dev/null @@ -1,106 +0,0 @@ -import { existsSync } from "node:fs"; -import { readFile } from "node:fs/promises"; -import path from "node:path"; -import { loadConfig } from "./config.js"; -import { LEGACY_KB_DIR, LEGACY_KB_GITIGNORE_ENTRY, LEGACY_PRIVATE_DIR, LEGACY_PRIVATE_GITIGNORE_ENTRY, LEGACY_PRIVATE_GITIGNORE_FALLBACK_ENTRY, RAGMIR_GITIGNORE_ENTRY, } from "./defaults.js"; -export async function securityAudit(cwd = process.cwd()) { - const config = await loadConfig(cwd); - const gitignore = await readGitignore(config.projectRoot); - const warnings = []; - const legacyKbIgnored = hasGitignoreEntry(gitignore, LEGACY_KB_GITIGNORE_ENTRY); - const ragmirIgnored = hasGitignoreEntry(gitignore, RAGMIR_GITIGNORE_ENTRY); - const legacyPrivateIgnored = hasGitignoreEntry(gitignore, LEGACY_PRIVATE_GITIGNORE_ENTRY) || - hasGitignoreEntry(gitignore, LEGACY_PRIVATE_GITIGNORE_FALLBACK_ENTRY); - const usesLegacyKb = [config.storageDir, config.sourcesFile, config.accessLogPath].some((filePath) => usesProjectDirectory(config.projectRoot, filePath, LEGACY_KB_DIR)); - const usesLegacyPrivate = usesProjectDirectory(config.projectRoot, config.rawDir, LEGACY_PRIVATE_DIR); - const storageGitIgnored = isPathIgnored(config.projectRoot, config.storageDir, gitignore); - if (config.embeddingProvider === "transformers" && config.transformersAllowRemoteModels) { - warnings.push("Transformers remote model loading is enabled; model files can be downloaded from Hugging Face."); - } - if (!config.redaction.enabled) { - warnings.push("Redaction is disabled; secrets and identifiers may be embedded in the index."); - } - if (!ragmirIgnored) { - warnings.push(`${RAGMIR_GITIGNORE_ENTRY} is not ignored by Git.`); - } - if (usesLegacyKb && !legacyKbIgnored) { - warnings.push(`${LEGACY_KB_GITIGNORE_ENTRY} is not ignored by Git.`); - } - if (usesLegacyPrivate && !legacyPrivateIgnored) { - warnings.push(`${LEGACY_PRIVATE_GITIGNORE_ENTRY} is not ignored by Git.`); - } - return { - projectRoot: config.projectRoot, - zeroTelemetry: true, - providers: { - embedding: config.embeddingProvider, - embeddingModel: config.embeddingModel, - embeddingModelPath: config.embeddingModelPath, - transformersAllowRemoteModels: config.transformersAllowRemoteModels, - llmGeneration: false, - }, - redaction: { - enabled: config.redaction.enabled, - builtIn: config.redaction.builtIn, - customPatterns: config.redaction.patterns.map((pattern) => pattern.name), - }, - accessLog: { - enabled: config.accessLog, - path: config.accessLogPath, - storesRawQueries: false, - }, - storage: { - path: config.storageDir, - gitIgnored: storageGitIgnored, - encryptedAtRest: "external-required", - }, - mcp: { - maxTopK: config.mcpMaxTopK, - destructiveToolsExposed: false, - }, - gitignore: { - legacyKbIgnored, - ragmirIgnored, - legacyPrivateIgnored, - }, - recommendations: [ - "Run Ragmir inside an encrypted disk, VM, or container volume for at-rest encryption.", - "Use npm provenance, release checksums, and the generated SBOM for release verification.", - "Use one repository checkout per trust boundary; Ragmir does not implement multi-user RBAC.", - "Use an external agent, MCP server, or local model runtime for LLM synthesis.", - ], - warnings, - }; -} -async function readGitignore(projectRoot) { - const gitignorePath = path.join(projectRoot, ".gitignore"); - if (!existsSync(gitignorePath)) { - return new Set(); - } - return new Set((await readFile(gitignorePath, "utf8")) - .split(/\r?\n/) - .map((line) => line.trim()) - .filter(Boolean)); -} -function hasGitignoreEntry(lines, entry) { - return lines.has(entry); -} -function usesProjectDirectory(projectRoot, filePath, directory) { - const relativePath = normalizeRelativePath(projectRoot, filePath); - return relativePath === directory || relativePath.startsWith(`${directory}/`); -} -function isPathIgnored(projectRoot, filePath, lines) { - const relativePath = normalizeRelativePath(projectRoot, filePath); - const segments = relativePath.split("/"); - for (let index = 1; index <= segments.length; index += 1) { - const prefix = segments.slice(0, index).join("/"); - if (lines.has(prefix) || lines.has(`${prefix}/`) || lines.has(`${prefix}/**`)) { - return true; - } - } - return false; -} -function normalizeRelativePath(projectRoot, filePath) { - return path.relative(projectRoot, filePath).split(path.sep).join("/"); -} -//# sourceMappingURL=security.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/security.js.map b/packages/ragmir-core/dist/security.js.map deleted file mode 100644 index 878a940..0000000 --- a/packages/ragmir-core/dist/security.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/semantic-config.d.ts b/packages/ragmir-core/dist/semantic-config.d.ts deleted file mode 100644 index 9cf1dec..0000000 --- a/packages/ragmir-core/dist/semantic-config.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface EnableSemanticEmbeddingsResult { - configPath: string; - embeddingProvider: "transformers"; - embeddingModel: string; - embeddingModelPath: string; - transformersAllowRemoteModels: false; -} -export declare function enableSemanticEmbeddings(cwd?: string): Promise; -//# sourceMappingURL=semantic-config.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/semantic-config.d.ts.map b/packages/ragmir-core/dist/semantic-config.d.ts.map deleted file mode 100644 index 8cd9dc8..0000000 --- a/packages/ragmir-core/dist/semantic-config.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"semantic-config.d.ts","sourceRoot":"","sources":["../src/semantic-config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,8BAA8B;IAC7C,UAAU,EAAE,MAAM,CAAA;IAClB,iBAAiB,EAAE,cAAc,CAAA;IACjC,cAAc,EAAE,MAAM,CAAA;IACtB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,6BAA6B,EAAE,KAAK,CAAA;CACrC;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,SAAgB,GAClB,OAAO,CAAC,8BAA8B,CAAC,CAmCzC"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/semantic-config.js b/packages/ragmir-core/dist/semantic-config.js deleted file mode 100644 index dd68798..0000000 --- a/packages/ragmir-core/dist/semantic-config.js +++ /dev/null @@ -1,35 +0,0 @@ -import { readFile, writeFile } from "node:fs/promises"; -import { findProjectConfig } from "./config.js"; -import { DEFAULT_CONFIG } from "./defaults.js"; -import { isRecord } from "./guards.js"; -import { initProject } from "./init.js"; -export async function enableSemanticEmbeddings(cwd = process.cwd()) { - await initProject(cwd); - const projectConfig = findProjectConfig(cwd); - const rawConfig = JSON.parse(await readFile(projectConfig.configPath, "utf8")); - if (!isRecord(rawConfig)) { - throw new Error(`${projectConfig.configPath} must contain a JSON object.`); - } - const embeddingModel = typeof rawConfig.embeddingModel === "string" - ? rawConfig.embeddingModel - : DEFAULT_CONFIG.embeddingModel; - const embeddingModelPath = typeof rawConfig.embeddingModelPath === "string" - ? rawConfig.embeddingModelPath - : DEFAULT_CONFIG.embeddingModelPath; - const nextConfig = { - ...rawConfig, - embeddingProvider: "transformers", - embeddingModel, - embeddingModelPath, - transformersAllowRemoteModels: false, - }; - await writeFile(projectConfig.configPath, `${JSON.stringify(nextConfig, null, 2)}\n`, "utf8"); - return { - configPath: projectConfig.configPath, - embeddingProvider: "transformers", - embeddingModel, - embeddingModelPath, - transformersAllowRemoteModels: false, - }; -} -//# sourceMappingURL=semantic-config.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/semantic-config.js.map b/packages/ragmir-core/dist/semantic-config.js.map deleted file mode 100644 index b88c17a..0000000 --- a/packages/ragmir-core/dist/semantic-config.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"semantic-config.js","sourceRoot":"","sources":["../src/semantic-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAUvC,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAEnB,MAAM,WAAW,CAAC,GAAG,CAAC,CAAA;IACtB,MAAM,aAAa,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;IAE5C,MAAM,SAAS,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAA;IACvF,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,GAAG,aAAa,CAAC,UAAU,8BAA8B,CAAC,CAAA;IAC5E,CAAC;IAED,MAAM,cAAc,GAClB,OAAO,SAAS,CAAC,cAAc,KAAK,QAAQ;QAC1C,CAAC,CAAC,SAAS,CAAC,cAAc;QAC1B,CAAC,CAAC,cAAc,CAAC,cAAc,CAAA;IACnC,MAAM,kBAAkB,GACtB,OAAO,SAAS,CAAC,kBAAkB,KAAK,QAAQ;QAC9C,CAAC,CAAC,SAAS,CAAC,kBAAkB;QAC9B,CAAC,CAAC,cAAc,CAAC,kBAAkB,CAAA;IAEvC,MAAM,UAAU,GAAG;QACjB,GAAG,SAAS;QACZ,iBAAiB,EAAE,cAAc;QACjC,cAAc;QACd,kBAAkB;QAClB,6BAA6B,EAAE,KAAK;KACrC,CAAA;IAED,MAAM,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAE7F,OAAO;QACL,UAAU,EAAE,aAAa,CAAC,UAAU;QACpC,iBAAiB,EAAE,cAAc;QACjC,cAAc;QACd,kBAAkB;QAClB,6BAA6B,EAAE,KAAK;KACrC,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/setup.d.ts b/packages/ragmir-core/dist/setup.d.ts deleted file mode 100644 index 54a3e9c..0000000 --- a/packages/ragmir-core/dist/setup.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { type PullEmbeddingModelResult } from "./embeddings.js"; -import { type PackageManager } from "./package-manager.js"; -import { type EnableSemanticEmbeddingsResult } from "./semantic-config.js"; -import { type AgentTarget, type InstallSkillResult } from "./skill.js"; -import type { DoctorReport, IngestResult } from "./types.js"; -export interface SetupOptions { - cwd?: string; - targetDir?: string; - ingest?: boolean; - semantic?: boolean; - agents?: readonly AgentTarget[]; - mcpServerName?: string; - mcpCommand?: string; - mcpArgs?: readonly string[]; -} -export interface SetupSemanticResult { - model: PullEmbeddingModelResult; - config: EnableSemanticEmbeddingsResult; -} -export interface SetupResult { - projectRoot: string; - packageManager: PackageManager; - runCommand: string; - created: string[]; - agentKit: InstallSkillResult; - semantic: SetupSemanticResult | null; - ingested: IngestResult | null; - doctor: DoctorReport; - nextSteps: string[]; -} -export declare function setupProject(options?: SetupOptions): Promise; -//# sourceMappingURL=setup.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/setup.d.ts.map b/packages/ragmir-core/dist/setup.d.ts.map deleted file mode 100644 index 002dbc3..0000000 --- a/packages/ragmir-core/dist/setup.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,wBAAwB,EAAsB,MAAM,iBAAiB,CAAA;AAGnF,OAAO,EAAE,KAAK,cAAc,EAAiB,MAAM,sBAAsB,CAAA;AACzE,OAAO,EAAE,KAAK,8BAA8B,EAA4B,MAAM,sBAAsB,CAAA;AACpG,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,kBAAkB,EAAgB,MAAM,YAAY,CAAA;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE5D,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,wBAAwB,CAAA;IAC/B,MAAM,EAAE,8BAA8B,CAAA;CACvC;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAA;IACpC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAA;IAC7B,MAAM,EAAE,YAAY,CAAA;IACpB,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CA0CnF"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/setup.js b/packages/ragmir-core/dist/setup.js deleted file mode 100644 index 349958c..0000000 --- a/packages/ragmir-core/dist/setup.js +++ /dev/null @@ -1,74 +0,0 @@ -import path from "node:path"; -import { loadConfig } from "./config.js"; -import { doctor } from "./doctor.js"; -import { pullEmbeddingModel } from "./embeddings.js"; -import { ingest } from "./ingest.js"; -import { initProject } from "./init.js"; -import { ragmirCommand } from "./package-manager.js"; -import { enableSemanticEmbeddings } from "./semantic-config.js"; -import { installSkill } from "./skill.js"; -export async function setupProject(options = {}) { - const cwd = path.resolve(options.cwd ?? process.cwd()); - const created = await initProject(cwd); - const installOptions = { cwd }; - if (options.targetDir !== undefined) { - installOptions.targetDir = options.targetDir; - } - if (options.agents !== undefined) { - installOptions.agents = options.agents; - } - if (options.mcpServerName !== undefined) { - installOptions.mcpServerName = options.mcpServerName; - } - if (options.mcpCommand !== undefined) { - installOptions.mcpCommand = options.mcpCommand; - } - if (options.mcpArgs !== undefined) { - installOptions.mcpArgs = options.mcpArgs; - } - const agentKit = await installSkill(installOptions); - const semantic = options.semantic ? await setupSemanticEmbeddings(cwd) : null; - let report = await doctor(cwd); - let ingested = null; - if (options.ingest !== false && canAutoIngest(report)) { - ingested = await ingest({ cwd }); - report = await doctor(cwd); - } - const command = await ragmirCommand(cwd, ["doctor"]); - return { - projectRoot: report.projectRoot, - packageManager: command.packageManager, - runCommand: command.display, - created, - agentKit, - semantic, - ingested, - doctor: report, - nextSteps: setupNextSteps(report), - }; -} -async function setupSemanticEmbeddings(cwd) { - const config = await loadConfig(cwd); - const model = await pullEmbeddingModel(config); - const semanticConfig = await enableSemanticEmbeddings(cwd); - return { - model, - config: semanticConfig, - }; -} -function canAutoIngest(report) { - return (report.supportedFiles > 0 && - report.securityWarnings.length === 0 && - (report.chunksIndexed === 0 || report.missingFromIndex > 0 || report.staleInIndex > 0)); -} -function setupNextSteps(report) { - if (report.ready) { - return [ - "Ask questions with the search or ask command shown by `ragmir doctor`.", - "Run `ragmir install-agent --agents claude` or another targeted agent list for native skill discovery.", - "Wire the matching MCP helper from .ragmir/ when the agent should call Ragmir tools directly.", - ]; - } - return report.nextSteps; -} -//# sourceMappingURL=setup.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/setup.js.map b/packages/ragmir-core/dist/setup.js.map deleted file mode 100644 index 58d2ba2..0000000 --- a/packages/ragmir-core/dist/setup.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/skill.d.ts b/packages/ragmir-core/dist/skill.d.ts deleted file mode 100644 index d302284..0000000 --- a/packages/ragmir-core/dist/skill.d.ts +++ /dev/null @@ -1,66 +0,0 @@ -export type AgentTarget = "claude" | "codex" | "kimi" | "opencode" | "cline"; -export type AgentInstallScope = "project" | "user"; -export type AgentInstallMode = "link" | "copy"; -export interface InstallSkillOptions { - cwd?: string; - targetDir?: string; - agents?: readonly AgentTarget[]; - mcpServerName?: string; - mcpCommand?: string; - mcpArgs?: readonly string[]; -} -export interface InstallSkillResult { - skillPath: string; - audioSkillPath: string; - reportSkillPath: string; - legalSkillPath: string; - mcpConfigPath: string; - claudeConfigPath: string; - codexConfigPath: string; - kimiConfigPath: string; - opencodeConfigPath: string; - clineConfigPath: string; - agentSetupPath: string; - readmePath: string; - agentHelpers: AgentHelperFile[]; - mcpServerName: string; - mcpCommand: string; - mcpArgs: string[]; - written: string[]; -} -export interface InstallAgentSkillsOptions { - cwd?: string; - agents?: readonly AgentTarget[]; - scope?: AgentInstallScope; - mode?: AgentInstallMode; - homeDir?: string; - env?: Record; -} -export interface AgentSkillInstallation { - agent: AgentTarget; - label: string; - scope: AgentInstallScope; - mode: AgentInstallMode; - targetDir: string; - skillPaths: string[]; -} -export interface InstallAgentSkillsResult { - projectKit: InstallSkillResult; - installations: AgentSkillInstallation[]; - written: string[]; -} -export interface AgentHelperFile { - agent: AgentTarget; - label: string; - path: string; -} -export declare const SKILL_NAMES: readonly ["ragmir", "ragmir-audio-summary", "ragmir-markdown-report", "ragmir-legal-dossier"]; -export declare const MCP_CONFIG_FILENAME = "mcp.json"; -export declare const AGENT_SETUP_FILENAME = "agent-setup.md"; -export declare const SUPPORTED_AGENT_TARGETS: readonly AgentTarget[]; -export declare const AGENT_HELPER_CONFIG_FILENAMES: Record; -export declare function bundledSkillPath(skillName?: string): string; -export declare function parseAgentTargets(value: string | readonly string[] | undefined): AgentTarget[]; -export declare function installSkill(options?: InstallSkillOptions): Promise; -export declare function installAgentSkills(options?: InstallAgentSkillsOptions): Promise; -//# sourceMappingURL=skill.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/skill.d.ts.map b/packages/ragmir-core/dist/skill.d.ts.map deleted file mode 100644 index fde0f94..0000000 --- a/packages/ragmir-core/dist/skill.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/skill.js b/packages/ragmir-core/dist/skill.js deleted file mode 100644 index 3953891..0000000 --- a/packages/ragmir-core/dist/skill.js +++ /dev/null @@ -1,652 +0,0 @@ -import { cp, mkdir, rm, symlink, writeFile } from "node:fs/promises"; -import path from "node:path"; -import { fileURLToPath } from "node:url"; -import { DEFAULT_SKILL_TARGET_DIR, RAGMIR_DIR, RAGMIR_PROJECT_ROOT_ENV } from "./defaults.js"; -import { ensureRagmirGitignore } from "./gitignore.js"; -import { ragmirCommand } from "./package-manager.js"; -const PACKAGE_ROOT = path.dirname(path.dirname(fileURLToPath(import.meta.url))); -const PRIMARY_SKILL_NAME = "ragmir"; -const AUDIO_SKILL_NAME = "ragmir-audio-summary"; -const REPORT_SKILL_NAME = "ragmir-markdown-report"; -const LEGAL_SKILL_NAME = "ragmir-legal-dossier"; -const DEFAULT_MCP_SERVER_NAME = "ragmir"; -const MCP_SERVER_NAME_PATTERN = /^[A-Za-z0-9_-]+$/u; -export const SKILL_NAMES = [ - PRIMARY_SKILL_NAME, - AUDIO_SKILL_NAME, - REPORT_SKILL_NAME, - LEGAL_SKILL_NAME, -]; -export const MCP_CONFIG_FILENAME = "mcp.json"; -export const AGENT_SETUP_FILENAME = "agent-setup.md"; -export const SUPPORTED_AGENT_TARGETS = [ - "claude", - "codex", - "kimi", - "opencode", - "cline", -]; -export const AGENT_HELPER_CONFIG_FILENAMES = { - claude: "claude-mcp-server.json", - codex: "codex-mcp.toml", - kimi: "kimi-mcp.json", - opencode: "opencode.jsonc", - cline: "cline-mcp.json", -}; -const AGENT_TARGET_ALIASES = new Map([ - ["claude", "claude"], - ["claude-code", "claude"], - ["codex", "codex"], - ["kimi", "kimi"], - ["kimi-code", "kimi"], - ["opencode", "opencode"], - ["open-code", "opencode"], - ["cline", "cline"], -]); -const AGENT_DESTINATIONS = { - claude: { - label: "Claude Code", - env: "CLAUDE_SKILLS_DIR", - projectDir: path.join(".claude", "skills"), - userDir: (homeDir) => path.join(homeDir, ".claude", "skills"), - }, - codex: { - label: "Codex", - env: "CODEX_SKILLS_DIR", - projectDir: path.join(".codex", "skills"), - userDir: (homeDir) => path.join(homeDir, ".codex", "skills"), - }, - kimi: { - label: "Kimi Code CLI", - env: "KIMI_SKILLS_DIR", - projectDir: path.join(".kimi", "skills"), - userDir: (homeDir) => path.join(homeDir, ".kimi", "skills"), - }, - opencode: { - label: "OpenCode", - env: "OPENCODE_SKILLS_DIR", - projectDir: path.join(".opencode", "skills"), - userDir: (homeDir) => path.join(homeDir, ".config", "opencode", "skills"), - }, - cline: { - label: "Cline", - env: "CLINE_SKILLS_DIR", - projectDir: path.join(".cline", "skills"), - userDir: (homeDir) => path.join(homeDir, ".cline", "skills"), - }, -}; -export function bundledSkillPath(skillName = PRIMARY_SKILL_NAME) { - return path.join(PACKAGE_ROOT, "skills", skillName); -} -export function parseAgentTargets(value) { - if (value === undefined || value === "" || value === "all") { - return [...SUPPORTED_AGENT_TARGETS]; - } - const entries = typeof value === "string" ? value.split(",") : value.flatMap((entry) => entry.split(",")); - const targets = new Set(); - for (const entry of entries) { - const normalized = entry.trim().toLowerCase(); - if (normalized === "" || normalized === "all") { - for (const target of SUPPORTED_AGENT_TARGETS) { - targets.add(target); - } - continue; - } - const target = AGENT_TARGET_ALIASES.get(normalized); - if (!target) { - throw new Error(`Unknown agent target "${entry}". Expected one of: all, ${SUPPORTED_AGENT_TARGETS.join(", ")}.`); - } - targets.add(target); - } - return [...targets]; -} -export async function installSkill(options = {}) { - const cwd = path.resolve(options.cwd ?? process.cwd()); - const targetDir = path.resolve(cwd, options.targetDir ?? DEFAULT_SKILL_TARGET_DIR); - const agents = options.agents ? parseAgentTargets(options.agents) : [...SUPPORTED_AGENT_TARGETS]; - const agentSet = new Set(agents); - const mcpServerName = normalizeMcpServerName(options.mcpServerName); - const skillPath = path.join(targetDir, PRIMARY_SKILL_NAME); - const audioSkillPath = path.join(targetDir, AUDIO_SKILL_NAME); - const reportSkillPath = path.join(targetDir, REPORT_SKILL_NAME); - const legalSkillPath = path.join(targetDir, LEGAL_SKILL_NAME); - const ragmirDir = path.resolve(cwd, RAGMIR_DIR); - const mcpConfigPath = path.join(ragmirDir, MCP_CONFIG_FILENAME); - const agentConfigPaths = { - claude: path.join(ragmirDir, AGENT_HELPER_CONFIG_FILENAMES.claude), - codex: path.join(ragmirDir, AGENT_HELPER_CONFIG_FILENAMES.codex), - kimi: path.join(ragmirDir, AGENT_HELPER_CONFIG_FILENAMES.kimi), - opencode: path.join(ragmirDir, AGENT_HELPER_CONFIG_FILENAMES.opencode), - cline: path.join(ragmirDir, AGENT_HELPER_CONFIG_FILENAMES.cline), - }; - const claudeConfigPath = agentConfigPaths.claude; - const codexConfigPath = agentConfigPaths.codex; - const kimiConfigPath = agentConfigPaths.kimi; - const opencodeConfigPath = agentConfigPaths.opencode; - const clineConfigPath = agentConfigPaths.cline; - const agentSetupPath = path.join(ragmirDir, AGENT_SETUP_FILENAME); - const readmePath = path.join(ragmirDir, "README.md"); - await mkdir(targetDir, { recursive: true }); - await mkdir(ragmirDir, { recursive: true }); - await copyBundledSkills(targetDir); - const serveCommand = await resolveMcpCommand(cwd, options); - const doctorCommand = await ragmirCommand(cwd, ["doctor"]); - const installAgentCommand = await ragmirCommand(cwd, [ - "install-agent", - "--agents", - agents.join(","), - ]); - await writeFile(mcpConfigPath, `${JSON.stringify(mcpConfig(cwd, serveCommand, undefined, mcpServerName), null, 2)}\n`, "utf8"); - const agentHelpers = []; - for (const agent of SUPPORTED_AGENT_TARGETS) { - const helperPath = agentConfigPaths[agent]; - if (!agentSet.has(agent)) { - await rm(helperPath, { force: true }); - continue; - } - await writeAgentMcpHelper(agent, { - cwd, - serveCommand, - mcpServerName, - claudeConfigPath, - codexConfigPath, - kimiConfigPath, - opencodeConfigPath, - clineConfigPath, - }); - agentHelpers.push({ - agent, - label: AGENT_DESTINATIONS[agent].label, - path: helperPath, - }); - } - await writeFile(agentSetupPath, agentSetupGuide({ - skillPath, - audioSkillPath, - reportSkillPath, - legalSkillPath, - mcpConfigPath, - claudeConfigPath, - codexConfigPath, - kimiConfigPath, - opencodeConfigPath, - clineConfigPath, - agentHelpers, - mcpServerName, - installAgentCommand: installAgentCommand.display, - serveCommand: serveCommand.display, - doctorCommand: doctorCommand.display, - }), "utf8"); - await writeFile(readmePath, agentKitReadme({ - skillPath, - audioSkillPath, - reportSkillPath, - legalSkillPath, - mcpConfigPath, - claudeConfigPath, - codexConfigPath, - kimiConfigPath, - opencodeConfigPath, - clineConfigPath, - agentSetupPath, - agentHelpers, - mcpServerName, - installAgentCommand: installAgentCommand.display, - serveCommand: serveCommand.display, - doctorCommand: doctorCommand.display, - }), "utf8"); - const wroteGitignore = await ensureRagmirGitignore(cwd); - const written = [ - path.relative(cwd, skillPath), - path.relative(cwd, audioSkillPath), - path.relative(cwd, reportSkillPath), - path.relative(cwd, legalSkillPath), - path.relative(cwd, mcpConfigPath), - ...agentHelpers.map((helper) => path.relative(cwd, helper.path)), - path.relative(cwd, agentSetupPath), - path.relative(cwd, readmePath), - ]; - if (wroteGitignore) { - written.push(".gitignore"); - } - return { - skillPath, - audioSkillPath, - reportSkillPath, - legalSkillPath, - mcpConfigPath, - claudeConfigPath, - codexConfigPath, - kimiConfigPath, - opencodeConfigPath, - clineConfigPath, - agentSetupPath, - readmePath, - agentHelpers, - mcpServerName, - mcpCommand: serveCommand.command, - mcpArgs: serveCommand.args, - written, - }; -} -export async function installAgentSkills(options = {}) { - const cwd = path.resolve(options.cwd ?? process.cwd()); - const scope = options.scope ?? "project"; - const requestedMode = options.mode ?? "link"; - const homeDir = path.resolve(options.homeDir ?? process.env.HOME ?? process.cwd()); - const env = options.env ?? process.env; - const agents = options.agents ?? SUPPORTED_AGENT_TARGETS; - const projectKit = await installSkill({ cwd, agents }); - const sourceDir = path.dirname(projectKit.skillPath); - const installations = []; - const written = []; - for (const agent of agents) { - const destination = AGENT_DESTINATIONS[agent]; - const targetDir = agentTargetDir(agent, scope, cwd, homeDir, env); - await mkdir(targetDir, { recursive: true }); - const { mode, skillPaths } = await exposeAgentSkills(sourceDir, targetDir, requestedMode); - written.push(...skillPaths.map((skillPath) => displayPath(cwd, skillPath))); - installations.push({ - agent, - label: destination.label, - scope, - mode, - targetDir, - skillPaths, - }); - } - return { - projectKit, - installations, - written, - }; -} -async function resolveMcpCommand(cwd, options) { - if (options.mcpCommand === undefined) { - if (options.mcpArgs !== undefined && options.mcpArgs.length > 0) { - throw new Error("--mcp-arg requires --mcp-command."); - } - return ragmirCommand(cwd, ["serve-mcp"]); - } - const command = options.mcpCommand.trim(); - if (command.length === 0) { - throw new Error("--mcp-command cannot be empty."); - } - const args = [...(options.mcpArgs ?? [])]; - return { - command, - args, - display: formatCommand(command, args), - }; -} -function normalizeMcpServerName(value) { - const name = value?.trim() || DEFAULT_MCP_SERVER_NAME; - if (!MCP_SERVER_NAME_PATTERN.test(name)) { - throw new Error("--mcp-name must contain only letters, numbers, underscores, or hyphens so it can be used in TOML MCP config."); - } - return name; -} -async function writeAgentMcpHelper(agent, input) { - switch (agent) { - case "claude": - await writeFile(input.claudeConfigPath, `${JSON.stringify(claudeMcpServer(input.serveCommand), null, 2)}\n`, "utf8"); - return; - case "codex": - await writeFile(input.codexConfigPath, codexMcpConfig(input.cwd, input.serveCommand, input.mcpServerName), "utf8"); - return; - case "opencode": - await writeFile(input.opencodeConfigPath, opencodeConfig(input.cwd, input.serveCommand, input.mcpServerName), "utf8"); - return; - case "kimi": - case "cline": - await writeFile(agent === "kimi" ? input.kimiConfigPath : input.clineConfigPath, `${JSON.stringify(mcpConfig(input.cwd, input.serveCommand, { [RAGMIR_PROJECT_ROOT_ENV]: input.cwd }, input.mcpServerName), null, 2)}\n`, "utf8"); - } -} -async function copyBundledSkills(targetDir) { - await Promise.all(SKILL_NAMES.map((skillName) => cp(bundledSkillPath(skillName), path.join(targetDir, skillName), { - recursive: true, - force: true, - }))); -} -async function exposeAgentSkills(sourceDir, targetDir, requestedMode) { - if (requestedMode === "copy") { - return copyAgentSkills(sourceDir, targetDir); - } - try { - return await linkAgentSkills(sourceDir, targetDir); - } - catch { - return copyAgentSkills(sourceDir, targetDir); - } -} -async function linkAgentSkills(sourceDir, targetDir) { - const skillPaths = []; - for (const skillName of SKILL_NAMES) { - const source = path.join(sourceDir, skillName); - const target = path.join(targetDir, skillName); - await replaceWithDirectorySymlink(source, target); - skillPaths.push(target); - } - return { mode: "link", skillPaths }; -} -async function copyAgentSkills(sourceDir, targetDir) { - const skillPaths = []; - for (const skillName of SKILL_NAMES) { - const source = path.join(sourceDir, skillName); - const target = path.join(targetDir, skillName); - await rm(target, { recursive: true, force: true }); - await cp(source, target, { recursive: true, force: true }); - skillPaths.push(target); - } - return { mode: "copy", skillPaths }; -} -async function replaceWithDirectorySymlink(source, target) { - if (path.resolve(source) === path.resolve(target)) { - return; - } - await rm(target, { recursive: true, force: true }); - await symlink(source, target, process.platform === "win32" ? "junction" : "dir"); -} -function agentTargetDir(agent, scope, cwd, homeDir, env) { - const destination = AGENT_DESTINATIONS[agent]; - const override = env[destination.env]; - if (override) { - return path.resolve(expandHome(override, homeDir)); - } - if (scope === "project") { - return path.resolve(cwd, destination.projectDir); - } - return destination.userDir(homeDir); -} -function expandHome(input, homeDir) { - if (input === "~") { - return homeDir; - } - if (input.startsWith("~/")) { - return path.join(homeDir, input.slice(2)); - } - return input; -} -function displayPath(cwd, filePath) { - const relative = path.relative(cwd, filePath); - if (relative && !relative.startsWith("..") && !path.isAbsolute(relative)) { - return relative; - } - return filePath; -} -function mcpConfig(cwd, serveCommand, env, serverName = DEFAULT_MCP_SERVER_NAME) { - const serverConfig = { - command: serveCommand.command, - args: serveCommand.args, - cwd, - }; - const config = { - mcpServers: { - [serverName]: serverConfig, - }, - }; - if (env) { - serverConfig.env = env; - } - return config; -} -function claudeMcpServer(serveCommand) { - return { - type: "stdio", - command: serveCommand.command, - args: serveCommand.args, - }; -} -function codexMcpConfig(cwd, serveCommand, serverName = DEFAULT_MCP_SERVER_NAME) { - return `[mcp_servers.${serverName}] -command = ${tomlString(serveCommand.command)} -args = ${tomlArray(serveCommand.args)} -cwd = ${tomlString(cwd)} - -[[skills.config]] -path = ${tomlString(path.join(cwd, DEFAULT_SKILL_TARGET_DIR, PRIMARY_SKILL_NAME))} -enabled = true - -[[skills.config]] -path = ${tomlString(path.join(cwd, DEFAULT_SKILL_TARGET_DIR, AUDIO_SKILL_NAME))} -enabled = true - -[[skills.config]] -path = ${tomlString(path.join(cwd, DEFAULT_SKILL_TARGET_DIR, REPORT_SKILL_NAME))} -enabled = true - -[[skills.config]] -path = ${tomlString(path.join(cwd, DEFAULT_SKILL_TARGET_DIR, LEGAL_SKILL_NAME))} -enabled = true - -`; -} -function opencodeConfig(cwd, serveCommand, serverName = DEFAULT_MCP_SERVER_NAME) { - const config = { - $schema: "https://opencode.ai/config.json", - mcp: { - [serverName]: { - type: "local", - command: [serveCommand.command, ...serveCommand.args], - enabled: true, - environment: { - [RAGMIR_PROJECT_ROOT_ENV]: cwd, - }, - }, - }, - }; - return `${JSON.stringify(config, null, 2)}\n`; -} -function tomlArray(values) { - return `[${values.map(tomlString).join(", ")}]`; -} -function tomlString(value) { - return JSON.stringify(value); -} -function formatCommand(command, args) { - return [command, ...args].map(formatCommandArg).join(" "); -} -function formatCommandArg(value) { - return /^[A-Za-z0-9_./:@%+=,-]+$/u.test(value) ? value : JSON.stringify(value); -} -function mcpHelperGuide(input) { - const sections = [ - `Generic MCP config for server \`${input.mcpServerName}\`: - -\`\`\`plain text -${input.mcpConfigPath} -\`\`\` - -Use the MCP server when your agent supports MCP tools. The server command is: - -\`\`\`bash -${input.serveCommand} -\`\`\``, - ]; - if (hasAgentHelper(input, "claude")) { - sections.push(`Claude Code local MCP setup: - -\`\`\`bash -claude mcp add-json --scope local ${input.mcpServerName} "$(cat ${RAGMIR_DIR}/claude-mcp-server.json)" -\`\`\` - -Run that command from this repository root. Ragmir also reads \`CLAUDE_PROJECT_DIR\`, so the server -uses the active Claude Code project as the knowledge-base root.`); - } - if (hasAgentHelper(input, "codex")) { - sections.push(`Codex setup: - -\`\`\`plain text -${input.codexConfigPath} -\`\`\` - -Copy that TOML snippet into \`~/.codex/config.toml\` or another trusted Codex config layer.`); - } - if (hasAgentHelper(input, "kimi")) { - sections.push(`Kimi Code CLI setup: - -\`\`\`bash -kimi --mcp-config-file ${input.kimiConfigPath} -\`\`\``); - } - if (hasAgentHelper(input, "opencode")) { - sections.push(`OpenCode setup: - -\`\`\`plain text -${input.opencodeConfigPath} -\`\`\``); - } - if (hasAgentHelper(input, "cline")) { - sections.push(`Cline setup: - -\`\`\`plain text -${input.clineConfigPath} -\`\`\``); - } - const missingAgents = SUPPORTED_AGENT_TARGETS.filter((agent) => !hasAgentHelper(input, agent)); - if (missingAgents.length > 0) { - sections.push("Only selected MCP helper files were generated. Re-run setup or install-skill with `--agents all` if this repository later needs every supported agent helper."); - } - sections.push("For other MCP clients that cannot set a working directory, launch the server with `RAGMIR_PROJECT_ROOT=/absolute/path/to/repository`."); - return sections.join("\n\n"); -} -function hasAgentHelper(input, agent) { - return input.agentHelpers.some((helper) => helper.agent === agent); -} -function installAgentCommandExample(command, agents) { - return command.replace(/--agents [^\s]+/u, `--agents ${agents}`); -} -function agentKitReadme(input) { - return `# Ragmir Agent Kit - -This folder contains portable agent instructions for Ragmir. - -## Skill - -Skill folder: - -\`\`\`plain text -${input.skillPath} -\`\`\` - -Agents that support skill folders can load that folder directly. - -Optional audio-summary skill folder: - -\`\`\`plain text -${input.audioSkillPath} -\`\`\` - -Use it only when the user asks for a listenable summary. It renders generated audio under ignored -local Ragmir state by default. Use Transformers.js WAV for confidential content and Edge MP3 only -when online TTS is explicitly acceptable. - -Optional Markdown-report skill folder: - -\`\`\`plain text -${input.reportSkillPath} -\`\`\` - -Use it when the user asks for a cited Markdown report, dossier, audit memo, or planning note. It -writes reports under ignored local Ragmir state by default. - -Optional legal-dossier skill folder: - -\`\`\`plain text -${input.legalSkillPath} -\`\`\` - -Use it when the user asks for legal chronology, clause review, evidence tables, or professional -handoff notes. It prepares cited work products only; it does not provide final legal advice. - -## MCP - -${mcpHelperGuide(input)} - -## Native Agent Setup - -For automatic skill discovery in one or more supported agents, run: - -\`\`\`bash -${input.installAgentCommand} -\`\`\` - -Use \`--agents claude\`, \`--agents kimi\`, or a comma-separated list when the user only uses one -agent. Use \`--scope user\` for global installs and \`--scope project\` for repository-local agent -folders. By default, native agent folders link back to \`.ragmir/skills/\` so there is one source of -truth. Use \`--mode copy\` only when an agent or filesystem cannot follow symlinks. - -Detailed setup notes: - -\`\`\`plain text -${input.agentSetupPath} -\`\`\` - -Before relying on retrieved context, run: - -\`\`\`bash -${input.doctorCommand} -\`\`\` - -`; -} -function agentSetupGuide(input) { - return `# Ragmir Agent Setup - -Ragmir keeps the repository-local source of truth under \`.ragmir/skills/\`. Native agent folders link -to that source by default, so there is one original version to update. Install only the agents you -use. - -## Install Native Skills - -\`\`\`bash -${input.installAgentCommand} -\`\`\` - -Examples: - -\`\`\`bash -${installAgentCommandExample(input.installAgentCommand, "claude")} -${installAgentCommandExample(input.installAgentCommand, "kimi")} -${installAgentCommandExample(input.installAgentCommand, "claude,codex,kimi,opencode,cline")} -${installAgentCommandExample(input.installAgentCommand, "cline")} --mode copy -\`\`\` - -Default project-scope targets: - -| Agent | Project skill directory | User skill directory | -| --- | --- | --- | -| Claude Code | \`.claude/skills/\` | \`~/.claude/skills/\` | -| Codex | \`.codex/skills/\` | \`~/.codex/skills/\` | -| Kimi Code CLI | \`.kimi/skills/\` | \`~/.kimi/skills/\` | -| OpenCode | \`.opencode/skills/\` | \`~/.config/opencode/skills/\` | -| Cline | \`.cline/skills/\` | \`~/.cline/skills/\` | - -Override paths with \`CLAUDE_SKILLS_DIR\`, \`CODEX_SKILLS_DIR\`, \`KIMI_SKILLS_DIR\`, -\`OPENCODE_SKILLS_DIR\`, or \`CLINE_SKILLS_DIR\`. - -Use \`--mode copy\` only when an agent runtime does not follow symlinked skill directories. When using -copy mode, rerun \`install-agent\` after refreshing \`.ragmir/skills/\`. - -## Skill Folders - -\`\`\`plain text -${input.skillPath} -${input.audioSkillPath} -${input.reportSkillPath} -${input.legalSkillPath} -\`\`\` - -## MCP Helpers - -${mcpHelperGuide(input)} - -Before relying on retrieved context, run: - -\`\`\`bash -${input.doctorCommand} -\`\`\` - -`; -} -//# sourceMappingURL=skill.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/skill.js.map b/packages/ragmir-core/dist/skill.js.map deleted file mode 100644 index 918a60c..0000000 --- a/packages/ragmir-core/dist/skill.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"skill.js","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAC7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAsB,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAiExE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAC/E,MAAM,kBAAkB,GAAG,QAAQ,CAAA;AACnC,MAAM,gBAAgB,GAAG,sBAAsB,CAAA;AAC/C,MAAM,iBAAiB,GAAG,wBAAwB,CAAA;AAClD,MAAM,gBAAgB,GAAG,sBAAsB,CAAA;AAC/C,MAAM,uBAAuB,GAAG,QAAQ,CAAA;AACxC,MAAM,uBAAuB,GAAG,mBAAmB,CAAA;AACnD,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,kBAAkB;IAClB,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;CACR,CAAA;AAEV,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAAA;AAC7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAA;AAEpD,MAAM,CAAC,MAAM,uBAAuB,GAA2B;IAC7D,QAAQ;IACR,OAAO;IACP,MAAM;IACN,UAAU;IACV,OAAO;CACC,CAAA;AAEV,MAAM,CAAC,MAAM,6BAA6B,GAAgC;IACxE,MAAM,EAAE,wBAAwB;IAChC,KAAK,EAAE,gBAAgB;IACvB,IAAI,EAAE,eAAe;IACrB,QAAQ,EAAE,gBAAgB;IAC1B,KAAK,EAAE,gBAAgB;CACxB,CAAA;AAED,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAsB;IACxD,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,aAAa,EAAE,QAAQ,CAAC;IACzB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,WAAW,EAAE,MAAM,CAAC;IACrB,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,WAAW,EAAE,UAAU,CAAC;IACzB,CAAC,OAAO,EAAE,OAAO,CAAC;CACnB,CAAC,CAAA;AAEF,MAAM,kBAAkB,GAQpB;IACF,MAAM,EAAE;QACN,KAAK,EAAE,aAAa;QACpB,GAAG,EAAE,mBAAmB;QACxB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;QAC1C,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;KAC9D;IACD,KAAK,EAAE;QACL,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,kBAAkB;QACvB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;QACzC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC;KAC7D;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,eAAe;QACtB,GAAG,EAAE,iBAAiB;QACtB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;QACxC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;KAC5D;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,UAAU;QACjB,GAAG,EAAE,qBAAqB;QAC1B,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;QAC5C,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC;KAC1E;IACD,KAAK,EAAE;QACL,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,kBAAkB;QACvB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;QACzC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC;KAC7D;CACF,CAAA;AAED,MAAM,UAAU,gBAAgB,CAAC,SAAS,GAAG,kBAAkB;IAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;AACrD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAA6C;IAC7E,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QAC3D,OAAO,CAAC,GAAG,uBAAuB,CAAC,CAAA;IACrC,CAAC;IAED,MAAM,OAAO,GACX,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3F,MAAM,OAAO,GAAG,IAAI,GAAG,EAAe,CAAA;IAEtC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAC7C,IAAI,UAAU,KAAK,EAAE,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YAC9C,KAAK,MAAM,MAAM,IAAI,uBAAuB,EAAE,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACrB,CAAC;YACD,SAAQ;QACV,CAAC;QACD,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,yBAAyB,KAAK,4BAA4B,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAChG,CAAA;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACrB,CAAC;IAED,OAAO,CAAC,GAAG,OAAO,CAAC,CAAA;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAA+B,EAAE;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IACtD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,IAAI,wBAAwB,CAAC,CAAA;IAClF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,uBAAuB,CAAC,CAAA;IAChG,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAc,MAAM,CAAC,CAAA;IAC7C,MAAM,aAAa,GAAG,sBAAsB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;IACnE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAA;IAC1D,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAA;IAC7D,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAA;IAC/D,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAA;IAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;IAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAA;IAC/D,MAAM,gBAAgB,GAAgC;QACpD,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC,MAAM,CAAC;QAClE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC,KAAK,CAAC;QAChE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC,IAAI,CAAC;QAC9D,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC,QAAQ,CAAC;QACtE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC,KAAK,CAAC;KACjE,CAAA;IACD,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAA;IAChD,MAAM,eAAe,GAAG,gBAAgB,CAAC,KAAK,CAAA;IAC9C,MAAM,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAA;IAC5C,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,QAAQ,CAAA;IACpD,MAAM,eAAe,GAAG,gBAAgB,CAAC,KAAK,CAAA;IAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAA;IACjE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IAEpD,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3C,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3C,MAAM,iBAAiB,CAAC,SAAS,CAAC,CAAA;IAElC,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAC1D,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC1D,MAAM,mBAAmB,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE;QACnD,eAAe;QACf,UAAU;QACV,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;KACjB,CAAC,CAAA;IACF,MAAM,SAAS,CACb,aAAa,EACb,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EACtF,MAAM,CACP,CAAA;IAED,MAAM,YAAY,GAAsB,EAAE,CAAA;IAC1C,KAAK,MAAM,KAAK,IAAI,uBAAuB,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAC1C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACrC,SAAQ;QACV,CAAC;QACD,MAAM,mBAAmB,CAAC,KAAK,EAAE;YAC/B,GAAG;YACH,YAAY;YACZ,aAAa;YACb,gBAAgB;YAChB,eAAe;YACf,cAAc;YACd,kBAAkB;YAClB,eAAe;SAChB,CAAC,CAAA;QACF,YAAY,CAAC,IAAI,CAAC;YAChB,KAAK;YACL,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,KAAK;YACtC,IAAI,EAAE,UAAU;SACjB,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,SAAS,CACb,cAAc,EACd,eAAe,CAAC;QACd,SAAS;QACT,cAAc;QACd,eAAe;QACf,cAAc;QACd,aAAa;QACb,gBAAgB;QAChB,eAAe;QACf,cAAc;QACd,kBAAkB;QAClB,eAAe;QACf,YAAY;QACZ,aAAa;QACb,mBAAmB,EAAE,mBAAmB,CAAC,OAAO;QAChD,YAAY,EAAE,YAAY,CAAC,OAAO;QAClC,aAAa,EAAE,aAAa,CAAC,OAAO;KACrC,CAAC,EACF,MAAM,CACP,CAAA;IACD,MAAM,SAAS,CACb,UAAU,EACV,cAAc,CAAC;QACb,SAAS;QACT,cAAc;QACd,eAAe;QACf,cAAc;QACd,aAAa;QACb,gBAAgB;QAChB,eAAe;QACf,cAAc;QACd,kBAAkB;QAClB,eAAe;QACf,cAAc;QACd,YAAY;QACZ,aAAa;QACb,mBAAmB,EAAE,mBAAmB,CAAC,OAAO;QAChD,YAAY,EAAE,YAAY,CAAC,OAAO;QAClC,aAAa,EAAE,aAAa,CAAC,OAAO;KACrC,CAAC,EACF,MAAM,CACP,CAAA;IACD,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAA;IAEvD,MAAM,OAAO,GAAG;QACd,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;QACjC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;KAC/B,CAAA;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC5B,CAAC;IAED,OAAO;QACL,SAAS;QACT,cAAc;QACd,eAAe;QACf,cAAc;QACd,aAAa;QACb,gBAAgB;QAChB,eAAe;QACf,cAAc;QACd,kBAAkB;QAClB,eAAe;QACf,cAAc;QACd,UAAU;QACV,YAAY;QACZ,aAAa;QACb,UAAU,EAAE,YAAY,CAAC,OAAO;QAChC,OAAO,EAAE,YAAY,CAAC,IAAI;QAC1B,OAAO;KACR,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAAqC,EAAE;IAEvC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IACtD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,SAAS,CAAA;IACxC,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAA;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAClF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAA;IACtC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,uBAAuB,CAAA;IACxD,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAA;IACtD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;IACpD,MAAM,aAAa,GAA6B,EAAE,CAAA;IAClD,MAAM,OAAO,GAAa,EAAE,CAAA;IAE5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;QAC7C,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;QACjE,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAE3C,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAA;QACzF,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;QAE3E,aAAa,CAAC,IAAI,CAAC;YACjB,KAAK;YACL,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,KAAK;YACL,IAAI;YACJ,SAAS;YACT,UAAU;SACX,CAAC,CAAA;IACJ,CAAC;IAED,OAAO;QACL,UAAU;QACV,aAAa;QACb,OAAO;KACR,CAAA;AACH,CAAC;AAeD,KAAK,UAAU,iBAAiB,CAAC,GAAW,EAAE,OAA4B;IACxE,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;QACtD,CAAC;QACD,OAAO,aAAa,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;IAC1C,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAA;IACzC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnD,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAA;IACzC,OAAO;QACL,OAAO;QACP,IAAI;QACJ,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC;KACtC,CAAA;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAyB;IACvD,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,uBAAuB,CAAA;IACrD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,8GAA8G,CAC/G,CAAA;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,KAAkB,EAClB,KAA+B;IAE/B,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,QAAQ;YACX,MAAM,SAAS,CACb,KAAK,CAAC,gBAAgB,EACtB,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EACnE,MAAM,CACP,CAAA;YACD,OAAM;QACR,KAAK,OAAO;YACV,MAAM,SAAS,CACb,KAAK,CAAC,eAAe,EACrB,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC,EAClE,MAAM,CACP,CAAA;YACD,OAAM;QACR,KAAK,UAAU;YACb,MAAM,SAAS,CACb,KAAK,CAAC,kBAAkB,EACxB,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC,EAClE,MAAM,CACP,CAAA;YACD,OAAM;QACR,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACV,MAAM,SAAS,CACb,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,EAC/D,GAAG,IAAI,CAAC,SAAS,CACf,SAAS,CACP,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,YAAY,EAClB,EAAE,CAAC,uBAAuB,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,EACxC,KAAK,CAAC,aAAa,CACpB,EACD,IAAI,EACJ,CAAC,CACF,IAAI,EACL,MAAM,CACP,CAAA;IACL,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,SAAiB;IAChD,MAAM,OAAO,CAAC,GAAG,CACf,WAAW,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAC5B,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;QAC/D,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,IAAI;KACZ,CAAC,CACH,CACF,CAAA;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,SAAiB,EACjB,SAAiB,EACjB,aAA+B;IAE/B,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;QAC7B,OAAO,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IAC9C,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IAC9C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,SAAiB,EACjB,SAAiB;IAEjB,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC9C,MAAM,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACjD,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACzB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAA;AACrC,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,SAAiB,EACjB,SAAiB;IAEjB,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC9C,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAClD,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1D,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACzB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAA;AACrC,CAAC;AAED,KAAK,UAAU,2BAA2B,CAAC,MAAc,EAAE,MAAc;IACvE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,OAAM;IACR,CAAC;IACD,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAClD,MAAM,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;AAClF,CAAC;AAED,SAAS,cAAc,CACrB,KAAkB,EAClB,KAAwB,EACxB,GAAW,EACX,OAAe,EACf,GAAuC;IAEvC,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACrC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;IACpD,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,UAAU,CAAC,CAAA;IAClD,CAAC;IACD,OAAO,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AACrC,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,OAAe;IAChD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QAClB,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3C,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,QAAgB;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC7C,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzE,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,SAAS,CAChB,GAAW,EACX,YAAwB,EACxB,GAA4B,EAC5B,UAAU,GAAG,uBAAuB;IAEpC,MAAM,YAAY,GAKd;QACF,OAAO,EAAE,YAAY,CAAC,OAAO;QAC7B,IAAI,EAAE,YAAY,CAAC,IAAI;QACvB,GAAG;KACJ,CAAA;IACD,MAAM,MAAM,GAUR;QACF,UAAU,EAAE;YACV,CAAC,UAAU,CAAC,EAAE,YAAY;SAC3B;KACF,CAAA;IACD,IAAI,GAAG,EAAE,CAAC;QACR,YAAY,CAAC,GAAG,GAAG,GAAG,CAAA;IACxB,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,eAAe,CAAC,YAAwB;IAC/C,OAAO;QACL,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,YAAY,CAAC,OAAO;QAC7B,IAAI,EAAE,YAAY,CAAC,IAAI;KACxB,CAAA;AACH,CAAC;AAED,SAAS,cAAc,CACrB,GAAW,EACX,YAAwB,EACxB,UAAU,GAAG,uBAAuB;IAEpC,OAAO,gBAAgB,UAAU;YACvB,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC;SACnC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC;QAC7B,UAAU,CAAC,GAAG,CAAC;;;SAGd,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,wBAAwB,EAAE,kBAAkB,CAAC,CAAC;;;;SAIxE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,wBAAwB,EAAE,gBAAgB,CAAC,CAAC;;;;SAItE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,wBAAwB,EAAE,iBAAiB,CAAC,CAAC;;;;SAIvE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,wBAAwB,EAAE,gBAAgB,CAAC,CAAC;;;CAG9E,CAAA;AACD,CAAC;AAED,SAAS,cAAc,CACrB,GAAW,EACX,YAAwB,EACxB,UAAU,GAAG,uBAAuB;IAEpC,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,iCAAiC;QAC1C,GAAG,EAAE;YACH,CAAC,UAAU,CAAC,EAAE;gBACZ,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC;gBACrD,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE;oBACX,CAAC,uBAAuB,CAAC,EAAE,GAAG;iBAC/B;aACF;SACF;KACF,CAAA;IACD,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAA;AAC/C,CAAC;AAED,SAAS,SAAS,CAAC,MAAgB;IACjC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;AACjD,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAED,SAAS,aAAa,CAAC,OAAe,EAAE,IAAuB;IAC7D,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC3D,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAChF,CAAC;AAcD,SAAS,cAAc,CAAC,KAA0B;IAChD,MAAM,QAAQ,GAAG;QACf,mCAAmC,KAAK,CAAC,aAAa;;;EAGxD,KAAK,CAAC,aAAa;;;;;;EAMnB,KAAK,CAAC,YAAY;OACb;KACJ,CAAA;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC;;;oCAGkB,KAAK,CAAC,aAAa,WAAW,UAAU;;;;gEAIZ,CAAC,CAAA;IAC/D,CAAC;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;QACnC,QAAQ,CAAC,IAAI,CAAC;;;EAGhB,KAAK,CAAC,eAAe;;;4FAGqE,CAAC,CAAA;IAC3F,CAAC;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC;;;yBAGO,KAAK,CAAC,cAAc;OACtC,CAAC,CAAA;IACN,CAAC;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;QACtC,QAAQ,CAAC,IAAI,CAAC;;;EAGhB,KAAK,CAAC,kBAAkB;OACnB,CAAC,CAAA;IACN,CAAC;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;QACnC,QAAQ,CAAC,IAAI,CAAC;;;EAGhB,KAAK,CAAC,eAAe;OAChB,CAAC,CAAA;IACN,CAAC;IAED,MAAM,aAAa,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;IAC9F,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CACX,+JAA+J,CAChK,CAAA;IACH,CAAC;IAED,QAAQ,CAAC,IAAI,CACX,uIAAuI,CACxI,CAAA;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAC9B,CAAC;AAED,SAAS,cAAc,CAAC,KAA0B,EAAE,KAAkB;IACpE,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAA;AACpE,CAAC;AAED,SAAS,0BAA0B,CAAC,OAAe,EAAE,MAAc;IACjE,OAAO,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,YAAY,MAAM,EAAE,CAAC,CAAA;AAClE,CAAC;AAqBD,SAAS,cAAc,CAAC,KAA0B;IAChD,OAAO;;;;;;;;;EASP,KAAK,CAAC,SAAS;;;;;;;;EAQf,KAAK,CAAC,cAAc;;;;;;;;;;EAUpB,KAAK,CAAC,eAAe;;;;;;;;;EASrB,KAAK,CAAC,cAAc;;;;;;;;EAQpB,cAAc,CAAC,KAAK,CAAC;;;;;;;EAOrB,KAAK,CAAC,mBAAmB;;;;;;;;;;;EAWzB,KAAK,CAAC,cAAc;;;;;;EAMpB,KAAK,CAAC,aAAa;;;CAGpB,CAAA;AACD,CAAC;AAoBD,SAAS,eAAe,CAAC,KAA2B;IAClD,OAAO;;;;;;;;;EASP,KAAK,CAAC,mBAAmB;;;;;;EAMzB,0BAA0B,CAAC,KAAK,CAAC,mBAAmB,EAAE,QAAQ,CAAC;EAC/D,0BAA0B,CAAC,KAAK,CAAC,mBAAmB,EAAE,MAAM,CAAC;EAC7D,0BAA0B,CAAC,KAAK,CAAC,mBAAmB,EAAE,kCAAkC,CAAC;EACzF,0BAA0B,CAAC,KAAK,CAAC,mBAAmB,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;EAsB9D,KAAK,CAAC,SAAS;EACf,KAAK,CAAC,cAAc;EACpB,KAAK,CAAC,eAAe;EACrB,KAAK,CAAC,cAAc;;;;;EAKpB,cAAc,CAAC,KAAK,CAAC;;;;;EAKrB,KAAK,CAAC,aAAa;;;CAGpB,CAAA;AACD,CAAC"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/sources.d.ts b/packages/ragmir-core/dist/sources.d.ts deleted file mode 100644 index 28d0bf3..0000000 --- a/packages/ragmir-core/dist/sources.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -export interface SourceEntriesResult { - sourcesFile: string; - entries: string[]; -} -export interface AddSourceEntriesOptions { - cwd?: string; - entries: readonly string[]; -} -export interface AddSourceEntriesResult { - sourcesFile: string; - added: string[]; - skipped: string[]; -} -export declare function listSourceEntries(cwd?: string): Promise; -export declare function addSourceEntries(options: AddSourceEntriesOptions): Promise; -//# sourceMappingURL=sources.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/sources.d.ts.map b/packages/ragmir-core/dist/sources.d.ts.map deleted file mode 100644 index 884f657..0000000 --- a/packages/ragmir-core/dist/sources.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../src/sources.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,wBAAsB,iBAAiB,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAOzF;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,sBAAsB,CAAC,CA+BjC"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/sources.js b/packages/ragmir-core/dist/sources.js deleted file mode 100644 index fb8868a..0000000 --- a/packages/ragmir-core/dist/sources.js +++ /dev/null @@ -1,71 +0,0 @@ -import { existsSync } from "node:fs"; -import { mkdir, readFile, writeFile } from "node:fs/promises"; -import path from "node:path"; -import { loadConfig } from "./config.js"; -import { SOURCES_FILE_HEADER } from "./defaults.js"; -export async function listSourceEntries(cwd = process.cwd()) { - const config = await loadConfig(cwd); - const content = await readSourcesFile(config.sourcesFile); - return { - sourcesFile: config.sourcesFile, - entries: content ? parseSourceEntries(content) : [], - }; -} -export async function addSourceEntries(options) { - const entries = normalizeRequestedEntries(options.entries); - if (entries.length === 0) { - throw new Error("At least one source path or glob is required."); - } - const config = await loadConfig(options.cwd); - const content = await readSourcesFile(config.sourcesFile); - const existingEntries = new Set(content ? parseSourceEntries(content) : []); - const added = []; - const skipped = []; - for (const entry of entries) { - if (existingEntries.has(entry)) { - skipped.push(entry); - continue; - } - existingEntries.add(entry); - added.push(entry); - } - if (added.length > 0) { - await mkdir(path.dirname(config.sourcesFile), { recursive: true }); - await writeFile(config.sourcesFile, nextSourcesFileContent(content, added), "utf8"); - } - return { - sourcesFile: config.sourcesFile, - added, - skipped, - }; -} -async function readSourcesFile(sourcesFile) { - if (!existsSync(sourcesFile)) { - return null; - } - return readFile(sourcesFile, "utf8"); -} -function parseSourceEntries(content) { - return content - .split(/\r?\n/u) - .map((line) => line.trim()) - .filter((line) => line.length > 0 && !line.startsWith("#")); -} -function normalizeRequestedEntries(entries) { - const normalized = []; - const seen = new Set(); - for (const entry of entries) { - const trimmed = entry.trim(); - if (!trimmed || seen.has(trimmed)) { - continue; - } - seen.add(trimmed); - normalized.push(trimmed); - } - return normalized; -} -function nextSourcesFileContent(currentContent, added) { - const base = currentContent === null ? SOURCES_FILE_HEADER.join("\n") : currentContent.trimEnd(); - return `${base ? `${base}\n` : ""}${added.join("\n")}\n`; -} -//# sourceMappingURL=sources.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/sources.js.map b/packages/ragmir-core/dist/sources.js.map deleted file mode 100644 index 8821fe3..0000000 --- a/packages/ragmir-core/dist/sources.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"sources.js","sourceRoot":"","sources":["../src/sources.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/store.d.ts b/packages/ragmir-core/dist/store.d.ts deleted file mode 100644 index 70ab07e..0000000 --- a/packages/ragmir-core/dist/store.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import * as lancedb from "@lancedb/lancedb"; -import type { Config, VectorRow } from "./types.js"; -export interface EmptyTextFileRecord { - relativePath: string; - checksum: string; -} -export declare function writeRows(rows: VectorRow[], config: Config): Promise; -export declare function writeEmptyTextFiles(records: EmptyTextFileRecord[], config: Config): Promise; -export declare function readEmptyTextFiles(config: Config): Promise; -export declare function openRowsTable(config: Config): Promise; -export declare function readRows(config: Config): Promise; -export declare function countRows(config: Config): Promise; -//# sourceMappingURL=store.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/store.d.ts.map b/packages/ragmir-core/dist/store.d.ts.map deleted file mode 100644 index 2039992..0000000 --- a/packages/ragmir-core/dist/store.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAE3C,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAInD,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhF;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,mBAAmB,EAAE,EAC9B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAevF;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAOjF;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CASnE;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG/D"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/store.js b/packages/ragmir-core/dist/store.js deleted file mode 100644 index 733d0ab..0000000 --- a/packages/ragmir-core/dist/store.js +++ /dev/null @@ -1,94 +0,0 @@ -import { mkdir, readFile, rm, writeFile } from "node:fs/promises"; -import path from "node:path"; -import * as lancedb from "@lancedb/lancedb"; -import { isRecord } from "./guards.js"; -const EMPTY_TEXT_FILES_MANIFEST = "empty-text-files.json"; -export async function writeRows(rows, config) { - await mkdir(config.storageDir, { recursive: true }); - const db = await lancedb.connect(config.storageDir); - if (rows.length === 0) { - const tableNames = await db.tableNames(); - if (tableNames.includes(config.tableName)) { - await db.dropTable(config.tableName); - } - return; - } - const records = rows.map((row) => ({ ...row })); - await db.createTable(config.tableName, records, { - mode: "overwrite", - }); -} -export async function writeEmptyTextFiles(records, config) { - const manifestPath = path.join(config.storageDir, EMPTY_TEXT_FILES_MANIFEST); - if (records.length === 0) { - await rm(manifestPath, { force: true }); - return; - } - await mkdir(config.storageDir, { recursive: true }); - const sortedRecords = [...records].sort((a, b) => a.relativePath.localeCompare(b.relativePath)); - await writeFile(manifestPath, JSON.stringify({ version: 1, files: sortedRecords }, null, 2), "utf8"); -} -export async function readEmptyTextFiles(config) { - try { - const manifest = JSON.parse(await readFile(path.join(config.storageDir, EMPTY_TEXT_FILES_MANIFEST), "utf8")); - if (!isRecord(manifest) || !Array.isArray(manifest.files)) { - return []; - } - return manifest.files.filter(isEmptyTextFileRecord); - } - catch (error) { - if (isNodeError(error) && error.code === "ENOENT") { - return []; - } - throw error; - } -} -export async function openRowsTable(config) { - const db = await lancedb.connect(config.storageDir); - const tableNames = await db.tableNames(); - if (!tableNames.includes(config.tableName)) { - return null; - } - return db.openTable(config.tableName); -} -export async function readRows(config) { - const table = await openRowsTable(config); - if (!table) { - return []; - } - return (await table.query().toArray()).map((row) => ({ - ...row, - vector: normalizeVector(row.vector), - })); -} -export async function countRows(config) { - const table = await openRowsTable(config); - return table ? table.countRows() : 0; -} -function normalizeVector(vector) { - if (Array.isArray(vector) && vector.every((value) => typeof value === "number")) { - return vector; - } - if (ArrayBuffer.isView(vector) && "length" in vector) { - return Array.from(vector); - } - if (hasIndexedNumberGetter(vector)) { - return Array.from({ length: vector.length }, (_, index) => vector.get(index)); - } - throw new Error("Stored vector row is not a numeric vector."); -} -function hasIndexedNumberGetter(value) { - return (typeof value === "object" && - value !== null && - "length" in value && - typeof value.length === "number" && - "get" in value && - typeof value.get === "function"); -} -function isEmptyTextFileRecord(value) { - return (isRecord(value) && typeof value.relativePath === "string" && typeof value.checksum === "string"); -} -function isNodeError(error) { - return error instanceof Error && "code" in error; -} -//# sourceMappingURL=store.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/store.js.map b/packages/ragmir-core/dist/store.js.map deleted file mode 100644 index 5ed307f..0000000 --- a/packages/ragmir-core/dist/store.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/text.d.ts b/packages/ragmir-core/dist/text.d.ts deleted file mode 100644 index c03b458..0000000 --- a/packages/ragmir-core/dist/text.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export declare function normalizeForMatch(text: string): string; -export declare function tokenize(text: string): string[]; -//# sourceMappingURL=text.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/text.d.ts.map b/packages/ragmir-core/dist/text.d.ts.map deleted file mode 100644 index f985f2a..0000000 --- a/packages/ragmir-core/dist/text.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAE/C"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/text.js b/packages/ragmir-core/dist/text.js deleted file mode 100644 index de09d26..0000000 --- a/packages/ragmir-core/dist/text.js +++ /dev/null @@ -1,10 +0,0 @@ -export function normalizeForMatch(text) { - return text - .toLowerCase() - .normalize("NFKD") - .replace(/\p{Diacritic}/gu, ""); -} -export function tokenize(text) { - return normalizeForMatch(text).match(/[\p{L}\p{N}]{2,}/gu) ?? []; -} -//# sourceMappingURL=text.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/text.js.map b/packages/ragmir-core/dist/text.js.map deleted file mode 100644 index 39d8922..0000000 --- a/packages/ragmir-core/dist/text.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"text.js","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI;SACR,WAAW,EAAE;SACb,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAA;AAClE,CAAC"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/types.d.ts b/packages/ragmir-core/dist/types.d.ts deleted file mode 100644 index aacc8b2..0000000 --- a/packages/ragmir-core/dist/types.d.ts +++ /dev/null @@ -1,322 +0,0 @@ -import type { PathLike } from "node:fs"; -import type { PackageManager } from "./package-manager.js"; -export interface Config { - projectRoot: string; - rawDir: string; - storageDir: string; - sourcesFile: string; - sources: string[]; - accessLogPath: string; - embeddingModelPath: string; - tableName: string; - embeddingProvider: EmbeddingProvider; - embeddingModel: string; - transformersAllowRemoteModels: boolean; - redaction: RedactionConfig; - accessLog: boolean; - mcpMaxTopK: number; - topK: number; - chunkSize: number; - chunkOverlap: number; - maxFileBytes: number; - ingestConcurrency: number; - embeddingBatchSize: number; - includeExtensions: string[]; - pdfOcrCommand: string[]; - pdfOcrTimeoutMs: number; - imageOcrCommand: string[]; - imageOcrTimeoutMs: number; - legacyWordCommand: string[]; - legacyWordTimeoutMs: number; -} -export type AccessLogAction = "ingest" | "search" | "ask" | "research" | "evaluate" | "destroy-index"; -export interface AccessLogUsageOptions { - cwd?: PathLike; - days?: number; -} -export interface AccessLogUsageReport { - accessLogEnabled: boolean; - since: string; - until: string; - totalEvents: number; - invalidLines: number; - eventsByAction: Record; - uniqueQueryHashes: number; - averageResultCount: number | null; - lastEventAt: string | null; -} -export type EmbeddingProvider = "local-hash" | "transformers"; -export interface RedactionConfig { - enabled: boolean; - builtIn: boolean; - patterns: RedactionPattern[]; -} -export interface RedactionPattern { - name: string; - pattern: string; - flags?: string | undefined; - replacement?: string | undefined; -} -export interface RedactionCount { - name: string; - count: number; -} -export interface SourceFile { - absolutePath: string; - relativePath: string; - source: string; - extension: string; - bytes: number; - mtimeMs: number; - checksum: string; -} -export type SkippedSourceReason = "unsupported-extension" | "oversized" | "sensitive-name"; -export interface SkippedSourceFile { - relativePath: string; - source: string; - extension: string; - bytes: number; - reason: SkippedSourceReason; - recommendation: string; -} -export interface SourceInventory { - discoveredFiles: number; - supportedFiles: SourceFile[]; - skippedFiles: SkippedSourceFile[]; -} -export interface ParsedDocument { - file: SourceFile; - text: string; -} -export interface TextChunk { - id: string; - source: string; - relativePath: string; - chunkIndex: number; - text: string; - checksum: string; - bytes: number; - mtimeMs: number; -} -export interface VectorRow extends TextChunk { - vector: number[]; - embeddingProvider: EmbeddingProvider; - embeddingModel: string; -} -export interface IngestOptions { - cwd?: PathLike; - rebuild?: boolean; -} -export interface IngestResult { - discoveredFiles: number; - supportedFiles: number; - indexedFiles: number; - rebuiltFiles: number; - reusedFiles: number; - chunks: number; - skippedFiles: number; - unsupportedFiles: number; - oversizedFiles: number; - sensitiveFiles: number; - emptyTextFiles: string[]; - unsupportedExtensions: Array<{ - extension: string; - count: number; - }>; - redactions: number; - errors: Array<{ - path: string; - message: string; - }>; -} -export interface SearchOptions { - cwd?: PathLike; - topK?: number; -} -export interface SearchResult { - source: string; - relativePath: string; - chunkIndex: number; - text: string; - distance: number | null; -} -export interface CompactSearchResult { - source: string; - relativePath: string; - chunkIndex: number; - snippet: string; - distance: number | null; -} -export interface SourceDuplicateCandidate { - key: string; - files: string[]; -} -export interface SourcePathCandidate { - relativePath: string; - reason: string; -} -export interface SourceDiagnostics { - duplicateCandidates: SourceDuplicateCandidate[]; - archiveCandidates: SourcePathCandidate[]; - mirrorCandidates: SourcePathCandidate[]; -} -export interface ResearchOptions { - cwd?: PathLike; - topK?: number; - includeCode?: boolean; -} -export interface ResearchEvidence { - source: string; - relativePath: string; - chunkIndex: number; - text: string; - distance: number | null; - queries: string[]; -} -export interface CodeEvidence { - relativePath: string; - lineNumber: number; - snippet: string; - matchedTerms: string[]; -} -export interface ResearchReport { - query: string; - generatedQueries: string[]; - ready: boolean; - audit: { - supportedFiles: number; - skippedFiles: number; - unsupportedFiles: number; - indexedFiles: number; - totalChunks: number; - missingFromIndex: number; - staleInIndex: number; - emptyTextFiles: number; - }; - securityWarnings: string[]; - sourceDiagnostics: SourceDiagnostics; - evidence: ResearchEvidence[]; - codeEvidence: CodeEvidence[]; - gaps: string[]; - nextSteps: string[]; -} -export interface GoldenQuery { - id?: string; - query: string; - expectedPaths: string[]; - topK?: number; -} -export interface EvaluationOptions { - cwd?: PathLike; - goldenPath: PathLike; - topK?: number; - maxTopK?: number; -} -export interface EvaluationCaseResult { - id?: string; - query: string; - expectedPaths: string[]; - topK: number; - returnedPaths: string[]; - matchedPaths: string[]; - hit: boolean; - bestRank: number | null; -} -export interface EvaluationResult { - goldenPath: string; - embeddingProvider: EmbeddingProvider; - embeddingModel: string; - topK: number; - total: number; - hits: number; - misses: number; - recall: number; - cases: EvaluationCaseResult[]; -} -export interface AskResult { - answer: string; - sources: SearchResult[]; -} -export interface AuditReport { - indexedFiles: Array<{ - source: string; - chunks: number; - }>; - supportedFiles: string[]; - skippedFiles: SkippedSourceFile[]; - emptyTextFiles: string[]; - unsupportedExtensions: Array<{ - extension: string; - count: number; - }>; - sourceDiagnostics: SourceDiagnostics; - missingFromIndex: string[]; - staleInIndex: string[]; - totalChunks: number; -} -export interface DestroyIndexResult { - storageDir: string; - removed: boolean; - note: string; -} -export interface DoctorReport { - projectRoot: string; - initialized: boolean; - packageManager: PackageManager; - runCommand: string; - agentKitInstalled: boolean; - rawDir: string; - storageDir: string; - embeddingProvider: EmbeddingProvider; - transformersAllowRemoteModels: boolean; - redactionEnabled: boolean; - accessLog: boolean; - supportedFiles: number; - skippedFiles: number; - unsupportedFiles: number; - indexedFiles: number; - chunksIndexed: number; - missingFromIndex: number; - staleInIndex: number; - securityWarnings: string[]; - ready: boolean; - nextSteps: string[]; -} -export interface SecurityAuditReport { - projectRoot: string; - zeroTelemetry: true; - providers: { - embedding: EmbeddingProvider; - embeddingModel: string; - embeddingModelPath: string; - transformersAllowRemoteModels: boolean; - llmGeneration: false; - }; - redaction: { - enabled: boolean; - builtIn: boolean; - customPatterns: string[]; - }; - accessLog: { - enabled: boolean; - path: string; - storesRawQueries: false; - }; - storage: { - path: string; - gitIgnored: boolean; - encryptedAtRest: "external-required"; - }; - mcp: { - maxTopK: number; - destructiveToolsExposed: false; - }; - gitignore: { - legacyKbIgnored: boolean; - ragmirIgnored: boolean; - legacyPrivateIgnored: boolean; - }; - recommendations: string[]; - warnings: string[]; -} -//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/types.d.ts.map b/packages/ragmir-core/dist/types.d.ts.map deleted file mode 100644 index 4ac87d0..0000000 --- a/packages/ragmir-core/dist/types.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/types.js b/packages/ragmir-core/dist/types.js deleted file mode 100644 index 718fd38..0000000 --- a/packages/ragmir-core/dist/types.js +++ /dev/null @@ -1,2 +0,0 @@ -export {}; -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/types.js.map b/packages/ragmir-core/dist/types.js.map deleted file mode 100644 index c768b79..0000000 --- a/packages/ragmir-core/dist/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/ragmir-core/dist/version.d.ts b/packages/ragmir-core/dist/version.d.ts deleted file mode 100644 index c8b0009..0000000 --- a/packages/ragmir-core/dist/version.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare const VERSION = "0.4.12"; -//# sourceMappingURL=version.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/version.d.ts.map b/packages/ragmir-core/dist/version.d.ts.map deleted file mode 100644 index 7b03313..0000000 --- a/packages/ragmir-core/dist/version.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,WAAW,CAAA"} \ No newline at end of file diff --git a/packages/ragmir-core/dist/version.js b/packages/ragmir-core/dist/version.js deleted file mode 100644 index 5ee9fb4..0000000 --- a/packages/ragmir-core/dist/version.js +++ /dev/null @@ -1,2 +0,0 @@ -export const VERSION = "0.4.12"; -//# sourceMappingURL=version.js.map \ No newline at end of file diff --git a/packages/ragmir-core/dist/version.js.map b/packages/ragmir-core/dist/version.js.map deleted file mode 100644 index b56d0f7..0000000 --- a/packages/ragmir-core/dist/version.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAA"} \ No newline at end of file diff --git a/packages/ragmir-core/package.json b/packages/ragmir-core/package.json index 174ca78..33fa353 100644 --- a/packages/ragmir-core/package.json +++ b/packages/ragmir-core/package.json @@ -56,10 +56,10 @@ }, "scripts": { "build": "tsc -p tsconfig.json", - "check": "tsc -p tsconfig.json --noEmit", + "check": "pnpm --filter @jcode.labs/ragmir-tts build && tsc -p tsconfig.json --noEmit", "mcp:smoke": "pnpm build && node scripts/mcp-smoke.mjs", "package:check": "publint", - "test": "vitest run" + "test": "pnpm --filter @jcode.labs/ragmir-tts build && vitest run" }, "dependencies": { "@huggingface/transformers": "^4.2.0", diff --git a/packages/ragmir-core/skills/ragmir-audio-summary/SKILL.md b/packages/ragmir-core/skills/ragmir-audio-summary/SKILL.md index 4726211..fb32a16 100644 --- a/packages/ragmir-core/skills/ragmir-audio-summary/SKILL.md +++ b/packages/ragmir-core/skills/ragmir-audio-summary/SKILL.md @@ -1,17 +1,35 @@ --- name: ragmir-audio-summary description: >- - Create an optional spoken audio summary from a Ragmir local knowledge base. Use when the user asks - for an audio, TTS, spoken brief, briefing, narration, or listenable summary based on private - repository documents indexed by Ragmir. The skill is confidentiality-first: gather facts through - Ragmir, write only a temporary narration text file outside the repository, and render the final - audio under ignored local Ragmir state unless the user explicitly chooses another output path. + Create an intention-driven, memorable spoken audio summary from a Ragmir local knowledge base. Use + when the user asks for an audio, TTS, spoken brief, briefing, narration, or listenable summary + based on private repository documents indexed by Ragmir. The skill is confidentiality-first: it + filters everything against the user's intent, writes only a temporary narration text file outside + the repository, and renders the final audio under ignored local Ragmir state unless the user + explicitly chooses another output path. --- # Ragmir Audio Summary -Use this skill to turn a confidential local Ragmir knowledge base into an optional audio summary. -The knowledge base stays local; the final audio is a generated artifact and must not be committed. +Use this skill to turn a confidential local Ragmir knowledge base into a spoken summary that +respects the listener: only what serves their intent, structured to be intelligible in one pass, and +designed to be retained. + +The knowledge base stays local. The final audio is a generated artifact and must not be committed. + +The goal is not a "basic summary read aloud". It is a deliberate narration built from five +techniques: + +1. **Intent-first filtering** — drop everything that does not serve what the user actually needs. +2. **Density-driven duration** — short for a small topic, long for a large one. Never pad. +3. **Pyramid structure** — answer first, then the supporting points, then a recap. +4. **Writing for the ear** — short sentences, spoken signposting, deliberate TTS punctuation. +5. **Active recall** — two-to-three self-check questions that force retrieval and anchor memory. + +Two reference files sit next to this skill and are read while drafting: + +- `listening-style.md` — how to write prose a TTS engine can pronounce and a listener can follow. +- `narration-templates.md` — skeletons per format, plus signposting and active-recall catalogues. ## Confidentiality Rules @@ -25,7 +43,22 @@ The knowledge base stays local; the final audio is a generated artifact and must - Render audio under `.ragmir/audio/` by default. This directory is ignored by Git when Ragmir is installed. - Never stage or commit generated audio, temporary text, WAV, AIFF, or intermediate files. -## 1. Verify The Knowledge Base +## 1. Capture The Intent Before Searching + +Do not run any search yet. First make the intent explicit so every later step filters by it. Confirm +with the user when it is ambiguous, or infer it from their request and state your assumption. + +Capture four things: + +- **Purpose** — what the listener will do with this: decide, learn, monitor, compare, or plan. +- **Subject** — the precise question or topic, narrower than "summarize everything". +- **Depth** — a quick scan or a deep dossier. Let the user steer, but default from the material. +- **Language** — the spoken language, passed later to `--lang` (`fr` default, `en`, `es`). + +This is the guardrail against superfluous data: anything that does not advance the captured intent +gets dropped at the drafting step, not added because it was "also in the documents". + +## 2. Verify The Knowledge Base From the repository root, run: @@ -48,9 +81,10 @@ pnpm exec ragmir audit --unsupported has no warnings. Do not create an audio summary from stale or incomplete evidence unless the user explicitly accepts that limitation. -## 2. Search Deeply Before Writing +## 3. Search Deeply, Guided By The Intent -Use Ragmir search or MCP tools to gather evidence before drafting the narration. +Use Ragmir search or MCP tools to gather evidence, and derive the queries from the intent captured +in step 1 — not from the subject alone. For a broad summary, run multiple searches: @@ -63,26 +97,72 @@ pnpm exec ragmir ask "" --top-k 8 When MCP is available, prefer `ragmir_search`, `ragmir_ask`, `ragmir_audit`, and `ragmir_security_audit` over shell commands. -Keep citations in your working notes, but do not read long raw passages aloud. The audio should be a -clear synthesis, not a dump of source text. +Keep citations in your working notes, but do not read long raw passages aloud. The audio is a clear +synthesis, not a dump of source text. + +While searching, also gauge the **density of relevant material** for step 4: + +- How many passages directly serve the intent? +- Do they overlap, reinforce, or contradict each other? +- Are there clear facets (chapters) or one tight question? + +## 4. Choose The Format From The Density + +Pick the format from the relevant material found, not from a fixed default. Length follows material; +never pad. + +| Format | Use when | Word budget | Duration | +| --- | --- | --- | --- | +| **Micro-brief** | One clear question or little relevant material | 150-220 words | ~60-90 s | +| **Brief standard** | Moderate material, a few angles worth keeping | 450-750 words | ~3-5 min | +| **Dossier long** | Dense, multi-faceted material needing chapters | 1500-3000 words | ~10-20 min | + +If two formats plausibly fit, prefer the shorter one unless the user asked for depth. A short, +dense summary respects the listener more than a padded one. + +If the user explicitly asks for a long audio on a thin topic, say so in the final report and keep +the narration tight rather than inflated. + +## 5. Write For Listening + +Write one flowing narration in the chosen language. No markdown, headings, bullets, tables, SSML, or +XML tags in the spoken text. Open `listening-style.md` for the full rules; the cardinal ones: + +- **Pyramid first.** State the key message (one-to-four points to retain) up front, then develop it, + then recap it. This exploits primacy and recency. +- **Signpost, do not list.** Use spoken transitions ("D'abord…, Ensuite…, Enfin…") instead of + enumerated lists. See `narration-templates.md` for the catalogue. +- **Short sentences.** One idea per sentence, twenty words or fewer. Split long ones. +- **Deliberate punctuation.** Periods for full pauses, commas for micro-pauses, `…` for the + deliberate beat before an active-recall answer. Avoid semicolons and exclamation marks. +- **Pronounceable.** Expand acronyms on first use, write numbers and symbols in words, never read + URLs, paths, or code aloud. + +Read the draft aloud once at a normal pace. If you stumble or run out of breath, the sentence is too +long or too dense — fix it. -## 3. Write For Listening +## 6. Anchor Memorability -Write one flowing narration in the user's working language. Do not use markdown, headings, bullets, -tables, SSML, XML tags, or stage directions in the spoken text. +Build two devices into every narration, systematically: -Good audio structure: +1. **Recap the key points twice** — once right after the opening message, once at the very end. + Same points, compressed, in different words the second time. +2. **Active recall** — end with self-check questions that force retrieval, not recognition: + - One question for a micro-brief, two-to-three for a standard brief, three-to-five for a dossier. + - Each question targets a key point from the recap, not a peripheral detail. + - Phrase so the answer is not leaked: "Quelle est la durée du préavis?" beats "Le préavis est-il + de trente jours?". + - After each question mark, insert `…` so the TTS pause gives the listener a beat to answer + silently, then state the answer in the fewest words possible. -1. Start with the purpose of the summary and the two-to-four ideas to retain. -2. Explain the current evidence in plain language. -3. Separate proven facts from uncertainty. -4. Highlight decisions, risks, deadlines, and missing documents. -5. End with a concise recap and two or three self-check questions. +For the full skeleton per format and the active-recall catalogue by intent, see +`narration-templates.md`. -Use short sentences and natural punctuation. Spell acronyms and symbols in a way a TTS engine can -pronounce. +Respect the Ragmir evidence separation in spoken form using language cues rather than formatting: +state proven facts plainly, mark inferences ("Cela suggère que…"), mark uncertainty ("Reste à +confirmer…"), and name missing documents. -## 4. Render The Audio +## 7. Render The Audio Create the output directory and write the narration to a temp file outside the repo: @@ -140,11 +220,13 @@ Helper engine selection: Voice can be selected with `TTS_VOICE`. Speed for Edge can be selected with `TTS_RATE`. -## 5. Report The Result +## 8. Report The Result After rendering, report: - the audio path; +- the **format chosen** (micro-brief, brief standard, dossier long) and the **intention served**; +- the **estimated duration** (`word count / 140`) versus the target budget; - which renderer/model was used or requested; - whether remote model downloads or online TTS were allowed; - any evidence limitation, such as stale index, missing documents, or weak search results. diff --git a/packages/ragmir-core/skills/ragmir-audio-summary/listening-style.md b/packages/ragmir-core/skills/ragmir-audio-summary/listening-style.md new file mode 100644 index 0000000..c6ebe66 --- /dev/null +++ b/packages/ragmir-core/skills/ragmir-audio-summary/listening-style.md @@ -0,0 +1,91 @@ +# Listening Style Guide + +Reference for the narration-writing step of `ragmir-audio-summary`. This file defines how to turn +retrieved evidence into spoken text that a TTS engine can pronounce and a listener can follow and +remember in one pass. There is no second chance to re-read audio. + +## Pacing And Duration + +- Conversational narration lands around **130-150 words per minute**. Plan on **140 words/minute** + as the working estimate. +- Estimated duration = `word count / 140`. Keep a short narration under the target; never pad to + reach a target. +- Per-format word budgets (use them as ceilings, not goals): + +| Format | Target duration | Word budget | +| --- | --- | --- | +| Micro-brief | ~60-90 s | 150-220 words | +| Brief standard | ~3-5 min | 450-750 words | +| Dossier long | ~10-20 min | 1500-3000 words | + +If the relevant material does not fill the budget, stop earlier. Padding makes audio undrinkable. + +## Sentence Shape + +- One idea per sentence. If you need "and" twice, split the sentence. +- Aim for **20 words or fewer** per sentence. A few longer sentences are fine for rhythm; never chain + three long ones in a row. +- Prefer subject-verb-object order. TTS engines and the human ear both handle it best. +- Avoid stacked subordinate clauses and parentheticals. They trip the reader and the listener. + + Before: "Le contrat, qui avait été signé, malgré des réserves émises tardivement, par les deux + parties, prévoit une rupture." + + After: "Les deux parties ont signé le contrat, avec des réserves de dernière minute. Il prévoit + une rupture." + +## Punctuation For TTS + +Punctuation is the only cue a TTS engine has for pausing. Use it deliberately. + +- **Comma** `,` — short micro-pause. Use it to separate clauses and ease breathing points. +- **Period** `.` — full pause. End sentences here. Favour periods over commas when in doubt. +- **Ellipsis** `…` — deliberate longer pause. Use it before the answer in an active-recall question, + so the listener gets a beat to think (about three seconds). +- **Colon** `:` — read as a mild pause; acceptable when introducing a short enumeration spoken as + prose, but prefer rephrasing into a plain sentence. +- **Semicolon** `;` — avoid. Engines hesitate inconsistently. Split into two sentences. +- **Exclamation** `!` — avoid for TTS. It can trigger an unnatural spike in pitch. +- **Question mark** `?` — use it for the active-recall questions; the engine raises intonation + naturally. + +## Pronounceability + +Anything the engine might misread must be rewritten for the ear. + +- **Acronyms**: expand on first use, then use the short form if it is pronounceable. "Le RGPD, le + Règlement Général sur la Protection des Données, ..." +- **Numbers**: write them the way they should be read. "1500" can read as "mille cinq cents" or + "quinze cents" — write the intended form. For money, spell the currency: "douze mille euros". +- **Symbols**: rewrite in words. `&` becomes "et", `%` becomes "pour cent", `->` becomes "mène à". +- **Dates and times**: write them fully. "Le quinze mars deux mille vingt-cinq", not "2025-03-15". +- **URLs, paths, code**: never read them aloud. Paraphrase: "le fichier de configuration du + projet" instead of `ragmir/config.json`. +- **Foreign terms**: if the term has no clean translation, introduce it once and keep it. + +## Anti-Patterns + +Avoid these — they are the main causes of "imbuvable" audio. + +- **Jargon without setup.** If a technical term is needed, define it in one short clause first. +- **Spoken bullet lists.** Enumerations read aloud are exhausting. Convert lists into flowing + sentences with signposting ("D'abord…, Ensuite…, Pour finir…"). See `narration-templates.md`. +- **Meta-commentary.** Drop "Dans ce résumé, nous allons parler de…". Open on the substance. +- **Padding to reach a duration.** Restating the same idea in more words lowers density and respect + for the listener. Shorter is better than watered down. +- **Reading raw source passages.** The audio is a synthesis, not a quote dump. Reformulate in plain + speech and keep the citation in your working notes, not in the narration. +- **Overload.** More than ~4 new ideas in a brief is too many to retain. Group, merge, or defer. + +## Language + +- Write the narration in the same language passed to `--lang` (`fr` default, `en`, `es`). +- Match the working language the user used when asking for the summary when it is one of the three + supported languages. +- Keep numerals, units, and proper nouns pronounceable in the target language. + +## Self-Check Before Rendering + +Read the draft aloud once at a normal pace. If you stumble or run out of breath on a sentence, it is +too long or too dense. Fix it, then estimate the duration with `word count / 140` and confirm it +matches the chosen format's budget. diff --git a/packages/ragmir-core/skills/ragmir-audio-summary/narration-templates.md b/packages/ragmir-core/skills/ragmir-audio-summary/narration-templates.md new file mode 100644 index 0000000..901dd6b --- /dev/null +++ b/packages/ragmir-core/skills/ragmir-audio-summary/narration-templates.md @@ -0,0 +1,162 @@ +# Narration Templates + +Reference for the drafting step of `ragmir-audio-summary`. These are **thinking skeletons**, not +output formatting. The final narration is plain flowing prose with no markdown, headings, bullets, +tables, SSML, or XML tags. The skeletons below only shape how you order and connect ideas before you +write the spoken text. + +Pick the format chosen in the skill, then fill the skeleton with the evidence that serves the user's +intent. Drop anything that does not serve the intent — that is how you avoid superfluous data. + +## Format Selection Recap + +| Format | When to use | Word budget | +| --- | --- | --- | +| Micro-brief | Little relevant material, or one clear question | 150-220 words | +| Brief standard | Moderate material, a few angles worth keeping | 450-750 words | +| Dossier long | Dense, multi-faceted material needing chapters | 1500-3000 words | + +Length follows relevant material. Never pad. + +--- + +## Micro-Brief Skeleton + +Spoken-prose shape (write it as one flowing passage, not as headings): + +1. **Hook + intent** — one sentence naming the subject and why the listener asked. +2. **Key idea** — the single thing to remember, stated up front (primacy). +3. **Evidence** — one short, plain-language reason or fact that supports it. +4. **Uncertainty / caveat** — one sentence if the evidence is partial or stale; omit only if solid. +5. **Recap + recall** — restate the key idea in other words, then ask one active-recall question, + pause with `…`, and give the answer. + +Abstract example (do not copy the words, follow the shape): + +> "Vous vouliez savoir si la clause de rupture est applicable. Oui, elle l'est, mais seulement après +> un préavis de trente jours. Le contrat le prévoit explicitement à la section terminaison. En +> revanche, la date de départ du préavis reste ambiguë, aucun courrier ne la fixe clairement. +> Retenez donc une chose: rupture possible, préavis de trente jours, point de départ à confirmer. +> Question: quelle est la durée du préavis prévu? … Trente jours." + +--- + +## Brief Standard Skeleton (Pyramid + SCQA) + +The standard brief follows Barbara Minto's pyramid: answer first, then supporting points, then +recap. Wrap it in a short Situation-Complication-Question-Answer opening. + +1. **Situation** — one or two sentences framing the context the listener already shares. +2. **Complication** — the tension, change, or question that prompted the summary. +3. **Question** — the explicit question the summary answers. +4. **Answer (the key message)** — the one-to-three points to retain, stated first (primacy). +5. **Developed points** — each of the two-to-four points expanded in plain speech, grouped with + signposting ("D'abord…, Ensuite…, Enfin…"). Proven facts only; separate from inference. +6. **Uncertainty, risks, decisions, missing documents** — a short passage on what is not yet + settled or needs action. +7. **Recap** — restate the two-to-four key points in compressed form (recency). +8. **Active recall** — two or three recall questions, each followed by a `…` pause and the answer. + +Abstract example (shape only): + +> "Le projet a atteint sa phase de test. Le souci, c'est que deux blocages apparaissent en +> parallèle. Faut-il continuer ou mettre en pause? La réponse tient en deux points: continuez sur +> le module A, mais mettez en pause le module B. D'abord, le module A passe ses tests sans +> régression. Ensuite, le module B dépend d'un composant externe encore instable. Ce qu'on ne sait +> pas encore, c'est la date de livraison du composant externe. Donc retenez: module A en avant, +> module B en attente, dépendance externe à confirmer. Première question: quel module peut +> continuer sans risque? … Le module A. Deuxième question: pourquoi mettre en pause le module B? … À cause d'un +> composant externe instable." + +--- + +## Dossier Long Skeleton (Chaptered) + +Use only when the material genuinely has several distinct facets. Each chapter is a self-contained +mini-brief with its own mini-recap, so a listener can step away and come back. + +1. **Promise** — what the whole audio covers and the three-to-five landmarks to listen for. State + the key message of the whole dossier up front. +2. **Chapter 1** — signpost the chapter ("Premier point: …"). Give its mini pyramid + (answer → evidence → caveat), then a one-sentence mini-recap. +3. **Chapter 2** — same shape, explicit transition ("Deuxième point: …"). +4. **Continue** for each facet. Keep chapters balanced in length; merge thin ones. +5. **Global recap** — compress the key message of every chapter into one flowing passage (recency). +6. **Active recall** — three to five recall questions across the chapters, each with a `…` pause + and the answer. Spread the questions across chapters, not only the last one. + +Transitions between chapters are essential in long audio — see the signposting catalogue below. + +Abstract shape: + +> "Ce dossier couvre les trois enjeux du contrat: la durée, la rupture, et les pénalités. En une +> ligne: la durée est ferme, la rupture est conditionnée, les pénalités sont plafonnées. Premier +> point: la durée. Le contrat court sur trois ans, fermes. … [chapitre] … Donc, durée ferme de +> trois ans. Deuxième point: la rupture. … [chapitre] … Donc, rupture possible sous préavis. +> Troisième point: les pénalités. … [chapitre] … Donc, pénalités plafonnées à dix pour cent. Pour +> récapituler l'ensemble: trois ans fermes, rupture sous préavis, pénalités plafonnées. Première +> question: quelle est la durée ferme du contrat? … Trois ans. …" + +--- + +## Signposting Catalogue + +Signposting is the connective tissue that makes audio followable without visuals. Use these spoken +transitions instead of lists or headings. + +| Move | Spoken cue (FR examples) | +| --- | --- | +| Open | "Voici l'essentiel sur…" / "Vous vouliez savoir si… La réponse courte est…" | +| Enumerate | "D'abord…, Ensuite…, Enfin…" / "Il y a trois points…" (then speak each) | +| Contrast | "En revanche…" / "Mais attention…" / "À l'inverse…" | +| Cause / effect | "Parce que…" / "C'est pourquoi…" / "La conséquence est…" | +| Emphasize | "Retenez ceci…" / "Le point clé, c'est…" | +| Transition chapter | "Deuxième point…" / "Passons à…" / "Cela nous amène à…" | +| Mini-recap | "En un mot…" / "Donc, pour ce point…" | +| Close | "Pour récapituler…" / "En résumé…" | +| Recall question | "Question: …? … [answer]" | + +When enumerating, say the count first ("trois points") then speak each one with "D'abord / Ensuite / +Enfin" — never read a literal list. + +--- + +## Active-Recall Question Catalogue + +Active recall forces the listener to retrieve from memory, which anchors retention far better than +passive re-exposure. Phrase questions so they require **recall**, not recognition (no multiple +choice, no "est-ce que c'est X?" with the answer embedded). + +### By intent + +| Intent | What to drill | Question shape (FR examples) | +| --- | --- | --- | +| Decide | The decision and its one main driver | "Quelle option recommande-t-on, et pourquoi?" | +| Learn | The definitions and the one mechanism to remember | "Comment définit-on X, et qu'est-ce qui le déclenche?" | +| Monitor | The thresholds and the alert condition | "À partir de quel seuil déclenche-t-on l'alerte?" | +| Compare | The decisive differentiator | "Quelle est la principale différence entre A et B?" | +| Plan | The next concrete action and its owner | "Quelle est la première action à mener, et par qui?" | + +### Rules + +- Two to three questions for a brief, three to five for a dossier. One is enough for a micro-brief. +- Each question targets a key point from the recap, not a peripheral detail. +- After the question mark, insert `…` so the TTS pause gives the listener a beat to answer silently, + then state the answer in the fewest words possible. +- Do not reveal the answer inside the question. "Le préavis est-il de trente jours?" leaks the + answer — prefer "Quelle est la durée du préavis?". + +--- + +## Evidence Separation In Spoken Form + +Spoken audio can still respect the Ragmir separation of evidence and inference. Use language cues, +not formatting: + +- Proven fact: state plainly. "Le contrat fixe le préavis à trente jours." +- Inference: mark it. "Cela suggère que…" / "On peut en déduire que…" +- Uncertainty: mark it. "Ce qu'on ne sait pas encore, c'est…" / "Reste à confirmer…" +- Missing document: name it. "Il manque le courrier de notification, donc…" +- Decision / action: mark it. "La décision à prendre est…" + +This keeps the narration honest without leaning on tables or footnotes that audio cannot carry. diff --git a/packages/ragmir-core/src/defaults.ts b/packages/ragmir-core/src/defaults.ts index 645bf61..7046620 100644 --- a/packages/ragmir-core/src/defaults.ts +++ b/packages/ragmir-core/src/defaults.ts @@ -10,14 +10,6 @@ export const DEFAULT_SKILL_TARGET_DIR = `${RAGMIR_DIR}/skills` export const RAGMIR_PROJECT_ROOT_ENV = "RAGMIR_PROJECT_ROOT" -export const SOURCES_FILE_HEADER = [ - "# Optional extra source paths or glob patterns, one per line.", - "# Relative paths resolve from the project root. Prefix glob exclusions with !.", - "# Example: ../apps/*/docs/**/*.md", - "# Example: !../apps/**/node_modules/**", - "", -] - export const RAGMIR_GITIGNORE_ENTRY = `${RAGMIR_DIR}/` export const LEGACY_KB_GITIGNORE_ENTRY = `${LEGACY_KB_DIR}/` export const LEGACY_PRIVATE_GITIGNORE_ENTRY = `${LEGACY_PRIVATE_DIR}/` diff --git a/packages/ragmir-core/src/sources.test.ts b/packages/ragmir-core/src/sources.test.ts index 16c171f..b86e586 100644 --- a/packages/ragmir-core/src/sources.test.ts +++ b/packages/ragmir-core/src/sources.test.ts @@ -1,3 +1,4 @@ +import { existsSync } from "node:fs" import { mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises" import os from "node:os" import path from "node:path" @@ -13,7 +14,7 @@ afterEach(async () => { }) describe("source entries", () => { - it("creates the sources file and adds path or glob entries without duplicates", async () => { + it("writes entries to the config.json sources array without duplicates", async () => { const root = await mkdtemp(path.join(os.tmpdir(), "ragmir-sources-")) tempDirs.push(root) @@ -24,9 +25,12 @@ describe("source entries", () => { expect(result.added).toEqual(["../apps/*/README.md", "../apps/*/docs/**/*.md"]) expect(result.skipped).toEqual([]) - await expect(readFile(path.join(root, ".ragmir", "sources.txt"), "utf8")).resolves.toContain( - "../apps/*/docs/**/*.md\n", - ) + + // Entries must land in config.json, NOT in sources.txt. + const configPath = path.join(root, ".ragmir", "config.json") + const config = JSON.parse(await readFile(configPath, "utf8")) + expect(config.sources).toEqual(["../apps/*/README.md", "../apps/*/docs/**/*.md"]) + expect(existsSync(path.join(root, ".ragmir", "sources.txt"))).toBe(false) const second = await addSourceEntries({ cwd: root, @@ -36,30 +40,38 @@ describe("source entries", () => { expect(second.added).toEqual(["!../apps/**/node_modules/**"]) expect(second.skipped).toEqual(["../apps/*/README.md"]) await expect(listSourceEntries(root)).resolves.toEqual({ - sourcesFile: path.join(root, ".ragmir", "sources.txt"), + sourcesFile: configPath, entries: ["../apps/*/README.md", "../apps/*/docs/**/*.md", "!../apps/**/node_modules/**"], }) }) - it("preserves existing comments while listing only active entries", async () => { - const root = await mkdtemp(path.join(os.tmpdir(), "ragmir-sources-")) + it("merges legacy sources.txt entries read-only and never writes to it", async () => { + const root = await mkdtemp(path.join(os.tmpdir(), "ragmir-sources-legacy-")) tempDirs.push(root) await mkdir(path.join(root, ".ragmir"), { recursive: true }) + // Pre-existing legacy file is read for backward compatibility. await writeFile( path.join(root, ".ragmir", "sources.txt"), "# Existing notes\n\n../docs/**/*.md\n", "utf8", ) - await expect(listSourceEntries(root)).resolves.toEqual({ - sourcesFile: path.join(root, ".ragmir", "sources.txt"), - entries: ["../docs/**/*.md"], - }) + const listed = await listSourceEntries(root) + expect(listed.entries).toEqual(["../docs/**/*.md"]) + // Adding a new entry writes to config.json, leaving the legacy file untouched. await addSourceEntries({ cwd: root, entries: ["../apps/*/README.md"] }) + const config = JSON.parse(await readFile(path.join(root, ".ragmir", "config.json"), "utf8")) + expect(config.sources).toEqual(["../apps/*/README.md"]) + + // Legacy file is unchanged (read-only). await expect(readFile(path.join(root, ".ragmir", "sources.txt"), "utf8")).resolves.toBe( - "# Existing notes\n\n../docs/**/*.md\n../apps/*/README.md\n", + "# Existing notes\n\n../docs/**/*.md\n", ) + + // listSourceEntries merges config + legacy, deduplicated. + const merged = await listSourceEntries(root) + expect(merged.entries).toEqual(["../apps/*/README.md", "../docs/**/*.md"]) }) }) diff --git a/packages/ragmir-core/src/sources.ts b/packages/ragmir-core/src/sources.ts index 2f2cedb..8ded86f 100644 --- a/packages/ragmir-core/src/sources.ts +++ b/packages/ragmir-core/src/sources.ts @@ -1,10 +1,10 @@ import { existsSync } from "node:fs" import { mkdir, readFile, writeFile } from "node:fs/promises" import path from "node:path" -import { loadConfig } from "./config.js" -import { SOURCES_FILE_HEADER } from "./defaults.js" +import { findProjectConfig, loadConfig } from "./config.js" export interface SourceEntriesResult { + /** Where the listed entries come from: always config.json now. */ sourcesFile: string entries: string[] } @@ -15,35 +15,58 @@ export interface AddSourceEntriesOptions { } export interface AddSourceEntriesResult { + /** config.json path the entries were written to. */ sourcesFile: string added: string[] skipped: string[] } +/** + * List the configured source entries. Sources live in the `sources` array of + * `.ragmir/config.json` (the primary mechanism). A legacy `.ragmir/sources.txt` + * is still read and merged when present so existing projects keep working, but + * it is never created or written by these functions anymore. + */ export async function listSourceEntries(cwd = process.cwd()): Promise { const config = await loadConfig(cwd) - const content = await readSourcesFile(config.sourcesFile) - return { - sourcesFile: config.sourcesFile, - entries: content ? parseSourceEntries(content) : [], + const projectConfig = findProjectConfig(cwd) + const configEntries = await readConfigSources(projectConfig) + const legacyEntries = await readLegacySourcesTxt(config.sourcesFile) + const seen = new Set() + const entries: string[] = [] + for (const entry of [...configEntries, ...legacyEntries]) { + if (!seen.has(entry)) { + seen.add(entry) + entries.push(entry) + } } + return { sourcesFile: projectConfig.configPath, entries } } +/** + * Add source entries to the `sources` array of `.ragmir/config.json`. Does not + * touch the legacy `sources.txt` file anymore; entries already present there + * are treated as existing (skipped) to avoid duplicates. + */ export async function addSourceEntries( options: AddSourceEntriesOptions, ): Promise { - const entries = normalizeRequestedEntries(options.entries) - if (entries.length === 0) { + const requested = normalizeRequestedEntries(options.entries) + if (requested.length === 0) { throw new Error("At least one source path or glob is required.") } const config = await loadConfig(options.cwd) - const content = await readSourcesFile(config.sourcesFile) - const existingEntries = new Set(content ? parseSourceEntries(content) : []) + const projectConfig = findProjectConfig(options.cwd ?? process.cwd()) + const configEntries = await readConfigSources(projectConfig) + const existingEntries = new Set([ + ...configEntries, + ...(await readLegacySourcesTxt(config.sourcesFile)), + ]) const added: string[] = [] const skipped: string[] = [] - for (const entry of entries) { + for (const entry of requested) { if (existingEntries.has(entry)) { skipped.push(entry) continue @@ -53,22 +76,60 @@ export async function addSourceEntries( } if (added.length > 0) { - await mkdir(path.dirname(config.sourcesFile), { recursive: true }) - await writeFile(config.sourcesFile, nextSourcesFileContent(content, added), "utf8") + await writeConfigSources(projectConfig, [...configEntries, ...added]) } return { - sourcesFile: config.sourcesFile, + sourcesFile: projectConfig.configPath, added, skipped, } } -async function readSourcesFile(sourcesFile: string): Promise { +/** Read the raw `sources` array from config.json without resolving paths. */ +async function readConfigSources(projectConfig: { + configPath: string + projectRoot: string +}): Promise { + if (!existsSync(projectConfig.configPath)) { + return [] + } + try { + const raw = JSON.parse(await readFile(projectConfig.configPath, "utf8")) as unknown + if (isRecord(raw) && Array.isArray(raw.sources)) { + return raw.sources.filter((entry): entry is string => typeof entry === "string") + } + } catch { + // Fall back to empty if the config is unreadable; loadConfig surfaces real errors elsewhere. + } + return [] +} + +/** Write the `sources` array back into config.json, preserving other fields. */ +async function writeConfigSources( + projectConfig: { configPath: string; projectRoot: string }, + entries: readonly string[], +): Promise { + await mkdir(path.dirname(projectConfig.configPath), { recursive: true }) + const raw = existsSync(projectConfig.configPath) + ? (JSON.parse(await readFile(projectConfig.configPath, "utf8")) as unknown) + : {} + if (!isRecord(raw)) { + throw new Error( + `${path.relative(projectConfig.projectRoot, projectConfig.configPath)} must contain a JSON object.`, + ) + } + raw.sources = [...entries] + await writeFile(projectConfig.configPath, `${JSON.stringify(raw, null, 2)}\n`, "utf8") +} + +/** Read the legacy sources.txt read-only for backward compatibility. */ +async function readLegacySourcesTxt(sourcesFile: string): Promise { if (!existsSync(sourcesFile)) { - return null + return [] } - return readFile(sourcesFile, "utf8") + const content = await readFile(sourcesFile, "utf8") + return parseSourceEntries(content) } function parseSourceEntries(content: string): string[] { @@ -92,7 +153,6 @@ function normalizeRequestedEntries(entries: readonly string[]): string[] { return normalized } -function nextSourcesFileContent(currentContent: string | null, added: readonly string[]): string { - const base = currentContent === null ? SOURCES_FILE_HEADER.join("\n") : currentContent.trimEnd() - return `${base ? `${base}\n` : ""}${added.join("\n")}\n` +function isRecord(value: unknown): value is Record { + return typeof value === "object" && value !== null && !Array.isArray(value) } diff --git a/packages/ragmir-tts/dist/cli.d.ts b/packages/ragmir-tts/dist/cli.d.ts deleted file mode 100644 index faaadd5..0000000 --- a/packages/ragmir-tts/dist/cli.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env node -export {}; -//# sourceMappingURL=cli.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-tts/dist/cli.d.ts.map b/packages/ragmir-tts/dist/cli.d.ts.map deleted file mode 100644 index f022439..0000000 --- a/packages/ragmir-tts/dist/cli.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/ragmir-tts/dist/cli.js b/packages/ragmir-tts/dist/cli.js deleted file mode 100755 index d9c9540..0000000 --- a/packages/ragmir-tts/dist/cli.js +++ /dev/null @@ -1,197 +0,0 @@ -#!/usr/bin/env node -import { parseArgs } from "node:util"; -import { doctor, isTtsLanguage, renderSpeech, TTS_LANGUAGES, } from "./index.js"; -const command = process.argv[2]; -try { - if (command === "doctor") { - await runDoctor(process.argv.slice(3)); - } - else if (command === "render") { - await runRender(process.argv.slice(3)); - } - else { - printHelp(); - process.exitCode = command ? 1 : 0; - } -} -catch (error) { - console.error(error instanceof Error ? error.message : String(error)); - process.exitCode = 1; -} -async function runDoctor(args) { - const { values } = parseArgs({ - args, - options: { - json: { type: "boolean" }, - }, - }); - const report = await doctor(); - if (values.json) { - console.log(JSON.stringify(report, null, 2)); - return; - } - printKeyValue("node", report.node); - printKeyValue("defaultEngine", report.defaultEngine); - printKeyValue("defaultLanguage", report.defaultLanguage); - printKeyValue("languages", report.languages.join(",")); - printKeyValue("defaultModel", report.defaultModel); - printKeyValue("defaultModelPath", report.defaultModelPath); - printKeyValue("defaultAllowRemoteModels", String(report.defaultAllowRemoteModels)); - printKeyValue("edgeTtsAvailable", String(report.edgeTtsAvailable)); - printKeyValue("edgeDefaultVoice", report.edgeDefaultVoice); - printKeyValue("transformersAvailable", String(report.transformersAvailable)); - printKeyValue("pythonRequired", String(report.pythonRequired)); - printKeyValue("ffmpegRequired", String(report.ffmpegRequired)); - printKeyValue("outputFormat", report.outputFormat); -} -async function runRender(args) { - const { values, positionals } = parseArgs({ - args, - allowPositionals: true, - options: { - out: { type: "string", short: "o" }, - engine: { type: "string" }, - lang: { type: "string" }, - model: { type: "string" }, - "model-path": { type: "string" }, - offline: { type: "boolean" }, - "allow-remote-models": { type: "boolean" }, - voice: { type: "string" }, - rate: { type: "string" }, - "speaker-embeddings": { type: "string" }, - speed: { type: "string" }, - json: { type: "boolean" }, - }, - }); - const textFile = positionals[0]; - if (!textFile) { - throw new Error("usage: ragmir-tts render [--out output.wav]"); - } - const renderOptions = { - textFile, - }; - addStringOption(renderOptions, "outputPath", stringValue(values, "out")); - addEngineOption(renderOptions, engineValue(values)); - addLanguageOption(renderOptions, languageValue(values)); - addStringOption(renderOptions, "model", stringValue(values, "model")); - addStringOption(renderOptions, "modelPath", stringValue(values, "model-path")); - addBooleanOption(renderOptions, "allowRemoteModels", allowRemoteModels(values)); - addStringOption(renderOptions, "voice", stringValue(values, "voice")); - addStringOption(renderOptions, "rate", stringValue(values, "rate")); - addStringOption(renderOptions, "speakerEmbeddings", stringValue(values, "speaker-embeddings")); - addNumberOption(renderOptions, "speed", numberValue(values, "speed")); - const result = await renderSpeech(renderOptions); - if (values.json) { - console.log(JSON.stringify(result, null, 2)); - return; - } - printKeyValue("outputPath", result.outputPath); - printKeyValue("engine", result.engine); - printKeyValue("language", result.language); - printKeyValue("outputFormat", result.outputFormat); - printKeyValue("model", result.model); - printKeyValue("modelPath", result.modelPath); - printKeyValue("allowRemoteModels", String(result.allowRemoteModels)); - printKeyValue("voice", result.voice ?? "none"); - printKeyValue("rate", result.rate ?? "none"); - printKeyValue("samplingRate", String(result.samplingRate ?? "unknown")); - printKeyValue("samples", String(result.samples ?? "unknown")); -} -function allowRemoteModels(values) { - if (values.offline === true) { - return false; - } - if (values["allow-remote-models"] === true) { - return true; - } - return undefined; -} -function stringValue(values, key) { - const value = values[key]; - return typeof value === "string" ? value : undefined; -} -function engineValue(values) { - if (values.offline === true) { - return "transformers"; - } - const value = stringValue(values, "engine"); - if (value === undefined) { - return undefined; - } - if (value === "auto" || value === "edge" || value === "transformers") { - return value; - } - throw new Error("Expected --engine to be auto, edge, or transformers."); -} -function addEngineOption(target, value) { - if (value !== undefined) { - target.engine = value; - } -} -function languageValue(values) { - const value = stringValue(values, "lang"); - if (value === undefined) { - return undefined; - } - if (isTtsLanguage(value)) { - return value; - } - throw new Error(`Expected --lang to be one of: ${TTS_LANGUAGES.join(", ")}.`); -} -function addLanguageOption(target, value) { - if (value !== undefined) { - target.language = value; - } -} -function addStringOption(target, key, value) { - if (value !== undefined) { - target[key] = value; - } -} -function addBooleanOption(target, key, value) { - if (value !== undefined) { - target[key] = value; - } -} -function addNumberOption(target, key, value) { - if (value !== undefined) { - target[key] = value; - } -} -function numberValue(values, key) { - const value = stringValue(values, key); - if (!value) { - return undefined; - } - const parsed = Number.parseFloat(value); - if (!Number.isFinite(parsed)) { - throw new Error(`Expected a number for --${key}.`); - } - return parsed; -} -function printKeyValue(key, value) { - console.log(`${key}=${value}`); -} -function printHelp() { - console.log(`ragmir-tts - -Usage: - ragmir-tts doctor [--json] - ragmir-tts render [--out output.wav] - ragmir-tts render --engine edge --out output.mp3 - -Options: - --engine transformers, edge, or auto. Default is transformers. - --lang en, es, or fr. Selects the offline model and Edge voice. Default fr. - --model Transformers.js TTS model ID. - --model-path Local model/cache path. Defaults to .ragmir/models/tts. - --offline Force the Transformers.js local/offline WAV path. - --allow-remote-models Explicitly allow remote model downloads. - --voice Edge voice. Defaults to fr-FR-DeniseNeural. - --rate Edge rate. Defaults to +0%. - --speaker-embeddings Optional model-specific speaker embedding path or URL. - --speed Optional model-specific speech speed. - --json Print JSON output. -`); -} -//# sourceMappingURL=cli.js.map \ No newline at end of file diff --git a/packages/ragmir-tts/dist/cli.js.map b/packages/ragmir-tts/dist/cli.js.map deleted file mode 100644 index 2ce941f..0000000 --- a/packages/ragmir-tts/dist/cli.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-tts/dist/index.d.ts b/packages/ragmir-tts/dist/index.d.ts deleted file mode 100644 index 831d299..0000000 --- a/packages/ragmir-tts/dist/index.d.ts +++ /dev/null @@ -1,82 +0,0 @@ -export declare const DEFAULT_TTS_MODEL = "Xenova/mms-tts-fra"; -export declare const DEFAULT_TTS_MODEL_PATH = ".ragmir/models/tts"; -export declare const DEFAULT_AUDIO_DIR = ".ragmir/audio"; -export declare const DEFAULT_TTS_ENGINE = "transformers"; -export declare const DEFAULT_TTS_ALLOW_REMOTE_MODELS = false; -export declare const DEFAULT_EDGE_VOICE = "fr-FR-DeniseNeural"; -export declare const DEFAULT_EDGE_RATE = "+0%"; -export declare const DEFAULT_TTS_LANGUAGE: TtsLanguage; -export type TtsEngine = "auto" | "edge" | "transformers"; -export type OutputFormat = "mp3" | "wav"; -export declare const TTS_LANGUAGES: readonly ["en", "es", "fr"]; -export type TtsLanguage = (typeof TTS_LANGUAGES)[number]; -export declare function isTtsLanguage(value: string): value is TtsLanguage; -export interface TextToAudioOutputLike { - save(path: string): Promise; - sampling_rate?: number; - data?: Float32Array; -} -export type TextToAudioSynthesizer = (text: string, options?: TextToAudioOptions) => Promise; -export interface TextToAudioOptions { - speaker_embeddings?: string; - speed?: number; -} -export interface RenderSpeechOptions { - cwd?: string; - text?: string; - textFile?: string; - outputPath?: string; - engine?: TtsEngine; - language?: TtsLanguage; - model?: string; - modelPath?: string; - allowRemoteModels?: boolean; - voice?: string; - rate?: string; - speakerEmbeddings?: string; - speed?: number; - synthesizer?: TextToAudioSynthesizer; - edgeRenderer?: EdgeTtsRenderer; - edgeAvailable?: () => boolean; -} -export interface RenderSpeechResult { - outputPath: string; - engine: Exclude; - language: TtsLanguage; - outputFormat: OutputFormat; - model: string; - modelPath: string; - allowRemoteModels: boolean; - voice: string | null; - rate: string | null; - samplingRate: number | null; - samples: number | null; -} -export interface DoctorReport { - node: string; - defaultEngine: TtsEngine; - defaultLanguage: TtsLanguage; - languages: TtsLanguage[]; - defaultModel: string; - defaultModelPath: string; - defaultAllowRemoteModels: boolean; - transformersAvailable: boolean; - edgeTtsAvailable: boolean; - edgeDefaultVoice: string; - pythonRequired: false; - ffmpegRequired: false; - outputFormat: "mp3-or-wav"; -} -export type EdgeTtsRenderer = (options: EdgeTtsRenderOptions) => Promise; -export interface EdgeTtsRenderOptions { - text: string; - outputPath: string; - voice: string; - rate: string; -} -export declare function renderSpeech(options: RenderSpeechOptions): Promise; -export declare function doctor(): Promise; -export declare function mmsModelForLanguage(language: TtsLanguage): string; -export declare function edgeVoiceForLanguage(language: TtsLanguage): string; -export declare function modelCacheExists(cwd?: string): boolean; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/ragmir-tts/dist/index.d.ts.map b/packages/ragmir-tts/dist/index.d.ts.map deleted file mode 100644 index 1715894..0000000 --- a/packages/ragmir-tts/dist/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ragmir-tts/dist/index.js b/packages/ragmir-tts/dist/index.js deleted file mode 100644 index 816a681..0000000 --- a/packages/ragmir-tts/dist/index.js +++ /dev/null @@ -1,250 +0,0 @@ -import { spawn, spawnSync } from "node:child_process"; -import { existsSync } from "node:fs"; -import { mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises"; -import os from "node:os"; -import path from "node:path"; -export const DEFAULT_TTS_MODEL = "Xenova/mms-tts-fra"; -export const DEFAULT_TTS_MODEL_PATH = ".ragmir/models/tts"; -export const DEFAULT_AUDIO_DIR = ".ragmir/audio"; -export const DEFAULT_TTS_ENGINE = "transformers"; -export const DEFAULT_TTS_ALLOW_REMOTE_MODELS = false; -export const DEFAULT_EDGE_VOICE = "fr-FR-DeniseNeural"; -export const DEFAULT_EDGE_RATE = "+0%"; -export const DEFAULT_TTS_LANGUAGE = "fr"; -export const TTS_LANGUAGES = ["en", "es", "fr"]; -export function isTtsLanguage(value) { - return TTS_LANGUAGES.includes(value); -} -// Self-contained per-language MMS models (no phonemizer, no Python) for the offline path, -// and high-quality Microsoft neural voices for the online Edge path. -const MMS_MODEL_BY_LANGUAGE = { - en: "Xenova/mms-tts-eng", - es: "Xenova/mms-tts-spa", - fr: DEFAULT_TTS_MODEL, -}; -const EDGE_VOICE_BY_LANGUAGE = { - en: "en-US-AriaNeural", - es: "es-ES-ElviraNeural", - fr: DEFAULT_EDGE_VOICE, -}; -export async function renderSpeech(options) { - const cwd = path.resolve(options.cwd ?? process.cwd()); - const text = await readInputText(options); - const engine = resolveEngine(options); - const language = resolveLanguage(options); - const model = options.model ?? process.env.RAGMIR_TTS_MODEL ?? mmsModelForLanguage(language); - const modelPath = resolveFromCwd(cwd, options.modelPath ?? process.env.RAGMIR_TTS_MODEL_PATH ?? DEFAULT_TTS_MODEL_PATH); - const outputPath = resolveFromCwd(cwd, options.outputPath ?? defaultOutputPath(cwd, options.textFile, outputFormatForEngine(engine))); - const allowRemoteModels = options.allowRemoteModels ?? - readBooleanEnv("RAGMIR_TTS_ALLOW_REMOTE_MODELS", DEFAULT_TTS_ALLOW_REMOTE_MODELS); - await mkdir(path.dirname(outputPath), { recursive: true }); - if (engine === "edge") { - validateOutputFormat(outputPath, "mp3"); - const voice = options.voice ?? process.env.RAGMIR_TTS_EDGE_VOICE ?? edgeVoiceForLanguage(language); - const rate = options.rate ?? process.env.RAGMIR_TTS_EDGE_RATE ?? DEFAULT_EDGE_RATE; - const renderer = options.edgeRenderer ?? edgeCliRenderer; - const edgeAvailable = options.edgeAvailable ?? edgeTtsAvailable; - if (!options.edgeRenderer && !edgeAvailable()) { - throw new Error("edge-tts is required for the Edge engine. Install it with `pipx install edge-tts`."); - } - await renderer({ text, outputPath, voice, rate }); - return { - outputPath, - engine, - language, - outputFormat: "mp3", - model, - modelPath, - allowRemoteModels, - voice, - rate, - samplingRate: null, - samples: null, - }; - } - validateOutputFormat(outputPath, "wav"); - const synthesizer = options.synthesizer ?? (await transformerSynthesizer(model, modelPath, allowRemoteModels)); - const output = await synthesizer(text, textToAudioOptions(options)); - await output.save(outputPath); - return { - outputPath, - engine, - language, - outputFormat: "wav", - model, - modelPath, - allowRemoteModels, - voice: null, - rate: null, - samplingRate: typeof output.sampling_rate === "number" ? output.sampling_rate : null, - samples: output.data instanceof Float32Array ? output.data.length : null, - }; -} -export async function doctor() { - return { - node: process.versions.node, - defaultEngine: DEFAULT_TTS_ENGINE, - defaultLanguage: DEFAULT_TTS_LANGUAGE, - languages: [...TTS_LANGUAGES], - defaultModel: DEFAULT_TTS_MODEL, - defaultModelPath: DEFAULT_TTS_MODEL_PATH, - defaultAllowRemoteModels: DEFAULT_TTS_ALLOW_REMOTE_MODELS, - transformersAvailable: await canImportTransformers(), - edgeTtsAvailable: edgeTtsAvailable(), - edgeDefaultVoice: DEFAULT_EDGE_VOICE, - pythonRequired: false, - ffmpegRequired: false, - outputFormat: "mp3-or-wav", - }; -} -async function readInputText(options) { - const text = options.text ?? (options.textFile ? await readFile(options.textFile, "utf8") : ""); - const trimmed = text.trim(); - if (!trimmed) { - throw new Error("A non-empty text input or text file is required."); - } - return trimmed; -} -function defaultOutputPath(cwd, textFile, format) { - const name = textFile ? path.basename(textFile, path.extname(textFile)) : "ragmir-summary"; - return path.join(cwd, DEFAULT_AUDIO_DIR, `${name}.${format}`); -} -function resolveFromCwd(cwd, input) { - return path.isAbsolute(input) ? input : path.resolve(cwd, input); -} -function textToAudioOptions(options) { - const output = {}; - if (options.speakerEmbeddings) { - output.speaker_embeddings = options.speakerEmbeddings; - } - if (typeof options.speed === "number") { - output.speed = options.speed; - } - return Object.keys(output).length > 0 ? output : undefined; -} -async function transformerSynthesizer(model, modelPath, allowRemoteModels) { - const transformers = await import("@huggingface/transformers"); - transformers.env.localModelPath = modelPath; - transformers.env.cacheDir = modelPath; - transformers.env.allowRemoteModels = allowRemoteModels; - return (await transformers.pipeline("text-to-speech", model)); -} -function resolveEngine(options) { - if (options.synthesizer) { - return "transformers"; - } - const requested = options.engine ?? readEngineEnv() ?? DEFAULT_TTS_ENGINE; - if (requested === "edge" || requested === "transformers") { - return requested; - } - const outputFormat = options.outputPath ? formatFromPath(options.outputPath) : null; - if (outputFormat === "wav") { - return "transformers"; - } - if (outputFormat === "mp3") { - return "edge"; - } - const edgeAvailable = options.edgeAvailable ?? edgeTtsAvailable; - return edgeAvailable() ? "edge" : "transformers"; -} -function outputFormatForEngine(engine) { - return engine === "edge" ? "mp3" : "wav"; -} -function formatFromPath(filePath) { - const extension = path.extname(filePath).toLowerCase(); - if (extension === ".mp3") { - return "mp3"; - } - if (extension === ".wav") { - return "wav"; - } - return null; -} -function validateOutputFormat(filePath, expected) { - const actual = formatFromPath(filePath); - if (actual && actual !== expected) { - throw new Error(`The ${expected} engine cannot write ${actual} output. Use a .${expected} path.`); - } -} -function readEngineEnv() { - const raw = process.env.RAGMIR_TTS_ENGINE; - if (raw === "auto" || raw === "edge" || raw === "transformers") { - return raw; - } - return undefined; -} -export function mmsModelForLanguage(language) { - return MMS_MODEL_BY_LANGUAGE[language]; -} -export function edgeVoiceForLanguage(language) { - return EDGE_VOICE_BY_LANGUAGE[language]; -} -function resolveLanguage(options) { - return options.language ?? readLanguageEnv() ?? DEFAULT_TTS_LANGUAGE; -} -function readLanguageEnv() { - const raw = process.env.RAGMIR_TTS_LANG?.toLowerCase(); - return raw !== undefined && isTtsLanguage(raw) ? raw : undefined; -} -function edgeTtsAvailable() { - return spawnSync("edge-tts", ["--help"], { stdio: "ignore" }).status === 0; -} -async function edgeCliRenderer(options) { - const tempDir = await mkdtemp(path.join(os.tmpdir(), "ragmir-tts-edge-")); - const textFile = path.join(tempDir, "input.txt"); - await writeFile(textFile, options.text, "utf8"); - try { - await runEdgeTts([ - "--file", - textFile, - "--voice", - options.voice, - `--rate=${options.rate}`, - "--write-media", - options.outputPath, - ]); - } - finally { - await rm(tempDir, { recursive: true, force: true }); - } -} -async function runEdgeTts(args) { - const child = spawn("edge-tts", args, { - stdio: ["ignore", "ignore", "pipe"], - }); - const stderr = []; - child.stderr.on("data", (chunk) => stderr.push(chunk)); - const code = await new Promise((resolve, reject) => { - child.on("error", reject); - child.on("close", resolve); - }); - if (code !== 0) { - const detail = Buffer.concat(stderr).toString("utf8").trim(); - throw new Error(detail - ? `edge-tts failed with exit code ${code}: ${detail}` - : `edge-tts failed with exit code ${code}.`); - } -} -async function canImportTransformers() { - try { - await import("@huggingface/transformers"); - return true; - } - catch { - return false; - } -} -function readBooleanEnv(name, fallback) { - const raw = process.env[name]?.toLowerCase(); - if (raw === "1" || raw === "true" || raw === "yes") { - return true; - } - if (raw === "0" || raw === "false" || raw === "no") { - return false; - } - return fallback; -} -export function modelCacheExists(cwd = process.cwd()) { - return existsSync(path.resolve(cwd, process.env.RAGMIR_TTS_MODEL_PATH ?? DEFAULT_TTS_MODEL_PATH)); -} -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/ragmir-tts/dist/index.js.map b/packages/ragmir-tts/dist/index.js.map deleted file mode 100644 index 413511f..0000000 --- a/packages/ragmir-tts/dist/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file