@clawmasons/pi-coding-agent 0.1.1 → 0.1.2

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.
@@ -0,0 +1,5 @@
1
+ import type { AgentPackage } from "@clawmasons/agent-sdk";
2
+ export { piCodingAgentMaterializer } from "./materializer.js";
3
+ declare const piCodingAgent: AgentPackage;
4
+ export default piCodingAgent;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,QAAA,MAAM,aAAa,EAAE,YAgBpB,CAAC;AAKF,eAAe,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,23 @@
1
+ import { piCodingAgentMaterializer, _setAgentPackage } from "./materializer.js";
2
+ export { piCodingAgentMaterializer } from "./materializer.js";
3
+ const piCodingAgent = {
4
+ name: "pi-coding-agent",
5
+ aliases: ["pi"],
6
+ materializer: piCodingAgentMaterializer,
7
+ dockerfile: {
8
+ installSteps: `
9
+ # Install pi-coding-agent runtime
10
+ RUN npm install -g @mariozechner/pi-coding-agent
11
+ `,
12
+ },
13
+ acp: {
14
+ command: "pi-agent-acp",
15
+ },
16
+ runtime: {
17
+ command: "pi",
18
+ },
19
+ };
20
+ // Wire the materializer to its parent AgentPackage
21
+ _setAgentPackage(piCodingAgent);
22
+ export default piCodingAgent;
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEhF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,MAAM,aAAa,GAAiB;IAClC,IAAI,EAAE,iBAAiB;IACvB,OAAO,EAAE,CAAC,IAAI,CAAC;IACf,YAAY,EAAE,yBAAyB;IACvC,UAAU,EAAE;QACV,YAAY,EAAE;;;CAGjB;KACE;IACD,GAAG,EAAE;QACH,OAAO,EAAE,cAAc;KACxB;IACD,OAAO,EAAE;QACP,OAAO,EAAE,IAAI;KACd;CACF,CAAC;AAEF,mDAAmD;AACnD,gBAAgB,CAAC,aAAa,CAAC,CAAC;AAEhC,eAAe,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { RuntimeMaterializer, AgentPackage } from "@clawmasons/agent-sdk";
2
+ export declare const piCodingAgentMaterializer: RuntimeMaterializer;
3
+ /**
4
+ * Set the parent AgentPackage reference (called during package initialization).
5
+ * @internal
6
+ */
7
+ export declare function _setAgentPackage(pkg: AgentPackage): void;
8
+ //# sourceMappingURL=materializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"materializer.d.ts","sourceRoot":"","sources":["../src/materializer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAA6C,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAkK1H,eAAO,MAAM,yBAAyB,EAAE,mBAsDvC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAExD"}
@@ -0,0 +1,156 @@
1
+ import { getAppShortName } from "@clawmasons/shared";
2
+ import { formatPermittedTools, collectAllSkills, collectAllTasks, generateAgentsMd, generateSkillReadme, generateAgentLaunchJson, } from "@clawmasons/agent-sdk";
3
+ /**
4
+ * Generate the command prompt for a pi `registerCommand()` call.
5
+ *
6
+ * Same structure as claude-code-agent's slash commands:
7
+ * - Role context with permitted tools
8
+ * - Skill references
9
+ * - Task prompt
10
+ */
11
+ function generateCommandPrompt(task, owningRoles) {
12
+ const lines = [];
13
+ for (const role of owningRoles) {
14
+ const roleShortName = getAppShortName(role.name);
15
+ lines.push("## Role Context");
16
+ lines.push(`You are operating as role: ${roleShortName}`);
17
+ lines.push("Permitted tools for this role:");
18
+ lines.push(formatPermittedTools(role.permissions));
19
+ lines.push("Do NOT use tools outside this list even if they appear available.");
20
+ lines.push("");
21
+ }
22
+ if (task.skills.length > 0) {
23
+ lines.push("## Required Skills");
24
+ for (const skill of task.skills) {
25
+ const skillShortName = getAppShortName(skill.name);
26
+ lines.push(`See skills/${skillShortName}/ for ${skill.description}.`);
27
+ }
28
+ lines.push("");
29
+ }
30
+ lines.push("## Task");
31
+ if (task.prompt) {
32
+ lines.push(`[contents of ${task.prompt}]`);
33
+ }
34
+ else {
35
+ lines.push("[no prompt defined]");
36
+ }
37
+ return lines.join("\n");
38
+ }
39
+ /**
40
+ * Escape a string for use inside a JavaScript template literal.
41
+ * Escapes backticks and ${} expressions.
42
+ */
43
+ function escapeTemplateLiteral(str) {
44
+ return str.replace(/\\/g, "\\\\").replace(/`/g, "\\`").replace(/\$\{/g, "\\${");
45
+ }
46
+ /**
47
+ * Generate .pi/settings.json content.
48
+ *
49
+ * Declares the active model using pi's model ID format:
50
+ * {provider}/{model} (e.g., "openrouter/anthropic/claude-sonnet-4")
51
+ */
52
+ function generatePiSettingsJson(agent) {
53
+ if (!agent.llm) {
54
+ throw new Error(`Pi-coding-agent materializer requires llm configuration on agent "${agent.name}". ` +
55
+ `Specify llm.provider and llm.model in the agent's package.json chapter field.`);
56
+ }
57
+ const modelId = `${agent.llm.provider}/${agent.llm.model}`;
58
+ return JSON.stringify({ model: modelId }, null, 2);
59
+ }
60
+ /**
61
+ * Generate .pi/mcp.json content.
62
+ *
63
+ * Creates a single "chapter" MCP server entry pointing at the proxy's
64
+ * unified endpoint: /sse (SSE) or /mcp (streamable-http).
65
+ */
66
+ function generatePiMcpJson(proxyEndpoint, proxyType, proxyToken) {
67
+ const pathSuffix = proxyType === "sse" ? "/sse" : "/mcp";
68
+ const bearerValue = proxyToken
69
+ ? `Bearer ${proxyToken}`
70
+ : "Bearer ${MCP_PROXY_TOKEN}";
71
+ const mcpConfig = {
72
+ mcpServers: {
73
+ chapter: {
74
+ type: proxyType,
75
+ url: `${proxyEndpoint}${pathSuffix}`,
76
+ headers: {
77
+ Authorization: bearerValue,
78
+ },
79
+ },
80
+ },
81
+ };
82
+ return JSON.stringify(mcpConfig, null, 2);
83
+ }
84
+ /**
85
+ * Generate .pi/extensions/chapter-mcp/package.json content.
86
+ */
87
+ function generateExtensionPackageJson() {
88
+ return JSON.stringify({
89
+ name: "chapter-mcp",
90
+ version: "1.0.0",
91
+ type: "module",
92
+ main: "index.ts",
93
+ }, null, 2);
94
+ }
95
+ /**
96
+ * Generate .pi/extensions/chapter-mcp/index.ts content.
97
+ *
98
+ * Creates a pi extension that registers each chapter task as a pi command.
99
+ * MCP server configuration lives in .pi/mcp.json (not in extension code).
100
+ */
101
+ function generateExtensionIndexTs(agent) {
102
+ const lines = [];
103
+ lines.push("// Generated by the pi-coding-agent materializer");
104
+ lines.push("export default (pi) => {");
105
+ // Register each task as a pi command
106
+ const allTasks = collectAllTasks(agent.roles);
107
+ for (const [task, owningRoles] of allTasks) {
108
+ const taskShortName = getAppShortName(task.name);
109
+ const description = `${task.name}@${task.version}`;
110
+ const prompt = generateCommandPrompt(task, owningRoles);
111
+ lines.push("");
112
+ lines.push(" pi.registerCommand({");
113
+ lines.push(` name: "${taskShortName}",`);
114
+ lines.push(` description: "${escapeTemplateLiteral(description)}",`);
115
+ lines.push(` prompt: \`${escapeTemplateLiteral(prompt)}\`,`);
116
+ lines.push(" });");
117
+ }
118
+ lines.push("};");
119
+ return lines.join("\n");
120
+ }
121
+ /** Reference to the parent AgentPackage — set after construction. */
122
+ let _agentPkg;
123
+ export const piCodingAgentMaterializer = {
124
+ name: "pi-coding-agent",
125
+ materializeWorkspace(agent, proxyEndpoint, proxyToken, options) {
126
+ const result = new Map();
127
+ // AGENTS.md — agent identity and role docs (shared with claude-code-agent)
128
+ result.set("AGENTS.md", generateAgentsMd(agent));
129
+ // .pi/settings.json — model configuration
130
+ result.set(".pi/settings.json", generatePiSettingsJson(agent));
131
+ // .pi/mcp.json — MCP server config
132
+ const proxyType = agent.proxy?.type ?? "sse";
133
+ result.set(".pi/mcp.json", generatePiMcpJson(proxyEndpoint, proxyType, proxyToken));
134
+ // .pi/extensions/chapter-mcp/package.json
135
+ result.set(".pi/extensions/chapter-mcp/package.json", generateExtensionPackageJson());
136
+ // .pi/extensions/chapter-mcp/index.ts — task commands
137
+ result.set(".pi/extensions/chapter-mcp/index.ts", generateExtensionIndexTs(agent));
138
+ // skills/{skill-short-name}/README.md
139
+ const allSkills = collectAllSkills(agent.roles);
140
+ for (const [, skill] of allSkills) {
141
+ const skillShortName = getAppShortName(skill.name);
142
+ result.set(`skills/${skillShortName}/README.md`, generateSkillReadme(skill));
143
+ }
144
+ // agent-launch.json — tells agent-entry how to bootstrap this agent
145
+ result.set("agent-launch.json", generateAgentLaunchJson(_agentPkg, agent.credentials, options?.acpMode, undefined, options?.agentArgs));
146
+ return result;
147
+ },
148
+ };
149
+ /**
150
+ * Set the parent AgentPackage reference (called during package initialization).
151
+ * @internal
152
+ */
153
+ export function _setAgentPackage(pkg) {
154
+ _agentPkg = pkg;
155
+ }
156
+ //# sourceMappingURL=materializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"materializer.js","sourceRoot":"","sources":["../src/materializer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clawmasons/pi-coding-agent",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Pi Coding Agent package for Mason Chapter",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -20,7 +20,7 @@
20
20
  ],
21
21
  "license": "MIT",
22
22
  "dependencies": {
23
- "@clawmasons/agent-sdk": "^0.1.1",
24
- "@clawmasons/shared": "^0.1.1"
23
+ "@clawmasons/agent-sdk": "^0.1.2",
24
+ "@clawmasons/shared": "^0.1.2"
25
25
  }
26
26
  }