pi-forge 1.2.4 → 1.3.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 (86) hide show
  1. package/README.md +1 -1
  2. package/dist/client/assets/{CodeMirrorEditor-M7HIAKX2.js → CodeMirrorEditor-BuLFJjB1.js} +13 -13
  3. package/dist/client/assets/CodeMirrorEditor-BuLFJjB1.js.map +1 -0
  4. package/dist/client/assets/index-CEqSkIuy.css +1 -0
  5. package/dist/client/assets/index-GubcPYw6.js +375 -0
  6. package/dist/client/assets/index-GubcPYw6.js.map +1 -0
  7. package/dist/client/assets/{workbox-window.prod.es5-Cch4wiA5.js → workbox-window.prod.es5-Bd17z0YL.js} +2 -2
  8. package/dist/client/assets/{workbox-window.prod.es5-Cch4wiA5.js.map → workbox-window.prod.es5-Bd17z0YL.js.map} +1 -1
  9. package/dist/client/index.html +2 -2
  10. package/dist/client/sw.js +1 -1
  11. package/dist/client/sw.js.map +1 -1
  12. package/dist/server/agent-extensions/compaction-continuation.js +65 -0
  13. package/dist/server/agent-extensions/compaction-continuation.js.map +1 -0
  14. package/dist/server/agent-resource-loader.js +10 -0
  15. package/dist/server/agent-resource-loader.js.map +1 -1
  16. package/dist/server/git-clone.js +364 -0
  17. package/dist/server/git-clone.js.map +1 -0
  18. package/dist/server/index.js +26 -1
  19. package/dist/server/index.js.map +1 -1
  20. package/dist/server/mcp/tool-bridge.js +14 -8
  21. package/dist/server/mcp/tool-bridge.js.map +1 -1
  22. package/dist/server/orchestration/config.js +61 -0
  23. package/dist/server/orchestration/config.js.map +1 -0
  24. package/dist/server/orchestration/event-bridge.js +93 -0
  25. package/dist/server/orchestration/event-bridge.js.map +1 -0
  26. package/dist/server/orchestration/inbox.js +199 -0
  27. package/dist/server/orchestration/inbox.js.map +1 -0
  28. package/dist/server/orchestration/init.js +39 -0
  29. package/dist/server/orchestration/init.js.map +1 -0
  30. package/dist/server/orchestration/store.js +352 -0
  31. package/dist/server/orchestration/store.js.map +1 -0
  32. package/dist/server/orchestration/tools.js +769 -0
  33. package/dist/server/orchestration/tools.js.map +1 -0
  34. package/dist/server/orchestration/types.js +57 -0
  35. package/dist/server/orchestration/types.js.map +1 -0
  36. package/dist/server/processes/envelope.js +60 -0
  37. package/dist/server/processes/envelope.js.map +1 -0
  38. package/dist/server/processes/log-store.js +132 -0
  39. package/dist/server/processes/log-store.js.map +1 -0
  40. package/dist/server/processes/manager.js +370 -0
  41. package/dist/server/processes/manager.js.map +1 -0
  42. package/dist/server/processes/prompt-strings.js +43 -0
  43. package/dist/server/processes/prompt-strings.js.map +1 -0
  44. package/dist/server/processes/tool.js +273 -0
  45. package/dist/server/processes/tool.js.map +1 -0
  46. package/dist/server/processes/types.js +21 -0
  47. package/dist/server/processes/types.js.map +1 -0
  48. package/dist/server/processes/watches.js +59 -0
  49. package/dist/server/processes/watches.js.map +1 -0
  50. package/dist/server/project-manager.js +46 -32
  51. package/dist/server/project-manager.js.map +1 -1
  52. package/dist/server/routes/config.js +5 -0
  53. package/dist/server/routes/config.js.map +1 -1
  54. package/dist/server/routes/control.js +9 -0
  55. package/dist/server/routes/control.js.map +1 -1
  56. package/dist/server/routes/health.js +14 -1
  57. package/dist/server/routes/health.js.map +1 -1
  58. package/dist/server/routes/orchestration.js +464 -0
  59. package/dist/server/routes/orchestration.js.map +1 -0
  60. package/dist/server/routes/processes.js +228 -0
  61. package/dist/server/routes/processes.js.map +1 -0
  62. package/dist/server/routes/projects.js +239 -14
  63. package/dist/server/routes/projects.js.map +1 -1
  64. package/dist/server/routes/sessions.js +53 -34
  65. package/dist/server/routes/sessions.js.map +1 -1
  66. package/dist/server/routes/webhooks.js +362 -0
  67. package/dist/server/routes/webhooks.js.map +1 -0
  68. package/dist/server/session-registry.js +246 -3
  69. package/dist/server/session-registry.js.map +1 -1
  70. package/dist/server/sse-bridge.js +226 -18
  71. package/dist/server/sse-bridge.js.map +1 -1
  72. package/dist/server/webhooks/dispatcher.js +254 -0
  73. package/dist/server/webhooks/dispatcher.js.map +1 -0
  74. package/dist/server/webhooks/event-bridge.js +185 -0
  75. package/dist/server/webhooks/event-bridge.js.map +1 -0
  76. package/dist/server/webhooks/init.js +55 -0
  77. package/dist/server/webhooks/init.js.map +1 -0
  78. package/dist/server/webhooks/store.js +394 -0
  79. package/dist/server/webhooks/store.js.map +1 -0
  80. package/dist/server/webhooks/types.js +32 -0
  81. package/dist/server/webhooks/types.js.map +1 -0
  82. package/package.json +4 -4
  83. package/dist/client/assets/CodeMirrorEditor-M7HIAKX2.js.map +0 -1
  84. package/dist/client/assets/index-DFDpaYie.css +0 -1
  85. package/dist/client/assets/index-DjYKKZRm.js +0 -363
  86. package/dist/client/assets/index-DjYKKZRm.js.map +0 -1
