@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.
- package/LICENSE +21 -0
- package/README.md +102 -0
- package/dist/access-log.d.ts +11 -0
- package/dist/access-log.d.ts.map +1 -0
- package/dist/access-log.js +145 -0
- package/dist/access-log.js.map +1 -0
- package/dist/chunking.d.ts +3 -0
- package/dist/chunking.d.ts.map +1 -0
- package/dist/chunking.js +58 -0
- package/dist/chunking.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +944 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +224 -0
- package/dist/config.js.map +1 -0
- package/dist/defaults.d.ts +17 -0
- package/dist/defaults.d.ts.map +1 -0
- package/dist/defaults.js +59 -0
- package/dist/defaults.js.map +1 -0
- package/dist/destroy.d.ts +3 -0
- package/dist/destroy.d.ts.map +1 -0
- package/dist/destroy.js +16 -0
- package/dist/destroy.js.map +1 -0
- package/dist/doctor.d.ts +3 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +117 -0
- package/dist/doctor.js.map +1 -0
- package/dist/embeddings.d.ts +9 -0
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +110 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/evaluate.d.ts +3 -0
- package/dist/evaluate.d.ts.map +1 -0
- package/dist/evaluate.js +97 -0
- package/dist/evaluate.js.map +1 -0
- package/dist/files.d.ts +16 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +388 -0
- package/dist/files.js.map +1 -0
- package/dist/gitignore.d.ts +3 -0
- package/dist/gitignore.d.ts.map +1 -0
- package/dist/gitignore.js +27 -0
- package/dist/gitignore.js.map +1 -0
- package/dist/guards.d.ts +2 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +4 -0
- package/dist/guards.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest.d.ts +4 -0
- package/dist/ingest.d.ts.map +1 -0
- package/dist/ingest.js +268 -0
- package/dist/ingest.js.map +1 -0
- package/dist/init.d.ts +2 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +33 -0
- package/dist/init.js.map +1 -0
- package/dist/mcp.d.ts +8 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +189 -0
- package/dist/mcp.js.map +1 -0
- package/dist/package-manager.d.ts +11 -0
- package/dist/package-manager.d.ts.map +1 -0
- package/dist/package-manager.js +93 -0
- package/dist/package-manager.js.map +1 -0
- package/dist/parsing.d.ts +12 -0
- package/dist/parsing.d.ts.map +1 -0
- package/dist/parsing.js +307 -0
- package/dist/parsing.js.map +1 -0
- package/dist/query.d.ts +5 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +180 -0
- package/dist/query.js.map +1 -0
- package/dist/redaction.d.ts +7 -0
- package/dist/redaction.d.ts.map +1 -0
- package/dist/redaction.js +93 -0
- package/dist/redaction.js.map +1 -0
- package/dist/research.d.ts +9 -0
- package/dist/research.d.ts.map +1 -0
- package/dist/research.js +335 -0
- package/dist/research.js.map +1 -0
- package/dist/security.d.ts +3 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +106 -0
- package/dist/security.js.map +1 -0
- package/dist/semantic-config.d.ts +9 -0
- package/dist/semantic-config.d.ts.map +1 -0
- package/dist/semantic-config.js +35 -0
- package/dist/semantic-config.js.map +1 -0
- package/dist/setup.d.ts +32 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +74 -0
- package/dist/setup.js.map +1 -0
- package/dist/skill.d.ts +66 -0
- package/dist/skill.d.ts.map +1 -0
- package/dist/skill.js +652 -0
- package/dist/skill.js.map +1 -0
- package/dist/sources.d.ts +16 -0
- package/dist/sources.d.ts.map +1 -0
- package/dist/sources.js +71 -0
- package/dist/sources.js.map +1 -0
- package/dist/store.d.ts +13 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +94 -0
- package/dist/store.js.map +1 -0
- package/dist/text.d.ts +3 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +10 -0
- package/dist/text.js.map +1 -0
- package/dist/types.d.ts +322 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/examples/library-api-demo/README.md +42 -0
- package/examples/library-api-demo/run.mjs +61 -0
- package/examples/sovereign-rag-demo/.ragmir/config.json +22 -0
- package/examples/sovereign-rag-demo/.ragmir/sources.txt +2 -0
- package/examples/sovereign-rag-demo/README.md +95 -0
- package/examples/sovereign-rag-demo/golden-queries.json +29 -0
- package/examples/sovereign-rag-demo/raw/dataset-inventory.csv +5 -0
- package/examples/sovereign-rag-demo/raw/facility-scan.heic +3 -0
- package/examples/sovereign-rag-demo/raw/incident-timeline.jsonl +4 -0
- package/examples/sovereign-rag-demo/raw/operations-brief.md +16 -0
- package/examples/sovereign-rag-demo/raw/review-notes.evidence +11 -0
- package/examples/sovereign-rag-demo/raw/security-policy.yaml +14 -0
- package/package.json +87 -0
- package/skills/ragmir/SKILL.md +366 -0
- package/skills/ragmir-audio-summary/SKILL.md +150 -0
- package/skills/ragmir-audio-summary/forge-voice.sh +150 -0
- package/skills/ragmir-audio-summary/split-lines.py +13 -0
- package/skills/ragmir-audio-summary/xtts-voice.py +46 -0
- package/skills/ragmir-legal-dossier/SKILL.md +143 -0
- 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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"}
|