@jcode.labs/ragmir 2.20.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAE9F,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EACL,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAE5E,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAOrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAYtE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE1F,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxD,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;AAE7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAcvD,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,YAAY,CAAA;AAMnB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAOlE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAU1D,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,uBAAuB,CAAA;AAgF9B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAM7D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAE9F,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EACL,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAE5E,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAOrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAYtE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE1F,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxD,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;AAE7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAcvD,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,YAAY,CAAA;AAMnB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAOlE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAU1D,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,uBAAuB,CAAA;AAS9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAgFlD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAM7D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
@@ -1,2 +1,2 @@
1
- export declare const RAGMIR_SETUP_PROMPT = "Set up Ragmir in this repository. Work interactively: inspect first, ask one concise numbered batch of questions, wait for my answers, then execute. Never assume consent for dependency changes, model downloads, replacing skills, or sharing data.\n\nOutcome: Core installed with the repository's package manager; useful sources selected; secrets and generated noise excluded; tools connected; cited retrieval verified. Semantic retrieval, team features, Chat, and TTS are optional.\n\n1. Inspect without changes:\n- Find the repository or monorepo root. Read package.json packageManager, lockfiles, workspace and Node/version-manager files, .gitignore, existing .ragmir state, README, AGENTS/CLAUDE/CODEX guidance, docs, specs/ADRs, apps/packages, important config, source, and tests.\n- Detect Node 22+ and pnpm, npm, Yarn, or Bun. Prefer packageManager, then the lockfile. Respect workspace-root flags and mise/asdf/Volta. Never create a second lockfile. If signals conflict, ask.\n- If Ragmir exists, inspect its version, config, status, sources, and rgr upgrade --check before changing it.\n\n2. Ask only what the repository did not answer, then wait:\n1) Which repository/monorepo base should own the knowledge base, and are nested app bases wanted?\n2) Which clients: Claude Code, Codex, Kimi, OpenCode, Cline, another MCP client, or none?\n3) Keep default offline local-hash, or allow one semantic-model download for better natural-language retrieval?\n4) Solo or team use? If team, what Git/Drive/folder revision is authoritative and who may receive metadata-only snapshots?\n5) Core only, or optional Chat? For Chat choose lite (~0.49 GB), fast (~3.35 GB), or quality (~5.15 GB).\n6) Optional TTS? Ask language (en/fr/es offline; ja/th/zh require explicit Edge unless a local model is supplied) and whether text may reach Edge.\n7) Which private/external folders are allowed, which must never be indexed, and may I install packages, edit local config, and run approved downloads now?\n\n3. Implement after approval:\n- Install @jcode.labs/ragmir as a dev dependency with the detected manager. Install Chat/TTS only if selected, at a compatible version.\n- Run the matching rgr setup --no-ingest --agents <selected> command. Keep project scope. If a same-name skill is unmanaged, show the diff and ask before --force.\n- Build a narrow .ragmir/config.json. Prefer stable relative globs for root guidance, docs/specs/ADRs, package READMEs/manifests, useful app config, and source/tests that explain behavior. Include locales only when useful.\n- Exclude .env*, credentials, keys, unapproved dumps/customer data, dependencies, generated/build/cache/coverage/log folders, vendored code, binaries/media, and .ragmir storage/models. In monorepos, keep nested bases scoped and shared knowledge at root.\n- Run preview and audit --unsupported before ingest. Review redactions, unsupported/oversized files, duplicates, chunks, and sensitive paths. Fix config first, then ingest.\n- For an existing install, use rgr upgrade and doctor --fix as indicated. Never delete the active index first. Rebuild only for incompatible embedding, chunk, or index-policy changes.\n- Enable semantic retrieval, preload Chat, or preload TTS only after consent. Use non-sensitive TTS preload text.\n- For teams, ingest locally, create an ignored metadata-only snapshot, compare it, explain every drift, and never choose authority automatically.\n\n4. Prove the result:\n- Run rgr doctor --deep, rgr audit --unsupported, and rgr security-audit.\n- Run representative searches with citations and --explain. Create a small local golden suite for project questions and run rgr evaluate; do not weaken gates to pass.\n- Report detected tools, answers, packages, downloads, config/sources/exclusions, changed files, readiness, retrieval results, team status, and exact remaining actions.\n\nNever commit .ragmir, corpus files, models, snapshots, logs, or secrets. Never claim offline, semantic, team synchronization, or retrieval quality without evidence.";
1
+ export declare const RAGMIR_SETUP_PROMPT = "Set up Ragmir in this repository. Work interactively: inspect first, ask one concise numbered batch of questions, wait for my answers, then execute. Never assume consent for dependency changes, model downloads, replacing skills, or sharing data.\n\nOutcome: Core installed with the repository's package manager; useful sources selected; secrets and generated noise excluded; tools connected; cited retrieval verified. Semantic retrieval, team features, Chat, and TTS are optional.\n\n1. Inspect without changes:\n- Find the repository or monorepo root. Read package.json packageManager, lockfiles, workspace and Node/version-manager files, .gitignore, existing .ragmir state, README, AGENTS/CLAUDE/CODEX guidance, docs, specs/ADRs, apps/packages, important config, source, and tests.\n- Detect Node 22+ and pnpm, npm, Yarn, or Bun. Prefer packageManager, then the lockfile. Respect workspace-root flags and mise/asdf/Volta. Never create a second lockfile. If signals conflict, ask.\n- If Ragmir exists, inspect its version, config, status, sources, and rgr upgrade --check before changing it.\n\n2. Ask only what the repository did not answer, then wait:\n1) Which repository/monorepo base should own the knowledge base, and are nested app bases wanted?\n2) Which clients: Claude Code, Codex, Kimi, OpenCode, Cline, another MCP client, or none?\n3) Keep default offline local-hash, or allow one semantic-model download for better natural-language retrieval?\n4) Solo or team? If team, is Git upstream authoritative, and should safe pulls be automatic or disabled with --no-pull?\n5) Core only, or optional Chat? For Chat choose lite (~0.49 GB), fast (~3.35 GB), or quality (~5.15 GB).\n6) Optional TTS? Ask language (en/fr/es offline; ja/th/zh require explicit Edge unless a local model is supplied) and whether text may reach Edge.\n7) Which private/external folders are allowed, which must never be indexed, and may I install packages, edit local config, and run approved downloads now?\n\n3. Implement after approval:\n- Install @jcode.labs/ragmir as a dev dependency with the detected manager. Install Chat/TTS only if selected, at a compatible version.\n- Run the matching rgr setup --no-ingest --agents <selected> command. Keep project scope. If a same-name skill is unmanaged, show the diff and ask before --force.\n- Build a narrow .ragmir/config.json. Prefer stable relative globs for root guidance, docs/specs/ADRs, package READMEs/manifests, useful app config, and source/tests that explain behavior. Include locales only when useful.\n- Exclude .env*, credentials, keys, unapproved dumps/customer data, dependencies, generated/build/cache/coverage/log folders, vendored code, binaries/media, and .ragmir storage/models. In monorepos, keep nested bases scoped and shared knowledge at root.\n- Run preview and audit --unsupported before ingest. Review redactions, unsupported/oversized files, duplicates, chunks, and sensitive paths. Fix config first, then ingest.\n- For an existing install, use rgr upgrade and doctor --fix as indicated. Never delete the active index first. Rebuild only for incompatible embedding, chunk, or index-policy changes.\n- Enable semantic retrieval, preload Chat, or preload TTS only after consent. Use non-sensitive TTS preload text.\n- For Git teams, run rgr team sync. It safely pulls and ingests; --no-pull keeps Git manual. Snapshots are advanced diagnostics.\n\n4. Prove the result:\n- Run rgr doctor --deep, rgr audit --unsupported, and rgr security-audit.\n- Run representative searches with citations and --explain. Create a small local golden suite for project questions and run rgr evaluate; do not weaken gates to pass.\n- Report detected tools, answers, packages, downloads, config/sources/exclusions, changed files, readiness, retrieval results, team status, and exact remaining actions.\n\nNever commit .ragmir, corpus files, models, snapshots, logs, or secrets. Never claim offline, semantic, team synchronization, or retrieval quality without evidence.";
2
2
  //# sourceMappingURL=setup-prompt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup-prompt.d.ts","sourceRoot":"","sources":["../src/setup-prompt.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,k8HAiCqI,CAAA"}
