capybara-mcp 0.1.1 → 0.1.3
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 +1 -1
- package/dist/lib/progress.d.ts.map +1 -1
- package/dist/lib/progress.js +20 -1
- package/dist/lib/progress.js.map +1 -1
- package/dist/lib/status-markdown.d.ts +2 -2
- package/dist/lib/status-markdown.d.ts.map +1 -1
- package/dist/lib/status-markdown.js +102 -35
- package/dist/lib/status-markdown.js.map +1 -1
- package/dist/tools/register-tools.d.ts.map +1 -1
- package/dist/tools/register-tools.js +24 -8
- package/dist/tools/register-tools.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -42,7 +42,7 @@ CAPYBARA_API_KEY=<key> npx capybara-mcp
|
|
|
42
42
|
1. The agent calls `generate_assets` with asset specs (maps, characters, etc.).
|
|
43
43
|
2. The client reads `src/data/assets.md` and existing JSON from your game repo.
|
|
44
44
|
3. Assets are generated via the Capybara API and written back to disk.
|
|
45
|
-
4. Live progress
|
|
45
|
+
4. Live progress is written to `.capybara/status.active.md` (rewritten in place; cleared on success). Cancelled runs go to `status.cancelled.md` (keep `job_id` for recovery); failures go to `status.failed.md`.
|
|
46
46
|
|
|
47
47
|
If interrupted, use `get_job_status` with the returned `job_id`.
|
|
48
48
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/lib/progress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACd,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,KAAK,SAAS,GAAG,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/lib/progress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACd,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,KAAK,SAAS,GAAG,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;AAiCxE,wBAAgB,sBAAsB,CAAC,EACrC,KAAK,EACL,MAAM,EACN,KAAK,EACL,SAAS,GACV,EAAE;IACD,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,YAAY,CAAC;CAC1B;qBAI+B,cAAc;EAiC7C"}
|
package/dist/lib/progress.js
CHANGED
|
@@ -8,6 +8,25 @@ function formatProgressLine({ message, progress, total }) {
|
|
|
8
8
|
}
|
|
9
9
|
return parts.join(" — ") || "working...";
|
|
10
10
|
}
|
|
11
|
+
/** Stable key so the same logical update rewrites one status line. */
|
|
12
|
+
function progressKey({ message, progress, total }) {
|
|
13
|
+
if (progress != null || total != null) {
|
|
14
|
+
return "progress";
|
|
15
|
+
}
|
|
16
|
+
const msg = message?.trim() ?? "";
|
|
17
|
+
if (!msg) {
|
|
18
|
+
return "progress";
|
|
19
|
+
}
|
|
20
|
+
// Strip trailing counts / percents so "Generating map 1/3" and "Generating map 2/3"
|
|
21
|
+
// share a line; distinct messages still get their own keys.
|
|
22
|
+
const label = msg
|
|
23
|
+
.replace(/\b\d+\s*\/\s*\d+\b/g, "")
|
|
24
|
+
.replace(/\b\d+%\b/g, "")
|
|
25
|
+
.replace(/\s+/g, " ")
|
|
26
|
+
.trim()
|
|
27
|
+
.toLowerCase();
|
|
28
|
+
return label ? `msg:${label.slice(0, 80)}` : "progress";
|
|
29
|
+
}
|
|
11
30
|
export function createProgressReporter({ extra, server, label, statusLog, }) {
|
|
12
31
|
const progressToken = extra._meta?.progressToken;
|
|
13
32
|
let lastProgress = 0;
|
|
@@ -18,7 +37,7 @@ export function createProgressReporter({ extra, server, label, statusLog, }) {
|
|
|
18
37
|
if (update.progress != null) {
|
|
19
38
|
lastProgress = update.progress;
|
|
20
39
|
}
|
|
21
|
-
await statusLog?.
|
|
40
|
+
await statusLog?.upsert(progressKey(update), formatProgressLine(update));
|
|
22
41
|
if (progressToken !== undefined) {
|
|
23
42
|
await extra.sendNotification({
|
|
24
43
|
method: "notifications/progress",
|
package/dist/lib/progress.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/lib/progress.ts"],"names":[],"mappings":"AAWA,SAAS,kBAAkB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAkB;IACtE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,EACrC,KAAK,EACL,MAAM,EACN,KAAK,EACL,SAAS,GAMV;IACC,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC;IACjD,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,MAAM,MAAM,GAAG,KAAK,EAAE,MAAsB,EAAE,EAAE;QAC9C,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;YAC5B,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,CAAC;QAED,MAAM,SAAS,EAAE,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/lib/progress.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export type StatusOutcome = "running" | "complete" | "cancelled" | "failed";
|
|
2
2
|
export type StatusLogger = {
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
activePath: string;
|
|
4
|
+
upsert: (key: string, text: string) => Promise<void>;
|
|
5
5
|
finish: (outcome: Exclude<StatusOutcome, "running">, message?: string) => Promise<void>;
|
|
6
6
|
};
|
|
7
7
|
export declare function createStatusLogger(label: string): Promise<StatusLogger>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-markdown.d.ts","sourceRoot":"","sources":["../../src/lib/status-markdown.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE5E,MAAM,MAAM,YAAY,GAAG;IACzB,
|
|
1
|
+
{"version":3,"file":"status-markdown.d.ts","sourceRoot":"","sources":["../../src/lib/status-markdown.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE5E,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzF,CAAC;AAsJF,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAqD7E"}
|
|
@@ -1,47 +1,64 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
function
|
|
4
|
-
const
|
|
5
|
-
if (
|
|
6
|
-
return path.resolve(
|
|
3
|
+
function statusDir() {
|
|
4
|
+
const customDir = process.env.CAPYBARA_STATUS_DIR?.trim();
|
|
5
|
+
if (customDir) {
|
|
6
|
+
return path.resolve(customDir);
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
// Backward compat: CAPYBARA_STATUS_FILE pointed at a single file; use its directory.
|
|
9
|
+
const customFile = process.env.CAPYBARA_STATUS_FILE?.trim();
|
|
10
|
+
if (customFile) {
|
|
11
|
+
return path.dirname(path.resolve(customFile));
|
|
12
|
+
}
|
|
13
|
+
return path.resolve(process.cwd(), ".capybara");
|
|
14
|
+
}
|
|
15
|
+
function statusPaths(dir) {
|
|
16
|
+
return {
|
|
17
|
+
active: path.join(dir, "status-active.md"),
|
|
18
|
+
cancelled: path.join(dir, "status-cancelled.md"),
|
|
19
|
+
failed: path.join(dir, "status-failed.md"),
|
|
20
|
+
};
|
|
9
21
|
}
|
|
10
22
|
function formatTimestamp() {
|
|
11
23
|
return new Date().toISOString();
|
|
12
24
|
}
|
|
13
|
-
function
|
|
14
|
-
|
|
15
|
-
? "running"
|
|
16
|
-
: outcome === "complete"
|
|
17
|
-
? "complete"
|
|
18
|
-
: outcome === "cancelled"
|
|
19
|
-
? "cancelled"
|
|
20
|
-
: "failed";
|
|
21
|
-
const body = [
|
|
25
|
+
function renderActiveMarkdown({ label, startedAt, entries, }) {
|
|
26
|
+
return [
|
|
22
27
|
`# Capybara — ${label}`,
|
|
23
28
|
"",
|
|
24
|
-
|
|
29
|
+
"**Status:** running ",
|
|
25
30
|
`**Started:** ${startedAt} `,
|
|
26
31
|
`**Updated:** ${formatTimestamp()} `,
|
|
27
32
|
"",
|
|
28
|
-
">
|
|
33
|
+
"> Live run. Cleared on success. Moved to `status-cancelled.md` / `status-failed.md` otherwise.",
|
|
29
34
|
"",
|
|
30
35
|
"## Progress",
|
|
31
36
|
"",
|
|
32
|
-
...
|
|
37
|
+
...entries.map((entry) => `- **${entry.key}:** \`${entry.updatedAt}\` ${entry.text}`),
|
|
38
|
+
"",
|
|
39
|
+
].join("\n");
|
|
40
|
+
}
|
|
41
|
+
function renderArchiveEntry({ label, outcome, startedAt, finishedAt, jobId, message, entries, }) {
|
|
42
|
+
const lines = [
|
|
43
|
+
`## ${label} — ${outcome}`,
|
|
44
|
+
"",
|
|
45
|
+
`**Started:** ${startedAt} `,
|
|
46
|
+
`**Finished:** ${finishedAt} `,
|
|
33
47
|
];
|
|
34
|
-
if (
|
|
35
|
-
|
|
48
|
+
if (jobId) {
|
|
49
|
+
lines.push(`**job_id:** \`${jobId}\` `);
|
|
50
|
+
}
|
|
51
|
+
if (message) {
|
|
52
|
+
lines.push(`**Message:** ${message} `);
|
|
36
53
|
}
|
|
37
|
-
|
|
38
|
-
return
|
|
54
|
+
lines.push("", "### Progress", "", ...entries.map((entry) => `- **${entry.key}:** \`${entry.updatedAt}\` ${entry.text}`), "", "---", "");
|
|
55
|
+
return lines.join("\n");
|
|
39
56
|
}
|
|
40
|
-
async function
|
|
57
|
+
async function writeFile(filePath, content) {
|
|
41
58
|
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
42
59
|
await fs.writeFile(filePath, content, "utf-8");
|
|
43
60
|
}
|
|
44
|
-
async function
|
|
61
|
+
async function removeFile(filePath) {
|
|
45
62
|
try {
|
|
46
63
|
await fs.unlink(filePath);
|
|
47
64
|
}
|
|
@@ -51,22 +68,72 @@ async function removeStatus(filePath) {
|
|
|
51
68
|
}
|
|
52
69
|
}
|
|
53
70
|
}
|
|
71
|
+
async function appendArchive(filePath, entry) {
|
|
72
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
73
|
+
let existing = "";
|
|
74
|
+
try {
|
|
75
|
+
existing = await fs.readFile(filePath, "utf-8");
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
if (err.code !== "ENOENT") {
|
|
79
|
+
throw err;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const header = existing.trim().length > 0
|
|
83
|
+
? existing.trimEnd() + "\n\n"
|
|
84
|
+
: `# Capybara — ${path.basename(filePath, ".md")}\n\n`;
|
|
85
|
+
await fs.writeFile(filePath, header + entry, "utf-8");
|
|
86
|
+
}
|
|
87
|
+
function extractJobId(entries) {
|
|
88
|
+
const jobEntry = entries.find((entry) => entry.key === "job_id");
|
|
89
|
+
if (!jobEntry) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
const match = jobEntry.text.match(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i);
|
|
93
|
+
return match?.[0];
|
|
94
|
+
}
|
|
54
95
|
export async function createStatusLogger(label) {
|
|
55
|
-
const
|
|
96
|
+
const dir = statusDir();
|
|
97
|
+
const paths = statusPaths(dir);
|
|
56
98
|
const startedAt = formatTimestamp();
|
|
57
|
-
const
|
|
58
|
-
const
|
|
59
|
-
await
|
|
99
|
+
const entries = new Map();
|
|
100
|
+
const refreshActive = async () => {
|
|
101
|
+
await writeFile(paths.active, renderActiveMarkdown({
|
|
102
|
+
label,
|
|
103
|
+
startedAt,
|
|
104
|
+
entries: [...entries.values()],
|
|
105
|
+
}));
|
|
60
106
|
};
|
|
61
|
-
|
|
107
|
+
const upsert = async (key, text) => {
|
|
108
|
+
entries.set(key, {
|
|
109
|
+
key,
|
|
110
|
+
text,
|
|
111
|
+
updatedAt: formatTimestamp(),
|
|
112
|
+
});
|
|
113
|
+
await refreshActive();
|
|
114
|
+
};
|
|
115
|
+
await upsert("phase", "Tool call accepted");
|
|
62
116
|
return {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
117
|
+
activePath: paths.active,
|
|
118
|
+
upsert,
|
|
119
|
+
finish: async (outcome, message) => {
|
|
120
|
+
if (outcome === "complete") {
|
|
121
|
+
await removeFile(paths.active);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const finishedAt = formatTimestamp();
|
|
125
|
+
const archivePath = outcome === "cancelled" ? paths.cancelled : paths.failed;
|
|
126
|
+
const entry = renderArchiveEntry({
|
|
127
|
+
label,
|
|
128
|
+
outcome,
|
|
129
|
+
startedAt,
|
|
130
|
+
finishedAt,
|
|
131
|
+
jobId: extractJobId([...entries.values()]),
|
|
132
|
+
message,
|
|
133
|
+
entries: [...entries.values()],
|
|
134
|
+
});
|
|
135
|
+
await appendArchive(archivePath, entry);
|
|
136
|
+
await removeFile(paths.active);
|
|
70
137
|
},
|
|
71
138
|
};
|
|
72
139
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-markdown.js","sourceRoot":"","sources":["../../src/lib/status-markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"status-markdown.js","sourceRoot":"","sources":["../../src/lib/status-markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"register-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAC;AAuEhC,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,EACjB,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC,QAsE1D"}
|
|
@@ -5,12 +5,16 @@ import { createProgressReporter } from "../lib/progress.js";
|
|
|
5
5
|
import { createStatusLogger } from "../lib/status-markdown.js";
|
|
6
6
|
async function runLongTool({ label, extra, server, work, }) {
|
|
7
7
|
const statusLog = await createStatusLogger(label);
|
|
8
|
-
const { report } = createProgressReporter({
|
|
8
|
+
const { report } = createProgressReporter({
|
|
9
|
+
extra,
|
|
10
|
+
server,
|
|
11
|
+
label,
|
|
12
|
+
statusLog,
|
|
13
|
+
});
|
|
9
14
|
const onJobId = async (jobId) => {
|
|
10
|
-
await statusLog.
|
|
15
|
+
await statusLog.upsert("job_id", `${jobId} (use ${TOOL_GET_JOB_STATUS} if interrupted)`);
|
|
11
16
|
};
|
|
12
17
|
try {
|
|
13
|
-
await statusLog.append("Tool call accepted");
|
|
14
18
|
const result = await work({ report, signal: extra.signal, onJobId });
|
|
15
19
|
await statusLog.finish("complete", "Completed successfully");
|
|
16
20
|
return {
|
|
@@ -24,7 +28,7 @@ async function runLongTool({ label, extra, server, work, }) {
|
|
|
24
28
|
content: [
|
|
25
29
|
{
|
|
26
30
|
type: "text",
|
|
27
|
-
text: `${label} cancelled.
|
|
31
|
+
text: `${label} cancelled. Check \`.capybara/status.cancelled.md\` for the job_id, then call ${TOOL_GET_JOB_STATUS} to recover results.`,
|
|
28
32
|
},
|
|
29
33
|
],
|
|
30
34
|
isError: true,
|
|
@@ -33,7 +37,12 @@ async function runLongTool({ label, extra, server, work, }) {
|
|
|
33
37
|
const message = err instanceof Error ? err.message : String(err);
|
|
34
38
|
await statusLog.finish("failed", message);
|
|
35
39
|
return {
|
|
36
|
-
content: [
|
|
40
|
+
content: [
|
|
41
|
+
{
|
|
42
|
+
type: "text",
|
|
43
|
+
text: `Error in ${label}: ${message}\nSee \`.capybara/status.failed.md\` for details.`,
|
|
44
|
+
},
|
|
45
|
+
],
|
|
37
46
|
isError: true,
|
|
38
47
|
};
|
|
39
48
|
}
|
|
@@ -43,7 +52,9 @@ export function registerTools(server, ctx) {
|
|
|
43
52
|
title: "Generate assets",
|
|
44
53
|
description: ASSET_TOOL_DESCRIPTION +
|
|
45
54
|
` Returns a job_id for ${TOOL_GET_JOB_STATUS} if interrupted. ` +
|
|
46
|
-
"Live progress
|
|
55
|
+
"Live progress: `.capybara/status.active.md` (cleared on success). " +
|
|
56
|
+
"Cancelled runs archive to `status.cancelled.md` (recover via job_id). " +
|
|
57
|
+
"Failures archive to `status.failed.md` (bug reports).",
|
|
47
58
|
inputSchema: mcpGenerateAssetInputSchema,
|
|
48
59
|
annotations: { openWorldHint: true },
|
|
49
60
|
}, async (input, extra) => runLongTool({
|
|
@@ -59,7 +70,10 @@ export function registerTools(server, ctx) {
|
|
|
59
70
|
description: `Poll a generation job by job_id. Use when ${TOOL_GENERATE_ASSETS} was interrupted, or to check ` +
|
|
60
71
|
"progress after closing the agent. When status is complete, writes any recovered files to disk.",
|
|
61
72
|
inputSchema: {
|
|
62
|
-
job_id: z
|
|
73
|
+
job_id: z
|
|
74
|
+
.string()
|
|
75
|
+
.min(1)
|
|
76
|
+
.describe(`The job_id from ${TOOL_GENERATE_ASSETS}.`),
|
|
63
77
|
output_dir: z
|
|
64
78
|
.string()
|
|
65
79
|
.optional()
|
|
@@ -81,7 +95,9 @@ export function registerTools(server, ctx) {
|
|
|
81
95
|
catch (err) {
|
|
82
96
|
const message = err instanceof Error ? err.message : String(err);
|
|
83
97
|
return {
|
|
84
|
-
content: [
|
|
98
|
+
content: [
|
|
99
|
+
{ type: "text", text: `Error checking job: ${message}` },
|
|
100
|
+
],
|
|
85
101
|
isError: true,
|
|
86
102
|
};
|
|
87
103
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-tools.js","sourceRoot":"","sources":["../../src/tools/register-tools.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,cAAc,EACd,cAAc,GAEf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAI/D,KAAK,UAAU,WAAW,CAAC,EACzB,KAAK,EACL,KAAK,EACL,MAAM,EACN,IAAI,
|
|
1
|
+
{"version":3,"file":"register-tools.js","sourceRoot":"","sources":["../../src/tools/register-tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "capybara-mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Capybara MCP tools — generate game assets from Claude Code, Cursor, Codex, and other MCP agents",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"prepublishOnly": "npm run build"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"capybara-mcp-shared": "0.1.
|
|
22
|
+
"capybara-mcp-shared": "0.1.2",
|
|
23
23
|
"@modelcontextprotocol/sdk": "^1.11.0",
|
|
24
24
|
"zod": "^3.23.8"
|
|
25
25
|
},
|