@numa-tech/numa 1.11.14 → 1.12.2
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/README.md +197 -25
- package/dist/ai-registry/client.d.ts +65 -0
- package/dist/ai-registry/client.js +260 -0
- package/dist/ai-registry/client.js.map +1 -0
- package/dist/ai-registry/commands.d.ts +2 -0
- package/dist/ai-registry/commands.js +438 -0
- package/dist/ai-registry/commands.js.map +1 -0
- package/dist/ai-registry/errors.d.ts +8 -0
- package/dist/ai-registry/errors.js +40 -0
- package/dist/ai-registry/errors.js.map +1 -0
- package/dist/ai-registry/mcp-installer.d.ts +37 -0
- package/dist/ai-registry/mcp-installer.js +273 -0
- package/dist/ai-registry/mcp-installer.js.map +1 -0
- package/dist/ai-registry/schemas.d.ts +86 -0
- package/dist/ai-registry/schemas.js +39 -0
- package/dist/ai-registry/schemas.js.map +1 -0
- package/dist/ai-registry/skill-installer.d.ts +21 -0
- package/dist/ai-registry/skill-installer.js +262 -0
- package/dist/ai-registry/skill-installer.js.map +1 -0
- package/dist/app-config.d.ts +4 -2
- package/dist/app-config.js +15 -3
- package/dist/app-config.js.map +1 -1
- package/dist/cli.js +40 -12
- package/dist/cli.js.map +1 -1
- package/dist/codex-module.d.ts +8 -0
- package/dist/codex-module.js +152 -0
- package/dist/codex-module.js.map +1 -0
- package/dist/command-catalog.js +170 -64
- package/dist/command-catalog.js.map +1 -1
- package/dist/config-page.js +17 -0
- package/dist/config-page.js.map +1 -1
- package/dist/config.d.ts +4 -1
- package/dist/config.js +26 -7
- package/dist/config.js.map +1 -1
- package/dist/media/commands.js +12 -11
- package/dist/media/commands.js.map +1 -1
- package/dist/oauth.d.ts +2 -30
- package/dist/oauth.js +1 -294
- package/dist/oauth.js.map +1 -1
- package/dist/pipeline/client.d.ts +126 -0
- package/dist/pipeline/client.js +105 -0
- package/dist/pipeline/client.js.map +1 -0
- package/dist/pipeline/commands.d.ts +17 -0
- package/dist/pipeline/commands.js +283 -0
- package/dist/pipeline/commands.js.map +1 -0
- package/dist/pipeline/errors.d.ts +8 -0
- package/dist/pipeline/errors.js +37 -0
- package/dist/pipeline/errors.js.map +1 -0
- package/dist/pipeline/schemas.d.ts +243 -0
- package/dist/pipeline/schemas.js +60 -0
- package/dist/pipeline/schemas.js.map +1 -0
- package/dist/platform-profile.d.ts +75 -0
- package/dist/platform-profile.js +169 -0
- package/dist/platform-profile.js.map +1 -0
- package/dist/types.d.ts +1 -40
- package/dist/web-console-page.d.ts +2 -2
- package/dist/web-console-page.js +21 -7
- package/dist/web-console-page.js.map +1 -1
- package/dist/web-console.d.ts +17 -3
- package/dist/web-console.js +70 -5
- package/dist/web-console.js.map +1 -1
- package/examples/claude-desktop-npx.json +1 -1
- package/examples/codex-npx.json +1 -1
- package/package.json +30 -14
- package/skills/numa-ai-registry/SKILL.md +47 -0
- package/skills/numa-ai-registry/evals/evals.json +35 -0
- package/skills/numa-ai-registry/references/command-contract.md +53 -0
- package/assets/codex-shortcut-icon.icns +0 -0
- package/assets/codex-shortcut-icon.ico +0 -0
- package/dist/chatgpt-console.d.ts +0 -53
- package/dist/chatgpt-console.js +0 -105
- package/dist/chatgpt-console.js.map +0 -1
- package/dist/codex-auth-agent.d.ts +0 -60
- package/dist/codex-auth-agent.js +0 -331
- package/dist/codex-auth-agent.js.map +0 -1
- package/dist/codex-commands.d.ts +0 -13
- package/dist/codex-commands.js +0 -571
- package/dist/codex-commands.js.map +0 -1
- package/dist/codex-legacy-cleanup.d.ts +0 -5
- package/dist/codex-legacy-cleanup.js +0 -77
- package/dist/codex-legacy-cleanup.js.map +0 -1
- package/dist/codex-process.d.ts +0 -13
- package/dist/codex-process.js +0 -193
- package/dist/codex-process.js.map +0 -1
- package/dist/codex-protocol.d.ts +0 -352
- package/dist/codex-protocol.js +0 -116
- package/dist/codex-protocol.js.map +0 -1
- package/dist/codex-quota-cache.d.ts +0 -20
- package/dist/codex-quota-cache.js +0 -82
- package/dist/codex-quota-cache.js.map +0 -1
- package/dist/codex-selection.d.ts +0 -18
- package/dist/codex-selection.js +0 -47
- package/dist/codex-selection.js.map +0 -1
- package/dist/codex-service-client.d.ts +0 -11
- package/dist/codex-service-client.js +0 -91
- package/dist/codex-service-client.js.map +0 -1
- package/dist/codex-shortcuts.d.ts +0 -43
- package/dist/codex-shortcuts.js +0 -429
- package/dist/codex-shortcuts.js.map +0 -1
- package/dist/codex-tui.d.ts +0 -15
- package/dist/codex-tui.js +0 -235
- package/dist/codex-tui.js.map +0 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { resolveNumaCodexRuntime } from "../codex-module.js";
|
|
2
|
+
export type McpAgentTarget = "chatgpt" | "codex" | "claude" | "cursor" | "workbuddy" | "openclaw" | "custom";
|
|
3
|
+
export interface McpInstallOptions {
|
|
4
|
+
agent: McpAgentTarget;
|
|
5
|
+
scope: "project" | "user";
|
|
6
|
+
workspace?: string;
|
|
7
|
+
customConfig?: string;
|
|
8
|
+
force?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export type McpClientDefinition = {
|
|
11
|
+
command: string;
|
|
12
|
+
args?: string[];
|
|
13
|
+
env?: Record<string, string>;
|
|
14
|
+
} | {
|
|
15
|
+
type: "http";
|
|
16
|
+
url: string;
|
|
17
|
+
headers?: Record<string, string>;
|
|
18
|
+
};
|
|
19
|
+
export interface McpInstallResult {
|
|
20
|
+
agent: McpAgentTarget;
|
|
21
|
+
name: string;
|
|
22
|
+
transport: "stdio" | "http";
|
|
23
|
+
configPath?: string;
|
|
24
|
+
backupPath?: string;
|
|
25
|
+
managedByCli?: boolean;
|
|
26
|
+
endpoint?: string;
|
|
27
|
+
manualSteps?: string[];
|
|
28
|
+
}
|
|
29
|
+
export interface McpInstallerDependencies {
|
|
30
|
+
resolveCodexRuntime?: typeof resolveNumaCodexRuntime;
|
|
31
|
+
runCommand?: (command: string, args: string[], label: string) => Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
export declare function mcpDefinitionFromNacos(detail: Record<string, unknown>): {
|
|
34
|
+
name: string;
|
|
35
|
+
definition: McpClientDefinition;
|
|
36
|
+
};
|
|
37
|
+
export declare function installMcpDefinition(detail: Record<string, unknown>, options: McpInstallOptions, dependencies?: McpInstallerDependencies): Promise<McpInstallResult>;
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { copyFile, lstat, mkdir } from "node:fs/promises";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
5
|
+
import { resolveNumaCodexRuntime } from "../codex-module.js";
|
|
6
|
+
import { readJsonIfExists, writePrivateJson } from "../private-file.js";
|
|
7
|
+
import { AiRegistryError, redactRegistryText } from "./errors.js";
|
|
8
|
+
export function mcpDefinitionFromNacos(detail) {
|
|
9
|
+
const name = stringValue(detail.name, "MCP name");
|
|
10
|
+
safeName(name);
|
|
11
|
+
const protocol = String(detail.protocol ?? "").toLowerCase();
|
|
12
|
+
if (protocol === "stdio") {
|
|
13
|
+
const local = objectValue(detail.localServerConfig, "localServerConfig");
|
|
14
|
+
const command = stringValue(local.command, "localServerConfig.command");
|
|
15
|
+
const args = stringArray(local.args, "localServerConfig.args", false);
|
|
16
|
+
const env = stringRecord(local.env, "localServerConfig.env", false);
|
|
17
|
+
assertNoLiteralSecrets(env, "environment");
|
|
18
|
+
return {
|
|
19
|
+
name,
|
|
20
|
+
definition: {
|
|
21
|
+
command,
|
|
22
|
+
...(args.length ? { args } : {}),
|
|
23
|
+
...(Object.keys(env).length ? { env } : {})
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (!["http", "https", "sse", "streamable", "streamable-http"].includes(protocol)) {
|
|
28
|
+
throw new AiRegistryError(`Unsupported Nacos MCP protocol: ${protocol || "missing"}.`, "ai_registry_mcp_unsupported");
|
|
29
|
+
}
|
|
30
|
+
const endpoints = Array.isArray(detail.frontendEndpoints) && detail.frontendEndpoints.length
|
|
31
|
+
? detail.frontendEndpoints
|
|
32
|
+
: detail.backendEndpoints;
|
|
33
|
+
if (!Array.isArray(endpoints) || endpoints.length === 0) {
|
|
34
|
+
throw new AiRegistryError("Nacos MCP detail has no installable endpoint.", "ai_registry_mcp_invalid");
|
|
35
|
+
}
|
|
36
|
+
const endpoint = objectValue(endpoints[0], "MCP endpoint");
|
|
37
|
+
const scheme = String(endpoint.protocol ?? (protocol === "https" ? "https" : "http")).toLowerCase();
|
|
38
|
+
if (scheme !== "http" && scheme !== "https") {
|
|
39
|
+
throw new AiRegistryError("MCP endpoint protocol must be HTTP or HTTPS.", "ai_registry_mcp_invalid");
|
|
40
|
+
}
|
|
41
|
+
const address = stringValue(endpoint.address, "MCP endpoint address");
|
|
42
|
+
if (!/^[A-Za-z0-9.-]+$/u.test(address)) {
|
|
43
|
+
throw new AiRegistryError("MCP endpoint address is invalid.", "ai_registry_mcp_invalid");
|
|
44
|
+
}
|
|
45
|
+
const port = Number(endpoint.port ?? (scheme === "https" ? 443 : 80));
|
|
46
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535) {
|
|
47
|
+
throw new AiRegistryError("MCP endpoint port is invalid.", "ai_registry_mcp_invalid");
|
|
48
|
+
}
|
|
49
|
+
const path = String(endpoint.path ?? "/");
|
|
50
|
+
if (!path.startsWith("/") || path.includes("\\") || /[\u0000-\u001f\u007f]/u.test(path)) {
|
|
51
|
+
throw new AiRegistryError("MCP endpoint path is invalid.", "ai_registry_mcp_invalid");
|
|
52
|
+
}
|
|
53
|
+
const url = new URL(`${scheme}://${address}:${port}${path}`).toString();
|
|
54
|
+
const headers = headersFromNacos(endpoint.headers);
|
|
55
|
+
assertNoLiteralSecrets(headers, "headers");
|
|
56
|
+
return {
|
|
57
|
+
name,
|
|
58
|
+
definition: { type: "http", url, ...(Object.keys(headers).length ? { headers } : {}) }
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export async function installMcpDefinition(detail, options, dependencies = {}) {
|
|
62
|
+
const { name, definition } = mcpDefinitionFromNacos(detail);
|
|
63
|
+
if (options.agent === "chatgpt")
|
|
64
|
+
return installChatGpt(name, definition);
|
|
65
|
+
if (options.agent === "codex")
|
|
66
|
+
return installCodex(name, definition, options, dependencies);
|
|
67
|
+
if (options.agent === "openclaw")
|
|
68
|
+
return installOpenClaw(name, definition);
|
|
69
|
+
const configPath = jsonConfigPath(options);
|
|
70
|
+
if (options.agent !== "custom") {
|
|
71
|
+
const base = options.scope === "user" ? homedir() : resolve(options.workspace ?? process.cwd());
|
|
72
|
+
await rejectSymlinkComponents(base, configPath);
|
|
73
|
+
}
|
|
74
|
+
await mkdir(dirname(configPath), { recursive: true, mode: 0o700 });
|
|
75
|
+
const file = await lstat(configPath).catch((error) => {
|
|
76
|
+
if (error.code === "ENOENT")
|
|
77
|
+
return undefined;
|
|
78
|
+
throw error;
|
|
79
|
+
});
|
|
80
|
+
if (file?.isSymbolicLink()) {
|
|
81
|
+
throw new AiRegistryError("Refusing to edit a symbolic-link MCP config.", "ai_registry_install_target_invalid");
|
|
82
|
+
}
|
|
83
|
+
const current = (await readJsonIfExists(configPath)) ?? {};
|
|
84
|
+
if (!current || typeof current !== "object" || Array.isArray(current)) {
|
|
85
|
+
throw new AiRegistryError("Existing MCP config must be a JSON object.", "ai_registry_mcp_config_invalid");
|
|
86
|
+
}
|
|
87
|
+
const currentObject = current;
|
|
88
|
+
const servers = currentObject.mcpServers == null
|
|
89
|
+
? {}
|
|
90
|
+
: objectValue(currentObject.mcpServers, "mcpServers");
|
|
91
|
+
if (Object.hasOwn(servers, name) && !options.force) {
|
|
92
|
+
throw new AiRegistryError(`MCP server ${name} already exists; pass --force to replace it.`, "ai_registry_install_exists");
|
|
93
|
+
}
|
|
94
|
+
let backupPath;
|
|
95
|
+
if (file) {
|
|
96
|
+
backupPath = `${configPath}.numa-backup-${new Date().toISOString().replace(/[:.]/gu, "-")}`;
|
|
97
|
+
await copyFile(configPath, backupPath);
|
|
98
|
+
}
|
|
99
|
+
await writePrivateJson(configPath, { ...currentObject, mcpServers: { ...servers, [name]: definition } });
|
|
100
|
+
return {
|
|
101
|
+
agent: options.agent,
|
|
102
|
+
name,
|
|
103
|
+
transport: "command" in definition ? "stdio" : "http",
|
|
104
|
+
configPath,
|
|
105
|
+
...(backupPath ? { backupPath } : {})
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function installChatGpt(name, definition) {
|
|
109
|
+
if ("command" in definition) {
|
|
110
|
+
throw new AiRegistryError("ChatGPT cannot connect directly to a local stdio MCP server; publish a remote HTTPS endpoint or use Secure MCP Tunnel.", "ai_registry_mcp_unsupported");
|
|
111
|
+
}
|
|
112
|
+
const endpoint = new URL(definition.url);
|
|
113
|
+
if (endpoint.protocol !== "https:") {
|
|
114
|
+
throw new AiRegistryError("ChatGPT MCP apps require a remotely reachable HTTPS endpoint.", "ai_registry_mcp_unsupported");
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
agent: "chatgpt",
|
|
118
|
+
name,
|
|
119
|
+
transport: "http",
|
|
120
|
+
managedByCli: false,
|
|
121
|
+
endpoint: endpoint.toString(),
|
|
122
|
+
manualSteps: [
|
|
123
|
+
"In ChatGPT, enable Developer mode for the workspace/user if permitted.",
|
|
124
|
+
"Open Settings or Workspace settings > Apps > Create.",
|
|
125
|
+
`Create ${name} with the endpoint shown in this result and configure its authentication in ChatGPT.`,
|
|
126
|
+
"Scan and review tools before enabling or publishing the app."
|
|
127
|
+
]
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function jsonConfigPath(options) {
|
|
131
|
+
if (options.agent === "custom") {
|
|
132
|
+
if (!options.customConfig) {
|
|
133
|
+
throw new AiRegistryError("--custom-config is required for agent=custom.", "ai_registry_install_target_invalid");
|
|
134
|
+
}
|
|
135
|
+
return resolve(options.customConfig);
|
|
136
|
+
}
|
|
137
|
+
const base = options.scope === "user" ? homedir() : resolve(options.workspace ?? process.cwd());
|
|
138
|
+
if (options.agent === "claude")
|
|
139
|
+
return options.scope === "user" ? join(base, ".claude.json") : join(base, ".mcp.json");
|
|
140
|
+
if (options.agent === "cursor")
|
|
141
|
+
return join(base, ".cursor", "mcp.json");
|
|
142
|
+
if (options.agent === "workbuddy")
|
|
143
|
+
return join(base, ".workbuddy", "mcp.json");
|
|
144
|
+
throw new AiRegistryError(`No JSON adapter for ${options.agent}.`, "ai_registry_install_target_invalid");
|
|
145
|
+
}
|
|
146
|
+
async function rejectSymlinkComponents(base, candidate) {
|
|
147
|
+
const relativePath = relative(resolve(base), resolve(candidate));
|
|
148
|
+
if (!relativePath || relativePath === ".." || relativePath.startsWith(`..${sep}`) || isAbsolute(relativePath)) {
|
|
149
|
+
throw new AiRegistryError("MCP target escapes the selected adapter root.", "ai_registry_install_target_invalid");
|
|
150
|
+
}
|
|
151
|
+
let current = resolve(base);
|
|
152
|
+
for (const component of relativePath.split(sep)) {
|
|
153
|
+
current = join(current, component);
|
|
154
|
+
const info = await lstat(current).catch((error) => {
|
|
155
|
+
if (error.code === "ENOENT")
|
|
156
|
+
return undefined;
|
|
157
|
+
throw error;
|
|
158
|
+
});
|
|
159
|
+
if (!info)
|
|
160
|
+
break;
|
|
161
|
+
if (info.isSymbolicLink()) {
|
|
162
|
+
throw new AiRegistryError("Refusing to follow a symbolic link in the MCP adapter path.", "ai_registry_install_target_invalid");
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async function installCodex(name, definition, options, dependencies) {
|
|
167
|
+
if (options.scope === "project") {
|
|
168
|
+
throw new AiRegistryError("Codex MCP registration is user-scoped; use --scope user.", "ai_registry_install_target_invalid");
|
|
169
|
+
}
|
|
170
|
+
if (options.force) {
|
|
171
|
+
throw new AiRegistryError("Codex CLI does not offer atomic replacement; remove the existing entry explicitly, then install without --force.", "ai_registry_non_atomic_replace");
|
|
172
|
+
}
|
|
173
|
+
const args = ["mcp", "add", name];
|
|
174
|
+
if ("command" in definition) {
|
|
175
|
+
for (const [key, value] of Object.entries(definition.env ?? {}))
|
|
176
|
+
args.push("--env", `${key}=${value}`);
|
|
177
|
+
args.push("--", definition.command, ...(definition.args ?? []));
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
if (definition.headers && Object.keys(definition.headers).length) {
|
|
181
|
+
throw new AiRegistryError("Codex adapter does not persist arbitrary HTTP headers; use OAuth or an environment-backed bearer token.", "ai_registry_mcp_unsupported");
|
|
182
|
+
}
|
|
183
|
+
args.push("--url", definition.url);
|
|
184
|
+
}
|
|
185
|
+
const launch = await (dependencies.resolveCodexRuntime ?? resolveNumaCodexRuntime)(args);
|
|
186
|
+
await (dependencies.runCommand ?? run)(launch.command, launch.args, "Codex MCP registration");
|
|
187
|
+
return { agent: "codex", name, transport: "command" in definition ? "stdio" : "http", managedByCli: true };
|
|
188
|
+
}
|
|
189
|
+
async function installOpenClaw(name, definition) {
|
|
190
|
+
const openClawDefinition = "command" in definition
|
|
191
|
+
? definition
|
|
192
|
+
: { url: definition.url, transport: "streamable-http", ...(definition.headers ? { headers: definition.headers } : {}) };
|
|
193
|
+
await run("openclaw", ["mcp", "set", name, JSON.stringify(openClawDefinition)], "OpenClaw MCP registration");
|
|
194
|
+
return { agent: "openclaw", name, transport: "command" in definition ? "stdio" : "http", managedByCli: true };
|
|
195
|
+
}
|
|
196
|
+
function run(command, args, label) {
|
|
197
|
+
return new Promise((resolvePromise, rejectPromise) => {
|
|
198
|
+
const child = spawn(command, args, { stdio: ["ignore", "pipe", "pipe"], env: process.env });
|
|
199
|
+
let stdout = "";
|
|
200
|
+
let stderr = "";
|
|
201
|
+
child.stdout.on("data", (chunk) => { if (stdout.length < 64_000)
|
|
202
|
+
stdout += chunk.toString("utf8"); });
|
|
203
|
+
child.stderr.on("data", (chunk) => { if (stderr.length < 64_000)
|
|
204
|
+
stderr += chunk.toString("utf8"); });
|
|
205
|
+
child.once("error", (error) => rejectPromise(new AiRegistryError(`${label} could not start: ${error.message}`, "ai_registry_mcp_cli_failed")));
|
|
206
|
+
child.once("exit", (code, signal) => {
|
|
207
|
+
if (code === 0 && !signal)
|
|
208
|
+
resolvePromise();
|
|
209
|
+
else
|
|
210
|
+
rejectPromise(new AiRegistryError(`${label} failed: ${redactRegistryText(stderr || stdout || `exit ${code ?? signal}`)}`, "ai_registry_mcp_cli_failed"));
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
function headersFromNacos(value) {
|
|
215
|
+
if (value == null)
|
|
216
|
+
return {};
|
|
217
|
+
if (!Array.isArray(value))
|
|
218
|
+
throw new AiRegistryError("MCP endpoint headers are invalid.", "ai_registry_mcp_invalid");
|
|
219
|
+
const headers = {};
|
|
220
|
+
for (const item of value) {
|
|
221
|
+
const input = objectValue(item, "MCP header");
|
|
222
|
+
const name = stringValue(input.name, "MCP header name");
|
|
223
|
+
const headerValue = stringValue(input.value ?? input.defaultValue, `MCP header ${name}`);
|
|
224
|
+
if (!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u.test(name)) {
|
|
225
|
+
throw new AiRegistryError("MCP header name is invalid.", "ai_registry_mcp_invalid");
|
|
226
|
+
}
|
|
227
|
+
headers[name] = headerValue;
|
|
228
|
+
}
|
|
229
|
+
return headers;
|
|
230
|
+
}
|
|
231
|
+
function assertNoLiteralSecrets(values, label) {
|
|
232
|
+
for (const [key, value] of Object.entries(values)) {
|
|
233
|
+
const sensitive = /(?:authorization|token|secret|password|api[_-]?key|credential)/iu.test(key);
|
|
234
|
+
if (sensitive && !/^\$\{[A-Z][A-Z0-9_]*\}$/u.test(value)) {
|
|
235
|
+
throw new AiRegistryError(`MCP ${label} contains a literal credential in ${key}; store an environment placeholder such as \${MCP_TOKEN} instead.`, "ai_registry_mcp_literal_secret");
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
function safeName(value) {
|
|
240
|
+
if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u.test(value)) {
|
|
241
|
+
throw new AiRegistryError("MCP name contains unsupported characters.", "ai_registry_mcp_invalid");
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
function objectValue(value, label) {
|
|
245
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
246
|
+
throw new AiRegistryError(`${label} must be an object.`, "ai_registry_mcp_invalid");
|
|
247
|
+
}
|
|
248
|
+
return value;
|
|
249
|
+
}
|
|
250
|
+
function stringValue(value, label) {
|
|
251
|
+
if (typeof value !== "string" || !value || value.length > 4096 || value.includes("\0")) {
|
|
252
|
+
throw new AiRegistryError(`${label} must be a non-empty string.`, "ai_registry_mcp_invalid");
|
|
253
|
+
}
|
|
254
|
+
return value;
|
|
255
|
+
}
|
|
256
|
+
function stringArray(value, label, required) {
|
|
257
|
+
if (value == null && !required)
|
|
258
|
+
return [];
|
|
259
|
+
if (!Array.isArray(value) || value.length > 64 || value.some((item) => typeof item !== "string" || item.length > 4096 || item.includes("\0"))) {
|
|
260
|
+
throw new AiRegistryError(`${label} must be a string array.`, "ai_registry_mcp_invalid");
|
|
261
|
+
}
|
|
262
|
+
return value;
|
|
263
|
+
}
|
|
264
|
+
function stringRecord(value, label, required) {
|
|
265
|
+
if (value == null && !required)
|
|
266
|
+
return {};
|
|
267
|
+
const object = objectValue(value, label);
|
|
268
|
+
if (Object.keys(object).length > 64 || Object.entries(object).some(([key, item]) => !/^[A-Za-z_][A-Za-z0-9_]*$/u.test(key) || typeof item !== "string" || item.length > 4096 || item.includes("\0"))) {
|
|
269
|
+
throw new AiRegistryError(`${label} must map environment names to strings.`, "ai_registry_mcp_invalid");
|
|
270
|
+
}
|
|
271
|
+
return object;
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=mcp-installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-installer.js","sourceRoot":"","sources":["../../src/ai-registry/mcp-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const RegistryInstanceSchema: z.ZodObject<{
|
|
3
|
+
id: z.ZodNumber;
|
|
4
|
+
code: z.ZodString;
|
|
5
|
+
displayName: z.ZodString;
|
|
6
|
+
providerType: z.ZodLiteral<"NACOS">;
|
|
7
|
+
baseUrl: z.ZodString;
|
|
8
|
+
authenticationType: z.ZodLiteral<"OIDC_CLIENT_CREDENTIALS">;
|
|
9
|
+
tokenUri: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
10
|
+
clientId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
11
|
+
scope: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
12
|
+
credentialConfigured: z.ZodBoolean;
|
|
13
|
+
description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
14
|
+
status: z.ZodEnum<{
|
|
15
|
+
ACTIVE: "ACTIVE";
|
|
16
|
+
DISABLED: "DISABLED";
|
|
17
|
+
}>;
|
|
18
|
+
version: z.ZodNumber;
|
|
19
|
+
}, z.core.$loose>;
|
|
20
|
+
export declare const RegistryNamespaceSchema: z.ZodObject<{
|
|
21
|
+
id: z.ZodNumber;
|
|
22
|
+
instanceId: z.ZodNumber;
|
|
23
|
+
instanceCode: z.ZodString;
|
|
24
|
+
instanceDisplayName: z.ZodString;
|
|
25
|
+
instanceStatus: z.ZodEnum<{
|
|
26
|
+
ACTIVE: "ACTIVE";
|
|
27
|
+
DISABLED: "DISABLED";
|
|
28
|
+
}>;
|
|
29
|
+
namespaceKey: z.ZodString;
|
|
30
|
+
namespaceId: z.ZodString;
|
|
31
|
+
displayName: z.ZodString;
|
|
32
|
+
description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
33
|
+
isDefault: z.ZodBoolean;
|
|
34
|
+
status: z.ZodEnum<{
|
|
35
|
+
ACTIVE: "ACTIVE";
|
|
36
|
+
DISABLED: "DISABLED";
|
|
37
|
+
}>;
|
|
38
|
+
version: z.ZodNumber;
|
|
39
|
+
}, z.core.$loose>;
|
|
40
|
+
export declare const RegistryInstancesSchema: z.ZodArray<z.ZodObject<{
|
|
41
|
+
id: z.ZodNumber;
|
|
42
|
+
code: z.ZodString;
|
|
43
|
+
displayName: z.ZodString;
|
|
44
|
+
providerType: z.ZodLiteral<"NACOS">;
|
|
45
|
+
baseUrl: z.ZodString;
|
|
46
|
+
authenticationType: z.ZodLiteral<"OIDC_CLIENT_CREDENTIALS">;
|
|
47
|
+
tokenUri: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
48
|
+
clientId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
49
|
+
scope: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
50
|
+
credentialConfigured: z.ZodBoolean;
|
|
51
|
+
description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
52
|
+
status: z.ZodEnum<{
|
|
53
|
+
ACTIVE: "ACTIVE";
|
|
54
|
+
DISABLED: "DISABLED";
|
|
55
|
+
}>;
|
|
56
|
+
version: z.ZodNumber;
|
|
57
|
+
}, z.core.$loose>>;
|
|
58
|
+
export declare const RegistryNamespacesSchema: z.ZodArray<z.ZodObject<{
|
|
59
|
+
id: z.ZodNumber;
|
|
60
|
+
instanceId: z.ZodNumber;
|
|
61
|
+
instanceCode: z.ZodString;
|
|
62
|
+
instanceDisplayName: z.ZodString;
|
|
63
|
+
instanceStatus: z.ZodEnum<{
|
|
64
|
+
ACTIVE: "ACTIVE";
|
|
65
|
+
DISABLED: "DISABLED";
|
|
66
|
+
}>;
|
|
67
|
+
namespaceKey: z.ZodString;
|
|
68
|
+
namespaceId: z.ZodString;
|
|
69
|
+
displayName: z.ZodString;
|
|
70
|
+
description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
71
|
+
isDefault: z.ZodBoolean;
|
|
72
|
+
status: z.ZodEnum<{
|
|
73
|
+
ACTIVE: "ACTIVE";
|
|
74
|
+
DISABLED: "DISABLED";
|
|
75
|
+
}>;
|
|
76
|
+
version: z.ZodNumber;
|
|
77
|
+
}, z.core.$loose>>;
|
|
78
|
+
export declare const JsonObjectSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
79
|
+
export declare const ApiErrorSchema: z.ZodObject<{
|
|
80
|
+
code: z.ZodOptional<z.ZodString>;
|
|
81
|
+
message: z.ZodOptional<z.ZodString>;
|
|
82
|
+
requestId: z.ZodOptional<z.ZodString>;
|
|
83
|
+
}, z.core.$loose>;
|
|
84
|
+
export type RegistryInstance = z.infer<typeof RegistryInstanceSchema>;
|
|
85
|
+
export type RegistryNamespace = z.infer<typeof RegistryNamespaceSchema>;
|
|
86
|
+
export type JsonObject = z.infer<typeof JsonObjectSchema>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const RegistryInstanceSchema = z.object({
|
|
3
|
+
id: z.number().int().positive(),
|
|
4
|
+
code: z.string().min(1),
|
|
5
|
+
displayName: z.string().min(1),
|
|
6
|
+
providerType: z.literal("NACOS"),
|
|
7
|
+
baseUrl: z.string().url(),
|
|
8
|
+
authenticationType: z.literal("OIDC_CLIENT_CREDENTIALS"),
|
|
9
|
+
tokenUri: z.string().url().nullish(),
|
|
10
|
+
clientId: z.string().min(1).nullish(),
|
|
11
|
+
scope: z.string().nullish(),
|
|
12
|
+
credentialConfigured: z.boolean(),
|
|
13
|
+
description: z.string().nullish(),
|
|
14
|
+
status: z.enum(["ACTIVE", "DISABLED"]),
|
|
15
|
+
version: z.number().int().nonnegative()
|
|
16
|
+
}).passthrough();
|
|
17
|
+
export const RegistryNamespaceSchema = z.object({
|
|
18
|
+
id: z.number().int().positive(),
|
|
19
|
+
instanceId: z.number().int().positive(),
|
|
20
|
+
instanceCode: z.string().min(1),
|
|
21
|
+
instanceDisplayName: z.string().min(1),
|
|
22
|
+
instanceStatus: z.enum(["ACTIVE", "DISABLED"]),
|
|
23
|
+
namespaceKey: z.string().min(1),
|
|
24
|
+
namespaceId: z.string().min(1),
|
|
25
|
+
displayName: z.string().min(1),
|
|
26
|
+
description: z.string().nullish(),
|
|
27
|
+
isDefault: z.boolean(),
|
|
28
|
+
status: z.enum(["ACTIVE", "DISABLED"]),
|
|
29
|
+
version: z.number().int().nonnegative()
|
|
30
|
+
}).passthrough();
|
|
31
|
+
export const RegistryInstancesSchema = z.array(RegistryInstanceSchema);
|
|
32
|
+
export const RegistryNamespacesSchema = z.array(RegistryNamespaceSchema);
|
|
33
|
+
export const JsonObjectSchema = z.record(z.string(), z.unknown());
|
|
34
|
+
export const ApiErrorSchema = z.object({
|
|
35
|
+
code: z.string().optional(),
|
|
36
|
+
message: z.string().optional(),
|
|
37
|
+
requestId: z.string().optional()
|
|
38
|
+
}).passthrough();
|
|
39
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/ai-registry/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type SkillAgentTarget = "chatgpt" | "codex" | "claude" | "cursor" | "workbuddy" | "openclaw" | "agents" | "custom";
|
|
2
|
+
export type InstallScope = "project" | "user";
|
|
3
|
+
export interface SkillInstallOptions {
|
|
4
|
+
agent: SkillAgentTarget;
|
|
5
|
+
scope: InstallScope;
|
|
6
|
+
skillName: string;
|
|
7
|
+
workspace?: string;
|
|
8
|
+
customRoot?: string;
|
|
9
|
+
force?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface SkillInstallResult {
|
|
12
|
+
agent: SkillAgentTarget;
|
|
13
|
+
scope: InstallScope;
|
|
14
|
+
skillName: string;
|
|
15
|
+
installedPath: string;
|
|
16
|
+
backupPath?: string;
|
|
17
|
+
files: number;
|
|
18
|
+
expandedBytes: number;
|
|
19
|
+
}
|
|
20
|
+
export declare function skillTargetRoot(options: Pick<SkillInstallOptions, "agent" | "scope" | "workspace" | "customRoot">): string;
|
|
21
|
+
export declare function installSkillArchive(archive: Buffer, options: SkillInstallOptions): Promise<SkillInstallResult>;
|