1
+ {"version":3,"file":"setup-prompt.d.ts","sourceRoot":"","sources":["../src/setup-prompt.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,86HAiCqI,CAAA"}
@@ -11,7 +11,7 @@ Outcome: Core installed with the repository's package manager; useful sources se
11
11
  1) Which repository/monorepo base should own the knowledge base, and are nested app bases wanted?
12
12
  2) Which clients: Claude Code, Codex, Kimi, OpenCode, Cline, another MCP client, or none?
13
13
  3) Keep default offline local-hash, or allow one semantic-model download for better natural-language retrieval?
14
- 4) Solo or team use? If team, what Git/Drive/folder revision is authoritative and who may receive metadata-only snapshots?
14
+ 4) Solo or team? If team, is Git upstream authoritative, and should safe pulls be automatic or disabled with --no-pull?
15
15
  5) Core only, or optional Chat? For Chat choose lite (~0.49 GB), fast (~3.35 GB), or quality (~5.15 GB).
16
16
  6) Optional TTS? Ask language (en/fr/es offline; ja/th/zh require explicit Edge unless a local model is supplied) and whether text may reach Edge.
17
17
  7) Which private/external folders are allowed, which must never be indexed, and may I install packages, edit local config, and run approved downloads now?
@@ -24,7 +24,7 @@ Outcome: Core installed with the repository's package manager; useful sources se
24
24
  - Run preview and audit --unsupported before ingest. Review redactions, unsupported/oversized files, duplicates, chunks, and sensitive paths. Fix config first, then ingest.
