@jcode.labs/ragmir 2.0.0

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.
Files changed (142) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +102 -0
  3. package/dist/access-log.d.ts +11 -0
  4. package/dist/access-log.d.ts.map +1 -0
  5. package/dist/access-log.js +145 -0
  6. package/dist/access-log.js.map +1 -0
  7. package/dist/chunking.d.ts +3 -0
  8. package/dist/chunking.d.ts.map +1 -0
  9. package/dist/chunking.js +58 -0
  10. package/dist/chunking.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +944 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/config.d.ts +11 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +224 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/defaults.d.ts +17 -0
  20. package/dist/defaults.d.ts.map +1 -0
  21. package/dist/defaults.js +59 -0
  22. package/dist/defaults.js.map +1 -0
  23. package/dist/destroy.d.ts +3 -0
  24. package/dist/destroy.d.ts.map +1 -0
  25. package/dist/destroy.js +16 -0
  26. package/dist/destroy.js.map +1 -0
  27. package/dist/doctor.d.ts +3 -0
  28. package/dist/doctor.d.ts.map +1 -0
  29. package/dist/doctor.js +117 -0
  30. package/dist/doctor.js.map +1 -0
  31. package/dist/embeddings.d.ts +9 -0
  32. package/dist/embeddings.d.ts.map +1 -0
  33. package/dist/embeddings.js +110 -0
  34. package/dist/embeddings.js.map +1 -0
  35. package/dist/evaluate.d.ts +3 -0
  36. package/dist/evaluate.d.ts.map +1 -0
  37. package/dist/evaluate.js +97 -0
  38. package/dist/evaluate.js.map +1 -0
  39. package/dist/files.d.ts +16 -0
  40. package/dist/files.d.ts.map +1 -0
  41. package/dist/files.js +388 -0
  42. package/dist/files.js.map +1 -0
  43. package/dist/gitignore.d.ts +3 -0
  44. package/dist/gitignore.d.ts.map +1 -0
  45. package/dist/gitignore.js +27 -0
  46. package/dist/gitignore.js.map +1 -0
  47. package/dist/guards.d.ts +2 -0
  48. package/dist/guards.d.ts.map +1 -0
  49. package/dist/guards.js +4 -0
  50. package/dist/guards.js.map +1 -0
  51. package/dist/index.d.ts +25 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +20 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/ingest.d.ts +4 -0
  56. package/dist/ingest.d.ts.map +1 -0
  57. package/dist/ingest.js +268 -0
  58. package/dist/ingest.js.map +1 -0
  59. package/dist/init.d.ts +2 -0
  60. package/dist/init.d.ts.map +1 -0
  61. package/dist/init.js +33 -0
  62. package/dist/init.js.map +1 -0
  63. package/dist/mcp.d.ts +8 -0
  64. package/dist/mcp.d.ts.map +1 -0
  65. package/dist/mcp.js +189 -0
  66. package/dist/mcp.js.map +1 -0
  67. package/dist/package-manager.d.ts +11 -0
  68. package/dist/package-manager.d.ts.map +1 -0
  69. package/dist/package-manager.js +93 -0
  70. package/dist/package-manager.js.map +1 -0
  71. package/dist/parsing.d.ts +12 -0
  72. package/dist/parsing.d.ts.map +1 -0
  73. package/dist/parsing.js +307 -0
  74. package/dist/parsing.js.map +1 -0
  75. package/dist/query.d.ts +5 -0
  76. package/dist/query.d.ts.map +1 -0
  77. package/dist/query.js +180 -0
  78. package/dist/query.js.map +1 -0
  79. package/dist/redaction.d.ts +7 -0
  80. package/dist/redaction.d.ts.map +1 -0
  81. package/dist/redaction.js +93 -0
  82. package/dist/redaction.js.map +1 -0
  83. package/dist/research.d.ts +9 -0
  84. package/dist/research.d.ts.map +1 -0
  85. package/dist/research.js +335 -0
  86. package/dist/research.js.map +1 -0
  87. package/dist/security.d.ts +3 -0
  88. package/dist/security.d.ts.map +1 -0
  89. package/dist/security.js +106 -0
  90. package/dist/security.js.map +1 -0
  91. package/dist/semantic-config.d.ts +9 -0
  92. package/dist/semantic-config.d.ts.map +1 -0
  93. package/dist/semantic-config.js +35 -0
  94. package/dist/semantic-config.js.map +1 -0
  95. package/dist/setup.d.ts +32 -0
  96. package/dist/setup.d.ts.map +1 -0
  97. package/dist/setup.js +74 -0
  98. package/dist/setup.js.map +1 -0
  99. package/dist/skill.d.ts +66 -0
  100. package/dist/skill.d.ts.map +1 -0
  101. package/dist/skill.js +652 -0
  102. package/dist/skill.js.map +1 -0
  103. package/dist/sources.d.ts +16 -0
  104. package/dist/sources.d.ts.map +1 -0
  105. package/dist/sources.js +71 -0
  106. package/dist/sources.js.map +1 -0
  107. package/dist/store.d.ts +13 -0
  108. package/dist/store.d.ts.map +1 -0
  109. package/dist/store.js +94 -0
  110. package/dist/store.js.map +1 -0
  111. package/dist/text.d.ts +3 -0
  112. package/dist/text.d.ts.map +1 -0
  113. package/dist/text.js +10 -0
  114. package/dist/text.js.map +1 -0
  115. package/dist/types.d.ts +322 -0
  116. package/dist/types.d.ts.map +1 -0
  117. package/dist/types.js +2 -0
  118. package/dist/types.js.map +1 -0
  119. package/dist/version.d.ts +2 -0
  120. package/dist/version.d.ts.map +1 -0
  121. package/dist/version.js +2 -0
  122. package/dist/version.js.map +1 -0
  123. package/examples/library-api-demo/README.md +42 -0
  124. package/examples/library-api-demo/run.mjs +61 -0
  125. package/examples/sovereign-rag-demo/.ragmir/config.json +22 -0
  126. package/examples/sovereign-rag-demo/.ragmir/sources.txt +2 -0
  127. package/examples/sovereign-rag-demo/README.md +95 -0
  128. package/examples/sovereign-rag-demo/golden-queries.json +29 -0
  129. package/examples/sovereign-rag-demo/raw/dataset-inventory.csv +5 -0
  130. package/examples/sovereign-rag-demo/raw/facility-scan.heic +3 -0
  131. package/examples/sovereign-rag-demo/raw/incident-timeline.jsonl +4 -0
  132. package/examples/sovereign-rag-demo/raw/operations-brief.md +16 -0
  133. package/examples/sovereign-rag-demo/raw/review-notes.evidence +11 -0
  134. package/examples/sovereign-rag-demo/raw/security-policy.yaml +14 -0
  135. package/package.json +87 -0
  136. package/skills/ragmir/SKILL.md +366 -0
  137. package/skills/ragmir-audio-summary/SKILL.md +150 -0
  138. package/skills/ragmir-audio-summary/forge-voice.sh +150 -0
  139. package/skills/ragmir-audio-summary/split-lines.py +13 -0
  140. package/skills/ragmir-audio-summary/xtts-voice.py +46 -0
  141. package/skills/ragmir-legal-dossier/SKILL.md +143 -0
  142. package/skills/ragmir-markdown-report/SKILL.md +110 -0