@@ -0,0 +1,228 @@
1
+ import { createReadStream } from "node:fs";
2
+ import { stat } from "node:fs/promises";
3
+ import { processManager } from "../processes/manager.js";
4
+ import { getSession } from "../session-registry.js";
5
+ import { errorSchema } from "./_schemas.js";
6
+ /**
7
+ * REST surface for the processes panel. Routes are session-scoped
8
+ * (`/sessions/:id/...`) so the registry lookup gates each call:
9
+ * unknown sessionId → 404, no cross-session spoofing.
10
+ *
11
+ * SSE is the authoritative live channel; these endpoints exist for:
12
+ * - Cold load (panel mounts before snapshot lands → GET list)
13
+ * - Log streaming (the full file on disk, not just the ring tail)
14
+ * - User actions (kill, clear, write stdin)
15
+ */
16
+ const processInfoSchema = {
17
+ type: "object",
18
+ required: ["id", "name", "pid", "command", "cwd", "startTime", "status"],
19
+ additionalProperties: true,
20
+ properties: {
21
+ id: { type: "string" },
22
+ name: { type: "string" },
23
+ pid: { type: "integer" },
24
+ command: { type: "string" },
25
+ cwd: { type: "string" },
26
+ startTime: { type: "integer" },
27
+ endTime: { type: ["integer", "null"] },
28
+ status: {
29
+ type: "string",
30
+ enum: ["running", "terminating", "terminate_timeout", "exited", "killed"],
31
+ },
32
+ exitCode: { type: ["integer", "null"] },
33
+ success: { type: ["boolean", "null"] },
34
+ stdoutFile: { type: "string" },
35
+ stderrFile: { type: "string" },
36
+ alertOnSuccess: { type: "boolean" },
37
+ alertOnFailure: { type: "boolean" },
38
+ alertOnKill: { type: "boolean" },
39
+ },
40
+ };
41
+ export const processesRoutes = async (fastify) => {
42
+ fastify.get("/sessions/:id/processes", {
43
+ schema: {
44
+ description: "List the session's managed background processes (running + " +
45
+ "finished). Used by the processes panel on mount when the SSE " +
46
+ "snapshot hasn't landed yet.",
47
+ tags: ["sessions"],
48
+ params: { type: "object", required: ["id"], properties: { id: { type: "string" } } },
49
+ response: {
50
+ 200: {
51
+ type: "object",
52
+ required: ["processes"],
53
+ properties: { processes: { type: "array", items: processInfoSchema } },
54
+ },
55
+ 404: errorSchema,
56
+ },
57
+ },
58
+ }, async (req, reply) => {
59
+ const live = getSession(req.params.id);
60
+ if (live === undefined)
61
+ return reply.code(404).send({ error: "session_not_found" });
62
+ return { processes: processManager.list(req.params.id) };
63
+ });
64
+ fastify.get("/sessions/:id/processes/:processId/output", {
65
+ schema: {
66
+ description: "Return the recent in-memory tail (default 200 lines) of stdout " +
67
+ "and stderr for one process. The full history lives on disk; use " +
68
+ "GET /logs/file for streaming the whole file.",
69
+ tags: ["sessions"],
70
+ params: {
71
+ type: "object",
72
+ required: ["id", "processId"],
73
+ properties: { id: { type: "string" }, processId: { type: "string" } },
74
+ },
75
+ querystring: {
76
+ type: "object",
77
+ properties: {
78
+ stream: { type: "string", enum: ["stdout", "stderr"] },
79
+ tail: { type: "string" },
80
+ },
81
+ },
82
+ response: {
83
+ 200: {
84
+ type: "object",
85
+ required: ["stdout", "stderr", "status"],
86
+ properties: {
87
+ stdout: { type: "array", items: { type: "string" } },
88
+ stderr: { type: "array", items: { type: "string" } },
89
+ status: { type: "string" },
90
+ },
91
+ },
92
+ 404: errorSchema,
93
+ },
94
+ },
95
+ }, async (req, reply) => {
96
+ const live = getSession(req.params.id);
97
+ if (live === undefined)
98
+ return reply.code(404).send({ error: "session_not_found" });
99
+ const tail = req.query.tail !== undefined ? Number.parseInt(req.query.tail, 10) : 200;
100
+ const out = processManager.output(req.params.id, req.params.processId, Number.isFinite(tail) ? tail : 200);
101
+ if (out === undefined)
102
+ return reply.code(404).send({ error: "process_not_found" });
103
+ return out;
104
+ });
105
+ fastify.get("/sessions/:id/processes/:processId/logs/file", {
106
+ schema: {
107
+ description: "Stream the full on-disk log file for one process stream " +
108
+ "(default: stdout). Useful for the panel's 'view full log' view " +
109
+ "when the in-memory ring tail isn't enough.",
110
+ tags: ["sessions"],
111
+ params: {
112
+ type: "object",
113
+ required: ["id", "processId"],
114
+ properties: { id: { type: "string" }, processId: { type: "string" } },
115
+ },
116
+ querystring: {
117
+ type: "object",
118
+ properties: { stream: { type: "string", enum: ["stdout", "stderr"] } },
119
+ },
120
+ response: { 404: errorSchema },
121
+ },
122
+ }, async (req, reply) => {
123
+ const live = getSession(req.params.id);
124
+ if (live === undefined)
125
+ return reply.code(404).send({ error: "session_not_found" });
126
+ const files = processManager.logFiles(req.params.id, req.params.processId);
127
+ if (files === undefined)
128
+ return reply.code(404).send({ error: "process_not_found" });
129
+ const path = req.query.stream === "stderr" ? files.stderrFile : files.stdoutFile;
130
+ // Existence check before hijacking the reply — a missing file
131
+ // (rare race: process just started, no output yet) should
132
+ // 200 with an empty body, not 500.
133
+ const exists = await stat(path).catch(() => undefined);
134
+ if (exists === undefined) {
135
+ reply.header("Content-Type", "text/plain; charset=utf-8");
136
+ return "";
137
+ }
138
+ reply.header("Content-Type", "text/plain; charset=utf-8");
139
+ return reply.send(createReadStream(path));
140
+ });
141
+ fastify.post("/sessions/:id/processes/:processId/kill", {
142
+ schema: {
143
+ description: "Terminate a running process: SIGTERM, 5s grace, SIGKILL. " +
144
+ "Returns immediately once the signal is sent; the SSE " +
145
+ "process_update event fans out when the OS reports exit.",
146
+ tags: ["sessions"],
147
+ params: {
148
+ type: "object",
149
+ required: ["id", "processId"],
150
+ properties: { id: { type: "string" }, processId: { type: "string" } },
151
+ },
152
+ response: {
153
+ 200: {
154
+ type: "object",
155
+ required: ["ok"],
156
+ properties: { ok: { type: "boolean" }, reason: { type: "string" } },
157
+ },
158
+ 404: errorSchema,
159
+ },
160
+ },
161
+ }, async (req, reply) => {
162
+ const live = getSession(req.params.id);
163
+ if (live === undefined)
164
+ return reply.code(404).send({ error: "session_not_found" });
165
+ const result = await processManager.kill(req.params.id, req.params.processId);
166
+ if (!result.ok && result.reason === "not_found") {
167
+ return reply.code(404).send({ error: "process_not_found" });
168
+ }
169
+ return result.ok ? { ok: true } : { ok: false, reason: result.reason };
170
+ });
171
+ fastify.delete("/sessions/:id/processes", {
172
+ schema: {
173
+ description: "Drop all FINISHED processes from the session's list. Live ones remain.",
174
+ tags: ["sessions"],
175
+ params: { type: "object", required: ["id"], properties: { id: { type: "string" } } },
176
+ response: {
177
+ 200: {
178
+ type: "object",
179
+ required: ["cleared"],
180
+ properties: { cleared: { type: "integer" } },
181
+ },
182
+ 404: errorSchema,
183
+ },
184
+ },
185
+ }, async (req, reply) => {
186
+ const live = getSession(req.params.id);
187
+ if (live === undefined)
188
+ return reply.code(404).send({ error: "session_not_found" });
189
+ const cleared = processManager.clear(req.params.id);
190
+ return { cleared };
191
+ });
192
+ fastify.post("/sessions/:id/processes/:processId/stdin", {
193
+ schema: {
194
+ description: "Pipe `input` to a live process's stdin. `end: true` closes stdin " +
195
+ "after writing (use for programs reading until EOF).",
196
+ tags: ["sessions"],
197
+ params: {
198
+ type: "object",
199
+ required: ["id", "processId"],
200
+ properties: { id: { type: "string" }, processId: { type: "string" } },
201
+ },
202
+ body: {
203
+ type: "object",
204
+ required: ["input"],
205
+ additionalProperties: false,
206
+ properties: { input: { type: "string" }, end: { type: "boolean" } },
207
+ },
208
+ response: {
209
+ 200: {
210
+ type: "object",
211
+ required: ["ok"],
212
+ properties: { ok: { type: "boolean" }, reason: { type: "string" } },
213
+ },
214
+ 404: errorSchema,
215
+ },
216
+ },
217
+ }, async (req, reply) => {
218
+ const live = getSession(req.params.id);
219
+ if (live === undefined)
220
+ return reply.code(404).send({ error: "session_not_found" });
221
+ const result = await processManager.write(req.params.id, req.params.processId, req.body.input, req.body.end === true);
222
+ if (!result.ok && result.reason === "not_found") {
223
+ return reply.code(404).send({ error: "process_not_found" });
224
+ }
225
+ return result.ok ? { ok: true } : { ok: false, reason: result.reason };
226
+ });
227
+ };
228
+ //# sourceMappingURL=processes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processes.js","sourceRoot":"","sources":["../../src/routes/processes.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,24 @@
1
+ import { join, resolve } from "node:path";
2
+ import { config } from "../config.js";
3
+ import { assertTargetClonable, cloneRepository, GitCloneError, validateCloneUrl, } from "../git-clone.js";
1
4
  import { browseDirectory, createDirectory, createProject, deleteProject, DuplicatePathError, getProject, InvalidDirectoryNameError, InvalidNameError, NotADirectoryError, PathOutsideWorkspaceError, ProjectNotFoundError, readProjects, renameProject, } from "../project-manager.js";