25
25
  - For an existing install, use rgr upgrade and doctor --fix as indicated. Never delete the active index first. Rebuild only for incompatible embedding, chunk, or index-policy changes.
26
26
  - Enable semantic retrieval, preload Chat, or preload TTS only after consent. Use non-sensitive TTS preload text.
27
- - For teams, ingest locally, create an ignored metadata-only snapshot, compare it, explain every drift, and never choose authority automatically.
27
+ - For Git teams, run rgr team sync. It safely pulls and ingests; --no-pull keeps Git manual. Snapshots are advanced diagnostics.
28
28
 
29
29
  4. Prove the result:
30
30
  - Run rgr doctor --deep, rgr audit --unsupported, and rgr security-audit.
@@ -0,0 +1,49 @@
1
+ import type { OperationOptions } from "./types.js";
2
+ export type TeamSyncStatus = "current" | "updated" | "action-required" | "offline" | "local-only" | "setup-required" | "index-not-ready";
3
+ export type TeamSyncGitState = "current" | "updated" | "update-available" | "dirty" | "ahead" | "diverged" | "detached" | "no-upstream" | "not-fetched" | "fetch-failed" | "update-failed" | "not-repository" | "inspection-failed";
4
+ export interface SyncTeamKnowledgeOptions extends OperationOptions {
5
+ cwd?: string;
6
+ autoPull?: boolean;
7
+ fetch?: boolean;
8
+ check?: boolean;
9
+ gitTimeoutMs?: number;
10
+ }
11
+ export interface TeamSyncGitReport {
12
+ state: TeamSyncGitState;
13
+ available: boolean;
14
+ root: string | null;
15
+ branch: string | null;
16
+ upstream: string | null;
17
+ head: string | null;
18
+ upstreamHead: string | null;
19
+ dirty: boolean | null;
20
+ ahead: number | null;
21
+ behind: number | null;
22
+ fetched: boolean;
23
+ freshnessVerified: boolean;
24
+ autoPull: boolean;
25
+ updated: boolean;
26
+ }
27
+ export interface TeamSyncIndexReport {
28
+ attempted: boolean;
29
+ operationalReady: boolean;
30
+ indexPolicyCurrent: boolean;
31
+ lastGoodIndexAvailable: boolean;
32
+ indexedFiles: number;
33
+ chunksIndexed: number;
34
+ rebuiltFiles: number;
35
+ reusedFiles: number;
36
+ errorCount: number;
37
+ securityAdvisories: number;
38
+ }
39
+ export interface TeamSyncReport {
40
+ status: TeamSyncStatus;
41
+ synchronized: boolean;
42
+ summary: string;
43
+ git: TeamSyncGitReport;
44
+ index: TeamSyncIndexReport;
45
+ warnings: string[];
46
+ recommendedActions: string[];
47
+ }
48
+ export declare function syncTeamKnowledge(options?: SyncTeamKnowledgeOptions): Promise<TeamSyncReport>;
49
+ //# sourceMappingURL=team-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-sync.d.ts","sourceRoot":"","sources":["../src/team-sync.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAA6C,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAQ7F,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,SAAS,GACT,iBAAiB,GACjB,SAAS,GACT,YAAY,GACZ,gBAAgB,GAChB,iBAAiB,CAAA;AAErB,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,SAAS,GACT,kBAAkB,GAClB,OAAO,GACP,OAAO,GACP,UAAU,GACV,UAAU,GACV,aAAa,GACb,aAAa,GACb,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,mBAAmB,CAAA;AAEvB,MAAM,WAAW,wBAAyB,SAAQ,gBAAgB;IAChE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,gBAAgB,CAAA;IACvB,SAAS,EAAE,OAAO,CAAA;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,CAAA;IAClB,gBAAgB,EAAE,OAAO,CAAA;IACzB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,sBAAsB,EAAE,OAAO,CAAA;IAC/B,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,cAAc,CAAA;IACtB,YAAY,EAAE,OAAO,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,iBAAiB,CAAA;IACtB,KAAK,EAAE,mBAAmB,CAAA;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,kBAAkB,EAAE,MAAM,EAAE,CAAA;CAC7B;AAsBD,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,cAAc,CAAC,CAwCzB"}
@@ -0,0 +1,436 @@
1
+ import { spawn } from "node:child_process";
2
+ import path from "node:path";
3
+ import { doctor } from "./doctor.js";
4
+ import { ingest } from "./ingest.js";
5
+ import { throwIfAborted } from "./operation.js";
6
+ const DEFAULT_GIT_TIMEOUT_MS = 30_000;
7
+ const MAX_GIT_TIMEOUT_MS = 300_000;
8
+ const MAX_GIT_OUTPUT_BYTES = 1_048_576;
9
+ const BRANCH_TRACKING_FORMAT = "%(refname:short)%00%(upstream)%00%(upstream:short)%00%(upstream:remotename)%00%(upstream:remoteref)";
10
+ export async function syncTeamKnowledge(options = {}) {
11
+ const cwd = path.resolve(options.cwd ?? process.cwd());
12
+ const initialDoctor = await doctorWithSignal(cwd, options.signal);
13
+ const projectRoot = initialDoctor.projectRoot;
14
+ const autoPull = options.autoPull !== false;
15
+ const fetch = options.fetch !== false;
16
+ const check = options.check === true;
17
+ const gitTimeoutMs = validateGitTimeout(options.gitTimeoutMs ?? DEFAULT_GIT_TIMEOUT_MS);
18
+ if (!initialDoctor.initialized) {
19
+ const git = emptyGitReport("inspection-failed", autoPull);
20
+ const index = indexReport(initialDoctor, false);
21
+ return assembleReport(git, index, ["Ragmir is not initialized in this project."], ["Run `rgr setup`, then run `rgr team sync` again."]);
22
+ }
23
+ const gitOptions = {
24
+ autoPull: autoPull && !check,
25
+ fetch,
26
+ gitTimeoutMs,
27
+ };
28
+ if (options.signal) {
29
+ gitOptions.signal = options.signal;
30
+ }
31
+ const git = await synchronizeGit(projectRoot, gitOptions);
32
+ const index = check
33
+ ? indexReport(initialDoctor, false)
34
+ : await refreshIndex(projectRoot, initialDoctor, options.signal);
35
+ const warnings = gitWarnings(git, check);
36
+ const actions = buildRecommendedActions(git, index, check);
37
+ return assembleReport(git, index, warnings, actions);
38
+ }
39
+ async function synchronizeGit(cwd, options) {
40
+ const rootResult = await runGit(cwd, ["rev-parse", "--show-toplevel"], options);
41
+ throwIfAborted(options.signal);
42
+ if (rootResult.unavailable || rootResult.code !== 0) {
43
+ return emptyGitReport("not-repository", options.autoPull);
44
+ }
45
+ const root = path.resolve(rootResult.stdout.trim());
46
+ const branchResult = await runGit(root, ["symbolic-ref", "--quiet", "--short", "HEAD"], options);
47
+ const head = await readRevision(root, "HEAD", options);
48
+ if (branchResult.code !== 0 || !head) {
49
+ return {
50
+ ...emptyGitReport("detached", options.autoPull),
51
+ available: true,
52
+ root,
53
+ head,
54
+ };
55
+ }
56
+ const branch = branchResult.stdout.trim();
57
+ const tracking = await readBranchTracking(root, branch, options);
58
+ if (!tracking) {
59
+ return {
60
+ ...emptyGitReport("no-upstream", options.autoPull),
61
+ available: true,
62
+ root,
63
+ branch,
64
+ head,
65
+ };
66
+ }
67
+ let fetched = false;
68
+ let freshnessVerified = tracking.remote.length === 0 || tracking.remote === ".";
69
+ if (options.fetch && tracking.remote.length > 0 && tracking.remote !== ".") {
70
+ const fetchResult = await runGit(root, [
71
+ "fetch",
72
+ "--quiet",
73
+ "--no-tags",
74
+ "--show-forced-updates",
75
+ "--",
76
+ tracking.remote,
77
+ `+${tracking.remoteRef}:${tracking.upstreamRef}`,
78
+ ], options);
79
+ throwIfAborted(options.signal);
80
+ if (fetchResult.code !== 0) {
81
+ return await gitReport("fetch-failed", root, tracking, head, false, false, options.autoPull, options);
82
+ }
83
+ fetched = true;
84
+ freshnessVerified = true;
85
+ }
86
+ else if (!options.fetch && tracking.remote.length > 0 && tracking.remote !== ".") {
87
+ return await gitReport("not-fetched", root, tracking, head, false, false, options.autoPull, options);
88
+ }
89
+ const report = await gitReport("inspection-failed", root, tracking, head, fetched, freshnessVerified, options.autoPull, options);
90
+ if (report.dirty === null || report.ahead === null || report.behind === null) {
91
+ return report;
92
+ }
93
+ if (report.dirty) {
94
+ return { ...report, state: "dirty" };
95
+ }
96
+ if (report.ahead > 0 && report.behind > 0) {
97
+ return { ...report, state: "diverged" };
98
+ }
99
+ if (report.ahead > 0) {
100
+ return { ...report, state: "ahead" };
101
+ }
102
+ if (report.behind === 0) {
103
+ return { ...report, state: "current" };
104
+ }
105
+ if (!options.autoPull) {
106
+ return { ...report, state: "update-available" };
107
+ }
108
+ const mergeResult = await runGit(root, ["merge", "--ff-only", "--quiet", "--", tracking.upstreamRef], options);
109
+ throwIfAborted(options.signal);
110
+ if (mergeResult.code !== 0) {
111
+ return { ...report, state: "update-failed" };
112
+ }
113
+ const [updatedHead, updatedCounts, updatedDirty] = await Promise.all([
114
+ readRevision(root, "HEAD", options),
115
+ readAheadBehind(root, tracking.upstreamRef, options),
116
+ readDirty(root, options),
117
+ ]);
118
+ const updatedReport = {
119
+ ...report,
120
+ state: "update-failed",
121
+ head: updatedHead ?? report.head,
122
+ ahead: updatedCounts?.ahead ?? null,
123
+ behind: updatedCounts?.behind ?? null,
124
+ dirty: updatedDirty,
125
+ updated: true,
126
+ };
127
+ if (!updatedCounts || updatedDirty === null) {
128
+ return updatedReport;
129
+ }
130
+ if (updatedDirty) {
131
+ return { ...updatedReport, state: "dirty" };
132
+ }
133
+ if (updatedCounts.ahead > 0 && updatedCounts.behind > 0) {
134
+ return { ...updatedReport, state: "diverged" };
135
+ }
136
+ if (updatedCounts.behind > 0) {
137
+ return updatedReport;
138
+ }
139
+ if (updatedCounts.ahead > 0) {
140
+ return { ...updatedReport, state: "ahead" };
141
+ }
142
+ return { ...updatedReport, state: "updated" };
143
+ }
144
+ async function gitReport(state, root, tracking, head, fetched, freshnessVerified, autoPull, options) {
145
+ const [upstreamHead, counts, dirty] = await Promise.all([
146
+ readRevision(root, tracking.upstreamRef, options),
147
+ readAheadBehind(root, tracking.upstreamRef, options),
148
+ readDirty(root, options),
149
+ ]);
150
+ return {
151
+ state,
152
+ available: true,
153
+ root,
154
+ branch: tracking.branch,
155
+ upstream: tracking.upstream,
156
+ head,
157
+ upstreamHead,
158
+ dirty,
159
+ ahead: counts?.ahead ?? null,
160
+ behind: counts?.behind ?? null,
161
+ fetched,
162
+ freshnessVerified,
163
+ autoPull,
164
+ updated: false,
165
+ };
166
+ }
167
+ async function readBranchTracking(root, branch, options) {
168
+ const result = await runGit(root, ["for-each-ref", `--format=${BRANCH_TRACKING_FORMAT}`, "--", `refs/heads/${branch}`], options);
169
+ if (result.code !== 0) {
170
+ return null;
171
+ }
172
+ const fields = result.stdout
173
+ .trimEnd()
174
+ .split("\0")
175
+ .map((field) => field.trim());
176
+ const [resolvedBranch, upstreamRef, upstream, remote, remoteRef] = fields;
177
+ if (!resolvedBranch || !upstreamRef || !upstream || remote === undefined || !remoteRef) {
178
+ return null;
179
+ }
180
+ return { branch: resolvedBranch, upstream, upstreamRef, remote, remoteRef };
181
+ }
182
+ async function readRevision(root, revision, options) {
183
+ const result = await runGit(root, ["rev-parse", "--verify", `${revision}^{commit}`], options);
184
+ const value = result.stdout.trim();
185
+ return result.code === 0 && /^[0-9a-f]{40,64}$/u.test(value) ? value : null;
186
+ }
187
+ async function readAheadBehind(root, upstreamRef, options) {
188
+ const result = await runGit(root, ["rev-list", "--left-right", "--count", `HEAD...${upstreamRef}`], options);
189
+ if (result.code !== 0) {
190
+ return null;
191
+ }
192
+ const [aheadText, behindText] = result.stdout.trim().split(/\s+/u);
193
+ const ahead = Number(aheadText);
194
+ const behind = Number(behindText);
195
+ return Number.isSafeInteger(ahead) && Number.isSafeInteger(behind) ? { ahead, behind } : null;
196
+ }
197
+ async function readDirty(root, options) {
198
+ const result = await runGit(root, ["status", "--porcelain=v1", "-z", "--untracked-files=normal"], options);
199
+ return result.code === 0 ? result.stdout.length > 0 : null;
200
+ }
201
+ async function refreshIndex(cwd, fallback, signal) {
202
+ let ingestResult;
203
+ try {
204
+ const ingestOptions = { cwd };
205
+ if (signal) {
206
+ ingestOptions.signal = signal;
207
+ }
208
+ ingestResult = await ingest(ingestOptions);
209
+ }
210
+ catch (_error) {
211
+ throwIfAborted(signal);
212
+ const report = await doctorWithSignal(cwd, signal).catch(() => fallback);
213
+ return indexReport(report, true, undefined, 1);
214
+ }
215
+ const report = await doctorWithSignal(cwd, signal);
216
+ return indexReport(report, true, ingestResult);
217
+ }
218
+ function indexReport(report, attempted, ingestion, fallbackErrorCount = 0) {
219
+ const operationalReady = report.readiness.operationalReady;
220
+ const indexPolicyCurrent = report.readiness.indexPolicyCurrent;
221
+ return {
222
+ attempted,
223
+ operationalReady,
224
+ indexPolicyCurrent,
225
+ lastGoodIndexAvailable: operationalReady && indexPolicyCurrent,
226
+ indexedFiles: report.indexedFiles,
227
+ chunksIndexed: report.chunksIndexed,
228
+ rebuiltFiles: ingestion?.rebuiltFiles ?? 0,
229
+ reusedFiles: ingestion?.reusedFiles ?? 0,
230
+ errorCount: ingestion?.errors.length ?? fallbackErrorCount,
231
+ securityAdvisories: report.securityWarnings.length,
232
+ };
233
+ }
234
+ function assembleReport(git, index, warnings, recommendedActions) {
235
+ const indexReady = index.operationalReady && index.indexPolicyCurrent && index.errorCount === 0;
236
+ const sourceCurrent = (git.state === "current" || git.state === "updated") && git.freshnessVerified;
237
+ const synchronized = sourceCurrent && indexReady;
238
+ const status = teamSyncStatus(git, indexReady);
239
+ return {
240
+ status,
241
+ synchronized,
242
+ summary: teamSyncSummary(status, git, index),
243
+ git,
244
+ index,
245
+ warnings,
246
+ recommendedActions,
247
+ };
248
+ }
249
+ function teamSyncStatus(git, indexReady) {
250
+ if (git.state === "inspection-failed" && !git.available) {
251
+ return "setup-required";
252
+ }
253
+ if (git.state === "not-repository") {
254
+ return "local-only";
255
+ }
256
+ if (git.state === "fetch-failed" || git.state === "not-fetched") {
257
+ return "offline";
258
+ }
259
+ if (git.state === "current" || git.state === "updated") {
260
+ if (!indexReady) {
261
+ return "index-not-ready";
262
+ }
263
+ return git.state;
264
+ }
265
+ return "action-required";
266
+ }
267
+ function teamSyncSummary(status, git, index) {
268
+ if (status === "current") {
269
+ return "The checked-out branch matches its fetched upstream and the local index is current.";
270
+ }
271
+ if (status === "updated") {
272
+ return "The checked-out branch was fast-forwarded safely and the local index was refreshed.";
273
+ }
274
+ if (status === "offline") {
275
+ return index.lastGoodIndexAvailable
276
+ ? "The upstream could not be verified; the last valid local index remains available."
277
+ : "The upstream could not be verified and no ready local index is available.";
278
+ }
279
+ if (status === "local-only") {
280
+ return "No Git worktree was detected; Ragmir refreshed only the local index.";
281
+ }
282
+ if (status === "setup-required") {
283
+ return "Ragmir setup is required before team synchronization.";
284
+ }
285
+ if (status === "index-not-ready") {
286
+ return "Git is current, but the local index needs repair before retrieval.";
287
+ }
288
+ return `Git needs one explicit decision (${git.state}); Ragmir did not rewrite branch history.`;
289
+ }
290
+ function gitWarnings(git, check) {
291
+ const warnings = [];
292
+ if (check) {
293
+ warnings.push("Check mode did not change the worktree or refresh the index.");
294
+ }
295
+ if (git.state === "fetch-failed") {
296
+ warnings.push("Git authentication, connectivity, or the configured upstream fetch failed.");
297
+ }
298
+ if (git.state === "not-fetched") {
299
+ warnings.push("The remote was not fetched, so upstream freshness is not verified.");
300
+ }
301
+ if (git.state === "dirty") {
302
+ warnings.push("Tracked or untracked worktree changes prevent an automatic fast-forward.");
303
+ }
304
+ return warnings;
305
+ }
306
+ function buildRecommendedActions(git, index, check) {
307
+ const actions = [];
308
+ if (git.state === "update-available") {
309
+ actions.push("Run `rgr team sync` without `--check` or `--no-pull` to apply the safe update.");
310
+ }
311
+ else if (git.state === "dirty") {
312
+ actions.push("Commit or temporarily move local changes, then run `rgr team sync` again.");
313
+ }
314
+ else if (git.state === "ahead") {
315
+ actions.push("Push the branch and open or update its merge request so teammates can review it.");
316
+ }
317
+ else if (git.state === "diverged") {
318
+ actions.push("Resolve the branch divergence through the normal Git and merge-request workflow.");
319
+ }
320
+ else if (git.state === "detached") {
321
+ actions.push("Check out a branch with an upstream, then run `rgr team sync` again.");
322
+ }
323
+ else if (git.state === "no-upstream") {
324
+ actions.push("Configure an upstream for the current branch, then run `rgr team sync` again.");
325
+ }
326
+ else if (git.state === "fetch-failed") {
327
+ actions.push("Restore Git network or authentication access, then run `rgr team sync` again.");
328
+ }
329
+ else if (git.state === "not-fetched") {
330
+ actions.push("Run `rgr team sync` without `--no-fetch` to verify the latest upstream revision.");
331
+ }
332
+ else if (git.state === "update-failed" || git.state === "inspection-failed") {
333
+ actions.push("Inspect `git status` and the branch upstream before retrying team sync.");
334
+ }
335
+ else if (git.state === "not-repository") {
336
+ actions.push("Connect the project to Git for automatic team sync, or continue in local-only mode.");
337
+ }
338
+ const indexReady = index.operationalReady && index.indexPolicyCurrent && index.errorCount === 0;
339
+ if (!indexReady && !check) {
340
+ actions.push("Run `rgr doctor --fix` to repair the local index without deleting it first.");
341
+ }
342
+ if (index.securityAdvisories > 0) {
343
+ actions.push("Review non-blocking privacy advisories with `rgr security-audit`.");
344
+ }
345
+ return actions;
346
+ }
347
+ function emptyGitReport(state, autoPull) {
348
+ return {
349
+ state,
350
+ available: false,
351
+ root: null,
352
+ branch: null,
353
+ upstream: null,
354
+ head: null,
355
+ upstreamHead: null,
356
+ dirty: null,
357
+ ahead: null,
358
+ behind: null,
359
+ fetched: false,
360
+ freshnessVerified: false,
361
+ autoPull,
362
+ updated: false,
363
+ };
364
+ }
365
+ function validateGitTimeout(value) {
366
+ if (!Number.isSafeInteger(value) || value <= 0 || value > MAX_GIT_TIMEOUT_MS) {
367
+ throw new Error(`gitTimeoutMs must be a positive integer no greater than ${MAX_GIT_TIMEOUT_MS}.`);
368
+ }
369
+ return value;
370
+ }
371
+ function doctorWithSignal(cwd, signal) {
372
+ return signal ? doctor(cwd, { signal }) : doctor(cwd);
373
+ }
374
+ function runGit(cwd, args, options) {
375
+ const timeoutSignal = AbortSignal.timeout(options.gitTimeoutMs);
376
+ const signal = options.signal ? AbortSignal.any([options.signal, timeoutSignal]) : timeoutSignal;
377
+ const { GIT_DIR: _gitDir, GIT_WORK_TREE: _gitWorkTree, ...inheritedEnvironment } = process.env;
378
+ return new Promise((resolve, reject) => {
379
+ const child = spawn("git", ["-c", "color.ui=false", ...args], {
380
+ cwd,
381
+ env: {
382
+ ...inheritedEnvironment,
383
+ GIT_TERMINAL_PROMPT: "0",
384
+ GCM_INTERACTIVE: "never",
385
+ LC_ALL: "C",
386
+ },
387
+ signal,
388
+ stdio: ["ignore", "pipe", "ignore"],
389
+ windowsHide: true,
390
+ });
391
+ const stdout = [];
392
+ let stdoutBytes = 0;
393
+ let settled = false;
394
+ child.stdout.on("data", (chunk) => {
395
+ if (stdoutBytes >= MAX_GIT_OUTPUT_BYTES) {
396
+ return;
397
+ }
398
+ const remaining = MAX_GIT_OUTPUT_BYTES - stdoutBytes;
399
+ const bounded = chunk.length > remaining ? chunk.subarray(0, remaining) : chunk;
400
+ stdout.push(bounded);
401
+ stdoutBytes += bounded.length;
402
+ });
403
+ child.once("error", (error) => {
404
+ if (settled) {
405
+ return;
406
+ }
407
+ settled = true;
408
+ if (options.signal?.aborted) {
409
+ reject(error);
410
+ return;
411
+ }
412
+ resolve({
413
+ code: null,
414
+ stdout: Buffer.concat(stdout).toString("utf8"),
415
+ unavailable: isNodeError(error) && error.code === "ENOENT",
416
+ timedOut: timeoutSignal.aborted,
417
+ });
418
+ });
419
+ child.once("close", (code) => {
420
+ if (settled) {
421
+ return;
422
+ }
423
+ settled = true;
424
+ resolve({
425
+ code,
426
+ stdout: Buffer.concat(stdout).toString("utf8"),
427
+ unavailable: false,
428
+ timedOut: timeoutSignal.aborted,
429
+ });
430
+ });
431
+ });
432
+ }
433
+ function isNodeError(error) {
434
+ return error instanceof Error && "code" in error;
435
+ }
436
+ //# sourceMappingURL=team-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-sync.js","sourceRoot":"","sources":["../src/team-sync.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "2.20.0";
1
+ export declare const VERSION = "3.0.1";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,WAAW,CAAA"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAA"}
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const VERSION = "2.20.0";
1
+ export const VERSION = "3.0.1";
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAA"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAA"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@jcode.labs/ragmir",
3
- "version": "2.20.0",
3
+ "version": "3.0.1",
4
4
  "description": "Confidential local RAG for coding agents, with offline cited retrieval through CLI, MCP, and TypeScript.",
