@rolexjs/mcp-server 0.9.0 → 0.9.1
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/index.js +13 -3
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -180,9 +180,10 @@ server.addTool({
|
|
|
180
180
|
parameters: z.object({
|
|
181
181
|
operation: z.enum(["hire", "fire", "appoint", "dismiss"]).describe("The organization operation to perform"),
|
|
182
182
|
name: z.string().describe("Role name to hire, fire, appoint, or dismiss"),
|
|
183
|
-
position: z.string().optional().describe("Position name (for appoint)")
|
|
183
|
+
position: z.string().optional().describe("Position name (for appoint)"),
|
|
184
|
+
orgName: z.string().optional().describe("Target organization name (for hire, required when multiple organizations exist)")
|
|
184
185
|
}),
|
|
185
|
-
execute: safeTool("organization", async ({ operation, name, position }) => {
|
|
186
|
+
execute: safeTool("organization", async ({ operation, name, position, orgName: targetOrg }) => {
|
|
186
187
|
const denied = requireNuwa();
|
|
187
188
|
if (denied) return denied;
|
|
188
189
|
const dir = rolex.directory();
|
|
@@ -191,7 +192,16 @@ server.addTool({
|
|
|
191
192
|
}
|
|
192
193
|
let orgName;
|
|
193
194
|
if (operation === "hire") {
|
|
194
|
-
|
|
195
|
+
if (targetOrg) {
|
|
196
|
+
orgName = targetOrg;
|
|
197
|
+
} else if (dir.organizations.length === 1) {
|
|
198
|
+
orgName = dir.organizations[0].name;
|
|
199
|
+
} else {
|
|
200
|
+
const orgNames = dir.organizations.map((o) => o.name).join(", ");
|
|
201
|
+
throw new Error(
|
|
202
|
+
`Multiple organizations exist (${orgNames}). Specify orgName to indicate which one.`
|
|
203
|
+
);
|
|
204
|
+
}
|
|
195
205
|
} else {
|
|
196
206
|
const assignment = platform.getAssignment(name);
|
|
197
207
|
orgName = assignment?.org ?? dir.organizations[0].name;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @rolexjs/mcp-server\n *\n * MCP server for Rolex — Role-Driven Development.\n *\n * Three-entity architecture:\n * Role = WHO (identity, goals)\n * Organization = WHERE (structure, nesting)\n * Position = WHAT (duties, boundaries)\n *\n * Tools:\n * society — Admin: born, found, establish, directory, find, teach\n * organization — Admin: hire, fire, appoint, dismiss\n * identity — Activate a role\n * growup/focus/want/plan/todo/achieve/abandon/finish — Role lifecycle\n *\n * Usage:\n * rolex-mcp [.rolex-dir]\n */\n\nimport { FastMCP } from \"fastmcp\";\nimport { z } from \"zod\";\nimport {\n Rolex,\n Organization,\n Role,\n Position,\n INSTRUCTIONS,\n DESC_SOCIETY,\n DESC_ORGANIZATION,\n DESC_GROWUP,\n DESC_IDENTITY,\n DESC_FOCUS,\n DESC_WANT,\n DESC_PLAN,\n DESC_TODO,\n DESC_ACHIEVE,\n DESC_ABANDON,\n DESC_REFLECT,\n DESC_FINISH,\n renderFeatures,\n renderFeature,\n renderStatusBar,\n renderError,\n next,\n NEXT,\n nextHire,\n nextFinish,\n bootstrap,\n} from \"rolexjs\";\nimport { LocalPlatform } from \"@rolexjs/local-platform\";\n\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\n\nconst DEFAULT_ROLEX_DIR = join(homedir(), \".rolex\");\nconst rolexDir = process.argv[2] || process.env.ROLEX_DIR || DEFAULT_ROLEX_DIR;\nconst platform = new LocalPlatform(rolexDir);\nbootstrap(platform);\nconst rolex = new Rolex(platform);\n\nlet currentRole: Role | null = null;\nlet currentRoleName: string = \"\";\n\nconst server = new FastMCP({\n name: \"Rolex MCP Server\",\n version: \"0.2.0\",\n instructions: INSTRUCTIONS,\n});\n\n// ========== Helpers ==========\n\nfunction requireRole(): Role {\n if (!currentRole) {\n throw new Error(\"No active role. Call identity(roleId) first to activate a role.\");\n }\n return currentRole;\n}\n\nfunction requireNuwa(): string | null {\n if (!currentRole || currentRoleName !== \"nuwa\") {\n const who = currentRoleName || \"none\";\n return `Permission denied. Only nuwa can use this tool. Current role: ${who}`;\n }\n return null;\n}\n\n/**\n * Wrap a tool execute function with unified error handling.\n * Catches errors and renders them as formatted markdown.\n */\nfunction safeTool<T>(\n toolName: string,\n fn: (args: T) => Promise<string>\n): (args: T) => Promise<string> {\n return async (args: T) => {\n try {\n return await fn(args);\n } catch (error) {\n throw new Error(renderError(toolName, error));\n }\n };\n}\n\n// ========== Society (folded) ==========\n\nserver.addTool({\n name: \"society\",\n description: DESC_SOCIETY,\n parameters: z.object({\n operation: z\n .enum([\"born\", \"found\", \"establish\", \"directory\", \"find\", \"teach\"])\n .describe(\"The society operation to perform\"),\n name: z\n .string()\n .optional()\n .describe(\n \"Role name (born/find/teach), organization name (found), or position name (establish)\"\n ),\n source: z\n .string()\n .optional()\n .describe(\n \"Gherkin feature source (born: persona, teach: knowledge, found: org description, establish: position duties)\"\n ),\n parent: z.string().optional().describe(\"Parent organization name (for found with nesting)\"),\n orgName: z.string().optional().describe(\"Organization name (for establish)\"),\n roleId: z.string().optional().describe(\"Target role name for teach operation\"),\n type: z\n .enum([\"knowledge\", \"experience\", \"voice\"])\n .optional()\n .describe(\"Growth dimension for teach operation\"),\n dimensionName: z\n .string()\n .optional()\n .describe(\"Name for the knowledge being taught (e.g. 'distributed-systems')\"),\n }),\n execute: safeTool(\n \"society\",\n async ({ operation, name, source, parent, orgName, roleId, type, dimensionName }) => {\n const denied = requireNuwa();\n if (denied) return denied;\n switch (operation) {\n case \"born\": {\n if (!name || !source) throw new Error(\"born requires: name, source\");\n const feature = rolex.born(name, source);\n return next(`Role born: ${feature.name}`, NEXT.born);\n }\n case \"found\": {\n if (!name) throw new Error(\"found requires: name\");\n rolex.found(name, source, parent);\n return next(`Organization founded: ${name}`, NEXT.found);\n }\n case \"establish\": {\n if (!name || !source || !orgName)\n throw new Error(\"establish requires: name, source, orgName\");\n rolex.establish(name, source, orgName);\n return next(`Position established: ${name} in ${orgName}`, NEXT.establish);\n }\n case \"directory\": {\n const dir = rolex.directory();\n const lines: string[] = [];\n\n // Organizations with positions and members\n if (dir.organizations.length > 0) {\n for (const org of dir.organizations) {\n const parentStr = org.parent ? ` (parent: ${org.parent})` : \"\";\n lines.push(`Organization: ${org.name}${parentStr}`);\n\n if (org.positions.length > 0) {\n lines.push(\" Positions:\");\n for (const pos of org.positions) {\n const posInfo = platform.getPosition(pos, org.name);\n const holder = posInfo?.assignedRole ? ` ← ${posInfo.assignedRole}` : \" (vacant)\";\n lines.push(` - ${pos}${holder}`);\n }\n }\n\n if (org.members.length > 0) {\n lines.push(\" Members:\");\n for (const member of org.members) {\n const role = dir.roles.find((r) => r.name === member);\n const state = role ? ` [${role.state}]` : \"\";\n const pos = role?.position ? ` → ${role.position}` : \"\";\n lines.push(` - ${member}${state}${pos}`);\n }\n }\n }\n }\n\n // Free roles (not in any org)\n const freeRoles = dir.roles.filter((r) => r.state === \"free\");\n if (freeRoles.length > 0) {\n if (lines.length > 0) lines.push(\"\");\n lines.push(\"Free Roles:\");\n for (const role of freeRoles) {\n lines.push(` - ${role.name}`);\n }\n }\n\n return lines.join(\"\\n\") || \"No roles or organizations found.\";\n }\n case \"find\": {\n if (!name) throw new Error(\"find requires: name\");\n const result = rolex.find(name);\n if (result instanceof Organization) {\n const info = result.info();\n const parentStr = info.parent ? ` (parent: ${info.parent})` : \"\";\n return `Organization: ${info.name}${parentStr}\\nMembers: ${info.members.length}\\nPositions: ${info.positions.join(\", \") || \"none\"}`;\n }\n if (result instanceof Position) {\n const info = result.info();\n return `Position: ${info.name} in ${info.org}\\nState: ${info.state}\\nAssigned: ${info.assignedRole || \"none\"}\\nDuties: ${info.duties.length}`;\n }\n const features = (result as Role).identity();\n return renderFeatures(features);\n }\n case \"teach\": {\n if (!roleId || !type || !dimensionName || !source)\n throw new Error(\"teach requires: roleId, type, dimensionName, source\");\n const feature = rolex.teach(roleId, type, dimensionName, source);\n return next(`Taught ${type}: ${feature.name}`, NEXT.teach);\n }\n default:\n throw new Error(`Unknown society operation: ${operation}`);\n }\n }\n ),\n});\n\n// ========== Organization (folded) ==========\n\nserver.addTool({\n name: \"organization\",\n description: DESC_ORGANIZATION,\n parameters: z.object({\n operation: z\n .enum([\"hire\", \"fire\", \"appoint\", \"dismiss\"])\n .describe(\"The organization operation to perform\"),\n name: z.string().describe(\"Role name to hire, fire, appoint, or dismiss\"),\n position: z.string().optional().describe(\"Position name (for appoint)\"),\n }),\n execute: safeTool(\"organization\", async ({ operation, name, position }) => {\n const denied = requireNuwa();\n if (denied) return denied;\n // Find the first org, or the org the role belongs to\n const dir = rolex.directory();\n if (dir.organizations.length === 0) {\n throw new Error(\"No organization found. Call found() first.\");\n }\n\n // For hire: use first org. For others: find by role assignment or first org.\n let orgName: string;\n if (operation === \"hire\") {\n orgName = dir.organizations[0].name;\n } else {\n const assignment = platform.getAssignment(name);\n orgName = assignment?.org ?? dir.organizations[0].name;\n }\n\n const org = rolex.find(orgName) as Organization;\n\n switch (operation) {\n case \"hire\": {\n org.hire(name);\n return next(`Role hired: ${name} → ${orgName}`, nextHire(name));\n }\n case \"fire\": {\n org.fire(name);\n return next(`Role fired: ${name}`, NEXT.fire);\n }\n case \"appoint\": {\n if (!position) throw new Error(\"appoint requires: name, position\");\n org.appoint(name, position);\n return next(`Role appointed: ${name} → ${position}`, NEXT.appoint);\n }\n case \"dismiss\": {\n org.dismiss(name);\n return next(`Role dismissed: ${name}`, NEXT.dismiss);\n }\n default:\n throw new Error(`Unknown organization operation: ${operation}`);\n }\n }),\n});\n\n// ========== Role Activation ==========\n\nserver.addTool({\n name: \"identity\",\n description: DESC_IDENTITY,\n parameters: z.object({\n roleId: z.string().describe(\"Role name (e.g. 'sean')\"),\n }),\n execute: safeTool(\"identity\", async ({ roleId }) => {\n currentRole = rolex.role(roleId);\n currentRoleName = roleId;\n const features = currentRole.identity();\n const { current } = currentRole.focus();\n const assignment = platform.getAssignment(roleId);\n const statusBar = renderStatusBar(roleId, current, assignment?.org, assignment?.position);\n return `${statusBar}\\n\\n${renderFeatures(features)}`;\n }),\n});\n\n// ========== Role Tools ==========\n\nserver.addTool({\n name: \"growup\",\n description: DESC_GROWUP,\n parameters: z.object({\n type: z\n .enum([\"knowledge\", \"experience\", \"voice\"])\n .describe(\n \"Growth dimension: knowledge (what I know), experience (what I've lived), voice (how I'm perceived)\"\n ),\n name: z\n .string()\n .describe(\"Name for this growth (used as filename, e.g. 'distributed-systems')\"),\n source: z.string().describe(\"Gherkin feature source text\"),\n }),\n execute: safeTool(\"growup\", async ({ type, name, source }) => {\n const role = requireRole();\n const feature = role.growup(type, name, source);\n return next(`Growth added (${type}): ${feature.name}`, NEXT.growup);\n }),\n});\n\nserver.addTool({\n name: \"focus\",\n description: DESC_FOCUS,\n parameters: z.object({\n name: z.string().optional().describe(\"Optional goal name to switch focus to\"),\n }),\n execute: safeTool(\"focus\", async ({ name }) => {\n const role = requireRole();\n const { current, otherGoals } = role.focus(name);\n\n const assignment = platform.getAssignment(currentRoleName);\n const statusBar = renderStatusBar(\n currentRoleName,\n current,\n assignment?.org,\n assignment?.position\n );\n\n if (!current && otherGoals.length === 0)\n return `${statusBar}\\n\\nNo active goal. Use want() to set a new goal.`;\n\n const parts: string[] = [statusBar];\n\n if (current) {\n parts.push(renderFeature(current));\n if (current.plan) {\n parts.push(renderFeature(current.plan));\n }\n for (const task of current.tasks) {\n parts.push(renderFeature(task));\n }\n }\n\n if (otherGoals.length > 0) {\n parts.push(\"Other active goals:\");\n for (const g of otherGoals) {\n parts.push(` - ${g.name}`);\n }\n }\n\n return parts.join(\"\\n\\n\");\n }),\n});\n\nserver.addTool({\n name: \"want\",\n description: DESC_WANT,\n parameters: z.object({\n name: z.string().describe(\"Goal name (used as directory name, e.g. 'local-platform')\"),\n source: z.string().describe(\"Gherkin feature source text for the goal\"),\n testable: z\n .boolean()\n .optional()\n .default(false)\n .describe(\"Whether this goal's scenarios should become persistent automated verification\"),\n }),\n execute: safeTool(\"want\", async ({ name, source, testable }) => {\n const role = requireRole();\n const goal = role.want(name, source, testable);\n return next(`Goal created: ${goal.name}`, NEXT.want);\n }),\n});\n\nserver.addTool({\n name: \"plan\",\n description: DESC_PLAN,\n parameters: z.object({\n source: z.string().describe(\"Gherkin feature source text for the plan\"),\n }),\n execute: safeTool(\"plan\", async ({ source }) => {\n const role = requireRole();\n const p = role.plan(source);\n return next(`Plan created: ${p.name}`, NEXT.plan);\n }),\n});\n\nserver.addTool({\n name: \"todo\",\n description: DESC_TODO,\n parameters: z.object({\n name: z.string().describe(\"Task name (used as filename, e.g. 'implement-loader')\"),\n source: z.string().describe(\"Gherkin feature source text for the task\"),\n testable: z\n .boolean()\n .optional()\n .default(false)\n .describe(\"Whether this task's scenarios should become unit or integration tests\"),\n }),\n execute: safeTool(\"todo\", async ({ name, source, testable }) => {\n const role = requireRole();\n const task = role.todo(name, source, testable);\n return next(`Task created: ${task.name}`, NEXT.todo);\n }),\n});\n\nserver.addTool({\n name: \"achieve\",\n description: DESC_ACHIEVE,\n parameters: z.object({\n experience: z\n .string()\n .optional()\n .describe(\n \"Optional Gherkin feature source capturing what was learned — auto-saved as experience growup\"\n ),\n }),\n execute: safeTool(\"achieve\", async ({ experience }) => {\n const role = requireRole();\n role.achieve(experience);\n const msg = experience ? \"Goal achieved. Experience captured.\" : \"Goal achieved.\";\n return next(msg, NEXT.achieve);\n }),\n});\n\nserver.addTool({\n name: \"abandon\",\n description: DESC_ABANDON,\n parameters: z.object({\n experience: z\n .string()\n .optional()\n .describe(\n \"Optional Gherkin feature source capturing what was learned — auto-saved as experience growup\"\n ),\n }),\n execute: safeTool(\"abandon\", async ({ experience }) => {\n const role = requireRole();\n role.abandon(experience);\n const msg = experience ? \"Goal abandoned. Experience captured.\" : \"Goal abandoned.\";\n return next(msg, NEXT.abandon);\n }),\n});\n\nserver.addTool({\n name: \"reflect\",\n description: DESC_REFLECT,\n parameters: z.object({\n experienceNames: z\n .array(z.string())\n .describe(\n \"Names of experience files to distill (without .experience.identity.feature suffix)\"\n ),\n knowledgeName: z\n .string()\n .describe(\n \"Name for the resulting knowledge (used as filename, e.g. 'authentication-principles')\"\n ),\n knowledgeSource: z.string().describe(\"Gherkin feature source text for the knowledge\"),\n }),\n execute: safeTool(\"reflect\", async ({ experienceNames, knowledgeName, knowledgeSource }) => {\n const role = requireRole();\n const feature = role.reflect(experienceNames, knowledgeName, knowledgeSource);\n return next(\n `Reflected: ${experienceNames.length} experience(s) → knowledge \"${feature.name}\"`,\n NEXT.reflect\n );\n }),\n});\n\nserver.addTool({\n name: \"finish\",\n description: DESC_FINISH,\n parameters: z.object({\n name: z.string().describe(\"Task name to mark as done\"),\n }),\n execute: safeTool(\"finish\", async ({ name }) => {\n const role = requireRole();\n role.finish(name);\n\n // Dynamic hint: check remaining tasks\n const { current } = role.focus();\n const remaining = current\n ? current.tasks.filter((t) => !t.tags?.some((tag) => tag.name === \"@done\")).length\n : -1;\n return next(`Task finished: ${name}`, remaining >= 0 ? nextFinish(remaining) : NEXT.achieve);\n }),\n});\n\nserver.start({\n transportType: \"stdio\",\n});\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @rolexjs/mcp-server\n *\n * MCP server for Rolex — Role-Driven Development.\n *\n * Three-entity architecture:\n * Role = WHO (identity, goals)\n * Organization = WHERE (structure, nesting)\n * Position = WHAT (duties, boundaries)\n *\n * Tools:\n * society — Admin: born, found, establish, directory, find, teach\n * organization — Admin: hire, fire, appoint, dismiss\n * identity — Activate a role\n * growup/focus/want/plan/todo/achieve/abandon/finish — Role lifecycle\n *\n * Usage:\n * rolex-mcp [.rolex-dir]\n */\n\nimport { FastMCP } from \"fastmcp\";\nimport { z } from \"zod\";\nimport {\n Rolex,\n Organization,\n Role,\n Position,\n INSTRUCTIONS,\n DESC_SOCIETY,\n DESC_ORGANIZATION,\n DESC_GROWUP,\n DESC_IDENTITY,\n DESC_FOCUS,\n DESC_WANT,\n DESC_PLAN,\n DESC_TODO,\n DESC_ACHIEVE,\n DESC_ABANDON,\n DESC_REFLECT,\n DESC_FINISH,\n renderFeatures,\n renderFeature,\n renderStatusBar,\n renderError,\n next,\n NEXT,\n nextHire,\n nextFinish,\n bootstrap,\n} from \"rolexjs\";\nimport { LocalPlatform } from \"@rolexjs/local-platform\";\n\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\n\nconst DEFAULT_ROLEX_DIR = join(homedir(), \".rolex\");\nconst rolexDir = process.argv[2] || process.env.ROLEX_DIR || DEFAULT_ROLEX_DIR;\nconst platform = new LocalPlatform(rolexDir);\nbootstrap(platform);\nconst rolex = new Rolex(platform);\n\nlet currentRole: Role | null = null;\nlet currentRoleName: string = \"\";\n\nconst server = new FastMCP({\n name: \"Rolex MCP Server\",\n version: \"0.2.0\",\n instructions: INSTRUCTIONS,\n});\n\n// ========== Helpers ==========\n\nfunction requireRole(): Role {\n if (!currentRole) {\n throw new Error(\"No active role. Call identity(roleId) first to activate a role.\");\n }\n return currentRole;\n}\n\nfunction requireNuwa(): string | null {\n if (!currentRole || currentRoleName !== \"nuwa\") {\n const who = currentRoleName || \"none\";\n return `Permission denied. Only nuwa can use this tool. Current role: ${who}`;\n }\n return null;\n}\n\n/**\n * Wrap a tool execute function with unified error handling.\n * Catches errors and renders them as formatted markdown.\n */\nfunction safeTool<T>(\n toolName: string,\n fn: (args: T) => Promise<string>\n): (args: T) => Promise<string> {\n return async (args: T) => {\n try {\n return await fn(args);\n } catch (error) {\n throw new Error(renderError(toolName, error));\n }\n };\n}\n\n// ========== Society (folded) ==========\n\nserver.addTool({\n name: \"society\",\n description: DESC_SOCIETY,\n parameters: z.object({\n operation: z\n .enum([\"born\", \"found\", \"establish\", \"directory\", \"find\", \"teach\"])\n .describe(\"The society operation to perform\"),\n name: z\n .string()\n .optional()\n .describe(\n \"Role name (born/find/teach), organization name (found), or position name (establish)\"\n ),\n source: z\n .string()\n .optional()\n .describe(\n \"Gherkin feature source (born: persona, teach: knowledge, found: org description, establish: position duties)\"\n ),\n parent: z.string().optional().describe(\"Parent organization name (for found with nesting)\"),\n orgName: z.string().optional().describe(\"Organization name (for establish)\"),\n roleId: z.string().optional().describe(\"Target role name for teach operation\"),\n type: z\n .enum([\"knowledge\", \"experience\", \"voice\"])\n .optional()\n .describe(\"Growth dimension for teach operation\"),\n dimensionName: z\n .string()\n .optional()\n .describe(\"Name for the knowledge being taught (e.g. 'distributed-systems')\"),\n }),\n execute: safeTool(\n \"society\",\n async ({ operation, name, source, parent, orgName, roleId, type, dimensionName }) => {\n const denied = requireNuwa();\n if (denied) return denied;\n switch (operation) {\n case \"born\": {\n if (!name || !source) throw new Error(\"born requires: name, source\");\n const feature = rolex.born(name, source);\n return next(`Role born: ${feature.name}`, NEXT.born);\n }\n case \"found\": {\n if (!name) throw new Error(\"found requires: name\");\n rolex.found(name, source, parent);\n return next(`Organization founded: ${name}`, NEXT.found);\n }\n case \"establish\": {\n if (!name || !source || !orgName)\n throw new Error(\"establish requires: name, source, orgName\");\n rolex.establish(name, source, orgName);\n return next(`Position established: ${name} in ${orgName}`, NEXT.establish);\n }\n case \"directory\": {\n const dir = rolex.directory();\n const lines: string[] = [];\n\n // Organizations with positions and members\n if (dir.organizations.length > 0) {\n for (const org of dir.organizations) {\n const parentStr = org.parent ? ` (parent: ${org.parent})` : \"\";\n lines.push(`Organization: ${org.name}${parentStr}`);\n\n if (org.positions.length > 0) {\n lines.push(\" Positions:\");\n for (const pos of org.positions) {\n const posInfo = platform.getPosition(pos, org.name);\n const holder = posInfo?.assignedRole ? ` ← ${posInfo.assignedRole}` : \" (vacant)\";\n lines.push(` - ${pos}${holder}`);\n }\n }\n\n if (org.members.length > 0) {\n lines.push(\" Members:\");\n for (const member of org.members) {\n const role = dir.roles.find((r) => r.name === member);\n const state = role ? ` [${role.state}]` : \"\";\n const pos = role?.position ? ` → ${role.position}` : \"\";\n lines.push(` - ${member}${state}${pos}`);\n }\n }\n }\n }\n\n // Free roles (not in any org)\n const freeRoles = dir.roles.filter((r) => r.state === \"free\");\n if (freeRoles.length > 0) {\n if (lines.length > 0) lines.push(\"\");\n lines.push(\"Free Roles:\");\n for (const role of freeRoles) {\n lines.push(` - ${role.name}`);\n }\n }\n\n return lines.join(\"\\n\") || \"No roles or organizations found.\";\n }\n case \"find\": {\n if (!name) throw new Error(\"find requires: name\");\n const result = rolex.find(name);\n if (result instanceof Organization) {\n const info = result.info();\n const parentStr = info.parent ? ` (parent: ${info.parent})` : \"\";\n return `Organization: ${info.name}${parentStr}\\nMembers: ${info.members.length}\\nPositions: ${info.positions.join(\", \") || \"none\"}`;\n }\n if (result instanceof Position) {\n const info = result.info();\n return `Position: ${info.name} in ${info.org}\\nState: ${info.state}\\nAssigned: ${info.assignedRole || \"none\"}\\nDuties: ${info.duties.length}`;\n }\n const features = (result as Role).identity();\n return renderFeatures(features);\n }\n case \"teach\": {\n if (!roleId || !type || !dimensionName || !source)\n throw new Error(\"teach requires: roleId, type, dimensionName, source\");\n const feature = rolex.teach(roleId, type, dimensionName, source);\n return next(`Taught ${type}: ${feature.name}`, NEXT.teach);\n }\n default:\n throw new Error(`Unknown society operation: ${operation}`);\n }\n }\n ),\n});\n\n// ========== Organization (folded) ==========\n\nserver.addTool({\n name: \"organization\",\n description: DESC_ORGANIZATION,\n parameters: z.object({\n operation: z\n .enum([\"hire\", \"fire\", \"appoint\", \"dismiss\"])\n .describe(\"The organization operation to perform\"),\n name: z.string().describe(\"Role name to hire, fire, appoint, or dismiss\"),\n position: z.string().optional().describe(\"Position name (for appoint)\"),\n orgName: z\n .string()\n .optional()\n .describe(\"Target organization name (for hire, required when multiple organizations exist)\"),\n }),\n execute: safeTool(\"organization\", async ({ operation, name, position, orgName: targetOrg }) => {\n const denied = requireNuwa();\n if (denied) return denied;\n // Find the first org, or the org the role belongs to\n const dir = rolex.directory();\n if (dir.organizations.length === 0) {\n throw new Error(\"No organization found. Call found() first.\");\n }\n\n // Resolve target organization\n let orgName: string;\n if (operation === \"hire\") {\n if (targetOrg) {\n orgName = targetOrg;\n } else if (dir.organizations.length === 1) {\n orgName = dir.organizations[0].name;\n } else {\n const orgNames = dir.organizations.map((o) => o.name).join(\", \");\n throw new Error(\n `Multiple organizations exist (${orgNames}). Specify orgName to indicate which one.`\n );\n }\n } else {\n const assignment = platform.getAssignment(name);\n orgName = assignment?.org ?? dir.organizations[0].name;\n }\n\n const org = rolex.find(orgName) as Organization;\n\n switch (operation) {\n case \"hire\": {\n org.hire(name);\n return next(`Role hired: ${name} → ${orgName}`, nextHire(name));\n }\n case \"fire\": {\n org.fire(name);\n return next(`Role fired: ${name}`, NEXT.fire);\n }\n case \"appoint\": {\n if (!position) throw new Error(\"appoint requires: name, position\");\n org.appoint(name, position);\n return next(`Role appointed: ${name} → ${position}`, NEXT.appoint);\n }\n case \"dismiss\": {\n org.dismiss(name);\n return next(`Role dismissed: ${name}`, NEXT.dismiss);\n }\n default:\n throw new Error(`Unknown organization operation: ${operation}`);\n }\n }),\n});\n\n// ========== Role Activation ==========\n\nserver.addTool({\n name: \"identity\",\n description: DESC_IDENTITY,\n parameters: z.object({\n roleId: z.string().describe(\"Role name (e.g. 'sean')\"),\n }),\n execute: safeTool(\"identity\", async ({ roleId }) => {\n currentRole = rolex.role(roleId);\n currentRoleName = roleId;\n const features = currentRole.identity();\n const { current } = currentRole.focus();\n const assignment = platform.getAssignment(roleId);\n const statusBar = renderStatusBar(roleId, current, assignment?.org, assignment?.position);\n return `${statusBar}\\n\\n${renderFeatures(features)}`;\n }),\n});\n\n// ========== Role Tools ==========\n\nserver.addTool({\n name: \"growup\",\n description: DESC_GROWUP,\n parameters: z.object({\n type: z\n .enum([\"knowledge\", \"experience\", \"voice\"])\n .describe(\n \"Growth dimension: knowledge (what I know), experience (what I've lived), voice (how I'm perceived)\"\n ),\n name: z\n .string()\n .describe(\"Name for this growth (used as filename, e.g. 'distributed-systems')\"),\n source: z.string().describe(\"Gherkin feature source text\"),\n }),\n execute: safeTool(\"growup\", async ({ type, name, source }) => {\n const role = requireRole();\n const feature = role.growup(type, name, source);\n return next(`Growth added (${type}): ${feature.name}`, NEXT.growup);\n }),\n});\n\nserver.addTool({\n name: \"focus\",\n description: DESC_FOCUS,\n parameters: z.object({\n name: z.string().optional().describe(\"Optional goal name to switch focus to\"),\n }),\n execute: safeTool(\"focus\", async ({ name }) => {\n const role = requireRole();\n const { current, otherGoals } = role.focus(name);\n\n const assignment = platform.getAssignment(currentRoleName);\n const statusBar = renderStatusBar(\n currentRoleName,\n current,\n assignment?.org,\n assignment?.position\n );\n\n if (!current && otherGoals.length === 0)\n return `${statusBar}\\n\\nNo active goal. Use want() to set a new goal.`;\n\n const parts: string[] = [statusBar];\n\n if (current) {\n parts.push(renderFeature(current));\n if (current.plan) {\n parts.push(renderFeature(current.plan));\n }\n for (const task of current.tasks) {\n parts.push(renderFeature(task));\n }\n }\n\n if (otherGoals.length > 0) {\n parts.push(\"Other active goals:\");\n for (const g of otherGoals) {\n parts.push(` - ${g.name}`);\n }\n }\n\n return parts.join(\"\\n\\n\");\n }),\n});\n\nserver.addTool({\n name: \"want\",\n description: DESC_WANT,\n parameters: z.object({\n name: z.string().describe(\"Goal name (used as directory name, e.g. 'local-platform')\"),\n source: z.string().describe(\"Gherkin feature source text for the goal\"),\n testable: z\n .boolean()\n .optional()\n .default(false)\n .describe(\"Whether this goal's scenarios should become persistent automated verification\"),\n }),\n execute: safeTool(\"want\", async ({ name, source, testable }) => {\n const role = requireRole();\n const goal = role.want(name, source, testable);\n return next(`Goal created: ${goal.name}`, NEXT.want);\n }),\n});\n\nserver.addTool({\n name: \"plan\",\n description: DESC_PLAN,\n parameters: z.object({\n source: z.string().describe(\"Gherkin feature source text for the plan\"),\n }),\n execute: safeTool(\"plan\", async ({ source }) => {\n const role = requireRole();\n const p = role.plan(source);\n return next(`Plan created: ${p.name}`, NEXT.plan);\n }),\n});\n\nserver.addTool({\n name: \"todo\",\n description: DESC_TODO,\n parameters: z.object({\n name: z.string().describe(\"Task name (used as filename, e.g. 'implement-loader')\"),\n source: z.string().describe(\"Gherkin feature source text for the task\"),\n testable: z\n .boolean()\n .optional()\n .default(false)\n .describe(\"Whether this task's scenarios should become unit or integration tests\"),\n }),\n execute: safeTool(\"todo\", async ({ name, source, testable }) => {\n const role = requireRole();\n const task = role.todo(name, source, testable);\n return next(`Task created: ${task.name}`, NEXT.todo);\n }),\n});\n\nserver.addTool({\n name: \"achieve\",\n description: DESC_ACHIEVE,\n parameters: z.object({\n experience: z\n .string()\n .optional()\n .describe(\n \"Optional Gherkin feature source capturing what was learned — auto-saved as experience growup\"\n ),\n }),\n execute: safeTool(\"achieve\", async ({ experience }) => {\n const role = requireRole();\n role.achieve(experience);\n const msg = experience ? \"Goal achieved. Experience captured.\" : \"Goal achieved.\";\n return next(msg, NEXT.achieve);\n }),\n});\n\nserver.addTool({\n name: \"abandon\",\n description: DESC_ABANDON,\n parameters: z.object({\n experience: z\n .string()\n .optional()\n .describe(\n \"Optional Gherkin feature source capturing what was learned — auto-saved as experience growup\"\n ),\n }),\n execute: safeTool(\"abandon\", async ({ experience }) => {\n const role = requireRole();\n role.abandon(experience);\n const msg = experience ? \"Goal abandoned. Experience captured.\" : \"Goal abandoned.\";\n return next(msg, NEXT.abandon);\n }),\n});\n\nserver.addTool({\n name: \"reflect\",\n description: DESC_REFLECT,\n parameters: z.object({\n experienceNames: z\n .array(z.string())\n .describe(\n \"Names of experience files to distill (without .experience.identity.feature suffix)\"\n ),\n knowledgeName: z\n .string()\n .describe(\n \"Name for the resulting knowledge (used as filename, e.g. 'authentication-principles')\"\n ),\n knowledgeSource: z.string().describe(\"Gherkin feature source text for the knowledge\"),\n }),\n execute: safeTool(\"reflect\", async ({ experienceNames, knowledgeName, knowledgeSource }) => {\n const role = requireRole();\n const feature = role.reflect(experienceNames, knowledgeName, knowledgeSource);\n return next(\n `Reflected: ${experienceNames.length} experience(s) → knowledge \"${feature.name}\"`,\n NEXT.reflect\n );\n }),\n});\n\nserver.addTool({\n name: \"finish\",\n description: DESC_FINISH,\n parameters: z.object({\n name: z.string().describe(\"Task name to mark as done\"),\n }),\n execute: safeTool(\"finish\", async ({ name }) => {\n const role = requireRole();\n role.finish(name);\n\n // Dynamic hint: check remaining tasks\n const { current } = role.focus();\n const remaining = current\n ? current.tasks.filter((t) => !t.tags?.some((tag) => tag.name === \"@done\")).length\n : -1;\n return next(`Task finished: ${name}`, remaining >= 0 ? nextFinish(remaining) : NEXT.achieve);\n }),\n});\n\nserver.start({\n transportType: \"stdio\",\n});\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rolexjs/mcp-server",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.1",
|
|
4
4
|
"description": "MCP server for Rolex — expose RDD role management as MCP tools",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"rolex",
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"clean": "rm -rf dist"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"rolexjs": "^0.9.
|
|
45
|
-
"@rolexjs/local-platform": "^0.9.
|
|
44
|
+
"rolexjs": "^0.9.1",
|
|
45
|
+
"@rolexjs/local-platform": "^0.9.1",
|
|
46
46
|
"fastmcp": "^3.0.0",
|
|
47
47
|
"zod": "^3.25.0"
|
|
48
48
|
},
|