package/dist/skill.js ADDED
@@ -0,0 +1,652 @@
1
+ import { cp, mkdir, rm, symlink, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { DEFAULT_SKILL_TARGET_DIR, RAGMIR_DIR, RAGMIR_PROJECT_ROOT_ENV } from "./defaults.js";
5
+ import { ensureRagmirGitignore } from "./gitignore.js";
6
+ import { ragmirCommand } from "./package-manager.js";
7
+ const PACKAGE_ROOT = path.dirname(path.dirname(fileURLToPath(import.meta.url)));
8
+ const PRIMARY_SKILL_NAME = "ragmir";
9
+ const AUDIO_SKILL_NAME = "ragmir-audio-summary";
10
+ const REPORT_SKILL_NAME = "ragmir-markdown-report";
11
+ const LEGAL_SKILL_NAME = "ragmir-legal-dossier";
12
+ const DEFAULT_MCP_SERVER_NAME = "ragmir";
13
+ const MCP_SERVER_NAME_PATTERN = /^[A-Za-z0-9_-]+$/u;
14
+ export const SKILL_NAMES = [
15
+ PRIMARY_SKILL_NAME,
16
+ AUDIO_SKILL_NAME,
17
+ REPORT_SKILL_NAME,
18
+ LEGAL_SKILL_NAME,
19
+ ];
20
+ export const MCP_CONFIG_FILENAME = "mcp.json";
21
+ export const AGENT_SETUP_FILENAME = "agent-setup.md";
22
+ export const SUPPORTED_AGENT_TARGETS = [
23
+ "claude",
24
+ "codex",
25
+ "kimi",
26
+ "opencode",
27
+ "cline",
28
+ ];
29
+ export const AGENT_HELPER_CONFIG_FILENAMES = {
30
+ claude: "claude-mcp-server.json",
31
+ codex: "codex-mcp.toml",
32
+ kimi: "kimi-mcp.json",
33
+ opencode: "opencode.jsonc",
34
+ cline: "cline-mcp.json",
35
+ };
36
+ const AGENT_TARGET_ALIASES = new Map([
37
+ ["claude", "claude"],
38
+ ["claude-code", "claude"],
39
+ ["codex", "codex"],
40
+ ["kimi", "kimi"],
41
+ ["kimi-code", "kimi"],
42
+ ["opencode", "opencode"],
43
+ ["open-code", "opencode"],
44
+ ["cline", "cline"],
45
+ ]);
46
+ const AGENT_DESTINATIONS = {
47
+ claude: {
48
+ label: "Claude Code",
49
+ env: "CLAUDE_SKILLS_DIR",
50
+ projectDir: path.join(".claude", "skills"),
51
+ userDir: (homeDir) => path.join(homeDir, ".claude", "skills"),
52
+ },
53
+ codex: {
54
+ label: "Codex",
55
+ env: "CODEX_SKILLS_DIR",
56
+ projectDir: path.join(".codex", "skills"),
57
+ userDir: (homeDir) => path.join(homeDir, ".codex", "skills"),
58
+ },
59
+ kimi: {
60
+ label: "Kimi Code CLI",
61
+ env: "KIMI_SKILLS_DIR",
62
+ projectDir: path.join(".kimi", "skills"),
63
+ userDir: (homeDir) => path.join(homeDir, ".kimi", "skills"),
64
+ },
65
+ opencode: {
66
+ label: "OpenCode",
67
+ env: "OPENCODE_SKILLS_DIR",
68
+ projectDir: path.join(".opencode", "skills"),
69
+ userDir: (homeDir) => path.join(homeDir, ".config", "opencode", "skills"),
70
+ },
71
+ cline: {
72
+ label: "Cline",
73
+ env: "CLINE_SKILLS_DIR",
74
+ projectDir: path.join(".cline", "skills"),
75
+ userDir: (homeDir) => path.join(homeDir, ".cline", "skills"),
76
+ },
77
+ };
78
+ export function bundledSkillPath(skillName = PRIMARY_SKILL_NAME) {
79
+ return path.join(PACKAGE_ROOT, "skills", skillName);
80
+ }
81
+ export function parseAgentTargets(value) {
82
+ if (value === undefined || value === "" || value === "all") {
83
+ return [...SUPPORTED_AGENT_TARGETS];
84
+ }
85
+ const entries = typeof value === "string" ? value.split(",") : value.flatMap((entry) => entry.split(","));
86
+ const targets = new Set();
87
+ for (const entry of entries) {
88
+ const normalized = entry.trim().toLowerCase();
89
+ if (normalized === "" || normalized === "all") {
90
+ for (const target of SUPPORTED_AGENT_TARGETS) {
91
+ targets.add(target);
92
+ }
93
+ continue;
94
+ }
95
+ const target = AGENT_TARGET_ALIASES.get(normalized);
96
+ if (!target) {
97
+ throw new Error(`Unknown agent target "${entry}". Expected one of: all, ${SUPPORTED_AGENT_TARGETS.join(", ")}.`);
98
+ }
99
+ targets.add(target);
100
+ }
101
+ return [...targets];
102
+ }
103
+ export async function installSkill(options = {}) {
104
+ const cwd = path.resolve(options.cwd ?? process.cwd());
105
+ const targetDir = path.resolve(cwd, options.targetDir ?? DEFAULT_SKILL_TARGET_DIR);
106
+ const agents = options.agents ? parseAgentTargets(options.agents) : [...SUPPORTED_AGENT_TARGETS];
107
+ const agentSet = new Set(agents);
108
+ const mcpServerName = normalizeMcpServerName(options.mcpServerName);
109
+ const skillPath = path.join(targetDir, PRIMARY_SKILL_NAME);
110
+ const audioSkillPath = path.join(targetDir, AUDIO_SKILL_NAME);
111
+ const reportSkillPath = path.join(targetDir, REPORT_SKILL_NAME);
112
+ const legalSkillPath = path.join(targetDir, LEGAL_SKILL_NAME);
113
+ const ragmirDir = path.resolve(cwd, RAGMIR_DIR);
114
+ const mcpConfigPath = path.join(ragmirDir, MCP_CONFIG_FILENAME);
115
+ const agentConfigPaths = {
116
+ claude: path.join(ragmirDir, AGENT_HELPER_CONFIG_FILENAMES.claude),
117
+ codex: path.join(ragmirDir, AGENT_HELPER_CONFIG_FILENAMES.codex),
118
+ kimi: path.join(ragmirDir, AGENT_HELPER_CONFIG_FILENAMES.kimi),
119
+ opencode: path.join(ragmirDir, AGENT_HELPER_CONFIG_FILENAMES.opencode),
120
+ cline: path.join(ragmirDir, AGENT_HELPER_CONFIG_FILENAMES.cline),
121
+ };
122
+ const claudeConfigPath = agentConfigPaths.claude;
123
+ const codexConfigPath = agentConfigPaths.codex;
124
+ const kimiConfigPath = agentConfigPaths.kimi;
125
+ const opencodeConfigPath = agentConfigPaths.opencode;
126
+ const clineConfigPath = agentConfigPaths.cline;
127
+ const agentSetupPath = path.join(ragmirDir, AGENT_SETUP_FILENAME);
128
+ const readmePath = path.join(ragmirDir, "README.md");
129
+ await mkdir(targetDir, { recursive: true });
130
+ await mkdir(ragmirDir, { recursive: true });
131
+ await copyBundledSkills(targetDir);
132
+ const serveCommand = await resolveMcpCommand(cwd, options);
133
+ const doctorCommand = await ragmirCommand(cwd, ["doctor"]);
134
+ const installAgentCommand = await ragmirCommand(cwd, [
135
+ "install-agent",
136
+ "--agents",
137
+ agents.join(","),
138
+ ]);
139
+ await writeFile(mcpConfigPath, `${JSON.stringify(mcpConfig(cwd, serveCommand, undefined, mcpServerName), null, 2)}\n`, "utf8");
140
+ const agentHelpers = [];
141
+ for (const agent of SUPPORTED_AGENT_TARGETS) {
142
+ const helperPath = agentConfigPaths[agent];
143
+ if (!agentSet.has(agent)) {
144
+ await rm(helperPath, { force: true });
145
+ continue;
146
+ }
147
+ await writeAgentMcpHelper(agent, {
148
+ cwd,
149
+ serveCommand,
150
+ mcpServerName,
151
+ claudeConfigPath,
152
+ codexConfigPath,
153
+ kimiConfigPath,
154
+ opencodeConfigPath,
155
+ clineConfigPath,
156
+ });
157
+ agentHelpers.push({
158
+ agent,
159
+ label: AGENT_DESTINATIONS[agent].label,
160
+ path: helperPath,
161
+ });
162
+ }
163
+ await writeFile(agentSetupPath, agentSetupGuide({
164
+ skillPath,
165
+ audioSkillPath,
166
+ reportSkillPath,
167
+ legalSkillPath,
168
+ mcpConfigPath,
169
+ claudeConfigPath,
170
+ codexConfigPath,
171
+ kimiConfigPath,
172
+ opencodeConfigPath,
173
+ clineConfigPath,
174
+ agentHelpers,
175
+ mcpServerName,
176
+ installAgentCommand: installAgentCommand.display,
177
+ serveCommand: serveCommand.display,
178
+ doctorCommand: doctorCommand.display,
179
+ }), "utf8");
180
+ await writeFile(readmePath, agentKitReadme({
181
+ skillPath,
182
+ audioSkillPath,
183
+ reportSkillPath,
184
+ legalSkillPath,
185
+ mcpConfigPath,
186
+ claudeConfigPath,
187
+ codexConfigPath,
188
+ kimiConfigPath,
189
+ opencodeConfigPath,
190
+ clineConfigPath,
191
+ agentSetupPath,
192
+ agentHelpers,
193
+ mcpServerName,
194
+ installAgentCommand: installAgentCommand.display,
195
+ serveCommand: serveCommand.display,
196
+ doctorCommand: doctorCommand.display,
197
+ }), "utf8");
198
+ const wroteGitignore = await ensureRagmirGitignore(cwd);
199
+ const written = [
200
+ path.relative(cwd, skillPath),
201
+ path.relative(cwd, audioSkillPath),
202
+ path.relative(cwd, reportSkillPath),
203
+ path.relative(cwd, legalSkillPath),
204
+ path.relative(cwd, mcpConfigPath),
205
+ ...agentHelpers.map((helper) => path.relative(cwd, helper.path)),
206
+ path.relative(cwd, agentSetupPath),
207
+ path.relative(cwd, readmePath),
208
+ ];
209
+ if (wroteGitignore) {
210
+ written.push(".gitignore");
211
+ }
212
+ return {
213
+ skillPath,
214
+ audioSkillPath,
215
+ reportSkillPath,
216
+ legalSkillPath,
217
+ mcpConfigPath,
218
+ claudeConfigPath,
219
+ codexConfigPath,
220
+ kimiConfigPath,
221
+ opencodeConfigPath,
222
+ clineConfigPath,
223
+ agentSetupPath,
224
+ readmePath,
225
+ agentHelpers,
226
+ mcpServerName,
227
+ mcpCommand: serveCommand.command,
228
+ mcpArgs: serveCommand.args,
229
+ written,
230
+ };
231
+ }
232
+ export async function installAgentSkills(options = {}) {
233
+ const cwd = path.resolve(options.cwd ?? process.cwd());
234
+ const scope = options.scope ?? "project";
235
+ const requestedMode = options.mode ?? "link";
236
+ const homeDir = path.resolve(options.homeDir ?? process.env.HOME ?? process.cwd());
237
+ const env = options.env ?? process.env;
238
+ const agents = options.agents ?? SUPPORTED_AGENT_TARGETS;
239
+ const projectKit = await installSkill({ cwd, agents });
240
+ const sourceDir = path.dirname(projectKit.skillPath);
241
+ const installations = [];
242
+ const written = [];
243
+ for (const agent of agents) {
244
+ const destination = AGENT_DESTINATIONS[agent];
245
+ const targetDir = agentTargetDir(agent, scope, cwd, homeDir, env);
246
+ await mkdir(targetDir, { recursive: true });
247
+ const { mode, skillPaths } = await exposeAgentSkills(sourceDir, targetDir, requestedMode);
248
+ written.push(...skillPaths.map((skillPath) => displayPath(cwd, skillPath)));
249
+ installations.push({
250
+ agent,
251
+ label: destination.label,
252
+ scope,
253
+ mode,
254
+ targetDir,
255
+ skillPaths,
256
+ });
257
+ }
258
+ return {
259
+ projectKit,
260
+ installations,
261
+ written,
262
+ };
263
+ }
264
+ async function resolveMcpCommand(cwd, options) {
265
+ if (options.mcpCommand === undefined) {
266
+ if (options.mcpArgs !== undefined && options.mcpArgs.length > 0) {
267
+ throw new Error("--mcp-arg requires --mcp-command.");
268
+ }
269
+ return ragmirCommand(cwd, ["serve-mcp"]);
270
+ }
271
+ const command = options.mcpCommand.trim();
272
+ if (command.length === 0) {
273
+ throw new Error("--mcp-command cannot be empty.");
274
+ }
275
+ const args = [...(options.mcpArgs ?? [])];
276
+ return {
277
+ command,
278
+ args,
279
+ display: formatCommand(command, args),
280
+ };
281
+ }
282
+ function normalizeMcpServerName(value) {
283
+ const name = value?.trim() || DEFAULT_MCP_SERVER_NAME;
284
+ if (!MCP_SERVER_NAME_PATTERN.test(name)) {
285
+ throw new Error("--mcp-name must contain only letters, numbers, underscores, or hyphens so it can be used in TOML MCP config.");
286
+ }
287
+ return name;
288
+ }
289
+ async function writeAgentMcpHelper(agent, input) {
290
+ switch (agent) {
291
+ case "claude":
292
+ await writeFile(input.claudeConfigPath, `${JSON.stringify(claudeMcpServer(input.serveCommand), null, 2)}\n`, "utf8");
293
+ return;
294
+ case "codex":
295
+ await writeFile(input.codexConfigPath, codexMcpConfig(input.cwd, input.serveCommand, input.mcpServerName), "utf8");
296
+ return;
297
+ case "opencode":
298
+ await writeFile(input.opencodeConfigPath, opencodeConfig(input.cwd, input.serveCommand, input.mcpServerName), "utf8");
299
+ return;
300
+ case "kimi":
301
+ case "cline":
302
+ 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");
303
+ }
304
+ }
305
+ async function copyBundledSkills(targetDir) {
306
+ await Promise.all(SKILL_NAMES.map((skillName) => cp(bundledSkillPath(skillName), path.join(targetDir, skillName), {
307
+ recursive: true,
308
+ force: true,
309
+ })));
310
+ }
311
+ async function exposeAgentSkills(sourceDir, targetDir, requestedMode) {
312
+ if (requestedMode === "copy") {
313
+ return copyAgentSkills(sourceDir, targetDir);
314
+ }
315
+ try {
316
+ return await linkAgentSkills(sourceDir, targetDir);
317
+ }
318
+ catch {
319
+ return copyAgentSkills(sourceDir, targetDir);
320
+ }
321
+ }
322
+ async function linkAgentSkills(sourceDir, targetDir) {
323
+ const skillPaths = [];
324
+ for (const skillName of SKILL_NAMES) {
325
+ const source = path.join(sourceDir, skillName);
326
+ const target = path.join(targetDir, skillName);
327
+ await replaceWithDirectorySymlink(source, target);
328
+ skillPaths.push(target);
329
+ }
330
+ return { mode: "link", skillPaths };
331
+ }
332
+ async function copyAgentSkills(sourceDir, targetDir) {
333
+ const skillPaths = [];
334
+ for (const skillName of SKILL_NAMES) {
335
+ const source = path.join(sourceDir, skillName);
336
+ const target = path.join(targetDir, skillName);
337
+ await rm(target, { recursive: true, force: true });
338
+ await cp(source, target, { recursive: true, force: true });
339
+ skillPaths.push(target);
340
+ }
341
+ return { mode: "copy", skillPaths };
342
+ }
343
+ async function replaceWithDirectorySymlink(source, target) {
344
+ if (path.resolve(source) === path.resolve(target)) {
345
+ return;
346
+ }
347
+ await rm(target, { recursive: true, force: true });
348
+ await symlink(source, target, process.platform === "win32" ? "junction" : "dir");
349
+ }
350
+ function agentTargetDir(agent, scope, cwd, homeDir, env) {
351
+ const destination = AGENT_DESTINATIONS[agent];
352
+ const override = env[destination.env];
353
+ if (override) {
354
+ return path.resolve(expandHome(override, homeDir));
355
+ }
356
+ if (scope === "project") {
357
+ return path.resolve(cwd, destination.projectDir);
358
+ }
359
+ return destination.userDir(homeDir);
360
+ }
361
+ function expandHome(input, homeDir) {
362
+ if (input === "~") {
363
+ return homeDir;
364
+ }
365
+ if (input.startsWith("~/")) {
366
+ return path.join(homeDir, input.slice(2));
367
+ }
368
+ return input;
369
+ }
370
+ function displayPath(cwd, filePath) {
371
+ const relative = path.relative(cwd, filePath);
372
+ if (relative && !relative.startsWith("..") && !path.isAbsolute(relative)) {
373
+ return relative;
374
+ }
375
+ return filePath;
376
+ }
377
+ function mcpConfig(cwd, serveCommand, env, serverName = DEFAULT_MCP_SERVER_NAME) {
378
+ const serverConfig = {
379
+ command: serveCommand.command,
380
+ args: serveCommand.args,
381
+ cwd,
382
+ };
383
+ const config = {
384
+ mcpServers: {
385
+ [serverName]: serverConfig,
386
+ },
387
+ };
388
+ if (env) {
389
+ serverConfig.env = env;
390
+ }
391
+ return config;
392
+ }
393
+ function claudeMcpServer(serveCommand) {
394
+ return {
395
+ type: "stdio",
396
+ command: serveCommand.command,
397
+ args: serveCommand.args,
398
+ };
399
+ }
400
+ function codexMcpConfig(cwd, serveCommand, serverName = DEFAULT_MCP_SERVER_NAME) {
401
+ return `[mcp_servers.${serverName}]
402
+ command = ${tomlString(serveCommand.command)}
403
+ args = ${tomlArray(serveCommand.args)}
404
+ cwd = ${tomlString(cwd)}
405
+
406
+ [[skills.config]]
407
+ path = ${tomlString(path.join(cwd, DEFAULT_SKILL_TARGET_DIR, PRIMARY_SKILL_NAME))}
408
+ enabled = true
409
+
410
+ [[skills.config]]
411
+ path = ${tomlString(path.join(cwd, DEFAULT_SKILL_TARGET_DIR, AUDIO_SKILL_NAME))}
412
+ enabled = true
413
+
414
+ [[skills.config]]
415
+ path = ${tomlString(path.join(cwd, DEFAULT_SKILL_TARGET_DIR, REPORT_SKILL_NAME))}
416
+ enabled = true
417
+
418
+ [[skills.config]]
419
+ path = ${tomlString(path.join(cwd, DEFAULT_SKILL_TARGET_DIR, LEGAL_SKILL_NAME))}
420
+ enabled = true
421
+
422
+ `;
423
+ }
424
+ function opencodeConfig(cwd, serveCommand, serverName = DEFAULT_MCP_SERVER_NAME) {
425
+ const config = {
426
+ $schema: "https://opencode.ai/config.json",
427
+ mcp: {
428
+ [serverName]: {
429
+ type: "local",
430
+ command: [serveCommand.command, ...serveCommand.args],
431
+ enabled: true,
432
+ environment: {
433
+ [RAGMIR_PROJECT_ROOT_ENV]: cwd,
434
+ },
435
+ },
436
+ },
437
+ };
438
+ return `${JSON.stringify(config, null, 2)}\n`;
439
+ }
440
+ function tomlArray(values) {
441
+ return `[${values.map(tomlString).join(", ")}]`;
442
+ }
443
+ function tomlString(value) {
444
+ return JSON.stringify(value);
445
+ }
446
+ function formatCommand(command, args) {
447
+ return [command, ...args].map(formatCommandArg).join(" ");
448
+ }
449
+ function formatCommandArg(value) {
450
+ return /^[A-Za-z0-9_./:@%+=,-]+$/u.test(value) ? value : JSON.stringify(value);
451
+ }
452
+ function mcpHelperGuide(input) {
453
+ const sections = [
454
+ `Generic MCP config for server \`${input.mcpServerName}\`:
455
+
456
+ \`\`\`plain text
457
+ ${input.mcpConfigPath}
458
+ \`\`\`
459
+
460
+ Use the MCP server when your agent supports MCP tools. The server command is:
461
+
462
+ \`\`\`bash
463
+ ${input.serveCommand}
464
+ \`\`\``,
465
+ ];
466
+ if (hasAgentHelper(input, "claude")) {
467
+ sections.push(`Claude Code local MCP setup:
468
+
469
+ \`\`\`bash
470
+ claude mcp add-json --scope local ${input.mcpServerName} "$(cat ${RAGMIR_DIR}/claude-mcp-server.json)"
471
+ \`\`\`
472
+
473
+ Run that command from this repository root. Ragmir also reads \`CLAUDE_PROJECT_DIR\`, so the server
474
+ uses the active Claude Code project as the knowledge-base root.`);
475
+ }
476
+ if (hasAgentHelper(input, "codex")) {
477
+ sections.push(`Codex setup:
478
+
479
+ \`\`\`plain text
480
+ ${input.codexConfigPath}
481
+ \`\`\`
482
+
483
+ Copy that TOML snippet into \`~/.codex/config.toml\` or another trusted Codex config layer.`);
484
+ }
485
+ if (hasAgentHelper(input, "kimi")) {
486
+ sections.push(`Kimi Code CLI setup:
487
+
488
+ \`\`\`bash
489
+ kimi --mcp-config-file ${input.kimiConfigPath}
490
+ \`\`\``);
491
+ }
492
+ if (hasAgentHelper(input, "opencode")) {
493
+ sections.push(`OpenCode setup:
494
+
495
+ \`\`\`plain text
496
+ ${input.opencodeConfigPath}
497
+ \`\`\``);
498
+ }
499
+ if (hasAgentHelper(input, "cline")) {
500
+ sections.push(`Cline setup:
501
+
502
+ \`\`\`plain text
503
+ ${input.clineConfigPath}
504
+ \`\`\``);
505
+ }
506
+ const missingAgents = SUPPORTED_AGENT_TARGETS.filter((agent) => !hasAgentHelper(input, agent));
507
+ if (missingAgents.length > 0) {
508
+ 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.");
509
+ }
510
+ sections.push("For other MCP clients that cannot set a working directory, launch the server with `RAGMIR_PROJECT_ROOT=/absolute/path/to/repository`.");
511
+ return sections.join("\n\n");
512
+ }
513
+ function hasAgentHelper(input, agent) {
514
+ return input.agentHelpers.some((helper) => helper.agent === agent);
515
+ }
516
+ function installAgentCommandExample(command, agents) {
517
+ return command.replace(/--agents [^\s]+/u, `--agents ${agents}`);
518
+ }
519
+ function agentKitReadme(input) {
520
+ return `# Ragmir Agent Kit
521
+
522
+ This folder contains portable agent instructions for Ragmir.
523
+
524
+ ## Skill
525
+
526
+ Skill folder:
527
+
528
+ \`\`\`plain text
529
+ ${input.skillPath}
530
+ \`\`\`
531
+
532
+ Agents that support skill folders can load that folder directly.
533
+
534
+ Optional audio-summary skill folder:
535
+
536
+ \`\`\`plain text
537
+ ${input.audioSkillPath}
538
+ \`\`\`
539
+
540
+ Use it only when the user asks for a listenable summary. It renders generated audio under ignored
541
+ local Ragmir state by default. Use Transformers.js WAV for confidential content and Edge MP3 only
542
+ when online TTS is explicitly acceptable.
543
+
544
+ Optional Markdown-report skill folder:
545
+
546
+ \`\`\`plain text
547
+ ${input.reportSkillPath}
548
+ \`\`\`
549
+
550
+ Use it when the user asks for a cited Markdown report, dossier, audit memo, or planning note. It
551
+ writes reports under ignored local Ragmir state by default.
552
+
553
+ Optional legal-dossier skill folder:
554
+
555
+ \`\`\`plain text
556
+ ${input.legalSkillPath}
557
+ \`\`\`
558
+
559
+ Use it when the user asks for legal chronology, clause review, evidence tables, or professional
560
+ handoff notes. It prepares cited work products only; it does not provide final legal advice.
561
+
562
+ ## MCP
563
+
564
+ ${mcpHelperGuide(input)}
565
+
566
+ ## Native Agent Setup
567
+
568
+ For automatic skill discovery in one or more supported agents, run:
569
+
570
+ \`\`\`bash
571
+ ${input.installAgentCommand}
572
+ \`\`\`
573
+
574
+ Use \`--agents claude\`, \`--agents kimi\`, or a comma-separated list when the user only uses one
575
+ agent. Use \`--scope user\` for global installs and \`--scope project\` for repository-local agent
576
+ folders. By default, native agent folders link back to \`.ragmir/skills/\` so there is one source of
577
+ truth. Use \`--mode copy\` only when an agent or filesystem cannot follow symlinks.
578
+
579
+ Detailed setup notes:
580
+
581
+ \`\`\`plain text
582
+ ${input.agentSetupPath}
583
+ \`\`\`
584
+
585
+ Before relying on retrieved context, run:
586
+
587
+ \`\`\`bash
588
+ ${input.doctorCommand}
589
+ \`\`\`
590
+
591
+ `;
592
+ }
593
+ function agentSetupGuide(input) {
594
+ return `# Ragmir Agent Setup
595
+
596
+ Ragmir keeps the repository-local source of truth under \`.ragmir/skills/\`. Native agent folders link
597
+ to that source by default, so there is one original version to update. Install only the agents you
598
+ use.
599
+
600
+ ## Install Native Skills
601
+
602
+ \`\`\`bash
603
+ ${input.installAgentCommand}
604
+ \`\`\`
605
+
606
+ Examples:
607
+
608
+ \`\`\`bash
609
+ ${installAgentCommandExample(input.installAgentCommand, "claude")}
610
+ ${installAgentCommandExample(input.installAgentCommand, "kimi")}
611
+ ${installAgentCommandExample(input.installAgentCommand, "claude,codex,kimi,opencode,cline")}
612
+ ${installAgentCommandExample(input.installAgentCommand, "cline")} --mode copy
613
+ \`\`\`
614
+
615
+ Default project-scope targets:
616
+
617
+ | Agent | Project skill directory | User skill directory |
618
+ | --- | --- | --- |
619
+ | Claude Code | \`.claude/skills/\` | \`~/.claude/skills/\` |
620
+ | Codex | \`.codex/skills/\` | \`~/.codex/skills/\` |
621
+ | Kimi Code CLI | \`.kimi/skills/\` | \`~/.kimi/skills/\` |
622
+ | OpenCode | \`.opencode/skills/\` | \`~/.config/opencode/skills/\` |
623
+ | Cline | \`.cline/skills/\` | \`~/.cline/skills/\` |
624
+
625
+ Override paths with \`CLAUDE_SKILLS_DIR\`, \`CODEX_SKILLS_DIR\`, \`KIMI_SKILLS_DIR\`,
626
+ \`OPENCODE_SKILLS_DIR\`, or \`CLINE_SKILLS_DIR\`.
627
+
628
+ Use \`--mode copy\` only when an agent runtime does not follow symlinked skill directories. When using
629
+ copy mode, rerun \`install-agent\` after refreshing \`.ragmir/skills/\`.
630
+
631
+ ## Skill Folders
632
+
633
+ \`\`\`plain text
634
+ ${input.skillPath}
635
+ ${input.audioSkillPath}
636
+ ${input.reportSkillPath}
637
+ ${input.legalSkillPath}
638
+ \`\`\`
639
+
640
+ ## MCP Helpers
641
+
642
+ ${mcpHelperGuide(input)}
643
+
644
+ Before relying on retrieved context, run:
645
+
646
+ \`\`\`bash
647
+ ${input.doctorCommand}
648
+ \`\`\`
649
+
650
+ `;
651
+ }
652
+ //# sourceMappingURL=skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"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"}