@spec0/cli 0.4.1 → 0.6.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/README.md +3 -2
- package/dist/commands/api/changelog.d.ts.map +1 -1
- package/dist/commands/api/changelog.js +10 -7
- package/dist/commands/api/changelog.js.map +1 -1
- package/dist/commands/api/delete.d.ts +10 -0
- package/dist/commands/api/delete.d.ts.map +1 -0
- package/dist/commands/api/delete.js +72 -0
- package/dist/commands/api/delete.js.map +1 -0
- package/dist/commands/api/index.d.ts.map +1 -1
- package/dist/commands/api/index.js +2 -0
- package/dist/commands/api/index.js.map +1 -1
- package/dist/commands/api/list.d.ts.map +1 -1
- package/dist/commands/api/list.js +10 -7
- package/dist/commands/api/list.js.map +1 -1
- package/dist/commands/api/show.d.ts +5 -2
- package/dist/commands/api/show.d.ts.map +1 -1
- package/dist/commands/api/show.js +80 -18
- package/dist/commands/api/show.js.map +1 -1
- package/dist/commands/auth.d.ts +5 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +49 -31
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/ci/generate.d.ts.map +1 -1
- package/dist/commands/ci/generate.js +10 -7
- package/dist/commands/ci/generate.js.map +1 -1
- package/dist/commands/log.d.ts.map +1 -1
- package/dist/commands/log.js +10 -5
- package/dist/commands/log.js.map +1 -1
- package/dist/commands/mcp.d.ts +7 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +135 -29
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/mock/create.d.ts.map +1 -1
- package/dist/commands/mock/create.js +10 -7
- package/dist/commands/mock/create.js.map +1 -1
- package/dist/commands/mock/delete.d.ts +11 -0
- package/dist/commands/mock/delete.d.ts.map +1 -0
- package/dist/commands/mock/delete.js +65 -0
- package/dist/commands/mock/delete.js.map +1 -0
- package/dist/commands/mock/index.d.ts.map +1 -1
- package/dist/commands/mock/index.js +2 -0
- package/dist/commands/mock/index.js.map +1 -1
- package/dist/commands/mock/list.d.ts.map +1 -1
- package/dist/commands/mock/list.js +10 -7
- package/dist/commands/mock/list.js.map +1 -1
- package/dist/commands/mock/show.d.ts.map +1 -1
- package/dist/commands/mock/show.js +10 -7
- package/dist/commands/mock/show.js.map +1 -1
- package/dist/commands/mock/url.d.ts.map +1 -1
- package/dist/commands/mock/url.js +12 -5
- package/dist/commands/mock/url.js.map +1 -1
- package/dist/commands/publish.js +2 -2
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +12 -5
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +5 -0
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +13 -9
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +10 -5
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/sync-status.d.ts.map +1 -1
- package/dist/commands/sync-status.js +10 -7
- package/dist/commands/sync-status.js.map +1 -1
- package/dist/commands/team/create.d.ts.map +1 -1
- package/dist/commands/team/create.js +11 -10
- package/dist/commands/team/create.js.map +1 -1
- package/dist/commands/team/delete.d.ts.map +1 -1
- package/dist/commands/team/delete.js +11 -8
- package/dist/commands/team/delete.js.map +1 -1
- package/dist/commands/team/list.d.ts.map +1 -1
- package/dist/commands/team/list.js +11 -9
- package/dist/commands/team/list.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/api-client.d.ts +12 -2
- package/dist/lib/api-client.d.ts.map +1 -1
- package/dist/lib/api-client.js +65 -14
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/config.d.ts +11 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +14 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/errors.d.ts +46 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +99 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/http-trace.d.ts +37 -0
- package/dist/lib/http-trace.d.ts.map +1 -0
- package/dist/lib/http-trace.js +101 -0
- package/dist/lib/http-trace.js.map +1 -0
- package/dist/lib/output.d.ts +4 -0
- package/dist/lib/output.d.ts.map +1 -1
- package/dist/lib/output.js +8 -0
- package/dist/lib/output.js.map +1 -1
- package/dist/lib/platform-defaults.d.ts +29 -4
- package/dist/lib/platform-defaults.d.ts.map +1 -1
- package/dist/lib/platform-defaults.js +34 -4
- package/dist/lib/platform-defaults.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/commands/ci/generate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/commands/ci/generate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,OAAO,QA0EpD"}
|
|
@@ -10,9 +10,11 @@ import { writeFileSync, mkdirSync } from "node:fs";
|
|
|
10
10
|
import { dirname, resolve } from "node:path";
|
|
11
11
|
import chalk from "chalk";
|
|
12
12
|
import { PublicCiService } from "@spec0/sdk-public-platform";
|
|
13
|
-
import { configureSdkAuth
|
|
13
|
+
import { configureSdkAuth } from "../../lib/api-client.js";
|
|
14
14
|
import { requireOrgContext } from "../../lib/auth-context.js";
|
|
15
15
|
import { ExitCode } from "../../lib/exit-codes.js";
|
|
16
|
+
import { failApi } from "../../lib/errors.js";
|
|
17
|
+
import { setHttpTrace } from "../../lib/http-trace.js";
|
|
16
18
|
import { emit, fail, progress, resolveOutputContext, } from "../../lib/output/index.js";
|
|
17
19
|
export function registerCiGenerateCommand(ci) {
|
|
18
20
|
ci.command("generate")
|
|
@@ -24,8 +26,10 @@ export function registerCiGenerateCommand(ci) {
|
|
|
24
26
|
.option("--write", "Write the workflow to its suggested path (default: print to stdout)")
|
|
25
27
|
.option("--org <uuid>", "Org id override")
|
|
26
28
|
.option("--output <format>", "Output format for metadata: text, json, yaml (default: text)")
|
|
29
|
+
.option("--verbose", "Print HTTP request/response traces to stderr")
|
|
27
30
|
.action(async (provider, opts) => {
|
|
28
31
|
const outCtx = resolveOutputContext(opts);
|
|
32
|
+
setHttpTrace(outCtx.verbose);
|
|
29
33
|
if (provider.toLowerCase() !== "github") {
|
|
30
34
|
fail(outCtx, ExitCode.USAGE, `Unsupported CI provider '${provider}'.`, {
|
|
31
35
|
hint: "Supported providers: github.",
|
|
@@ -60,12 +64,11 @@ export function registerCiGenerateCommand(ci) {
|
|
|
60
64
|
}
|
|
61
65
|
}
|
|
62
66
|
catch (err) {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
fail(outCtx, ExitCode.GENERIC, `ci generate failed: ${err.message}`);
|
|
67
|
+
failApi(outCtx, err, {
|
|
68
|
+
action: "ci generate",
|
|
69
|
+
org: authCtx.orgName ?? authCtx.orgId,
|
|
70
|
+
apiUrl: authCtx.apiUrl,
|
|
71
|
+
});
|
|
69
72
|
}
|
|
70
73
|
});
|
|
71
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/ci/generate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/ci/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,QAwElD"}
|
package/dist/commands/log.js
CHANGED
|
@@ -6,11 +6,13 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import chalk from "chalk";
|
|
8
8
|
import { PublicRegistryService } from "@spec0/sdk-public-platform";
|
|
9
|
-
import { configureSdkAuth
|
|
9
|
+
import { configureSdkAuth } from "../lib/api-client.js";
|
|
10
10
|
import { requireOrgContext } from "../lib/auth-context.js";
|
|
11
11
|
import { getDefaultOrgId, getOrgConfig } from "../lib/config.js";
|
|
12
12
|
import { parseRegistryRef } from "../lib/registry-ref.js";
|
|
13
13
|
import { ExitCode, exit } from "../lib/exit-codes.js";
|
|
14
|
+
import { failApi } from "../lib/errors.js";
|
|
15
|
+
import { setHttpTrace } from "../lib/http-trace.js";
|
|
14
16
|
import { emit, resolveOutputContext } from "../lib/output/index.js";
|
|
15
17
|
import { renderTable } from "../lib/output/table.js";
|
|
16
18
|
import { warnDeprecated } from "../lib/deprecation.js";
|
|
@@ -22,6 +24,7 @@ export function registerLogCommand(program) {
|
|
|
22
24
|
.option("--org-slug <slug>", "Organisation slug/name for registry path when api-ref has no slash (default: name from spec0 auth config)")
|
|
23
25
|
.option("--output <format>", "Output format: text, json, or yaml (default: text)")
|
|
24
26
|
.option("--json", "Deprecated. Use --output=json instead.")
|
|
27
|
+
.option("--verbose", "Print HTTP request/response traces to stderr")
|
|
25
28
|
.action(async (apiRef, opts) => {
|
|
26
29
|
if (opts.json) {
|
|
27
30
|
warnDeprecated({
|
|
@@ -31,6 +34,7 @@ export function registerLogCommand(program) {
|
|
|
31
34
|
});
|
|
32
35
|
}
|
|
33
36
|
const outCtx = resolveOutputContext(opts);
|
|
37
|
+
setHttpTrace(outCtx.verbose);
|
|
34
38
|
let orgSlug;
|
|
35
39
|
let apiName;
|
|
36
40
|
try {
|
|
@@ -69,10 +73,11 @@ export function registerLogCommand(program) {
|
|
|
69
73
|
emit(outCtx, rows, (data) => renderLogText(data, orgSlug, apiName));
|
|
70
74
|
}
|
|
71
75
|
catch (err) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
+
failApi(outCtx, err, {
|
|
77
|
+
action: "log",
|
|
78
|
+
org: authCtx.orgName ?? authCtx.orgId,
|
|
79
|
+
apiUrl: authCtx.apiUrl,
|
|
80
|
+
});
|
|
76
81
|
}
|
|
77
82
|
});
|
|
78
83
|
}
|
package/dist/commands/log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/mcp.d.ts
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* spec0 mcp url | test
|
|
2
|
+
* spec0 mcp url | test | install
|
|
3
|
+
*
|
|
4
|
+
* Helpers for pointing MCP clients (Cursor, Claude) at the Spec0 MCP server.
|
|
5
|
+
* The server is a single Streamable HTTP endpoint; a bearer token is optional
|
|
6
|
+
* (anonymous gets the public docs tools, a token unlocks org-scoped tools). The
|
|
7
|
+
* canonical config references `${SPEC0_TOKEN}` so the secret stays in the
|
|
8
|
+
* environment rather than being written into client config files.
|
|
3
9
|
*/
|
|
4
10
|
import { Command } from "commander";
|
|
5
11
|
export declare function registerMcpCommands(program: Command): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwCpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QA6DnD"}
|
package/dist/commands/mcp.js
CHANGED
|
@@ -1,52 +1,70 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* spec0 mcp url | test
|
|
2
|
+
* spec0 mcp url | test | install
|
|
3
|
+
*
|
|
4
|
+
* Helpers for pointing MCP clients (Cursor, Claude) at the Spec0 MCP server.
|
|
5
|
+
* The server is a single Streamable HTTP endpoint; a bearer token is optional
|
|
6
|
+
* (anonymous gets the public docs tools, a token unlocks org-scoped tools). The
|
|
7
|
+
* canonical config references `${SPEC0_TOKEN}` so the secret stays in the
|
|
8
|
+
* environment rather than being written into client config files.
|
|
3
9
|
*/
|
|
4
10
|
import chalk from "chalk";
|
|
5
11
|
import got from "got";
|
|
12
|
+
import { spawnSync } from "node:child_process";
|
|
13
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
14
|
+
import { homedir } from "node:os";
|
|
15
|
+
import { dirname, join } from "node:path";
|
|
6
16
|
import { getDefaultOrgId, getOrgConfig } from "../lib/config.js";
|
|
17
|
+
import { resolvedPlatformMcpBaseUrl, resolvedPlatformMcpUrl } from "../lib/platform-defaults.js";
|
|
7
18
|
import { ExitCode, exit, exitCodeForHttpStatus } from "../lib/exit-codes.js";
|
|
19
|
+
/** Server key used under `mcpServers` in every client config we write. */
|
|
20
|
+
const SERVER_KEY = "spec0";
|
|
21
|
+
/** Bearer header value — references the env var so the token never lands on disk. */
|
|
22
|
+
const AUTH_HEADER = "Bearer ${SPEC0_TOKEN}";
|
|
23
|
+
/** Canonical client config block for the Spec0 MCP server. */
|
|
24
|
+
function canonicalServerConfig(mcpUrl) {
|
|
25
|
+
return {
|
|
26
|
+
url: mcpUrl,
|
|
27
|
+
headers: { Authorization: AUTH_HEADER },
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Exit early (code 3) unless the user is logged in or has env credentials.
|
|
32
|
+
* Mirrors the sibling MCP commands: a default org from config, or SPEC0_TOKEN
|
|
33
|
+
* with an org id, is enough.
|
|
34
|
+
*/
|
|
35
|
+
function requireAuthOrExit() {
|
|
36
|
+
const orgId = process.env.SPEC0_ORG_ID ?? process.env.PLATFORM_ORG_ID ?? getDefaultOrgId();
|
|
37
|
+
const hasEnvToken = Boolean(process.env.SPEC0_TOKEN ?? process.env.PLATFORM_API_TOKEN);
|
|
38
|
+
const hasStoredOrg = Boolean(orgId && getOrgConfig(orgId));
|
|
39
|
+
if (!hasEnvToken && !hasStoredOrg) {
|
|
40
|
+
console.error(chalk.red("Not authenticated. Run 'spec0 auth login'."));
|
|
41
|
+
exit(ExitCode.AUTH_MISSING);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
8
44
|
export function registerMcpCommands(program) {
|
|
9
45
|
const mcp = program.command("mcp").description("MCP server URL and config");
|
|
10
46
|
mcp
|
|
11
47
|
.command("url")
|
|
12
|
-
.description("Print MCP server
|
|
48
|
+
.description("Print MCP server config for Cursor/Claude")
|
|
13
49
|
.action(async () => {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
console.error(chalk.red("Not authenticated. Run 'spec0 auth login'."));
|
|
17
|
-
exit(ExitCode.AUTH_MISSING);
|
|
18
|
-
}
|
|
19
|
-
const org = getOrgConfig(orgId);
|
|
20
|
-
const mcpUrl = `https://mcp.spec0.io/org/${orgId}/mcp`;
|
|
50
|
+
requireAuthOrExit();
|
|
51
|
+
const mcpUrl = resolvedPlatformMcpUrl();
|
|
21
52
|
console.log("Your MCP server URL:");
|
|
22
53
|
console.log(` ${mcpUrl}`);
|
|
23
54
|
console.log("");
|
|
24
|
-
console.log("Add to Cursor
|
|
25
|
-
console.log(JSON.stringify({
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
url: mcpUrl,
|
|
29
|
-
apiKey: org.apiKey,
|
|
30
|
-
},
|
|
31
|
-
},
|
|
32
|
-
}, null, 2));
|
|
55
|
+
console.log("Add to your MCP client config (e.g. Cursor):");
|
|
56
|
+
console.log(JSON.stringify({ mcpServers: { [SERVER_KEY]: canonicalServerConfig(mcpUrl) } }, null, 2));
|
|
57
|
+
console.log("");
|
|
58
|
+
console.log(chalk.dim("SPEC0_TOKEN must be set in the client's environment for auth to succeed."));
|
|
33
59
|
});
|
|
34
60
|
mcp
|
|
35
61
|
.command("test")
|
|
36
62
|
.description("Verify MCP server is responding")
|
|
37
63
|
.action(async () => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
console.error(chalk.red("Not authenticated. Run 'spec0 auth login'."));
|
|
41
|
-
exit(ExitCode.AUTH_MISSING);
|
|
42
|
-
}
|
|
43
|
-
const org = getOrgConfig(orgId);
|
|
44
|
-
const base = org.apiUrl.replace(/\/$/, "");
|
|
45
|
-
const url = `${base}/mcp/org/${orgId}/health`;
|
|
64
|
+
requireAuthOrExit();
|
|
65
|
+
const url = `${resolvedPlatformMcpBaseUrl()}/health`;
|
|
46
66
|
try {
|
|
47
|
-
const res = await got.get(url
|
|
48
|
-
headers: { Authorization: `Bearer ${org.apiKey}`, "X-Org-Id": orgId },
|
|
49
|
-
});
|
|
67
|
+
const res = await got.get(url);
|
|
50
68
|
console.log(chalk.green("MCP gateway OK:"), res.body);
|
|
51
69
|
}
|
|
52
70
|
catch (e) {
|
|
@@ -55,5 +73,93 @@ export function registerMcpCommands(program) {
|
|
|
55
73
|
exit(status ? exitCodeForHttpStatus(status) : ExitCode.NETWORK_ERROR);
|
|
56
74
|
}
|
|
57
75
|
});
|
|
76
|
+
mcp
|
|
77
|
+
.command("install")
|
|
78
|
+
.description("Install the Spec0 MCP server into Cursor and/or Claude")
|
|
79
|
+
.option("--client <client>", "Target client: cursor, claude, or all", "all")
|
|
80
|
+
.action(async (opts) => {
|
|
81
|
+
requireAuthOrExit();
|
|
82
|
+
const client = opts.client.toLowerCase();
|
|
83
|
+
if (!["cursor", "claude", "all"].includes(client)) {
|
|
84
|
+
console.error(chalk.red(`Unknown client '${opts.client}'. Expected: cursor, claude, or all.`));
|
|
85
|
+
exit(ExitCode.USAGE);
|
|
86
|
+
}
|
|
87
|
+
const mcpUrl = resolvedPlatformMcpUrl();
|
|
88
|
+
if (client === "cursor" || client === "all") {
|
|
89
|
+
installCursor(mcpUrl);
|
|
90
|
+
}
|
|
91
|
+
if (client === "claude" || client === "all") {
|
|
92
|
+
installClaude(mcpUrl);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Read-merge-write `~/.cursor/mcp.json`, setting `mcpServers.spec0` while
|
|
98
|
+
* preserving any other servers already configured there. Creates the file/dir
|
|
99
|
+
* when absent. Pretty-prints with a trailing newline.
|
|
100
|
+
*/
|
|
101
|
+
function installCursor(mcpUrl) {
|
|
102
|
+
const cursorConfigPath = join(homedir(), ".cursor", "mcp.json");
|
|
103
|
+
let config = {};
|
|
104
|
+
if (existsSync(cursorConfigPath)) {
|
|
105
|
+
try {
|
|
106
|
+
const raw = readFileSync(cursorConfigPath, "utf-8").trim();
|
|
107
|
+
if (raw)
|
|
108
|
+
config = JSON.parse(raw);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
console.error(chalk.red(`Could not parse existing ${cursorConfigPath}; refusing to overwrite it.`));
|
|
112
|
+
console.error(chalk.dim("Fix or remove the file, then re-run 'spec0 mcp install'."));
|
|
113
|
+
exit(ExitCode.GENERIC);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const mcpServers = { ...(config.mcpServers ?? {}) };
|
|
117
|
+
mcpServers[SERVER_KEY] = canonicalServerConfig(mcpUrl);
|
|
118
|
+
const merged = { ...config, mcpServers };
|
|
119
|
+
mkdirSync(dirname(cursorConfigPath), { recursive: true });
|
|
120
|
+
writeFileSync(cursorConfigPath, `${JSON.stringify(merged, null, 2)}\n`, "utf-8");
|
|
121
|
+
console.log(chalk.green("Cursor:"), `wrote ${cursorConfigPath}`);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Register the server with Claude via `claude mcp add`. The flag form follows the
|
|
125
|
+
* current Claude CLI: all options precede the server name, the Streamable HTTP
|
|
126
|
+
* transport is selected explicitly (`--transport http`), and the bearer header is
|
|
127
|
+
* passed verbatim so the `${SPEC0_TOKEN}` placeholder is expanded by the client at
|
|
128
|
+
* connect time.
|
|
129
|
+
*
|
|
130
|
+
* If the `claude` binary isn't on PATH (or the invocation fails for any reason)
|
|
131
|
+
* we don't hard-fail: we print the exact command plus the manual JSON so the user
|
|
132
|
+
* can finish by hand.
|
|
133
|
+
*/
|
|
134
|
+
function installClaude(mcpUrl) {
|
|
135
|
+
const args = [
|
|
136
|
+
"mcp",
|
|
137
|
+
"add",
|
|
138
|
+
"--transport",
|
|
139
|
+
"http",
|
|
140
|
+
SERVER_KEY,
|
|
141
|
+
mcpUrl,
|
|
142
|
+
"--header",
|
|
143
|
+
`Authorization: ${AUTH_HEADER}`,
|
|
144
|
+
];
|
|
145
|
+
const printableCommand = `claude mcp add --transport http ${SERVER_KEY} ${mcpUrl} --header "Authorization: ${AUTH_HEADER}"`;
|
|
146
|
+
let result;
|
|
147
|
+
try {
|
|
148
|
+
result = spawnSync("claude", args, { stdio: "inherit" });
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
// Swallow — handled by the fallback below (e.g. spawn error on some platforms).
|
|
152
|
+
}
|
|
153
|
+
if (result && result.error === undefined && result.status === 0) {
|
|
154
|
+
console.log(chalk.green("Claude:"), "registered MCP server 'spec0'.");
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
// Binary missing or command failed — guide the user instead of failing hard.
|
|
158
|
+
console.log(chalk.yellow("Claude:"), "could not run 'claude mcp add' automatically.");
|
|
159
|
+
console.log("Run this command yourself:");
|
|
160
|
+
console.log(` ${printableCommand}`);
|
|
161
|
+
console.log("");
|
|
162
|
+
console.log("Or add this to your Claude MCP config manually:");
|
|
163
|
+
console.log(JSON.stringify({ mcpServers: { [SERVER_KEY]: { type: "http", ...canonicalServerConfig(mcpUrl) } } }, null, 2));
|
|
58
164
|
}
|
|
59
165
|
//# sourceMappingURL=mcp.js.map
|
package/dist/commands/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/mock/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/mock/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,QAuDtD"}
|
|
@@ -10,9 +10,11 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import chalk from "chalk";
|
|
12
12
|
import { PublicMocksService } from "@spec0/sdk-public-platform";
|
|
13
|
-
import { configureSdkAuth
|
|
13
|
+
import { configureSdkAuth } from "../../lib/api-client.js";
|
|
14
14
|
import { requireOrgContext } from "../../lib/auth-context.js";
|
|
15
15
|
import { ExitCode } from "../../lib/exit-codes.js";
|
|
16
|
+
import { failApi } from "../../lib/errors.js";
|
|
17
|
+
import { setHttpTrace } from "../../lib/http-trace.js";
|
|
16
18
|
import { emit, fail, resolveOutputContext } from "../../lib/output/index.js";
|
|
17
19
|
export function registerMockCreateCommand(mock) {
|
|
18
20
|
mock
|
|
@@ -22,8 +24,10 @@ export function registerMockCreateCommand(mock) {
|
|
|
22
24
|
.option("--api-id <uuid>", "API id")
|
|
23
25
|
.option("--org <uuid>", "Org id override")
|
|
24
26
|
.option("--output <format>", "Output format: text, json, or yaml (default: text)")
|
|
27
|
+
.option("--verbose", "Print HTTP request/response traces to stderr")
|
|
25
28
|
.action(async (opts) => {
|
|
26
29
|
const outCtx = resolveOutputContext(opts);
|
|
30
|
+
setHttpTrace(outCtx.verbose);
|
|
27
31
|
if (!opts.api && !opts.apiId) {
|
|
28
32
|
fail(outCtx, ExitCode.USAGE, "Provide --api <name> or --api-id <uuid>.");
|
|
29
33
|
}
|
|
@@ -56,12 +60,11 @@ export function registerMockCreateCommand(mock) {
|
|
|
56
60
|
emit(outCtx, result, renderCreateText);
|
|
57
61
|
}
|
|
58
62
|
catch (err) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
fail(outCtx, ExitCode.GENERIC, `mock create failed: ${err.message}`);
|
|
63
|
+
failApi(outCtx, err, {
|
|
64
|
+
action: "mock create",
|
|
65
|
+
org: authCtx.orgName ?? authCtx.orgId,
|
|
66
|
+
apiUrl: authCtx.apiUrl,
|
|
67
|
+
});
|
|
65
68
|
}
|
|
66
69
|
});
|
|
67
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/mock/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAA4B,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/mock/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spec0 mock delete <api> — delete the mock server tied to <api>.
|
|
3
|
+
*
|
|
4
|
+
* No GET/DELETE-by-id-only endpoint, so we resolve the mock server id by
|
|
5
|
+
* listing mocks and filtering by API name or id (same as `mock show`), then
|
|
6
|
+
* PublicMocksService.deletePublicMock (`DELETE /api/v1/public/mocks/{id}`).
|
|
7
|
+
* Requires `--yes`.
|
|
8
|
+
*/
|
|
9
|
+
import { Command } from "commander";
|
|
10
|
+
export declare function registerMockDeleteCommand(mock: Command): void;
|
|
11
|
+
//# sourceMappingURL=delete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/mock/delete.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,QA2DtD"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spec0 mock delete <api> — delete the mock server tied to <api>.
|
|
3
|
+
*
|
|
4
|
+
* No GET/DELETE-by-id-only endpoint, so we resolve the mock server id by
|
|
5
|
+
* listing mocks and filtering by API name or id (same as `mock show`), then
|
|
6
|
+
* PublicMocksService.deletePublicMock (`DELETE /api/v1/public/mocks/{id}`).
|
|
7
|
+
* Requires `--yes`.
|
|
8
|
+
*/
|
|
9
|
+
import chalk from "chalk";
|
|
10
|
+
import { PublicMocksService } from "@spec0/sdk-public-platform";
|
|
11
|
+
import { configureSdkAuth } from "../../lib/api-client.js";
|
|
12
|
+
import { requireOrgContext } from "../../lib/auth-context.js";
|
|
13
|
+
import { ExitCode } from "../../lib/exit-codes.js";
|
|
14
|
+
import { failApi } from "../../lib/errors.js";
|
|
15
|
+
import { setHttpTrace } from "../../lib/http-trace.js";
|
|
16
|
+
import { fail, progress, resolveOutputContext, } from "../../lib/output/index.js";
|
|
17
|
+
export function registerMockDeleteCommand(mock) {
|
|
18
|
+
mock
|
|
19
|
+
.command("delete <api>")
|
|
20
|
+
.description("Delete the mock server tied to <api> (name or UUID). Requires --yes.")
|
|
21
|
+
.option("--yes", "Skip the confirmation prompt (required for non-interactive use)")
|
|
22
|
+
.option("--org <uuid>", "Org id override")
|
|
23
|
+
.option("--output <format>", "Output format: text, json, or yaml (default: text)")
|
|
24
|
+
.option("--verbose", "Print HTTP request/response traces to stderr")
|
|
25
|
+
.action(async (api, opts) => {
|
|
26
|
+
const outCtx = resolveOutputContext(opts);
|
|
27
|
+
setHttpTrace(outCtx.verbose);
|
|
28
|
+
if (!api.trim()) {
|
|
29
|
+
fail(outCtx, ExitCode.USAGE, "API ref is required.");
|
|
30
|
+
}
|
|
31
|
+
if (!opts.yes) {
|
|
32
|
+
fail(outCtx, ExitCode.USAGE, "Refusing to delete without confirmation. Pass --yes to proceed.", { hint: "spec0 mock delete <api> --yes" });
|
|
33
|
+
}
|
|
34
|
+
let authCtx;
|
|
35
|
+
try {
|
|
36
|
+
authCtx = requireOrgContext(opts.org);
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
fail(outCtx, ExitCode.AUTH_MISSING, e.message, {
|
|
40
|
+
hint: "Set SPEC0_TOKEN + SPEC0_ORG_ID, or run 'spec0 auth login'.",
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
configureSdkAuth(authCtx);
|
|
44
|
+
try {
|
|
45
|
+
const rows = await PublicMocksService.listPublicMocks();
|
|
46
|
+
const needle = api.toLowerCase();
|
|
47
|
+
const hit = rows.find((r) => (r.apiName ?? "").toLowerCase() === needle || (r.apiId ?? "").toLowerCase() === needle);
|
|
48
|
+
if (!hit?.mockServerId) {
|
|
49
|
+
fail(outCtx, ExitCode.NOT_FOUND, `No mock server found for '${api}'.`, {
|
|
50
|
+
hint: "Run 'spec0 mock list' to see existing mocks.",
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
await PublicMocksService.deletePublicMock({ mockServerId: hit.mockServerId });
|
|
54
|
+
progress(outCtx, chalk.green(`✓ Deleted mock server for ${hit.apiName ?? api} (${hit.mockServerId})`));
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
failApi(outCtx, err, {
|
|
58
|
+
action: "mock delete",
|
|
59
|
+
org: authCtx.orgName ?? authCtx.orgId,
|
|
60
|
+
apiUrl: authCtx.apiUrl,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/mock/delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/mock/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/mock/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAOpD"}
|
|
@@ -8,11 +8,13 @@ import { registerMockCreateCommand } from "./create.js";
|
|
|
8
8
|
import { registerMockListCommand } from "./list.js";
|
|
9
9
|
import { registerMockShowCommand } from "./show.js";
|
|
10
10
|
import { registerMockUrlCommand } from "./url.js";
|
|
11
|
+
import { registerMockDeleteCommand } from "./delete.js";
|
|
11
12
|
export function registerMockCommands(program) {
|
|
12
13
|
const mock = program.command("mock").description("Mock server management");
|
|
13
14
|
registerMockCreateCommand(mock);
|
|
14
15
|
registerMockListCommand(mock);
|
|
15
16
|
registerMockShowCommand(mock);
|
|
16
17
|
registerMockUrlCommand(mock);
|
|
18
|
+
registerMockDeleteCommand(mock);
|
|
17
19
|
}
|
|
18
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/mock/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/mock/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IAC3E,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAChC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC9B,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC9B,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC7B,yBAAyB,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/mock/list.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/mock/list.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,QA2CpD"}
|