@polpo-ai/server 0.2.9 → 0.2.11

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.d.ts CHANGED
@@ -24,7 +24,8 @@ export { agentRoutes } from "./routes/agents.js";
24
24
  export { eventRoutes, type EventBridge, type EventClient } from "./routes/events.js";
25
25
  export { configRoutes } from "./routes/config.js";
26
26
  export { fileRoutes, type FileRouteDeps } from "./routes/files.js";
27
- export type { TaskRouteDeps, MissionRouteDeps, PlaybookRouteDeps, ApprovalRouteDeps, ChatRouteDeps, VaultRouteDeps, PeerRouteDeps, NotificationRouteDeps, ScheduleRouteDeps, WatcherRouteDeps, StateRouteDeps, ConfigRouteDeps, AuthRouteDeps, SkillRouteDeps, AgentRouteDeps, } from "./deps.js";
27
+ export { skillRoutes, type SkillRouteDeps } from "./routes/skills.js";
28
+ export type { TaskRouteDeps, MissionRouteDeps, PlaybookRouteDeps, ApprovalRouteDeps, ChatRouteDeps, VaultRouteDeps, PeerRouteDeps, NotificationRouteDeps, ScheduleRouteDeps, WatcherRouteDeps, StateRouteDeps, ConfigRouteDeps, AuthRouteDeps, AgentRouteDeps, } from "./deps.js";
28
29
  export { validateParams, instantiatePlaybook } from "./playbook-utils.js";
29
30
  export type { PlaybookParameter, PlaybookDefinition, ValidationResult } from "./playbook-utils.js";
30
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGnE,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,EACd,cAAc,GACf,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGtE,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,GACf,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -25,6 +25,7 @@ export { agentRoutes } from "./routes/agents.js";
25
25
  export { eventRoutes } from "./routes/events.js";
26
26
  export { configRoutes } from "./routes/config.js";
27
27
  export { fileRoutes } from "./routes/files.js";
28
+ export { skillRoutes } from "./routes/skills.js";
28
29
  // Playbook utilities (pure logic, edge-compatible)
29
30
  export { validateParams, instantiatePlaybook } from "./playbook-utils.js";
