@rolexjs/mcp-server 1.6.2 → 1.6.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/dist/chunk-DGUM43GV.js +11 -0
- package/dist/chunk-DGUM43GV.js.map +1 -0
- package/dist/cli.js +120 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.js +4 -5
- package/dist/index.js.map +1 -1
- package/dist/src-FTC42CJX.js +268 -0
- package/dist/src-FTC42CJX.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
2
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
3
|
+
}) : x)(function(x) {
|
|
4
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
5
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
__require
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=chunk-DGUM43GV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
__require
|
|
4
|
+
} from "./chunk-DGUM43GV.js";
|
|
5
|
+
|
|
6
|
+
// src/cli.ts
|
|
7
|
+
import { spawn } from "child_process";
|
|
8
|
+
import { mkdirSync, readFileSync, unlinkSync, writeFileSync } from "fs";
|
|
9
|
+
import { homedir } from "os";
|
|
10
|
+
import { join } from "path";
|
|
11
|
+
var DATA_DIR = join(homedir(), ".deepractice", "rolex");
|
|
12
|
+
var PID_FILE = join(DATA_DIR, "mcp-server.pid");
|
|
13
|
+
var LOG_FILE = join(DATA_DIR, "mcp-server.log");
|
|
14
|
+
function getPort() {
|
|
15
|
+
const arg = process.argv.find((a) => a.startsWith("--port="));
|
|
16
|
+
return arg ? Number(arg.split("=")[1]) : 8787;
|
|
17
|
+
}
|
|
18
|
+
function readPid() {
|
|
19
|
+
try {
|
|
20
|
+
return Number(readFileSync(PID_FILE, "utf-8").trim()) || null;
|
|
21
|
+
} catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function isRunning(pid) {
|
|
26
|
+
try {
|
|
27
|
+
process.kill(pid, 0);
|
|
28
|
+
return true;
|
|
29
|
+
} catch {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function cleanup() {
|
|
34
|
+
try {
|
|
35
|
+
unlinkSync(PID_FILE);
|
|
36
|
+
} catch {
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function statusCmd() {
|
|
40
|
+
const pid = readPid();
|
|
41
|
+
if (pid && isRunning(pid)) {
|
|
42
|
+
console.log(`rolex-mcp is running (pid: ${pid})`);
|
|
43
|
+
console.log(` log: ${LOG_FILE}`);
|
|
44
|
+
console.log(` pid: ${PID_FILE}`);
|
|
45
|
+
} else {
|
|
46
|
+
if (pid) cleanup();
|
|
47
|
+
console.log("rolex-mcp is not running");
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function stopCmd() {
|
|
51
|
+
const pid = readPid();
|
|
52
|
+
if (!pid || !isRunning(pid)) {
|
|
53
|
+
console.log("rolex-mcp is not running");
|
|
54
|
+
cleanup();
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
process.kill(pid, "SIGTERM");
|
|
58
|
+
console.log(`rolex-mcp stopped (pid: ${pid})`);
|
|
59
|
+
cleanup();
|
|
60
|
+
}
|
|
61
|
+
function startCmd() {
|
|
62
|
+
const existingPid = readPid();
|
|
63
|
+
if (existingPid && isRunning(existingPid)) {
|
|
64
|
+
console.log(`rolex-mcp is already running (pid: ${existingPid})`);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
cleanup();
|
|
68
|
+
const port = getPort();
|
|
69
|
+
mkdirSync(DATA_DIR, { recursive: true });
|
|
70
|
+
const child = spawn(process.execPath, [process.argv[1], "--http", `--port=${port}`], {
|
|
71
|
+
detached: true,
|
|
72
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
73
|
+
env: { ...process.env, ROLEX_MCP_DAEMON: "1" }
|
|
74
|
+
});
|
|
75
|
+
const { createWriteStream } = __require("fs");
|
|
76
|
+
const logStream = createWriteStream(LOG_FILE, { flags: "a" });
|
|
77
|
+
child.stdout?.pipe(logStream);
|
|
78
|
+
child.stderr?.pipe(logStream);
|
|
79
|
+
child.unref();
|
|
80
|
+
writeFileSync(PID_FILE, String(child.pid));
|
|
81
|
+
console.log(`rolex-mcp started on http://localhost:${port}/mcp (pid: ${child.pid})`);
|
|
82
|
+
console.log(` log: ${LOG_FILE}`);
|
|
83
|
+
}
|
|
84
|
+
function restartCmd() {
|
|
85
|
+
stopCmd();
|
|
86
|
+
startCmd();
|
|
87
|
+
}
|
|
88
|
+
async function runServer() {
|
|
89
|
+
const { server } = await import("./src-FTC42CJX.js");
|
|
90
|
+
const useHttp = process.argv.includes("--http");
|
|
91
|
+
const port = getPort();
|
|
92
|
+
if (useHttp) {
|
|
93
|
+
server.start({
|
|
94
|
+
transportType: "httpStream",
|
|
95
|
+
httpStream: { port }
|
|
96
|
+
});
|
|
97
|
+
} else {
|
|
98
|
+
server.start({
|
|
99
|
+
transportType: "stdio"
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
var cmd = process.argv[2];
|
|
104
|
+
switch (cmd) {
|
|
105
|
+
case "start":
|
|
106
|
+
startCmd();
|
|
107
|
+
break;
|
|
108
|
+
case "stop":
|
|
109
|
+
stopCmd();
|
|
110
|
+
break;
|
|
111
|
+
case "status":
|
|
112
|
+
statusCmd();
|
|
113
|
+
break;
|
|
114
|
+
case "restart":
|
|
115
|
+
restartCmd();
|
|
116
|
+
break;
|
|
117
|
+
default:
|
|
118
|
+
runServer();
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * rolex-mcp CLI — manage the MCP server.\n *\n * Usage:\n * rolex-mcp stdio mode (default, for MCP clients)\n * rolex-mcp --http HTTP foreground mode\n * rolex-mcp start start HTTP server in background\n * rolex-mcp stop stop background server\n * rolex-mcp status check if server is running\n * rolex-mcp restart restart background server\n *\n * Options:\n * --port=N HTTP port (default: 8787)\n */\n\nimport { spawn } from \"node:child_process\";\nimport { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nconst DATA_DIR = join(homedir(), \".deepractice\", \"rolex\");\nconst PID_FILE = join(DATA_DIR, \"mcp-server.pid\");\nconst LOG_FILE = join(DATA_DIR, \"mcp-server.log\");\n\nfunction getPort(): number {\n const arg = process.argv.find((a) => a.startsWith(\"--port=\"));\n return arg ? Number(arg.split(\"=\")[1]) : 8787;\n}\n\nfunction readPid(): number | null {\n try {\n return Number(readFileSync(PID_FILE, \"utf-8\").trim()) || null;\n } catch {\n return null;\n }\n}\n\nfunction isRunning(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction cleanup() {\n try {\n unlinkSync(PID_FILE);\n } catch {}\n}\n\n// ========== Commands ==========\n\nfunction statusCmd() {\n const pid = readPid();\n if (pid && isRunning(pid)) {\n console.log(`rolex-mcp is running (pid: ${pid})`);\n console.log(` log: ${LOG_FILE}`);\n console.log(` pid: ${PID_FILE}`);\n } else {\n if (pid) cleanup();\n console.log(\"rolex-mcp is not running\");\n }\n}\n\nfunction stopCmd() {\n const pid = readPid();\n if (!pid || !isRunning(pid)) {\n console.log(\"rolex-mcp is not running\");\n cleanup();\n return;\n }\n process.kill(pid, \"SIGTERM\");\n console.log(`rolex-mcp stopped (pid: ${pid})`);\n cleanup();\n}\n\nfunction startCmd() {\n const existingPid = readPid();\n if (existingPid && isRunning(existingPid)) {\n console.log(`rolex-mcp is already running (pid: ${existingPid})`);\n return;\n }\n cleanup();\n\n const port = getPort();\n mkdirSync(DATA_DIR, { recursive: true });\n\n // Spawn detached process running this same file with --http\n const child = spawn(process.execPath, [process.argv[1], \"--http\", `--port=${port}`], {\n detached: true,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: { ...process.env, ROLEX_MCP_DAEMON: \"1\" },\n });\n\n // Redirect stdout/stderr to log file\n const { createWriteStream } = require(\"node:fs\");\n const logStream = createWriteStream(LOG_FILE, { flags: \"a\" });\n child.stdout?.pipe(logStream);\n child.stderr?.pipe(logStream);\n\n child.unref();\n writeFileSync(PID_FILE, String(child.pid));\n console.log(`rolex-mcp started on http://localhost:${port}/mcp (pid: ${child.pid})`);\n console.log(` log: ${LOG_FILE}`);\n}\n\nfunction restartCmd() {\n stopCmd();\n startCmd();\n}\n\nasync function runServer() {\n const { server } = await import(\"./index.js\");\n const useHttp = process.argv.includes(\"--http\");\n const port = getPort();\n\n if (useHttp) {\n server.start({\n transportType: \"httpStream\",\n httpStream: { port },\n });\n } else {\n server.start({\n transportType: \"stdio\",\n });\n }\n}\n\n// ========== Main ==========\n\nconst cmd = process.argv[2];\n\nswitch (cmd) {\n case \"start\":\n startCmd();\n break;\n case \"stop\":\n stopCmd();\n break;\n case \"status\":\n statusCmd();\n break;\n case \"restart\":\n restartCmd();\n break;\n default:\n // No subcommand: run server directly (stdio or --http foreground)\n runServer();\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
1
|
// src/index.ts
|
|
4
2
|
import { localPlatform } from "@rolexjs/local-platform";
|
|
5
3
|
import { FastMCP } from "fastmcp";
|
|
@@ -261,7 +259,8 @@ server.addPrompt({
|
|
|
261
259
|
return "";
|
|
262
260
|
}
|
|
263
261
|
});
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
262
|
+
export {
|
|
263
|
+
ensureInit,
|
|
264
|
+
server
|
|
265
|
+
};
|
|
267
266
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/instructions.ts","../src/state.ts"],"sourcesContent":["/**\n * @rolexjs/mcp-server — individual-level MCP tools.\n *\n * Pure pass-through: all rendering happens in rolexjs.\n * MCP only translates protocol calls to API calls.\n */\n\nimport { localPlatform } from \"@rolexjs/local-platform\";\nimport { FastMCP } from \"fastmcp\";\nimport { createRoleX, detail, type ProjectAction, renderProjectResult, type State } from \"rolexjs\";\n\nimport { z } from \"zod\";\nimport { instructions } from \"./instructions.js\";\nimport { McpState } from \"./state.js\";\n\n// ========== Setup (lazy init — server must start before rolex bootstraps) ==========\n\nlet rolex: Awaited<ReturnType<typeof createRoleX>>;\nlet initPromise: Promise<void> | null = null;\n\nfunction ensureInit(): Promise<void> {\n if (!initPromise) {\n initPromise = (async () => {\n rolex = await createRoleX(\n localPlatform({\n bootstrap: [\"npm:@rolexjs/genesis\"],\n })\n );\n await rolex.genesis();\n })();\n }\n return initPromise;\n}\n\nconst state = new McpState();\n\n// ========== Server ==========\n\nconst server = new FastMCP({\n name: \"rolex\",\n version: \"0.12.0\",\n instructions,\n});\n\n// ========== Tools: Role ==========\n\nserver.addTool({\n name: \"activate\",\n description: detail(\"activate\"),\n parameters: z.object({\n roleId: z.string().describe(\"Role name to activate\"),\n }),\n execute: async ({ roleId }) => {\n await ensureInit();\n try {\n const role = await rolex.activate(roleId);\n state.role = role;\n return await role.project();\n } catch {\n const census = await rolex.direct<string>(\"!census.list\");\n throw new Error(\n `\"${roleId}\" not found. Available:\\n\\n${census}\\n\\nTry again with the correct id or alias.`\n );\n }\n },\n});\n\nserver.addTool({\n name: \"focus\",\n description: detail(\"focus\"),\n parameters: z.object({\n id: z.string().optional().describe(\"Goal id to switch to. Omit to view current.\"),\n }),\n execute: async ({ id }) => {\n return await state.requireRole().focus(id);\n },\n});\n\n// ========== Tools: Execution ==========\n\nserver.addTool({\n name: \"want\",\n description: detail(\"want\"),\n parameters: z.object({\n id: z.string().describe(\"Goal id (used for focus/reference)\"),\n goal: z.string().describe(\"Gherkin Feature source describing the goal\"),\n }),\n execute: async ({ id, goal }) => {\n return await state.requireRole().want(goal, id);\n },\n});\n\nserver.addTool({\n name: \"plan\",\n description: detail(\"plan\"),\n parameters: z.object({\n id: z.string().describe(\"Plan id — keywords from the plan content joined by hyphens\"),\n plan: z.string().describe(\"Gherkin Feature source describing the plan\"),\n after: z\n .string()\n .optional()\n .describe(\"Plan id this plan follows (sequential/phase relationship)\"),\n fallback: z\n .string()\n .optional()\n .describe(\"Plan id this plan is a backup for (alternative/strategy relationship)\"),\n }),\n execute: async ({ id, plan, after, fallback }) => {\n return await state.requireRole().plan(plan, id, after, fallback);\n },\n});\n\nserver.addTool({\n name: \"todo\",\n description: detail(\"todo\"),\n parameters: z.object({\n id: z.string().describe(\"Task id (used for finish/reference)\"),\n task: z.string().describe(\"Gherkin Feature source describing the task\"),\n }),\n execute: async ({ id, task }) => {\n return await state.requireRole().todo(task, id);\n },\n});\n\nserver.addTool({\n name: \"finish\",\n description: detail(\"finish\"),\n parameters: z.object({\n id: z.string().describe(\"Task id to finish\"),\n encounter: z.string().optional().describe(\"Optional Gherkin Feature describing what happened\"),\n }),\n execute: async ({ id, encounter }) => {\n return await state.requireRole().finish(id, encounter);\n },\n});\n\nserver.addTool({\n name: \"complete\",\n description: detail(\"complete\"),\n parameters: z.object({\n id: z.string().optional().describe(\"Plan id to complete (defaults to focused plan)\"),\n encounter: z.string().optional().describe(\"Optional Gherkin Feature describing what happened\"),\n }),\n execute: async ({ id, encounter }) => {\n return await state.requireRole().complete(id, encounter);\n },\n});\n\nserver.addTool({\n name: \"abandon\",\n description: detail(\"abandon\"),\n parameters: z.object({\n id: z.string().optional().describe(\"Plan id to abandon (defaults to focused plan)\"),\n encounter: z.string().optional().describe(\"Optional Gherkin Feature describing what happened\"),\n }),\n execute: async ({ id, encounter }) => {\n return await state.requireRole().abandon(id, encounter);\n },\n});\n\n// ========== Tools: Cognition ==========\n\nserver.addTool({\n name: \"reflect\",\n description: detail(\"reflect\"),\n parameters: z.object({\n ids: z.array(z.string()).describe(\"Encounter ids to reflect on (selective consumption)\"),\n id: z\n .string()\n .describe(\"Experience id — keywords from the experience content joined by hyphens\"),\n experience: z.string().optional().describe(\"Gherkin Feature source for the experience\"),\n }),\n execute: async ({ ids, id, experience }) => {\n return await state.requireRole().reflect(ids, experience, id);\n },\n});\n\nserver.addTool({\n name: \"realize\",\n description: detail(\"realize\"),\n parameters: z.object({\n ids: z.array(z.string()).describe(\"Experience ids to distill into a principle\"),\n id: z.string().describe(\"Principle id — keywords from the principle content joined by hyphens\"),\n principle: z.string().optional().describe(\"Gherkin Feature source for the principle\"),\n }),\n execute: async ({ ids, id, principle }) => {\n return await state.requireRole().realize(ids, principle, id);\n },\n});\n\nserver.addTool({\n name: \"master\",\n description: detail(\"master\"),\n parameters: z.object({\n ids: z.array(z.string()).optional().describe(\"Experience ids to distill into a procedure\"),\n id: z.string().describe(\"Procedure id — keywords from the procedure content joined by hyphens\"),\n procedure: z.string().describe(\"Gherkin Feature source for the procedure\"),\n }),\n execute: async ({ ids, id, procedure }) => {\n return await state.requireRole().master(procedure, id, ids);\n },\n});\n\n// ========== Tools: Knowledge management ==========\n\nserver.addTool({\n name: \"forget\",\n description: detail(\"forget\"),\n parameters: z.object({\n id: z\n .string()\n .describe(\"Id of the node to remove (principle, procedure, experience, encounter, etc.)\"),\n }),\n execute: async ({ id }) => {\n return await state.requireRole().forget(id);\n },\n});\n\n// ========== Tools: Skill loading ==========\n\nserver.addTool({\n name: \"skill\",\n description: detail(\"skill\"),\n parameters: z.object({\n locator: z\n .string()\n .describe(\"ResourceX locator for the skill (e.g. deepractice/role-management)\"),\n }),\n execute: async ({ locator }) => {\n return await state.requireRole().skill(locator);\n },\n});\n\n// ========== Tools: Use ==========\n\nserver.addTool({\n name: \"use\",\n description: detail(\"use\"),\n parameters: z.object({\n locator: z\n .string()\n .describe(\n \"Locator string. !namespace.method for RoleX commands, or a ResourceX locator for resources\"\n ),\n args: z.record(z.unknown()).optional().describe(\"Named arguments for the command or resource\"),\n }),\n execute: async ({ locator, args }) => {\n const result = await state.requireRole().use(locator, args);\n if (result == null) return `${locator} done.`;\n if (typeof result === \"string\") return result;\n return JSON.stringify(result, null, 2);\n },\n});\n\n// ========== Tools: Direct ==========\n\nserver.addTool({\n name: \"direct\",\n description: detail(\"direct\"),\n parameters: z.object({\n locator: z\n .string()\n .describe(\n \"Locator string. !namespace.method for RoleX commands, or a ResourceX locator for resources\"\n ),\n args: z.record(z.unknown()).optional().describe(\"Named arguments for the command or resource\"),\n }),\n execute: async ({ locator, args }) => {\n await ensureInit();\n const result = await rolex.direct(locator, args);\n if (result == null) return `${locator} done.`;\n if (typeof result === \"string\") return result;\n // Render project results as readable text\n if (locator.startsWith(\"!project.\")) {\n const action = locator.slice(\"!project.\".length) as ProjectAction;\n const opResult = result as { state: State };\n return renderProjectResult(action, opResult.state);\n }\n return JSON.stringify(result, null, 2);\n },\n});\n\n// ========== Compatibility: declare empty resources/prompts capabilities ==========\n// Some MCP clients (e.g. Antigravity) probe resources/list and prompts/list\n// after initialize. FastMCP only declares these capabilities when items exist.\n// Register a dummy resource then remove it — forces capability declaration.\n\nserver.addResource({\n uri: \"rolex://noop\",\n name: \"_noop\",\n description: \"\",\n async load() {\n return { text: \"\" };\n },\n});\n\nserver.addResourceTemplate({\n uriTemplate: \"rolex://noop/{id}\",\n name: \"_noop_tpl\",\n description: \"\",\n arguments: [{ name: \"id\", description: \"\", required: false }],\n async load() {\n return { text: \"\" };\n },\n});\n\nserver.addPrompt({\n name: \"_noop\",\n description: \"\",\n async load() {\n return \"\";\n },\n});\n\n// ========== Start ==========\n\nserver.start({\n transportType: \"stdio\",\n});\n","/**\n * MCP server instructions — the cognitive framework for AI roles.\n *\n * Assembled from world .feature files in rolexjs descriptions.\n * Each feature describes one independent concern of the RoleX framework.\n */\nimport { world } from \"rolexjs\";\n\nexport const instructions = Object.values(world).join(\"\\n\\n\");\n","/**\n * McpState — thin session holder for the MCP server.\n *\n * Holds the active Role handle. All business logic (state tracking,\n * cognitive hints, encounter/experience registries) lives in Role + RoleContext.\n */\nimport type { Role } from \"rolexjs\";\n\nexport class McpState {\n role: Role | null = null;\n\n requireRole(): Role {\n if (!this.role) throw new Error(\"No active role. Call activate first.\");\n return this.role;\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/instructions.ts","../src/state.ts"],"sourcesContent":["/**\n * @rolexjs/mcp-server — individual-level MCP tools.\n *\n * Pure pass-through: all rendering happens in rolexjs.\n * MCP only translates protocol calls to API calls.\n */\n\nimport { localPlatform } from \"@rolexjs/local-platform\";\nimport { FastMCP } from \"fastmcp\";\nimport { createRoleX, detail, type ProjectAction, renderProjectResult, type State } from \"rolexjs\";\n\nimport { z } from \"zod\";\nimport { instructions } from \"./instructions.js\";\nimport { McpState } from \"./state.js\";\n\n// ========== Setup (lazy init — server must start before rolex bootstraps) ==========\n\nlet rolex: Awaited<ReturnType<typeof createRoleX>>;\nlet initPromise: Promise<void> | null = null;\n\nfunction ensureInit(): Promise<void> {\n if (!initPromise) {\n initPromise = (async () => {\n rolex = await createRoleX(\n localPlatform({\n bootstrap: [\"npm:@rolexjs/genesis\"],\n })\n );\n await rolex.genesis();\n })();\n }\n return initPromise;\n}\n\nconst state = new McpState();\n\n// ========== Server ==========\n\nconst server = new FastMCP({\n name: \"rolex\",\n version: \"0.12.0\",\n instructions,\n});\n\n// ========== Tools: Role ==========\n\nserver.addTool({\n name: \"activate\",\n description: detail(\"activate\"),\n parameters: z.object({\n roleId: z.string().describe(\"Role name to activate\"),\n }),\n execute: async ({ roleId }) => {\n await ensureInit();\n try {\n const role = await rolex.activate(roleId);\n state.role = role;\n return await role.project();\n } catch {\n const census = await rolex.direct<string>(\"!census.list\");\n throw new Error(\n `\"${roleId}\" not found. Available:\\n\\n${census}\\n\\nTry again with the correct id or alias.`\n );\n }\n },\n});\n\nserver.addTool({\n name: \"focus\",\n description: detail(\"focus\"),\n parameters: z.object({\n id: z.string().optional().describe(\"Goal id to switch to. Omit to view current.\"),\n }),\n execute: async ({ id }) => {\n return await state.requireRole().focus(id);\n },\n});\n\n// ========== Tools: Execution ==========\n\nserver.addTool({\n name: \"want\",\n description: detail(\"want\"),\n parameters: z.object({\n id: z.string().describe(\"Goal id (used for focus/reference)\"),\n goal: z.string().describe(\"Gherkin Feature source describing the goal\"),\n }),\n execute: async ({ id, goal }) => {\n return await state.requireRole().want(goal, id);\n },\n});\n\nserver.addTool({\n name: \"plan\",\n description: detail(\"plan\"),\n parameters: z.object({\n id: z.string().describe(\"Plan id — keywords from the plan content joined by hyphens\"),\n plan: z.string().describe(\"Gherkin Feature source describing the plan\"),\n after: z\n .string()\n .optional()\n .describe(\"Plan id this plan follows (sequential/phase relationship)\"),\n fallback: z\n .string()\n .optional()\n .describe(\"Plan id this plan is a backup for (alternative/strategy relationship)\"),\n }),\n execute: async ({ id, plan, after, fallback }) => {\n return await state.requireRole().plan(plan, id, after, fallback);\n },\n});\n\nserver.addTool({\n name: \"todo\",\n description: detail(\"todo\"),\n parameters: z.object({\n id: z.string().describe(\"Task id (used for finish/reference)\"),\n task: z.string().describe(\"Gherkin Feature source describing the task\"),\n }),\n execute: async ({ id, task }) => {\n return await state.requireRole().todo(task, id);\n },\n});\n\nserver.addTool({\n name: \"finish\",\n description: detail(\"finish\"),\n parameters: z.object({\n id: z.string().describe(\"Task id to finish\"),\n encounter: z.string().optional().describe(\"Optional Gherkin Feature describing what happened\"),\n }),\n execute: async ({ id, encounter }) => {\n return await state.requireRole().finish(id, encounter);\n },\n});\n\nserver.addTool({\n name: \"complete\",\n description: detail(\"complete\"),\n parameters: z.object({\n id: z.string().optional().describe(\"Plan id to complete (defaults to focused plan)\"),\n encounter: z.string().optional().describe(\"Optional Gherkin Feature describing what happened\"),\n }),\n execute: async ({ id, encounter }) => {\n return await state.requireRole().complete(id, encounter);\n },\n});\n\nserver.addTool({\n name: \"abandon\",\n description: detail(\"abandon\"),\n parameters: z.object({\n id: z.string().optional().describe(\"Plan id to abandon (defaults to focused plan)\"),\n encounter: z.string().optional().describe(\"Optional Gherkin Feature describing what happened\"),\n }),\n execute: async ({ id, encounter }) => {\n return await state.requireRole().abandon(id, encounter);\n },\n});\n\n// ========== Tools: Cognition ==========\n\nserver.addTool({\n name: \"reflect\",\n description: detail(\"reflect\"),\n parameters: z.object({\n ids: z.array(z.string()).describe(\"Encounter ids to reflect on (selective consumption)\"),\n id: z\n .string()\n .describe(\"Experience id — keywords from the experience content joined by hyphens\"),\n experience: z.string().optional().describe(\"Gherkin Feature source for the experience\"),\n }),\n execute: async ({ ids, id, experience }) => {\n return await state.requireRole().reflect(ids, experience, id);\n },\n});\n\nserver.addTool({\n name: \"realize\",\n description: detail(\"realize\"),\n parameters: z.object({\n ids: z.array(z.string()).describe(\"Experience ids to distill into a principle\"),\n id: z.string().describe(\"Principle id — keywords from the principle content joined by hyphens\"),\n principle: z.string().optional().describe(\"Gherkin Feature source for the principle\"),\n }),\n execute: async ({ ids, id, principle }) => {\n return await state.requireRole().realize(ids, principle, id);\n },\n});\n\nserver.addTool({\n name: \"master\",\n description: detail(\"master\"),\n parameters: z.object({\n ids: z.array(z.string()).optional().describe(\"Experience ids to distill into a procedure\"),\n id: z.string().describe(\"Procedure id — keywords from the procedure content joined by hyphens\"),\n procedure: z.string().describe(\"Gherkin Feature source for the procedure\"),\n }),\n execute: async ({ ids, id, procedure }) => {\n return await state.requireRole().master(procedure, id, ids);\n },\n});\n\n// ========== Tools: Knowledge management ==========\n\nserver.addTool({\n name: \"forget\",\n description: detail(\"forget\"),\n parameters: z.object({\n id: z\n .string()\n .describe(\"Id of the node to remove (principle, procedure, experience, encounter, etc.)\"),\n }),\n execute: async ({ id }) => {\n return await state.requireRole().forget(id);\n },\n});\n\n// ========== Tools: Skill loading ==========\n\nserver.addTool({\n name: \"skill\",\n description: detail(\"skill\"),\n parameters: z.object({\n locator: z\n .string()\n .describe(\"ResourceX locator for the skill (e.g. deepractice/role-management)\"),\n }),\n execute: async ({ locator }) => {\n return await state.requireRole().skill(locator);\n },\n});\n\n// ========== Tools: Use ==========\n\nserver.addTool({\n name: \"use\",\n description: detail(\"use\"),\n parameters: z.object({\n locator: z\n .string()\n .describe(\n \"Locator string. !namespace.method for RoleX commands, or a ResourceX locator for resources\"\n ),\n args: z.record(z.unknown()).optional().describe(\"Named arguments for the command or resource\"),\n }),\n execute: async ({ locator, args }) => {\n const result = await state.requireRole().use(locator, args);\n if (result == null) return `${locator} done.`;\n if (typeof result === \"string\") return result;\n return JSON.stringify(result, null, 2);\n },\n});\n\n// ========== Tools: Direct ==========\n\nserver.addTool({\n name: \"direct\",\n description: detail(\"direct\"),\n parameters: z.object({\n locator: z\n .string()\n .describe(\n \"Locator string. !namespace.method for RoleX commands, or a ResourceX locator for resources\"\n ),\n args: z.record(z.unknown()).optional().describe(\"Named arguments for the command or resource\"),\n }),\n execute: async ({ locator, args }) => {\n await ensureInit();\n const result = await rolex.direct(locator, args);\n if (result == null) return `${locator} done.`;\n if (typeof result === \"string\") return result;\n // Render project results as readable text\n if (locator.startsWith(\"!project.\")) {\n const action = locator.slice(\"!project.\".length) as ProjectAction;\n const opResult = result as { state: State };\n return renderProjectResult(action, opResult.state);\n }\n return JSON.stringify(result, null, 2);\n },\n});\n\n// ========== Compatibility: declare empty resources/prompts capabilities ==========\n// Some MCP clients (e.g. Antigravity) probe resources/list and prompts/list\n// after initialize. FastMCP only declares these capabilities when items exist.\n// Register a dummy resource then remove it — forces capability declaration.\n\nserver.addResource({\n uri: \"rolex://noop\",\n name: \"_noop\",\n description: \"\",\n async load() {\n return { text: \"\" };\n },\n});\n\nserver.addResourceTemplate({\n uriTemplate: \"rolex://noop/{id}\",\n name: \"_noop_tpl\",\n description: \"\",\n arguments: [{ name: \"id\", description: \"\", required: false }],\n async load() {\n return { text: \"\" };\n },\n});\n\nserver.addPrompt({\n name: \"_noop\",\n description: \"\",\n async load() {\n return \"\";\n },\n});\n\n// ========== Start ==========\n\nexport { server, ensureInit };\n","/**\n * MCP server instructions — the cognitive framework for AI roles.\n *\n * Assembled from world .feature files in rolexjs descriptions.\n * Each feature describes one independent concern of the RoleX framework.\n */\nimport { world } from \"rolexjs\";\n\nexport const instructions = Object.values(world).join(\"\\n\\n\");\n","/**\n * McpState — thin session holder for the MCP server.\n *\n * Holds the active Role handle. All business logic (state tracking,\n * cognitive hints, encounter/experience registries) lives in Role + RoleContext.\n */\nimport type { Role } from \"rolexjs\";\n\nexport class McpState {\n role: Role | null = null;\n\n requireRole(): Role {\n if (!this.role) throw new Error(\"No active role. Call activate first.\");\n return this.role;\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import "./chunk-DGUM43GV.js";
|
|
2
|
+
|
|
3
|
+
// src/index.ts
|
|
4
|
+
import { localPlatform } from "@rolexjs/local-platform";
|
|
5
|
+
import { FastMCP } from "fastmcp";
|
|
6
|
+
import { createRoleX, detail, renderProjectResult } from "rolexjs";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
|
|
9
|
+
// src/instructions.ts
|
|
10
|
+
import { world } from "rolexjs";
|
|
11
|
+
var instructions = Object.values(world).join("\n\n");
|
|
12
|
+
|
|
13
|
+
// src/state.ts
|
|
14
|
+
var McpState = class {
|
|
15
|
+
role = null;
|
|
16
|
+
requireRole() {
|
|
17
|
+
if (!this.role) throw new Error("No active role. Call activate first.");
|
|
18
|
+
return this.role;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
// src/index.ts
|
|
23
|
+
var rolex;
|
|
24
|
+
var initPromise = null;
|
|
25
|
+
function ensureInit() {
|
|
26
|
+
if (!initPromise) {
|
|
27
|
+
initPromise = (async () => {
|
|
28
|
+
rolex = await createRoleX(
|
|
29
|
+
localPlatform({
|
|
30
|
+
bootstrap: ["npm:@rolexjs/genesis"]
|
|
31
|
+
})
|
|
32
|
+
);
|
|
33
|
+
await rolex.genesis();
|
|
34
|
+
})();
|
|
35
|
+
}
|
|
36
|
+
return initPromise;
|
|
37
|
+
}
|
|
38
|
+
var state = new McpState();
|
|
39
|
+
var server = new FastMCP({
|
|
40
|
+
name: "rolex",
|
|
41
|
+
version: "0.12.0",
|
|
42
|
+
instructions
|
|
43
|
+
});
|
|
44
|
+
server.addTool({
|
|
45
|
+
name: "activate",
|
|
46
|
+
description: detail("activate"),
|
|
47
|
+
parameters: z.object({
|
|
48
|
+
roleId: z.string().describe("Role name to activate")
|
|
49
|
+
}),
|
|
50
|
+
execute: async ({ roleId }) => {
|
|
51
|
+
await ensureInit();
|
|
52
|
+
try {
|
|
53
|
+
const role = await rolex.activate(roleId);
|
|
54
|
+
state.role = role;
|
|
55
|
+
return await role.project();
|
|
56
|
+
} catch {
|
|
57
|
+
const census = await rolex.direct("!census.list");
|
|
58
|
+
throw new Error(
|
|
59
|
+
`"${roleId}" not found. Available:
|
|
60
|
+
|
|
61
|
+
${census}
|
|
62
|
+
|
|
63
|
+
Try again with the correct id or alias.`
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
server.addTool({
|
|
69
|
+
name: "focus",
|
|
70
|
+
description: detail("focus"),
|
|
71
|
+
parameters: z.object({
|
|
72
|
+
id: z.string().optional().describe("Goal id to switch to. Omit to view current.")
|
|
73
|
+
}),
|
|
74
|
+
execute: async ({ id }) => {
|
|
75
|
+
return await state.requireRole().focus(id);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
server.addTool({
|
|
79
|
+
name: "want",
|
|
80
|
+
description: detail("want"),
|
|
81
|
+
parameters: z.object({
|
|
82
|
+
id: z.string().describe("Goal id (used for focus/reference)"),
|
|
83
|
+
goal: z.string().describe("Gherkin Feature source describing the goal")
|
|
84
|
+
}),
|
|
85
|
+
execute: async ({ id, goal }) => {
|
|
86
|
+
return await state.requireRole().want(goal, id);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
server.addTool({
|
|
90
|
+
name: "plan",
|
|
91
|
+
description: detail("plan"),
|
|
92
|
+
parameters: z.object({
|
|
93
|
+
id: z.string().describe("Plan id \u2014 keywords from the plan content joined by hyphens"),
|
|
94
|
+
plan: z.string().describe("Gherkin Feature source describing the plan"),
|
|
95
|
+
after: z.string().optional().describe("Plan id this plan follows (sequential/phase relationship)"),
|
|
96
|
+
fallback: z.string().optional().describe("Plan id this plan is a backup for (alternative/strategy relationship)")
|
|
97
|
+
}),
|
|
98
|
+
execute: async ({ id, plan, after, fallback }) => {
|
|
99
|
+
return await state.requireRole().plan(plan, id, after, fallback);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
server.addTool({
|
|
103
|
+
name: "todo",
|
|
104
|
+
description: detail("todo"),
|
|
105
|
+
parameters: z.object({
|
|
106
|
+
id: z.string().describe("Task id (used for finish/reference)"),
|
|
107
|
+
task: z.string().describe("Gherkin Feature source describing the task")
|
|
108
|
+
}),
|
|
109
|
+
execute: async ({ id, task }) => {
|
|
110
|
+
return await state.requireRole().todo(task, id);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
server.addTool({
|
|
114
|
+
name: "finish",
|
|
115
|
+
description: detail("finish"),
|
|
116
|
+
parameters: z.object({
|
|
117
|
+
id: z.string().describe("Task id to finish"),
|
|
118
|
+
encounter: z.string().optional().describe("Optional Gherkin Feature describing what happened")
|
|
119
|
+
}),
|
|
120
|
+
execute: async ({ id, encounter }) => {
|
|
121
|
+
return await state.requireRole().finish(id, encounter);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
server.addTool({
|
|
125
|
+
name: "complete",
|
|
126
|
+
description: detail("complete"),
|
|
127
|
+
parameters: z.object({
|
|
128
|
+
id: z.string().optional().describe("Plan id to complete (defaults to focused plan)"),
|
|
129
|
+
encounter: z.string().optional().describe("Optional Gherkin Feature describing what happened")
|
|
130
|
+
}),
|
|
131
|
+
execute: async ({ id, encounter }) => {
|
|
132
|
+
return await state.requireRole().complete(id, encounter);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
server.addTool({
|
|
136
|
+
name: "abandon",
|
|
137
|
+
description: detail("abandon"),
|
|
138
|
+
parameters: z.object({
|
|
139
|
+
id: z.string().optional().describe("Plan id to abandon (defaults to focused plan)"),
|
|
140
|
+
encounter: z.string().optional().describe("Optional Gherkin Feature describing what happened")
|
|
141
|
+
}),
|
|
142
|
+
execute: async ({ id, encounter }) => {
|
|
143
|
+
return await state.requireRole().abandon(id, encounter);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
server.addTool({
|
|
147
|
+
name: "reflect",
|
|
148
|
+
description: detail("reflect"),
|
|
149
|
+
parameters: z.object({
|
|
150
|
+
ids: z.array(z.string()).describe("Encounter ids to reflect on (selective consumption)"),
|
|
151
|
+
id: z.string().describe("Experience id \u2014 keywords from the experience content joined by hyphens"),
|
|
152
|
+
experience: z.string().optional().describe("Gherkin Feature source for the experience")
|
|
153
|
+
}),
|
|
154
|
+
execute: async ({ ids, id, experience }) => {
|
|
155
|
+
return await state.requireRole().reflect(ids, experience, id);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
server.addTool({
|
|
159
|
+
name: "realize",
|
|
160
|
+
description: detail("realize"),
|
|
161
|
+
parameters: z.object({
|
|
162
|
+
ids: z.array(z.string()).describe("Experience ids to distill into a principle"),
|
|
163
|
+
id: z.string().describe("Principle id \u2014 keywords from the principle content joined by hyphens"),
|
|
164
|
+
principle: z.string().optional().describe("Gherkin Feature source for the principle")
|
|
165
|
+
}),
|
|
166
|
+
execute: async ({ ids, id, principle }) => {
|
|
167
|
+
return await state.requireRole().realize(ids, principle, id);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
server.addTool({
|
|
171
|
+
name: "master",
|
|
172
|
+
description: detail("master"),
|
|
173
|
+
parameters: z.object({
|
|
174
|
+
ids: z.array(z.string()).optional().describe("Experience ids to distill into a procedure"),
|
|
175
|
+
id: z.string().describe("Procedure id \u2014 keywords from the procedure content joined by hyphens"),
|
|
176
|
+
procedure: z.string().describe("Gherkin Feature source for the procedure")
|
|
177
|
+
}),
|
|
178
|
+
execute: async ({ ids, id, procedure }) => {
|
|
179
|
+
return await state.requireRole().master(procedure, id, ids);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
server.addTool({
|
|
183
|
+
name: "forget",
|
|
184
|
+
description: detail("forget"),
|
|
185
|
+
parameters: z.object({
|
|
186
|
+
id: z.string().describe("Id of the node to remove (principle, procedure, experience, encounter, etc.)")
|
|
187
|
+
}),
|
|
188
|
+
execute: async ({ id }) => {
|
|
189
|
+
return await state.requireRole().forget(id);
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
server.addTool({
|
|
193
|
+
name: "skill",
|
|
194
|
+
description: detail("skill"),
|
|
195
|
+
parameters: z.object({
|
|
196
|
+
locator: z.string().describe("ResourceX locator for the skill (e.g. deepractice/role-management)")
|
|
197
|
+
}),
|
|
198
|
+
execute: async ({ locator }) => {
|
|
199
|
+
return await state.requireRole().skill(locator);
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
server.addTool({
|
|
203
|
+
name: "use",
|
|
204
|
+
description: detail("use"),
|
|
205
|
+
parameters: z.object({
|
|
206
|
+
locator: z.string().describe(
|
|
207
|
+
"Locator string. !namespace.method for RoleX commands, or a ResourceX locator for resources"
|
|
208
|
+
),
|
|
209
|
+
args: z.record(z.unknown()).optional().describe("Named arguments for the command or resource")
|
|
210
|
+
}),
|
|
211
|
+
execute: async ({ locator, args }) => {
|
|
212
|
+
const result = await state.requireRole().use(locator, args);
|
|
213
|
+
if (result == null) return `${locator} done.`;
|
|
214
|
+
if (typeof result === "string") return result;
|
|
215
|
+
return JSON.stringify(result, null, 2);
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
server.addTool({
|
|
219
|
+
name: "direct",
|
|
220
|
+
description: detail("direct"),
|
|
221
|
+
parameters: z.object({
|
|
222
|
+
locator: z.string().describe(
|
|
223
|
+
"Locator string. !namespace.method for RoleX commands, or a ResourceX locator for resources"
|
|
224
|
+
),
|
|
225
|
+
args: z.record(z.unknown()).optional().describe("Named arguments for the command or resource")
|
|
226
|
+
}),
|
|
227
|
+
execute: async ({ locator, args }) => {
|
|
228
|
+
await ensureInit();
|
|
229
|
+
const result = await rolex.direct(locator, args);
|
|
230
|
+
if (result == null) return `${locator} done.`;
|
|
231
|
+
if (typeof result === "string") return result;
|
|
232
|
+
if (locator.startsWith("!project.")) {
|
|
233
|
+
const action = locator.slice("!project.".length);
|
|
234
|
+
const opResult = result;
|
|
235
|
+
return renderProjectResult(action, opResult.state);
|
|
236
|
+
}
|
|
237
|
+
return JSON.stringify(result, null, 2);
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
server.addResource({
|
|
241
|
+
uri: "rolex://noop",
|
|
242
|
+
name: "_noop",
|
|
243
|
+
description: "",
|
|
244
|
+
async load() {
|
|
245
|
+
return { text: "" };
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
server.addResourceTemplate({
|
|
249
|
+
uriTemplate: "rolex://noop/{id}",
|
|
250
|
+
name: "_noop_tpl",
|
|
251
|
+
description: "",
|
|
252
|
+
arguments: [{ name: "id", description: "", required: false }],
|
|
253
|
+
async load() {
|
|
254
|
+
return { text: "" };
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
server.addPrompt({
|
|
258
|
+
name: "_noop",
|
|
259
|
+
description: "",
|
|
260
|
+
async load() {
|
|
261
|
+
return "";
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
export {
|
|
265
|
+
ensureInit,
|
|
266
|
+
server
|
|
267
|
+
};
|
|
268
|
+
//# sourceMappingURL=src-FTC42CJX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/instructions.ts","../src/state.ts"],"sourcesContent":["/**\n * @rolexjs/mcp-server — individual-level MCP tools.\n *\n * Pure pass-through: all rendering happens in rolexjs.\n * MCP only translates protocol calls to API calls.\n */\n\nimport { localPlatform } from \"@rolexjs/local-platform\";\nimport { FastMCP } from \"fastmcp\";\nimport { createRoleX, detail, type ProjectAction, renderProjectResult, type State } from \"rolexjs\";\n\nimport { z } from \"zod\";\nimport { instructions } from \"./instructions.js\";\nimport { McpState } from \"./state.js\";\n\n// ========== Setup (lazy init — server must start before rolex bootstraps) ==========\n\nlet rolex: Awaited<ReturnType<typeof createRoleX>>;\nlet initPromise: Promise<void> | null = null;\n\nfunction ensureInit(): Promise<void> {\n if (!initPromise) {\n initPromise = (async () => {\n rolex = await createRoleX(\n localPlatform({\n bootstrap: [\"npm:@rolexjs/genesis\"],\n })\n );\n await rolex.genesis();\n })();\n }\n return initPromise;\n}\n\nconst state = new McpState();\n\n// ========== Server ==========\n\nconst server = new FastMCP({\n name: \"rolex\",\n version: \"0.12.0\",\n instructions,\n});\n\n// ========== Tools: Role ==========\n\nserver.addTool({\n name: \"activate\",\n description: detail(\"activate\"),\n parameters: z.object({\n roleId: z.string().describe(\"Role name to activate\"),\n }),\n execute: async ({ roleId }) => {\n await ensureInit();\n try {\n const role = await rolex.activate(roleId);\n state.role = role;\n return await role.project();\n } catch {\n const census = await rolex.direct<string>(\"!census.list\");\n throw new Error(\n `\"${roleId}\" not found. Available:\\n\\n${census}\\n\\nTry again with the correct id or alias.`\n );\n }\n },\n});\n\nserver.addTool({\n name: \"focus\",\n description: detail(\"focus\"),\n parameters: z.object({\n id: z.string().optional().describe(\"Goal id to switch to. Omit to view current.\"),\n }),\n execute: async ({ id }) => {\n return await state.requireRole().focus(id);\n },\n});\n\n// ========== Tools: Execution ==========\n\nserver.addTool({\n name: \"want\",\n description: detail(\"want\"),\n parameters: z.object({\n id: z.string().describe(\"Goal id (used for focus/reference)\"),\n goal: z.string().describe(\"Gherkin Feature source describing the goal\"),\n }),\n execute: async ({ id, goal }) => {\n return await state.requireRole().want(goal, id);\n },\n});\n\nserver.addTool({\n name: \"plan\",\n description: detail(\"plan\"),\n parameters: z.object({\n id: z.string().describe(\"Plan id — keywords from the plan content joined by hyphens\"),\n plan: z.string().describe(\"Gherkin Feature source describing the plan\"),\n after: z\n .string()\n .optional()\n .describe(\"Plan id this plan follows (sequential/phase relationship)\"),\n fallback: z\n .string()\n .optional()\n .describe(\"Plan id this plan is a backup for (alternative/strategy relationship)\"),\n }),\n execute: async ({ id, plan, after, fallback }) => {\n return await state.requireRole().plan(plan, id, after, fallback);\n },\n});\n\nserver.addTool({\n name: \"todo\",\n description: detail(\"todo\"),\n parameters: z.object({\n id: z.string().describe(\"Task id (used for finish/reference)\"),\n task: z.string().describe(\"Gherkin Feature source describing the task\"),\n }),\n execute: async ({ id, task }) => {\n return await state.requireRole().todo(task, id);\n },\n});\n\nserver.addTool({\n name: \"finish\",\n description: detail(\"finish\"),\n parameters: z.object({\n id: z.string().describe(\"Task id to finish\"),\n encounter: z.string().optional().describe(\"Optional Gherkin Feature describing what happened\"),\n }),\n execute: async ({ id, encounter }) => {\n return await state.requireRole().finish(id, encounter);\n },\n});\n\nserver.addTool({\n name: \"complete\",\n description: detail(\"complete\"),\n parameters: z.object({\n id: z.string().optional().describe(\"Plan id to complete (defaults to focused plan)\"),\n encounter: z.string().optional().describe(\"Optional Gherkin Feature describing what happened\"),\n }),\n execute: async ({ id, encounter }) => {\n return await state.requireRole().complete(id, encounter);\n },\n});\n\nserver.addTool({\n name: \"abandon\",\n description: detail(\"abandon\"),\n parameters: z.object({\n id: z.string().optional().describe(\"Plan id to abandon (defaults to focused plan)\"),\n encounter: z.string().optional().describe(\"Optional Gherkin Feature describing what happened\"),\n }),\n execute: async ({ id, encounter }) => {\n return await state.requireRole().abandon(id, encounter);\n },\n});\n\n// ========== Tools: Cognition ==========\n\nserver.addTool({\n name: \"reflect\",\n description: detail(\"reflect\"),\n parameters: z.object({\n ids: z.array(z.string()).describe(\"Encounter ids to reflect on (selective consumption)\"),\n id: z\n .string()\n .describe(\"Experience id — keywords from the experience content joined by hyphens\"),\n experience: z.string().optional().describe(\"Gherkin Feature source for the experience\"),\n }),\n execute: async ({ ids, id, experience }) => {\n return await state.requireRole().reflect(ids, experience, id);\n },\n});\n\nserver.addTool({\n name: \"realize\",\n description: detail(\"realize\"),\n parameters: z.object({\n ids: z.array(z.string()).describe(\"Experience ids to distill into a principle\"),\n id: z.string().describe(\"Principle id — keywords from the principle content joined by hyphens\"),\n principle: z.string().optional().describe(\"Gherkin Feature source for the principle\"),\n }),\n execute: async ({ ids, id, principle }) => {\n return await state.requireRole().realize(ids, principle, id);\n },\n});\n\nserver.addTool({\n name: \"master\",\n description: detail(\"master\"),\n parameters: z.object({\n ids: z.array(z.string()).optional().describe(\"Experience ids to distill into a procedure\"),\n id: z.string().describe(\"Procedure id — keywords from the procedure content joined by hyphens\"),\n procedure: z.string().describe(\"Gherkin Feature source for the procedure\"),\n }),\n execute: async ({ ids, id, procedure }) => {\n return await state.requireRole().master(procedure, id, ids);\n },\n});\n\n// ========== Tools: Knowledge management ==========\n\nserver.addTool({\n name: \"forget\",\n description: detail(\"forget\"),\n parameters: z.object({\n id: z\n .string()\n .describe(\"Id of the node to remove (principle, procedure, experience, encounter, etc.)\"),\n }),\n execute: async ({ id }) => {\n return await state.requireRole().forget(id);\n },\n});\n\n// ========== Tools: Skill loading ==========\n\nserver.addTool({\n name: \"skill\",\n description: detail(\"skill\"),\n parameters: z.object({\n locator: z\n .string()\n .describe(\"ResourceX locator for the skill (e.g. deepractice/role-management)\"),\n }),\n execute: async ({ locator }) => {\n return await state.requireRole().skill(locator);\n },\n});\n\n// ========== Tools: Use ==========\n\nserver.addTool({\n name: \"use\",\n description: detail(\"use\"),\n parameters: z.object({\n locator: z\n .string()\n .describe(\n \"Locator string. !namespace.method for RoleX commands, or a ResourceX locator for resources\"\n ),\n args: z.record(z.unknown()).optional().describe(\"Named arguments for the command or resource\"),\n }),\n execute: async ({ locator, args }) => {\n const result = await state.requireRole().use(locator, args);\n if (result == null) return `${locator} done.`;\n if (typeof result === \"string\") return result;\n return JSON.stringify(result, null, 2);\n },\n});\n\n// ========== Tools: Direct ==========\n\nserver.addTool({\n name: \"direct\",\n description: detail(\"direct\"),\n parameters: z.object({\n locator: z\n .string()\n .describe(\n \"Locator string. !namespace.method for RoleX commands, or a ResourceX locator for resources\"\n ),\n args: z.record(z.unknown()).optional().describe(\"Named arguments for the command or resource\"),\n }),\n execute: async ({ locator, args }) => {\n await ensureInit();\n const result = await rolex.direct(locator, args);\n if (result == null) return `${locator} done.`;\n if (typeof result === \"string\") return result;\n // Render project results as readable text\n if (locator.startsWith(\"!project.\")) {\n const action = locator.slice(\"!project.\".length) as ProjectAction;\n const opResult = result as { state: State };\n return renderProjectResult(action, opResult.state);\n }\n return JSON.stringify(result, null, 2);\n },\n});\n\n// ========== Compatibility: declare empty resources/prompts capabilities ==========\n// Some MCP clients (e.g. Antigravity) probe resources/list and prompts/list\n// after initialize. FastMCP only declares these capabilities when items exist.\n// Register a dummy resource then remove it — forces capability declaration.\n\nserver.addResource({\n uri: \"rolex://noop\",\n name: \"_noop\",\n description: \"\",\n async load() {\n return { text: \"\" };\n },\n});\n\nserver.addResourceTemplate({\n uriTemplate: \"rolex://noop/{id}\",\n name: \"_noop_tpl\",\n description: \"\",\n arguments: [{ name: \"id\", description: \"\", required: false }],\n async load() {\n return { text: \"\" };\n },\n});\n\nserver.addPrompt({\n name: \"_noop\",\n description: \"\",\n async load() {\n return \"\";\n },\n});\n\n// ========== Start ==========\n\nexport { server, ensureInit };\n","/**\n * MCP server instructions — the cognitive framework for AI roles.\n *\n * Assembled from world .feature files in rolexjs descriptions.\n * Each feature describes one independent concern of the RoleX framework.\n */\nimport { world } from \"rolexjs\";\n\nexport const instructions = Object.values(world).join(\"\\n\\n\");\n","/**\n * McpState — thin session holder for the MCP server.\n *\n * Holds the active Role handle. All business logic (state tracking,\n * cognitive hints, encounter/experience registries) lives in Role + RoleContext.\n */\nimport type { Role } from \"rolexjs\";\n\nexport class McpState {\n role: Role | null = null;\n\n requireRole(): Role {\n if (!this.role) throw new Error(\"No active role. Call activate first.\");\n return this.role;\n }\n}\n"],"mappings":";;;AAOA,SAAS,qBAAqB;AAC9B,SAAS,eAAe;AACxB,SAAS,aAAa,QAA4B,2BAAuC;AAEzF,SAAS,SAAS;;;ACLlB,SAAS,aAAa;AAEf,IAAM,eAAe,OAAO,OAAO,KAAK,EAAE,KAAK,MAAM;;;ACArD,IAAM,WAAN,MAAe;AAAA,EACpB,OAAoB;AAAA,EAEpB,cAAoB;AAClB,QAAI,CAAC,KAAK,KAAM,OAAM,IAAI,MAAM,sCAAsC;AACtE,WAAO,KAAK;AAAA,EACd;AACF;;;AFEA,IAAI;AACJ,IAAI,cAAoC;AAExC,SAAS,aAA4B;AACnC,MAAI,CAAC,aAAa;AAChB,mBAAe,YAAY;AACzB,cAAQ,MAAM;AAAA,QACZ,cAAc;AAAA,UACZ,WAAW,CAAC,sBAAsB;AAAA,QACpC,CAAC;AAAA,MACH;AACA,YAAM,MAAM,QAAQ;AAAA,IACtB,GAAG;AAAA,EACL;AACA,SAAO;AACT;AAEA,IAAM,QAAQ,IAAI,SAAS;AAI3B,IAAM,SAAS,IAAI,QAAQ;AAAA,EACzB,MAAM;AAAA,EACN,SAAS;AAAA,EACT;AACF,CAAC;AAID,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,UAAU;AAAA,EAC9B,YAAY,EAAE,OAAO;AAAA,IACnB,QAAQ,EAAE,OAAO,EAAE,SAAS,uBAAuB;AAAA,EACrD,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,OAAO,MAAM;AAC7B,UAAM,WAAW;AACjB,QAAI;AACF,YAAM,OAAO,MAAM,MAAM,SAAS,MAAM;AACxC,YAAM,OAAO;AACb,aAAO,MAAM,KAAK,QAAQ;AAAA,IAC5B,QAAQ;AACN,YAAM,SAAS,MAAM,MAAM,OAAe,cAAc;AACxD,YAAM,IAAI;AAAA,QACR,IAAI,MAAM;AAAA;AAAA,EAA8B,MAAM;AAAA;AAAA;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,OAAO;AAAA,EAC3B,YAAY,EAAE,OAAO;AAAA,IACnB,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,6CAA6C;AAAA,EAClF,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,GAAG,MAAM;AACzB,WAAO,MAAM,MAAM,YAAY,EAAE,MAAM,EAAE;AAAA,EAC3C;AACF,CAAC;AAID,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,MAAM;AAAA,EAC1B,YAAY,EAAE,OAAO;AAAA,IACnB,IAAI,EAAE,OAAO,EAAE,SAAS,oCAAoC;AAAA,IAC5D,MAAM,EAAE,OAAO,EAAE,SAAS,4CAA4C;AAAA,EACxE,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,IAAI,KAAK,MAAM;AAC/B,WAAO,MAAM,MAAM,YAAY,EAAE,KAAK,MAAM,EAAE;AAAA,EAChD;AACF,CAAC;AAED,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,MAAM;AAAA,EAC1B,YAAY,EAAE,OAAO;AAAA,IACnB,IAAI,EAAE,OAAO,EAAE,SAAS,iEAA4D;AAAA,IACpF,MAAM,EAAE,OAAO,EAAE,SAAS,4CAA4C;AAAA,IACtE,OAAO,EACJ,OAAO,EACP,SAAS,EACT,SAAS,2DAA2D;AAAA,IACvE,UAAU,EACP,OAAO,EACP,SAAS,EACT,SAAS,uEAAuE;AAAA,EACrF,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,IAAI,MAAM,OAAO,SAAS,MAAM;AAChD,WAAO,MAAM,MAAM,YAAY,EAAE,KAAK,MAAM,IAAI,OAAO,QAAQ;AAAA,EACjE;AACF,CAAC;AAED,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,MAAM;AAAA,EAC1B,YAAY,EAAE,OAAO;AAAA,IACnB,IAAI,EAAE,OAAO,EAAE,SAAS,qCAAqC;AAAA,IAC7D,MAAM,EAAE,OAAO,EAAE,SAAS,4CAA4C;AAAA,EACxE,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,IAAI,KAAK,MAAM;AAC/B,WAAO,MAAM,MAAM,YAAY,EAAE,KAAK,MAAM,EAAE;AAAA,EAChD;AACF,CAAC;AAED,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,QAAQ;AAAA,EAC5B,YAAY,EAAE,OAAO;AAAA,IACnB,IAAI,EAAE,OAAO,EAAE,SAAS,mBAAmB;AAAA,IAC3C,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mDAAmD;AAAA,EAC/F,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,IAAI,UAAU,MAAM;AACpC,WAAO,MAAM,MAAM,YAAY,EAAE,OAAO,IAAI,SAAS;AAAA,EACvD;AACF,CAAC;AAED,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,UAAU;AAAA,EAC9B,YAAY,EAAE,OAAO;AAAA,IACnB,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gDAAgD;AAAA,IACnF,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mDAAmD;AAAA,EAC/F,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,IAAI,UAAU,MAAM;AACpC,WAAO,MAAM,MAAM,YAAY,EAAE,SAAS,IAAI,SAAS;AAAA,EACzD;AACF,CAAC;AAED,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,SAAS;AAAA,EAC7B,YAAY,EAAE,OAAO;AAAA,IACnB,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,+CAA+C;AAAA,IAClF,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mDAAmD;AAAA,EAC/F,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,IAAI,UAAU,MAAM;AACpC,WAAO,MAAM,MAAM,YAAY,EAAE,QAAQ,IAAI,SAAS;AAAA,EACxD;AACF,CAAC;AAID,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,SAAS;AAAA,EAC7B,YAAY,EAAE,OAAO;AAAA,IACnB,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,qDAAqD;AAAA,IACvF,IAAI,EACD,OAAO,EACP,SAAS,6EAAwE;AAAA,IACpF,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,2CAA2C;AAAA,EACxF,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,KAAK,IAAI,WAAW,MAAM;AAC1C,WAAO,MAAM,MAAM,YAAY,EAAE,QAAQ,KAAK,YAAY,EAAE;AAAA,EAC9D;AACF,CAAC;AAED,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,SAAS;AAAA,EAC7B,YAAY,EAAE,OAAO;AAAA,IACnB,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,4CAA4C;AAAA,IAC9E,IAAI,EAAE,OAAO,EAAE,SAAS,2EAAsE;AAAA,IAC9F,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,0CAA0C;AAAA,EACtF,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,KAAK,IAAI,UAAU,MAAM;AACzC,WAAO,MAAM,MAAM,YAAY,EAAE,QAAQ,KAAK,WAAW,EAAE;AAAA,EAC7D;AACF,CAAC;AAED,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,QAAQ;AAAA,EAC5B,YAAY,EAAE,OAAO;AAAA,IACnB,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,4CAA4C;AAAA,IACzF,IAAI,EAAE,OAAO,EAAE,SAAS,2EAAsE;AAAA,IAC9F,WAAW,EAAE,OAAO,EAAE,SAAS,0CAA0C;AAAA,EAC3E,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,KAAK,IAAI,UAAU,MAAM;AACzC,WAAO,MAAM,MAAM,YAAY,EAAE,OAAO,WAAW,IAAI,GAAG;AAAA,EAC5D;AACF,CAAC;AAID,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,QAAQ;AAAA,EAC5B,YAAY,EAAE,OAAO;AAAA,IACnB,IAAI,EACD,OAAO,EACP,SAAS,8EAA8E;AAAA,EAC5F,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,GAAG,MAAM;AACzB,WAAO,MAAM,MAAM,YAAY,EAAE,OAAO,EAAE;AAAA,EAC5C;AACF,CAAC;AAID,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,OAAO;AAAA,EAC3B,YAAY,EAAE,OAAO;AAAA,IACnB,SAAS,EACN,OAAO,EACP,SAAS,oEAAoE;AAAA,EAClF,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,QAAQ,MAAM;AAC9B,WAAO,MAAM,MAAM,YAAY,EAAE,MAAM,OAAO;AAAA,EAChD;AACF,CAAC;AAID,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,KAAK;AAAA,EACzB,YAAY,EAAE,OAAO;AAAA,IACnB,SAAS,EACN,OAAO,EACP;AAAA,MACC;AAAA,IACF;AAAA,IACF,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,6CAA6C;AAAA,EAC/F,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,SAAS,KAAK,MAAM;AACpC,UAAM,SAAS,MAAM,MAAM,YAAY,EAAE,IAAI,SAAS,IAAI;AAC1D,QAAI,UAAU,KAAM,QAAO,GAAG,OAAO;AACrC,QAAI,OAAO,WAAW,SAAU,QAAO;AACvC,WAAO,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,EACvC;AACF,CAAC;AAID,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,QAAQ;AAAA,EAC5B,YAAY,EAAE,OAAO;AAAA,IACnB,SAAS,EACN,OAAO,EACP;AAAA,MACC;AAAA,IACF;AAAA,IACF,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,6CAA6C;AAAA,EAC/F,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,SAAS,KAAK,MAAM;AACpC,UAAM,WAAW;AACjB,UAAM,SAAS,MAAM,MAAM,OAAO,SAAS,IAAI;AAC/C,QAAI,UAAU,KAAM,QAAO,GAAG,OAAO;AACrC,QAAI,OAAO,WAAW,SAAU,QAAO;AAEvC,QAAI,QAAQ,WAAW,WAAW,GAAG;AACnC,YAAM,SAAS,QAAQ,MAAM,YAAY,MAAM;AAC/C,YAAM,WAAW;AACjB,aAAO,oBAAoB,QAAQ,SAAS,KAAK;AAAA,IACnD;AACA,WAAO,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,EACvC;AACF,CAAC;AAOD,OAAO,YAAY;AAAA,EACjB,KAAK;AAAA,EACL,MAAM;AAAA,EACN,aAAa;AAAA,EACb,MAAM,OAAO;AACX,WAAO,EAAE,MAAM,GAAG;AAAA,EACpB;AACF,CAAC;AAED,OAAO,oBAAoB;AAAA,EACzB,aAAa;AAAA,EACb,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW,CAAC,EAAE,MAAM,MAAM,aAAa,IAAI,UAAU,MAAM,CAAC;AAAA,EAC5D,MAAM,OAAO;AACX,WAAO,EAAE,MAAM,GAAG;AAAA,EACpB;AACF,CAAC;AAED,OAAO,UAAU;AAAA,EACf,MAAM;AAAA,EACN,aAAa;AAAA,EACb,MAAM,OAAO;AACX,WAAO;AAAA,EACT;AACF,CAAC;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rolexjs/mcp-server",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.3",
|
|
4
4
|
"description": "MCP server for Rolex — expose RDD role management as MCP tools",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"rolex",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"main": "./dist/index.js",
|
|
23
23
|
"types": "./dist/index.d.ts",
|
|
24
24
|
"bin": {
|
|
25
|
-
"rolex-mcp": "./dist/
|
|
25
|
+
"rolex-mcp": "./dist/cli.js"
|
|
26
26
|
},
|
|
27
27
|
"exports": {
|
|
28
28
|
".": {
|
|
@@ -41,10 +41,10 @@
|
|
|
41
41
|
"clean": "rm -rf dist"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@rolexjs/genesis": "~1.6.
|
|
45
|
-
"@rolexjs/local-platform": "~1.6.
|
|
44
|
+
"@rolexjs/genesis": "~1.6.3",
|
|
45
|
+
"@rolexjs/local-platform": "~1.6.3",
|
|
46
46
|
"fastmcp": "^3.34.0",
|
|
47
|
-
"rolexjs": "~1.6.
|
|
47
|
+
"rolexjs": "~1.6.3",
|
|
48
48
|
"zod": "^3.25.0"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|