@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,514 @@
1
+ import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi";
2
+ import { resolve, relative, extname, basename, dirname } from "node:path";
3
+ import { POLPO_DIR_NAME } from "../../core/constants.js";
4
+ // ── MIME type map ────────────────────────────────────────────────────────────
5
+ const EXT_MIME = {
6
+ // Text / code
7
+ ".txt": "text/plain", ".md": "text/markdown", ".markdown": "text/markdown",
8
+ ".html": "text/html", ".htm": "text/html", ".css": "text/css",
9
+ ".js": "text/javascript", ".mjs": "text/javascript", ".jsx": "text/javascript",
10
+ ".ts": "text/typescript", ".tsx": "text/typescript",
11
+ ".json": "application/json", ".jsonl": "application/x-ndjson",
12
+ ".yaml": "text/yaml", ".yml": "text/yaml", ".toml": "text/plain",
13
+ ".xml": "application/xml", ".csv": "text/csv", ".tsv": "text/tab-separated-values",
14
+ ".sh": "text/x-shellscript", ".bash": "text/x-shellscript",
15
+ ".py": "text/x-python", ".rb": "text/x-ruby", ".go": "text/x-go",
16
+ ".rs": "text/x-rust", ".java": "text/x-java", ".c": "text/x-c", ".cpp": "text/x-c++",
17
+ ".h": "text/x-c", ".hpp": "text/x-c++",
18
+ ".sql": "text/x-sql", ".graphql": "text/plain", ".env": "text/plain",
19
+ ".log": "text/plain", ".ini": "text/plain", ".cfg": "text/plain",
20
+ // Images
21
+ ".png": "image/png", ".jpg": "image/jpeg", ".jpeg": "image/jpeg",
22
+ ".webp": "image/webp", ".gif": "image/gif", ".svg": "image/svg+xml",
23
+ ".ico": "image/x-icon", ".bmp": "image/bmp",
24
+ // Audio
25
+ ".mp3": "audio/mpeg", ".wav": "audio/wav", ".ogg": "audio/ogg",
26
+ ".flac": "audio/flac", ".m4a": "audio/mp4", ".aac": "audio/aac",
27
+ // Video
28
+ ".mp4": "video/mp4", ".webm": "video/webm", ".mov": "video/quicktime",
29
+ // Documents
30
+ ".pdf": "application/pdf",
31
+ ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
32
+ ".doc": "application/msword",
33
+ ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
34
+ ".xls": "application/vnd.ms-excel",
35
+ ".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
36
+ // Archives
37
+ ".zip": "application/zip", ".tar": "application/x-tar", ".gz": "application/gzip",
38
+ ".tgz": "application/gzip", ".bz2": "application/x-bzip2",
39
+ };
40
+ function guessMime(filePath) {
41
+ return EXT_MIME[extname(filePath).toLowerCase()] ?? "application/octet-stream";
42
+ }
43
+ function isPreviewable(mime) {
44
+ return (mime.startsWith("text/") ||
45
+ mime.startsWith("image/") ||
46
+ mime.startsWith("audio/") ||
47
+ mime.startsWith("video/") ||
48
+ mime === "application/json" ||
49
+ mime === "application/pdf" ||
50
+ mime === "application/xml" ||
51
+ mime === "application/x-ndjson");
52
+ }
53
+ // ── Security: path sandboxing ────────────────────────────────────────────────
54
+ async function resolveSandboxed(requestPath, allowedRoots, fs) {
55
+ if (requestPath.includes(".."))
56
+ return null;
57
+ for (const root of allowedRoots) {
58
+ const resolved = requestPath.startsWith("/")
59
+ ? requestPath
60
+ : resolve(root, requestPath);
61
+ const rel = relative(root, resolved);
62
+ if (!rel.startsWith("..") && !rel.startsWith("/")) {
63
+ if (await fs.exists(resolved))
64
+ return resolved;
65
+ }
66
+ }
67
+ return null;
68
+ }
69
+ // ── Route definitions ────────────────────────────────────────────────────────
70
+ const errorSchema = z.object({ ok: z.literal(false), error: z.string() });
71
+ const listRootsRoute = createRoute({
72
+ method: "get",
73
+ path: "/roots",
74
+ tags: ["Files"],
75
+ summary: "List file roots",
76
+ description: "Returns the filesystem roots that the file browser can navigate: the project working directory and the .polpo configuration directory.",
77
+ responses: {
78
+ 200: {
79
+ content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } },
80
+ description: "Array of root directories with name, path, and description",
81
+ },
82
+ },
83
+ });
84
+ const listFilesRoute = createRoute({
85
+ method: "get",
86
+ path: "/list",
87
+ tags: ["Files"],
88
+ summary: "List directory contents",
89
+ description: "List files and subdirectories at the given path. Path is sandboxed to the .polpo/ directory and the project working directory.",
90
+ request: {
91
+ query: z.object({
92
+ path: z.string().optional().openapi({ description: "Directory path to list. Defaults to the project root.", example: ".polpo/output" }),
93
+ }),
94
+ },
95
+ responses: {
96
+ 200: { content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } }, description: "Directory listing" },
97
+ 400: { content: { "application/json": { schema: errorSchema } }, description: "Invalid or disallowed path" },
98
+ 404: { content: { "application/json": { schema: errorSchema } }, description: "Path not found" },
99
+ },
100
+ });
101
+ const previewFileRoute = createRoute({
102
+ method: "get",
103
+ path: "/preview",
104
+ tags: ["Files"],
105
+ summary: "Preview file",
106
+ description: "Returns structured preview metadata for a file.",
107
+ request: {
108
+ query: z.object({
109
+ path: z.string().openapi({ description: "Absolute or relative file path" }),
110
+ maxLines: z.string().optional().openapi({ description: "Maximum lines to return for text files (default: 500)" }),
111
+ }),
112
+ },
113
+ responses: {
114
+ 200: { content: { "application/json": { schema: z.object({ ok: z.boolean(), data: z.any() }) } }, description: "File preview data" },
115
+ 400: { content: { "application/json": { schema: errorSchema } }, description: "Invalid or disallowed path" },
116
+ 404: { content: { "application/json": { schema: errorSchema } }, description: "File not found" },
117
+ },
118
+ });
119
+ // ── Route factory ────────────────────────────────────────────────────────────
120
+ export function fileRoutes(getDeps) {
121
+ const app = new OpenAPIHono();
122
+ function getAllowedRoots() {
123
+ const deps = getDeps();
124
+ const roots = [deps.workDir, deps.polpoDir];
125
+ if (!roots.includes(deps.agentWorkDir))
126
+ roots.push(deps.agentWorkDir);
127
+ return roots;
128
+ }
129
+ // ── GET /roots — available root directories ──
130
+ app.openapi(listRootsRoute, (async (c) => {
131
+ const deps = getDeps();
132
+ const { workDir, polpoDir, agentWorkDir, fs } = deps;
133
+ const SKIP = new Set(["node_modules", ".git", ".next", "dist", "__pycache__", ".cache"]);
134
+ async function dirStats(dir, depth = 0) {
135
+ if (depth > 8)
136
+ return { files: 0, bytes: 0 };
137
+ let files = 0, bytes = 0;
138
+ try {
139
+ const entries = fs.readdirWithTypes
140
+ ? await fs.readdirWithTypes(dir)
141
+ : (await fs.readdir(dir)).map((n) => ({ name: n, isDirectory: false, isFile: true }));
142
+ for (const e of entries) {
143
+ if (SKIP.has(e.name))
144
+ continue;
145
+ const full = resolve(dir, e.name);
146
+ if (e.isDirectory) {
147
+ const sub = await dirStats(full, depth + 1);
148
+ files += sub.files;
149
+ bytes += sub.bytes;
150
+ }
151
+ else if (e.isFile) {
152
+ files++;
153
+ try {
154
+ bytes += (await fs.stat(full)).size;
155
+ }
156
+ catch { /* skip */ }
157
+ }
158
+ }
159
+ }
160
+ catch { /* unreadable dir */ }
161
+ return { files, bytes };
162
+ }
163
+ const agentWorkRel = relative(workDir, agentWorkDir);
164
+ const hasCustomWorkspace = agentWorkDir !== workDir;
165
+ const wsDir = hasCustomWorkspace ? agentWorkDir : workDir;
166
+ const wsStats = await dirStats(wsDir);
167
+ const roots = [
168
+ {
169
+ id: "workspace",
170
+ name: hasCustomWorkspace ? basename(agentWorkDir) : basename(workDir),
171
+ path: hasCustomWorkspace ? agentWorkRel : ".",
172
+ absolutePath: wsDir,
173
+ description: "Agent workspace",
174
+ icon: "folder-open",
175
+ totalFiles: wsStats.files,
176
+ totalSize: wsStats.bytes,
177
+ },
178
+ ];
179
+ const polpoStats = await dirStats(polpoDir);
180
+ roots.push({
181
+ id: "polpo",
182
+ name: POLPO_DIR_NAME,
183
+ path: POLPO_DIR_NAME,
184
+ absolutePath: polpoDir,
185
+ description: "Polpo configuration & data",
186
+ icon: "folder-cog",
187
+ totalFiles: polpoStats.files,
188
+ totalSize: polpoStats.bytes,
189
+ });
190
+ return c.json({ ok: true, data: { roots } }, 200);
191
+ }));
192
+ // ── GET /list — directory listing ──
193
+ app.openapi(listFilesRoute, (async (c) => {
194
+ const deps = getDeps();
195
+ const { fs } = deps;
196
+ const { path: reqPath = "." } = c.req.valid("query");
197
+ const roots = getAllowedRoots();
198
+ const resolved = await resolveSandboxed(reqPath, roots, fs);
199
+ if (!resolved)
200
+ return c.json({ ok: false, error: "Invalid or disallowed path" }, 400);
201
+ let s;
202
+ try {
203
+ s = await fs.stat(resolved);
204
+ }
205
+ catch {
206
+ return c.json({ ok: false, error: "Path not found" }, 404);
207
+ }
208
+ if (!s.isDirectory)
209
+ return c.json({ ok: false, error: "Path is not a directory" }, 400);
210
+ const rawEntries = fs.readdirWithTypes
211
+ ? await fs.readdirWithTypes(resolved)
212
+ : (await fs.readdir(resolved)).map((n) => ({ name: n, isDirectory: false, isFile: true }));
213
+ const entries = [];
214
+ for (const d of rawEntries) {
215
+ if (d.name.startsWith(".") && d.name !== ".agent")
216
+ continue;
217
+ const fullPath = resolve(resolved, d.name);
218
+ const isDir = d.isDirectory;
219
+ let fileStat;
220
+ try {
221
+ fileStat = await fs.stat(fullPath);
222
+ }
223
+ catch { /* skip */ }
224
+ entries.push({
225
+ name: d.name,
226
+ type: isDir ? "directory" : "file",
227
+ ...(fileStat ? {
228
+ ...(isDir ? {} : { size: fileStat.size, mimeType: guessMime(d.name) }),
229
+ modifiedAt: fileStat.modifiedAt?.toISOString(),
230
+ } : {}),
231
+ });
232
+ }
233
+ entries.sort((a, b) => {
234
+ if (a.type !== b.type)
235
+ return a.type === "directory" ? -1 : 1;
236
+ return a.name.localeCompare(b.name);
237
+ });
238
+ const displayPath = roots.reduce((p, root) => {
239
+ const rel = relative(root, resolved);
240
+ return !rel.startsWith("..") ? rel || "." : p;
241
+ }, reqPath);
242
+ return c.json({ ok: true, data: { path: displayPath, entries } }, 200);
243
+ }));
244
+ // ── GET /read — stream file content (binary response) ──
245
+ app.get("/read", async (c) => {
246
+ const deps = getDeps();
247
+ const { fs } = deps;
248
+ const reqPath = c.req.query("path");
249
+ const download = c.req.query("download");
250
+ if (!reqPath)
251
+ return c.json({ ok: false, error: "Missing path parameter" }, 400);
252
+ const roots = getAllowedRoots();
253
+ const resolved = await resolveSandboxed(reqPath, roots, fs);
254
+ if (!resolved)
255
+ return c.json({ ok: false, error: "Invalid or disallowed path" }, 400);
256
+ let s;
257
+ try {
258
+ s = await fs.stat(resolved);
259
+ }
260
+ catch {
261
+ return c.json({ ok: false, error: "File not found" }, 404);
262
+ }
263
+ if (s.isDirectory)
264
+ return c.json({ ok: false, error: "Path is a directory" }, 400);
265
+ const mime = guessMime(resolved);
266
+ const fileName = basename(resolved);
267
+ // Read via buffer abstraction (works with Node, Sandbox, etc.)
268
+ const buffer = fs.readFileBuffer
269
+ ? await fs.readFileBuffer(resolved)
270
+ : new TextEncoder().encode(await fs.readFile(resolved));
271
+ const headers = {
272
+ "Content-Type": mime,
273
+ "Content-Length": String(buffer.byteLength),
274
+ "Cache-Control": "private, max-age=60",
275
+ };
276
+ if (download) {
277
+ headers["Content-Disposition"] = `attachment; filename="${fileName}"`;
278
+ }
279
+ else if (isPreviewable(mime)) {
280
+ headers["Content-Disposition"] = `inline; filename="${fileName}"`;
281
+ }
282
+ else {
283
+ headers["Content-Disposition"] = `attachment; filename="${fileName}"`;
284
+ }
285
+ return new Response(new Uint8Array(buffer), { status: 200, headers });
286
+ });
287
+ // ── GET /preview — structured preview data ──
288
+ app.openapi(previewFileRoute, (async (c) => {
289
+ const deps = getDeps();
290
+ const { fs } = deps;
291
+ const { path: reqPath, maxLines: maxLinesStr } = c.req.valid("query");
292
+ if (!reqPath)
293
+ return c.json({ ok: false, error: "Missing path parameter" }, 400);
294
+ const roots = getAllowedRoots();
295
+ const maxLines = maxLinesStr ? parseInt(maxLinesStr, 10) : 500;
296
+ const resolved = await resolveSandboxed(reqPath, roots, fs);
297
+ if (!resolved)
298
+ return c.json({ ok: false, error: "Invalid or disallowed path" }, 400);
299
+ let s;
300
+ try {
301
+ s = await fs.stat(resolved);
302
+ }
303
+ catch {
304
+ return c.json({ ok: false, error: "File not found" }, 404);
305
+ }
306
+ if (s.isDirectory)
307
+ return c.json({ ok: false, error: "Path is a directory" }, 400);
308
+ const mime = guessMime(resolved);
309
+ const fileName = basename(resolved);
310
+ const fileUrl = `/api/v1/files/read?path=${encodeURIComponent(reqPath)}`;
311
+ let type;
312
+ if (mime.startsWith("text/") || mime === "application/json" || mime === "application/xml" || mime === "application/x-ndjson") {
313
+ type = "text";
314
+ }
315
+ else if (mime.startsWith("image/")) {
316
+ type = "image";
317
+ }
318
+ else if (mime === "application/pdf") {
319
+ type = "pdf";
320
+ }
321
+ else if (mime.startsWith("audio/")) {
322
+ type = "audio";
323
+ }
324
+ else if (mime.startsWith("video/")) {
325
+ type = "video";
326
+ }
327
+ else {
328
+ type = "binary";
329
+ }
330
+ const result = {
331
+ path: reqPath,
332
+ name: fileName,
333
+ mimeType: mime,
334
+ size: s.size,
335
+ previewable: type !== "binary",
336
+ type,
337
+ url: fileUrl,
338
+ };
339
+ if (type === "text") {
340
+ const MAX_SIZE = 512 * 1024;
341
+ if (s.size <= MAX_SIZE) {
342
+ const raw = await fs.readFile(resolved);
343
+ const lines = raw.split("\n");
344
+ const truncated = lines.length > maxLines;
345
+ result.content = truncated ? lines.slice(0, maxLines).join("\n") : raw;
346
+ result.truncated = truncated;
347
+ }
348
+ else {
349
+ // For large files, read via buffer and decode partial
350
+ const buffer = fs.readFileBuffer
351
+ ? await fs.readFileBuffer(resolved)
352
+ : new TextEncoder().encode(await fs.readFile(resolved));
353
+ const partial = new TextDecoder().decode(buffer.slice(0, MAX_SIZE));
354
+ result.content = partial;
355
+ result.truncated = true;
356
+ }
357
+ }
358
+ return c.json({ ok: true, data: result }, 200);
359
+ }));
360
+ // ── POST /upload — upload file(s) ──
361
+ app.post("/upload", async (c) => {
362
+ const deps = getDeps();
363
+ const { fs } = deps;
364
+ const body = await c.req.parseBody({ all: true });
365
+ const destPath = body.path ?? ".";
366
+ const roots = getAllowedRoots();
367
+ const resolvedDir = await resolveSandboxed(destPath, roots, fs);
368
+ if (!resolvedDir)
369
+ return c.json({ ok: false, error: "Invalid or disallowed path" }, 400);
370
+ const dirStat = await fs.stat(resolvedDir).catch(() => null);
371
+ if (!dirStat?.isDirectory)
372
+ return c.json({ ok: false, error: "Destination is not a directory" }, 400);
373
+ const rawFiles = body.file;
374
+ const files = Array.isArray(rawFiles)
375
+ ? rawFiles.filter((f) => f instanceof globalThis.File)
376
+ : rawFiles instanceof globalThis.File ? [rawFiles] : [];
377
+ if (files.length === 0)
378
+ return c.json({ ok: false, error: "No files provided" }, 400);
379
+ const uploaded = [];
380
+ for (const file of files) {
381
+ const filePath = resolve(resolvedDir, file.name);
382
+ const rel = relative(resolvedDir, filePath);
383
+ if (rel.startsWith("..") || rel.includes("/"))
384
+ continue;
385
+ const data = new Uint8Array(await file.arrayBuffer());
386
+ if (fs.writeFileBuffer) {
387
+ await fs.writeFileBuffer(filePath, data);
388
+ }
389
+ else {
390
+ await fs.writeFile(filePath, new TextDecoder().decode(data));
391
+ }
392
+ uploaded.push({ name: file.name, size: data.byteLength });
393
+ }
394
+ for (const u of uploaded) {
395
+ deps.emit("file:changed", { path: resolve(resolvedDir, u.name), dir: resolvedDir, action: "created", source: "server" });
396
+ }
397
+ return c.json({ ok: true, data: { uploaded, count: uploaded.length } }, 200);
398
+ });
399
+ // ── POST /mkdir — create a directory ──
400
+ app.post("/mkdir", async (c) => {
401
+ const deps = getDeps();
402
+ const { fs } = deps;
403
+ const body = await c.req.json().catch(() => null);
404
+ if (!body?.path)
405
+ return c.json({ ok: false, error: "Missing path" }, 400);
406
+ const roots = getAllowedRoots();
407
+ const parent = dirname(body.path);
408
+ const resolvedParent = await resolveSandboxed(parent === "." ? "." : parent, roots, fs);
409
+ if (!resolvedParent)
410
+ return c.json({ ok: false, error: "Invalid or disallowed path" }, 400);
411
+ const newDir = resolve(resolvedParent, basename(body.path));
412
+ if (await fs.exists(newDir))
413
+ return c.json({ ok: false, error: "Directory already exists" }, 400);
414
+ await fs.mkdir(newDir);
415
+ deps.emit("file:changed", { path: newDir, dir: resolvedParent, action: "created", source: "server" });
416
+ return c.json({ ok: true, data: { path: body.path } }, 200);
417
+ });
418
+ // ── POST /rename — rename a file or directory ──
419
+ app.post("/rename", async (c) => {
420
+ const deps = getDeps();
421
+ const { fs } = deps;
422
+ const body = await c.req.json().catch(() => null);
423
+ if (!body?.path || !body?.newName)
424
+ return c.json({ ok: false, error: "Missing path or newName" }, 400);
425
+ if (body.newName.includes("/") || body.newName.includes("..")) {
426
+ return c.json({ ok: false, error: "Invalid new name" }, 400);
427
+ }
428
+ const roots = getAllowedRoots();
429
+ const resolved = await resolveSandboxed(body.path, roots, fs);
430
+ if (!resolved)
431
+ return c.json({ ok: false, error: "Invalid or disallowed path" }, 400);
432
+ if (!(await fs.exists(resolved)))
433
+ return c.json({ ok: false, error: "Path not found" }, 404);
434
+ const newPath = resolve(dirname(resolved), body.newName);
435
+ if (await fs.exists(newPath))
436
+ return c.json({ ok: false, error: "A file with that name already exists" }, 400);
437
+ await fs.rename(resolved, newPath);
438
+ deps.emit("file:changed", { path: resolved, dir: dirname(resolved), action: "renamed", source: "server" });
439
+ return c.json({ ok: true, data: { oldPath: body.path, newName: body.newName } }, 200);
440
+ });
441
+ // ── POST /delete — delete a file or empty directory ──
442
+ app.post("/delete", async (c) => {
443
+ const deps = getDeps();
444
+ const { fs } = deps;
445
+ const body = await c.req.json().catch(() => null);
446
+ if (!body?.path)
447
+ return c.json({ ok: false, error: "Missing path" }, 400);
448
+ const roots = getAllowedRoots();
449
+ const resolved = await resolveSandboxed(body.path, roots, fs);
450
+ if (!resolved)
451
+ return c.json({ ok: false, error: "Invalid or disallowed path" }, 400);
452
+ if (!(await fs.exists(resolved)))
453
+ return c.json({ ok: false, error: "Path not found" }, 404);
454
+ for (const root of roots) {
455
+ if (resolved === root)
456
+ return c.json({ ok: false, error: "Cannot delete a root directory" }, 400);
457
+ }
458
+ const s = await fs.stat(resolved);
459
+ if (s.isDirectory) {
460
+ const entries = await fs.readdir(resolved);
461
+ if (entries.length > 0)
462
+ return c.json({ ok: false, error: "Directory is not empty" }, 400);
463
+ }
464
+ await fs.remove(resolved);
465
+ deps.emit("file:changed", { path: resolved, dir: dirname(resolved), action: "deleted", source: "server" });
466
+ return c.json({ ok: true, data: { path: body.path } }, 200);
467
+ });
468
+ // ── GET /search — recursive flat file listing ──
469
+ app.get("/search", async (c) => {
470
+ const deps = getDeps();
471
+ const { fs } = deps;
472
+ const query = (c.req.query("q") ?? "").toLowerCase();
473
+ const agentDir = deps.agentWorkDir;
474
+ const defaultRoot = agentDir !== deps.workDir ? relative(deps.workDir, agentDir) : ".";
475
+ const root = c.req.query("root") ?? defaultRoot;
476
+ const limitParam = c.req.query("limit");
477
+ const limit = limitParam ? Math.min(Number(limitParam), 500) : 200;
478
+ const roots = getAllowedRoots();
479
+ const resolved = await resolveSandboxed(root, roots, fs);
480
+ if (!resolved)
481
+ return c.json({ ok: false, error: "Invalid or disallowed path" }, 400);
482
+ const SKIP = new Set(["node_modules", ".git", ".next", "dist", "__pycache__", ".cache", POLPO_DIR_NAME]);
483
+ const results = [];
484
+ async function walk(dir, depth) {
485
+ if (depth > 10 || results.length >= limit)
486
+ return;
487
+ try {
488
+ const entries = fs.readdirWithTypes
489
+ ? await fs.readdirWithTypes(dir)
490
+ : (await fs.readdir(dir)).map((n) => ({ name: n, isDirectory: false, isFile: true }));
491
+ for (const e of entries) {
492
+ if (results.length >= limit)
493
+ return;
494
+ if (SKIP.has(e.name))
495
+ continue;
496
+ const relPath = relative(resolved, resolve(dir, e.name));
497
+ if (e.isFile) {
498
+ if (!query || e.name.toLowerCase().includes(query) || relPath.toLowerCase().includes(query)) {
499
+ results.push({ name: e.name, path: relPath });
500
+ }
501
+ }
502
+ else if (e.isDirectory) {
503
+ await walk(resolve(dir, e.name), depth + 1);
504
+ }
505
+ }
506
+ }
507
+ catch { /* unreadable dir */ }
508
+ }
509
+ await walk(resolved, 0);
510
+ return c.json({ ok: true, data: { files: results, total: results.length } }, 200);
511
+ });
512
+ return app;
513
+ }
514
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../../src/server/routes/files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { OpenAPIHono } from "@hono/zod-openapi";
2
+ export declare function filesystemRoutes(): OpenAPIHono;
3
+ //# sourceMappingURL=filesystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../../src/server/routes/filesystem.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAiFhE,wBAAgB,gBAAgB,IAAI,WAAW,CAyE9C"}