@shepai/cli 1.86.0 → 1.86.1
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/src/presentation/web/app/api/attachments/upload-from-path/route.d.ts +3 -0
- package/dist/src/presentation/web/app/api/attachments/upload-from-path/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/attachments/upload-from-path/route.js +120 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +38 -13
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +1 -0
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +1 -1
- package/web/.next/required-server-files.json +1 -1
- package/web/.next/routes-manifest.json +6 -0
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/create/page.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/page.js +1 -1
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error/page.js +1 -1
- package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page.js +1 -1
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/attachments/upload-from-path/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/attachments/upload-from-path/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/attachments/upload-from-path/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/attachments/upload-from-path/route.js +7 -0
- package/web/.next/server/app/api/attachments/upload-from-path/route.js.map +5 -0
- package/web/.next/server/app/api/attachments/upload-from-path/route.js.nft.json +1 -0
- package/web/.next/server/app/api/attachments/upload-from-path/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/feature-logs/route.js +1 -1
- package/web/.next/server/app/api/feature-logs/route.js.nft.json +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
- package/web/.next/server/app/settings/page.js +1 -1
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/skills/page.js +1 -1
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/tools/page.js +1 -1
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page.js +1 -1
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app-paths-manifest.json +1 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_attachments_upload-from-path_route_actions_05020a44.js +3 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_attachments_upload-from-path_route_actions_05020a44.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__a5879003._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__a5879003._.js.map +1 -0
- package/web/.next/server/chunks/{[root-of-the-server]__52c318d1._.js → [root-of-the-server]__d8037e14._.js} +2 -2
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17143953._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17143953._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__8d9536c4._.js → [root-of-the-server]__248ee887._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4af0afe0._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__f8210f45._.js → [root-of-the-server]__9bc1434f._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9de266fa._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9de266fa._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__f1a05100._.js → [root-of-the-server]__b062b383._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b3a4cef4._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b3a4cef4._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f0d8d054._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_a2ec151c._.js → _61480424._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_a2ec151c._.js.map → _61480424._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_752e01fd._.js +1 -1
- package/web/.next/server/chunks/ssr/_752e01fd._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js.map +1 -1
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +28 -28
- package/web/.next/static/chunks/{e49abd7c0c1cdef2.js → 0b3852464455cb56.js} +1 -1
- package/web/.next/static/chunks/{8b59757e9f52e364.js → 177579b39fd0f63a.js} +1 -1
- package/web/.next/static/chunks/{eafcdd214c540495.js → 866566643c6aaecf.js} +1 -1
- package/web/.next/static/chunks/{ba99f8c298491782.js → 8d82ff1402dcf377.js} +1 -1
- package/web/.next/static/chunks/{c2e2e1720b4f9a1a.js → 9d59d178a1e154b2.js} +1 -1
- package/web/.next/static/chunks/{673af06602f590f0.js → c7a4303d3cf08477.js} +1 -1
- package/web/.next/static/chunks/{20e5c07abd2699c2.js → dd6c69087923da49.js} +2 -2
- package/web/.next/static/chunks/{c481a0ab2ddddbf4.js → dd6cd59c8f439583.js} +1 -1
- package/web/.next/static/chunks/{c267885c32e4091c.js → e1edce9ef55b5824.js} +1 -1
- package/web/.next/static/chunks/{98b1c6b413aeb539.js → f46a0078f2ee9c44.js} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b65f78cf._.js +0 -3
- /package/web/.next/server/chunks/{[root-of-the-server]__52c318d1._.js.map → [root-of-the-server]__d8037e14._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__8d9536c4._.js.map → [root-of-the-server]__248ee887._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__b65f78cf._.js.map → [root-of-the-server]__4af0afe0._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__f8210f45._.js.map → [root-of-the-server]__9bc1434f._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__f1a05100._.js.map → [root-of-the-server]__b062b383._.js.map} +0 -0
- /package/web/.next/static/{VCU_mY2u0y_7bLsvmLjyS → T8HBuz_VR2eZQbNRNSohp}/_buildManifest.js +0 -0
- /package/web/.next/static/{VCU_mY2u0y_7bLsvmLjyS → T8HBuz_VR2eZQbNRNSohp}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{VCU_mY2u0y_7bLsvmLjyS → T8HBuz_VR2eZQbNRNSohp}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/app/api/attachments/upload-from-path/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAoF3C,wBAAsB,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAmDlE"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { NextResponse } from 'next/server';
|
|
2
|
+
import { readFile } from 'fs/promises';
|
|
3
|
+
import { extname, basename } from 'path';
|
|
4
|
+
import { resolve as resolvePath } from 'path';
|
|
5
|
+
import { resolve } from '../../../../lib/server-container.js';
|
|
6
|
+
const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10 MB
|
|
7
|
+
const ALLOWED_EXTENSIONS = new Set([
|
|
8
|
+
'.png',
|
|
9
|
+
'.jpg',
|
|
10
|
+
'.jpeg',
|
|
11
|
+
'.gif',
|
|
12
|
+
'.webp',
|
|
13
|
+
'.svg',
|
|
14
|
+
'.bmp',
|
|
15
|
+
'.ico',
|
|
16
|
+
'.pdf',
|
|
17
|
+
'.doc',
|
|
18
|
+
'.docx',
|
|
19
|
+
'.xls',
|
|
20
|
+
'.xlsx',
|
|
21
|
+
'.ppt',
|
|
22
|
+
'.pptx',
|
|
23
|
+
'.txt',
|
|
24
|
+
'.md',
|
|
25
|
+
'.csv',
|
|
26
|
+
'.json',
|
|
27
|
+
'.yaml',
|
|
28
|
+
'.yml',
|
|
29
|
+
'.xml',
|
|
30
|
+
'.ts',
|
|
31
|
+
'.tsx',
|
|
32
|
+
'.js',
|
|
33
|
+
'.jsx',
|
|
34
|
+
'.py',
|
|
35
|
+
'.rb',
|
|
36
|
+
'.go',
|
|
37
|
+
'.rs',
|
|
38
|
+
'.java',
|
|
39
|
+
'.c',
|
|
40
|
+
'.cpp',
|
|
41
|
+
'.h',
|
|
42
|
+
'.hpp',
|
|
43
|
+
'.cs',
|
|
44
|
+
'.swift',
|
|
45
|
+
'.kt',
|
|
46
|
+
'.html',
|
|
47
|
+
'.css',
|
|
48
|
+
'.scss',
|
|
49
|
+
'.less',
|
|
50
|
+
'.sh',
|
|
51
|
+
'.bash',
|
|
52
|
+
'.zsh',
|
|
53
|
+
'.fish',
|
|
54
|
+
'.toml',
|
|
55
|
+
'.ini',
|
|
56
|
+
'.cfg',
|
|
57
|
+
'.conf',
|
|
58
|
+
'.env',
|
|
59
|
+
'.zip',
|
|
60
|
+
'.tar',
|
|
61
|
+
'.gz',
|
|
62
|
+
'.log',
|
|
63
|
+
]);
|
|
64
|
+
const MIME_MAP = {
|
|
65
|
+
'.png': 'image/png',
|
|
66
|
+
'.jpg': 'image/jpeg',
|
|
67
|
+
'.jpeg': 'image/jpeg',
|
|
68
|
+
'.gif': 'image/gif',
|
|
69
|
+
'.webp': 'image/webp',
|
|
70
|
+
'.svg': 'image/svg+xml',
|
|
71
|
+
'.bmp': 'image/bmp',
|
|
72
|
+
'.ico': 'image/x-icon',
|
|
73
|
+
'.pdf': 'application/pdf',
|
|
74
|
+
'.txt': 'text/plain',
|
|
75
|
+
'.md': 'text/markdown',
|
|
76
|
+
'.json': 'application/json',
|
|
77
|
+
'.yaml': 'text/yaml',
|
|
78
|
+
'.yml': 'text/yaml',
|
|
79
|
+
};
|
|
80
|
+
export async function POST(request) {
|
|
81
|
+
try {
|
|
82
|
+
const body = await request.json();
|
|
83
|
+
const { path, sessionId } = body;
|
|
84
|
+
if (!path || !sessionId) {
|
|
85
|
+
return NextResponse.json({ error: 'Missing required fields: path, sessionId' }, { status: 400 });
|
|
86
|
+
}
|
|
87
|
+
const ext = extname(path).toLowerCase();
|
|
88
|
+
if (ext && !ALLOWED_EXTENSIONS.has(ext)) {
|
|
89
|
+
return NextResponse.json({ error: `File type "${ext}" is not allowed` }, { status: 400 });
|
|
90
|
+
}
|
|
91
|
+
let buffer;
|
|
92
|
+
try {
|
|
93
|
+
buffer = await readFile(resolvePath(path));
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return NextResponse.json({ error: 'File not found or unreadable' }, { status: 404 });
|
|
97
|
+
}
|
|
98
|
+
if (buffer.length > MAX_FILE_SIZE) {
|
|
99
|
+
return NextResponse.json({
|
|
100
|
+
error: `File exceeds 10 MB limit (${(buffer.length / 1024 / 1024).toFixed(1)} MB)`,
|
|
101
|
+
}, { status: 413 });
|
|
102
|
+
}
|
|
103
|
+
const filename = basename(path);
|
|
104
|
+
const mimeType = MIME_MAP[ext] ?? 'application/octet-stream';
|
|
105
|
+
const service = resolve('AttachmentStorageService');
|
|
106
|
+
const attachment = service.store(buffer, filename, mimeType, sessionId);
|
|
107
|
+
return NextResponse.json({
|
|
108
|
+
id: attachment.id,
|
|
109
|
+
name: attachment.name,
|
|
110
|
+
size: Number(attachment.size),
|
|
111
|
+
mimeType: attachment.mimeType,
|
|
112
|
+
path: attachment.path,
|
|
113
|
+
createdAt: attachment.createdAt,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
const message = error instanceof Error ? error.message : 'Upload failed';
|
|
118
|
+
return NextResponse.json({ error: message }, { status: 500 });
|
|
119
|
+
}
|
|
120
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-create-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAI5E,YAAY,EAAE,cAAc,EAAE,MAAM,0DAA0D,CAAC;AAE/F,uFAAuF;AACvF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,0DAA0D;AAC1D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,IAAI,EAAE,OAAO,CAAC;IACd,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA+ED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,qEAAqE;IACrE,QAAQ,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACjC,kGAAkG;IAClG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,cAAc,EACd,YAAoB,EACpB,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,YAAY,GACb,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"feature-create-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAI5E,YAAY,EAAE,cAAc,EAAE,MAAM,0DAA0D,CAAC;AAE/F,uFAAuF;AACvF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,0DAA0D;AAC1D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,IAAI,EAAE,OAAO,CAAC;IACd,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA+ED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,qEAAqE;IACrE,QAAQ,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACjC,kGAAkG;IAClG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,cAAc,EACd,YAAoB,EACpB,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,YAAY,GACb,EAAE,wBAAwB,2CA6kB1B"}
|
package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js
CHANGED
|
@@ -289,20 +289,45 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
|
|
|
289
289
|
const handleAddFiles = useCallback(async () => {
|
|
290
290
|
try {
|
|
291
291
|
const files = await pickFiles();
|
|
292
|
-
if (files)
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
292
|
+
if (!files)
|
|
293
|
+
return;
|
|
294
|
+
for (const file of files) {
|
|
295
|
+
const tempId = crypto.randomUUID();
|
|
296
|
+
setAttachments((prev) => [
|
|
297
|
+
...prev,
|
|
298
|
+
{
|
|
299
|
+
id: tempId,
|
|
300
|
+
name: file.name,
|
|
301
|
+
size: file.size,
|
|
301
302
|
mimeType: 'application/octet-stream',
|
|
302
|
-
path:
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
303
|
+
path: '',
|
|
304
|
+
loading: true,
|
|
305
|
+
},
|
|
306
|
+
]);
|
|
307
|
+
try {
|
|
308
|
+
const res = await fetch('/api/attachments/upload-from-path', {
|
|
309
|
+
method: 'POST',
|
|
310
|
+
headers: { 'Content-Type': 'application/json' },
|
|
311
|
+
body: JSON.stringify({ path: file.path, sessionId: sessionIdRef.current }),
|
|
312
|
+
});
|
|
313
|
+
if (!res.ok) {
|
|
314
|
+
const body = await res.json().catch(() => ({ error: 'Upload failed' }));
|
|
315
|
+
setAttachments((prev) => prev.filter((a) => a.id !== tempId));
|
|
316
|
+
setUploadError(body.error ?? 'Upload failed');
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
const uploaded = await res.json();
|
|
320
|
+
setAttachments((prev) => {
|
|
321
|
+
const isDupe = prev.some((a) => a.id !== tempId && a.path === uploaded.path);
|
|
322
|
+
if (isDupe)
|
|
323
|
+
return prev.filter((a) => a.id !== tempId);
|
|
324
|
+
return prev.map((a) => a.id === tempId ? { ...uploaded, id: tempId, loading: false } : a);
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
setAttachments((prev) => prev.filter((a) => a.id !== tempId));
|
|
329
|
+
setUploadError('Upload failed');
|
|
330
|
+
}
|
|
306
331
|
}
|
|
307
332
|
}
|
|
308
333
|
catch {
|