2
5
  import { getProjectSystemPromptAddendum, MAX_ADDENDUM_BYTES, setProjectSystemPromptAddendum, } from "../system-prompt-overrides.js";
3
6
  import { errorSchema } from "./_schemas.js";
7
+ /**
8
+ * Heartbeat cadence for the clone SSE stream. Same value as
9
+ * `sse-bridge.ts:HEARTBEAT_INTERVAL_MS` — keeps comfortable margin
10
+ * under the OpenShift HAProxy `timeout server` default of 30s.
11
+ */
12
+ const CLONE_HEARTBEAT_INTERVAL_MS = 20_000;
13
+ /**
14
+ * One-shot padding flush after the `started` event so OpenShift's
15
+ * HAProxy router releases the small initial frames immediately
16
+ * instead of holding them through the multi-second clone. Same
17
+ * pattern as `sse-bridge.ts:COMPACTION_START_PADDING_LINE` — see
18
+ * that doc-comment for the rationale.
19
+ */
20
+ const CLONE_PADDING_BYTES = 2048;
21
+ const CLONE_PADDING_LINE = `: pad-flush ${"_".repeat(CLONE_PADDING_BYTES - 14)}\n\n`;
4
22
  const projectSchema = {
5
23
  type: "object",
6
24
  required: ["id", "name", "path", "createdAt"],
@@ -114,24 +132,28 @@ export const projectRoutes = async (fastify) => {
114
132
  });