5
5
  "type": "module",
6
- "license": "MIT",
6
+ "license": "AGPL-3.0-only",
7
7
  "author": {
8
8
  "name": "Jean-Baptiste Thery",
9
9
  "url": "https://github.com/jb-thery"
@@ -56,7 +56,10 @@
56
56
  "dist",
57
57
  "skills",
58
58
  "examples",
59
- "README.md"
59
+ "README.md",
60
+ "LICENSE",
61
+ "COMMERCIAL-LICENSE.md",
62
+ "NOTICE"
60
63
  ],
61
64
  "publishConfig": {
62
65
  "access": "public"
@@ -78,8 +81,8 @@
78
81
  "zod": "^4.1.13"
79
82
  },
80
83
  "peerDependencies": {
81
- "@jcode.labs/ragmir-chat": "2.20.0",
82
- "@jcode.labs/ragmir-tts": "2.20.0"
84
+ "@jcode.labs/ragmir-chat": "3.0.1",
85
+ "@jcode.labs/ragmir-tts": "3.0.1"
83
86
  },
84
87
  "peerDependenciesMeta": {
85
88
  "@jcode.labs/ragmir-chat": {
@@ -96,8 +99,8 @@
96
99
  "publint": "^0.3.21",
97
100
  "typescript": "^5.9.3",
98
101
  "vitest": "^4.0.15",
99
- "@jcode.labs/ragmir-chat": "2.20.0",
100
- "@jcode.labs/ragmir-tts": "2.20.0"
102
+ "@jcode.labs/ragmir-chat": "3.0.1",
103
+ "@jcode.labs/ragmir-tts": "3.0.1"
101
104
  },
102
105
  "scripts": {
103
106
  "bench:compare": "node benchmarks/compare.mjs",