30
31
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,kBAAkB;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAA4B,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAsC,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAsB,MAAM,mBAAmB,CAAC;AAqBnE,mDAAmD;AACnD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,kBAAkB;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAA4B,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAsC,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAsB,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAuB,MAAM,oBAAoB,CAAC;AAoBtE,mDAAmD;AACnD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Skill routes — discover, list, read, create, delete, assign/unassign.
3
+ *
4
+ * Uses FileSystem abstraction so it works on any backend:
5
+ * - NodeFileSystem (self-hosted)
6
+ * - SandboxProxyFS (cloud, lazy)
7
+ *
8
+ * Install from GitHub (git clone) is NOT included — that's shell-specific
9
+ * and stays in the root src/server/routes/skills.ts.
10
+ */
11
+ import { OpenAPIHono } from "@hono/zod-openapi";
12
+ import type { FileSystem } from "@polpo-ai/core";
13
+ import type { Shell } from "@polpo-ai/core";
14
+ export interface SkillRouteDeps {
15
+ polpoDir: string;
16
+ fs: FileSystem;
17
+ /** Shell for executing git clone (optional — install route disabled without it). */
18
+ shell?: Shell;
19
+ getAgents: () => Promise<Array<{
20
+ name: string;
21
+ skills?: string[];
22
+ }>>;
23
+ /** Update an agent's skills list. Used for assign/unassign. */
24
+ updateAgentSkills?: (agentName: string, skills: string[]) => Promise<void>;
25
+ }
26
+ export declare function skillRoutes(getDeps: () => SkillRouteDeps): OpenAPIHono;
27
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/routes/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAEhE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAyB5C,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,UAAU,CAAC;IACf,oFAAoF;IACpF,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC,CAAC;IACrE,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5E;AA+BD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,cAAc,GAAG,WAAW,CAuXtE"}
@@ -0,0 +1,382 @@
1
+ /**
2
+ * Skill routes — discover, list, read, create, delete, assign/unassign.
3
+ *
4
+ * Uses FileSystem abstraction so it works on any backend:
5
+ * - NodeFileSystem (self-hosted)
6
+ * - SandboxProxyFS (cloud, lazy)
7
+ *
8
+ * Install from GitHub (git clone) is NOT included — that's shell-specific
9
+ * and stays in the root src/server/routes/skills.ts.
10
+ */
11
+ import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi";
12
+ import { resolve, join, basename } from "node:path";
13
+ // Dynamic import to work around workspace version resolution.
14
+ // At publish time, @polpo-ai/core@^0.3.5 will be resolved correctly.
15
+ // @ts-ignore — resolved at publish time with @polpo-ai/core@^0.3.5
16
+ const coreImport = () => import("@polpo-ai/core");
17
+ // ── Helpers ──
18
+ async function loadSkillIndex(fs, polpoDir) {
19
+ const indexPath = join(polpoDir, "skills-index.json");
20
+ if (!(await fs.exists(indexPath)))
21
+ return null;
22
+ try {
23
+ const raw = await fs.readFile(indexPath);
24
+ const parsed = JSON.parse(raw);
25
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
26
+ return null;
27
+ return parsed;
28
+ }
29
+ catch {
30
+ return null;
31
+ }
32
+ }
33
+ async function saveSkillIndex(fs, polpoDir, index) {
34
+ await fs.mkdir(polpoDir).catch(() => { });
35
+ await fs.writeFile(join(polpoDir, "skills-index.json"), JSON.stringify(index, null, 2) + "\n");
36
+ }
37
+ async function loadSkillContent(fs, info) {
38
+ const skillPath = resolve(info.path, "SKILL.md");
39
+ try {
40
+ const raw = await fs.readFile(skillPath);
41
+ const core = await coreImport();
42
+ return { ...info, content: core.extractSkillBody(raw) };
43
+ }
44
+ catch {
45
+ return null;
46
+ }
47
+ }
48
+ // ── Route factory ──
49
+ export function skillRoutes(getDeps) {
50
+ const app = new OpenAPIHono();
51
+ // GET / — list skills with assignments
52
+ app.openapi(createRoute({
53
+ method: "get", path: "/", tags: ["Skills"], summary: "List skills with agent assignments",
54
+ responses: { 200: { content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.array(z.any()) }) } }, description: "Skills list" } },
55
+ }), async (c) => {
56
+ const { fs, polpoDir, getAgents } = getDeps();
57
+ const agents = await getAgents();
58
+ const agentNames = agents.map((a) => a.name);
59
+ const configSkills = new Map();
60
+ for (const a of agents) {
61
+ if (a.skills?.length)
62
+ configSkills.set(a.name, a.skills);
63
+ }
64
+ const core = await coreImport();
65
+ const skills = await core.listSkillsWithAssignments(fs, polpoDir, agentNames, configSkills);
66
+ return c.json({ ok: true, data: skills });
67
+ });
68
+ // GET /:name/content — full skill content
69
+ app.openapi(createRoute({
70
+ method: "get", path: "/:name/content", tags: ["Skills"], summary: "Get skill content",
71
+ request: { params: z.object({ name: z.string() }) },
72
+ responses: {
73
+ 200: { content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } }, description: "Skill content" },
74
+ 404: { content: { "application/json": { schema: z.object({ ok: z.literal(false), error: z.string() }) } }, description: "Not found" },
75
+ },
76
+ }), async (c) => {
77
+ const { fs, polpoDir } = getDeps();
78
+ const name = c.req.param("name");
79
+ const core = await coreImport();
80
+ const pool = await core.discoverSkills(fs, polpoDir);
81
+ const info = pool.find((s) => s.name === name);
82
+ if (!info)
83
+ return c.json({ ok: false, error: "Skill not found" }, 404);
84
+ const loaded = await loadSkillContent(fs, info);
85
+ if (!loaded)
86
+ return c.json({ ok: false, error: "Could not load skill content" }, 404);
87
+ return c.json({ ok: true, data: loaded });
88
+ });
89
+ // GET /index — skills index (tags, categories)
90
+ app.openapi(createRoute({
91
+ method: "get", path: "/index", tags: ["Skills"], summary: "Get skills index",
92
+ responses: { 200: { content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } }, description: "Skills index" } },
93
+ }), async (c) => {
94
+ const { fs, polpoDir } = getDeps();
95
+ const index = await loadSkillIndex(fs, polpoDir);
96
+ return c.json({ ok: true, data: index ?? {} });
97
+ });
98
+ // PUT /:name/index — update skill index entry (tags, category)
99
+ app.openapi(createRoute({
100
+ method: "put", path: "/:name/index", tags: ["Skills"], summary: "Update skill index entry",
101
+ request: {
102
+ params: z.object({ name: z.string() }),
103
+ body: { content: { "application/json": { schema: z.object({ tags: z.array(z.string()).optional(), category: z.string().optional() }) } } },
104
+ },
105
+ responses: { 200: { content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } }, description: "Updated" } },
106
+ }), async (c) => {
107
+ const { fs, polpoDir } = getDeps();
108
+ const name = c.req.param("name");
109
+ const body = await c.req.json();
110
+ const index = (await loadSkillIndex(fs, polpoDir)) ?? {};
111
+ index[name] = { ...index[name], ...body };
112
+ if (index[name].tags?.length === 0)
113
+ delete index[name].tags;
114
+ if (!index[name].category)
115
+ delete index[name].category;
116
+ if (Object.keys(index[name]).length === 0)
117
+ delete index[name];
118
+ await saveSkillIndex(fs, polpoDir, index);
119
+ return c.json({ ok: true, data: { skill: name, ...body } });
120
+ });
121
+ // POST /create — create a new skill
122
+ app.openapi(createRoute({
123
+ method: "post", path: "/create", tags: ["Skills"], summary: "Create a new skill",
124
+ request: {
125
+ body: {
126
+ content: {
127
+ "application/json": {
128
+ schema: z.object({
129
+ name: z.string().min(1),
130
+ description: z.string().min(1),
131
+ content: z.string().min(1),
132
+ allowedTools: z.array(z.string()).optional(),
133
+ }),
134
+ },
135
+ },
136
+ },
137
+ },
138
+ responses: {
139
+ 200: { content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } }, description: "Created" },
140
+ 400: { content: { "application/json": { schema: z.object({ ok: z.literal(false), error: z.string() }) } }, description: "Error" },
141
+ },
142
+ }), async (c) => {
143
+ const { fs, polpoDir } = getDeps();
144
+ const { name, description, content, allowedTools } = await c.req.json();
145
+ const targetDir = join(polpoDir, "skills", name);
146
+ if (await fs.exists(targetDir)) {
147
+ return c.json({ ok: false, error: `Skill "${name}" already exists` }, 400);
148
+ }
149
+ await fs.mkdir(targetDir);
150
+ const fmLines = [`---`, `name: ${name}`, `description: ${description}`];
151
+ if (allowedTools?.length) {
152
+ fmLines.push(`allowed-tools:`);
153
+ for (const t of allowedTools)
154
+ fmLines.push(` - ${t}`);
155
+ }
156
+ fmLines.push(`---`, ``);
157
+ await fs.writeFile(join(targetDir, "SKILL.md"), fmLines.join("\n") + content);
158
+ return c.json({ ok: true, data: { name, path: targetDir } });
159
+ });
160
+ // DELETE /:name — remove a skill
161
+ app.openapi(createRoute({
162
+ method: "delete", path: "/:name", tags: ["Skills"], summary: "Remove a skill",
163
+ request: { params: z.object({ name: z.string() }) },
164
+ responses: {
165
+ 200: { content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } }, description: "Removed" },
166
+ 404: { content: { "application/json": { schema: z.object({ ok: z.literal(false), error: z.string() }) } }, description: "Not found" },
167
+ },
168
+ }), async (c) => {
169
+ const { fs, polpoDir } = getDeps();
170
+ const name = c.req.param("name");
171
+ const targetDir = join(polpoDir, "skills", name);
172
+ if (!(await fs.exists(targetDir))) {
173
+ return c.json({ ok: false, error: "Skill not found" }, 404);
174
+ }
175
+ await fs.remove(targetDir);
176
+ return c.json({ ok: true, data: { removed: true, name } });
177
+ });
178
+ // POST /:name/assign — assign skill to agent
179
+ app.openapi(createRoute({
180
+ method: "post", path: "/:name/assign", tags: ["Skills"], summary: "Assign skill to agent",
181
+ request: {
182
+ params: z.object({ name: z.string() }),
183
+ body: { content: { "application/json": { schema: z.object({ agent: z.string().min(1) }) } } },
184
+ },
185
+ responses: {
186
+ 200: { content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } }, description: "Assigned" },
187
+ 400: { content: { "application/json": { schema: z.object({ ok: z.literal(false), error: z.string() }) } }, description: "Error" },
188
+ },
189
+ }), async (c) => {
190
+ const { getAgents, updateAgentSkills } = getDeps();
191
+ const skillName = c.req.param("name");
192
+ const { agent: agentName } = await c.req.json();
193
+ if (!updateAgentSkills) {
194
+ return c.json({ ok: false, error: "Skill assignment not supported" }, 400);
195
+ }
196
+ const agents = await getAgents();
197
+ const agent = agents.find((a) => a.name === agentName);
198
+ if (!agent)
199
+ return c.json({ ok: false, error: `Agent "${agentName}" not found` }, 400);
200
+ const current = agent.skills ?? [];
201
+ if (!current.includes(skillName)) {
202
+ await updateAgentSkills(agentName, [...current, skillName]);
203
+ }
204
+ return c.json({ ok: true, data: { skill: skillName, agent: agentName } });
205
+ });
206
+ // POST /:name/unassign — unassign skill from agent
207
+ app.openapi(createRoute({
208
+ method: "post", path: "/:name/unassign", tags: ["Skills"], summary: "Unassign skill from agent",
209
+ request: {
210
+ params: z.object({ name: z.string() }),
211
+ body: { content: { "application/json": { schema: z.object({ agent: z.string().min(1) }) } } },
212
+ },
213
+ responses: {
214
+ 200: { content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } }, description: "Unassigned" },
215
+ 400: { content: { "application/json": { schema: z.object({ ok: z.literal(false), error: z.string() }) } }, description: "Error" },
216
+ },
217
+ }), async (c) => {
218
+ const { getAgents, updateAgentSkills } = getDeps();
219
+ const skillName = c.req.param("name");
220
+ const { agent: agentName } = await c.req.json();
221
+ if (!updateAgentSkills) {
222
+ return c.json({ ok: false, error: "Skill assignment not supported" }, 400);
223
+ }
224
+ const agents = await getAgents();
225
+ const agent = agents.find((a) => a.name === agentName);
226
+ if (!agent)
227
+ return c.json({ ok: false, error: `Agent "${agentName}" not found` }, 400);
228
+ const current = agent.skills ?? [];
229
+ await updateAgentSkills(agentName, current.filter((s) => s !== skillName));
230
+ return c.json({ ok: true, data: { skill: skillName, agent: agentName } });
231
+ });
232
+ // POST /add — install skills from GitHub repo or local path
233
+ app.openapi(createRoute({
234
+ method: "post", path: "/add", tags: ["Skills"], summary: "Install skills from a source",
235
+ request: {
236
+ body: {
237
+ content: {
238
+ "application/json": {
239
+ schema: z.object({
240
+ source: z.string().min(1).describe("GitHub owner/repo, full URL, or local path"),
241
+ skillNames: z.array(z.string()).optional().describe("Only install specific skill names"),
242
+ force: z.boolean().optional().describe("Overwrite existing skills"),
243
+ }),
244
+ },
245
+ },
246
+ },
247
+ },
248
+ responses: {
249
+ 200: { content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } }, description: "Install result" },
250
+ 400: { content: { "application/json": { schema: z.object({ ok: z.literal(false), error: z.string() }) } }, description: "Error" },
251
+ },
252
+ }), async (c) => {
253
+ const { fs, shell, polpoDir } = getDeps();
254
+ if (!shell) {
255
+ return c.json({ ok: false, error: "Skill installation not available (no shell)" }, 400);
256
+ }
257
+ const { source, skillNames, force } = await c.req.json();
258
+ // Parse source
259
+ let cloneUrl = null;
260
+ let sourceDir;
261
+ if (source.startsWith("/") || source.startsWith("./") || source.startsWith("../")) {
262
+ // Local path
263
+ if (!(await fs.exists(source))) {
264
+ return c.json({ ok: false, error: `Local path not found: ${source}` }, 400);
265
+ }
266
+ sourceDir = source;
267
+ }
268
+ else {
269
+ // GitHub — clone to temp dir
270
+ const ghMatch = source.match(/github\.com\/([^/]+\/[^/]+)/);
271
+ const ownerRepo = ghMatch
272
+ ? ghMatch[1].replace(/\.git$/, "")
273
+ : /^[^/]+\/[^/]+$/.test(source) ? source : null;
274
+ cloneUrl = ownerRepo
275
+ ? `https://github.com/${ownerRepo}.git`
276
+ : source;
277
+ const tmpDir = `/tmp/polpo-skills-${Date.now()}`;
278
+ const cloneResult = await shell.execute(`git clone --depth 1 --quiet "${cloneUrl}" "${tmpDir}"`, { timeout: 60_000 });
279
+ if (cloneResult.exitCode !== 0) {
280
+ return c.json({ ok: false, error: `Failed to clone: ${cloneResult.stderr}` }, 400);
281
+ }
282
+ sourceDir = tmpDir;
283
+ }
284
+ // Scan for SKILL.md files (up to 3 levels deep)
285
+ const found = [];
286
+ async function scanDir(dir, depth) {
287
+ if (depth > 3)
288
+ return;
289
+ const SKIP = new Set(["node_modules", ".git"]);
290
+ try {
291
+ const entries = fs.readdirWithTypes
292
+ ? await fs.readdirWithTypes(dir)
293
+ : (await fs.readdir(dir)).map((n) => ({ name: n, isDirectory: true, isFile: false }));
294
+ for (const entry of entries) {
295
+ if (SKIP.has(entry.name))
296
+ continue;
297
+ if (!entry.isDirectory)
298
+ continue;
299
+ const entryPath = resolve(dir, entry.name);
300
+ const skillMd = join(entryPath, "SKILL.md");
301
+ if (await fs.exists(skillMd)) {
302
+ try {
303
+ const raw = await fs.readFile(skillMd);
304
+ const core = await coreImport();
305
+ const fm = core.parseSkillFrontmatter(raw);
306
+ found.push({ name: fm?.name ?? entry.name, description: fm?.description ?? "", path: entryPath });
307
+ }
308
+ catch { /* skip */ }
309
+ }
310
+ else {
311
+ await scanDir(entryPath, depth + 1);
312
+ }
313
+ }
314
+ }
315
+ catch { /* skip */ }
316
+ }
317
+ // Check root
318
+ if (await fs.exists(join(sourceDir, "SKILL.md"))) {
319
+ const raw = await fs.readFile(join(sourceDir, "SKILL.md"));
320
+ const core = await coreImport();
321
+ const fm = core.parseSkillFrontmatter(raw);
322
+ found.push({ name: fm?.name ?? basename(sourceDir), description: fm?.description ?? "", path: sourceDir });
323
+ }
324
+ // Check standard locations
325
+ for (const sub of ["skills", ".polpo/skills", ".agents/skills", ".claude/skills"]) {
326
+ const subDir = join(sourceDir, sub);
327
+ if (await fs.exists(subDir))
328
+ await scanDir(subDir, 0);
329
+ }
330
+ // Fallback: recursive scan
331
+ if (found.length === 0)
332
+ await scanDir(sourceDir, 0);
333
+ if (found.length === 0) {
334
+ // Cleanup
335
+ if (cloneUrl)
336
+ await shell.execute(`rm -rf "${sourceDir}"`).catch(() => { });
337
+ return c.json({ ok: false, error: `No skills found in ${source}` }, 400);
338
+ }
339
+ // Filter by requested names
340
+ const toInstall = skillNames
341
+ ? found.filter((s) => skillNames.includes(s.name))
342
+ : found;
343
+ if (skillNames && toInstall.length === 0) {
344
+ if (cloneUrl)
345
+ await shell.execute(`rm -rf "${sourceDir}"`).catch(() => { });
346
+ return c.json({
347
+ ok: false,
348
+ error: `Requested skills not found: ${skillNames.join(", ")}. Available: ${found.map((s) => s.name).join(", ")}`,
349
+ }, 400);
350
+ }
351
+ // Install
352
+ const targetBase = join(polpoDir, "skills");
353
+ await fs.mkdir(targetBase).catch(() => { });
354
+ const installed = [];
355
+ const skipped = [];
356
+ const errors = [];
357
+ for (const skill of toInstall) {
358
+ const targetDir = join(targetBase, skill.name);
359
+ if (await fs.exists(targetDir)) {
360
+ if (!force) {
361
+ skipped.push(skill.name);
362
+ continue;
363
+ }
364
+ await fs.remove(targetDir);
365
+ }
366
+ // Copy via shell (recursive cp)
367
+ const cpResult = await shell.execute(`cp -r "${skill.path}" "${targetDir}"`);
368
+ if (cpResult.exitCode === 0) {
369
+ installed.push(skill.name);
370
+ }
371
+ else {
372
+ errors.push(`${skill.name}: ${cpResult.stderr}`);
373
+ }
374
+ }
375
+ // Cleanup cloned repo
376
+ if (cloneUrl)
377
+ await shell.execute(`rm -rf "${sourceDir}"`).catch(() => { });
378
+ return c.json({ ok: true, data: { installed, skipped, errors, source } });
379
+ });
380
+ return app;
381
+ }
382
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/routes/skills.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polpo-ai/server",
3
- "version": "0.2.9",
3
+ "version": "0.2.11",
4
4
  "description": "Polpo API route factories — edge-compatible Hono routes for tasks, agents, missions, vault, and more",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -21,7 +21,7 @@
21
21
  ],
22
22
  "dependencies": {
23
23
  "@hono/zod-openapi": ">=1.0.0",
24
- "@polpo-ai/core": "^0.2.5",
24
+ "@polpo-ai/core": "^0.3.5",
25
25
  "hono": ">=4.0.0",
26
26
  "nanoid": ">=5.0.0"
27
27
  },