From 02683c1cbf90320853a99d73f4309b8b8770df04 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste THERY Date: Sat, 4 Jul 2026 03:09:47 +0700 Subject: [PATCH 1/5] feat(audio-summary): rewrite skill for intent-driven, memorable narration Replace the generic narration guidance with a deliberate, technique-based pipeline that produces spoken summaries a listener can follow and retain, instead of basic summaries read aloud. The TTS rendering pipeline is untouched; all changes target the narration script quality upstream. SKILL.md is restructured into an 8-step spine (capture intent, verify KB, search, choose format, write for listening, anchor memorability, render, report). Two reference files are added next to SKILL.md and bundled automatically: listening-style.md (pacing, TTS punctuation, anti-patterns) and narration-templates.md (skeletons per format, signposting and active-recall catalogues). --- .../skills/ragmir-audio-summary/SKILL.md | 132 +++++++++++--- .../ragmir-audio-summary/listening-style.md | 91 ++++++++++ .../narration-templates.md | 162 ++++++++++++++++++ 3 files changed, 360 insertions(+), 25 deletions(-) create mode 100644 packages/ragmir-core/skills/ragmir-audio-summary/listening-style.md create mode 100644 packages/ragmir-core/skills/ragmir-audio-summary/narration-templates.md 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. From a413d20545b88116ac90a4f16922e0a4a31de9d1 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste THERY Date: Sat, 4 Jul 2026 03:09:53 +0700 Subject: [PATCH 2/5] chore: untrack dist/ build output from git index The previous chore added packages/*/dist/ to .gitignore but did not run git rm --cached, so 128 dist files (ragmir-core + ragmir-tts) inherited from the rebrand commit stayed tracked. .gitignore does not untrack already-tracked files retroactively. Untrack them now so the index matches the gitignore policy. The files stay on disk (rebuilt locally with pnpm build) and are no longer version controlled, consistent with the dist-as-build-output decision. --- .gitignore | 1 - packages/ragmir-core/dist/access-log.d.ts | 11 - packages/ragmir-core/dist/access-log.d.ts.map | 1 - packages/ragmir-core/dist/access-log.js | 145 --- packages/ragmir-core/dist/access-log.js.map | 1 - packages/ragmir-core/dist/chunking.d.ts | 3 - packages/ragmir-core/dist/chunking.d.ts.map | 1 - packages/ragmir-core/dist/chunking.js | 58 -- packages/ragmir-core/dist/chunking.js.map | 1 - packages/ragmir-core/dist/cli.d.ts | 3 - packages/ragmir-core/dist/cli.d.ts.map | 1 - packages/ragmir-core/dist/cli.js | 944 ------------------ packages/ragmir-core/dist/cli.js.map | 1 - packages/ragmir-core/dist/config.d.ts | 11 - packages/ragmir-core/dist/config.d.ts.map | 1 - packages/ragmir-core/dist/config.js | 224 ----- packages/ragmir-core/dist/config.js.map | 1 - packages/ragmir-core/dist/defaults.d.ts | 17 - packages/ragmir-core/dist/defaults.d.ts.map | 1 - packages/ragmir-core/dist/defaults.js | 59 -- packages/ragmir-core/dist/defaults.js.map | 1 - packages/ragmir-core/dist/destroy.d.ts | 3 - packages/ragmir-core/dist/destroy.d.ts.map | 1 - packages/ragmir-core/dist/destroy.js | 16 - packages/ragmir-core/dist/destroy.js.map | 1 - packages/ragmir-core/dist/doctor.d.ts | 3 - packages/ragmir-core/dist/doctor.d.ts.map | 1 - packages/ragmir-core/dist/doctor.js | 117 --- packages/ragmir-core/dist/doctor.js.map | 1 - packages/ragmir-core/dist/embeddings.d.ts | 9 - packages/ragmir-core/dist/embeddings.d.ts.map | 1 - packages/ragmir-core/dist/embeddings.js | 110 -- packages/ragmir-core/dist/embeddings.js.map | 1 - packages/ragmir-core/dist/evaluate.d.ts | 3 - packages/ragmir-core/dist/evaluate.d.ts.map | 1 - packages/ragmir-core/dist/evaluate.js | 97 -- packages/ragmir-core/dist/evaluate.js.map | 1 - packages/ragmir-core/dist/files.d.ts | 16 - packages/ragmir-core/dist/files.d.ts.map | 1 - packages/ragmir-core/dist/files.js | 388 ------- packages/ragmir-core/dist/files.js.map | 1 - packages/ragmir-core/dist/gitignore.d.ts | 3 - packages/ragmir-core/dist/gitignore.d.ts.map | 1 - packages/ragmir-core/dist/gitignore.js | 27 - packages/ragmir-core/dist/gitignore.js.map | 1 - packages/ragmir-core/dist/guards.d.ts | 2 - packages/ragmir-core/dist/guards.d.ts.map | 1 - packages/ragmir-core/dist/guards.js | 4 - packages/ragmir-core/dist/guards.js.map | 1 - packages/ragmir-core/dist/index.d.ts | 25 - packages/ragmir-core/dist/index.d.ts.map | 1 - packages/ragmir-core/dist/index.js | 20 - packages/ragmir-core/dist/index.js.map | 1 - packages/ragmir-core/dist/ingest.d.ts | 4 - packages/ragmir-core/dist/ingest.d.ts.map | 1 - packages/ragmir-core/dist/ingest.js | 268 ----- packages/ragmir-core/dist/ingest.js.map | 1 - packages/ragmir-core/dist/init.d.ts | 2 - packages/ragmir-core/dist/init.d.ts.map | 1 - packages/ragmir-core/dist/init.js | 33 - packages/ragmir-core/dist/init.js.map | 1 - packages/ragmir-core/dist/mcp.d.ts | 8 - packages/ragmir-core/dist/mcp.d.ts.map | 1 - packages/ragmir-core/dist/mcp.js | 189 ---- packages/ragmir-core/dist/mcp.js.map | 1 - .../ragmir-core/dist/package-manager.d.ts | 11 - .../ragmir-core/dist/package-manager.d.ts.map | 1 - packages/ragmir-core/dist/package-manager.js | 93 -- .../ragmir-core/dist/package-manager.js.map | 1 - packages/ragmir-core/dist/parsing.d.ts | 12 - packages/ragmir-core/dist/parsing.d.ts.map | 1 - packages/ragmir-core/dist/parsing.js | 307 ------ packages/ragmir-core/dist/parsing.js.map | 1 - packages/ragmir-core/dist/query.d.ts | 5 - packages/ragmir-core/dist/query.d.ts.map | 1 - packages/ragmir-core/dist/query.js | 180 ---- packages/ragmir-core/dist/query.js.map | 1 - packages/ragmir-core/dist/redaction.d.ts | 7 - packages/ragmir-core/dist/redaction.d.ts.map | 1 - packages/ragmir-core/dist/redaction.js | 93 -- packages/ragmir-core/dist/redaction.js.map | 1 - packages/ragmir-core/dist/research.d.ts | 9 - packages/ragmir-core/dist/research.d.ts.map | 1 - packages/ragmir-core/dist/research.js | 335 ------- packages/ragmir-core/dist/research.js.map | 1 - packages/ragmir-core/dist/security.d.ts | 3 - packages/ragmir-core/dist/security.d.ts.map | 1 - packages/ragmir-core/dist/security.js | 106 -- packages/ragmir-core/dist/security.js.map | 1 - .../ragmir-core/dist/semantic-config.d.ts | 9 - .../ragmir-core/dist/semantic-config.d.ts.map | 1 - packages/ragmir-core/dist/semantic-config.js | 35 - .../ragmir-core/dist/semantic-config.js.map | 1 - packages/ragmir-core/dist/setup.d.ts | 32 - packages/ragmir-core/dist/setup.d.ts.map | 1 - packages/ragmir-core/dist/setup.js | 74 -- packages/ragmir-core/dist/setup.js.map | 1 - packages/ragmir-core/dist/skill.d.ts | 66 -- packages/ragmir-core/dist/skill.d.ts.map | 1 - packages/ragmir-core/dist/skill.js | 652 ------------ packages/ragmir-core/dist/skill.js.map | 1 - packages/ragmir-core/dist/sources.d.ts | 16 - packages/ragmir-core/dist/sources.d.ts.map | 1 - packages/ragmir-core/dist/sources.js | 71 -- packages/ragmir-core/dist/sources.js.map | 1 - packages/ragmir-core/dist/store.d.ts | 13 - packages/ragmir-core/dist/store.d.ts.map | 1 - packages/ragmir-core/dist/store.js | 94 -- packages/ragmir-core/dist/store.js.map | 1 - packages/ragmir-core/dist/text.d.ts | 3 - packages/ragmir-core/dist/text.d.ts.map | 1 - packages/ragmir-core/dist/text.js | 10 - packages/ragmir-core/dist/text.js.map | 1 - packages/ragmir-core/dist/types.d.ts | 322 ------ packages/ragmir-core/dist/types.d.ts.map | 1 - packages/ragmir-core/dist/types.js | 2 - packages/ragmir-core/dist/types.js.map | 1 - packages/ragmir-core/dist/version.d.ts | 2 - packages/ragmir-core/dist/version.d.ts.map | 1 - packages/ragmir-core/dist/version.js | 2 - packages/ragmir-core/dist/version.js.map | 1 - packages/ragmir-tts/dist/cli.d.ts | 3 - packages/ragmir-tts/dist/cli.d.ts.map | 1 - packages/ragmir-tts/dist/cli.js | 197 ---- packages/ragmir-tts/dist/cli.js.map | 1 - packages/ragmir-tts/dist/index.d.ts | 82 -- packages/ragmir-tts/dist/index.d.ts.map | 1 - packages/ragmir-tts/dist/index.js | 250 ----- packages/ragmir-tts/dist/index.js.map | 1 - 129 files changed, 5983 deletions(-) delete mode 100644 packages/ragmir-core/dist/access-log.d.ts delete mode 100644 packages/ragmir-core/dist/access-log.d.ts.map delete mode 100644 packages/ragmir-core/dist/access-log.js delete mode 100644 packages/ragmir-core/dist/access-log.js.map delete mode 100644 packages/ragmir-core/dist/chunking.d.ts delete mode 100644 packages/ragmir-core/dist/chunking.d.ts.map delete mode 100644 packages/ragmir-core/dist/chunking.js delete mode 100644 packages/ragmir-core/dist/chunking.js.map delete mode 100644 packages/ragmir-core/dist/cli.d.ts delete mode 100644 packages/ragmir-core/dist/cli.d.ts.map delete mode 100755 packages/ragmir-core/dist/cli.js delete mode 100644 packages/ragmir-core/dist/cli.js.map delete mode 100644 packages/ragmir-core/dist/config.d.ts delete mode 100644 packages/ragmir-core/dist/config.d.ts.map delete mode 100644 packages/ragmir-core/dist/config.js delete mode 100644 packages/ragmir-core/dist/config.js.map delete mode 100644 packages/ragmir-core/dist/defaults.d.ts delete mode 100644 packages/ragmir-core/dist/defaults.d.ts.map delete mode 100644 packages/ragmir-core/dist/defaults.js delete mode 100644 packages/ragmir-core/dist/defaults.js.map delete mode 100644 packages/ragmir-core/dist/destroy.d.ts delete mode 100644 packages/ragmir-core/dist/destroy.d.ts.map delete mode 100644 packages/ragmir-core/dist/destroy.js delete mode 100644 packages/ragmir-core/dist/destroy.js.map delete mode 100644 packages/ragmir-core/dist/doctor.d.ts delete mode 100644 packages/ragmir-core/dist/doctor.d.ts.map delete mode 100644 packages/ragmir-core/dist/doctor.js delete mode 100644 packages/ragmir-core/dist/doctor.js.map delete mode 100644 packages/ragmir-core/dist/embeddings.d.ts delete mode 100644 packages/ragmir-core/dist/embeddings.d.ts.map delete mode 100644 packages/ragmir-core/dist/embeddings.js delete mode 100644 packages/ragmir-core/dist/embeddings.js.map delete mode 100644 packages/ragmir-core/dist/evaluate.d.ts delete mode 100644 packages/ragmir-core/dist/evaluate.d.ts.map delete mode 100644 packages/ragmir-core/dist/evaluate.js delete mode 100644 packages/ragmir-core/dist/evaluate.js.map delete mode 100644 packages/ragmir-core/dist/files.d.ts delete mode 100644 packages/ragmir-core/dist/files.d.ts.map delete mode 100644 packages/ragmir-core/dist/files.js delete mode 100644 packages/ragmir-core/dist/files.js.map delete mode 100644 packages/ragmir-core/dist/gitignore.d.ts delete mode 100644 packages/ragmir-core/dist/gitignore.d.ts.map delete mode 100644 packages/ragmir-core/dist/gitignore.js delete mode 100644 packages/ragmir-core/dist/gitignore.js.map delete mode 100644 packages/ragmir-core/dist/guards.d.ts delete mode 100644 packages/ragmir-core/dist/guards.d.ts.map delete mode 100644 packages/ragmir-core/dist/guards.js delete mode 100644 packages/ragmir-core/dist/guards.js.map delete mode 100644 packages/ragmir-core/dist/index.d.ts delete mode 100644 packages/ragmir-core/dist/index.d.ts.map delete mode 100644 packages/ragmir-core/dist/index.js delete mode 100644 packages/ragmir-core/dist/index.js.map delete mode 100644 packages/ragmir-core/dist/ingest.d.ts delete mode 100644 packages/ragmir-core/dist/ingest.d.ts.map delete mode 100644 packages/ragmir-core/dist/ingest.js delete mode 100644 packages/ragmir-core/dist/ingest.js.map delete mode 100644 packages/ragmir-core/dist/init.d.ts delete mode 100644 packages/ragmir-core/dist/init.d.ts.map delete mode 100644 packages/ragmir-core/dist/init.js delete mode 100644 packages/ragmir-core/dist/init.js.map delete mode 100644 packages/ragmir-core/dist/mcp.d.ts delete mode 100644 packages/ragmir-core/dist/mcp.d.ts.map delete mode 100644 packages/ragmir-core/dist/mcp.js delete mode 100644 packages/ragmir-core/dist/mcp.js.map delete mode 100644 packages/ragmir-core/dist/package-manager.d.ts delete mode 100644 packages/ragmir-core/dist/package-manager.d.ts.map delete mode 100644 packages/ragmir-core/dist/package-manager.js delete mode 100644 packages/ragmir-core/dist/package-manager.js.map delete mode 100644 packages/ragmir-core/dist/parsing.d.ts delete mode 100644 packages/ragmir-core/dist/parsing.d.ts.map delete mode 100644 packages/ragmir-core/dist/parsing.js delete mode 100644 packages/ragmir-core/dist/parsing.js.map delete mode 100644 packages/ragmir-core/dist/query.d.ts delete mode 100644 packages/ragmir-core/dist/query.d.ts.map delete mode 100644 packages/ragmir-core/dist/query.js delete mode 100644 packages/ragmir-core/dist/query.js.map delete mode 100644 packages/ragmir-core/dist/redaction.d.ts delete mode 100644 packages/ragmir-core/dist/redaction.d.ts.map delete mode 100644 packages/ragmir-core/dist/redaction.js delete mode 100644 packages/ragmir-core/dist/redaction.js.map delete mode 100644 packages/ragmir-core/dist/research.d.ts delete mode 100644 packages/ragmir-core/dist/research.d.ts.map delete mode 100644 packages/ragmir-core/dist/research.js delete mode 100644 packages/ragmir-core/dist/research.js.map delete mode 100644 packages/ragmir-core/dist/security.d.ts delete mode 100644 packages/ragmir-core/dist/security.d.ts.map delete mode 100644 packages/ragmir-core/dist/security.js delete mode 100644 packages/ragmir-core/dist/security.js.map delete mode 100644 packages/ragmir-core/dist/semantic-config.d.ts delete mode 100644 packages/ragmir-core/dist/semantic-config.d.ts.map delete mode 100644 packages/ragmir-core/dist/semantic-config.js delete mode 100644 packages/ragmir-core/dist/semantic-config.js.map delete mode 100644 packages/ragmir-core/dist/setup.d.ts delete mode 100644 packages/ragmir-core/dist/setup.d.ts.map delete mode 100644 packages/ragmir-core/dist/setup.js delete mode 100644 packages/ragmir-core/dist/setup.js.map delete mode 100644 packages/ragmir-core/dist/skill.d.ts delete mode 100644 packages/ragmir-core/dist/skill.d.ts.map delete mode 100644 packages/ragmir-core/dist/skill.js delete mode 100644 packages/ragmir-core/dist/skill.js.map delete mode 100644 packages/ragmir-core/dist/sources.d.ts delete mode 100644 packages/ragmir-core/dist/sources.d.ts.map delete mode 100644 packages/ragmir-core/dist/sources.js delete mode 100644 packages/ragmir-core/dist/sources.js.map delete mode 100644 packages/ragmir-core/dist/store.d.ts delete mode 100644 packages/ragmir-core/dist/store.d.ts.map delete mode 100644 packages/ragmir-core/dist/store.js delete mode 100644 packages/ragmir-core/dist/store.js.map delete mode 100644 packages/ragmir-core/dist/text.d.ts delete mode 100644 packages/ragmir-core/dist/text.d.ts.map delete mode 100644 packages/ragmir-core/dist/text.js delete mode 100644 packages/ragmir-core/dist/text.js.map delete mode 100644 packages/ragmir-core/dist/types.d.ts delete mode 100644 packages/ragmir-core/dist/types.d.ts.map delete mode 100644 packages/ragmir-core/dist/types.js delete mode 100644 packages/ragmir-core/dist/types.js.map delete mode 100644 packages/ragmir-core/dist/version.d.ts delete mode 100644 packages/ragmir-core/dist/version.d.ts.map delete mode 100644 packages/ragmir-core/dist/version.js delete mode 100644 packages/ragmir-core/dist/version.js.map delete mode 100644 packages/ragmir-tts/dist/cli.d.ts delete mode 100644 packages/ragmir-tts/dist/cli.d.ts.map delete mode 100755 packages/ragmir-tts/dist/cli.js delete mode 100644 packages/ragmir-tts/dist/cli.js.map delete mode 100644 packages/ragmir-tts/dist/index.d.ts delete mode 100644 packages/ragmir-tts/dist/index.d.ts.map delete mode 100644 packages/ragmir-tts/dist/index.js delete mode 100644 packages/ragmir-tts/dist/index.js.map 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/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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAQnC,MAAM,iBAAiB,GAAG,CAAC;KACxB,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC7C,CAAC;KACD,MAAM,EAAE,CAAA;AAEX,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC;IAC/B,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,CAAC;SACE,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAC5C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KAC3C,CAAC;SACD,MAAM,EAAE;CACZ,CAAC,CAAA;AAEF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAA0B;IACpE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IAC9D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAA;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;IAChE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAA;IACnD,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACtF,MAAM,KAAK,GAA2B,EAAE,CAAA;IAExC,KAAK,MAAM,WAAW,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,IAAI,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QAC1E,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9D,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QAClE,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CACvD,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,CAC/C,CAAA;QACD,MAAM,QAAQ,GACZ,aAAa,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAA;QAE7F,MAAM,MAAM,GAAyB;YACnC,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,aAAa,EAAE,WAAW,CAAC,aAAa;YACxC,IAAI;YACJ,aAAa;YACb,YAAY;YACZ,GAAG,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC;YAC5B,QAAQ,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;SACzC,CAAA;QACD,IAAI,WAAW,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,CAAC,EAAE,GAAG,WAAW,CAAC,EAAE,CAAA;QAC5B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACpB,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAA;IACxD,MAAM,YAAY,CAAC,MAAM,EAAE;QACzB,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,KAAK,CAAC,MAAM;KAC1B,CAAC,CAAA;IACF,OAAO;QACL,UAAU;QACV,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,KAAK,CAAC,MAAM;QACnB,IAAI;QACJ,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI;QAC3B,MAAM,EAAE,IAAI,GAAG,KAAK,CAAC,MAAM;QAC3B,KAAK;KACN,CAAA;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,UAAkB;IAElB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAC9C,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;IAEtD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAA;IACtD,CAAC;IAED,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAA;IACpE,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAA;IACzC,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAwC;IACpE,MAAM,MAAM,GAAgB;QAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,aAAa,EAAE,KAAK,CAAC,aAAa;KACnC,CAAA;IACD,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAA;IACtB,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;IAC1B,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,OAA2B;IAC5D,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AAC/D,CAAC"} \ 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":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,8BAA8B,GAC/B,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,QAAQ,EACR,mBAAmB,EACnB,SAAS,GACV,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAY7C,MAAM,cAAc,GAAG,OAAO,CAAA;AAC9B,MAAM,2BAA2B,GAAG,EAAE,CAAA;AACtC,MAAM,qBAAqB,GAAG;IAC5B,iCAAiC;IACjC,gCAAgC;IAChC,4BAA4B;IAC5B,yBAAyB;IACzB,8BAA8B;IAC9B,yBAAyB;CAC1B,CAAA;AACD,MAAM,oBAAoB,GAAG;IAC3B,mCAAmC;IACnC,sCAAsC;IACtC,sCAAsC;IACtC,gCAAgC;CACjC,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,UAAyB,EAAE;IACtD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACrE,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAA;IACpD,MAAM,KAAK,GAAG,SAAS,CAAC,cAAc,CAAA;IACtC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IAC5E,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAA;IAClE,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,CAAC,CAAA;IACjG,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;IAC1E,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO;QAClC,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAA;IACjE,MAAM,SAAS,GAAgB,EAAE,CAAA;IACjC,MAAM,MAAM,GAA2B,EAAE,CAAA;IACzC,MAAM,eAAe,GAAqB,EAAE,CAAA;IAC5C,MAAM,cAAc,GAAa,EAAE,CAAA;IAEnC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACpF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAC5C,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAChD,MAAM,MAAM,GAAG,aAAa,CAC1B,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,EAClC,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,YAAY,CACpB,CAAA;YACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;QACtF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,YAAY;gBACvB,MAAM,EAAE,EAAE;gBACV,UAAU,EAAE,EAAE;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,IAAI,CAAC,YAAY;oBACvB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAChE;aACF,CAAA;QACH,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACzB,SAAQ;QACV,CAAC;QACD,eAAe,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;QAC1C,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAClC,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IAClC,CAAC;IAED,MAAM,IAAI,GAAgB,EAAE,CAAA;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACrE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAA;QAC/D,MAAM,UAAU,GAAG,MAAM,UAAU,CACjC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAChC,MAAM,CACP,CAAA;QACD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;YAChC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,CAAA;YAC3F,CAAC;YACD,IAAI,CAAC,IAAI,CAAC;gBACR,GAAG,KAAK;gBACR,MAAM;gBACN,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;gBAC3C,cAAc,EAAE,MAAM,CAAC,cAAc;aACtC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,IAAI,CAAC,CAAA;IAC5C,MAAM,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IAClC,MAAM,mBAAmB,CACvB,cAAc,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;QACtC,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAC3C,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAChE,CAAC,CAAC,EACF,MAAM,CACP,CAAA;IACD,MAAM,YAAY,CAAC,MAAM,EAAE;QACzB,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,SAAS,CAAC,MAAM;QAC7B,UAAU,EAAE,eAAe,CAAC,eAAe,CAAC;KAC7C,CAAC,CAAA;IAEF,OAAO;QACL,YAAY,EAAE,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;QACpE,YAAY,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;QAC/D,WAAW,EAAE,aAAa,CAAC,IAAI;QAC/B,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,eAAe,EAAE,SAAS,CAAC,eAAe;QAC1C,cAAc,EAAE,KAAK,CAAC,MAAM;QAC5B,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM;QACnE,gBAAgB,EAAE,oBAAoB,CAAC,SAAS,CAAC,YAAY,EAAE,uBAAuB,CAAC;QACvF,cAAc,EAAE,oBAAoB,CAAC,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;QACzE,cAAc,EAAE,oBAAoB,CAAC,SAAS,CAAC,YAAY,EAAE,gBAAgB,CAAC;QAC9E,cAAc;QACd,qBAAqB,EAAE,8BAA8B,CAAC,SAAS,CAAC,YAAY,CAAC;QAC7E,UAAU,EAAE,eAAe,CAAC,eAAe,CAAC;QAC5C,MAAM;KACP,CAAA;AACH,CAAC;AAED,SAAS,iBAAiB,CACxB,IAAiB,EACjB,YAA+C,EAC/C,MAA6D;IAE7D,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAA;IACjD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA;QACvD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAClB,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;IAC5C,CAAC;IAED,MAAM,YAAY,GAAgB,EAAE,CAAA;IACpC,KAAK,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,SAAQ;QACV,CAAC;QACD,IACE,QAAQ,CAAC,KAAK,CACZ,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;YAC9B,GAAG,CAAC,iBAAiB,KAAK,MAAM,CAAC,iBAAiB;YAClD,GAAG,CAAC,cAAc,KAAK,MAAM,CAAC,cAAc,CAC/C,EACD,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;IACD,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAC7C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAA;IACpC,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAA;IACpD,MAAM,KAAK,GAAG,SAAS,CAAC,cAAc,CAAA;IACtC,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC7D,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAA;IACzC,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAEjE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,YAAY,EAAE,EAAE;YAChB,cAAc;YACd,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,cAAc,EAAE,CAAC,GAAG,cAAc,CAAC;YACnC,qBAAqB,EAAE,8BAA8B,CAAC,SAAS,CAAC,YAAY,CAAC;YAC7E,iBAAiB,EAAE,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,YAAY,CAAC;YACnE,gBAAgB,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC5E,YAAY,EAAE,EAAE;YAChB,WAAW,EAAE,CAAC;SACf,CAAA;IACH,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,CAG/D,CAAA;IACF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;IACxC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAA;IAChD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QACrE,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjB,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,GAAG,EAAU,CAAA;YAC1E,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAC/B,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,aAAa,CAAC,CAAA;QAChD,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAA;IAC5C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IACzC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAEzF,OAAO;QACL,YAAY,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;aAChC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;aACtC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAClD,cAAc;QACd,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,cAAc,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,EAAE;QAC1C,qBAAqB,EAAE,8BAA8B,CAAC,SAAS,CAAC,YAAY,CAAC;QAC7E,iBAAiB,EAAE,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,YAAY,CAAC;QACnE,gBAAgB,EAAE,cAAc,CAAC,MAAM,CACrC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAC7D;QACD,YAAY,EAAE,CAAC,GAAG,UAAU,CAAC;aAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACf,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAA;YACb,CAAC;YACD,MAAM,eAAe,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAClD,MAAM,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC5C,OAAO,CAAC,eAAe,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,eAAe,CAAC,CAAA;QACpE,CAAC,CAAC;aACD,IAAI,EAAE;QACT,WAAW,EAAE,IAAI,CAAC,MAAM;KACzB,CAAA;AACH,CAAC;AAED,SAAS,iBAAiB,CACxB,cAA4B,EAC5B,YAA6C;IAE7C,MAAM,aAAa,GAAG;QACpB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;QAClD,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;KACjD,CAAA;IACD,OAAO;QACL,mBAAmB,EAAE,mBAAmB,CAAC,cAAc,CAAC;QACxD,iBAAiB,EAAE,cAAc,CAAC,aAAa,EAAE,qBAAqB,EAAE,mBAAmB,CAAC;QAC5F,gBAAgB,EAAE,cAAc,CAAC,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,CAAC;KAC1F,CAAA;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAmB;IAC9C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAA;IAC9C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAoB,CAAA;IAEjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,aAAa,CAAC,UAAU,EAAE,UAAU,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;QACpF,MAAM,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC5D,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC5B,aAAa,CAAC,aAAa,EAAE,QAAQ,WAAW,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;QACxE,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAA;IAC3C,MAAM,OAAO,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC,MAAM,CACrD,CAAC,SAAS,EAAE,EAAE,CACZ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE,CAC7B,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CACrE,CACJ,CAAA;IACD,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;SAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SAC7E,KAAK,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAA;AAC1C,CAAC;AAED,SAAS,cAAc,CACrB,aAAuB,EACvB,QAAkB,EAClB,MAAc;IAEd,OAAO,aAAa;SACjB,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;SAChF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SAClC,KAAK,CAAC,CAAC,EAAE,2BAA2B,CAAC;SACrC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;AACtD,CAAC;AAED,SAAS,aAAa,CAAC,MAA6B,EAAE,GAAW,EAAE,YAAoB;IACrF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;IACnC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;AACxB,CAAC;AAED,SAAS,iBAAiB,CACxB,MAA6B;IAE7B,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;SACzB,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;SACvC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;AACxE,CAAC;AAED,SAAS,qBAAqB,CAAC,YAAoB;IACjD,OAAO,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CACvF,cAAc,EACd,EAAE,CACH,CAAA;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,MAA8C,EAC9C,KAAwD;IAExD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IACzF,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAA;IACxC,KAAK,MAAM,MAAM,IAAI,MAAM,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QACtD,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClE,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;IACD,OAAO,cAAc,CAAA;AACvB,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,KAAU,EACV,WAAmB,EACnB,MAA+B;IAE/B,MAAM,OAAO,GAAG,IAAI,KAAK,CAAI,KAAK,CAAC,MAAM,CAAC,CAAA;IAC1C,IAAI,SAAS,GAAG,CAAC,CAAA;IAEjB,KAAK,UAAU,GAAG;QAChB,OAAO,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,SAAS,CAAA;YACvB,SAAS,IAAI,CAAC,CAAA;YACd,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;YACzB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAA;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IAC3F,OAAO,OAAO,CAAA;AAChB,CAAC"} \ 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":"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"} \ 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-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 From 27bde5210bcfad25a8308adebf37782e9dbc316b Mon Sep 17 00:00:00 2001 From: Jean-Baptiste THERY Date: Sat, 4 Jul 2026 03:09:59 +0700 Subject: [PATCH 3/5] fix(sources): write source entries to config.json instead of sources.txt ragmir sources add/list now read and write the sources array of .ragmir/config.json instead of the legacy .ragmir/sources.txt file. This matches the config-first direction: ragmir init already stopped creating sources.txt, but sources add still wrote to it, leaving projects with an empty config sources array and all entries stranded in the legacy file. - addSourceEntries writes into config.json sources, preserving other fields. - listSourceEntries reads from config.json and merges a legacy sources.txt read-only when present, so existing projects keep working. - Never create or write sources.txt anymore. - Remove the now-unused SOURCES_FILE_HEADER from defaults.ts. --- packages/ragmir-core/src/defaults.ts | 8 -- packages/ragmir-core/src/sources.test.ts | 36 +++++--- packages/ragmir-core/src/sources.ts | 100 ++++++++++++++++++----- 3 files changed, 104 insertions(+), 40 deletions(-) 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) } From 8d6a6689739c1092e40b27ad770824f0ef343ba3 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste THERY Date: Sat, 4 Jul 2026 03:10:06 +0700 Subject: [PATCH 4/5] docs: remove dead kb references and sync sources.txt guidance Clean up documentation that still presented the legacy kb binary and .kb/ paths as current, and sync the sources guidance with the new config-first behavior. - SECURITY-HARDENING.md: .kb/ to .ragmir/, kb destroy-index to ragmir destroy-index, .kb/config.json to .ragmir/config.json. - SECURITY.md: data boundary now favors .ragmir/, keeps .kb/ as legacy. - CHANGELOG.md: rewrite historical kb command names to ragmir with a legacy note; KB_INCLUDE_EXTENSIONS to RAGMIR_INCLUDE_EXTENSIONS. - README.md: sources.txt legacy note now matches sources.ts. Add a Mermaid diagram for the rawDir plus sources plus legacy merge flow. - AGENTS.md and docs/cli-reference.md: sources add/list target config.json. --- AGENTS.md | 10 ++++++---- CHANGELOG.md | 29 +++++++++++++++++------------ README.md | 19 +++++++++++++++---- SECURITY-HARDENING.md | 8 ++++---- SECURITY.md | 2 +- docs/cli-reference.md | 4 ++-- 6 files changed, 45 insertions(+), 27 deletions(-) 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. | From 9af7691f17137af3e9e86f7fd6cf2d1ffa9d13f5 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste THERY Date: Sat, 4 Jul 2026 03:13:16 +0700 Subject: [PATCH 5/5] fix(core): build ragmir-tts before core check and test dist/ is now gitignored build output, so ragmir-core can no longer rely on a committed ragmir-tts/dist to resolve the @jcode.labs/ragmir-tts import during typecheck and tests. In CI the check step runs before build, so the tts dist does not exist yet and tsc --noEmit fails with 'Cannot find module'. Make the core check and test scripts build ragmir-tts first, so the tts dist exists before core resolves it. This mirrors how pnpm build already orders tts before core. --- packages/ragmir-core/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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",