From d388a9a0753e2d8d116b0c46062ddb517f4b47f6 Mon Sep 17 00:00:00 2001 From: johndoe6345789 Date: Sat, 17 Jan 2026 14:56:40 +0000 Subject: [PATCH] Generated by Spark: 0s 3m 30s Run docker/build-push-action@v5 GitHub Actions runtime token ACs Docker info Proxy configuration Buildx version Builder info /usr/bin/docker buildx build --cache-from type=gha --cache-to type=gha,mode=max --iidfile /home/runner/work/_temp/docker-actions-toolkit-vCLgYd/build-iidfile-0726305e33.txt --label org.opencontainers.image.created=2026-01-17T14:42:34.857Z --label org.opencontainers.image.description= --label org.opencontainers.image.licenses=MIT --label org.opencontainers.image.revision=33ab37bd18767139f14fd99e455eb90c1baa5af3 --label org.opencontainers.image.source=https://github.com/johndoe6345789/low-code-react-app-b --label org.opencontainers.image.title=low-code-react-app-b --label org.opencontainers.image.url=https://github.com/johndoe6345789/low-code-react-app-b --label org.opencontainers.image.version=main --platform linux/amd64,linux/arm64 --attest type=provenance,mode=max,builder-id=https://github.com/johndoe6345789/low-code-react-app-b/actions/runs/21095926434 --tag ghcr.io/johndoe6345789/low-code-react-app-b:main --tag ghcr.io/johndoe6345789/low-code-react-app-b:main-33ab37b --metadata-file /home/runner/work/_temp/docker-actions-toolkit-vCLgYd/build-metadata-daa99149c8.json --push . #0 building with "builder-95fadb03-ad83-4e01-bc20-225d7bda06ae" instance using docker-container driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #1 [internal] load build definition from Dockerfile #1 transferring dockerfile: 942B done #1 DONE 0.0s #2 [auth] library/nginx:pull token for registry-1.docker.io #2 DONE 0.0s #3 [auth] library/node:pull token for registry-1.docker.io #3 DONE 0.0s #4 [linux/arm64 internal] load metadata for docker.io/library/node:20-alpine #4 ... #5 [linux/arm64 internal] load metadata for docker.io/library/nginx:alpine #5 DONE 0.4s #4 [linux/arm64 internal] load metadata for docker.io/library/node:20-alpine #4 DONE 0.4s #6 [internal] load .dockerignore #6 transferring context: 344B done #6 DONE 0.0s #7 [linux/amd64 internal] load metadata for docker.io/library/node:20-alpine #7 DONE 0.4s #8 [linux/amd64 internal] load metadata for docker.io/library/nginx:alpine #8 DONE 0.4s #9 [internal] load build context #9 DONE 0.0s #10 [linux/amd64 builder 1/8] FROM docker.io/library/node:20-alpine@sha256:3960ed74dfe320a67bf8da9555b6bade25ebda2b22b6081d2f60fd7d5d430e9c #10 resolve docker.io/library/node:20-alpine@sha256:3960ed74dfe320a67bf8da9555b6bade25ebda2b22b6081d2f60fd7d5d430e9c done #10 DONE 0.0s #11 [linux/amd64 runtime 1/3] FROM docker.io/library/nginx:alpine@sha256:b0f7830b6bfaa1258f45d94c240ab668ced1b3651c8a222aefe6683447c7bf55 #11 resolve docker.io/library/nginx:alpine@sha256:b0f7830b6bfaa1258f45d94c240ab668ced1b3651c8a222aefe6683447c7bf55 done #11 DONE 0.0s #12 importing cache manifest from gha:8468054678720030062 #12 DONE 0.1s #13 [linux/arm64 builder 1/8] FROM docker.io/library/node:20-alpine@sha256:3960ed74dfe320a67bf8da9555b6bade25ebda2b22b6081d2f60fd7d5d430e9c #13 resolve docker.io/library/node:20-alpine@sha256:3960ed74dfe320a67bf8da9555b6bade25ebda2b22b6081d2f60fd7d5d430e9c done #13 sha256:2e74b1344e24146a5181cea893d6035d8d412a89b8374e4d4360f6c35d985760 444B / 444B 0.0s done #13 sha256:38d6ffd8958149c983c185c5a62d19cba7ee8807466e60c7993d78a2867eef11 1.26MB / 1.26MB 0.1s done #13 sha256:f6b4fb9446345fcad2db26eac181fef6c0a919c8a4fcccd3bea5deb7f6dff67e 4.20MB / 4.20MB 0.1s done #13 extracting sha256:f6b4fb9446345fcad2db26eac181fef6c0a919c8a4fcccd3bea5deb7f6dff67e #13 ... #9 [internal] load build context #9 transferring context: 10.19MB 0.2s done #9 DONE 0.2s #14 [linux/amd64 builder 3/8] COPY package*.json ./ #14 CACHED #15 [linux/amd64 builder 4/8] COPY packages/spark-tools ./packages/spark-tools #15 CACHED #16 [linux/amd64 builder 5/8] COPY packages/spark ./packages/spark #16 CACHED #17 [linux/amd64 builder 2/8] WORKDIR /app #17 CACHED #13 [linux/arm64 builder 1/8] FROM docker.io/library/node:20-alpine@sha256:3960ed74dfe320a67bf8da9555b6bade25ebda2b22b6081d2f60fd7d5d430e9c #13 sha256:efc83bacf48e781625d7de46541986e8525b67c1b1644803b5ff90d4ad73425c 17.83MB / 43.12MB 0.2s #13 extracting sha256:f6b4fb9446345fcad2db26eac181fef6c0a919c8a4fcccd3bea5deb7f6dff67e 0.2s done #13 sha256:efc83bacf48e781625d7de46541986e8525b67c1b1644803b5ff90d4ad73425c 43.12MB / 43.12MB 0.3s done #13 extracting sha256:efc83bacf48e781625d7de46541986e8525b67c1b1644803b5ff90d4ad73425c #13 ... #18 [linux/arm64 runtime 1/3] FROM docker.io/library/nginx:alpine@sha256:b0f7830b6bfaa1258f45d94c240ab668ced1b3651c8a222aefe6683447c7bf55 #18 resolve docker.io/library/nginx:alpine@sha256:b0f7830b6bfaa1258f45d94c240ab668ced1b3651c8a222aefe6683447c7bf55 0.0s done #18 sha256:f4f04eae8d5eb8a0220a0d542da10f9c55b57a585dea1875cfbb1ee99d4c5a4a 1.40kB / 1.40kB 0.0s done #18 sha256:ceb87b8ac279a84fc99bdc30e7406cf21bf5d5841819fd0e3c8e0c06d867533c 1.21kB / 1.21kB 0.0s done #18 sha256:6628835d87d286d4d03f10b2c7f51d00f4556c49b5874947ce02609379069575 403B / 403B 0.0s done #18 sha256:8a735f2296d46b598dbc65289bfdc2ec4dd07607e69a1887e4ce6ef898be56e1 19.66MB / 19.66MB 0.2s done #18 sha256:c0de4eea5b769c1703c4428a21cf0cce5b0a1668738391f1443979bb32cc9bc1 954B / 954B 0.0s done #18 sha256:9076aaa4fd77085ce5562e9aca2b51ca88baf3fb8e41f8c777d0df14a1ce1085 628B / 628B 0.0s done #18 sha256:a0ef6d8231d0e512c7a0c0f7029bcfb8c77f0848b9cb8ec5373b28991c83415b 1.87MB / 1.87MB 0.1s done #18 extracting sha256:a0ef6d8231d0e512c7a0c0f7029bcfb8c77f0848b9cb8ec5373b28991c83415b 0.1s done #18 extracting sha256:9076aaa4fd77085ce5562e9aca2b51ca88baf3fb8e41f8c777d0df14a1ce1085 done #18 extracting sha256:c0de4eea5b769c1703c4428a21cf0cce5b0a1668738391f1443979bb32cc9bc1 done #18 extracting sha256:6628835d87d286d4d03f10b2c7f51d00f4556c49b5874947ce02609379069575 done #18 extracting sha256:ceb87b8ac279a84fc99bdc30e7406cf21bf5d5841819fd0e3c8e0c06d867533c done #18 extracting sha256:f4f04eae8d5eb8a0220a0d542da10f9c55b57a585dea1875cfbb1ee99d4c5a4a done #18 extracting sha256:8a735f2296d46b598dbc65289bfdc2ec4dd07607e69a1887e4ce6ef898be56e1 0.5s done #18 DONE 1.1s #19 [linux/amd64 builder 6/8] RUN npm install --legacy-peer-deps #19 sha256:acec9428f22bd20125c716a65e27ad75480a1360a59ad4f816044044dad7cc70 4.34kB / 4.34kB 0.0s done #19 sha256:41b3afaea3b1b1ab04a268431e10dcace7883019a5da7d326aa35dc9713fcbb5 445B / 445B 0.0s done #19 sha256:1d55258e311479e00466346e8c753c9b7e01237604cee9e4b28b24139f418bb9 92B / 92B 0.0s done #19 sha256:3dcec91425079e7b455efc5f2a18d026450c47c9382c41897620afc6b1424e44 1.26MB / 1.26MB 0.1s done #19 sha256:c2b4197efb6ccd7f8b482ae7800f1c9c78c044ea192587887300080bcff6b2c9 42.78MB / 42.78MB 0.4s done #19 sha256:1074353eec0db2c1d81d5af2671e56e00cf5738486f5762609ea33d606f88612 3.86MB / 3.86MB 0.2s done #19 extracting sha256:1074353eec0db2c1d81d5af2671e56e00cf5738486f5762609ea33d606f88612 0.1s done #19 sha256:f4b3dc64ea273c67c4ed06bca84314742da987ddac1c2a30392f4ac39f9e1ff2 1.55MB / 1.55MB 0.2s done #19 sha256:70e3e49db568901de1214b56a8a69068f5f1d1a21781d8afc9840854c1233580 48.98kB / 48.98kB 0.0s done #19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 29.36MB / 264.20MB 0.8s #19 extracting sha256:c2b4197efb6ccd7f8b482ae7800f1c9c78c044ea192587887300080bcff6b2c9 #19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 42.99MB / 264.20MB 1.1s #19 ... #13 [linux/arm64 builder 1/8] FROM docker.io/library/node:20-alpine@sha256:3960ed74dfe320a67bf8da9555b6bade25ebda2b22b6081d2f60fd7d5d430e9c #13 extracting sha256:efc83bacf48e781625d7de46541986e8525b67c1b1644803b5ff90d4ad73425c 1.2s done #13 DONE 1.6s #13 [linux/arm64 builder 1/8] FROM docker.io/library/node:20-alpine@sha256:3960ed74dfe320a67bf8da9555b6bade25ebda2b22b6081d2f60fd7d5d430e9c #13 extracting sha256:38d6ffd8958149c983c185c5a62d19cba7ee8807466e60c7993d78a2867eef11 0.0s done #13 extracting sha256:2e74b1344e24146a5181cea893d6035d8d412a89b8374e4d4360f6c35d985760 done #13 DONE 1.6s #19 [linux/amd64 builder 6/8] RUN npm install --legacy-peer-deps #19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 59.77MB / 264.20MB 1.5s #19 extracting sha256:c2b4197efb6ccd7f8b482ae7800f1c9c78c044ea192587887300080bcff6b2c9 1.5s done #19 extracting sha256:3dcec91425079e7b455efc5f2a18d026450c47c9382c41897620afc6b1424e44 0.1s done #19 ... #20 [linux/arm64 builder 2/8] WORKDIR /app #20 DONE 0.7s #19 [linux/amd64 builder 6/8] RUN npm install --legacy-peer-deps #19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 77.59MB / 264.20MB 2.0s #19 extracting sha256:41b3afaea3b1b1ab04a268431e10dcace7883019a5da7d326aa35dc9713fcbb5 done #19 extracting sha256:1d55258e311479e00466346e8c753c9b7e01237604cee9e4b28b24139f418bb9 done #19 extracting sha256:70e3e49db568901de1214b56a8a69068f5f1d1a21781d8afc9840854c1233580 0.0s done #19 extracting sha256:f4b3dc64ea273c67c4ed06bca84314742da987ddac1c2a30392f4ac39f9e1ff2 0.1s done #19 ... #21 [linux/arm64 builder 3/8] COPY package*.json ./ #21 DONE 0.1s #22 [linux/arm64 builder 4/8] COPY packages/spark-tools ./packages/spark-tools #22 DONE 0.1s #23 [linux/arm64 builder 5/8] COPY packages/spark ./packages/spark #23 DONE 0.0s #19 [linux/amd64 builder 6/8] RUN npm install --legacy-peer-deps #19 extracting sha256:acec9428f22bd20125c716a65e27ad75480a1360a59ad4f816044044dad7cc70 done #19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 96.47MB / 264.20MB 2.4s #19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 115.34MB / 264.20MB 2.9s #19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 128.97MB / 264.20MB 3.2s #19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 143.65MB / 264.20MB 3.5s #19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 162.53MB / 264.20MB 3.9s #19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 179.31MB / 264.20MB 4.4s #19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 195.04MB / 264.20MB 4.7s #19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 212.86MB / 264.20MB 5.1s #19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 226.49MB / 264.20MB 5.4s #19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 244.32MB / 264.20MB 5.9s #19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 259.00MB / 264.20MB 6.2s #19 sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 264.20MB / 264.20MB 6.5s done #19 extracting sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d #19 ... #24 [linux/arm64 builder 6/8] RUN npm install --legacy-peer-deps #24 ... #19 [linux/amd64 builder 6/8] RUN npm install --legacy-peer-deps #19 extracting sha256:828eb50cf87505f63ae57d13f4ce4484bf70ef66a718d8b5745753055ade6c3d 12.5s done #19 DONE 19.2s #25 [linux/amd64 builder 7/8] COPY . . #25 DONE 2.2s #24 [linux/arm64 builder 6/8] RUN npm install --legacy-peer-deps #24 ... #26 [linux/amd64 builder 8/8] RUN npm run build #26 0.230 #26 0.230 > spark-template@0.0.0 prebuild #26 0.230 > mkdir -p /tmp/dist || true #26 0.230 #26 0.238 #26 0.238 > spark-template@0.0.0 build #26 0.238 > tsc -b --noCheck && vite build #26 0.238 #26 6.457 vite v7.3.1 building client environment for production... #26 6.575 transforming... #26 10.05 Found 3 warnings while optimizing generated CSS: #26 10.05 #26 10.05 Issue #1: #26 10.05 │ .container { #26 10.05 │ width: 100%; #26 10.05 │ @media (width >= (display-mode: standalone)) { #26 10.05 ┆ ^-- Unexpected token ParenthesisBlock #26 10.05 ┆ #26 10.05 │ max-width: (display-mode: standalone); #26 10.05 │ } #26 10.05 #26 10.05 Issue #2: #26 10.05 │ max-width: (display-mode: standalone); #26 10.05 │ } #26 10.05 │ @media (width >= (pointer: coarse)) { #26 10.05 ┆ ^-- Unexpected token ParenthesisBlock #26 10.05 ┆ #26 10.05 │ max-width: (pointer: coarse); #26 10.05 │ } #26 10.05 #26 10.05 Issue #3: #26 10.05 │ max-width: (pointer: coarse); #26 10.05 │ } #26 10.05 │ @media (width >= (pointer: fine)) { #26 10.05 ┆ ^-- Unexpected token ParenthesisBlock #26 10.05 ┆ #26 10.05 │ max-width: (pointer: fine); #26 10.05 │ } #26 10.05 #26 27.53 ✓ 8276 modules transformed. #26 30.49 rendering chunks... #26 ... #24 [linux/arm64 builder 6/8] RUN npm install --legacy-peer-deps #24 55.47 npm warn deprecated whatwg-encoding@3.1.1: Use @exodus/bytes instead for a more spec-conformant and faster implementation #24 ... #26 [linux/amd64 builder 8/8] RUN npm run build #26 56.97 computing gzip size... #26 57.13 dist/index.html 2.18 kB │ gzip: 0.87 kB #26 57.13 dist/assets/FeatureIdeaCloud-B5DZHykP.css 7.32 kB │ gzip: 1.60 kB #26 57.13 dist/assets/index-DeAuhr8c.css 451.83 kB │ gzip: 78.84 kB #26 57.13 dist/assets/separator-DxaExrET.js 1.12 kB │ gzip: 0.59 kB #26 57.13 dist/assets/PWAStatusBar-BxRnFKIe.js 1.14 kB │ gzip: 0.64 kB #26 57.13 dist/assets/tabs-uv1gileV.js 1.34 kB │ gzip: 0.59 kB #26 57.13 dist/assets/PreviewDialog-CRbuRmHJ.js 1.36 kB │ gzip: 0.74 kB #26 57.13 dist/assets/PWAUpdatePrompt-A5H3Brsn.js 1.67 kB │ gzip: 0.82 kB #26 57.13 dist/assets/PWAInstallPrompt-BXeSE-7b.js 2.31 kB │ gzip: 1.02 kB #26 57.13 dist/assets/protected-llm-service-Q4cNm1rY.js 2.41 kB │ gzip: 1.00 kB #26 57.13 dist/assets/use-pwa-CN3ny1f7.js 2.42 kB │ gzip: 0.95 kB #26 57.13 dist/assets/KeyboardShortcutsDialog-BpO-G7Ko.js 2.54 kB │ gzip: 0.89 kB #26 57.13 dist/assets/switch-Le0tcnoA.js 2.57 kB │ gzip: 1.26 kB #26 57.13 dist/assets/skeleton-DvZARUoK.js 2.85 kB │ gzip: 1.34 kB #26 57.13 dist/assets/FeatureToggleSettings-DyoCP9xu.js 3.36 kB │ gzip: 1.40 kB #26 57.13 dist/assets/select-CUM2wG-b.js 3.62 kB │ gzip: 1.29 kB #26 57.13 dist/assets/page-renderer-CnwNh3EQ.js 3.92 kB │ gzip: 1.59 kB #26 57.13 dist/assets/JSONWorkflowDesigner-BMu_I1iN.js 4.04 kB │ gzip: 1.40 kB #26 57.13 dist/assets/JSONModelDesigner-CtCr0IyF.js 4.06 kB │ gzip: 1.40 kB #26 57.13 dist/assets/JSONComponentTreeManager-DChvp8bH.js 4.19 kB │ gzip: 1.43 kB #26 57.13 dist/assets/ComponentTreeBuilder-AKJ_ySXd.js 4.81 kB │ gzip: 1.95 kB #26 57.13 dist/assets/CodeEditor-BLwoA4UR.js 4.89 kB │ gzip: 1.86 kB #26 57.13 dist/assets/FileExplorer-JbASuVTC.js 4.98 kB │ gzip: 1.78 kB #26 57.13 dist/assets/ai-service-BB_pmEqI.js 6.07 kB │ gzip: 1.92 kB #26 57.13 dist/assets/ModelDesigner-CgtLxbx8.js 6.09 kB │ gzip: 2.06 kB #26 57.13 dist/assets/StorybookDesigner-Bpm7g44n.js 6.90 kB │ gzip: 2.34 kB #26 57.13 dist/assets/PlaywrightDesigner-BfiCriP0.js 7.51 kB │ gzip: 2.51 kB #26 57.13 dist/assets/PWASettings-3_HqVF29.js 7.92 kB │ gzip: 1.90 kB #26 57.13 dist/assets/ComponentTreeManager-NGgMB7h-.js 8.27 kB │ gzip: 2.92 kB #26 57.13 dist/assets/slider-CYgezrCe.js 8.65 kB │ gzip: 3.36 kB #26 57.13 dist/assets/UnitTestDesigner-hJNaBS7K.js 8.73 kB │ gzip: 2.76 kB #26 57.13 dist/assets/SassStylesShowcase-Be2HgC09.js 8.99 kB │ gzip: 1.67 kB #26 57.13 dist/assets/ErrorPanel-MW-ZUvQo.js 11.31 kB │ gzip: 3.65 kB #26 57.13 dist/assets/react-vendor-RsqJS7wA.js 11.33 kB │ gzip: 3.99 kB #26 57.13 dist/assets/FlaskDesigner-COgNGjFx.js 12.03 kB │ gzip: 3.25 kB #26 57.13 dist/assets/StyleDesigner-B2AQyBAi.js 13.23 kB │ gzip: 3.29 kB #26 57.13 dist/assets/code-editor-BR3HUJ_E.js 14.03 kB │ gzip: 4.80 kB #26 57.13 dist/assets/ProjectSettingsDesigner-DiAcWh5o.js 14.16 kB │ gzip: 3.31 kB #26 57.13 dist/assets/JSONUIShowcasePage-BYgVWKow.js 14.25 kB │ gzip: 3.93 kB #26 57.13 dist/assets/LambdaDesigner-CWnKya9X.js 14.42 kB │ gzip: 3.83 kB #26 57.13 dist/assets/ProjectDashboard-CLf3fcP0.js 15.83 kB │ gzip: 4.53 kB #26 57.13 dist/assets/ui-extended-CH1jmFOr.js 16.72 kB │ gzip: 5.34 kB #26 57.13 dist/assets/component-registry-D8jh1CB-.js 18.21 kB │ gzip: 6.39 kB #26 57.13 dist/assets/WorkflowDesigner-uASoW4e9.js 18.34 kB │ gzip: 5.03 kB #26 57.13 dist/assets/DataBindingDesigner-BkzQtXOX.js 20.36 kB │ gzip: 5.24 kB #26 57.13 dist/assets/SchemaEditorPage-DzxsWN4D.js 21.04 kB │ gzip: 5.95 kB #26 57.13 dist/assets/FaviconDesigner-DPzmL1L4.js 23.48 kB │ gzip: 6.27 kB #26 57.13 dist/assets/GlobalSearch-BjLJMhgk.js 25.04 kB │ gzip: 8.09 kB #26 57.13 dist/assets/FeatureIdeaCloud-DZ2YR6RT.js 30.07 kB │ gzip: 8.44 kB #26 57.13 dist/assets/utils-Bt9FPkgP.js 36.00 kB │ gzip: 11.18 kB #26 57.13 dist/assets/TemplateSelector-BVFRYL8A.js 42.82 kB │ gzip: 9.32 kB #26 57.13 dist/assets/form-components-Bgqg-kRU.js 66.01 kB │ gzip: 17.55 kB #26 57.13 dist/assets/DocumentationView-BjvllHGd.js 70.03 kB │ gzip: 12.62 kB #26 57.13 dist/assets/workflow-CpSwYplm.js 101.55 kB │ gzip: 32.48 kB #26 57.13 dist/assets/ui-core-CS7FcLG5.js 105.95 kB │ gzip: 32.29 kB #26 57.13 dist/assets/index-J_d48Gj5.js 488.88 kB │ gzip: 152.32 kB #26 57.13 dist/assets/three.module-D5EGS0V7.js 683.00 kB │ gzip: 169.49 kB #26 57.13 dist/assets/data-viz-DVeW5iYn.js 717.82 kB │ gzip: 199.17 kB #26 57.13 dist/assets/icons-CUJifBl7.js 5,039.69 kB │ gzip: 1,049.93 kB #26 57.13 #26 57.13 (!) Some chunks are larger than 1000 kB after minification. Consider: #26 57.13 - Using dynamic import() to code-split the application #26 57.13 - Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks #26 57.13 - Adjust chunk size limit for this warning via build.chunkSizeWarningLimit. #26 57.13 ✓ built in 50.63s #26 DONE 57.6s #24 [linux/arm64 builder 6/8] RUN npm install --legacy-peer-deps #24 ... #27 [linux/amd64 runtime 2/3] COPY --from=builder /app/dist /usr/share/nginx/html #27 CACHED #28 [linux/amd64 runtime 3/3] COPY nginx.conf /etc/nginx/conf.d/default.conf #28 CACHED #24 [linux/arm64 builder 6/8] RUN npm install --legacy-peer-deps #24 153.2 #24 153.2 added 712 packages, and audited 715 packages in 3m #24 153.2 #24 153.2 119 packages are looking for funding #24 153.2 run `npm fund` for details #24 153.3 #24 153.3 found 0 vulnerabilities #24 153.3 npm notice #24 153.3 npm notice New major version of npm available! 10.8.2 -> 11.7.0 #24 153.3 npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.7.0 #24 153.3 npm notice To update run: npm install -g npm@11.7.0 #24 153.3 npm notice #24 DONE 153.8s #29 [linux/arm64 builder 7/8] COPY . . #29 DONE 0.5s #30 [linux/arm64 builder 8/8] RUN npm run build #30 2.651 #30 2.651 > spark-template@0.0.0 prebuild #30 2.651 > mkdir -p /tmp/dist || true #30 2.651 #30 2.723 #30 2.723 > spark-template@0.0.0 build #30 2.723 > tsc -b --noCheck && vite build #30 2.723 #30 50.69 /app/node_modules/rollup/dist/native.js:83 #30 50.69 throw new Error( #30 50.69 ^ #30 50.69 #30 50.69 Error: Cannot find module @rollup/rollup-linux-arm64-musl. npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). Please try `npm i` again after removing both package-lock.json and node_modules directory. #30 50.69 at requireWithFriendlyError (/app/node_modules/rollup/dist/native.js:83:9) #30 50.69 at Object. (/app/node_modules/rollup/dist/native.js:92:76) #30 50.69 ... 3 lines matching cause stack trace ... #30 50.69 at Module._load (node:internal/modules/cjs/loader:1091:12) #30 50.69 at cjsLoader (node:internal/modules/esm/translators:298:15) #30 50.69 at ModuleWrap. (node:internal/modules/esm/translators:240:7) #30 50.69 at ModuleJob.run (node:internal/modules/esm/module_job:325:25) #30 50.69 at async ModuleLoader.import (node:internal/modules/esm/loader:606:24) { #30 50.69 [cause]: Error: Cannot find module '@rollup/rollup-linux-arm64-musl' #30 50.69 Require stack: #30 50.69 - /app/node_modules/rollup/dist/native.js #30 50.69 at Module._resolveFilename (node:internal/modules/cjs/loader:1207:15) #30 50.69 at Module._load (node:internal/modules/cjs/loader:1038:27) #30 50.69 at Module.require (node:internal/modules/cjs/loader:1289:19) #30 50.69 at require (node:internal/modules/helpers:182:18) #30 50.69 at requireWithFriendlyError (/app/node_modules/rollup/dist/native.js:65:10) #30 50.69 at Object. (/app/node_modules/rollup/dist/native.js:92:76) #30 50.69 at Module._compile (node:internal/modules/cjs/loader:1521:14) #30 50.69 at Module._extensions..js (node:internal/modules/cjs/loader:1623:10) #30 50.69 at Module.load (node:internal/modules/cjs/loader:1266:32) #30 50.69 at Module._load (node:internal/modules/cjs/loader:1091:12) { #30 50.69 code: 'MODULE_NOT_FOUND', #30 50.69 requireStack: [ '/app/node_modules/rollup/dist/native.js' ] #30 50.69 } #30 50.69 } #30 50.70 #30 50.70 Node.js v20.20.0 #30 ERROR: process "/bin/sh -c npm run build" did not complete successfully: exit code: 1 ------ > [linux/arm64 builder 8/8] RUN npm run build: 50.69 at Module._compile (node:internal/modules/cjs/loader:1521:14) 50.69 at Module._extensions..js (node:internal/modules/cjs/loader:1623:10) 50.69 at Module.load (node:internal/modules/cjs/loader:1266:32) 50.69 at Module._load (node:internal/modules/cjs/loader:1091:12) { 50.69 code: 'MODULE_NOT_FOUND', 50.69 requireStack: [ '/app/node_modules/rollup/dist/native.js' ] 50.69 } 50.69 } 50.70 50.70 Node.js v20.20.0 ------ Dockerfile:22 -------------------- 20 | 21 | # Build the application 22 | >>> RUN npm run build 23 | 24 | FROM nginx:alpine AS runtime -------------------- ERROR: failed to build: failed to solve: process "/bin/sh -c npm run build" did not complete successfully: exit code: 1 Error: buildx failed with: ERROR: failed to build: failed to solve: process "/bin/sh -c npm run build" did not complete successfully: exit code: 1 --- PRD.md | 211 +++++------ index.html | 27 +- src/App.tsx | 793 +++++++++++++++++++++------------------ src/index.css | 63 ++-- src/lib/docker-parser.ts | 463 +++++++++++++++++++++++ src/types/docker.ts | 26 ++ 6 files changed, 1022 insertions(+), 561 deletions(-) create mode 100644 src/lib/docker-parser.ts create mode 100644 src/types/docker.ts diff --git a/PRD.md b/PRD.md index 39d73c3..eda5b77 100644 --- a/PRD.md +++ b/PRD.md @@ -1,164 +1,131 @@ -# JSON-Driven UI Architecture Enhancement +# Planning Guide -Build a comprehensive JSON-driven UI system that allows building entire user interfaces from declarative JSON schemas, including a visual drag-and-drop schema editor for creating JSON UI configs, breaking down complex components into atomic pieces, and extracting reusable logic into custom hooks for maximum maintainability and rapid development. - -**Recent Updates:** -- ✅ Converted Models, Component Trees, and Workflows pages to JSON-driven configuration -- ✅ Converted Lambdas, Styling, and Flask API pages to JSON-driven configuration -- ✅ Created JSON schema definitions for all six pages with data sources, computed values, and bindings -- ✅ Added JSON-based versions of pages alongside traditional implementations for comparison -- ✅ Implemented seed data for all six converted pages with realistic examples -- ✅ Complete JSON-driven UI system now covers all major designer pages -- ✅ Enhanced JSON schema system with additional UI components and patterns -- ✅ Created focused custom hooks for common UI patterns (useConfirmDialog, useFormState, useListOperations) -- ✅ Built additional atomic components for improved composability -- ✅ **NEW:** Created `useJSONRenderer` hook with data binding utilities (resolveBinding, resolveValue, resolveProps) -- ✅ **NEW:** Created `useDataSources` hook for unified KV, static, and computed data management -- ✅ **NEW:** Built atomic JSON UI components: IconRenderer, DataCard (<50 LOC each) -- ✅ **NEW:** Established hooks/json-ui and components/atoms/json-ui directories for modularity +A visual Docker build error analyzer that parses build logs, highlights errors, and provides actionable solutions with automatic fix generation. **Experience Qualities**: -1. **Modular** - Every component under 150 LOC, highly composable and reusable -2. **Declarative** - Define UIs through configuration rather than imperative code -3. **Maintainable** - Clear separation of concerns between data, logic, and presentation +1. **Clarifying** - Takes cryptic Docker logs and transforms them into clear, understandable problem statements +2. **Actionable** - Provides specific, copy-paste ready solutions rather than generic advice +3. **Educational** - Explains the root cause so users learn what went wrong and why -**Complexity Level**: Complex Application (advanced functionality with multiple views) - -This is an advanced system that interprets JSON schemas, manages state across multiple data sources, executes actions dynamically, renders complex component hierarchies, and provides a visual editor for creating schemas through drag-and-drop - requiring sophisticated architecture with component registries, action executors, data source managers, and interactive canvas rendering. +**Complexity Level**: Light Application (multiple features with basic state) +This is a diagnostic tool with log parsing, error highlighting, and solution generation - more than a single-purpose tool but not a complex multi-view application. ## Essential Features -### Visual Schema Editor -- **Functionality**: Drag-and-drop interface for building JSON UI schemas with real-time preview -- **Purpose**: Enable non-technical users to create complex UIs without writing JSON -- **Trigger**: User opens the schema editor page -- **Progression**: Select component from palette → Drag to canvas → Drop at position → Configure properties → Preview result → Export JSON -- **Success criteria**: Users can create complete page schemas visually, with property editing, component tree view, and JSON export +### Log Parser & Error Highlighter +- **Functionality**: Paste Docker build logs and automatically extract error information +- **Purpose**: Make sense of lengthy, unformatted build output +- **Trigger**: User pastes log text into a text area +- **Progression**: Paste log → Auto-parse on input → Highlight errors in red → Extract key details → Display structured output +- **Success criteria**: Correctly identifies build stage, error type, exit codes, and root cause from real Docker logs -### Data Source Binding UI -- **Functionality**: Visual interface for connecting components to KV storage and computed values with dependency tracking -- **Purpose**: Enable declarative data management without manual state handling -- **Trigger**: User opens data binding designer or edits component bindings in schema editor -- **Progression**: Create data source → Configure type (KV/computed/static) → Set up dependencies → Bind to component properties → Test reactive updates -- **Success criteria**: Users can create KV stores, computed values, and static data, then bind them to components with automatic reactive updates +### Smart Solution Generator +- **Functionality**: Analyzes parsed errors and suggests specific fixes with code examples +- **Purpose**: Provide actionable solutions tailored to the exact error type +- **Trigger**: After log is parsed and error identified +- **Progression**: Error identified → Match error pattern → Generate relevant solutions → Display with copy buttons → Show explanation +- **Success criteria**: Provides relevant, working solutions for common Docker build issues (missing dependencies, platform issues, build failures) -### JSON Schema Parser -- **Functionality**: Parse and validate JSON UI schemas with full TypeScript type safety -- **Purpose**: Enable building UIs from configuration rather than code -- **Trigger**: User loads a page defined by JSON schema -- **Progression**: Load schema → Validate structure → Initialize data sources → Render component tree → Bind events -- **Success criteria**: Schemas render correctly with all data bindings and event handlers working +### Error Knowledge Base +- **Functionality**: Common Docker build errors with explanations and fixes +- **Purpose**: Quick reference for developers debugging builds +- **Trigger**: User browses error categories or searches +- **Progression**: Click category → View error patterns → Select specific error → See explanation and fixes +- **Success criteria**: Covers at least 10 common Docker build error patterns with clear explanations -### Data Source Management -- **Functionality**: Manage multiple data sources (KV store, computed values, static data) with automatic dependency tracking -- **Purpose**: Centralize data management and enable reactive updates -- **Trigger**: Component needs data or data changes -- **Progression**: Request data → Check source type → Load/compute value → Update dependents → Re-render -- **Success criteria**: Data flows correctly between sources, components, and persistence layer - -### Action Executor -- **Functionality**: Execute user actions declaratively (CRUD, navigation, toasts, custom actions) -- **Purpose**: Handle all user interactions declaratively without component-specific code -- **Trigger**: User interaction (click, change, submit, etc.) -- **Progression**: Parse action → Validate params → Execute handler → Update data → Show feedback -- **Success criteria**: All action types work correctly with proper error handling - -### Atomic Component Library -- **Functionality**: Library of small, focused, reusable components (atoms, molecules, organisms) -- **Purpose**: Build complex UIs from simple, tested building blocks -- **Trigger**: Developer needs a UI element -- **Progression**: Select component → Configure props → Compose with other components → Render -- **Success criteria**: No component exceeds 150 LOC, all components highly reusable - -### Custom Hooks Library -- **Functionality**: Extracted business logic in reusable hooks (useCRUD, useSearch, useFilter, useForm, etc.) -- **Purpose**: Separate concerns and enable logic reuse across components -- **Trigger**: Component needs common functionality (data management, search, form handling) -- **Progression**: Call hook → Provide config → Receive state and handlers → Render UI -- **Success criteria**: Hooks are testable, reusable, and follow React best practices +### Fix Code Generator +- **Functionality**: Generate copy-paste ready Dockerfile snippets or package.json modifications +- **Purpose**: Speed up fixing by providing exact code changes needed +- **Trigger**: After solution is displayed +- **Progression**: Solution shown → Click "Generate Fix" → Code snippet created → Copy to clipboard → Apply to project +- **Success criteria**: Generated code is syntactically correct and addresses the identified issue ## Edge Case Handling -- **Invalid Schemas** - Validate JSON structure, show helpful error messages, provide fallback UI -- **Missing Components** - Log warnings, render fallback div, continue rendering other components -- **Data Source Errors** - Catch KV failures, show toast notifications, maintain app stability -- **Circular Dependencies** - Detect loops in computed data sources, break cycles, warn developer -- **Concurrent Updates** - Use optimistic updates with rollback on failure -- **Empty States** - Show helpful messages and actions when no data exists +- **Incomplete Logs**: Gracefully handle partial logs by extracting whatever information is available +- **Unknown Errors**: For unrecognized error patterns, provide general debugging steps and encourage manual investigation +- **Multiple Errors**: When multiple errors present, prioritize and display them in order of likely root cause +- **Empty Input**: Show helpful placeholder text with example log format +- **Very Long Logs**: Truncate display but maintain full parsing capability ## Design Direction -A **dark cyberpunk development theme** with electric accents and technical precision that feels like a high-powered code editor with visual design tools integrated. +The design should feel like a developer's diagnostic dashboard - technical but approachable, with clear visual hierarchy that guides the eye from problem to solution. Think of a code editor meets troubleshooting assistant. ## Color Selection -Convey technical sophistication with electric highlights against deep, professional backgrounds. +A code-focused palette with strong error signaling and calm backgrounds. -- **Primary Color**: Deep Purple `oklch(0.45 0.15 270)` - Commands attention for primary actions, evokes advanced technology -- **Secondary Colors**: - - Dark Slate `oklch(0.35 0.02 250)` for secondary surfaces - - Deep Navy `oklch(0.18 0.02 250)` for cards and elevated surfaces -- **Accent Color**: Cyan Glow `oklch(0.70 0.15 200)` - Electric highlight for CTAs, active states, and focus indicators -- **Foreground/Background Pairings**: - - Background (Deep Navy #1E1E2E) → Foreground (Light Gray #E8E8EC) - Ratio 12.5:1 ✓ - - Card (Darker Navy #252535) → Card Foreground (Light Gray #E8E8EC) - Ratio 11.2:1 ✓ - - Primary (Deep Purple #7C3AED) → Primary Foreground (White #FFFFFF) - Ratio 6.8:1 ✓ - - Accent (Cyan #5DD5F5) → Accent Foreground (Deep Navy #1E1E2E) - Ratio 9.2:1 ✓ - - Muted (Slate #38384A) → Muted Foreground (Mid Gray #A8A8B0) - Ratio 5.2:1 ✓ +- **Primary Color**: `oklch(0.58 0.24 265)` - Tech purple that feels modern and developer-centric +- **Secondary Colors**: `oklch(0.25 0.03 265)` - Deep navy backgrounds for code blocks and panels +- **Accent Color**: `oklch(0.75 0.20 145)` - Bright teal for success states and actionable elements +- **Foreground/Background Pairings**: + - Background (`oklch(0.15 0.02 265)`): Light text `oklch(0.95 0.01 265)` - Ratio 11.2:1 ✓ + - Card (`oklch(0.19 0.02 265)`): Light text `oklch(0.95 0.01 265)` - Ratio 9.8:1 ✓ + - Accent (`oklch(0.75 0.20 145)`): Dark text `oklch(0.15 0.02 265)` - Ratio 7.5:1 ✓ + - Destructive/Error (`oklch(0.60 0.25 25)`): White text `oklch(1 0 0)` - Ratio 5.2:1 ✓ ## Font Selection -Convey **technical precision and modern development** with a mix of geometric sans-serif and monospace fonts. +Monospace for code and logs, clean sans-serif for explanations - reflecting the technical nature while remaining readable. - **Typographic Hierarchy**: - - H1 (Page Titles): Space Grotesk Bold/32px/tight (-0.02em) - Geometric, technical, commanding - - H2 (Section Headers): Space Grotesk Semi-Bold/24px/tight (-0.01em) - - H3 (Component Headers): Space Grotesk Medium/18px/normal - - Body Text: Inter Regular/14px/relaxed (1.6) - Highly readable, neutral, professional - - Code/Technical: JetBrains Mono Regular/13px/normal (1.5) - Monospace for code and technical content - - Captions/Labels: Inter Medium/12px/normal - Slightly bolder for hierarchy + - H1 (Main Title): JetBrains Mono Bold/32px/tight letter spacing + - H2 (Section Headers): JetBrains Mono Medium/24px/normal spacing + - Body Text: IBM Plex Sans Regular/16px/1.6 line height + - Code/Logs: JetBrains Mono Regular/14px/1.5 line height + - Small Labels: IBM Plex Sans Medium/12px/uppercase tracking ## Animations -Animations should feel **snappy and purposeful** - fast micro-interactions (100-150ms) for buttons and inputs, smooth transitions (250-300ms) for page changes and dialogs, with spring physics for natural movement. Use subtle scale transforms (0.98→1.0) on button press, slide-in animations for modals, and fade effects for state changes. Avoid unnecessary flourishes - every animation serves feedback or orientation. +Animations should feel snappy and technical, like a terminal responding to commands. + +- Error highlights fade in with a quick pulse (200ms) to draw attention +- Solutions expand/collapse smoothly (300ms ease-out) +- Copy confirmation shows brief checkmark animation (150ms) +- Log parsing shows subtle progress indicator during processing +- Tab switches use fast slide transitions (200ms) ## Component Selection - **Components**: - - `Card`, `Button`, `Input`, `Select`, `Checkbox`, `Switch` for core UI - - `Dialog`, `Tabs`, `Badge`, `Progress`, `Separator` for layout and feedback - - `Heading`, `Text`, `List`, `Grid` for typography and layout primitives - - `ScrollArea` for contained scrollable regions - - `Tooltip` for contextual help + - Textarea (custom styled) for log input with monospace font + - Card for structured error display with distinct sections + - Badge for error types, build stages, and exit codes + - Tabs for switching between parsed errors, solutions, and knowledge base + - Button (primary for actions, secondary for copy operations) + - ScrollArea for long log outputs + - Separator to divide error details from solutions + - Alert for success/info messages after copying - **Customizations**: - - `StatusBadge` - Status indicator with predefined styles - - `DataCard` - Stat card with icon, trend, and loading states - - `SearchInput` - Input with search icon and clear button - - `ActionBar` - Title with action buttons - - All new atomic components follow the 150 LOC limit + - Custom syntax highlighting for Docker logs using color coding + - Custom error badge with pulsing animation for critical errors + - Monospace code blocks with line numbers for generated fixes - **States**: - - Buttons: subtle scale on press, glow effect on hover, disabled with opacity - - Inputs: border color shift on focus, inline validation icons, smooth error states - - Cards: subtle lift shadow on hover for interactive cards + - Buttons: Default solid with subtle shadow, hover lifts with brightness increase, active depresses + - Input: Focused state has bright accent border with subtle glow + - Code blocks: Hover shows copy button overlay in corner - **Icon Selection**: - - Phosphor Icons throughout - - Code, Database, Tree, Cube for feature areas - - Plus, Pencil, Trash for CRUD operations - - MagnifyingGlass, Gear, Download for utilities + - Terminal (for log input) + - Warning/WarningCircle (for errors) + - CheckCircle (for solutions) + - Copy/CopySimple (for copy actions) + - MagnifyingGlass (for search in knowledge base) + - Code (for generated fixes) + - Stack (for Docker layers) - **Spacing**: - - Container padding: p-6 (1.5rem) - - Section gaps: gap-6 (1.5rem) - - Card gaps: gap-4 (1rem) - - Button groups: gap-2 (0.5rem) - - Tight elements: gap-1 (0.25rem) + - Container padding: p-6 on desktop, p-4 on mobile + - Section gaps: gap-8 for major sections, gap-4 for related content + - Card internal padding: p-6 + - Button spacing: px-6 py-3 for primary, px-4 py-2 for secondary - **Mobile**: - - Stack layouts vertically on <768px - - Reduce padding to p-4 on mobile - - Touch-friendly tap targets (min 44px) - - Responsive grid columns (1 → 2 → 3 → 4) - - Bottom sheet dialogs on small screens + - Stack all sections vertically on mobile + - Reduce font sizes: H1 to 24px, Body to 14px + - Full-width buttons and inputs + - Collapsible sections for solutions to save space + - Fixed header with title, scrollable content below diff --git a/index.html b/index.html index 82968e9..f171789 100644 --- a/index.html +++ b/index.html @@ -4,34 +4,15 @@ - JSON-Driven UI - CodeForge + Docker Build Debugger - - - - - - - - - - - + + - + - - diff --git a/src/App.tsx b/src/App.tsx index ce7730d..a89252e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,387 +1,432 @@ -console.log('[APP] 🚀 App.tsx loading - BEGIN') -console.time('[APP] Component initialization') - -import { useState, Suspense, useEffect } from 'react' -console.log('[APP] ✅ React hooks imported') - -import { BrowserRouter, useLocation } from 'react-router-dom' -console.log('[APP] ✅ React Router imported') - -import { AppHeader } from '@/components/organisms' -console.log('[APP] ✅ Header components imported') - -import { LoadingFallback } from '@/components/molecules' -console.log('[APP] ✅ LoadingFallback imported') - -import { useProjectState } from '@/hooks/use-project-state' -import { useFileOperations } from '@/hooks/use-file-operations' -import { useKeyboardShortcuts } from '@/hooks/use-keyboard-shortcuts' -import { useSeedData } from '@/hooks/data/use-seed-data' -import { useRouterNavigation } from '@/hooks/use-router-navigation' -console.log('[APP] ✅ Custom hooks imported') - -import { getPageShortcuts } from '@/config/page-loader' -console.log('[APP] ✅ Page config imported') - +import { useState } from 'react' +import { useKV } from '@github/spark/hooks' +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' +import { Button } from '@/components/ui/button' +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' +import { Textarea } from '@/components/ui/textarea' +import { Badge } from '@/components/ui/badge' +import { ScrollArea } from '@/components/ui/scroll-area' +import { Separator } from '@/components/ui/separator' +import { Alert, AlertDescription } from '@/components/ui/alert' +import { Terminal, Warning, CheckCircle, Copy, Code, Stack, MagnifyingGlass, Sparkle } from '@phosphor-icons/react' +import { parseDockerLog, getSolutionsForError, knowledgeBase } from '@/lib/docker-parser' +import { DockerError, KnowledgeBaseItem } from '@/types/docker' import { toast } from 'sonner' -console.log('[APP] ✅ Toast imported') +import { motion, AnimatePresence } from 'framer-motion' -import { DialogRegistry, PWARegistry, preloadCriticalComponents } from '@/lib/component-registry' -console.log('[APP] ✅ Component registry imported') +function App() { + const [logInput, setLogInput] = useKV('docker-log-input', '') + const [parsedErrors, setParsedErrors] = useState([]) + const [selectedKbItem, setSelectedKbItem] = useState(null) + const [searchQuery, setSearchQuery] = useState('') -import { RouterProvider } from '@/router' -import { routePreloadManager } from '@/lib/route-preload-manager' -import { PreloadIndicator } from '@/components/PreloadIndicator' -console.log('[APP] ✅ Router provider imported') - -const { GlobalSearch, KeyboardShortcutsDialog, PreviewDialog } = DialogRegistry -const { PWAInstallPrompt, PWAUpdatePrompt, PWAStatusBar } = PWARegistry -console.log('[APP] ✅ Dialog and PWA components registered') - -console.log('[APP] 🎯 App component function executing') - -function AppLayout() { - console.log('[APP] 🏗️ AppLayout component rendering') - const location = useLocation() - const { currentPage, navigateToPage } = useRouterNavigation() - - console.log('[APP] 📍 Current location:', location.pathname) - console.log('[APP] 📄 Current page:', currentPage) - - console.log('[APP] 📊 Initializing project state hook') - const projectState = useProjectState() - console.log('[APP] ✅ Project state initialized') - - const { - files, - models, - components, - componentTrees, - workflows, - lambdas, - theme, - playwrightTests, - storybookStories, - unitTests, - flaskConfig, - nextjsConfig, - npmSettings, - featureToggles, - setFiles, - setModels, - setComponents, - setComponentTrees, - setWorkflows, - setLambdas, - setTheme, - setPlaywrightTests, - setStorybookStories, - setUnitTests, - setFlaskConfig, - setNextjsConfig, - setNpmSettings, - setFeatureToggles, - } = projectState - - useEffect(() => { - console.log('[APP] 🎯 Setting feature toggles in preload manager') - routePreloadManager.setFeatureToggles(featureToggles) - }, [featureToggles]) - - console.log('[APP] 📁 Initializing file operations') - const fileOps = useFileOperations(files, setFiles) - console.log('[APP] ✅ File operations initialized') - - const { activeFileId, setActiveFileId, handleFileChange, handleFileAdd, handleFileClose } = fileOps - - console.log('[APP] 💾 Initializing state variables') - const [searchOpen, setSearchOpen] = useState(false) - const [shortcutsOpen, setShortcutsOpen] = useState(false) - const [previewOpen, setPreviewOpen] = useState(false) - const [lastSaved] = useState(Date.now()) - const [errorCount] = useState(0) - console.log('[APP] ✅ State variables initialized') - - const shortcuts = getPageShortcuts(featureToggles) - console.log('[APP] ⌨️ Keyboard shortcuts configured:', shortcuts.length) - - console.log('[APP] ⌨️ Setting up keyboard shortcuts') - useKeyboardShortcuts([ - ...shortcuts.map(s => ({ - key: s.key, - ctrl: s.ctrl, - shift: s.shift, - description: s.description, - action: () => { - console.log('[APP] ⌨️ Shortcut triggered, navigating to:', s.action) - navigateToPage(s.action) - } - })), - { - key: 'k', - ctrl: true, - description: 'Search', - action: () => { - console.log('[APP] ⌨️ Search shortcut triggered') - setSearchOpen(true) - } - }, - { - key: '/', - ctrl: true, - description: 'Shortcuts', - action: () => { - console.log('[APP] ⌨️ Shortcuts dialog triggered') - setShortcutsOpen(true) - } - }, - { - key: 'p', - ctrl: true, - description: 'Preview', - action: () => { - console.log('[APP] ⌨️ Preview shortcut triggered') - setPreviewOpen(true) - } - }, - ]) - console.log('[APP] ✅ Keyboard shortcuts configured') - - const getCurrentProject = () => ({ - name: nextjsConfig.appName, - files, - models, - components, - componentTrees, - workflows, - lambdas, - theme, - playwrightTests, - storybookStories, - unitTests, - flaskConfig, - nextjsConfig, - npmSettings, - featureToggles, - }) - - const handleProjectLoad = (project: any) => { - console.log('[APP] 📦 Loading project:', project.name) - if (project.files) setFiles(project.files) - if (project.models) setModels(project.models) - if (project.components) setComponents(project.components) - if (project.componentTrees) setComponentTrees(project.componentTrees) - if (project.workflows) setWorkflows(project.workflows) - if (project.lambdas) setLambdas(project.lambdas) - if (project.theme) setTheme(project.theme) - if (project.playwrightTests) setPlaywrightTests(project.playwrightTests) - if (project.storybookStories) setStorybookStories(project.storybookStories) - if (project.unitTests) setUnitTests(project.unitTests) - if (project.flaskConfig) setFlaskConfig(project.flaskConfig) - if (project.nextjsConfig) setNextjsConfig(project.nextjsConfig) - if (project.npmSettings) setNpmSettings(project.npmSettings) - if (project.featureToggles) setFeatureToggles(project.featureToggles) - toast.success('Project loaded') - console.log('[APP] ✅ Project loaded successfully') + const handleParse = () => { + if (!logInput.trim()) { + toast.error('Please paste a Docker build log first') + return + } + + const errors = parseDockerLog(logInput) + + if (errors.length === 0) { + toast.info('No errors detected in the log') + } else { + setParsedErrors(errors) + toast.success(`Found ${errors.length} error${errors.length > 1 ? 's' : ''}`) + } } - useEffect(() => { - console.log('[APP] 📍 Route changed to:', location.pathname, '- Page:', currentPage) - routePreloadManager.setCurrentRoute(currentPage) - - const stats = routePreloadManager.getStats() - console.log('[APP] 📊 Preload stats:', stats) - }, [location, currentPage]) + const handleCopy = (text: string, label: string) => { + navigator.clipboard.writeText(text) + toast.success(`${label} copied to clipboard`) + } + + const filteredKnowledgeBase = knowledgeBase.filter(item => + item.title.toLowerCase().includes(searchQuery.toLowerCase()) || + item.category.toLowerCase().includes(searchQuery.toLowerCase()) || + item.explanation.toLowerCase().includes(searchQuery.toLowerCase()) + ) - console.log('[APP] 🎨 Rendering AppLayout UI') - return ( -
- }> - - - - - - { - console.log('[APP] 🔍 Search opened') - setSearchOpen(true) - }} - onShowShortcuts={() => { - console.log('[APP] ⌨️ Shortcuts dialog opened') - setShortcutsOpen(true) - }} - onGenerateAI={() => { - console.log('[APP] 🤖 AI generation requested') - toast.info('AI generation coming soon') - }} - onExport={() => { - console.log('[APP] 📤 Export requested') - toast.info('Export coming soon') - }} - onPreview={() => { - console.log('[APP] 👁️ Preview opened') - setPreviewOpen(true) - }} - onShowErrors={() => { - console.log('[APP] ⚠️ Navigating to errors page') - navigateToPage('errors') - }} - /> -
- +
+
+
+
+ +
+
+
+
+
+ +
+
+

Docker Build Debugger

+

Analyze errors and get instant solutions

+
+
+
+
+ +
+ + + + + Log Analyzer + Analyze + + + + Knowledge Base + Knowledge + + + + + + +
+
+ + + Paste Build Log + + + Copy your Docker build output and paste it below for analysis + +
+
+
+ +