@polpo-ai/server 0.2.8 → 0.2.9

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