@polpo-ai/node 0.11.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.
Files changed (238) hide show
  1. package/LICENSE +13 -0
  2. package/dist/adapters/engine.d.ts +51 -0
  3. package/dist/adapters/engine.d.ts.map +1 -0
  4. package/dist/adapters/engine.js +316 -0
  5. package/dist/adapters/engine.js.map +1 -0
  6. package/dist/adapters/index.d.ts +2 -0
  7. package/dist/adapters/index.d.ts.map +1 -0
  8. package/dist/adapters/index.js +4 -0
  9. package/dist/adapters/index.js.map +1 -0
  10. package/dist/adapters/loop-engine.d.ts +36 -0
  11. package/dist/adapters/loop-engine.d.ts.map +1 -0
  12. package/dist/adapters/loop-engine.js +534 -0
  13. package/dist/adapters/loop-engine.js.map +1 -0
  14. package/dist/adapters/node-filesystem.d.ts +22 -0
  15. package/dist/adapters/node-filesystem.d.ts.map +1 -0
  16. package/dist/adapters/node-filesystem.js +59 -0
  17. package/dist/adapters/node-filesystem.js.map +1 -0
  18. package/dist/adapters/node-shell.d.ts +5 -0
  19. package/dist/adapters/node-shell.d.ts.map +1 -0
  20. package/dist/adapters/node-shell.js +34 -0
  21. package/dist/adapters/node-shell.js.map +1 -0
  22. package/dist/adapters/node-spawner.d.ts +14 -0
  23. package/dist/adapters/node-spawner.d.ts.map +1 -0
  24. package/dist/adapters/node-spawner.js +103 -0
  25. package/dist/adapters/node-spawner.js.map +1 -0
  26. package/dist/assessment/assessor.d.ts +6 -0
  27. package/dist/assessment/assessor.d.ts.map +1 -0
  28. package/dist/assessment/assessor.js +37 -0
  29. package/dist/assessment/assessor.js.map +1 -0
  30. package/dist/assessment/index.d.ts +6 -0
  31. package/dist/assessment/index.d.ts.map +1 -0
  32. package/dist/assessment/index.js +6 -0
  33. package/dist/assessment/index.js.map +1 -0
  34. package/dist/assessment/llm-review.d.ts +34 -0
  35. package/dist/assessment/llm-review.d.ts.map +1 -0
  36. package/dist/assessment/llm-review.js +669 -0
  37. package/dist/assessment/llm-review.js.map +1 -0
  38. package/dist/assessment/schemas.d.ts +5 -0
  39. package/dist/assessment/schemas.d.ts.map +1 -0
  40. package/dist/assessment/schemas.js +5 -0
  41. package/dist/assessment/schemas.js.map +1 -0
  42. package/dist/assessment/scoring.d.ts +5 -0
  43. package/dist/assessment/scoring.d.ts.map +1 -0
  44. package/dist/assessment/scoring.js +5 -0
  45. package/dist/assessment/scoring.js.map +1 -0
  46. package/dist/assessment/transcript-parser.d.ts +31 -0
  47. package/dist/assessment/transcript-parser.d.ts.map +1 -0
  48. package/dist/assessment/transcript-parser.js +203 -0
  49. package/dist/assessment/transcript-parser.js.map +1 -0
  50. package/dist/auth/index.d.ts +2 -0
  51. package/dist/auth/index.d.ts.map +1 -0
  52. package/dist/auth/index.js +4 -0
  53. package/dist/auth/index.js.map +1 -0
  54. package/dist/core/adapter.d.ts +62 -0
  55. package/dist/core/adapter.d.ts.map +1 -0
  56. package/dist/core/adapter.js +2 -0
  57. package/dist/core/adapter.js.map +1 -0
  58. package/dist/core/assessment-orchestrator.d.ts +18 -0
  59. package/dist/core/assessment-orchestrator.d.ts.map +1 -0
  60. package/dist/core/assessment-orchestrator.js +93 -0
  61. package/dist/core/assessment-orchestrator.js.map +1 -0
  62. package/dist/core/config.d.ts +17 -0
  63. package/dist/core/config.d.ts.map +1 -0
  64. package/dist/core/config.js +272 -0
  65. package/dist/core/config.js.map +1 -0
  66. package/dist/core/constants.d.ts +10 -0
  67. package/dist/core/constants.d.ts.map +1 -0
  68. package/dist/core/constants.js +11 -0
  69. package/dist/core/constants.js.map +1 -0
  70. package/dist/core/deadlock-resolver.d.ts +35 -0
  71. package/dist/core/deadlock-resolver.d.ts.map +1 -0
  72. package/dist/core/deadlock-resolver.js +317 -0
  73. package/dist/core/deadlock-resolver.js.map +1 -0
  74. package/dist/core/drizzle-sqlite-schema.d.ts +8 -0
  75. package/dist/core/drizzle-sqlite-schema.d.ts.map +1 -0
  76. package/dist/core/drizzle-sqlite-schema.js +250 -0
  77. package/dist/core/drizzle-sqlite-schema.js.map +1 -0
  78. package/dist/core/events.d.ts +26 -0
  79. package/dist/core/events.d.ts.map +1 -0
  80. package/dist/core/events.js +39 -0
  81. package/dist/core/events.js.map +1 -0
  82. package/dist/core/index.d.ts +37 -0
  83. package/dist/core/index.d.ts.map +1 -0
  84. package/dist/core/index.js +31 -0
  85. package/dist/core/index.js.map +1 -0
  86. package/dist/core/ink.d.ts +165 -0
  87. package/dist/core/ink.d.ts.map +1 -0
  88. package/dist/core/ink.js +445 -0
  89. package/dist/core/ink.js.map +1 -0
  90. package/dist/core/orchestrator.d.ts +387 -0
  91. package/dist/core/orchestrator.d.ts.map +1 -0
  92. package/dist/core/orchestrator.js +1015 -0
  93. package/dist/core/orchestrator.js.map +1 -0
  94. package/dist/core/question-detector.d.ts +19 -0
  95. package/dist/core/question-detector.d.ts.map +1 -0
  96. package/dist/core/question-detector.js +29 -0
  97. package/dist/core/question-detector.js.map +1 -0
  98. package/dist/core/runner.d.ts +14 -0
  99. package/dist/core/runner.d.ts.map +1 -0
  100. package/dist/core/runner.js +299 -0
  101. package/dist/core/runner.js.map +1 -0
  102. package/dist/core/session-reader.d.ts +46 -0
  103. package/dist/core/session-reader.d.ts.map +1 -0
  104. package/dist/core/session-reader.js +166 -0
  105. package/dist/core/session-reader.js.map +1 -0
  106. package/dist/index.d.ts +24 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/index.js +29 -0
  109. package/dist/index.js.map +1 -0
  110. package/dist/llm/index.d.ts +8 -0
  111. package/dist/llm/index.d.ts.map +1 -0
  112. package/dist/llm/index.js +21 -0
  113. package/dist/llm/index.js.map +1 -0
  114. package/dist/llm/pi-client.d.ts +8 -0
  115. package/dist/llm/pi-client.d.ts.map +1 -0
  116. package/dist/llm/pi-client.js +8 -0
  117. package/dist/llm/pi-client.js.map +1 -0
  118. package/dist/llm/prompts.d.ts +14 -0
  119. package/dist/llm/prompts.d.ts.map +1 -0
  120. package/dist/llm/prompts.js +1618 -0
  121. package/dist/llm/prompts.js.map +1 -0
  122. package/dist/llm/retry.d.ts +5 -0
  123. package/dist/llm/retry.d.ts.map +1 -0
  124. package/dist/llm/retry.js +5 -0
  125. package/dist/llm/retry.js.map +1 -0
  126. package/dist/llm/skills.d.ts +265 -0
  127. package/dist/llm/skills.d.ts.map +1 -0
  128. package/dist/llm/skills.js +804 -0
  129. package/dist/llm/skills.js.map +1 -0
  130. package/dist/quality/index.d.ts +3 -0
  131. package/dist/quality/index.d.ts.map +1 -0
  132. package/dist/quality/index.js +3 -0
  133. package/dist/quality/index.js.map +1 -0
  134. package/dist/quality/quality-controller.d.ts +2 -0
  135. package/dist/quality/quality-controller.d.ts.map +1 -0
  136. package/dist/quality/quality-controller.js +2 -0
  137. package/dist/quality/quality-controller.js.map +1 -0
  138. package/dist/quality/sla-monitor.d.ts +2 -0
  139. package/dist/quality/sla-monitor.d.ts.map +1 -0
  140. package/dist/quality/sla-monitor.js +2 -0
  141. package/dist/quality/sla-monitor.js.map +1 -0
  142. package/dist/scheduling/cron.d.ts +2 -0
  143. package/dist/scheduling/cron.d.ts.map +1 -0
  144. package/dist/scheduling/cron.js +2 -0
  145. package/dist/scheduling/cron.js.map +1 -0
  146. package/dist/scheduling/index.d.ts +3 -0
  147. package/dist/scheduling/index.d.ts.map +1 -0
  148. package/dist/scheduling/index.js +3 -0
  149. package/dist/scheduling/index.js.map +1 -0
  150. package/dist/scheduling/scheduler.d.ts +2 -0
  151. package/dist/scheduling/scheduler.d.ts.map +1 -0
  152. package/dist/scheduling/scheduler.js +2 -0
  153. package/dist/scheduling/scheduler.js.map +1 -0
  154. package/dist/server/app.d.ts +19 -0
  155. package/dist/server/app.d.ts.map +1 -0
  156. package/dist/server/app.js +302 -0
  157. package/dist/server/app.js.map +1 -0
  158. package/dist/server/deps.d.ts +157 -0
  159. package/dist/server/deps.d.ts.map +1 -0
  160. package/dist/server/deps.js +9 -0
  161. package/dist/server/deps.js.map +1 -0
  162. package/dist/server/index.d.ts +43 -0
  163. package/dist/server/index.d.ts.map +1 -0
  164. package/dist/server/index.js +128 -0
  165. package/dist/server/index.js.map +1 -0
  166. package/dist/server/middleware/auth.d.ts +3 -0
  167. package/dist/server/middleware/auth.d.ts.map +1 -0
  168. package/dist/server/middleware/auth.js +35 -0
  169. package/dist/server/middleware/auth.js.map +1 -0
  170. package/dist/server/middleware/error.d.ts +15 -0
  171. package/dist/server/middleware/error.d.ts.map +1 -0
  172. package/dist/server/middleware/error.js +44 -0
  173. package/dist/server/middleware/error.js.map +1 -0
  174. package/dist/server/middleware/rate-limit.d.ts +16 -0
  175. package/dist/server/middleware/rate-limit.d.ts.map +1 -0
  176. package/dist/server/middleware/rate-limit.js +51 -0
  177. package/dist/server/middleware/rate-limit.js.map +1 -0
  178. package/dist/server/routes/config.d.ts +25 -0
  179. package/dist/server/routes/config.d.ts.map +1 -0
  180. package/dist/server/routes/config.js +446 -0
  181. package/dist/server/routes/config.js.map +1 -0
  182. package/dist/server/routes/files.d.ts +11 -0
  183. package/dist/server/routes/files.d.ts.map +1 -0
  184. package/dist/server/routes/files.js +514 -0
  185. package/dist/server/routes/files.js.map +1 -0
  186. package/dist/server/routes/filesystem.d.ts +3 -0
  187. package/dist/server/routes/filesystem.d.ts.map +1 -0
  188. package/dist/server/routes/filesystem.js +152 -0
  189. package/dist/server/routes/filesystem.js.map +1 -0
  190. package/dist/server/routes/providers.d.ts +7 -0
  191. package/dist/server/routes/providers.d.ts.map +1 -0
  192. package/dist/server/routes/providers.js +256 -0
  193. package/dist/server/routes/providers.js.map +1 -0
  194. package/dist/server/routes/skills.d.ts +11 -0
  195. package/dist/server/routes/skills.d.ts.map +1 -0
  196. package/dist/server/routes/skills.js +543 -0
  197. package/dist/server/routes/skills.js.map +1 -0
  198. package/dist/server/security.d.ts +34 -0
  199. package/dist/server/security.d.ts.map +1 -0
  200. package/dist/server/security.js +118 -0
  201. package/dist/server/security.js.map +1 -0
  202. package/dist/server/sse-bridge.d.ts +36 -0
  203. package/dist/server/sse-bridge.d.ts.map +1 -0
  204. package/dist/server/sse-bridge.js +110 -0
  205. package/dist/server/sse-bridge.js.map +1 -0
  206. package/dist/server/types.d.ts +69 -0
  207. package/dist/server/types.d.ts.map +1 -0
  208. package/dist/server/types.js +2 -0
  209. package/dist/server/types.js.map +1 -0
  210. package/dist/setup/env-persistence.d.ts +9 -0
  211. package/dist/setup/env-persistence.d.ts.map +1 -0
  212. package/dist/setup/env-persistence.js +42 -0
  213. package/dist/setup/env-persistence.js.map +1 -0
  214. package/dist/setup/index.d.ts +32 -0
  215. package/dist/setup/index.d.ts.map +1 -0
  216. package/dist/setup/index.js +24 -0
  217. package/dist/setup/index.js.map +1 -0
  218. package/dist/setup/models.d.ts +20 -0
  219. package/dist/setup/models.d.ts.map +1 -0
  220. package/dist/setup/models.js +33 -0
  221. package/dist/setup/models.js.map +1 -0
  222. package/dist/setup/providers.d.ts +26 -0
  223. package/dist/setup/providers.d.ts.map +1 -0
  224. package/dist/setup/providers.js +31 -0
  225. package/dist/setup/providers.js.map +1 -0
  226. package/dist/vault/encrypted-store.d.ts +45 -0
  227. package/dist/vault/encrypted-store.d.ts.map +1 -0
  228. package/dist/vault/encrypted-store.js +149 -0
  229. package/dist/vault/encrypted-store.js.map +1 -0
  230. package/dist/vault/index.d.ts +4 -0
  231. package/dist/vault/index.d.ts.map +1 -0
  232. package/dist/vault/index.js +3 -0
  233. package/dist/vault/index.js.map +1 -0
  234. package/dist/vault/resolver.d.ts +8 -0
  235. package/dist/vault/resolver.d.ts.map +1 -0
  236. package/dist/vault/resolver.js +8 -0
  237. package/dist/vault/resolver.js.map +1 -0
  238. package/package.json +76 -0
