@puzzmo/cli 1.0.17 → 1.0.19
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/lib/commands/game/create.js +3 -1
- package/lib/commands/game/create.js.map +1 -1
- package/lib/commands/migrate.d.ts +2 -0
- package/lib/commands/migrate.js +28 -0
- package/lib/commands/migrate.js.map +1 -0
- package/lib/download/page-downloader.js +68 -24
- package/lib/download/page-downloader.js.map +1 -1
- package/lib/index.js +8 -1
- package/lib/index.js.map +1 -1
- package/lib/skills/mcp-client.d.ts +9 -0
- package/lib/skills/mcp-client.js +92 -0
- package/lib/skills/mcp-client.js.map +1 -0
- package/lib/skills/registry.d.ts +0 -5
- package/lib/skills/registry.js +7 -41
- package/lib/skills/registry.js.map +1 -1
- package/lib/skills/runner.js +20 -13
- package/lib/skills/runner.js.map +1 -1
- package/lib/tui/pipeline.js +36 -19
- package/lib/tui/pipeline.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/game/create.ts +4 -1
- package/src/commands/migrate.ts +34 -0
- package/src/download/page-downloader.ts +77 -23
- package/src/index.ts +8 -1
- package/src/skills/mcp-client.ts +90 -0
- package/src/skills/registry.ts +7 -45
- package/src/skills/runner.ts +20 -13
- package/src/tui/pipeline.ts +38 -18
|
@@ -94,7 +94,9 @@ export const gameCreate = async (args) => {
|
|
|
94
94
|
p.log.step("Logging in...");
|
|
95
95
|
login(opts.accessToken);
|
|
96
96
|
}
|
|
97
|
-
// Step 7: Write .
|
|
97
|
+
// Step 7: Write .gitignore
|
|
98
|
+
fs.writeFileSync(path.join(gameDir, ".gitignore"), ["node_modules", "dist", ".DS_Store", ".yarn", ".pnp.*", ".puzzmo", ""].join("\n"));
|
|
99
|
+
// Step 8: Write .mcp.json with dev server config
|
|
98
100
|
const token = getToken();
|
|
99
101
|
const mcpConfig = {
|
|
100
102
|
mcpServers: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/game/create.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/game/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as p from "@clack/prompts";
|
|
2
|
+
import { listMcpPrompts } from "../skills/mcp-client.js";
|
|
3
|
+
/** Lists available migration skills from the MCP server */
|
|
4
|
+
export const migrate = async () => {
|
|
5
|
+
p.intro("Puzzmo Migration Skills");
|
|
6
|
+
const gameDir = process.cwd();
|
|
7
|
+
const s = p.spinner();
|
|
8
|
+
s.start("Fetching available skills from MCP server...");
|
|
9
|
+
const prompts = await listMcpPrompts(gameDir);
|
|
10
|
+
s.stop("Done.");
|
|
11
|
+
if (!prompts || prompts.length === 0) {
|
|
12
|
+
p.log.error("No skills found. Make sure .mcp.json is configured in the current directory.");
|
|
13
|
+
process.exit(1);
|
|
14
|
+
}
|
|
15
|
+
const selected = await p.select({
|
|
16
|
+
message: "Which skill would you like to run?",
|
|
17
|
+
options: prompts.map((prompt) => ({
|
|
18
|
+
value: prompt.name,
|
|
19
|
+
label: prompt.name,
|
|
20
|
+
hint: prompt.description,
|
|
21
|
+
})),
|
|
22
|
+
});
|
|
23
|
+
if (p.isCancel(selected))
|
|
24
|
+
process.exit(0);
|
|
25
|
+
p.log.success(`Selected: ${selected}`);
|
|
26
|
+
p.outro(`Run this skill with your agent using the prompt name "${selected}"`);
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAA;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,2DAA2D;AAC3D,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;IAChC,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAElC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IAE7B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAA;IACrB,CAAC,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACvD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAA;IAC7C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEf,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAA;QAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC;QAC9B,OAAO,EAAE,oCAAoC;QAC7C,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAChC,KAAK,EAAE,MAAM,CAAC,IAAI;YAClB,KAAK,EAAE,MAAM,CAAC,IAAI;YAClB,IAAI,EAAE,MAAM,CAAC,WAAW;SACzB,CAAC,CAAC;KACJ,CAAC,CAAA;IAEF,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAEzC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAA;IACtC,CAAC,CAAC,KAAK,CAAC,yDAAyD,QAAQ,GAAG,CAAC,CAAA;AAC/E,CAAC,CAAA"}
|
|
@@ -33,6 +33,43 @@ export const extractTitle = (html) => {
|
|
|
33
33
|
const match = /<title[^>]*>([^<]+)<\/title>/i.exec(html);
|
|
34
34
|
return match?.[1]?.trim() || undefined;
|
|
35
35
|
};
|
|
36
|
+
/** Download a single asset ref, returning true if successful */
|
|
37
|
+
const downloadAsset = async (ref, baseURL, srcDir, downloaded, content, optional) => {
|
|
38
|
+
if (downloaded.has(ref))
|
|
39
|
+
return false;
|
|
40
|
+
if (ref.startsWith("data:") || ref.startsWith("#") || ref.startsWith("javascript:"))
|
|
41
|
+
return false;
|
|
42
|
+
try {
|
|
43
|
+
const assetURL = new URL(ref, baseURL);
|
|
44
|
+
// Only download same-origin assets
|
|
45
|
+
if (assetURL.origin !== baseURL.origin)
|
|
46
|
+
return false;
|
|
47
|
+
const assetPath = assetURL.pathname.replace(/^\//, "");
|
|
48
|
+
if (!assetPath)
|
|
49
|
+
return false;
|
|
50
|
+
const localPath = path.join(srcDir, assetPath);
|
|
51
|
+
fs.mkdirSync(path.dirname(localPath), { recursive: true });
|
|
52
|
+
const assetResponse = await fetchPage(assetURL.href);
|
|
53
|
+
if (!assetResponse.ok) {
|
|
54
|
+
if (optional)
|
|
55
|
+
console.warn(` Warning: could not download optional asset ${ref} (${assetResponse.status})`);
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
const ab = await assetResponse.arrayBuffer();
|
|
59
|
+
fs.writeFileSync(localPath, new Uint8Array(ab));
|
|
60
|
+
// Cache text content for JS/CSS so we can scan them for more refs
|
|
61
|
+
if (/\.(js|css|mjs)(\?.*)?$/i.test(assetPath)) {
|
|
62
|
+
content.set(ref, Buffer.from(ab).toString("utf-8"));
|
|
63
|
+
}
|
|
64
|
+
downloaded.add(ref);
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
if (optional)
|
|
69
|
+
console.warn(` Warning: failed to download optional asset ${ref}`);
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
36
73
|
/** Downloads an HTML page and its referenced assets into a src/ directory */
|
|
37
74
|
export const downloadPage = async (url, outputDir) => {
|
|
38
75
|
const srcDir = path.join(outputDir, "src");
|
|
@@ -44,34 +81,28 @@ export const downloadPage = async (url, outputDir) => {
|
|
|
44
81
|
let html = await response.text();
|
|
45
82
|
const baseURL = new URL(url);
|
|
46
83
|
const downloaded = new Set();
|
|
84
|
+
const assetContent = new Map();
|
|
47
85
|
// Find referenced assets (src, href, url())
|
|
48
86
|
const assetRefs = extractAssetRefs(html);
|
|
49
87
|
for (const ref of assetRefs) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
if (!
|
|
61
|
-
|
|
62
|
-
const localPath = path.join(srcDir, assetPath);
|
|
63
|
-
fs.mkdirSync(path.dirname(localPath), { recursive: true });
|
|
64
|
-
const assetResponse = await fetchPage(assetURL.href);
|
|
65
|
-
if (!assetResponse.ok)
|
|
66
|
-
continue;
|
|
67
|
-
const ab = await assetResponse.arrayBuffer();
|
|
68
|
-
fs.writeFileSync(localPath, new Uint8Array(ab));
|
|
69
|
-
// Rewrite reference in HTML to local path
|
|
70
|
-
html = html.replaceAll(ref, assetPath);
|
|
71
|
-
downloaded.add(ref);
|
|
88
|
+
const ok = await downloadAsset(ref, baseURL, srcDir, downloaded, assetContent, false);
|
|
89
|
+
if (ok)
|
|
90
|
+
html = html.replaceAll(ref, new URL(ref, baseURL).pathname.replace(/^\//, ""));
|
|
91
|
+
}
|
|
92
|
+
// Second pass: scan downloaded JS/CSS files for string literals referencing
|
|
93
|
+
// paths with known asset extensions (images, fonts, audio, video).
|
|
94
|
+
// These are optional — the game may still work without them.
|
|
95
|
+
const jsAssetRefs = new Set();
|
|
96
|
+
for (const [, text] of assetContent) {
|
|
97
|
+
for (const ref of extractAssetFileRefs(text)) {
|
|
98
|
+
if (!downloaded.has(ref))
|
|
99
|
+
jsAssetRefs.add(ref);
|
|
72
100
|
}
|
|
73
|
-
|
|
74
|
-
|
|
101
|
+
}
|
|
102
|
+
if (jsAssetRefs.size > 0) {
|
|
103
|
+
console.log(` Found ${jsAssetRefs.size} additional asset reference${jsAssetRefs.size === 1 ? "" : "s"} in JS/CSS files`);
|
|
104
|
+
for (const ref of jsAssetRefs) {
|
|
105
|
+
await downloadAsset(ref, baseURL, srcDir, downloaded, assetContent, true);
|
|
75
106
|
}
|
|
76
107
|
}
|
|
77
108
|
// Write the HTML file
|
|
@@ -98,4 +129,17 @@ const extractAssetRefs = (html) => {
|
|
|
98
129
|
}
|
|
99
130
|
return [...new Set(refs)];
|
|
100
131
|
};
|
|
132
|
+
/** Known asset file extensions to look for in JS/CSS string literals */
|
|
133
|
+
const ASSET_EXTENSIONS = "webp|png|jpe?g|gif|svg|ico|mp3|ogg|wav|mp4|webm|woff2?|ttf|eot";
|
|
134
|
+
/** Extracts paths with known asset extensions from JS/CSS string literals */
|
|
135
|
+
const extractAssetFileRefs = (source) => {
|
|
136
|
+
const refs = [];
|
|
137
|
+
const regex = new RegExp(`["'\`](/[^"'\`\\s]*\\.(?:${ASSET_EXTENSIONS}))(?:\\?[^"'\`\\s]*)?["'\`]`, "gi");
|
|
138
|
+
let match;
|
|
139
|
+
while ((match = regex.exec(source)) !== null) {
|
|
140
|
+
if (match[1])
|
|
141
|
+
refs.push(match[1]);
|
|
142
|
+
}
|
|
143
|
+
return [...new Set(refs)];
|
|
144
|
+
};
|
|
101
145
|
//# sourceMappingURL=page-downloader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-downloader.js","sourceRoot":"","sources":["../../src/download/page-downloader.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"page-downloader.js","sourceRoot":"","sources":["../../src/download/page-downloader.ts"],"names":[],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
import { login } from "./commands/login.js";
|
|
3
3
|
import { upload } from "./commands/upload.js";
|
|
4
4
|
import { gameCreate } from "./commands/game/create.js";
|
|
5
|
+
import { migrate } from "./commands/migrate.js";
|
|
5
6
|
const [command, ...args] = process.argv.slice(2);
|
|
6
7
|
const printUsage = () => {
|
|
7
8
|
console.log(`Usage:
|
|
8
9
|
puzzmo login <token> Save a CLI auth token
|
|
10
|
+
puzzmo game create [token] Create a new Puzzmo game project
|
|
11
|
+
|
|
9
12
|
puzzmo upload <slug> <dir> Upload game build from <dir>
|
|
10
|
-
puzzmo
|
|
13
|
+
puzzmo migrate List and select migration skills from dev.puzzmo.com`);
|
|
11
14
|
};
|
|
12
15
|
const run = async () => {
|
|
13
16
|
switch (command) {
|
|
@@ -41,6 +44,10 @@ const run = async () => {
|
|
|
41
44
|
}
|
|
42
45
|
break;
|
|
43
46
|
}
|
|
47
|
+
case "migrate": {
|
|
48
|
+
await migrate();
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
44
51
|
default:
|
|
45
52
|
printUsage();
|
|
46
53
|
break;
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAE/C,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAEhD,MAAM,UAAU,GAAG,GAAG,EAAE;IACtB,OAAO,CAAC,GAAG,CAAC;;;;;uFAKyE,CAAC,CAAA;AACxF,CAAC,CAAA;AAED,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;IACrB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YACrB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;gBAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC;YACD,KAAK,CAAC,KAAK,CAAC,CAAA;YACZ,MAAK;QACP,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YACnB,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAA;gBACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC;YACD,MAAM,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YAC3B,MAAK;QACP,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,CAAA;YACrC,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,UAAU,CAAC,OAAO,CAAC,CAAA;YAC3B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,0GAA0G,CAAC,CAAA;gBACzH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC;YACD,MAAK;QACP,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,OAAO,EAAE,CAAA;YACf,MAAK;QACP,CAAC;QACD;YACE,UAAU,EAAE,CAAA;YACZ,MAAK;IACT,CAAC;AACH,CAAC,CAAA;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAClB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAA;IACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Returns the MCP server URL from .mcp.json, or null if not configured */
|
|
2
|
+
export declare const getMcpUrl: (gameDir: string) => string | null;
|
|
3
|
+
/** Lists all available prompts from the MCP server configured in .mcp.json */
|
|
4
|
+
export declare const listMcpPrompts: (gameDir: string) => Promise<{
|
|
5
|
+
name: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
}[] | null>;
|
|
8
|
+
/** Fetches a skill prompt's content from the MCP server configured in .mcp.json */
|
|
9
|
+
export declare const fetchSkillPrompt: (skillName: string, gameDir: string) => Promise<string | null>;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
/** Reads the .mcp.json config from the game directory */
|
|
4
|
+
const readMcpConfig = (gameDir) => {
|
|
5
|
+
const mcpPath = path.join(gameDir, ".mcp.json");
|
|
6
|
+
if (!fs.existsSync(mcpPath))
|
|
7
|
+
return null;
|
|
8
|
+
try {
|
|
9
|
+
return JSON.parse(fs.readFileSync(mcpPath, "utf-8"));
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
/** Sends a JSON-RPC request to the MCP server and parses the SSE response */
|
|
16
|
+
const mcpRequest = async (url, headers, method, params = {}) => {
|
|
17
|
+
const response = await fetch(url, {
|
|
18
|
+
method: "POST",
|
|
19
|
+
headers: {
|
|
20
|
+
"Content-Type": "application/json",
|
|
21
|
+
Accept: "application/json, text/event-stream",
|
|
22
|
+
...headers,
|
|
23
|
+
},
|
|
24
|
+
body: JSON.stringify({ jsonrpc: "2.0", id: 1, method, params }),
|
|
25
|
+
});
|
|
26
|
+
const text = await response.text();
|
|
27
|
+
// Parse SSE format: lines starting with "data: " contain the JSON payload
|
|
28
|
+
for (const line of text.split("\n")) {
|
|
29
|
+
if (!line.startsWith("data: "))
|
|
30
|
+
continue;
|
|
31
|
+
try {
|
|
32
|
+
const parsed = JSON.parse(line.slice(6));
|
|
33
|
+
if (parsed.result)
|
|
34
|
+
return parsed.result;
|
|
35
|
+
}
|
|
36
|
+
catch { }
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
};
|
|
40
|
+
/** Returns the MCP server URL from .mcp.json, or null if not configured */
|
|
41
|
+
export const getMcpUrl = (gameDir) => {
|
|
42
|
+
const config = readMcpConfig(gameDir);
|
|
43
|
+
if (!config)
|
|
44
|
+
return null;
|
|
45
|
+
const server = Object.values(config.mcpServers)[0];
|
|
46
|
+
return server?.url ?? null;
|
|
47
|
+
};
|
|
48
|
+
/** Lists all available prompts from the MCP server configured in .mcp.json */
|
|
49
|
+
export const listMcpPrompts = async (gameDir) => {
|
|
50
|
+
const config = readMcpConfig(gameDir);
|
|
51
|
+
if (!config)
|
|
52
|
+
return null;
|
|
53
|
+
const server = Object.values(config.mcpServers)[0];
|
|
54
|
+
if (!server)
|
|
55
|
+
return null;
|
|
56
|
+
try {
|
|
57
|
+
const result = await mcpRequest(server.url, server.headers ?? {}, "prompts/list", {});
|
|
58
|
+
if (!result?.prompts)
|
|
59
|
+
return null;
|
|
60
|
+
return result.prompts.map((p) => ({ name: p.name, description: p.description }));
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
/** Fetches a skill prompt's content from the MCP server configured in .mcp.json */
|
|
67
|
+
export const fetchSkillPrompt = async (skillName, gameDir) => {
|
|
68
|
+
const config = readMcpConfig(gameDir);
|
|
69
|
+
if (!config)
|
|
70
|
+
return null;
|
|
71
|
+
const server = Object.values(config.mcpServers)[0];
|
|
72
|
+
if (!server)
|
|
73
|
+
return null;
|
|
74
|
+
try {
|
|
75
|
+
const result = await mcpRequest(server.url, server.headers ?? {}, "prompts/get", { name: skillName });
|
|
76
|
+
if (!result?.messages?.length)
|
|
77
|
+
return null;
|
|
78
|
+
return result.messages
|
|
79
|
+
.map((m) => {
|
|
80
|
+
if (typeof m.content === "string")
|
|
81
|
+
return m.content;
|
|
82
|
+
if (m.content?.text)
|
|
83
|
+
return m.content.text;
|
|
84
|
+
return "";
|
|
85
|
+
})
|
|
86
|
+
.join("\n");
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=mcp-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../src/skills/mcp-client.ts"],"names":[],"mappings":"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"}
|
package/lib/skills/registry.d.ts
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
export type SkillDefinition = {
|
|
2
2
|
name: string;
|
|
3
|
-
optional: boolean;
|
|
4
3
|
};
|
|
5
4
|
/** Ordered list of skills for the migration pipeline */
|
|
6
5
|
export declare const skillsPipeline: SkillDefinition[];
|
|
7
|
-
/** Returns the skills directory for a given agent inside the game dir */
|
|
8
|
-
export declare const agentSkillsDir: (agent: string) => string;
|
|
9
|
-
/** Installs all Puzzmo skills from the OSS repo using `npx skills add` */
|
|
10
|
-
export declare const installSkills: (agent: string, gameDir: string) => number;
|
package/lib/skills/registry.js
CHANGED
|
@@ -1,45 +1,11 @@
|
|
|
1
|
-
import { spawnSync } from "node:child_process";
|
|
2
1
|
/** Ordered list of skills for the migration pipeline */
|
|
3
2
|
export const skillsPipeline = [
|
|
4
|
-
{ name: "convert-to-vite"
|
|
5
|
-
{ name: "introduce-puzzmo-sdk"
|
|
6
|
-
{ name: "game-completion"
|
|
7
|
-
{ name: "
|
|
8
|
-
{ name: "
|
|
9
|
-
{ name: "
|
|
10
|
-
{ name: "
|
|
11
|
-
{ name: "setup-deploy", optional: false },
|
|
3
|
+
{ name: "convert-to-vite" },
|
|
4
|
+
{ name: "introduce-puzzmo-sdk" },
|
|
5
|
+
{ name: "game-completion" },
|
|
6
|
+
{ name: "add-deeds" },
|
|
7
|
+
{ name: "setup-augmentations" },
|
|
8
|
+
{ name: "create-app-bundle" },
|
|
9
|
+
{ name: "setup-deploy" },
|
|
12
10
|
];
|
|
13
|
-
/** Maps our agent binary names to the skills CLI agent identifiers */
|
|
14
|
-
const toSkillsAgent = (agent) => {
|
|
15
|
-
const map = {
|
|
16
|
-
claude: "claude-code",
|
|
17
|
-
gemini: "gemini-cli",
|
|
18
|
-
};
|
|
19
|
-
return map[agent] ?? agent;
|
|
20
|
-
};
|
|
21
|
-
/** Returns the skills directory for a given agent inside the game dir */
|
|
22
|
-
export const agentSkillsDir = (agent) => {
|
|
23
|
-
if (agent === "claude")
|
|
24
|
-
return ".claude/skills";
|
|
25
|
-
if (agent === "codex")
|
|
26
|
-
return ".codex/skills";
|
|
27
|
-
if (agent === "gemini")
|
|
28
|
-
return ".gemini/skills";
|
|
29
|
-
return `.${agent}/skills`;
|
|
30
|
-
};
|
|
31
|
-
/** Installs all Puzzmo skills from the OSS repo using `npx skills add` */
|
|
32
|
-
export const installSkills = (agent, gameDir) => {
|
|
33
|
-
const skillsAgent = toSkillsAgent(agent);
|
|
34
|
-
const result = spawnSync("npx", ["skills", "add", "puzzmo-com/oss", "--agent", skillsAgent, "--skill", "*", "--copy", "-y"], {
|
|
35
|
-
cwd: gameDir,
|
|
36
|
-
stdio: "inherit",
|
|
37
|
-
encoding: "utf-8",
|
|
38
|
-
});
|
|
39
|
-
if (result.status !== 0) {
|
|
40
|
-
console.error("Failed to install skills from puzzmo-com/oss");
|
|
41
|
-
process.exit(1);
|
|
42
|
-
}
|
|
43
|
-
return skillsPipeline.length;
|
|
44
|
-
};
|
|
45
11
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/skills/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/skills/registry.ts"],"names":[],"mappings":"AAIA,wDAAwD;AACxD,MAAM,CAAC,MAAM,cAAc,GAAsB;IAC/C,EAAE,IAAI,EAAE,iBAAiB,EAAE;IAC3B,EAAE,IAAI,EAAE,sBAAsB,EAAE;IAChC,EAAE,IAAI,EAAE,iBAAiB,EAAE;IAC3B,EAAE,IAAI,EAAE,WAAW,EAAE;IACrB,EAAE,IAAI,EAAE,qBAAqB,EAAE;IAC/B,EAAE,IAAI,EAAE,mBAAmB,EAAE;IAC7B,EAAE,IAAI,EAAE,cAAc,EAAE;CACzB,CAAA"}
|
package/lib/skills/runner.js
CHANGED
|
@@ -1,9 +1,23 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
2
|
import { skillsPipeline } from "./registry.js";
|
|
3
3
|
import { verifyBuild, runCommand, gitCommit } from "../util/exec.js";
|
|
4
|
-
|
|
5
|
-
const buildPrompt = (skillName) => {
|
|
6
|
-
|
|
4
|
+
import { getMcpUrl } from "./mcp-client.js";
|
|
5
|
+
const buildPrompt = (skillName, mcpUrl) => {
|
|
6
|
+
if (!mcpUrl)
|
|
7
|
+
return `Run the skill "${skillName}". The game source is in the current directory.`;
|
|
8
|
+
return `First, fetch the skill instructions by using WebFetch to make a POST request to:
|
|
9
|
+
${mcpUrl}
|
|
10
|
+
|
|
11
|
+
With headers:
|
|
12
|
+
- Content-Type: application/json
|
|
13
|
+
- Accept: application/json, text/event-stream
|
|
14
|
+
|
|
15
|
+
And body:
|
|
16
|
+
{"jsonrpc":"2.0","id":1,"method":"prompts/get","params":{"name":"${skillName}"}}
|
|
17
|
+
|
|
18
|
+
The response will be in SSE format. Parse the "data:" line to get the JSON result, which contains the skill instructions in result.messages[0].content.text.
|
|
19
|
+
|
|
20
|
+
Then follow those instructions. The game source is in the current directory.`;
|
|
7
21
|
};
|
|
8
22
|
/** Invokes an LLM agent with a prompt (plain mode, stdio inherited) */
|
|
9
23
|
const invokeAgent = (agent, prompt, cwd) => {
|
|
@@ -28,14 +42,11 @@ export const runSkillsPipeline = async (agent, gameDir) => {
|
|
|
28
42
|
for (let i = 0; i < total; i++) {
|
|
29
43
|
const skill = skillsPipeline[i];
|
|
30
44
|
const step = i + 1;
|
|
31
|
-
console.log(`[${step}/${total}] Running skill: ${skill.name}
|
|
32
|
-
const
|
|
45
|
+
console.log(`[${step}/${total}] Running skill: ${skill.name}`);
|
|
46
|
+
const mcpUrl = getMcpUrl(gameDir);
|
|
47
|
+
const prompt = buildPrompt(skill.name, mcpUrl);
|
|
33
48
|
let result = invokeAgent(agent, prompt, gameDir);
|
|
34
49
|
if (!result.success) {
|
|
35
|
-
if (skill.optional) {
|
|
36
|
-
console.log(` Skipped (optional skill failed)`);
|
|
37
|
-
continue;
|
|
38
|
-
}
|
|
39
50
|
console.log(` Agent failed, retrying...`);
|
|
40
51
|
result = invokeAgent(agent, prompt, gameDir);
|
|
41
52
|
if (!result.success) {
|
|
@@ -51,10 +62,6 @@ export const runSkillsPipeline = async (agent, gameDir) => {
|
|
|
51
62
|
invokeAgent(agent, fixPrompt, gameDir);
|
|
52
63
|
const retryBuild = verifyBuild(gameDir);
|
|
53
64
|
if (!retryBuild.success) {
|
|
54
|
-
if (skill.optional) {
|
|
55
|
-
console.log(` Skipped (build still failing after fix attempt)`);
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
65
|
console.error(` Build still failing after fix attempt. Stopping.`);
|
|
59
66
|
process.exit(1);
|
|
60
67
|
}
|
package/lib/skills/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/skills/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/skills/runner.ts"],"names":[],"mappings":"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"}
|