115
133
  fastify.delete("/projects/:id", {
116
134
  schema: {
117
- description: "Delete the project record. With `?cascade=1` ALSO removes the " +
118
- "project's on-disk session directory (under `${SESSION_DIR}/<id>/`); " +
119
- "without it, those files are left in place and become orphaned. " +
120
- "Cascade cleanup is best-efforta missing dir is not an error, " +
121
- "and an rm failure does NOT fail the delete (the project record " +
122
- "is already gone at that point).",
135
+ description: "Delete the project record AND rm -rf the project's session " +
136
+ "directory (`${SESSION_DIR}/<id>/`) including every session " +
137
+ "JSONL inside. The project's workspace folder " +
138
+ "(`${WORKSPACE_PATH}/<projectName>/`) is left alone that's " +
139
+ "almost always real work the user wants to keep.\n\n" +
140
+ "Earlier versions accepted a `?cascade=0|1` query param to opt " +
141
+ "into the session-dir cleanup. v1.3.0 dropped the param and " +
142
+ "made cleanup unconditional — the default-off behavior left a " +
143
+ "`<projectId>/` directory on disk that the UI had no way to " +
144
+ "reach. User-facing confirmation about deleting N session " +
145
+ "files happens at the UI layer (a required checkbox in the " +
146
+ "delete dialog when sessions are present); programmatic " +
147
+ "clients get the same atomic delete with no opt.\n\n" +
148
+ "Session-dir cleanup is best-effort: a missing dir is not an " +
149
+ "error, and an rm failure does NOT fail the delete (the project " +
150
+ "record is already gone at that point).",
123
151
  tags: ["projects"],
124
152
  params: {
125
153
  type: "object",
126
154
  required: ["id"],
127
155
  properties: { id: { type: "string" } },
128
156
  },
129
- querystring: {
130
- type: "object",
131
- properties: {
132
- cascade: { type: "string", enum: ["0", "1", "true", "false"] },
133
- },
134
- },
135
157
  response: {
136
158
  200: {
137
159
  type: "object",
@@ -143,9 +165,7 @@ export const projectRoutes = async (fastify) => {
143
165
  },
144
166
  }, async (req, reply) => {
145
167
  try {
146
- const cascade = req.query.cascade === "1" || req.query.cascade === "true";
147
168
  const result = await deleteProject(req.params.id, {
148
- cascadeSessionDir: cascade,
149
169
  logWarn: (obj, msg) => req.log.warn(obj, msg),
150
170
  });
151
171
  return reply.code(200).send(result);
@@ -301,6 +321,211 @@ export const projectRoutes = async (fastify) => {
301
321
  const addendum = await getProjectSystemPromptAddendum(req.params.id);
302
322
  return { addendum, maxBytes: MAX_ADDENDUM_BYTES };
303
323
  });
324
+ fastify.post("/projects/clone", {
325
+ schema: {
326
+ description: "Clone a git repository into a new folder under WORKSPACE_PATH, then " +
327
+ "create a project pointing at it. Streams progress as SSE events.\n\n" +
328
+ "Event types on the stream:\n" +
329
+ " - `started` — {cloneUrlForDisplay} (URL with credentials stripped)\n" +
330
+ " - `progress` — {phase, percent, raw} (one per `git clone --progress` line)\n" +
331
+ " - `stderr` — {line} (other stderr text — non-progress, non-fatal)\n" +
332
+ " - `done` — {project} (the created Project record)\n" +
333
+ " - `error` — {message, code} (fatal — connection then closes)\n\n" +
334
+ "Auth: optional `token` is embedded as `x-access-token:<token>` in the " +
335
+ "clone URL (GitHub convention; works for most providers). The token is " +
336
+ "stripped from the stored `origin` URL after a successful clone so it " +
337
+ "doesn't persist in `.git/config`. On failure the target dir is " +
338
+ "rm -rf'd so no token bytes survive.\n\n" +
339
+ "TLS: optional `insecureTls: true` sets `GIT_SSL_NO_VERIFY=true` for " +
340
+ "the clone — necessary for internal Git hosts with self-signed " +
341
+ "certs (corporate GHE, on-prem GitLab with a private CA, etc.). " +
342
+ "Logs a `git-clone-insecure-tls` line to stderr on every use so " +
343
+ "the relaxed posture is visible in operator logs.",
344
+ tags: ["projects"],
345
+ body: {
346
+ type: "object",
347
+ required: ["url", "parentPath", "folderName", "projectName"],
348
+ additionalProperties: false,
349
+ properties: {
350
+ url: { type: "string", minLength: 1 },
351
+ parentPath: { type: "string", minLength: 1 },
352
+ folderName: { type: "string", minLength: 1, maxLength: 100 },
353
+ projectName: { type: "string", minLength: 1, maxLength: 200 },
354
+ branch: { type: "string", maxLength: 250 },
355
+ token: { type: "string", maxLength: 4096 },
356
+ insecureTls: { type: "boolean" },
357
+ },
358
+ },
359
+ response: {
360
+ // SSE responses don't fit Fastify's response-schema model;
361
+ // only the pre-stream error shapes are declared. The
362
+ // catalog of event types is in the description above.
363
+ 400: errorSchema,
364
+ 403: errorSchema,
365
+ 409: errorSchema,
366
+ 500: errorSchema,
367
+ },
368
+ },
369
+ }, async (req, reply) => {
370
+ const { url, parentPath, folderName, projectName, branch, token, insecureTls } = req.body;
371
+ // ---- pre-stream validation: errors land as plain JSON 4xx ----
372
+ try {
373
+ validateCloneUrl(url);
374
+ }
375
+ catch (err) {
376
+ if (err instanceof GitCloneError) {
377
+ return reply.code(400).send({ error: err.code, message: err.message });
378
+ }
379
+ throw err;
380
+ }
381
+ // Folder-name validation mirrors createDirectory's rules.
382
+ if (folderName.includes("/") ||
383
+ folderName.includes("\\") ||
384
+ folderName === "." ||
385
+ folderName === "..") {
386
+ return reply.code(400).send({ error: "invalid_directory_name" });
387
+ }
388
+ // Resolve target path and confirm it's inside WORKSPACE_PATH.
389
+ // Reuses the project-manager error so the route surface stays
390
+ // consistent.
391
+ const parentResolved = resolve(parentPath);
392
+ const targetPath = join(parentResolved, folderName);
393
+ const workspaceResolved = resolve(config.workspacePath);
394
+ if (!parentResolved.startsWith(workspaceResolved + "/") &&
395
+ parentResolved !== workspaceResolved) {
396
+ return reply.code(403).send({ error: "path_not_allowed" });
397
+ }
398
+ if (!targetPath.startsWith(workspaceResolved + "/") && targetPath !== workspaceResolved) {
399
+ return reply.code(403).send({ error: "path_not_allowed" });
400
+ }
401
+ try {
402
+ await assertTargetClonable(targetPath);
403
+ }
404
+ catch (err) {
405
+ if (err instanceof GitCloneError) {
406
+ const status = err.code === "target_not_empty" ? 409 : 400;
407
+ return reply.code(status).send({ error: err.code, message: err.message });
408
+ }
409
+ throw err;
410
+ }
411
+ // ---- start streaming ----
412
+ reply.hijack();
413
+ const raw = reply.raw;
414
+ let closed = false;
415
+ let heartbeat;
416
+ const close = () => {
417
+ if (closed)
418
+ return;
419
+ closed = true;
420
+ if (heartbeat !== undefined) {
421
+ clearInterval(heartbeat);
422
+ heartbeat = undefined;
423
+ }
424
+ try {
425
+ raw.end();
426
+ }
427
+ catch {
428
+ /* socket already torn down */
429
+ }
430
+ };
431
+ const writeRaw = (chunk) => {
432
+ if (closed)
433
+ return;
434
+ try {
435
+ raw.write(chunk);
436
+ }
437
+ catch {
438
+ close();
439
+ }
440
+ };
441
+ const writeEvent = (event) => {
442
+ writeRaw(`data: ${JSON.stringify(event)}\n\n`);
443
+ };
444
+ try {
445
+ raw.writeHead(200, {
446
+ "Content-Type": "text/event-stream",
447
+ "Cache-Control": "no-cache, no-transform",
448
+ Connection: "keep-alive",
449
+ "X-Accel-Buffering": "no",
450
+ });
451
+ }
452
+ catch (err) {
453
+ req.log.error({ err }, "clone prelude failed");
454
+ try {
455
+ raw.destroy();
456
+ }
457
+ catch {
458
+ /* already destroyed */
459
+ }
460
+ return;
461
+ }
462
+ heartbeat = setInterval(() => writeRaw(": heartbeat\n\n"), CLONE_HEARTBEAT_INTERVAL_MS);
463
+ heartbeat.unref();
464
+ // Abort the clone if the client disconnects mid-stream.
465
+ const ac = new AbortController();
466
+ raw.on("close", () => {
467
+ ac.abort();
468
+ close();
469
+ });
470
+ raw.on("error", () => {
471
+ ac.abort();
472
+ close();
473
+ });
474
+ const cloneOpts = {
475
+ url,
476
+ target: targetPath,
477
+ signal: ac.signal,
478
+ };
479
+ if (branch !== undefined && branch.length > 0)
480
+ cloneOpts.branch = branch;
481
+ if (token !== undefined && token.length > 0)
482
+ cloneOpts.token = token;
483
+ if (insecureTls === true)
484
+ cloneOpts.insecureTls = true;
485
+ const { promise, events } = cloneRepository(cloneOpts);
486
+ // Stream every event to the client. After the `started` event,
487
+ // send a one-shot padding flush so HAProxy releases the small
488
+ // frames immediately rather than holding them through the
489
+ // multi-second clone (same pattern as the compaction-start
490
+ // padding flush in sse-bridge.ts).
491
+ let sentPadding = false;
492
+ let cloneSucceeded = false;
493
+ for await (const e of events) {
494
+ writeEvent(e);
495
+ if (!sentPadding && e.type === "started") {
496
+ writeRaw(CLONE_PADDING_LINE);
497
+ sentPadding = true;
498
+ }
499
+ if (e.type === "done")
500
+ cloneSucceeded = true;
501
+ if (closed)
502
+ break;
503
+ }
504
+ await promise;
505
+ // Create the project record on success, then emit a final
506
+ // event with the project shape so the client can navigate
507
+ // straight to it. The `done` event from the clone module
508
+ // already fired above with `target`; this is a separate
509
+ // `project_created` event so the contract is unambiguous.
510
+ if (cloneSucceeded && !closed) {
511
+ try {
512
+ const project = await createProject(projectName, targetPath);
513
+ writeRaw(`data: ${JSON.stringify({ type: "project_created", project })}\n\n`);
514
+ }
515
+ catch (err) {
516
+ const code = err instanceof DuplicatePathError
517
+ ? "duplicate_path"
518
+ : err instanceof PathOutsideWorkspaceError
519
+ ? "path_not_allowed"
520
+ : err instanceof InvalidNameError
521
+ ? "invalid_name"
522
+ : "project_create_failed";
523
+ const message = err instanceof Error ? err.message : String(err);
524
+ writeRaw(`data: ${JSON.stringify({ type: "error", code, message })}\n\n`);
525
+ }
526
+ }
527
+ close();
528
+ });
304
529
  fastify.post("/projects/browse/mkdir", {
305
530
  schema: {
306
531
  description: "Create a directory inside WORKSPACE_PATH. Used by the folder picker's " +
@@ -1 +1 @@
1
- {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/routes/projects.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/routes/projects.ts"],"names":[],"mappings":"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"}