pi-kot 0.1.0

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 (222) hide show
  1. package/README.md +30 -0
  2. package/bin/pi-kot.mjs +125 -0
  3. package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  4. package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  5. package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  6. package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  7. package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  8. package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  9. package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  10. package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  11. package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  12. package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  13. package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  14. package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  15. package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  16. package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  17. package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  18. package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  19. package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  20. package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  21. package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  22. package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  23. package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  24. package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  25. package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  26. package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  27. package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  28. package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  29. package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  30. package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  31. package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  32. package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  33. package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  34. package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  35. package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  36. package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  37. package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  38. package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  39. package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  40. package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  41. package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  42. package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  43. package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  44. package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  45. package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  46. package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  47. package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  48. package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  49. package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  50. package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  51. package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  52. package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  53. package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  54. package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  55. package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  56. package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  57. package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  58. package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  59. package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  60. package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  61. package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  62. package/dist/client/assets/index-UJgsBs6a.js +361 -0
  63. package/dist/client/assets/index-UJgsBs6a.js.map +1 -0
  64. package/dist/client/assets/index-ZuTc_0YY.css +1 -0
  65. package/dist/client/index.html +14 -0
  66. package/dist/server/ask-user-question/envelope.d.ts +11 -0
  67. package/dist/server/ask-user-question/envelope.d.ts.map +1 -0
  68. package/dist/server/ask-user-question/envelope.js +41 -0
  69. package/dist/server/ask-user-question/envelope.js.map +1 -0
  70. package/dist/server/ask-user-question/prompt-strings.d.ts +4 -0
  71. package/dist/server/ask-user-question/prompt-strings.d.ts.map +1 -0
  72. package/dist/server/ask-user-question/prompt-strings.js +18 -0
  73. package/dist/server/ask-user-question/prompt-strings.js.map +1 -0
  74. package/dist/server/ask-user-question/registry.d.ts +39 -0
  75. package/dist/server/ask-user-question/registry.d.ts.map +1 -0
  76. package/dist/server/ask-user-question/registry.js +124 -0
  77. package/dist/server/ask-user-question/registry.js.map +1 -0
  78. package/dist/server/ask-user-question/tool.d.ts +4 -0
  79. package/dist/server/ask-user-question/tool.d.ts.map +1 -0
  80. package/dist/server/ask-user-question/tool.js +68 -0
  81. package/dist/server/ask-user-question/tool.js.map +1 -0
  82. package/dist/server/ask-user-question/types.d.ts +50 -0
  83. package/dist/server/ask-user-question/types.d.ts.map +1 -0
  84. package/dist/server/ask-user-question/types.js +7 -0
  85. package/dist/server/ask-user-question/types.js.map +1 -0
  86. package/dist/server/ask-user-question/validate.d.ts +3 -0
  87. package/dist/server/ask-user-question/validate.d.ts.map +1 -0
  88. package/dist/server/ask-user-question/validate.js +67 -0
  89. package/dist/server/ask-user-question/validate.js.map +1 -0
  90. package/dist/server/config-manager.d.ts +47 -0
  91. package/dist/server/config-manager.d.ts.map +1 -0
  92. package/dist/server/config-manager.js +182 -0
  93. package/dist/server/config-manager.js.map +1 -0
  94. package/dist/server/config.d.ts +20 -0
  95. package/dist/server/config.d.ts.map +1 -0
  96. package/dist/server/config.js +58 -0
  97. package/dist/server/config.js.map +1 -0
  98. package/dist/server/extension-manager.d.ts +70 -0
  99. package/dist/server/extension-manager.d.ts.map +1 -0
  100. package/dist/server/extension-manager.js +401 -0
  101. package/dist/server/extension-manager.js.map +1 -0
  102. package/dist/server/extension-ui-bridge.d.ts +35 -0
  103. package/dist/server/extension-ui-bridge.d.ts.map +1 -0
  104. package/dist/server/extension-ui-bridge.js +228 -0
  105. package/dist/server/extension-ui-bridge.js.map +1 -0
  106. package/dist/server/file-manager.d.ts +79 -0
  107. package/dist/server/file-manager.d.ts.map +1 -0
  108. package/dist/server/file-manager.js +526 -0
  109. package/dist/server/file-manager.js.map +1 -0
  110. package/dist/server/file-searcher.d.ts +29 -0
  111. package/dist/server/file-searcher.d.ts.map +1 -0
  112. package/dist/server/file-searcher.js +318 -0
  113. package/dist/server/file-searcher.js.map +1 -0
  114. package/dist/server/git-clone.d.ts +56 -0
  115. package/dist/server/git-clone.d.ts.map +1 -0
  116. package/dist/server/git-clone.js +173 -0
  117. package/dist/server/git-clone.js.map +1 -0
  118. package/dist/server/index.d.ts +22 -0
  119. package/dist/server/index.d.ts.map +1 -0
  120. package/dist/server/index.js +196 -0
  121. package/dist/server/index.js.map +1 -0
  122. package/dist/server/lifecycle-notifications.d.ts +28 -0
  123. package/dist/server/lifecycle-notifications.d.ts.map +1 -0
  124. package/dist/server/lifecycle-notifications.js +38 -0
  125. package/dist/server/lifecycle-notifications.js.map +1 -0
  126. package/dist/server/orchestration/config.d.ts +5 -0
  127. package/dist/server/orchestration/config.d.ts.map +1 -0
  128. package/dist/server/orchestration/config.js +35 -0
  129. package/dist/server/orchestration/config.js.map +1 -0
  130. package/dist/server/orchestration/event-bridge.d.ts +32 -0
  131. package/dist/server/orchestration/event-bridge.d.ts.map +1 -0
  132. package/dist/server/orchestration/event-bridge.js +110 -0
  133. package/dist/server/orchestration/event-bridge.js.map +1 -0
  134. package/dist/server/orchestration/inbox.d.ts +9 -0
  135. package/dist/server/orchestration/inbox.d.ts.map +1 -0
  136. package/dist/server/orchestration/inbox.js +186 -0
  137. package/dist/server/orchestration/inbox.js.map +1 -0
  138. package/dist/server/orchestration/init.d.ts +2 -0
  139. package/dist/server/orchestration/init.d.ts.map +1 -0
  140. package/dist/server/orchestration/init.js +22 -0
  141. package/dist/server/orchestration/init.js.map +1 -0
  142. package/dist/server/orchestration/store.d.ts +33 -0
  143. package/dist/server/orchestration/store.d.ts.map +1 -0
  144. package/dist/server/orchestration/store.js +331 -0
  145. package/dist/server/orchestration/store.js.map +1 -0
  146. package/dist/server/orchestration/tools.d.ts +15 -0
  147. package/dist/server/orchestration/tools.d.ts.map +1 -0
  148. package/dist/server/orchestration/tools.js +621 -0
  149. package/dist/server/orchestration/tools.js.map +1 -0
  150. package/dist/server/orchestration/types.d.ts +68 -0
  151. package/dist/server/orchestration/types.d.ts.map +1 -0
  152. package/dist/server/orchestration/types.js +43 -0
  153. package/dist/server/orchestration/types.js.map +1 -0
  154. package/dist/server/orchestration/worker-lifecycle.d.ts +15 -0
  155. package/dist/server/orchestration/worker-lifecycle.d.ts.map +1 -0
  156. package/dist/server/orchestration/worker-lifecycle.js +45 -0
  157. package/dist/server/orchestration/worker-lifecycle.js.map +1 -0
  158. package/dist/server/project-manager.d.ts +25 -0
  159. package/dist/server/project-manager.d.ts.map +1 -0
  160. package/dist/server/project-manager.js +157 -0
  161. package/dist/server/project-manager.js.map +1 -0
  162. package/dist/server/routes/_schemas.d.ts +16 -0
  163. package/dist/server/routes/_schemas.d.ts.map +1 -0
  164. package/dist/server/routes/_schemas.js +12 -0
  165. package/dist/server/routes/_schemas.js.map +1 -0
  166. package/dist/server/routes/ask-user-question.d.ts +3 -0
  167. package/dist/server/routes/ask-user-question.d.ts.map +1 -0
  168. package/dist/server/routes/ask-user-question.js +105 -0
  169. package/dist/server/routes/ask-user-question.js.map +1 -0
  170. package/dist/server/routes/auth.d.ts +7 -0
  171. package/dist/server/routes/auth.d.ts.map +1 -0
  172. package/dist/server/routes/auth.js +126 -0
  173. package/dist/server/routes/auth.js.map +1 -0
  174. package/dist/server/routes/config.d.ts +3 -0
  175. package/dist/server/routes/config.d.ts.map +1 -0
  176. package/dist/server/routes/config.js +203 -0
  177. package/dist/server/routes/config.js.map +1 -0
  178. package/dist/server/routes/control.d.ts +3 -0
  179. package/dist/server/routes/control.d.ts.map +1 -0
  180. package/dist/server/routes/control.js +180 -0
  181. package/dist/server/routes/control.js.map +1 -0
  182. package/dist/server/routes/extension-commands.d.ts +22 -0
  183. package/dist/server/routes/extension-commands.d.ts.map +1 -0
  184. package/dist/server/routes/extension-commands.js +178 -0
  185. package/dist/server/routes/extension-commands.js.map +1 -0
  186. package/dist/server/routes/extensions.d.ts +8 -0
  187. package/dist/server/routes/extensions.d.ts.map +1 -0
  188. package/dist/server/routes/extensions.js +169 -0
  189. package/dist/server/routes/extensions.js.map +1 -0
  190. package/dist/server/routes/files.d.ts +3 -0
  191. package/dist/server/routes/files.d.ts.map +1 -0
  192. package/dist/server/routes/files.js +549 -0
  193. package/dist/server/routes/files.js.map +1 -0
  194. package/dist/server/routes/orchestration.d.ts +3 -0
  195. package/dist/server/routes/orchestration.d.ts.map +1 -0
  196. package/dist/server/routes/orchestration.js +251 -0
  197. package/dist/server/routes/orchestration.js.map +1 -0
  198. package/dist/server/routes/projects.d.ts +3 -0
  199. package/dist/server/routes/projects.d.ts.map +1 -0
  200. package/dist/server/routes/projects.js +412 -0
  201. package/dist/server/routes/projects.js.map +1 -0
  202. package/dist/server/routes/prompt.d.ts +3 -0
  203. package/dist/server/routes/prompt.d.ts.map +1 -0
  204. package/dist/server/routes/prompt.js +192 -0
  205. package/dist/server/routes/prompt.js.map +1 -0
  206. package/dist/server/routes/sessions.d.ts +3 -0
  207. package/dist/server/routes/sessions.d.ts.map +1 -0
  208. package/dist/server/routes/sessions.js +581 -0
  209. package/dist/server/routes/sessions.js.map +1 -0
  210. package/dist/server/routes/stream.d.ts +3 -0
  211. package/dist/server/routes/stream.d.ts.map +1 -0
  212. package/dist/server/routes/stream.js +109 -0
  213. package/dist/server/routes/stream.js.map +1 -0
  214. package/dist/server/session-registry.d.ts +151 -0
  215. package/dist/server/session-registry.d.ts.map +1 -0
  216. package/dist/server/session-registry.js +655 -0
  217. package/dist/server/session-registry.js.map +1 -0
  218. package/dist/server/sse-bridge.d.ts +31 -0
  219. package/dist/server/sse-bridge.d.ts.map +1 -0
  220. package/dist/server/sse-bridge.js +126 -0
  221. package/dist/server/sse-bridge.js.map +1 -0
  222. package/package.json +69 -0
