@husar.ai/cli 0.2.14 → 0.3.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/MCP_SERVER.md +11 -20
- package/dist/cli.js +5 -1
- package/dist/cli.js.map +1 -1
- package/dist/functions/parser.d.ts +11 -6
- package/dist/functions/parser.js +14 -22
- package/dist/functions/parser.js.map +1 -1
- package/dist/mcp.d.ts +1 -0
- package/dist/mcp.js +63 -94
- package/dist/mcp.js.map +1 -1
- package/dist/types/config.d.ts +7 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/zeus/const.js +996 -403
- package/dist/zeus/const.js.map +1 -1
- package/dist/zeus/index.d.ts +4391 -1732
- package/dist/zeus/index.js +44 -11
- package/dist/zeus/index.js.map +1 -1
- package/package.json +2 -2
- package/src/cli.ts +6 -11
- package/src/functions/generate.ts +0 -1
- package/src/functions/parser.ts +28 -25
- package/src/mcp.ts +83 -106
- package/src/types/config.ts +7 -0
- package/src/zeus/const.ts +1026 -403
- package/src/zeus/index.ts +4275 -1756
- package/dist/scripts/mcp-generate-test.d.ts +0 -1
- package/dist/scripts/mcp-generate-test.js +0 -28
- package/dist/scripts/mcp-generate-test.js.map +0 -1
- package/src/scripts/mcp-generate-test.ts +0 -34
package/MCP_SERVER.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# MCP Server Setup (Cursor + Codex)
|
|
2
2
|
|
|
3
|
-
This guide shows how to register the Husar MCP server so your AI tools can call the CLI commands
|
|
3
|
+
This guide shows how to register the Husar MCP server so your AI tools can call the CLI commands
|
|
4
4
|
|
|
5
5
|
The MCP server is built into the CLI. Run it as `husar.ai mcp`.
|
|
6
6
|
|
|
@@ -10,7 +10,7 @@ The MCP server is built into the CLI. Run it as `husar.ai mcp`.
|
|
|
10
10
|
- Ensure your workspace (project root) contains `husar.json` with:
|
|
11
11
|
- `host`: Husar CMS base URL
|
|
12
12
|
- `adminToken`: Husar admin token (required for copy/upsert)
|
|
13
|
-
- Use
|
|
13
|
+
- Use `@husar.ai/cli generate` or edit `husar.json` directly to set these.
|
|
14
14
|
|
|
15
15
|
No environment variables are required. MCP reads config like the CLI and auto-detects the workspace root.
|
|
16
16
|
|
|
@@ -22,8 +22,8 @@ Create or edit `~/.cursor/mcp.json` and add the Husar server entry.
|
|
|
22
22
|
{
|
|
23
23
|
"mcpServers": {
|
|
24
24
|
"husar": {
|
|
25
|
-
"command": "
|
|
26
|
-
"args": ["mcp"]
|
|
25
|
+
"command": "npx",
|
|
26
|
+
"args": ["-y", "@husar.ai/cli", "mcp"]
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -40,7 +40,7 @@ Create or edit `~/.config/codex/config.toml` and add a server entry.
|
|
|
40
40
|
```toml
|
|
41
41
|
[mcp_servers.husar]
|
|
42
42
|
command = "husar.ai"
|
|
43
|
-
args = ["mcp"]
|
|
43
|
+
args = ["-y", "@husar.ai/cli", "mcp"]
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
Notes:
|
|
@@ -49,28 +49,20 @@ Notes:
|
|
|
49
49
|
|
|
50
50
|
## Available Tools
|
|
51
51
|
|
|
52
|
-
- `
|
|
52
|
+
- `husar_copy`:
|
|
53
53
|
- Purpose: Parse a CMS file into a shape or model and upsert via CLI.
|
|
54
54
|
- Inputs:
|
|
55
|
-
- `path`: Absolute path or path relative to the
|
|
55
|
+
- `path`: Absolute path or path relative to the workspace root.
|
|
56
56
|
- `type`: Optional, `"model" | "shape"` (default `"shape"`).
|
|
57
57
|
- `name`: Optional string; if omitted, derived from filename (lowercased).
|
|
58
|
+
- `workspaceRoot`: Optional string; Target folder for where husar.json is located. Needed when run in monorepo where husar.json is located in child repo
|
|
58
59
|
- Output: JSON stringified status or error details.
|
|
59
|
-
- Notes: This maps to the `husar_copy` implementation; kept for compatibility.
|
|
60
|
-
|
|
61
|
-
- `husar_copy`:
|
|
62
|
-
- Purpose: Same as `cms_parse_file` (alias of the CLI `copy` command).
|
|
63
|
-
- Inputs: Same as `cms_parse_file`.
|
|
64
|
-
- Auth: Reads `host` and `adminToken` from `husar.json` at the workspace root (same as CLI).
|
|
65
|
-
- Example arguments:
|
|
66
|
-
- `path`: `packages/playground/src/pages/examples/ContactForm.tsx`
|
|
67
|
-
- `type`: `shape`
|
|
68
|
-
- `name`: `examples_contactform`
|
|
69
60
|
|
|
70
61
|
- `husar_generate`:
|
|
71
62
|
- Purpose: Generate CMS scaffolding (Zeus client, host helpers, SSR + React helpers) into `cms/`.
|
|
72
63
|
- Inputs:
|
|
73
|
-
- `folderPath`: Optional target directory relative to the
|
|
64
|
+
- `folderPath`: Optional target directory relative to the workspace root (defaults to `"."`). The `cms/` folder is created/rewritten inside this path.
|
|
65
|
+
- `workspaceRoot`: Optional string; Target folder for where husar.json is located. Needed when run in monorepo where husar.json is located in child repo
|
|
74
66
|
- Host config: Uses `host` from `husar.json` at the workspace root.
|
|
75
67
|
- Output: JSON with `{ "status": "ok", "folder": "<ABS_PATH_TO_cms>" }` or error details.
|
|
76
68
|
- Files written:
|
|
@@ -80,5 +72,4 @@ Notes:
|
|
|
80
72
|
## Troubleshooting
|
|
81
73
|
|
|
82
74
|
- CLI not found: Ensure `@husar.ai/cli` is installed globally or that `husar.ai` is on PATH.
|
|
83
|
-
- Config errors: Make sure `husar.json` at your workspace root contains `host` and `adminToken
|
|
84
|
-
- Workspace detection: The server walks up from its current working directory to find a `package.json` with `workspaces`. Launch it from within your project.
|
|
75
|
+
- Config errors: Make sure `husar.json` at your workspace root contains `host` and `adminToken` for admin actions.
|
package/dist/cli.js
CHANGED
|
@@ -34,7 +34,11 @@ program
|
|
|
34
34
|
if (!conf.adminToken) {
|
|
35
35
|
throw new Error('Admin token is not configured. Please set it in the config or use environment variable.');
|
|
36
36
|
}
|
|
37
|
-
const result = await parser(
|
|
37
|
+
const result = await parser({
|
|
38
|
+
inputFile,
|
|
39
|
+
opts: { name, type: opts?.type },
|
|
40
|
+
authentication: { HUSAR_MCP_HOST: conf.host, HUSAR_MCP_ADMIN_TOKEN: conf.adminToken },
|
|
41
|
+
});
|
|
38
42
|
console.log(result ? 'File parsed and upserted successfully.' : 'Failed to parse and upsert file.');
|
|
39
43
|
});
|
|
40
44
|
program
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,MAAM,MAAM,GAAG,IAAI,WAAW,CAAkB,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AAE3E,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAExF,OAAO;KACJ,OAAO,CAAC,uBAAuB,CAAC;KAChC,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,KAAK,EAAE,aAAqB,GAAG,EAAE,EAAE;IACzC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC;IAC7C,MAAM,iBAAiB,GAAG,IAAI,CAAC,iCAAiC,CAAC;IACjE,MAAM,WAAW,CAAC;QAChB,UAAU,EAAE,UAAU;QACtB,IAAI;QACJ,uBAAuB,EAAE,OAAO;QAChC,iCAAiC,EAAE,iBAAiB;KACrD,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,yBAAyB,CAAC;KAClC,WAAW,CAAC,iEAAiE,CAAC;KAC9E,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,EAAE,OAAO,CAAC;KAChE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;IAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC;IAC7G,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;QAC1B,SAAS;QACT,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;QAChC,cAAc,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,CAAC,UAAU,EAAE;KACtF,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC;AACtG,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,cAAc,EAAE,CAAC;IAGvB,MAAM,IAAI,OAAO,CAAO,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
export declare const parser: (inputFile
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
export declare const parser: ({ authentication, inputFile, opts, workspaceRoot, }: {
|
|
2
|
+
inputFile: string;
|
|
3
|
+
workspaceRoot?: string;
|
|
4
|
+
opts: {
|
|
5
|
+
name: string;
|
|
6
|
+
type: "model" | "shape";
|
|
7
|
+
};
|
|
8
|
+
authentication: {
|
|
9
|
+
HUSAR_MCP_HOST: string;
|
|
10
|
+
HUSAR_MCP_ADMIN_TOKEN: string;
|
|
11
|
+
};
|
|
7
12
|
}) => Promise<boolean>;
|
package/dist/functions/parser.js
CHANGED
|
@@ -1,31 +1,23 @@
|
|
|
1
1
|
import * as path from 'node:path';
|
|
2
2
|
import * as fs from 'node:fs/promises';
|
|
3
|
-
export const parser = async (inputFile, opts,
|
|
3
|
+
export const parser = async ({ authentication, inputFile, opts, workspaceRoot, }) => {
|
|
4
4
|
const { HUSAR_MCP_ADMIN_TOKEN, HUSAR_MCP_HOST } = authentication;
|
|
5
5
|
const filename = path.basename(inputFile);
|
|
6
|
-
const body = await fs.readFile(path.resolve(process.cwd(), inputFile), 'utf8');
|
|
6
|
+
const body = await fs.readFile(path.resolve(process.cwd(), ...(workspaceRoot ? [workspaceRoot] : []), inputFile), 'utf8');
|
|
7
7
|
const key = `${opts.name}-${filename}-${new Date().getTime()}.txt`;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
putURL = result?.data?.admin?.uploadFile?.putURL;
|
|
20
|
-
fileURL = result?.data?.admin?.uploadFile?.cdnURL;
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
console.log('Failed to get upload URL');
|
|
24
|
-
throw new Error('Failed to get upload URL');
|
|
25
|
-
}
|
|
8
|
+
const put = await fetch(new URL('api/graphql', HUSAR_MCP_HOST).toString(), {
|
|
9
|
+
method: 'POST',
|
|
10
|
+
headers: { 'Content-Type': 'application/json', husar_token: HUSAR_MCP_ADMIN_TOKEN },
|
|
11
|
+
body: JSON.stringify({
|
|
12
|
+
query: `mutation GetUploadURL($input: UploadFileInput!) { admin { uploadFile(file: $input) { putURL cdnURL } } }`,
|
|
13
|
+
variables: { input: { prefix: 'parse', key } },
|
|
14
|
+
}),
|
|
15
|
+
});
|
|
16
|
+
const result = await put.json();
|
|
17
|
+
const putURL = result?.data?.admin?.uploadFile?.putURL;
|
|
18
|
+
const fileURL = result?.data?.admin?.uploadFile?.cdnURL;
|
|
26
19
|
if (!putURL) {
|
|
27
|
-
|
|
28
|
-
throw new Error('Failed to get upload URL');
|
|
20
|
+
throw new Error(`Failed to get upload URL ${JSON.stringify(result, null, 2)} ,`);
|
|
29
21
|
}
|
|
30
22
|
try {
|
|
31
23
|
await fetch(putURL, { method: 'PUT', headers: { 'Content-Type': 'text/plain', 'x-amz-acl': 'public-read' }, body });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/functions/parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEvC,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/functions/parser.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp.d.ts
CHANGED
package/dist/mcp.js
CHANGED
|
@@ -1,69 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
3
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
|
-
import * as fs from 'node:fs/promises';
|
|
5
|
-
import * as path from 'node:path';
|
|
6
4
|
import { z } from 'zod';
|
|
7
5
|
import { ConfigMaker } from 'config-maker';
|
|
8
|
-
import {
|
|
6
|
+
import { parser } from './functions/parser.js';
|
|
7
|
+
import { generateCms } from './functions/generate.js';
|
|
8
|
+
import path from 'path';
|
|
9
9
|
const server = new McpServer({ name: 'mcp-husar', version: '1.0.0' });
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const envRoot = process.env.WORKSPACE_ROOT;
|
|
13
|
-
if (envRoot)
|
|
14
|
-
return envRoot;
|
|
15
|
-
let cur = process.cwd();
|
|
16
|
-
for (let i = 0; i < 10; i++) {
|
|
17
|
-
try {
|
|
18
|
-
const pkgPath = path.join(cur, 'package.json');
|
|
19
|
-
const st = await fs.stat(pkgPath);
|
|
20
|
-
if (st.isFile()) {
|
|
21
|
-
const txt = await fs.readFile(pkgPath, 'utf8');
|
|
22
|
-
const pkg = JSON.parse(txt);
|
|
23
|
-
if (pkg && Object.prototype.hasOwnProperty.call(pkg, 'workspaces'))
|
|
24
|
-
return cur;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
}
|
|
29
|
-
const parent = path.dirname(cur);
|
|
30
|
-
if (parent === cur)
|
|
31
|
-
break;
|
|
32
|
-
cur = parent;
|
|
33
|
-
}
|
|
34
|
-
return process.cwd();
|
|
35
|
-
};
|
|
36
|
-
const resolveWorkspacePath = async (p) => {
|
|
37
|
-
if (path.isAbsolute(p))
|
|
38
|
-
return p;
|
|
39
|
-
const root = await getWorkspaceRoot();
|
|
40
|
-
return path.resolve(root, p);
|
|
41
|
-
};
|
|
42
|
-
const getConfig = async () => {
|
|
43
|
-
if (config)
|
|
44
|
-
return config;
|
|
45
|
-
const root = await getWorkspaceRoot();
|
|
46
|
-
config = new ConfigMaker('husar', {
|
|
10
|
+
const getConfig = async (pathToProject) => {
|
|
11
|
+
return new ConfigMaker('husar', {
|
|
47
12
|
decoders: {},
|
|
48
|
-
pathToProject
|
|
13
|
+
pathToProject,
|
|
49
14
|
});
|
|
50
|
-
return config;
|
|
51
|
-
};
|
|
52
|
-
const getAuth = async () => {
|
|
53
|
-
const envHost = process.env.HUSAR_MCP_HOST;
|
|
54
|
-
const envToken = process.env.HUSAR_MCP_ADMIN_TOKEN;
|
|
55
|
-
if (envHost && envToken)
|
|
56
|
-
return { host: envHost, adminToken: envToken };
|
|
57
|
-
try {
|
|
58
|
-
const cfg = await getConfig();
|
|
59
|
-
const { host, adminToken } = cfg.get();
|
|
60
|
-
if (host && adminToken)
|
|
61
|
-
return { host, adminToken };
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
}
|
|
65
|
-
throw new Error('Missing HUSAR_MCP_HOST and/or HUSAR_MCP_ADMIN_TOKEN. Provide via env or husar.json in workspace root. ' +
|
|
66
|
-
(await getWorkspaceRoot()));
|
|
67
15
|
};
|
|
68
16
|
const cmsParseFileInputFields = {
|
|
69
17
|
path: z
|
|
@@ -79,6 +27,10 @@ const cmsParseFileInputFields = {
|
|
|
79
27
|
.string()
|
|
80
28
|
.optional()
|
|
81
29
|
.describe('Optional CMS name. Must not contain dashes (-). Prefer lowercase with underscores (e.g., examples_contactform). Defaults to the filename (lowercased).'),
|
|
30
|
+
workspaceRoot: z
|
|
31
|
+
.string()
|
|
32
|
+
.optional()
|
|
33
|
+
.describe('Target folder for where husar.json is located. Needed when run in monorepo where husar.json is located in child repo'),
|
|
82
34
|
};
|
|
83
35
|
const cmsParseFileInputSchema = z.object(cmsParseFileInputFields);
|
|
84
36
|
const withTimeout = async (promise, ms) => {
|
|
@@ -123,35 +75,30 @@ const redirectConsoleToStderr = () => {
|
|
|
123
75
|
console.dir = original.dir;
|
|
124
76
|
};
|
|
125
77
|
};
|
|
126
|
-
const runCli = async (args, workspaceCwd) => {
|
|
127
|
-
const npxBin = process.platform === 'win32' ? 'npx.cmd' : 'npx';
|
|
128
|
-
return await new Promise((resolve) => {
|
|
129
|
-
const child = spawn(npxBin, ['-y', '@husar.ai/cli', ...args], {
|
|
130
|
-
cwd: workspaceCwd,
|
|
131
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
132
|
-
env: { ...process.env },
|
|
133
|
-
shell: false,
|
|
134
|
-
});
|
|
135
|
-
let stdout = '';
|
|
136
|
-
let stderr = '';
|
|
137
|
-
child.stdout.on('data', (d) => (stdout += String(d)));
|
|
138
|
-
child.stderr.on('data', (d) => (stderr += String(d)));
|
|
139
|
-
child.on('close', (code) => resolve({ code: code ?? 1, stdout, stderr }));
|
|
140
|
-
});
|
|
141
|
-
};
|
|
142
78
|
const createCmsParseFileHandler = ({ timeoutMs = 30_000 }) => {
|
|
143
|
-
return async ({ path: file, type, name: passed }) => {
|
|
79
|
+
return async ({ path: file, type, name: passed, workspaceRoot }) => {
|
|
144
80
|
const restoreConsole = redirectConsoleToStderr();
|
|
145
81
|
try {
|
|
146
|
-
await
|
|
147
|
-
const
|
|
148
|
-
const
|
|
149
|
-
const name = (passed ?? (
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
throw new Error(`CLI exited with code ${res.code}.\nSTDOUT:\n${res.stdout}\nSTDERR:\n${res.stderr}`);
|
|
82
|
+
const cfg = await getConfig(workspaceRoot);
|
|
83
|
+
const raw = cfg.get();
|
|
84
|
+
const inputFile = stripWorkspaceRoot(file, workspaceRoot);
|
|
85
|
+
const name = (passed ?? (inputFile.replace(/^.*\/(.*?)(\.[^.]+)?$/, '$1') || 'untitled')).toLowerCase();
|
|
86
|
+
if (!raw.host) {
|
|
87
|
+
throw new Error('Please implement host in husar.json');
|
|
153
88
|
}
|
|
154
|
-
|
|
89
|
+
if (!raw.adminToken) {
|
|
90
|
+
throw new Error('Please implement adminToken in husar.json');
|
|
91
|
+
}
|
|
92
|
+
const result = await withTimeout(parser({
|
|
93
|
+
inputFile,
|
|
94
|
+
workspaceRoot,
|
|
95
|
+
opts: { type: (type ?? 'shape'), name },
|
|
96
|
+
authentication: {
|
|
97
|
+
HUSAR_MCP_HOST: raw.host,
|
|
98
|
+
HUSAR_MCP_ADMIN_TOKEN: raw.adminToken,
|
|
99
|
+
},
|
|
100
|
+
}), timeoutMs);
|
|
101
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
155
102
|
}
|
|
156
103
|
catch (err) {
|
|
157
104
|
const message = err instanceof Error ? err.message : String(err);
|
|
@@ -168,28 +115,35 @@ const createCmsParseFileHandler = ({ timeoutMs = 30_000 }) => {
|
|
|
168
115
|
};
|
|
169
116
|
};
|
|
170
117
|
export const startMcpServer = async () => {
|
|
171
|
-
server.tool('cms_parse_file', 'Parse a CMS file into a shape or model', cmsParseFileInputFields, createCmsParseFileHandler({ timeoutMs: Number(process.env.MCP_PARSER_TIMEOUT_MS || 30000) }));
|
|
172
118
|
server.tool('husar_copy', 'Copy: parse HTML/JSX and upsert into CMS (model/shape)', cmsParseFileInputFields, createCmsParseFileHandler({ timeoutMs: Number(process.env.MCP_PARSER_TIMEOUT_MS || 30000) }));
|
|
173
119
|
const husarGenerateInput = {
|
|
174
120
|
folderPath: z
|
|
175
121
|
.string()
|
|
176
122
|
.optional()
|
|
177
123
|
.describe('Target folder for cms scaffolding. Relative to workspace root; defaults to ".".'),
|
|
124
|
+
workspaceRoot: z
|
|
125
|
+
.string()
|
|
126
|
+
.optional()
|
|
127
|
+
.describe('Target folder for where husar.json is located. Needed when run in monorepo where husar.json is located in child repo'),
|
|
178
128
|
};
|
|
179
129
|
const husarGenerateSchema = z.object(husarGenerateInput);
|
|
180
130
|
server.tool('husar_generate', 'Generate cms structure in the given path', husarGenerateInput, (async (args) => {
|
|
181
131
|
try {
|
|
182
|
-
const { folderPath } = husarGenerateSchema.parse(args ?? {});
|
|
183
|
-
const
|
|
184
|
-
|
|
185
|
-
const
|
|
186
|
-
if (
|
|
187
|
-
|
|
188
|
-
const res = await runCli(argsList, root);
|
|
189
|
-
if (res.code !== 0) {
|
|
190
|
-
throw new Error(`CLI exited with code ${res.code}.\nSTDOUT:\n${res.stdout}\nSTDERR:\n${res.stderr}`);
|
|
132
|
+
const { folderPath = './src', workspaceRoot } = husarGenerateSchema.parse(args ?? {});
|
|
133
|
+
const cfg = await getConfig(workspaceRoot);
|
|
134
|
+
const raw = cfg.get();
|
|
135
|
+
const host = raw.host;
|
|
136
|
+
if (!host) {
|
|
137
|
+
throw new Error('Missing host. Provide via husar.json (host) or HUSAR_MCP_HOST/HUSAR_HOST env.');
|
|
191
138
|
}
|
|
192
|
-
|
|
139
|
+
const base = workspaceRoot ? path.join(workspaceRoot, folderPath) : folderPath;
|
|
140
|
+
const cmsPath = await generateCms({
|
|
141
|
+
baseFolder: base,
|
|
142
|
+
host,
|
|
143
|
+
hostEnvironmentVariable: raw.hostEnvironmentVariable,
|
|
144
|
+
authenticationEnvironmentVariable: raw.authenticationEnvironmentVariable,
|
|
145
|
+
});
|
|
146
|
+
return { content: [{ type: 'text', text: JSON.stringify({ status: 'ok', folder: cmsPath }, null, 2) }] };
|
|
193
147
|
}
|
|
194
148
|
catch (err) {
|
|
195
149
|
const message = err instanceof Error ? err.message : String(err);
|
|
@@ -225,4 +179,19 @@ export const startMcpServer = async () => {
|
|
|
225
179
|
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
226
180
|
void startMcpServer();
|
|
227
181
|
}
|
|
182
|
+
export function stripWorkspaceRoot(filePath, workspaceRoot) {
|
|
183
|
+
if (!workspaceRoot)
|
|
184
|
+
return filePath;
|
|
185
|
+
const rootAbs = path.resolve(workspaceRoot);
|
|
186
|
+
const fileAbs = path.resolve(filePath);
|
|
187
|
+
const isWin = path.sep === '\\';
|
|
188
|
+
const rootCmp = isWin ? rootAbs.toLowerCase() : rootAbs;
|
|
189
|
+
const fileCmp = isWin ? fileAbs.toLowerCase() : fileAbs;
|
|
190
|
+
if (fileCmp === rootCmp)
|
|
191
|
+
return '';
|
|
192
|
+
if (fileCmp.startsWith(rootCmp + path.sep)) {
|
|
193
|
+
return path.relative(rootAbs, fileAbs);
|
|
194
|
+
}
|
|
195
|
+
return filePath;
|
|
196
|
+
}
|
|
228
197
|
//# sourceMappingURL=mcp.js.map
|
package/dist/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":""}
|