@chainingintention/pi-web-cn 1.202606.9 → 1.202606.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{CodeViewer-DVx-1INT.js → CodeViewer-DzeGsHZ5.js} +1 -1
- package/dist/client/assets/{TerminalPanel-YrJEW2pD.js → TerminalPanel-BghODb4T.js} +1 -1
- package/dist/client/assets/{index-BLiHKZnm.js → index-DATsMV4H.js} +265 -231
- package/dist/client/index.html +1 -1
- package/dist/server/app.js +2 -0
- package/dist/server/app.js.map +1 -1
- package/dist/server/sessions/piSessionService.js +61 -13
- package/dist/server/sessions/piSessionService.js.map +1 -1
- package/dist/server/sessions/sessionRoutes.js +5 -2
- package/dist/server/sessions/sessionRoutes.js.map +1 -1
- package/dist/server/workspaceExplorerRoutes.js +20 -2
- package/dist/server/workspaceExplorerRoutes.js.map +1 -1
- package/dist/server/workspaces/fileUploadService.js +21 -1
- package/dist/server/workspaces/fileUploadService.js.map +1 -1
- package/dist/shared/apiTypes.d.ts +11 -0
- package/package.json +6 -5
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { resolveWorkspaceContext } from "./workspaces/workspaceContext.js";
|
|
2
2
|
import { listWorkspaceTree } from "./workspaces/fileTreeService.js";
|
|
3
3
|
import { readWorkspaceFile } from "./workspaces/fileContentService.js";
|
|
4
|
-
import { uploadWorkspaceFile } from "./workspaces/fileUploadService.js";
|
|
4
|
+
import { uploadWorkspaceFile, uploadWorkspaceFileStream } from "./workspaces/fileUploadService.js";
|
|
5
5
|
import { createWorkspaceDirectory, deleteWorkspaceDirectory, deleteWorkspaceFile, moveWorkspaceDirectory, moveWorkspaceFile, readWorkspaceFileDownload } from "./workspaces/fileOperationService.js";
|
|
6
6
|
import { readWorkspaceImagePreview } from "./workspaces/imagePreviewService.js";
|
|
7
7
|
import { managementContextForRequest, projectFromManagedEmbedContext } from "./managementEmbed.js";
|
|
8
|
+
const WORKSPACE_UPLOAD_BODY_LIMIT_BYTES = 100 * 1024 * 1024;
|
|
8
9
|
export function registerWorkspaceExplorerRoutes(app, projects, workspaces, prefix = "/api", managementEmbed) {
|
|
9
10
|
app.get(`${prefix}/projects/:projectId/workspaces/:workspaceId/tree`, async (request, reply) => {
|
|
10
11
|
try {
|
|
@@ -24,9 +25,11 @@ export function registerWorkspaceExplorerRoutes(app, projects, workspaces, prefi
|
|
|
24
25
|
return reply.code(400).send({ error: error instanceof Error ? error.message : String(error) });
|
|
25
26
|
}
|
|
26
27
|
});
|
|
27
|
-
app.post(`${prefix}/projects/:projectId/workspaces/:workspaceId/file`, async (request, reply) => {
|
|
28
|
+
app.post(`${prefix}/projects/:projectId/workspaces/:workspaceId/file`, { bodyLimit: WORKSPACE_UPLOAD_BODY_LIMIT_BYTES }, async (request, reply) => {
|
|
28
29
|
try {
|
|
29
30
|
const context = await resolveRouteWorkspaceContext(projects, workspaces, managementEmbed, request, reply, request.params.projectId, request.params.workspaceId);
|
|
31
|
+
if (request.isMultipart())
|
|
32
|
+
return await uploadWorkspaceFileFromMultipart(context.root, request);
|
|
30
33
|
return await uploadWorkspaceFile(context.root, request.body);
|
|
31
34
|
}
|
|
32
35
|
catch (error) {
|
|
@@ -112,6 +115,21 @@ export function registerWorkspaceExplorerRoutes(app, projects, workspaces, prefi
|
|
|
112
115
|
}
|
|
113
116
|
});
|
|
114
117
|
}
|
|
118
|
+
async function uploadWorkspaceFileFromMultipart(rootPath, request) {
|
|
119
|
+
const file = await request.file();
|
|
120
|
+
if (file === undefined)
|
|
121
|
+
throw new Error("Upload body must include path and file");
|
|
122
|
+
const pathField = file.fields["path"];
|
|
123
|
+
const value = Array.isArray(pathField) ? pathField[0] : pathField;
|
|
124
|
+
const path = isMultipartStringField(value) ? value.value : undefined;
|
|
125
|
+
return await uploadWorkspaceFileStream(rootPath, path, file.file);
|
|
126
|
+
}
|
|
127
|
+
function isMultipartStringField(value) {
|
|
128
|
+
return typeof value === "object"
|
|
129
|
+
&& value !== null
|
|
130
|
+
&& Reflect.get(value, "type") === "field"
|
|
131
|
+
&& typeof Reflect.get(value, "value") === "string";
|
|
132
|
+
}
|
|
115
133
|
function contentDispositionAttachment(filename) {
|
|
116
134
|
const fallback = filename
|
|
117
135
|
.replace(/[^\x20-\x7E]/gu, "_")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaceExplorerRoutes.js","sourceRoot":"","sources":["../../src/server/workspaceExplorerRoutes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workspaceExplorerRoutes.js","sourceRoot":"","sources":["../../src/server/workspaceExplorerRoutes.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAA6B,MAAM,mCAAmC,CAAC;AAC9H,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,yBAAyB,EAAoD,MAAM,sCAAsC,CAAC;AACvP,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,2BAA2B,EAAE,8BAA8B,EAA+B,MAAM,sBAAsB,CAAC;AAEhI,MAAM,iCAAiC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5D,MAAM,UAAU,+BAA+B,CAAC,GAAoB,EAAE,QAAwB,EAAE,UAA4B,EAAE,MAAM,GAAG,MAAM,EAAE,eAAwC;IACrL,GAAG,CAAC,GAAG,CAAyF,GAAG,MAAM,mDAAmD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACrL,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,4BAA4B,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAChK,OAAO,MAAM,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAyF,GAAG,MAAM,mDAAmD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACrL,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,4BAA4B,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAChK,OAAO,MAAM,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAqF,GAAG,MAAM,mDAAmD,EAAE,EAAE,SAAS,EAAE,iCAAiC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACpO,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,4BAA4B,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAChK,IAAI,OAAO,CAAC,WAAW,EAAE;gBAAE,OAAO,MAAM,gCAAgC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAChG,OAAO,MAAM,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,KAAK,CAAmF,GAAG,MAAM,mDAAmD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACjL,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,4BAA4B,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAChK,OAAO,MAAM,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,MAAM,CAAyF,GAAG,MAAM,mDAAmD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACxL,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,4BAA4B,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAChK,OAAO,MAAM,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAyF,GAAG,MAAM,4DAA4D,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC9L,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,4BAA4B,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAChK,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnF,OAAO,MAAM,KAAK;iBACf,IAAI,CAAC,0BAA0B,CAAC;iBAChC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;iBAC/C,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;iBAC9E,MAAM,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;iBACpE,MAAM,CAAC,wBAAwB,EAAE,SAAS,CAAC;iBAC3C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAmF,GAAG,MAAM,wDAAwD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACrL,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,4BAA4B,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAChK,OAAO,MAAM,wBAAwB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,KAAK,CAAmF,GAAG,MAAM,wDAAwD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACtL,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,4BAA4B,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAChK,OAAO,MAAM,sBAAsB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,MAAM,CAAyF,GAAG,MAAM,wDAAwD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC7L,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,4BAA4B,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAChK,OAAO,MAAM,wBAAwB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAyF,GAAG,MAAM,2DAA2D,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC7L,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,4BAA4B,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAChK,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClF,OAAO,MAAM,KAAK;iBACf,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;iBACtB,MAAM,CAAC,eAAe,EAAE,uBAAuB,CAAC;iBAChD,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBAC9C,MAAM,CAAC,yBAAyB,EAAE,oFAAoF,CAAC;iBACvH,MAAM,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;iBACnE,MAAM,CAAC,wBAAwB,EAAE,SAAS,CAAC;iBAC3C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,gCAAgC,CAAC,QAAgB,EAAE,OAAuB;IACvF,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IAClC,IAAI,IAAI,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAClF,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,MAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,OAAO,MAAM,yBAAyB,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ;WAC3B,KAAK,KAAK,IAAI;WACd,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,OAAO;WACtC,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,QAAQ,CAAC;AACvD,CAAC;AAED,SAAS,4BAA4B,CAAC,QAAgB;IACpD,MAAM,QAAQ,GAAG,QAAQ;SACtB,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;SACrB,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACzB,OAAO,yBAAyB,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,uBAAuB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC/H,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,OAAO,kBAAkB,CAAC,KAAK,CAAC;SAC7B,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;SACtB,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;SACtB,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;SACtB,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,4BAA4B,CACzC,QAAwB,EACxB,UAA4B,EAC5B,eAAmD,EACnD,OAA0D,EAC1D,KAAmB,EACnB,SAAiB,EACjB,WAAmB;IAEnB,MAAM,iBAAiB,GAAG,MAAM,2BAA2B,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;IAC7F,IAAI,iBAAiB,KAAK,SAAS;QAAE,OAAO,uBAAuB,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAClH,IAAI,eAAe,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC9F,MAAM,OAAO,GAAG,MAAM,8BAA8B,CAAC,eAAe,CAAC,WAAW,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;IAChH,MAAM,SAAS,GAAG,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;IACrG,IAAI,SAAS,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACpE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;AACtD,CAAC"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createWriteStream } from "node:fs";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { rename, rm, stat, writeFile } from "node:fs/promises";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
|
+
import { pipeline } from "node:stream/promises";
|
|
2
6
|
import { resolveParentInsideWorkspace } from "./pathSafety.js";
|
|
3
7
|
export async function uploadWorkspaceFile(rootPath, input) {
|
|
4
8
|
if (!isWorkspaceUploadInput(input))
|
|
@@ -11,6 +15,22 @@ export async function uploadWorkspaceFile(rootPath, input) {
|
|
|
11
15
|
const s = await stat(target);
|
|
12
16
|
return { path: relativePath, size: s.size, modifiedAt: s.mtime.toISOString() };
|
|
13
17
|
}
|
|
18
|
+
export async function uploadWorkspaceFileStream(rootPath, path, stream) {
|
|
19
|
+
if (path === undefined || path === "")
|
|
20
|
+
throw new Error("Upload body must include path and file");
|
|
21
|
+
const { target, relativePath } = await resolveParentInsideWorkspace(rootPath, path);
|
|
22
|
+
const tempTarget = join(dirname(target), `${relativePath.split("/").pop() ?? "upload"}.${randomUUID()}.uploading`);
|
|
23
|
+
try {
|
|
24
|
+
await pipeline(stream, createWriteStream(tempTarget));
|
|
25
|
+
await rename(tempTarget, target);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
await rm(tempTarget, { force: true }).catch(() => undefined);
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
const s = await stat(target);
|
|
32
|
+
return { path: relativePath, size: s.size, modifiedAt: s.mtime.toISOString() };
|
|
33
|
+
}
|
|
14
34
|
function isWorkspaceUploadInput(input) {
|
|
15
35
|
return typeof input === "object"
|
|
16
36
|
&& input !== null
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileUploadService.js","sourceRoot":"","sources":["../../../src/server/workspaces/fileUploadService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"fileUploadService.js","sourceRoot":"","sources":["../../../src/server/workspaces/fileUploadService.ts"],"names":[],"mappings":"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"}
|
|
@@ -121,6 +121,16 @@ export interface SessionActivity {
|
|
|
121
121
|
export interface QueuedSessionMessage {
|
|
122
122
|
kind: "steer" | "followUp";
|
|
123
123
|
text: string;
|
|
124
|
+
imageCount?: number;
|
|
125
|
+
}
|
|
126
|
+
export interface PromptImage {
|
|
127
|
+
type: "image";
|
|
128
|
+
data: string;
|
|
129
|
+
mimeType: string;
|
|
130
|
+
}
|
|
131
|
+
export interface PromptInput {
|
|
132
|
+
text: string;
|
|
133
|
+
images?: PromptImage[];
|
|
124
134
|
}
|
|
125
135
|
export interface SessionModel {
|
|
126
136
|
provider?: string;
|
|
@@ -128,6 +138,7 @@ export interface SessionModel {
|
|
|
128
138
|
name?: string;
|
|
129
139
|
contextWindow?: number;
|
|
130
140
|
reasoning?: unknown;
|
|
141
|
+
input?: ("text" | "image")[];
|
|
131
142
|
}
|
|
132
143
|
export type ThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
|
|
133
144
|
export type AuthType = "oauth" | "api_key";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chainingintention/pi-web-cn",
|
|
3
|
-
"version": "1.202606.
|
|
3
|
+
"version": "1.202606.11",
|
|
4
4
|
"description": "Remote web UI and browser control plane for persistent Pi Coding Agent sessions.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Federico Jaramillo Martinez",
|
|
@@ -57,6 +57,7 @@
|
|
|
57
57
|
"@codemirror/lang-python": "^6.2.1",
|
|
58
58
|
"@codemirror/lang-rust": "^6.0.2",
|
|
59
59
|
"@codemirror/legacy-modes": "^6.5.2",
|
|
60
|
+
"@fastify/multipart": "^10.0.0",
|
|
60
61
|
"@fastify/static": "^9.1.3",
|
|
61
62
|
"@fastify/websocket": "^11.2.0",
|
|
62
63
|
"@xterm/addon-fit": "^0.11.0",
|
|
@@ -71,6 +72,7 @@
|
|
|
71
72
|
},
|
|
72
73
|
"devDependencies": {
|
|
73
74
|
"@changesets/cli": "^2.31.0",
|
|
75
|
+
"@earendil-works/pi-ai": "^0.74.0",
|
|
74
76
|
"@earendil-works/pi-coding-agent": "^0.74.0",
|
|
75
77
|
"@eslint/js": "^10.0.1",
|
|
76
78
|
"@types/node": "^24.10.1",
|
|
@@ -81,8 +83,7 @@
|
|
|
81
83
|
"typescript": "^5.9.3",
|
|
82
84
|
"typescript-eslint": "^8.59.2",
|
|
83
85
|
"vite": "^7.2.4",
|
|
84
|
-
"vitest": "^4.1.5"
|
|
85
|
-
"@earendil-works/pi-ai": "^0.74.0"
|
|
86
|
+
"vitest": "^4.1.5"
|
|
86
87
|
},
|
|
87
88
|
"publishConfig": {
|
|
88
89
|
"access": "public"
|
|
@@ -100,8 +101,8 @@
|
|
|
100
101
|
"homepage": "https://github.com/nayuto-wakusei/pi-web-ChineseTranslation#readme",
|
|
101
102
|
"packageManager": "npm@11.11.0",
|
|
102
103
|
"peerDependencies": {
|
|
103
|
-
"@earendil-works/pi-
|
|
104
|
-
"@earendil-works/pi-
|
|
104
|
+
"@earendil-works/pi-ai": ">=0.74.0 <1",
|
|
105
|
+
"@earendil-works/pi-coding-agent": ">=0.74.0 <1"
|
|
105
106
|
},
|
|
106
107
|
"keywords": [
|
|
107
108
|
"pi-package",
|