@@ -0,0 +1,543 @@
1
+ import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi";
2
+ import { discoverSkills, installSkills, removeSkill, createAgentSkill, assignSkillToAgent, unassignSkillFromAgent, listSkillsWithAssignments, discoverOrchestratorSkills, installOrchestratorSkills, removeOrchestratorSkill, createOrchestratorSkill, updateOrchestratorSkill, getSkillByName, updateSkillIndex, loadSkillIndex, } from "../../llm/skills.js";
3
+ /**
4
+ * Skill routes — discover, install, remove, and assign skills.
5
+ * Pool lives in .polpo/skills/ (project) and ~/.polpo/skills/ (global).
6
+ */
7
+ export function skillRoutes(getDeps) {
8
+ const app = new OpenAPIHono();
9
+ // GET /skills — list skills with agent assignments
10
+ const listSkillsRoute = createRoute({
11
+ method: "get",
12
+ path: "/",
13
+ tags: ["Skills"],
14
+ summary: "List skills",
15
+ responses: {
16
+ 200: {
17
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.array(z.any()) }) } },
18
+ description: "List of skills",
19
+ },
20
+ },
21
+ });
22
+ app.openapi(listSkillsRoute, async (c) => {
23
+ const deps = getDeps();
24
+ const workDir = deps.workDir;
25
+ const polpoDir = deps.polpoDir;
26
+ // Get agent names from the configured store (authoritative source)
27
+ const configAgents = await deps.getAgents();
28
+ const allAgentNames = configAgents.map(a => a.name);
29
+ // Build map of agentName → configured skill names for config-based assignment detection
30
+ const agentConfigSkills = new Map();
31
+ for (const agent of configAgents) {
32
+ if (agent.skills?.length) {
33
+ agentConfigSkills.set(agent.name, agent.skills);
34
+ }
35
+ }
36
+ const skills = listSkillsWithAssignments(workDir, polpoDir, allAgentNames, agentConfigSkills);
37
+ return c.json({ ok: true, data: skills });
38
+ });
39
+ // POST /skills/add — install skills from a source
40
+ const addSkillRoute = createRoute({
41
+ method: "post",
42
+ path: "/add",
43
+ tags: ["Skills"],
44
+ summary: "Install skills",
45
+ request: {
46
+ body: {
47
+ content: {
48
+ "application/json": {
49
+ schema: z.object({
50
+ source: z.string().min(1),
51
+ skillNames: z.array(z.string()).optional(),
52
+ global: z.boolean().optional(),
53
+ force: z.boolean().optional(),
54
+ }),
55
+ },
56
+ },
57
+ },
58
+ },
59
+ responses: {
60
+ 201: {
61
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } },
62
+ description: "Skills installed",
63
+ },
64
+ 400: {
65
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } },
66
+ description: "Installation failed",
67
+ },
68
+ },
69
+ });
70
+ app.openapi(addSkillRoute, (c) => {
71
+ const deps = getDeps();
72
+ const polpoDir = deps.polpoDir;
73
+ const body = c.req.valid("json");
74
+ const result = installSkills(body.source, polpoDir, {
75
+ skillNames: body.skillNames,
76
+ global: body.global,
77
+ force: body.force,
78
+ });
79
+ const hasErrors = result.errors.length > 0 && result.installed.length === 0;
80
+ return c.json({
81
+ ok: !hasErrors,
82
+ data: result,
83
+ }, hasErrors ? 400 : 201);
84
+ });
85
+ // POST /skills/create — create a new agent skill from scratch
86
+ const createSkillRoute = createRoute({
87
+ method: "post",
88
+ path: "/create",
89
+ tags: ["Skills"],
90
+ summary: "Create skill",
91
+ request: {
92
+ body: {
93
+ content: {
94
+ "application/json": {
95
+ schema: z.object({
96
+ name: z.string().min(1),
97
+ description: z.string().min(1),
98
+ content: z.string().min(1),
99
+ allowedTools: z.array(z.string()).optional(),
100
+ global: z.boolean().optional(),
101
+ }),
102
+ },
103
+ },
104
+ },
105
+ },
106
+ responses: {
107
+ 201: {
108
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.object({ name: z.string(), path: z.string() }) }) } },
109
+ description: "Skill created",
110
+ },
111
+ 409: {
112
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), error: z.string(), code: z.string() }) } },
113
+ description: "Skill already exists",
114
+ },
115
+ },
116
+ });
117
+ app.openapi(createSkillRoute, (c) => {
118
+ const deps = getDeps();
119
+ const polpoDir = deps.polpoDir;
120
+ const workDir = deps.workDir;
121
+ const body = c.req.valid("json");
122
+ const existing = discoverSkills(workDir, polpoDir);
123
+ if (existing.some(s => s.name === body.name)) {
124
+ return c.json({ ok: false, error: `Skill "${body.name}" already exists`, code: "CONFLICT" }, 409);
125
+ }
126
+ const skillPath = createAgentSkill(polpoDir, body.name, body.description, body.content, {
127
+ allowedTools: body.allowedTools,
128
+ global: body.global,
129
+ });
130
+ return c.json({ ok: true, data: { name: body.name, path: skillPath } }, 201);
131
+ });
132
+ // DELETE /skills/:name — remove a skill from the pool
133
+ const deleteSkillRoute = createRoute({
134
+ method: "delete",
135
+ path: "/{name}",
136
+ tags: ["Skills"],
137
+ summary: "Remove skill",
138
+ request: {
139
+ params: z.object({ name: z.string() }),
140
+ query: z.object({ global: z.string().optional() }),
141
+ },
142
+ responses: {
143
+ 200: {
144
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.object({ removed: z.string() }) }) } },
145
+ description: "Skill removed",
146
+ },
147
+ 404: {
148
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), error: z.string(), code: z.string() }) } },
149
+ description: "Skill not found",
150
+ },
151
+ },
152
+ });
153
+ app.openapi(deleteSkillRoute, (c) => {
154
+ const deps = getDeps();
155
+ const polpoDir = deps.polpoDir;
156
+ const { name } = c.req.valid("param");
157
+ const { global: globalParam } = c.req.valid("query");
158
+ const global = globalParam === "true";
159
+ const removed = removeSkill(polpoDir, name, global);
160
+ if (!removed) {
161
+ return c.json({ ok: false, error: "Skill not found", code: "NOT_FOUND" }, 404);
162
+ }
163
+ return c.json({ ok: true, data: { removed: name } }, 200);
164
+ });
165
+ // POST /skills/:name/assign — assign a skill to an agent
166
+ const assignSkillRoute = createRoute({
167
+ method: "post",
168
+ path: "/{name}/assign",
169
+ tags: ["Skills"],
170
+ summary: "Assign skill",
171
+ request: {
172
+ params: z.object({ name: z.string() }),
173
+ body: {
174
+ content: {
175
+ "application/json": {
176
+ schema: z.object({ agent: z.string().min(1) }),
177
+ },
178
+ },
179
+ },
180
+ },
181
+ responses: {
182
+ 200: {
183
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.object({ skill: z.string(), agent: z.string() }) }) } },
184
+ description: "Skill assigned",
185
+ },
186
+ 404: {
187
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), error: z.string(), code: z.string() }) } },
188
+ description: "Skill not found",
189
+ },
190
+ },
191
+ });
192
+ app.openapi(assignSkillRoute, (c) => {
193
+ const deps = getDeps();
194
+ const workDir = deps.workDir;
195
+ const polpoDir = deps.polpoDir;
196
+ const { name: skillName } = c.req.valid("param");
197
+ const { agent } = c.req.valid("json");
198
+ // Find skill in pool
199
+ const pool = discoverSkills(workDir, polpoDir);
200
+ const skill = pool.find(s => s.name === skillName);
201
+ if (!skill) {
202
+ return c.json({ ok: false, error: "Skill not found", code: "NOT_FOUND" }, 404);
203
+ }
204
+ assignSkillToAgent(polpoDir, agent, skillName, skill.path);
205
+ return c.json({ ok: true, data: { skill: skillName, agent } }, 200);
206
+ });
207
+ // POST /skills/:name/unassign — unassign a skill from an agent
208
+ const unassignSkillRoute = createRoute({
209
+ method: "post",
210
+ path: "/{name}/unassign",
211
+ tags: ["Skills"],
212
+ summary: "Unassign skill",
213
+ request: {
214
+ params: z.object({ name: z.string() }),
215
+ body: {
216
+ content: {
217
+ "application/json": {
218
+ schema: z.object({ agent: z.string().min(1) }),
219
+ },
220
+ },
221
+ },
222
+ },
223
+ responses: {
224
+ 200: {
225
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.object({ skill: z.string(), agent: z.string() }) }) } },
226
+ description: "Skill unassigned",
227
+ },
228
+ 404: {
229
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), error: z.string(), code: z.string() }) } },
230
+ description: "Assignment not found",
231
+ },
232
+ },
233
+ });
234
+ app.openapi(unassignSkillRoute, (c) => {
235
+ const deps = getDeps();
236
+ const polpoDir = deps.polpoDir;
237
+ const { name: skillName } = c.req.valid("param");
238
+ const { agent } = c.req.valid("json");
239
+ const removed = unassignSkillFromAgent(polpoDir, agent, skillName);
240
+ if (!removed) {
241
+ return c.json({ ok: false, error: "Assignment not found", code: "NOT_FOUND" }, 404);
242
+ }
243
+ return c.json({ ok: true, data: { skill: skillName, agent } }, 200);
244
+ });
245
+ // GET /skills/:name/content — get agent skill content
246
+ const getSkillContentRoute = createRoute({
247
+ method: "get",
248
+ path: "/{name}/content",
249
+ tags: ["Skills"],
250
+ summary: "Get skill content",
251
+ request: {
252
+ params: z.object({ name: z.string() }),
253
+ },
254
+ responses: {
255
+ 200: {
256
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } },
257
+ description: "Skill content",
258
+ },
259
+ 404: {
260
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), error: z.string(), code: z.string() }) } },
261
+ description: "Skill not found",
262
+ },
263
+ },
264
+ });
265
+ app.openapi(getSkillContentRoute, (c) => {
266
+ const deps = getDeps();
267
+ const polpoDir = deps.polpoDir;
268
+ const workDir = deps.workDir;
269
+ const { name } = c.req.valid("param");
270
+ const skill = getSkillByName(workDir, polpoDir, name, "agent");
271
+ if (!skill) {
272
+ return c.json({ ok: false, error: `Skill "${name}" not found`, code: "NOT_FOUND" }, 404);
273
+ }
274
+ return c.json({ ok: true, data: skill }, 200);
275
+ });
276
+ // ═══════════════════════════════════════════════════════
277
+ // ORCHESTRATOR SKILL ROUTES
278
+ // ═══════════════════════════════════════════════════════
279
+ // GET /skills/orchestrator — list orchestrator skills
280
+ const listOrchSkillsRoute = createRoute({
281
+ method: "get",
282
+ path: "/orchestrator",
283
+ tags: ["Skills"],
284
+ summary: "List orchestrator skills",
285
+ responses: {
286
+ 200: {
287
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.array(z.any()) }) } },
288
+ description: "List of orchestrator skills",
289
+ },
290
+ },
291
+ });
292
+ app.openapi(listOrchSkillsRoute, (c) => {
293
+ const deps = getDeps();
294
+ const skills = discoverOrchestratorSkills(deps.polpoDir);
295
+ return c.json({ ok: true, data: skills });
296
+ });
297
+ // POST /skills/orchestrator — create a new orchestrator skill
298
+ const createOrchSkillRoute = createRoute({
299
+ method: "post",
300
+ path: "/orchestrator",
301
+ tags: ["Skills"],
302
+ summary: "Create orchestrator skill",
303
+ request: {
304
+ body: {
305
+ content: {
306
+ "application/json": {
307
+ schema: z.object({
308
+ name: z.string().min(1),
309
+ description: z.string().min(1),
310
+ content: z.string().min(1),
311
+ allowedTools: z.array(z.string()).optional(),
312
+ }),
313
+ },
314
+ },
315
+ },
316
+ },
317
+ responses: {
318
+ 201: {
319
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.object({ name: z.string(), path: z.string() }) }) } },
320
+ description: "Skill created",
321
+ },
322
+ 409: {
323
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), error: z.string(), code: z.string() }) } },
324
+ description: "Skill already exists",
325
+ },
326
+ },
327
+ });
328
+ app.openapi(createOrchSkillRoute, (c) => {
329
+ const deps = getDeps();
330
+ const polpoDir = deps.polpoDir;
331
+ const body = c.req.valid("json");
332
+ const existing = discoverOrchestratorSkills(polpoDir);
333
+ if (existing.some(s => s.name === body.name)) {
334
+ return c.json({ ok: false, error: `Skill "${body.name}" already exists`, code: "CONFLICT" }, 409);
335
+ }
336
+ const skillPath = createOrchestratorSkill(polpoDir, body.name, body.description, body.content, {
337
+ allowedTools: body.allowedTools,
338
+ });
339
+ return c.json({ ok: true, data: { name: body.name, path: skillPath } }, 201);
340
+ });
341
+ // PUT /skills/orchestrator/:name — update an orchestrator skill
342
+ const updateOrchSkillRoute = createRoute({
343
+ method: "put",
344
+ path: "/orchestrator/{name}",
345
+ tags: ["Skills"],
346
+ summary: "Update orchestrator skill",
347
+ request: {
348
+ params: z.object({ name: z.string() }),
349
+ body: {
350
+ content: {
351
+ "application/json": {
352
+ schema: z.object({
353
+ description: z.string().optional(),
354
+ content: z.string().optional(),
355
+ allowedTools: z.array(z.string()).optional(),
356
+ }),
357
+ },
358
+ },
359
+ },
360
+ },
361
+ responses: {
362
+ 200: {
363
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.object({ name: z.string() }) }) } },
364
+ description: "Skill updated",
365
+ },
366
+ 404: {
367
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), error: z.string(), code: z.string() }) } },
368
+ description: "Skill not found",
369
+ },
370
+ },
371
+ });
372
+ app.openapi(updateOrchSkillRoute, (c) => {
373
+ const deps = getDeps();
374
+ const polpoDir = deps.polpoDir;
375
+ const { name } = c.req.valid("param");
376
+ const body = c.req.valid("json");
377
+ const ok = updateOrchestratorSkill(polpoDir, name, body);
378
+ if (!ok) {
379
+ return c.json({ ok: false, error: `Skill "${name}" not found`, code: "NOT_FOUND" }, 404);
380
+ }
381
+ return c.json({ ok: true, data: { name } }, 200);
382
+ });
383
+ // DELETE /skills/orchestrator/:name — remove an orchestrator skill
384
+ const deleteOrchSkillRoute = createRoute({
385
+ method: "delete",
386
+ path: "/orchestrator/{name}",
387
+ tags: ["Skills"],
388
+ summary: "Remove orchestrator skill",
389
+ request: {
390
+ params: z.object({ name: z.string() }),
391
+ },
392
+ responses: {
393
+ 200: {
394
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.object({ removed: z.string() }) }) } },
395
+ description: "Skill removed",
396
+ },
397
+ 404: {
398
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), error: z.string(), code: z.string() }) } },
399
+ description: "Skill not found",
400
+ },
401
+ },
402
+ });
403
+ app.openapi(deleteOrchSkillRoute, (c) => {
404
+ const deps = getDeps();
405
+ const polpoDir = deps.polpoDir;
406
+ const { name } = c.req.valid("param");
407
+ const removed = removeOrchestratorSkill(polpoDir, name);
408
+ if (!removed) {
409
+ return c.json({ ok: false, error: "Skill not found", code: "NOT_FOUND" }, 404);
410
+ }
411
+ return c.json({ ok: true, data: { removed: name } }, 200);
412
+ });
413
+ // GET /skills/orchestrator/:name/content — get orchestrator skill content
414
+ const getOrchSkillContentRoute = createRoute({
415
+ method: "get",
416
+ path: "/orchestrator/{name}/content",
417
+ tags: ["Skills"],
418
+ summary: "Get orchestrator content",
419
+ request: {
420
+ params: z.object({ name: z.string() }),
421
+ },
422
+ responses: {
423
+ 200: {
424
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } },
425
+ description: "Skill content",
426
+ },
427
+ 404: {
428
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), error: z.string(), code: z.string() }) } },
429
+ description: "Skill not found",
430
+ },
431
+ },
432
+ });
433
+ app.openapi(getOrchSkillContentRoute, (c) => {
434
+ const deps = getDeps();
435
+ const polpoDir = deps.polpoDir;
436
+ const workDir = deps.workDir;
437
+ const { name } = c.req.valid("param");
438
+ const skill = getSkillByName(workDir, polpoDir, name, "orchestrator");
439
+ if (!skill) {
440
+ return c.json({ ok: false, error: `Skill "${name}" not found`, code: "NOT_FOUND" }, 404);
441
+ }
442
+ return c.json({ ok: true, data: skill }, 200);
443
+ });
444
+ // POST /skills/orchestrator/add — install orchestrator skills from source
445
+ const addOrchSkillRoute = createRoute({
446
+ method: "post",
447
+ path: "/orchestrator/add",
448
+ tags: ["Skills"],
449
+ summary: "Install orchestrator skills",
450
+ request: {
451
+ body: {
452
+ content: {
453
+ "application/json": {
454
+ schema: z.object({
455
+ source: z.string().min(1),
456
+ skillNames: z.array(z.string()).optional(),
457
+ force: z.boolean().optional(),
458
+ }),
459
+ },
460
+ },
461
+ },
462
+ },
463
+ responses: {
464
+ 201: {
465
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } },
466
+ description: "Skills installed",
467
+ },
468
+ 400: {
469
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } },
470
+ description: "Installation failed",
471
+ },
472
+ },
473
+ });
474
+ app.openapi(addOrchSkillRoute, (c) => {
475
+ const deps = getDeps();
476
+ const polpoDir = deps.polpoDir;
477
+ const body = c.req.valid("json");
478
+ const result = installOrchestratorSkills(body.source, polpoDir, {
479
+ skillNames: body.skillNames,
480
+ force: body.force,
481
+ });
482
+ const hasErrors = result.errors.length > 0 && result.installed.length === 0;
483
+ return c.json({ ok: !hasErrors, data: result }, hasErrors ? 400 : 201);
484
+ });
485
+ // ═══════════════════════════════════════════════════════
486
+ // SKILLS INDEX ROUTES (tags & categories)
487
+ // ═══════════════════════════════════════════════════════
488
+ // GET /skills/index — get the full skills index
489
+ const getSkillIndexRoute = createRoute({
490
+ method: "get",
491
+ path: "/index",
492
+ tags: ["Skills"],
493
+ summary: "Get skills index",
494
+ responses: {
495
+ 200: {
496
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } },
497
+ description: "Skills index",
498
+ },
499
+ },
500
+ });
501
+ app.openapi(getSkillIndexRoute, (c) => {
502
+ const deps = getDeps();
503
+ const polpoDir = deps.polpoDir;
504
+ const index = loadSkillIndex(polpoDir) ?? {};
505
+ return c.json({ ok: true, data: index });
506
+ });
507
+ // PUT /skills/:name/index — update a skill's index entry (tags, category)
508
+ const updateSkillIndexRoute = createRoute({
509
+ method: "put",
510
+ path: "/{name}/index",
511
+ tags: ["Skills"],
512
+ summary: "Update skill index",
513
+ request: {
514
+ params: z.object({ name: z.string() }),
515
+ body: {
516
+ content: {
517
+ "application/json": {
518
+ schema: z.object({
519
+ tags: z.array(z.string()).optional(),
520
+ category: z.string().optional(),
521
+ }),
522
+ },
523
+ },
524
+ },
525
+ },
526
+ responses: {
527
+ 200: {
528
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.object({ skill: z.string(), tags: z.array(z.string()).optional(), category: z.string().optional() }) }) } },
529
+ description: "Index entry updated",
530
+ },
531
+ },
532
+ });
533
+ app.openapi(updateSkillIndexRoute, (c) => {
534
+ const deps = getDeps();
535
+ const polpoDir = deps.polpoDir;
536
+ const { name } = c.req.valid("param");
537
+ const body = c.req.valid("json");
538
+ updateSkillIndex(polpoDir, name, body);
539
+ return c.json({ ok: true, data: { skill: name, ...body } });
540
+ });
541
+ return app;
542
+ }
543
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/server/routes/skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Security redaction module — pure functions for sanitizing sensitive data
3
+ * before exposing it through API responses or persisting to transcript logs.
4
+ *
5
+ * Handles:
6
+ * - Provider API key masking
7
+ * - Transcript parameter sanitization (passwords, tokens, secrets)
8
+ *
9
+ * NOTE: Vault credentials are no longer stored on AgentConfig — they live in
10
+ * the encrypted vault store (.polpo/vault.enc). Agent/team/state redaction
11
+ * functions are kept as pass-throughs for API compatibility.
12
+ */
13
+ import type { AgentConfig, Team, PolpoState, PolpoConfig, PolpoFileConfig } from "@polpo-ai/core/types";
14
+ /** Regex matching parameter names that likely contain secrets. */
15
+ export declare const SENSITIVE_PARAM_RE: RegExp;
16
+ /**
17
+ * Returns the agent config as-is (vault credentials are no longer inline).
18
+ * Kept for backward compatibility with callers that expect redaction.
19
+ */
20
+ export declare function redactAgentConfig(agent: AgentConfig): AgentConfig;
21
+ /** Returns the team as-is (no inline credentials to redact). */
22
+ export declare function redactTeam(team: Team): Team;
23
+ /** Returns the state as-is (no inline credentials to redact). */
24
+ export declare function redactPolpoState(state: PolpoState): PolpoState;
25
+ /** Return config as-is — providers no longer contain secrets (API keys resolved via env/OAuth only). */
26
+ export declare function redactPolpoConfig<T extends PolpoConfig | PolpoFileConfig>(config: T): T;
27
+ /**
28
+ * Sanitize a transcript entry by masking sensitive parameter values in tool_use inputs.
29
+ * Recursively descends into nested objects and arrays to catch secrets at any depth.
30
+ * Only touches entries with `type === "tool_use"` that have an `input` object.
31
+ * Returns the entry unchanged for all other types (assistant, tool_result, etc.).
32
+ */
33
+ export declare function sanitizeTranscriptEntry(entry: Record<string, unknown>): Record<string, unknown>;
34
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/server/security.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIxG,kEAAkE;AAClE,eAAO,MAAM,kBAAkB,QAAoD,CAAC;AAIpF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAEjE;AAID,gEAAgE;AAChE,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAE3C;AAID,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAE9D;AAID,wGAAwG;AACxG,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,eAAe,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAEvF;AA4ED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAW/F"}