@@ -0,0 +1,549 @@
1
+ import { join } from "node:path";
2
+ import { ChecksumMismatchError, DirectoryNotEmptyError, FileTooLargeError, InvalidNameError, NotAFileError, NotFoundError, PathOutsideRootError, TargetExistsError, deleteEntry, downloadStream, getTree, listAllFiles, makeDirectory, moveEntry, readFile, renameEntry, writeFile, } from "../file-manager.js";
3
+ import { getProject } from "../project-manager.js";
4
+ import { searchFiles, SearchEngineUnavailableError } from "../file-searcher.js";
5
+ import { errorSchema } from "./_schemas.js";
6
+ // Multipart upload is deferred until @fastify/multipart is added to the server stack.
7
+ const treeNodeSchema = {
8
+ type: "object",
9
+ required: ["name", "path", "type"],
10
+ additionalProperties: true,
11
+ properties: {
12
+ name: { type: "string" },
13
+ path: { type: "string" },
14
+ type: { type: "string", enum: ["file", "directory"] },
15
+ children: { type: "array", items: { type: "object", additionalProperties: true } },
16
+ truncated: { type: "boolean" },
17
+ },
18
+ };
19
+ const readResponseSchema = {
20
+ type: "object",
21
+ required: ["path", "content", "size", "language", "binary"],
22
+ properties: {
23
+ path: { type: "string" },
24
+ content: { type: "string" },
25
+ size: { type: "integer", minimum: 0 },
26
+ language: { type: "string" },
27
+ binary: { type: "boolean" },
28
+ },
29
+ };
30
+ function clampLimit(raw) {
31
+ if (raw === undefined)
32
+ return 50;
33
+ const n = Number.parseInt(raw, 10);
34
+ if (!Number.isFinite(n) || n <= 0)
35
+ return 50;
36
+ return Math.min(n, 200);
37
+ }
38
+ function mapError(reply, err) {
39
+ if (err instanceof PathOutsideRootError) {
40
+ return reply.code(403).send({ error: "path_not_allowed", message: "path is outside the project root" });
41
+ }
42
+ if (err instanceof InvalidNameError) {
43
+ return reply.code(400).send({ error: "invalid_name", message: err.message });
44
+ }
45
+ if (err instanceof NotFoundError) {
46
+ return reply.code(404).send({ error: "not_found", message: "file or directory not found" });
47
+ }
48
+ if (err instanceof NotAFileError) {
49
+ return reply.code(400).send({ error: "not_a_file", message: "target is not a regular file" });
50
+ }
51
+ if (err instanceof FileTooLargeError) {
52
+ return reply.code(413).send({ error: "file_too_large", message: `${err.size} > ${err.limit}` });
53
+ }
54
+ if (err instanceof DirectoryNotEmptyError) {
55
+ return reply.code(409).send({
56
+ error: "directory_not_empty",
57
+ message: "delete the contents first; recursive delete is not supported",
58
+ });
59
+ }
60
+ if (err instanceof TargetExistsError) {
61
+ return reply.code(409).send({ error: "target_exists", message: "destination already exists" });
62
+ }
63
+ if (err instanceof ChecksumMismatchError) {
64
+ return reply.code(422).send({
65
+ error: "checksum_mismatch",
66
+ message: `expected sha256 ${err.expected}, computed ${err.actual}`,
67
+ });
68
+ }
69
+ if (err instanceof SearchEngineUnavailableError) {
70
+ return reply.code(503).send({ error: "engine_unavailable", message: err.message });
71
+ }
72
+ const code = err.code;
73
+ if (code === "ENOENT") {
74
+ return reply.code(404).send({ error: "not_found", message: "file or directory not found" });
75
+ }
76
+ if (code === "EACCES" || code === "EPERM") {
77
+ return reply.code(403).send({ error: "permission_denied", message: "filesystem permission denied" });
78
+ }
79
+ if (code === "EISDIR") {
80
+ return reply.code(400).send({ error: "not_a_file", message: "target is a directory, not a file" });
81
+ }
82
+ if (code === "ENOTDIR") {
83
+ return reply.code(400).send({ error: "not_a_directory", message: "target is a file, not a directory" });
84
+ }
85
+ reply.log.error({ err }, "unmapped file-manager error");
86
+ return reply.code(500).send({ error: "internal_error" });
87
+ }
88
+ async function resolveProject(projectId, reply) {
89
+ const project = await getProject(projectId);
90
+ if (project === undefined) {
91
+ await reply.code(404).send({ error: "project_not_found", message: "no project with that id" });
92
+ return undefined;
93
+ }
94
+ return { id: project.id, path: project.path };
95
+ }
96
+ export const fileRoutes = async (fastify) => {
97
+ fastify.get("/files/complete", {
98
+ logLevel: "warn",
99
+ schema: {
100
+ description: "Flat list of project files matching `query` (path-substring, " +
101
+ "case-insensitive). Used by the chat input's `@` autocomplete. " +
102
+ "Skips the same noisy directories as /files/tree. Returns up to " +
103
+ "`limit` (default 50) POSIX-style paths relative to the project " +
104
+ "root, ranked so a basename match beats a deep-path match and " +
105
+ "shorter paths beat longer ones.",
106
+ tags: ["files"],
107
+ querystring: {
108
+ type: "object",
109
+ required: ["projectId"],
110
+ properties: {
111
+ projectId: { type: "string", minLength: 1 },
112
+ query: { type: "string", maxLength: 256 },
113
+ limit: { type: "string" },
114
+ },
115
+ },
116
+ response: {
117
+ 200: {
118
+ type: "object",
119
+ required: ["paths"],
120
+ properties: { paths: { type: "array", items: { type: "string" } } },
121
+ },
122
+ 404: errorSchema,
123
+ 500: errorSchema,
124
+ },
125
+ },
126
+ }, async (req, reply) => {
127
+ const project = await getProject(req.query.projectId);
128
+ if (project === undefined) {
129
+ return reply.code(404).send({ error: "project_not_found" });
130
+ }
131
+ const query = (req.query.query ?? "").toLowerCase();
132
+ const limit = clampLimit(req.query.limit);
133
+ try {
134
+ const all = await listAllFiles(project.path);
135
+ if (query.length === 0) {
136
+ return { paths: all.sort().slice(0, limit) };
137
+ }
138
+ const scored = [];
139
+ for (const p of all) {
140
+ const lower = p.toLowerCase();
141
+ const slash = lower.lastIndexOf("/");
142
+ const base = slash === -1 ? lower : lower.slice(slash + 1);
143
+ let score;
144
+ if (base === query)
145
+ score = 0;
146
+ else if (base.startsWith(query))
147
+ score = 1;
148
+ else if (base.includes(query))
149
+ score = 2;
150
+ else if (lower.includes(query))
151
+ score = 3;
152
+ else
153
+ continue;
154
+ scored.push({ path: p, score });
155
+ }
156
+ scored.sort((a, b) => a.score !== b.score ? a.score - b.score : a.path.length - b.path.length);
157
+ return { paths: scored.slice(0, limit).map((s) => s.path) };
158
+ }
159
+ catch (err) {
160
+ return mapError(reply, err);
161
+ }
162
+ });
163
+ fastify.get("/files/tree", {
164
+ schema: {
165
+ description: "Recursive directory tree for the project. Skips noisy folders " +
166
+ "(node_modules, .git, dist, build, __pycache__, .next, .nuxt, " +
167
+ "coverage, .vite, .turbo, .cache). Recursion is capped at " +
168
+ "max depth 32 to avoid unbounded filesystem walks.",
169
+ tags: ["files"],
170
+ querystring: {
171
+ type: "object",
172
+ required: ["projectId"],
173
+ properties: {
174
+ projectId: { type: "string", minLength: 1 },
175
+ maxDepth: { type: "string", pattern: "^[0-9]+$" },
176
+ },
177
+ },
178
+ response: { 200: treeNodeSchema, 404: errorSchema, 500: errorSchema },
179
+ },
180
+ }, async (req, reply) => {
181
+ const project = await resolveProject(req.query.projectId, reply);
182
+ if (project === undefined)
183
+ return reply;
184
+ try {
185
+ let maxDepth;
186
+ if (req.query.maxDepth !== undefined) {
187
+ const n = Number.parseInt(req.query.maxDepth, 10);
188
+ maxDepth = Math.min(Math.max(n, 1), 32);
189
+ }
190
+ const tree = await getTree(project.path, maxDepth !== undefined ? { maxDepth } : {});
191
+ return tree;
192
+ }
193
+ catch (err) {
194
+ return mapError(reply, err);
195
+ }
196
+ });
197
+ fastify.get("/files/download", {
198
+ schema: {
199
+ description: "Download a file or directory from the project. Files stream " +
200
+ "verbatim with `Content-Disposition: attachment`; directories " +
201
+ "stream as a gzipped tar (`<dir>.tar.gz`) with the same exclusions " +
202
+ "as the file tree (node_modules, .git, dist, build, etc.). Omitting " +
203
+ "`path` downloads the whole project as a tar.gz.",
204
+ tags: ["files"],
205
+ querystring: {
206
+ type: "object",
207
+ required: ["projectId"],
208
+ properties: {
209
+ projectId: { type: "string", minLength: 1 },
210
+ path: { type: "string", minLength: 1 },
211
+ },
212
+ },
213
+ response: {
214
+ 200: { type: "string", format: "binary" },
215
+ 400: errorSchema,
216
+ 403: errorSchema,
217
+ 404: errorSchema,
218
+ 500: errorSchema,
219
+ },
220
+ },
221
+ }, async (req, reply) => {
222
+ const project = await resolveProject(req.query.projectId, reply);
223
+ if (project === undefined)
224
+ return reply;
225
+ const target = req.query.path !== undefined ? join(project.path, req.query.path) : project.path;
226
+ try {
227
+ const result = await downloadStream(target, project.path);
228
+ const asciiName = result.filename.replace(/[^\x20-\x7e]/g, "_");
229
+ const utfName = encodeURIComponent(result.filename);
230
+ reply.header("Content-Disposition", `attachment; filename="${asciiName}"; filename*=UTF-8''${utfName}`);
231
+ if (result.kind === "file") {
232
+ reply.header("Content-Type", "application/octet-stream");
233
+ reply.header("Content-Length", String(result.size));
234
+ }
235
+ else {
236
+ reply.header("Content-Type", "application/gzip");
237
+ }
238
+ return reply.send(result.stream);
239
+ }
240
+ catch (err) {
241
+ return mapError(reply, err);
242
+ }
243
+ });
244
+ fastify.get("/files/read", {
245
+ schema: {
246
+ description: "Read a UTF-8 file from the project. 5 MB cap (returns 413). " +
247
+ "Binary files return `{ binary: true, content: '' }` rather than a " +
248
+ "garbled UTF-8 decode — clients should not pass binary content " +
249
+ "to the editor.",
250
+ tags: ["files"],
251
+ querystring: {
252
+ type: "object",
253
+ required: ["projectId", "path"],
254
+ properties: {
255
+ projectId: { type: "string", minLength: 1 },
256
+ path: { type: "string", minLength: 1 },
257
+ },
258
+ },
259
+ response: {
260
+ 200: readResponseSchema,
261
+ 400: errorSchema,
262
+ 403: errorSchema,
263
+ 404: errorSchema,
264
+ 413: errorSchema,
265
+ 500: errorSchema,
266
+ },
267
+ },
268
+ }, async (req, reply) => {
269
+ const project = await resolveProject(req.query.projectId, reply);
270
+ if (project === undefined)
271
+ return reply;
272
+ try {
273
+ const result = await readFile(join(project.path, req.query.path), project.path);
274
+ return result;
275
+ }
276
+ catch (err) {
277
+ return mapError(reply, err);
278
+ }
279
+ });
280
+ fastify.put("/files/write", {
281
+ schema: {
282
+ description: "Atomic write (tmp + rename). Creates parent directories as " +
283
+ "needed. The body's `path` is required to be inside the project " +
284
+ "root — 403 otherwise.",
285
+ tags: ["files"],
286
+ body: {
287
+ type: "object",
288
+ required: ["projectId", "path", "content"],
289
+ additionalProperties: false,
290
+ properties: {
291
+ projectId: { type: "string", minLength: 1 },
292
+ path: { type: "string", minLength: 1 },
293
+ content: { type: "string" },
294
+ },
295
+ },
296
+ response: {
297
+ 200: { type: "object", required: ["path"], properties: { path: { type: "string" } } },
298
+ 400: errorSchema,
299
+ 403: errorSchema,
300
+ 404: errorSchema,
301
+ 500: errorSchema,
302
+ },
303
+ },
304
+ }, async (req, reply) => {
305
+ const project = await resolveProject(req.body.projectId, reply);
306
+ if (project === undefined)
307
+ return reply;
308
+ try {
309
+ await writeFile(join(project.path, req.body.path), project.path, req.body.content);
310
+ return { path: req.body.path };
311
+ }
312
+ catch (err) {
313
+ return mapError(reply, err);
314
+ }
315
+ });
316
+ fastify.post("/files/mkdir", {
317
+ schema: {
318
+ description: "Create a single directory under `parentPath`.",
319
+ tags: ["files"],
320
+ body: {
321
+ type: "object",
322
+ required: ["projectId", "parentPath", "name"],
323
+ additionalProperties: false,
324
+ properties: {
325
+ projectId: { type: "string", minLength: 1 },
326
+ parentPath: { type: "string", minLength: 1 },
327
+ name: { type: "string", minLength: 1 },
328
+ },
329
+ },
330
+ response: {
331
+ 200: { type: "object", required: ["path"], properties: { path: { type: "string" } } },
332
+ 400: errorSchema,
333
+ 403: errorSchema,
334
+ 404: errorSchema,
335
+ 409: errorSchema,
336
+ 500: errorSchema,
337
+ },
338
+ },
339
+ }, async (req, reply) => {
340
+ const project = await resolveProject(req.body.projectId, reply);
341
+ if (project === undefined)
342
+ return reply;
343
+ try {
344
+ const created = await makeDirectory(join(project.path, req.body.parentPath), project.path, req.body.name);
345
+ return { path: created };
346
+ }
347
+ catch (err) {
348
+ return mapError(reply, err);
349
+ }
350
+ });
351
+ fastify.post("/files/rename", {
352
+ schema: {
353
+ description: "Rename a file or directory in place — `name` is the new basename. " +
354
+ "Use /files/move to relocate across directories.",
355
+ tags: ["files"],
356
+ body: {
357
+ type: "object",
358
+ required: ["projectId", "path", "name"],
359
+ additionalProperties: false,
360
+ properties: {
361
+ projectId: { type: "string", minLength: 1 },
362
+ path: { type: "string", minLength: 1 },
363
+ name: { type: "string", minLength: 1 },
364
+ },
365
+ },
366
+ response: {
367
+ 200: { type: "object", required: ["path"], properties: { path: { type: "string" } } },
368
+ 400: errorSchema,
369
+ 403: errorSchema,
370
+ 404: errorSchema,
371
+ 409: errorSchema,
372
+ 500: errorSchema,
373
+ },
374
+ },
375
+ }, async (req, reply) => {
376
+ const project = await resolveProject(req.body.projectId, reply);
377
+ if (project === undefined)
378
+ return reply;
379
+ try {
380
+ const renamed = await renameEntry(join(project.path, req.body.path), project.path, req.body.name);
381
+ return { path: renamed };
382
+ }
383
+ catch (err) {
384
+ return mapError(reply, err);
385
+ }
386
+ });
387
+ fastify.post("/files/move", {
388
+ schema: {
389
+ description: "Move a file or directory to `dest` (a full destination path). " +
390
+ "Refuses to move a directory under itself; refuses if `dest` " +
391
+ "already exists.",
392
+ tags: ["files"],
393
+ body: {
394
+ type: "object",
395
+ required: ["projectId", "src", "dest"],
396
+ additionalProperties: false,
397
+ properties: {
398
+ projectId: { type: "string", minLength: 1 },
399
+ src: { type: "string", minLength: 1 },
400
+ dest: { type: "string", minLength: 1 },
401
+ },
402
+ },
403
+ response: {
404
+ 200: { type: "object", required: ["path"], properties: { path: { type: "string" } } },
405
+ 400: errorSchema,
406
+ 403: errorSchema,
407
+ 404: errorSchema,
408
+ 409: errorSchema,
409
+ 500: errorSchema,
410
+ },
411
+ },
412
+ }, async (req, reply) => {
413
+ const project = await resolveProject(req.body.projectId, reply);
414
+ if (project === undefined)
415
+ return reply;
416
+ try {
417
+ const moved = await moveEntry(join(project.path, req.body.src), join(project.path, req.body.dest), project.path);
418
+ return { path: moved };
419
+ }
420
+ catch (err) {
421
+ return mapError(reply, err);
422
+ }
423
+ });
424
+ fastify.delete("/files/delete", {
425
+ schema: {
426
+ description: "Delete a file or directory. Empty directories delete unconditionally. " +
427
+ "Non-empty directories return 409 unless `?recursive=true` is set, in " +
428
+ "which case the entire subtree is removed. The UI prompts the user with " +
429
+ "a second confirmation before retrying with the recursive flag — single- " +
430
+ "user single-tenant, but `rm -rf` should still be an explicit choice.",
431
+ tags: ["files"],
432
+ querystring: {
433
+ type: "object",
434
+ required: ["projectId", "path"],
435
+ properties: {
436
+ projectId: { type: "string", minLength: 1 },
437
+ path: { type: "string", minLength: 1 },
438
+ recursive: { type: "string", enum: ["true", "false"] },
439
+ },
440
+ },
441
+ response: {
442
+ 204: { type: "null" },
443
+ 400: errorSchema,
444
+ 403: errorSchema,
445
+ 404: errorSchema,
446
+ 409: errorSchema,
447
+ 500: errorSchema,
448
+ },
449
+ },
450
+ }, async (req, reply) => {
451
+ const project = await resolveProject(req.query.projectId, reply);
452
+ if (project === undefined)
453
+ return reply;
454
+ try {
455
+ const recursive = req.query.recursive === "true";
456
+ await deleteEntry(join(project.path, req.query.path), project.path, { recursive });
457
+ return reply.code(204).send();
458
+ }
459
+ catch (err) {
460
+ return mapError(reply, err);
461
+ }
462
+ });
463
+ fastify.get("/files/search", {
464
+ schema: {
465
+ description: "Cross-project text + regex search. Uses ripgrep when available " +
466
+ "(fast + gitignore-aware) and falls back to a Node walk on hosts " +
467
+ "without rg. Response includes `engine: 'ripgrep' | 'node'` so the " +
468
+ "UI can render a fallback-mode badge. Hard caps: 1000 matches max " +
469
+ "per request, 30s wall clock, 5 MB per file. Binary files are " +
470
+ "skipped via NUL-byte heuristic on the fallback path; ripgrep " +
471
+ "uses its own (better) binary detection.",
472
+ tags: ["files"],
473
+ querystring: {
474
+ type: "object",
475
+ required: ["projectId", "q"],
476
+ properties: {
477
+ projectId: { type: "string", minLength: 1 },
478
+ q: { type: "string", minLength: 1, maxLength: 1024 },
479
+ regex: { type: "string", enum: ["0", "1", "true", "false"] },
480
+ caseSensitive: { type: "string", enum: ["0", "1", "true", "false"] },
481
+ includeGitignored: { type: "string", enum: ["0", "1", "true", "false"] },
482
+ include: { type: "string", maxLength: 256 },
483
+ exclude: { type: "string", maxLength: 256 },
484
+ limit: { type: "string", pattern: "^[0-9]+$" },
485
+ },
486
+ },
487
+ response: {
488
+ 200: {
489
+ type: "object",
490
+ required: ["engine", "matches", "truncated"],
491
+ properties: {
492
+ engine: { type: "string", enum: ["ripgrep", "node"] },
493
+ truncated: { type: "boolean" },
494
+ matches: {
495
+ type: "array",
496
+ items: {
497
+ type: "object",
498
+ required: ["path", "line", "column", "length", "lineSnippet"],
499
+ properties: {
500
+ path: { type: "string" },
501
+ line: { type: "integer", minimum: 1 },
502
+ column: { type: "integer", minimum: 1 },
503
+ length: { type: "integer", minimum: 0 },
504
+ lineSnippet: { type: "string" },
505
+ },
506
+ },
507
+ },
508
+ },
509
+ },
510
+ 400: errorSchema,
511
+ 404: errorSchema,
512
+ 500: errorSchema,
513
+ },
514
+ },
515
+ }, async (req, reply) => {
516
+ const project = await resolveProject(req.query.projectId, reply);
517
+ if (project === undefined)
518
+ return reply;
519
+ const { q } = req.query;
520
+ const regex = req.query.regex === "1" || req.query.regex === "true";
521
+ const caseSensitive = req.query.caseSensitive === "1" || req.query.caseSensitive === "true";
522
+ const includeGitignored = req.query.includeGitignored === "1" || req.query.includeGitignored === "true";
523
+ const limit = req.query.limit !== undefined
524
+ ? Math.min(1000, Math.max(1, Number.parseInt(req.query.limit, 10)))
525
+ : 200;
526
+ try {
527
+ const opts = {
528
+ query: q,
529
+ regex,
530
+ caseSensitive,
531
+ includeGitignored,
532
+ limit,
533
+ timeoutMs: 30_000,
534
+ };
535
+ if (req.query.include !== undefined && req.query.include.length > 0) {
536
+ opts.include = req.query.include;
537
+ }
538
+ if (req.query.exclude !== undefined && req.query.exclude.length > 0) {
539
+ opts.exclude = req.query.exclude;
540
+ }
541
+ const result = await searchFiles(project.path, opts);
542
+ return result;
543
+ }
544
+ catch (err) {
545
+ return mapError(reply, err);
546
+ }
547
+ });
548
+ };
549
+ //# 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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"}
@@ -0,0 +1,3 @@
1
+ import type { FastifyPluginAsync } from "fastify";
2
+ export declare const orchestrationRoutes: FastifyPluginAsync;
3
+ //# sourceMappingURL=orchestration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestration.d.ts","sourceRoot":"","sources":["../../src/routes/orchestration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAkClD,eAAO,MAAM,mBAAmB,EAAE,kBA+SjC,CAAC"}