oh-my-second-brain 0.1.5
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/adapters/README.md +98 -0
- package/adapters/claude-code/.claude-plugin/plugin.json +24 -0
- package/adapters/claude-code/CLAUDE.md +26 -0
- package/adapters/claude-code/skills/capture/SKILL.md +50 -0
- package/adapters/claude-code/skills/define/SKILL.md +51 -0
- package/adapters/claude-code/skills/doctor/SKILL.md +58 -0
- package/adapters/claude-code/skills/retrieve/SKILL.md +55 -0
- package/adapters/claude-code/skills/setup/SKILL.md +71 -0
- package/adapters/claude-code/skills/uninstall/SKILL.md +34 -0
- package/adapters/codex/.codex-plugin/plugin.json +8 -0
- package/adapters/codex/.mcp.json +14 -0
- package/adapters/codex/AGENTS.md +16 -0
- package/adapters/codex/rules/oms.md +25 -0
- package/adapters/codex/skills/oms-capture/SKILL.md +16 -0
- package/adapters/codex/skills/oms-doctor/SKILL.md +14 -0
- package/adapters/codex/skills/oms-install/SKILL.md +19 -0
- package/adapters/codex/skills/oms-retrieve/SKILL.md +10 -0
- package/adapters/codex/skills/oms-setup/SKILL.md +22 -0
- package/adapters/codex/skills/oms-uninstall/SKILL.md +20 -0
- package/adapters/hermes/README.md +8 -0
- package/adapters/hermes/SOUL.md +19 -0
- package/adapters/hermes/manifest.json +7 -0
- package/adapters/hermes/skills/capture/SKILL.md +16 -0
- package/adapters/hermes/skills/doctor/SKILL.md +14 -0
- package/adapters/hermes/skills/install/SKILL.md +19 -0
- package/adapters/hermes/skills/retrieve/SKILL.md +10 -0
- package/adapters/hermes/skills/setup/SKILL.md +22 -0
- package/adapters/hermes/skills/uninstall/SKILL.md +20 -0
- package/core/AGENTS.md +110 -0
- package/core/agents/librarian.md +43 -0
- package/core/agents/retriever.md +62 -0
- package/core/ontology/concepts/inbox.yaml +4 -0
- package/core/ontology/concepts/literature.yaml +27 -0
- package/core/ontology/taxonomy.yaml +11 -0
- package/core/skills/capture/SKILL.md +48 -0
- package/core/skills/define/SKILL.md +59 -0
- package/core/skills/doctor/SKILL.md +49 -0
- package/core/skills/retrieve/SKILL.md +56 -0
- package/core/skills/setup/SKILL.md +44 -0
- package/core/skills/uninstall/SKILL.md +34 -0
- package/dist/adapt/HostAdapter.d.ts +21 -0
- package/dist/adapt/HostAdapter.js +10 -0
- package/dist/adapt/HostAdapter.js.map +1 -0
- package/dist/adapt/claudeCode.d.ts +9 -0
- package/dist/adapt/claudeCode.js +15 -0
- package/dist/adapt/claudeCode.js.map +1 -0
- package/dist/adapt/codex.d.ts +9 -0
- package/dist/adapt/codex.js +15 -0
- package/dist/adapt/codex.js.map +1 -0
- package/dist/adapt/hermes.d.ts +9 -0
- package/dist/adapt/hermes.js +15 -0
- package/dist/adapt/hermes.js.map +1 -0
- package/dist/capture/safe.d.ts +36 -0
- package/dist/capture/safe.js +167 -0
- package/dist/capture/safe.js.map +1 -0
- package/dist/cli/oms.d.ts +18 -0
- package/dist/cli/oms.js +401 -0
- package/dist/cli/oms.js.map +1 -0
- package/dist/conventions/frontmatter.d.ts +15 -0
- package/dist/conventions/frontmatter.js +23 -0
- package/dist/conventions/frontmatter.js.map +1 -0
- package/dist/conventions/validate.d.ts +24 -0
- package/dist/conventions/validate.js +88 -0
- package/dist/conventions/validate.js.map +1 -0
- package/dist/graph/cache.d.ts +98 -0
- package/dist/graph/cache.js +347 -0
- package/dist/graph/cache.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/install/hosts.d.ts +27 -0
- package/dist/install/hosts.js +465 -0
- package/dist/install/hosts.js.map +1 -0
- package/dist/mcp/server.d.ts +8 -0
- package/dist/mcp/server.js +461 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/ontology/loader.d.ts +13 -0
- package/dist/ontology/loader.js +63 -0
- package/dist/ontology/loader.js.map +1 -0
- package/dist/ontology/resolver.d.ts +13 -0
- package/dist/ontology/resolver.js +37 -0
- package/dist/ontology/resolver.js.map +1 -0
- package/dist/ontology/types.d.ts +72 -0
- package/dist/ontology/types.js +12 -0
- package/dist/ontology/types.js.map +1 -0
- package/docs/install.md +115 -0
- package/docs/release.md +91 -0
- package/package.json +64 -0
- package/scripts/install.sh +49 -0
- package/scripts/uninstall.sh +57 -0
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { existsSync, lstatSync } from "node:fs";
|
|
3
|
+
import { cp, mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { parse as yamlParse, stringify as yamlStringify } from "yaml";
|
|
7
|
+
const HOSTS = ["claude", "codex", "hermes"];
|
|
8
|
+
const MANAGED_CODEX_START = "# BEGIN OMS MANAGED MCP";
|
|
9
|
+
const MANAGED_CODEX_END = "# END OMS MANAGED MCP";
|
|
10
|
+
const DEFAULT_PACKAGE_SPEC = "https://github.com/GoBeromsu/oms/releases/download/oms-v0.1.5/oms-0.1.5.tgz";
|
|
11
|
+
const CODEX_SKILL_PREFIX = "oms-";
|
|
12
|
+
const CODEX_RULE_FILENAME = "oms.md";
|
|
13
|
+
const HERMES_SKILL_CATEGORY = "knowledge-management";
|
|
14
|
+
const HERMES_SKILL_NAME = "oms";
|
|
15
|
+
function commandExists(command) {
|
|
16
|
+
const result = spawnSync(process.platform === "win32" ? "where" : "command", process.platform === "win32" ? [command] : ["-v", command], {
|
|
17
|
+
stdio: "ignore",
|
|
18
|
+
shell: process.platform !== "win32",
|
|
19
|
+
});
|
|
20
|
+
return result.status === 0;
|
|
21
|
+
}
|
|
22
|
+
export function detectAvailableHosts() {
|
|
23
|
+
const detected = [];
|
|
24
|
+
if (commandExists("claude"))
|
|
25
|
+
detected.push("claude");
|
|
26
|
+
if (commandExists("codex"))
|
|
27
|
+
detected.push("codex");
|
|
28
|
+
if (commandExists("hermes"))
|
|
29
|
+
detected.push("hermes");
|
|
30
|
+
return detected;
|
|
31
|
+
}
|
|
32
|
+
export function resolveRuntimeSelection(selection) {
|
|
33
|
+
if (selection === "all")
|
|
34
|
+
return [...HOSTS];
|
|
35
|
+
if (selection === "auto") {
|
|
36
|
+
const detected = detectAvailableHosts();
|
|
37
|
+
return detected.length > 0 ? detected : ["claude"];
|
|
38
|
+
}
|
|
39
|
+
return [selection];
|
|
40
|
+
}
|
|
41
|
+
function hostHome(homeDir, dirname, envName) {
|
|
42
|
+
return process.env[envName] ? path.resolve(process.env[envName]) : path.join(homeDir ?? homedir(), dirname);
|
|
43
|
+
}
|
|
44
|
+
function packageSpec(options) {
|
|
45
|
+
return options.packageSpec ?? DEFAULT_PACKAGE_SPEC;
|
|
46
|
+
}
|
|
47
|
+
function mcpArgs(options) {
|
|
48
|
+
return ["-y", packageSpec(options), "mcp", "--vault", options.vault];
|
|
49
|
+
}
|
|
50
|
+
function jsonString(value) {
|
|
51
|
+
return JSON.stringify(value);
|
|
52
|
+
}
|
|
53
|
+
function isRecord(value) {
|
|
54
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
55
|
+
}
|
|
56
|
+
async function readJsonObject(file) {
|
|
57
|
+
try {
|
|
58
|
+
const parsed = JSON.parse(await readFile(file, "utf-8"));
|
|
59
|
+
return isRecord(parsed) ? parsed : {};
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return {};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async function writeJsonObject(file, data, dryRun) {
|
|
66
|
+
if (dryRun)
|
|
67
|
+
return false;
|
|
68
|
+
await mkdir(path.dirname(file), { recursive: true });
|
|
69
|
+
await writeFile(file, `${JSON.stringify(data, null, 2)}\n`, "utf-8");
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
async function readYamlObject(file) {
|
|
73
|
+
try {
|
|
74
|
+
const parsed = yamlParse(await readFile(file, "utf-8"));
|
|
75
|
+
return isRecord(parsed) ? parsed : {};
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return {};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async function writeYamlObject(file, data, dryRun) {
|
|
82
|
+
if (dryRun)
|
|
83
|
+
return false;
|
|
84
|
+
await mkdir(path.dirname(file), { recursive: true });
|
|
85
|
+
await writeFile(file, yamlStringify(data), "utf-8");
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
function mcpServerEntry(options) {
|
|
89
|
+
return {
|
|
90
|
+
command: "npx",
|
|
91
|
+
args: mcpArgs(options),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function refuseSymlinkedLeaf(target) {
|
|
95
|
+
if (!existsSync(target))
|
|
96
|
+
return;
|
|
97
|
+
if (lstatSync(target).isSymbolicLink()) {
|
|
98
|
+
throw new Error(`Refusing to replace symlinked Oh My Second Brain install target: ${target}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async function replaceDirectory(source, target, dryRun) {
|
|
102
|
+
if (dryRun)
|
|
103
|
+
return false;
|
|
104
|
+
refuseSymlinkedLeaf(target);
|
|
105
|
+
await rm(target, { recursive: true, force: true });
|
|
106
|
+
await mkdir(path.dirname(target), { recursive: true });
|
|
107
|
+
await cp(source, target, { recursive: true });
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
async function upsertClaudeMcp(options, claudeDir) {
|
|
111
|
+
const mcpPath = path.join(claudeDir, "mcp.json");
|
|
112
|
+
const data = await readJsonObject(mcpPath);
|
|
113
|
+
const existingServers = data["mcpServers"];
|
|
114
|
+
const mcpServers = isRecord(existingServers) ? existingServers : {};
|
|
115
|
+
mcpServers["oms"] = mcpServerEntry(options);
|
|
116
|
+
data["mcpServers"] = mcpServers;
|
|
117
|
+
return writeJsonObject(mcpPath, data, Boolean(options.dryRun));
|
|
118
|
+
}
|
|
119
|
+
async function removeClaudeMcp(options, claudeDir) {
|
|
120
|
+
const mcpPath = path.join(claudeDir, "mcp.json");
|
|
121
|
+
const data = await readJsonObject(mcpPath);
|
|
122
|
+
const existingServers = data["mcpServers"];
|
|
123
|
+
if (!isRecord(existingServers) || !("oms" in existingServers))
|
|
124
|
+
return false;
|
|
125
|
+
delete existingServers["oms"];
|
|
126
|
+
data["mcpServers"] = existingServers;
|
|
127
|
+
return writeJsonObject(mcpPath, data, Boolean(options.dryRun));
|
|
128
|
+
}
|
|
129
|
+
function runExternal(command, args) {
|
|
130
|
+
const result = spawnSync(command, args, { stdio: "pipe", encoding: "utf-8" });
|
|
131
|
+
if (result.status === 0)
|
|
132
|
+
return { ok: true, message: `${command} ${args.join(" ")}` };
|
|
133
|
+
const stderr = result.stderr.trim();
|
|
134
|
+
const stdout = result.stdout.trim();
|
|
135
|
+
return { ok: false, message: stderr || stdout || `${command} exited ${result.status ?? "unknown"}` };
|
|
136
|
+
}
|
|
137
|
+
async function installClaude(options) {
|
|
138
|
+
const claudeDir = hostHome(options.homeDir, ".claude", "OMS_CLAUDE_HOME");
|
|
139
|
+
const pluginPath = path.join(options.adapterRoot, "claude-code");
|
|
140
|
+
const commands = [
|
|
141
|
+
`claude plugin install ${pluginPath}`,
|
|
142
|
+
`claude mcp add oms -- npx ${mcpArgs(options).join(" ")}`,
|
|
143
|
+
];
|
|
144
|
+
const messages = ["Claude Code adapter is installed through Claude's plugin/MCP surfaces."];
|
|
145
|
+
let changed = false;
|
|
146
|
+
if (options.executeExternal) {
|
|
147
|
+
if (!commandExists("claude")) {
|
|
148
|
+
messages.push("claude CLI was not found; wrote MCP config only and left plugin command for manual execution.");
|
|
149
|
+
}
|
|
150
|
+
else if (!options.dryRun) {
|
|
151
|
+
const externalCommands = [
|
|
152
|
+
["claude", "plugin", "install", pluginPath],
|
|
153
|
+
["claude", "mcp", "add", "oms", "--", "npx", ...mcpArgs(options)],
|
|
154
|
+
];
|
|
155
|
+
for (const [command, ...args] of externalCommands) {
|
|
156
|
+
const result = runExternal(command, args);
|
|
157
|
+
messages.push(result.ok ? `Executed: ${result.message}` : `External command failed: ${result.message}`);
|
|
158
|
+
changed = changed || result.ok;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
const mcpChanged = await upsertClaudeMcp(options, claudeDir);
|
|
163
|
+
changed = changed || mcpChanged;
|
|
164
|
+
return {
|
|
165
|
+
runtime: "claude",
|
|
166
|
+
action: "install",
|
|
167
|
+
changed: changed && !options.dryRun,
|
|
168
|
+
skipped: false,
|
|
169
|
+
paths: [path.join(claudeDir, "mcp.json"), pluginPath],
|
|
170
|
+
commands,
|
|
171
|
+
messages,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
async function uninstallClaude(options) {
|
|
175
|
+
const claudeDir = hostHome(options.homeDir, ".claude", "OMS_CLAUDE_HOME");
|
|
176
|
+
const commands = ["claude mcp remove oms", "claude plugin uninstall oms"];
|
|
177
|
+
const messages = ["Claude Code uninstall removes the Oh My Second Brain MCP entry and, when requested, asks Claude CLI to uninstall the plugin."];
|
|
178
|
+
let changed = await removeClaudeMcp(options, claudeDir);
|
|
179
|
+
if (options.executeExternal && commandExists("claude") && !options.dryRun) {
|
|
180
|
+
const externalCommands = [
|
|
181
|
+
["claude", "mcp", "remove", "oms"],
|
|
182
|
+
["claude", "plugin", "uninstall", "oms"],
|
|
183
|
+
];
|
|
184
|
+
for (const [command, ...args] of externalCommands) {
|
|
185
|
+
const result = runExternal(command, args);
|
|
186
|
+
messages.push(result.ok ? `Executed: ${result.message}` : `External command failed: ${result.message}`);
|
|
187
|
+
changed = changed || result.ok;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
runtime: "claude",
|
|
192
|
+
action: "uninstall",
|
|
193
|
+
changed: changed && !options.dryRun,
|
|
194
|
+
skipped: false,
|
|
195
|
+
paths: [path.join(claudeDir, "mcp.json")],
|
|
196
|
+
commands,
|
|
197
|
+
messages,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
function codexManagedBlock(options) {
|
|
201
|
+
const args = mcpArgs(options).map(jsonString).join(", ");
|
|
202
|
+
return [
|
|
203
|
+
MANAGED_CODEX_START,
|
|
204
|
+
"# OMS MCP hookup for Codex CLI. Managed by `oms install/uninstall`.",
|
|
205
|
+
"# Codex-native rules live in ~/.codex/rules/oms.md; skills live in ~/.codex/skills/oms-*.",
|
|
206
|
+
"[mcp_servers.oms]",
|
|
207
|
+
'command = "npx"',
|
|
208
|
+
`args = [${args}]`,
|
|
209
|
+
"",
|
|
210
|
+
"[mcp_servers.oms.env]",
|
|
211
|
+
'OMS_AGENT_RUNTIME = "codex"',
|
|
212
|
+
MANAGED_CODEX_END,
|
|
213
|
+
"",
|
|
214
|
+
].join("\n");
|
|
215
|
+
}
|
|
216
|
+
function isCodexOMSTable(line) {
|
|
217
|
+
return line === "[mcp_servers.oms]" || line.startsWith("[mcp_servers.oms.");
|
|
218
|
+
}
|
|
219
|
+
function removeManagedCodexBlock(content) {
|
|
220
|
+
const markerPattern = new RegExp(`\\n?${MANAGED_CODEX_START.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}[\\s\\S]*?${MANAGED_CODEX_END.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\n?`, "g");
|
|
221
|
+
const withoutMarkers = content.replace(markerPattern, "\n");
|
|
222
|
+
const markerRemoved = withoutMarkers !== content;
|
|
223
|
+
const lines = withoutMarkers.split(/\r?\n/);
|
|
224
|
+
const output = [];
|
|
225
|
+
let removedLegacy = false;
|
|
226
|
+
for (let i = 0; i < lines.length; i++) {
|
|
227
|
+
const line = lines[i] ?? "";
|
|
228
|
+
const trimmed = line.trim();
|
|
229
|
+
if (isCodexOMSTable(trimmed)) {
|
|
230
|
+
removedLegacy = true;
|
|
231
|
+
i++;
|
|
232
|
+
while (i < lines.length) {
|
|
233
|
+
const next = (lines[i] ?? "").trim();
|
|
234
|
+
const isTable = /^\[[^\]]+\]$/.test(next);
|
|
235
|
+
if (isTable && !isCodexOMSTable(next)) {
|
|
236
|
+
i--;
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
i++;
|
|
240
|
+
}
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
if (line.includes("OMS MCP hookup for Codex CLI")) {
|
|
244
|
+
removedLegacy = true;
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
output.push(line);
|
|
248
|
+
}
|
|
249
|
+
return { content: output.join("\n").replace(/\n{3,}/g, "\n\n").trimEnd() + "\n", removed: markerRemoved || removedLegacy };
|
|
250
|
+
}
|
|
251
|
+
async function installCodexNativeArtifacts(codexDir, options) {
|
|
252
|
+
const paths = [];
|
|
253
|
+
const rulesSource = path.join(options.adapterRoot, "codex", "rules", CODEX_RULE_FILENAME);
|
|
254
|
+
const rulesTarget = path.join(codexDir, "rules", CODEX_RULE_FILENAME);
|
|
255
|
+
const skillsSource = path.join(options.adapterRoot, "codex", "skills");
|
|
256
|
+
const skillsTargetRoot = path.join(codexDir, "skills");
|
|
257
|
+
if (!options.dryRun) {
|
|
258
|
+
await mkdir(path.dirname(rulesTarget), { recursive: true });
|
|
259
|
+
await cp(rulesSource, rulesTarget);
|
|
260
|
+
await mkdir(skillsTargetRoot, { recursive: true });
|
|
261
|
+
const { readdir } = await import("node:fs/promises");
|
|
262
|
+
const entries = await readdir(skillsSource, { withFileTypes: true });
|
|
263
|
+
const desired = new Set(entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name));
|
|
264
|
+
for (const entry of entries) {
|
|
265
|
+
if (!entry.isDirectory())
|
|
266
|
+
continue;
|
|
267
|
+
const target = path.join(skillsTargetRoot, entry.name);
|
|
268
|
+
if (!entry.name.startsWith(CODEX_SKILL_PREFIX)) {
|
|
269
|
+
throw new Error(`Codex skill directory must be namespaced ${CODEX_SKILL_PREFIX}*: ${entry.name}`);
|
|
270
|
+
}
|
|
271
|
+
await replaceDirectory(path.join(skillsSource, entry.name), target, false);
|
|
272
|
+
paths.push(target);
|
|
273
|
+
}
|
|
274
|
+
const installed = await readdir(skillsTargetRoot, { withFileTypes: true });
|
|
275
|
+
for (const entry of installed) {
|
|
276
|
+
if (entry.isDirectory() && entry.name.startsWith(CODEX_SKILL_PREFIX) && !desired.has(entry.name)) {
|
|
277
|
+
await rm(path.join(skillsTargetRoot, entry.name), { recursive: true, force: true });
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
paths.push(path.join(skillsTargetRoot, `${CODEX_SKILL_PREFIX}setup`));
|
|
283
|
+
}
|
|
284
|
+
return [rulesTarget, ...paths];
|
|
285
|
+
}
|
|
286
|
+
async function installCodex(options) {
|
|
287
|
+
const codexDir = hostHome(options.homeDir, ".codex", "OMS_CODEX_HOME");
|
|
288
|
+
const pluginSource = path.join(options.adapterRoot, "codex");
|
|
289
|
+
const pluginTarget = path.join(codexDir, "plugins", "oms");
|
|
290
|
+
const configPath = path.join(codexDir, "config.toml");
|
|
291
|
+
const original = existsSync(configPath) ? await readFile(configPath, "utf-8") : "";
|
|
292
|
+
const stripped = removeManagedCodexBlock(original).content;
|
|
293
|
+
const next = `${stripped.trimEnd()}\n\n${codexManagedBlock(options)}`;
|
|
294
|
+
let nativePaths = [];
|
|
295
|
+
if (!options.dryRun) {
|
|
296
|
+
await mkdir(path.dirname(configPath), { recursive: true });
|
|
297
|
+
await writeFile(configPath, next, "utf-8");
|
|
298
|
+
await replaceDirectory(pluginSource, pluginTarget, false);
|
|
299
|
+
nativePaths = await installCodexNativeArtifacts(codexDir, options);
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
nativePaths = [
|
|
303
|
+
path.join(codexDir, "rules", CODEX_RULE_FILENAME),
|
|
304
|
+
path.join(codexDir, "skills", `${CODEX_SKILL_PREFIX}setup`),
|
|
305
|
+
];
|
|
306
|
+
}
|
|
307
|
+
return {
|
|
308
|
+
runtime: "codex",
|
|
309
|
+
action: "install",
|
|
310
|
+
changed: !options.dryRun,
|
|
311
|
+
skipped: false,
|
|
312
|
+
paths: [configPath, pluginTarget, ...nativePaths],
|
|
313
|
+
commands: [`Codex MCP config: ${configPath}`],
|
|
314
|
+
messages: ["Installed Codex-native Oh My Second Brain rules, namespaced skills, plugin assets, and managed MCP/env config."],
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
async function uninstallCodex(options) {
|
|
318
|
+
const codexDir = hostHome(options.homeDir, ".codex", "OMS_CODEX_HOME");
|
|
319
|
+
const pluginTarget = path.join(codexDir, "plugins", "oms");
|
|
320
|
+
const configPath = path.join(codexDir, "config.toml");
|
|
321
|
+
const ruleTarget = path.join(codexDir, "rules", CODEX_RULE_FILENAME);
|
|
322
|
+
const skillsRoot = path.join(codexDir, "skills");
|
|
323
|
+
let changed = false;
|
|
324
|
+
if (existsSync(configPath)) {
|
|
325
|
+
const original = await readFile(configPath, "utf-8");
|
|
326
|
+
const removed = removeManagedCodexBlock(original);
|
|
327
|
+
changed = removed.removed;
|
|
328
|
+
if (removed.removed && !options.dryRun)
|
|
329
|
+
await writeFile(configPath, removed.content, "utf-8");
|
|
330
|
+
}
|
|
331
|
+
for (const target of [pluginTarget, ruleTarget]) {
|
|
332
|
+
if (existsSync(target)) {
|
|
333
|
+
changed = true;
|
|
334
|
+
if (!options.dryRun)
|
|
335
|
+
await rm(target, { recursive: true, force: true });
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
if (existsSync(skillsRoot)) {
|
|
339
|
+
const { readdir } = await import("node:fs/promises");
|
|
340
|
+
for (const entry of await readdir(skillsRoot, { withFileTypes: true })) {
|
|
341
|
+
if (entry.isDirectory() && entry.name.startsWith(CODEX_SKILL_PREFIX)) {
|
|
342
|
+
changed = true;
|
|
343
|
+
if (!options.dryRun)
|
|
344
|
+
await rm(path.join(skillsRoot, entry.name), { recursive: true, force: true });
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
return {
|
|
349
|
+
runtime: "codex",
|
|
350
|
+
action: "uninstall",
|
|
351
|
+
changed: changed && !options.dryRun,
|
|
352
|
+
skipped: !changed,
|
|
353
|
+
paths: [configPath, pluginTarget, ruleTarget, path.join(skillsRoot, `${CODEX_SKILL_PREFIX}*`)],
|
|
354
|
+
commands: [],
|
|
355
|
+
messages: ["Removed Codex managed MCP block, Oh My Second Brain rule, namespaced Oh My Second Brain skills, and plugin assets."],
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
async function upsertHermesMcp(options, hermesConfig) {
|
|
359
|
+
const data = await readYamlObject(hermesConfig);
|
|
360
|
+
const rawServers = data["mcp_servers"];
|
|
361
|
+
const servers = isRecord(rawServers) ? rawServers : {};
|
|
362
|
+
servers["oms"] = { ...mcpServerEntry(options), enabled: true };
|
|
363
|
+
data["mcp_servers"] = servers;
|
|
364
|
+
return writeYamlObject(hermesConfig, data, Boolean(options.dryRun));
|
|
365
|
+
}
|
|
366
|
+
async function removeHermesMcp(options, hermesConfig) {
|
|
367
|
+
const data = await readYamlObject(hermesConfig);
|
|
368
|
+
const rawServers = data["mcp_servers"];
|
|
369
|
+
if (!isRecord(rawServers) || !("oms" in rawServers))
|
|
370
|
+
return false;
|
|
371
|
+
delete rawServers["oms"];
|
|
372
|
+
data["mcp_servers"] = rawServers;
|
|
373
|
+
return writeYamlObject(hermesConfig, data, Boolean(options.dryRun));
|
|
374
|
+
}
|
|
375
|
+
async function installHermes(options) {
|
|
376
|
+
const hermesDir = hostHome(options.homeDir, ".hermes", "OMS_HERMES_HOME");
|
|
377
|
+
const pluginSource = path.join(options.adapterRoot, "hermes");
|
|
378
|
+
const legacyPluginTarget = path.join(hermesDir, "plugins", "oms");
|
|
379
|
+
const legacyMcpPath = path.join(hermesDir, "mcp", "oms.json");
|
|
380
|
+
const skillSource = path.join(options.adapterRoot, "hermes", "skills");
|
|
381
|
+
const skillTarget = path.join(hermesDir, "skills", HERMES_SKILL_CATEGORY, HERMES_SKILL_NAME);
|
|
382
|
+
const configPath = path.join(hermesDir, "config.yaml");
|
|
383
|
+
const adapterTarget = path.join(hermesDir, "adapters", "oms");
|
|
384
|
+
if (!options.dryRun) {
|
|
385
|
+
await rm(legacyPluginTarget, { recursive: true, force: true });
|
|
386
|
+
await rm(legacyMcpPath, { force: true });
|
|
387
|
+
await replaceDirectory(pluginSource, adapterTarget, false);
|
|
388
|
+
await replaceDirectory(skillSource, skillTarget, false);
|
|
389
|
+
await upsertHermesMcp(options, configPath);
|
|
390
|
+
}
|
|
391
|
+
return {
|
|
392
|
+
runtime: "hermes",
|
|
393
|
+
action: "install",
|
|
394
|
+
changed: !options.dryRun,
|
|
395
|
+
skipped: false,
|
|
396
|
+
paths: [adapterTarget, skillTarget, configPath],
|
|
397
|
+
commands: [`Hermes MCP config: ${configPath}`],
|
|
398
|
+
messages: ["Installed Hermes-native Oh My Second Brain skill bundle and registered mcp_servers.oms in ~/.hermes/config.yaml."],
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
async function uninstallHermes(options) {
|
|
402
|
+
const hermesDir = hostHome(options.homeDir, ".hermes", "OMS_HERMES_HOME");
|
|
403
|
+
const adapterTarget = path.join(hermesDir, "adapters", "oms");
|
|
404
|
+
const skillTarget = path.join(hermesDir, "skills", HERMES_SKILL_CATEGORY, HERMES_SKILL_NAME);
|
|
405
|
+
const legacyPluginTarget = path.join(hermesDir, "plugins", "oms");
|
|
406
|
+
const legacyMcpPath = path.join(hermesDir, "mcp", "oms.json");
|
|
407
|
+
const configPath = path.join(hermesDir, "config.yaml");
|
|
408
|
+
let changed = false;
|
|
409
|
+
if (existsSync(configPath))
|
|
410
|
+
changed = (await removeHermesMcp(options, configPath)) || changed;
|
|
411
|
+
for (const target of [adapterTarget, skillTarget, legacyPluginTarget, legacyMcpPath]) {
|
|
412
|
+
if (existsSync(target)) {
|
|
413
|
+
changed = true;
|
|
414
|
+
if (!options.dryRun)
|
|
415
|
+
await rm(target, { recursive: true, force: true });
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
return {
|
|
419
|
+
runtime: "hermes",
|
|
420
|
+
action: "uninstall",
|
|
421
|
+
changed: changed && !options.dryRun,
|
|
422
|
+
skipped: !changed,
|
|
423
|
+
paths: [adapterTarget, skillTarget, configPath],
|
|
424
|
+
commands: [],
|
|
425
|
+
messages: ["Removed Hermes Oh My Second Brain skill bundle, adapter copy, legacy descriptor files, and mcp_servers.oms."],
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
export async function runHostOperation(options) {
|
|
429
|
+
const runtimes = resolveRuntimeSelection(options.runtime);
|
|
430
|
+
const results = [];
|
|
431
|
+
for (const runtime of runtimes) {
|
|
432
|
+
if (options.action === "install") {
|
|
433
|
+
if (runtime === "claude")
|
|
434
|
+
results.push(await installClaude(options));
|
|
435
|
+
if (runtime === "codex")
|
|
436
|
+
results.push(await installCodex(options));
|
|
437
|
+
if (runtime === "hermes")
|
|
438
|
+
results.push(await installHermes(options));
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
if (runtime === "claude")
|
|
442
|
+
results.push(await uninstallClaude(options));
|
|
443
|
+
if (runtime === "codex")
|
|
444
|
+
results.push(await uninstallCodex(options));
|
|
445
|
+
if (runtime === "hermes")
|
|
446
|
+
results.push(await uninstallHermes(options));
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
return results;
|
|
450
|
+
}
|
|
451
|
+
export function formatHostOperationResults(results, dryRun) {
|
|
452
|
+
const lines = [];
|
|
453
|
+
lines.push(dryRun ? "Oh My Second Brain host operation plan (dry-run)." : "Oh My Second Brain host operation complete.");
|
|
454
|
+
for (const result of results) {
|
|
455
|
+
lines.push(`- ${result.runtime} ${result.action}: ${result.skipped ? "skipped" : result.changed || dryRun ? "ok" : "no changes"}`);
|
|
456
|
+
for (const message of result.messages)
|
|
457
|
+
lines.push(` ${message}`);
|
|
458
|
+
for (const filePath of result.paths)
|
|
459
|
+
lines.push(` path: ${filePath}`);
|
|
460
|
+
for (const command of result.commands)
|
|
461
|
+
lines.push(` command: ${command}`);
|
|
462
|
+
}
|
|
463
|
+
return lines.join("\n");
|
|
464
|
+
}
|
|
465
|
+
//# sourceMappingURL=hosts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosts.js","sourceRoot":"","sources":["../../src/install/hosts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AA4BtE,MAAM,KAAK,GAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC3D,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;AACtD,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAClD,MAAM,oBAAoB,GACxB,6EAA6E,CAAC;AAChF,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AACrC,MAAM,qBAAqB,GAAG,sBAAsB,CAAC;AACrD,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEhC,SAAS,aAAa,CAAC,OAAe;IACpC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;QACvI,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;KACpC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,IAAI,aAAa,CAAC,QAAQ,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,aAAa,CAAC,OAAO,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,aAAa,CAAC,QAAQ,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,SAA2B;IACjE,IAAI,SAAS,KAAK,KAAK;QAAE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;IAC3C,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;QACxC,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,CAAC,SAAS,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,QAAQ,CAAC,OAA2B,EAAE,OAAe,EAAE,OAAe;IAC7E,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AAC/G,CAAC;AAED,SAAS,WAAW,CAAC,OAA6B;IAChD,OAAO,OAAO,CAAC,WAAW,IAAI,oBAAoB,CAAC;AACrD,CAAC;AAED,SAAS,OAAO,CAAC,OAA6B;IAC5C,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAY;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAY,CAAC;QACpE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,IAA6B,EAAE,MAAe;IACzF,IAAI,MAAM;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAY;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAY,CAAC;QACnE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,IAA6B,EAAE,MAAe;IACzF,IAAI,MAAM;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,OAA6B;IACnD,OAAO;QACL,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc;IACzC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO;IAChC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,oEAAoE,MAAM,EAAE,CAAC,CAAC;IAChG,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,MAAc,EAAE,MAAc,EAAE,MAAe;IAC7E,IAAI,MAAM;QAAE,OAAO,KAAK,CAAC;IACzB,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAA6B,EAAE,SAAiB;IAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,UAAU,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC;IAChC,OAAO,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAA6B,EAAE,SAAiB;IAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,eAAe,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5E,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,eAAe,CAAC;IACrC,OAAO,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,IAAc;IAClD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IACtF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACpC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,IAAI,MAAM,IAAI,GAAG,OAAO,WAAW,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,EAAE,CAAC;AACvG,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAA6B;IACxD,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG;QACf,yBAAyB,UAAU,EAAE;QACrC,6BAA6B,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;KAC1D,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,wEAAwE,CAAC,CAAC;IAC5F,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,+FAA+F,CAAC,CAAC;QACjH,CAAC;aAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,gBAAgB,GAA4B;gBAChD,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC;gBAC3C,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;aAClE,CAAC;YACF,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,gBAAgB,EAAE,CAAC;gBAClD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC1C,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,4BAA4B,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;gBACxG,OAAO,GAAG,OAAO,IAAI,MAAM,CAAC,EAAE,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC7D,OAAO,GAAG,OAAO,IAAI,UAAU,CAAC;IAEhC,OAAO;QACL,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;QACnC,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC;QACrD,QAAQ;QACR,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAA6B;IAC1D,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,CAAC,uBAAuB,EAAE,6BAA6B,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,CAAC,8HAA8H,CAAC,CAAC;IAClJ,IAAI,OAAO,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAExD,IAAI,OAAO,CAAC,eAAe,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1E,MAAM,gBAAgB,GAA4B;YAChD,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC;YAClC,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC;SACzC,CAAC;QACF,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,gBAAgB,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,4BAA4B,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YACxG,OAAO,GAAG,OAAO,IAAI,MAAM,CAAC,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;QACnC,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACzC,QAAQ;QACR,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,OAA6B;IACtD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO;QACL,mBAAmB;QACnB,qEAAqE;QACrE,2FAA2F;QAC3F,mBAAmB;QACnB,iBAAiB;QACjB,WAAW,IAAI,GAAG;QAClB,EAAE;QACF,uBAAuB;QACvB,6BAA6B;QAC7B,iBAAiB;QACjB,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,IAAI,KAAK,mBAAmB,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAe;IAC9C,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,OAAO,mBAAmB,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,aAAa,iBAAiB,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpL,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,cAAc,KAAK,OAAO,CAAC;IACjD,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,aAAa,GAAG,IAAI,CAAC;YACrB,CAAC,EAAE,CAAC;YACJ,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACrC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1C,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtC,CAAC,EAAE,CAAC;oBACJ,MAAM;gBACR,CAAC;gBACD,CAAC,EAAE,CAAC;YACN,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,CAAC;YAClD,aAAa,GAAG,IAAI,CAAC;YACrB,SAAS;QACX,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,aAAa,IAAI,aAAa,EAAE,CAAC;AAC7H,CAAC;AAED,KAAK,UAAU,2BAA2B,CAAC,QAAgB,EAAE,OAA6B;IACxF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;IAC1F,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvE,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEvD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACnC,MAAM,KAAK,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACnG,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAS;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACvD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAC/C,MAAM,IAAI,KAAK,CAAC,4CAA4C,kBAAkB,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACpG,CAAC;YACD,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAC3E,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,gBAAgB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtF,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,kBAAkB,OAAO,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,OAA6B;IACvD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,MAAM,QAAQ,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;IAC3D,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,OAAO,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;IACtE,IAAI,WAAW,GAAa,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QAC1D,WAAW,GAAG,MAAM,2BAA2B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,WAAW,GAAG;YACZ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,mBAAmB,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,kBAAkB,OAAO,CAAC;SAC5D,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM;QACxB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC;QACjD,QAAQ,EAAE,CAAC,qBAAqB,UAAU,EAAE,CAAC;QAC7C,QAAQ,EAAE,CAAC,gHAAgH,CAAC;KAC7H,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,OAA6B;IACzD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAClD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC1B,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChG,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC;QAChD,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,MAAM;gBAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IACD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACrD,KAAK,MAAM,KAAK,IAAI,MAAM,OAAO,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACvE,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACrE,OAAO,GAAG,IAAI,CAAC;gBACf,IAAI,CAAC,OAAO,CAAC,MAAM;oBAAE,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACrG,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;QACnC,OAAO,EAAE,CAAC,OAAO;QACjB,KAAK,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,kBAAkB,GAAG,CAAC,CAAC;QAC9F,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,CAAC,oHAAoH,CAAC;KACjI,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAA6B,EAAE,YAAoB;IAChF,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC/D,IAAI,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC;IAC9B,OAAO,eAAe,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAA6B,EAAE,YAAoB;IAChF,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAClE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC;IACjC,OAAO,eAAe,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAA6B;IACxD,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAC1E,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAClE,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACvE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,qBAAqB,EAAE,iBAAiB,CAAC,CAAC;IAC7F,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IAC9D,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,EAAE,CAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,MAAM,EAAE,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,gBAAgB,CAAC,YAAY,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;QAC3D,MAAM,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QACxD,MAAM,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO;QACL,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM;QACxB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC;QAC/C,QAAQ,EAAE,CAAC,sBAAsB,UAAU,EAAE,CAAC;QAC9C,QAAQ,EAAE,CAAC,kHAAkH,CAAC;KAC/H,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAA6B;IAC1D,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAC1E,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,qBAAqB,EAAE,iBAAiB,CAAC,CAAC;IAC7F,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAClE,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACvD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,GAAG,CAAC,MAAM,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,IAAI,OAAO,CAAC;IAC9F,KAAK,MAAM,MAAM,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,CAAC,EAAE,CAAC;QACrF,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,MAAM;gBAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IACD,OAAO;QACL,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;QACnC,OAAO,EAAE,CAAC,OAAO;QACjB,KAAK,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC;QAC/C,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,CAAC,6GAA6G,CAAC;KAC1H,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAA6B;IAClE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1D,MAAM,OAAO,GAA0B,EAAE,CAAC;IAC1C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,OAAO,KAAK,QAAQ;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;YACrE,IAAI,OAAO,KAAK,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;YACnE,IAAI,OAAO,KAAK,QAAQ;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QACvE,CAAC;aAAM,CAAC;YACN,IAAI,OAAO,KAAK,QAAQ;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;YACvE,IAAI,OAAO,KAAK,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;YACrE,IAAI,OAAO,KAAK,QAAQ;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,OAA8B,EAAE,MAAe;IACxF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mDAAmD,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC;IACzH,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;QACnI,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QAClE,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC;QACvE,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2
|
+
import { type Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
3
|
+
export declare const omsMcpTools: Tool[];
|
|
4
|
+
export interface OMSMcpServerOptions {
|
|
5
|
+
vault: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function createOMSMcpServer(opts: OMSMcpServerOptions): Server;
|
|
8
|
+
export declare function runMcpServer(opts: OMSMcpServerOptions): Promise<void>;
|