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,526 @@
1
+ import { mkdir, readFile as fsReadFile, readdir, realpath, rename as fsRename, rm, rmdir, stat, unlink, writeFile as fsWriteFile, } from "node:fs/promises";
2
+ import { createReadStream, createWriteStream } from "node:fs";
3
+ import { once } from "node:events";
4
+ import { basename, dirname, extname, join, relative, resolve, sep } from "node:path";
5
+ import { createHash, randomUUID } from "node:crypto";
6
+ import { create as tarCreate } from "tar";
7
+ export class PathOutsideRootError extends Error {
8
+ constructor(target, root) {
9
+ super(`path outside project root: ${target} (root=${root})`);
10
+ this.name = "PathOutsideRootError";
11
+ }
12
+ }
13
+ export class NotFoundError extends Error {
14
+ constructor(path) {
15
+ super(`not found: ${path}`);
16
+ this.name = "NotFoundError";
17
+ }
18
+ }
19
+ export class NotAFileError extends Error {
20
+ constructor(path) {
21
+ super(`not a file: ${path}`);
22
+ this.name = "NotAFileError";
23
+ }
24
+ }
25
+ export class FileTooLargeError extends Error {
26
+ size;
27
+ limit;
28
+ constructor(path, size, limit) {
29
+ super(`file too large: ${path} (${size} > ${limit})`);
30
+ this.name = "FileTooLargeError";
31
+ this.size = size;
32
+ this.limit = limit;
33
+ }
34
+ }
35
+ export class DirectoryNotEmptyError extends Error {
36
+ constructor(path) {
37
+ super(`directory not empty: ${path}`);
38
+ this.name = "DirectoryNotEmptyError";
39
+ }
40
+ }
41
+ export class InvalidNameError extends Error {
42
+ constructor(message = "invalid file name") {
43
+ super(message);
44
+ this.name = "InvalidNameError";
45
+ }
46
+ }
47
+ export class ChecksumMismatchError extends Error {
48
+ target;
49
+ expected;
50
+ actual;
51
+ constructor(target, expected, actual) {
52
+ super(`checksum mismatch at ${target} (expected ${expected}, got ${actual})`);
53
+ this.name = "ChecksumMismatchError";
54
+ this.target = target;
55
+ this.expected = expected;
56
+ this.actual = actual;
57
+ }
58
+ }
59
+ export class TargetExistsError extends Error {
60
+ constructor(path) {
61
+ super(`target already exists: ${path}`);
62
+ this.name = "TargetExistsError";
63
+ }
64
+ }
65
+ export const MAX_READ_BYTES = 5 * 1024 * 1024;
66
+ const TREE_SKIP_DIRS = new Set([
67
+ "node_modules",
68
+ ".git",
69
+ "dist",
70
+ "build",
71
+ "__pycache__",
72
+ ".next",
73
+ ".nuxt",
74
+ "coverage",
75
+ ".vite",
76
+ ".turbo",
77
+ ".cache",
78
+ ]);
79
+ export const SEARCH_SKIP_DIRS = TREE_SKIP_DIRS;
80
+ const DEFAULT_TREE_DEPTH = 32;
81
+ export function assertInsideRoot(target, root) {
82
+ if (target.includes("\0"))
83
+ throw new PathOutsideRootError(target, root);
84
+ const resolvedTarget = resolve(target);
85
+ const resolvedRoot = resolve(root);
86
+ if (resolvedTarget === resolvedRoot)
87
+ return resolvedTarget;
88
+ const rel = relative(resolvedRoot, resolvedTarget);
89
+ if (rel.length === 0 || rel.startsWith("..") || rel.startsWith(`..${sep}`)) {
90
+ throw new PathOutsideRootError(target, root);
91
+ }
92
+ return resolvedTarget;
93
+ }
94
+ async function verifyPathSafe(target, root) {
95
+ assertInsideRoot(target, root);
96
+ const realRoot = await realpath(root);
97
+ const lexicalTarget = resolve(target);
98
+ let cursor = lexicalTarget;
99
+ while (true) {
100
+ try {
101
+ const real = await realpath(cursor);
102
+ assertInsideRoot(real, realRoot);
103
+ return lexicalTarget;
104
+ }
105
+ catch (err) {
106
+ const code = err.code;
107
+ if (code !== "ENOENT")
108
+ throw err;
109
+ const parent = dirname(cursor);
110
+ if (parent === cursor) {
111
+ throw new PathOutsideRootError(target, root);
112
+ }
113
+ cursor = parent;
114
+ }
115
+ }
116
+ }
117
+ function validateName(name) {
118
+ const trimmed = name.trim();
119
+ if (trimmed.length === 0 ||
120
+ trimmed.includes("/") ||
121
+ trimmed.includes("\\") ||
122
+ trimmed.includes("\0") ||
123
+ trimmed === "." ||
124
+ trimmed === "..") {
125
+ throw new InvalidNameError();
126
+ }
127
+ return trimmed;
128
+ }
129
+ export async function getTree(rootPath, opts = {}) {
130
+ const root = resolve(rootPath);
131
+ const st = await stat(root).catch(() => undefined);
132
+ if (!st?.isDirectory()) {
133
+ throw new NotFoundError(root);
134
+ }
135
+ const maxDepth = opts.maxDepth ?? DEFAULT_TREE_DEPTH;
136
+ return walk(root, root, "", 0, maxDepth);
137
+ }
138
+ async function walk(dir, root, relPath, depth, maxDepth) {
139
+ const name = relPath === "" ? "" : (relPath.split(sep).pop() ?? "");
140
+ const node = {
141
+ name,
142
+ path: relPath,
143
+ type: "directory",
144
+ children: [],
145
+ };
146
+ if (depth >= maxDepth) {
147
+ node.truncated = true;
148
+ delete node.children;
149
+ return node;
150
+ }
151
+ let entries;
152
+ try {
153
+ entries = await readdir(dir, { withFileTypes: true });
154
+ }
155
+ catch {
156
+ node.truncated = true;
157
+ delete node.children;
158
+ return node;
159
+ }
160
+ entries.sort((a, b) => {
161
+ const da = a.isDirectory() ? 0 : 1;
162
+ const db = b.isDirectory() ? 0 : 1;
163
+ if (da !== db)
164
+ return da - db;
165
+ return a.name.localeCompare(b.name, undefined, { sensitivity: "base" });
166
+ });
167
+ for (const ent of entries) {
168
+ if (ent.isDirectory() && TREE_SKIP_DIRS.has(ent.name))
169
+ continue;
170
+ const childRel = relPath === "" ? ent.name : `${relPath}${sep}${ent.name}`;
171
+ const childAbs = join(dir, ent.name);
172
+ if (ent.isDirectory()) {
173
+ const sub = await walk(childAbs, root, childRel, depth + 1, maxDepth);
174
+ node.children?.push(sub);
175
+ }
176
+ else if (ent.isFile()) {
177
+ node.children?.push({
178
+ name: ent.name,
179
+ path: childRel,
180
+ type: "file",
181
+ });
182
+ }
183
+ else if (ent.isSymbolicLink()) {
184
+ const linked = await safeLinkedStat(childAbs, root).catch(() => undefined);
185
+ if (linked?.isDirectory()) {
186
+ if (TREE_SKIP_DIRS.has(ent.name))
187
+ continue;
188
+ const sub = await walk(childAbs, root, childRel, depth + 1, maxDepth);
189
+ node.children?.push(sub);
190
+ }
191
+ else if (linked?.isFile()) {
192
+ node.children?.push({
193
+ name: ent.name,
194
+ path: childRel,
195
+ type: "file",
196
+ });
197
+ }
198
+ }
199
+ }
200
+ return node;
201
+ }
202
+ async function safeLinkedStat(path, root) {
203
+ await verifyPathSafe(path, root);
204
+ return stat(path);
205
+ }
206
+ export async function listAllFiles(rootPath) {
207
+ const root = resolve(rootPath);
208
+ const st = await stat(root).catch(() => undefined);
209
+ if (!st?.isDirectory())
210
+ throw new NotFoundError(root);
211
+ const out = [];
212
+ await walkFlat(root, root, "", out);
213
+ return out;
214
+ }
215
+ async function walkFlat(dir, root, relPath, out) {
216
+ const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);
217
+ for (const entry of entries) {
218
+ const name = entry.name;
219
+ if (entry.isDirectory()) {
220
+ if (TREE_SKIP_DIRS.has(name))
221
+ continue;
222
+ const dirRel = relPath === "" ? name : `${relPath}/${name}`;
223
+ out.push(`${dirRel}/`);
224
+ await walkFlat(join(dir, name), root, dirRel, out);
225
+ }
226
+ else if (entry.isFile()) {
227
+ out.push(relPath === "" ? name : `${relPath}/${name}`);
228
+ }
229
+ }
230
+ }
231
+ export async function readFile(absPath, root) {
232
+ const resolved = await verifyPathSafe(absPath, root);
233
+ const st = await stat(resolved).catch(() => undefined);
234
+ if (st === undefined)
235
+ throw new NotFoundError(resolved);
236
+ if (!st.isFile())
237
+ throw new NotAFileError(resolved);
238
+ if (st.size > MAX_READ_BYTES)
239
+ throw new FileTooLargeError(resolved, st.size, MAX_READ_BYTES);
240
+ const buf = await fsReadFile(resolved);
241
+ const binary = looksBinary(buf);
242
+ return {
243
+ path: resolved,
244
+ content: binary ? "" : buf.toString("utf8"),
245
+ size: st.size,
246
+ language: detectLanguage(resolved),
247
+ binary,
248
+ };
249
+ }
250
+ function looksBinary(buf) {
251
+ const limit = Math.min(buf.length, 8000);
252
+ for (let i = 0; i < limit; i++) {
253
+ if (buf[i] === 0)
254
+ return true;
255
+ }
256
+ return false;
257
+ }
258
+ export async function writeFile(absPath, root, content) {
259
+ const resolved = await verifyPathSafe(absPath, root);
260
+ await mkdir(dirname(resolved), { recursive: true });
261
+ const tmp = `${resolved}.${randomUUID()}.tmp`;
262
+ await fsWriteFile(tmp, content, "utf8");
263
+ await fsRename(tmp, resolved);
264
+ }
265
+ export async function downloadStream(absPath, root) {
266
+ const resolved = await verifyPathSafe(absPath, root);
267
+ const st = await stat(resolved).catch(() => undefined);
268
+ if (st === undefined)
269
+ throw new NotFoundError(resolved);
270
+ if (st.isFile()) {
271
+ return {
272
+ kind: "file",
273
+ filename: basename(resolved),
274
+ size: st.size,
275
+ stream: createReadStream(resolved),
276
+ };
277
+ }
278
+ if (st.isDirectory()) {
279
+ const dirName = basename(resolved).length > 0 ? basename(resolved) : "project";
280
+ const stream = tarCreate({
281
+ gzip: true,
282
+ cwd: dirname(resolved),
283
+ portable: true,
284
+ follow: false,
285
+ filter: (path) => {
286
+ for (const part of path.split(/[/\\]/)) {
287
+ if (TREE_SKIP_DIRS.has(part))
288
+ return false;
289
+ }
290
+ return true;
291
+ },
292
+ }, [dirName]);
293
+ return { kind: "directory", filename: `${dirName}.tar.gz`, stream };
294
+ }
295
+ throw new NotFoundError(resolved);
296
+ }
297
+ export async function writeFileBytes(parentAbsPath, name, root, source, opts) {
298
+ const parent = await verifyPathSafe(parentAbsPath, root);
299
+ const trimmed = validateName(name);
300
+ const target = await verifyPathSafe(join(parent, trimmed), root);
301
+ const existing = await stat(target).catch(() => undefined);
302
+ if (existing !== undefined) {
303
+ if (opts?.overwrite !== true)
304
+ throw new TargetExistsError(target);
305
+ if (!existing.isFile())
306
+ throw new InvalidNameError("target is a directory");
307
+ }
308
+ await mkdir(parent, { recursive: true });
309
+ const tmp = `${target}.${randomUUID()}.upload.tmp`;
310
+ const hash = createHash("sha256");
311
+ let size = 0;
312
+ const out = createWriteStream(tmp);
313
+ try {
314
+ for await (const chunk of source) {
315
+ const buf = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
316
+ hash.update(buf);
317
+ size += buf.byteLength;
318
+ if (!out.write(buf))
319
+ await once(out, "drain");
320
+ }
321
+ out.end();
322
+ await once(out, "close");
323
+ }
324
+ catch (err) {
325
+ out.destroy();
326
+ await unlink(tmp).catch(() => undefined);
327
+ throw err;
328
+ }
329
+ const actual = hash.digest("hex");
330
+ const expected = opts?.expectedSha256?.toLowerCase();
331
+ if (expected !== undefined && expected !== actual) {
332
+ await unlink(tmp).catch(() => undefined);
333
+ throw new ChecksumMismatchError(target, expected, actual);
334
+ }
335
+ await fsRename(tmp, target);
336
+ return { path: target, size, sha256: actual };
337
+ }
338
+ export async function makeDirectory(parentAbsPath, root, name) {
339
+ const trimmed = validateName(name);
340
+ const parent = await verifyPathSafe(parentAbsPath, root);
341
+ const target = await verifyPathSafe(join(parent, trimmed), root);
342
+ const exists = await stat(target).catch(() => undefined);
343
+ if (exists !== undefined)
344
+ throw new TargetExistsError(target);
345
+ await mkdir(target, { recursive: false });
346
+ return target;
347
+ }
348
+ export async function renameEntry(absPath, root, newName) {
349
+ const resolved = await verifyPathSafe(absPath, root);
350
+ const trimmed = validateName(newName);
351
+ const target = await verifyPathSafe(join(dirname(resolved), trimmed), root);
352
+ const st = await stat(resolved).catch(() => undefined);
353
+ if (st === undefined)
354
+ throw new NotFoundError(resolved);
355
+ if (resolved === target)
356
+ return target;
357
+ if (resolved.toLowerCase() === target.toLowerCase()) {
358
+ const tmp = `${resolved}.casefix-${randomUUID()}`;
359
+ await fsRename(resolved, tmp);
360
+ try {
361
+ const squatter = await stat(target).catch(() => undefined);
362
+ if (squatter !== undefined)
363
+ throw new TargetExistsError(target);
364
+ await fsRename(tmp, target);
365
+ }
366
+ catch (err) {
367
+ await fsRename(tmp, resolved).catch(() => undefined);
368
+ throw err;
369
+ }
370
+ return target;
371
+ }
372
+ const exists = await stat(target).catch(() => undefined);
373
+ if (exists !== undefined)
374
+ throw new TargetExistsError(target);
375
+ await fsRename(resolved, target);
376
+ return target;
377
+ }
378
+ export async function moveEntry(srcAbsPath, destAbsPath, root) {
379
+ const src = await verifyPathSafe(srcAbsPath, root);
380
+ const dest = await verifyPathSafe(destAbsPath, root);
381
+ const st = await stat(src).catch(() => undefined);
382
+ if (st === undefined)
383
+ throw new NotFoundError(src);
384
+ if (st.isDirectory()) {
385
+ const rel = relative(src, dest);
386
+ if (rel === "" || (!rel.startsWith("..") && !rel.startsWith(`..${sep}`))) {
387
+ throw new InvalidNameError("cannot move a directory into itself");
388
+ }
389
+ }
390
+ const exists = await stat(dest).catch(() => undefined);
391
+ if (exists !== undefined)
392
+ throw new TargetExistsError(dest);
393
+ await mkdir(dirname(dest), { recursive: true });
394
+ await fsRename(src, dest);
395
+ return dest;
396
+ }
397
+ export async function deleteEntry(absPath, root, opts) {
398
+ const resolved = await verifyPathSafe(absPath, root);
399
+ if (resolved === resolve(root)) {
400
+ throw new PathOutsideRootError(absPath, root);
401
+ }
402
+ const st = await stat(resolved).catch(() => undefined);
403
+ if (st === undefined)
404
+ throw new NotFoundError(resolved);
405
+ if (st.isDirectory()) {
406
+ if (opts?.recursive === true) {
407
+ await rm(resolved, { recursive: true, force: false });
408
+ return;
409
+ }
410
+ try {
411
+ await rmdir(resolved);
412
+ }
413
+ catch (err) {
414
+ if (err.code === "ENOTEMPTY") {
415
+ throw new DirectoryNotEmptyError(resolved);
416
+ }
417
+ throw err;
418
+ }
419
+ }
420
+ else {
421
+ await rm(resolved, { force: false });
422
+ }
423
+ }
424
+ const LANG_BY_EXT = {
425
+ ".ts": "typescript",
426
+ ".tsx": "typescript",
427
+ ".js": "javascript",
428
+ ".jsx": "javascript",
429
+ ".mjs": "javascript",
430
+ ".cjs": "javascript",
431
+ ".py": "python",
432
+ ".pyi": "python",
433
+ ".rs": "rust",
434
+ ".cpp": "cpp",
435
+ ".cc": "cpp",
436
+ ".cxx": "cpp",
437
+ ".c": "c",
438
+ ".h": "c",
439
+ ".hpp": "cpp",
440
+ ".java": "java",
441
+ ".kt": "kotlin",
442
+ ".kts": "kotlin",
443
+ ".go": "go",
444
+ ".rb": "ruby",
445
+ ".php": "php",
446
+ ".cs": "csharp",
447
+ ".swift": "swift",
448
+ ".css": "css",
449
+ ".scss": "scss",
450
+ ".sass": "scss",
451
+ ".less": "css",
452
+ ".html": "html",
453
+ ".htm": "html",
454
+ ".xml": "xml",
455
+ ".svg": "xml",
456
+ ".plist": "xml",
457
+ ".json": "json",
458
+ ".jsonc": "json",
459
+ ".yaml": "yaml",
460
+ ".yml": "yaml",
461
+ ".toml": "toml",
462
+ ".md": "markdown",
463
+ ".markdown": "markdown",
464
+ ".sh": "shell",
465
+ ".bash": "shell",
466
+ ".zsh": "shell",
467
+ ".fish": "shell",
468
+ ".sql": "sql",
469
+ ".dockerfile": "dockerfile",
470
+ ".jinja": "jinja2",
471
+ ".jinja2": "jinja2",
472
+ ".j2": "jinja2",
473
+ ".env": "properties",
474
+ ".ini": "properties",
475
+ ".cfg": "properties",
476
+ ".conf": "properties",
477
+ ".properties": "properties",
478
+ ".toml.lock": "toml",
479
+ ".lua": "lua",
480
+ ".pl": "perl",
481
+ ".pm": "perl",
482
+ ".r": "r",
483
+ ".ps1": "powershell",
484
+ ".psm1": "powershell",
485
+ ".diff": "diff",
486
+ ".patch": "diff",
487
+ ".clj": "clojure",
488
+ ".cljs": "clojure",
489
+ ".cljc": "clojure",
490
+ ".edn": "clojure",
491
+ ".scala": "scala",
492
+ ".sc": "scala",
493
+ ".groovy": "groovy",
494
+ ".gradle": "groovy",
495
+ ".hs": "haskell",
496
+ ".ml": "ocaml",
497
+ ".mli": "ocaml",
498
+ ".graphql": "graphql",
499
+ ".gql": "graphql",
500
+ ".proto": "protobuf",
501
+ ".cmake": "cmake",
502
+ ".mk": "makefile",
503
+ };
504
+ function detectLanguage(absPath) {
505
+ const base = absPath.split(sep).pop() ?? absPath;
506
+ if (base === "Dockerfile" || base.endsWith(".Dockerfile"))
507
+ return "dockerfile";
508
+ if (base === "Makefile" || base === "makefile" || base === "GNUmakefile")
509
+ return "makefile";
510
+ if (base === "nginx.conf")
511
+ return "nginx";
512
+ if (base === ".env" || base.startsWith(".env."))
513
+ return "properties";
514
+ if (base === ".gitignore" ||
515
+ base === ".dockerignore" ||
516
+ base === ".npmignore" ||
517
+ base === ".prettierignore" ||
518
+ base === ".eslintignore") {
519
+ return "properties";
520
+ }
521
+ if (base === "CMakeLists.txt")
522
+ return "cmake";
523
+ const ext = extname(base).toLowerCase();
524
+ return LANG_BY_EXT[ext] ?? "plaintext";
525
+ }
526
+ //# sourceMappingURL=file-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-manager.js","sourceRoot":"","sources":["../src/file-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export interface SearchMatch {
2
+ path: string;
3
+ line: number;
4
+ column: number;
5
+ length: number;
6
+ lineSnippet: string;
7
+ }
8
+ export interface SearchOptions {
9
+ query: string;
10
+ regex: boolean;
11
+ caseSensitive: boolean;
12
+ includeGitignored: boolean;
13
+ include?: string;
14
+ exclude?: string;
15
+ limit: number;
16
+ timeoutMs: number;
17
+ }
18
+ export interface SearchResult {
19
+ engine: "ripgrep" | "node";
20
+ matches: SearchMatch[];
21
+ truncated: boolean;
22
+ }
23
+ export declare function ripgrepAvailable(): Promise<boolean>;
24
+ export declare function _resetRipgrepCache(): void;
25
+ export declare class SearchEngineUnavailableError extends Error {
26
+ constructor(msg: string);
27
+ }
28
+ export declare function searchFiles(projectPath: string, opts: SearchOptions): Promise<SearchResult>;
29
+ //# sourceMappingURL=file-searcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-searcher.d.ts","sourceRoot":"","sources":["../src/file-searcher.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;CACpB;AAID,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CASzD;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,qBAAa,4BAA6B,SAAQ,KAAK;gBACzC,GAAG,EAAE,MAAM;CAIxB;AAED,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAUjG"}