test-lah 1.0.2 → 1.0.4
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/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-build-manifest.json +28 -21
- package/.next/standalone/.next/app-path-routes-manifest.json +2 -1
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/prerender-manifest.json +21 -21
- package/.next/standalone/.next/server/app/(dashboard)/integrations/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/integrations/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/integrations/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[projectId]/page.js +6 -3
- package/.next/standalone/.next/server/app/(dashboard)/projects/[projectId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[projectId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[projectId]/summary/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[projectId]/summary/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[projectId]/summary/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
- package/.next/standalone/.next/server/app/api/e2e/route.js +131 -0
- package/.next/standalone/.next/server/app/api/e2e/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/e2e/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/generate/route.js +3 -3
- package/.next/standalone/.next/server/app/api/generate/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/generate/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/llm/encrypt/route.js +1 -1
- package/.next/standalone/.next/server/app/api/llm/encrypt/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/llm/encrypt/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/llm/test/route.js +3 -3
- package/.next/standalone/.next/server/app/api/llm/test/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/llm/test/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/weather/route.js +1 -1
- package/.next/standalone/.next/server/app/api/weather/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/weather/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/favicon.ico/route.js +1 -1
- package/.next/standalone/.next/server/app/favicon.ico/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +2 -2
- package/.next/standalone/.next/server/app/integrations.html +1 -1
- package/.next/standalone/.next/server/app/integrations.rsc +4 -4
- package/.next/standalone/.next/server/app/login/page.js +1 -1
- package/.next/standalone/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login.html +1 -1
- package/.next/standalone/.next/server/app/login.rsc +2 -2
- package/.next/standalone/.next/server/app/page.js +1 -1
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects.html +1 -1
- package/.next/standalone/.next/server/app/projects.rsc +4 -4
- package/.next/standalone/.next/server/app-paths-manifest.json +2 -1
- package/.next/standalone/.next/server/chunks/615.js +2 -2
- package/.next/standalone/.next/server/chunks/692.js +1 -1
- package/.next/standalone/.next/server/chunks/{984.js → 736.js} +4 -4
- package/.next/standalone/.next/server/chunks/824.js +2 -2
- package/.next/standalone/.next/server/chunks/{174.js → 845.js} +3 -3
- package/.next/standalone/.next/server/chunks/{331.js → 873.js} +3 -3
- package/.next/standalone/.next/server/chunks/917.js +1 -0
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/9OtwPzpy1ovRWzffCh95h/_buildManifest.js +1 -0
- package/.next/standalone/.next/static/chunks/246-1673b37cc8edb269.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/integrations/page-ef2f1f3c1d497f2a.js +1 -0
- package/.next/{static/chunks/app/(dashboard)/layout-897f5e42d6866a6e.js → standalone/.next/static/chunks/app/(dashboard)/layout-69e4ea7abe9faff3.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[projectId]/page-500a663fdab52791.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[projectId]/summary/{page-524594daf0494836.js → page-b69fc155f1796e19.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/{page-f3e1d8b28a760b83.js → page-11a49918142004f5.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/api/e2e/route-ccff81cd0a5704f2.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/generate/route-ccff81cd0a5704f2.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/llm/encrypt/route-ccff81cd0a5704f2.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/llm/test/route-ccff81cd0a5704f2.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/weather/route-ccff81cd0a5704f2.js +1 -0
- package/.next/standalone/.next/static/css/0ecf0abc0513341e.css +3 -0
- package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +1 -0
- package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
- package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +42 -0
- package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +30 -0
- package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/LICENSE +191 -0
- package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
- package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/package.json +46 -0
- package/.next/standalone/node_modules/playwright/index.js +17 -0
- package/.next/standalone/node_modules/playwright/index.mjs +18 -0
- package/.next/standalone/node_modules/playwright/package.json +61 -0
- package/.next/standalone/node_modules/playwright-core/browsers.json +81 -0
- package/.next/standalone/node_modules/playwright-core/index.js +32 -0
- package/.next/standalone/node_modules/playwright-core/index.mjs +28 -0
- package/.next/standalone/node_modules/playwright-core/lib/coreBundle.js +69799 -0
- package/.next/standalone/node_modules/playwright-core/lib/utilsBundle.js +85418 -0
- package/.next/standalone/node_modules/playwright-core/lib/xdg-open +1066 -0
- package/.next/standalone/node_modules/playwright-core/package.json +34 -0
- package/.next/standalone/package.json +5 -2
- package/.next/static/9OtwPzpy1ovRWzffCh95h/_buildManifest.js +1 -0
- package/.next/static/chunks/246-1673b37cc8edb269.js +1 -0
- package/.next/static/chunks/app/(dashboard)/integrations/page-ef2f1f3c1d497f2a.js +1 -0
- package/.next/{standalone/.next/static/chunks/app/(dashboard)/layout-897f5e42d6866a6e.js → static/chunks/app/(dashboard)/layout-69e4ea7abe9faff3.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/projects/[projectId]/page-500a663fdab52791.js +1 -0
- package/.next/static/chunks/app/(dashboard)/projects/[projectId]/summary/{page-524594daf0494836.js → page-b69fc155f1796e19.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/projects/{page-f3e1d8b28a760b83.js → page-11a49918142004f5.js} +1 -1
- package/.next/static/chunks/app/api/e2e/route-ccff81cd0a5704f2.js +1 -0
- package/.next/static/chunks/app/api/generate/route-ccff81cd0a5704f2.js +1 -0
- package/.next/static/chunks/app/api/llm/encrypt/route-ccff81cd0a5704f2.js +1 -0
- package/.next/static/chunks/app/api/llm/test/route-ccff81cd0a5704f2.js +1 -0
- package/.next/static/chunks/app/api/weather/route-ccff81cd0a5704f2.js +1 -0
- package/.next/static/css/0ecf0abc0513341e.css +3 -0
- package/package.json +4 -1
- package/.next/standalone/.next/static/3YcKKljN8y2beg2wtB7D2/_buildManifest.js +0 -1
- package/.next/standalone/.next/static/chunks/882-cc9789441250ca9d.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/integrations/page-bb73e3391f40493c.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[projectId]/page-d04f72d976710ff8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/generate/route-1bebaa46eebbcd06.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/llm/encrypt/route-1bebaa46eebbcd06.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/llm/test/route-1bebaa46eebbcd06.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/weather/route-1bebaa46eebbcd06.js +0 -1
- package/.next/standalone/.next/static/css/148903621a1952c4.css +0 -3
- package/.next/static/3YcKKljN8y2beg2wtB7D2/_buildManifest.js +0 -1
- package/.next/static/chunks/882-cc9789441250ca9d.js +0 -1
- package/.next/static/chunks/app/(dashboard)/integrations/page-bb73e3391f40493c.js +0 -1
- package/.next/static/chunks/app/(dashboard)/projects/[projectId]/page-d04f72d976710ff8.js +0 -1
- package/.next/static/chunks/app/api/generate/route-1bebaa46eebbcd06.js +0 -1
- package/.next/static/chunks/app/api/llm/encrypt/route-1bebaa46eebbcd06.js +0 -1
- package/.next/static/chunks/app/api/llm/test/route-1bebaa46eebbcd06.js +0 -1
- package/.next/static/chunks/app/api/weather/route-1bebaa46eebbcd06.js +0 -1
- package/.next/static/css/148903621a1952c4.css +0 -3
- /package/.next/standalone/.next/static/{3YcKKljN8y2beg2wtB7D2 → 9OtwPzpy1ovRWzffCh95h}/_ssgManifest.js +0 -0
- /package/.next/static/{3YcKKljN8y2beg2wtB7D2 → 9OtwPzpy1ovRWzffCh95h}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/_not-found/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"622":{"*":{"id":"82146","name":"*","chunks":[],"async":false}},"1343":{"*":{"id":"17638","name":"*","chunks":[],"async":false}},"1959":{"*":{"id":"31603","name":"*","chunks":[],"async":false}},"
|
|
1
|
+
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/_not-found/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"622":{"*":{"id":"82146","name":"*","chunks":[],"async":false}},"1343":{"*":{"id":"17638","name":"*","chunks":[],"async":false}},"1959":{"*":{"id":"31603","name":"*","chunks":[],"async":false}},"3542":{"*":{"id":"62003","name":"*","chunks":[],"async":false}},"3886":{"*":{"id":"75170","name":"*","chunks":[],"async":false}},"4071":{"*":{"id":"95183","name":"*","chunks":[],"async":false}},"4431":{"*":{"id":"12263","name":"*","chunks":[],"async":false}},"5278":{"*":{"id":"78922","name":"*","chunks":[],"async":false}},"6061":{"*":{"id":"35473","name":"*","chunks":[],"async":false}},"6268":{"*":{"id":"27328","name":"*","chunks":[],"async":false}},"7150":{"*":{"id":"54160","name":"*","chunks":[],"async":false}},"7193":{"*":{"id":"1342","name":"*","chunks":[],"async":false}},"7989":{"*":{"id":"68495","name":"*","chunks":[],"async":false}},"8609":{"*":{"id":"22048","name":"*","chunks":[],"async":false}},"8924":{"*":{"id":"29234","name":"*","chunks":[],"async":false}},"9547":{"*":{"id":"68137","name":"*","chunks":[],"async":false}},"9766":{"*":{"id":"77526","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/client/components/builtin/global-error.js":{"id":7150,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":7150,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/client/components/client-page.js":{"id":1959,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/esm/client/components/client-page.js":{"id":1959,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/client/components/client-segment.js":{"id":7989,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/esm/client/components/client-segment.js":{"id":7989,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":3886,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":3886,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/client/components/layout-router.js":{"id":9766,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/esm/client/components/layout-router.js":{"id":9766,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/client/components/metadata/async-metadata.js":{"id":5278,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/esm/client/components/metadata/async-metadata.js":{"id":5278,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/client/components/render-from-template-context.js":{"id":8924,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":8924,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/lib/framework/boundary-components.js":{"id":4431,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":4431,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":622,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":622,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/font/google/target.css?{\"path\":\"src/app/layout.tsx\",\"import\":\"Inter\",\"arguments\":[{\"subsets\":[\"latin\"],\"variable\":\"--font-inter\"}],\"variableName\":\"inter\"}":{"id":3037,"name":"*","chunks":["177","static/chunks/app/layout-3ad98a7069d70b7b.js"],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/src/app/globals.css":{"id":3673,"name":"*","chunks":["177","static/chunks/app/layout-3ad98a7069d70b7b.js"],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/src/components/shared/Providers.tsx":{"id":6061,"name":"*","chunks":["177","static/chunks/app/layout-3ad98a7069d70b7b.js"],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/src/app/login/page.tsx":{"id":1343,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/src/app/page.tsx":{"id":9547,"name":"*","chunks":["974","static/chunks/app/page-a90eeaea3538ebf2.js"],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/src/app/(dashboard)/layout.tsx":{"id":8609,"name":"*","chunks":["619","static/chunks/619-ba102abea3e3d0e4.js","246","static/chunks/246-1673b37cc8edb269.js","305","static/chunks/app/(dashboard)/layout-69e4ea7abe9faff3.js"],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/src/app/(dashboard)/integrations/page.tsx":{"id":4071,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/src/app/(dashboard)/projects/[projectId]/page.tsx":{"id":3542,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/src/app/(dashboard)/projects/[projectId]/summary/page.tsx":{"id":6268,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/src/app/(dashboard)/projects/page.tsx":{"id":7193,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/sltr91025/code-repository/open-source/test-lah/src/":[],"/home/sltr91025/code-repository/open-source/test-lah/src/app/layout":[{"inlined":false,"path":"static/css/0ecf0abc0513341e.css"}],"/home/sltr91025/code-repository/open-source/test-lah/src/app/page":[],"/home/sltr91025/code-repository/open-source/test-lah/src/app/(dashboard)/layout":[],"/home/sltr91025/code-repository/open-source/test-lah/src/app/_not-found/page":[]},"rscModuleMapping":{"622":{"*":{"id":"51384","name":"*","chunks":[],"async":false}},"1343":{"*":{"id":"15109","name":"*","chunks":[],"async":false}},"1959":{"*":{"id":"23597","name":"*","chunks":[],"async":false}},"3542":{"*":{"id":"41009","name":"*","chunks":[],"async":false}},"3673":{"*":{"id":"61135","name":"*","chunks":[],"async":false}},"3886":{"*":{"id":"89748","name":"*","chunks":[],"async":false}},"4071":{"*":{"id":"70393","name":"*","chunks":[],"async":false}},"4431":{"*":{"id":"73041","name":"*","chunks":[],"async":false}},"5278":{"*":{"id":"7184","name":"*","chunks":[],"async":false}},"6061":{"*":{"id":"26239","name":"*","chunks":[],"async":false}},"6268":{"*":{"id":"12202","name":"*","chunks":[],"async":false}},"7150":{"*":{"id":"81170","name":"*","chunks":[],"async":false}},"7193":{"*":{"id":"40228","name":"*","chunks":[],"async":false}},"7989":{"*":{"id":"36893","name":"*","chunks":[],"async":false}},"8609":{"*":{"id":"97788","name":"*","chunks":[],"async":false}},"8924":{"*":{"id":"69576","name":"*","chunks":[],"async":false}},"9547":{"*":{"id":"60967","name":"*","chunks":[],"async":false}},"9766":{"*":{"id":"6060","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--9OtwPzpy1ovRWzffCh95h--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/0ecf0abc0513341e.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-879312f65eed9520.js"/><script src="/_next/static/chunks/4bd1b696-c023c6e3521b1417.js" async=""></script><script src="/_next/static/chunks/255-4f84124391a7dac4.js" async=""></script><script src="/_next/static/chunks/main-app-9c62372c526a8308.js" async=""></script><script src="/_next/static/chunks/app/layout-3ad98a7069d70b7b.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>Test Lah!</title><meta name="description" content="Test Lah! — Your Boss's Favorite QA Tool"/><link rel="icon" href="/favicon.ico" type="image/x-icon" sizes="350x350"/><link rel="icon" href="/favicon.ico"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_f367f3" style="font-family:Inter, system-ui, sans-serif"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><div class="fixed bottom-0 left-0 right-0 z-[600] transition-all duration-300 ease-out" style="opacity:0;transform:translateY(100%);pointer-events:none"><div class="h-1 w-full" style="background-color:var(--bg-secondary)"><div class="h-full transition-all duration-200 ease-out" style="width:0%;background-color:var(--accent);box-shadow:none"></div></div></div><script src="/_next/static/chunks/webpack-879312f65eed9520.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[6061,[\"177\",\"static/chunks/app/layout-3ad98a7069d70b7b.js\"],\"Providers\"]\n3:I[9766,[],\"\"]\n4:I[8924,[],\"\"]\n5:I[4431,[],\"OutletBoundary\"]\n7:I[5278,[],\"AsyncMetadataOutlet\"]\n9:I[4431,[],\"ViewportBoundary\"]\nb:I[4431,[],\"MetadataBoundary\"]\nc:\"$Sreact.suspense\"\ne:I[7150,[],\"\"]\n:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/0ecf0abc0513341e.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"9OtwPzpy1ovRWzffCh95h\",\"p\":\"\",\"c\":[\"\",\"_not-found\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/0ecf0abc0513341e.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_f367f3\",\"style\":{\"fontFamily\":\"Inter, system-ui, sans-serif\"},\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L5\",null,{\"children\":[\"$L6\",[\"$\",\"$L7\",null,{\"promise\":\"$@8\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L9\",null,{\"children\":\"$La\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$c\",null,{\"fallback\":null,\"children\":\"$Ld\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\n"])</script><script>self.__next_f.push([1,"f:I[622,[],\"IconMark\"]\n8:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Test Lah!\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Test Lah! — Your Boss's Favorite QA Tool\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"type\":\"image/x-icon\",\"sizes\":\"350x350\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"$Lf\",\"4\",{}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"d:\"$8:metadata\"\n"])</script></body></html>
|
|
@@ -9,8 +9,8 @@ b:I[4431,[],"MetadataBoundary"]
|
|
|
9
9
|
c:"$Sreact.suspense"
|
|
10
10
|
e:I[7150,[],""]
|
|
11
11
|
:HL["/_next/static/media/e4af272ccee01ff0-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
12
|
-
:HL["/_next/static/css/
|
|
13
|
-
0:{"P":null,"b":"
|
|
12
|
+
:HL["/_next/static/css/0ecf0abc0513341e.css","style"]
|
|
13
|
+
0:{"P":null,"b":"9OtwPzpy1ovRWzffCh95h","p":"","c":["","_not-found"],"i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/0ecf0abc0513341e.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_f367f3","style":{"fontFamily":"Inter, system-ui, sans-serif"},"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["/_not-found",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],null,["$","$L5",null,{"children":["$L6",["$","$L7",null,{"promise":"$@8"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],[["$","$L9",null,{"children":"$La"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$Lb",null,{"children":["$","div",null,{"hidden":true,"children":["$","$c",null,{"fallback":null,"children":"$Ld"}]}]}]]}],false]],"m":"$undefined","G":["$e",[]],"s":false,"S":true}
|
|
14
14
|
a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
15
15
|
6:null
|
|
16
16
|
f:I[622,[],"IconMark"]
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
(()=>{var a={};a.id=380,a.ids=[380],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3421:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(71237),e=c(55088),f=c(17679);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},6552:(a,b,c)=>{"use strict";c.d(b,{Z:()=>l,createModel:()=>k,r:()=>m});var d=c(2112),e=c(70),f=c(28670),g=c(44491),h=c(21520),i=c(59256);let j=i.Ik({title:i.Yj().describe("Short descriptive title of the test case"),steps:i.Yj().describe("Numbered test steps separated by newlines"),expected:i.Yj().describe("Expected result of the test")});function k(a){let{def:b,apiKey:c,model:d,baseURL:i}=a;if("native"===b.type)switch(b.sdkProvider){case"openai":return(0,e.ry)({apiKey:c})(d||b.defaultModel);case"google":return(0,f.sw)({apiKey:c})(d||b.defaultModel);case"anthropic":return(0,g.nM)({apiKey:c})(d||b.defaultModel);case"groq":return(0,h.cn)({apiKey:c})(d||b.defaultModel);default:throw Error(`Unknown native SDK provider: ${b.sdkProvider}`)}let j=i||b.baseURL;if(!j)throw Error(`Base URL is required for OpenAI-compatible provider "${b.id}"`);return(0,e.ry)({apiKey:c,baseURL:j,name:b.id})(d||b.defaultModel)}async function l(a,b,c,e="en",f){let g=k(a),h=function(a="en"){return`You are a QA engineer. Generate test cases for the given feature.
|
|
2
|
+
${"id"===a?"Write ALL test case content (title, steps, expected result) in Bahasa Indonesia.":"Write ALL test case content (title, steps, expected result) in English."}
|
|
3
|
+
|
|
4
|
+
RULES FOR STEPS:
|
|
5
|
+
- Each test case's steps must be specific to THAT scenario. Do NOT repeat generic navigation steps.
|
|
6
|
+
- Assume the user is already on the relevant page unless the test specifically requires navigation.
|
|
7
|
+
- Each step should describe a UNIQUE action. If two test cases share setup, mention it only in the first step of that test.
|
|
8
|
+
- Be concise: 2-5 steps per test case.
|
|
9
|
+
- Focus on the action being tested, not boilerplate.
|
|
10
|
+
|
|
11
|
+
Generate 3-8 test cases covering happy path, edge cases, and error scenarios.`}(e),i=[{type:"text",text:`Feature: ${b}
|
|
12
|
+
|
|
13
|
+
Description / DoD / Acceptance Criteria:
|
|
14
|
+
${c||"(no additional description provided)"}${f?.length?"\n\nThe user has attached screenshot(s) of the UI/feature. Use them as additional context to write more accurate and specific test cases.":""}`}];if(f?.length)for(let a of f)i.push({type:"image",image:a});let{output:m}=await (0,d.generateText)({model:g,output:d.k7.array({element:j}),system:h,messages:[{role:"user",content:i}],temperature:.4});return m}async function m(a){try{let b=k(a);return await (0,d.generateText)({model:b,prompt:'Say "ok" in one word.',maxOutputTokens:10}),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:"Connection failed"}}}},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},13026:(a,b,c)=>{"use strict";c.d(b,{PW:()=>j,i0:()=>k,jT:()=>n,vm:()=>i});var d=c(75879);c(68633);var e=c(2112),f=c(6552),g=c(86006);function h(a){let b=(0,g.getProviderDef)(a.provider);return(0,f.createModel)({def:b,apiKey:a.apiKey,model:a.model,baseURL:a.baseURL})}async function i(a,b){let c=h(b),d=`You are an expert E2E test engineer. Generate Playwright test code for the following test case.
|
|
15
|
+
|
|
16
|
+
Test Case Title: ${a.title}
|
|
17
|
+
Test Steps:
|
|
18
|
+
${a.steps}
|
|
19
|
+
Expected Result:
|
|
20
|
+
${a.expected}
|
|
21
|
+
|
|
22
|
+
Requirements:
|
|
23
|
+
1. Use @playwright/test imports
|
|
24
|
+
2. Use test.describe and test functions
|
|
25
|
+
3. Add proper assertions
|
|
26
|
+
4. Use data-testid, role, or text selectors when possible
|
|
27
|
+
5. Add comments for each step
|
|
28
|
+
6. Handle waits properly (no hard-coded sleeps)
|
|
29
|
+
7. The test should be self-contained and robust
|
|
30
|
+
|
|
31
|
+
Return ONLY the TypeScript code, no explanations.`,{text:f}=await (0,e.generateText)({model:c,messages:[{role:"user",content:d}],maxOutputTokens:2e3}),g=f.match(/```(?:typescript|ts)?\n([\s\S]*?)```/);return g?g[1].trim():f.trim()}async function j(a,b,c,d){let f=h(d),g=`You are an expert QA engineer analyzing an E2E test failure.
|
|
32
|
+
|
|
33
|
+
Test Case: ${a.title}
|
|
34
|
+
Steps: ${a.steps}
|
|
35
|
+
Expected: ${a.expected}
|
|
36
|
+
Error: ${b}
|
|
37
|
+
|
|
38
|
+
Provide a brief analysis:
|
|
39
|
+
1. Root cause (likely)
|
|
40
|
+
2. Whether this is a test issue or application bug
|
|
41
|
+
3. Suggested fix or next steps`,{text:i}=await (0,e.generateText)({model:f,messages:[{role:"user",content:g}],maxOutputTokens:500});return i}async function k(a,b,d){let e=Date.now(),f={testCaseId:a.id,status:"pass",duration:0,steps:[]};try{let{chromium:g,firefox:h,webkit:i}=await Promise.resolve().then(c.bind(c,83237)),k="edge"===b.browser?"chromium":b.browser||"chromium",n={headless:b.headless??!0};"edge"===b.browser&&(n.channel="msedge");let o=await (({chromium:g,firefox:h,webkit:i})[k]||g).launch(n),p=await o.newContext(),q=await p.newPage(),r=a.steps.split("\n").filter(a=>a.trim()),s=[],t="";try{for(let a of(await q.goto(b.baseUrl,{timeout:b.timeout??3e4}),r)){if(!(t=a.replace(/^\d+[\.\)]\s*/,"").trim()))continue;let c={step:t,status:"pass"};try{await l(q,t,d),c.status="pass"}catch(a){c.status="fail",c.error=a instanceof Error?a.message:String(a),b.screenshotOnFailure&&(c.screenshot=(await q.screenshot({type:"png"})).toString("base64"))}if(s.push(c),"fail"===c.status){f.status="fail";break}}if("pass"===f.status&&a.expected)try{await m(q,a.expected,d),f.status="pass"}catch(a){f.status="fail",f.error=a instanceof Error?a.message:String(a),b.screenshotOnFailure&&(f.screenshot=(await q.screenshot({type:"png"})).toString("base64"))}}catch(a){f.status="error",f.error=a instanceof Error?a.message:String(a)}await o.close(),f.steps=s,f.duration=Date.now()-e,("fail"===f.status||"error"===f.status)&&(f.aiAnalysis=await j(a,f.error||"Unknown error",f.screenshot,d))}catch(a){f.status="error",f.error=a instanceof Error?a.message:String(a),f.duration=Date.now()-e}return f}async function l(a,b,c){let d,f=h(c),g=a.url(),i=await a.title(),j=`You are executing an E2E test step. Based on the step description, determine what Playwright action to perform.
|
|
42
|
+
|
|
43
|
+
Current URL: ${g}
|
|
44
|
+
Page Title: ${i}
|
|
45
|
+
Step: "${b}"
|
|
46
|
+
|
|
47
|
+
Respond with ONLY a JSON object (no code block) in this format:
|
|
48
|
+
{
|
|
49
|
+
"action": "click|fill|navigate|wait|assert|select|check|press",
|
|
50
|
+
"selector": "CSS selector or Playwright locator",
|
|
51
|
+
"value": "value for fill/select actions (optional)",
|
|
52
|
+
"description": "brief description of what this does"
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
Use robust selectors: [data-testid], role=, text=, or CSS. Avoid fragile selectors.`,{text:k}=await (0,e.generateText)({model:f,messages:[{role:"user",content:j}],maxOutputTokens:200});try{let a=k.match(/\{[\s\S]*\}/);d=JSON.parse(a?a[0]:k)}catch{throw Error(`Failed to parse AI response for step: ${b}`)}try{switch(d.action){case"click":await a.locator(d.selector).click({timeout:1e4});break;case"fill":await a.locator(d.selector).fill(d.value||"",{timeout:1e4});break;case"navigate":await a.goto(d.selector,{timeout:1e4});break;case"wait":d.selector?await a.locator(d.selector).waitFor({timeout:1e4}):await a.waitForTimeout(parseInt(d.value)||1e3);break;case"assert":if(!await a.locator(d.selector).isVisible({timeout:1e4}))throw Error(`Element ${d.selector} is not visible`);break;case"select":await a.locator(d.selector).selectOption(d.value||"",{timeout:1e4});break;case"check":await a.locator(d.selector).check({timeout:1e4});break;case"press":await a.keyboard.press(d.value||"Enter");break;default:await a.getByText(b,{exact:!1}).click({timeout:1e4})}}catch(a){throw Error(`Failed to execute step "${b}": ${a instanceof Error?a.message:String(a)}`)}}async function m(a,b,c){let d,f=h(c),g=await a.textContent("body"),i=a.url(),j=`Verify if the expected result is met based on the current page state.
|
|
56
|
+
|
|
57
|
+
Expected Result: "${b}"
|
|
58
|
+
Current URL: ${i}
|
|
59
|
+
Page Content (truncated): ${g?.substring(0,2e3)}
|
|
60
|
+
|
|
61
|
+
Respond with ONLY a JSON object (no code block):
|
|
62
|
+
{
|
|
63
|
+
"passed": true/false,
|
|
64
|
+
"reason": "brief explanation"
|
|
65
|
+
}`,{text:k}=await (0,e.generateText)({model:f,messages:[{role:"user",content:j}],maxOutputTokens:200});try{let a=k.match(/\{[\s\S]*\}/);d=JSON.parse(a?a[0]:k)}catch{throw Error("Failed to parse verification result")}if(!d.passed)throw Error(`Expected result not met: ${d.reason}`)}async function n(a,b,c,d){let e=[];for(let f of a){let a=await k(f,b,c);e.push(a),d?.(f.id,a)}return e}(0,c(51669).D)([i,j,k,n]),(0,d.A)(i,"60a3ea029916e378c2d86e693740e24a303aaf50d6",null),(0,d.A)(j,"78a6afe4f65d149677061ced217792707b27de1558",null),(0,d.A)(k,"70ec37527f854489dd782643d7896ddea22d39a1eb",null),(0,d.A)(n,"785ce821970b970b41c6827cb01aa6f624cf5d6466",null)},15995:(a,b,c)=>{"use strict";c.d(b,{Yc:()=>h,w:()=>g});var d=c(55511);let e="aes-256-gcm";function f(){let a=process.env.ENCRYPTION_KEY;if(!a)throw Error("ENCRYPTION_KEY environment variable is not set");return(0,d.createHash)("sha256").update(a).digest()}function g(a){let b=f(),c=(0,d.randomBytes)(12),g=(0,d.createCipheriv)(e,b,c,{authTagLength:16}),h=Buffer.concat([g.update(a,"utf8"),g.final()]),i=g.getAuthTag();return"enc:"+Buffer.concat([c,i,h]).toString("base64")}function h(a){if(!a.startsWith("enc:"))return a;let b=f(),c=Buffer.from(a.slice(4),"base64"),g=c.subarray(0,12),h=c.subarray(12,28),i=c.subarray(28),j=(0,d.createDecipheriv)(e,b,g,{authTagLength:16});return j.setAuthTag(h),Buffer.concat([j.update(i),j.final()]).toString("utf8")}},21820:a=>{"use strict";a.exports=require("os")},28354:a=>{"use strict";a.exports=require("util")},29021:a=>{"use strict";a.exports=require("fs")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33873:a=>{"use strict";a.exports=require("path")},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},51669:(a,b)=>{"use strict";function c(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
|
|
66
|
+
Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(b,"D",{enumerable:!0,get:function(){return c}})},55344:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>K,patchFetch:()=>J,routeModule:()=>F,serverHooks:()=>I,workAsyncStorage:()=>G,workUnitAsyncStorage:()=>H});var d={};c.r(d),c.d(d,{POST:()=>w});var e=c(95736),f=c(9117),g=c(4044),h=c(39326),i=c(32324),j=c(261),k=c(54290),l=c(85328),m=c(38928),n=c(46595),o=c(3421),p=c(17679),q=c(41681),r=c(63446),s=c(86439),t=c(51356),u=c(13026),v=c(15995);async function w(a){let b=await a.json(),d=a.signal,{testCases:e,baseUrl:f,browser:g,headless:h,timeout:i,llmConfig:j,generateOnly:k}=b;if(!e?.length)return new Response(JSON.stringify({error:"No test cases provided"}),{status:400});if(!j?.apiKey)return new Response(JSON.stringify({error:"LLM API key is required"}),{status:400});let l=await (0,v.Yc)(j.apiKey),m={...j,apiKey:l};if(k){let a={};for(let b of e)a[b.id]=x(b,f||"http://localhost:3000");return Response.json({scripts:a})}if(!f)return new Response(JSON.stringify({error:"Base URL is required"}),{status:400});let n={baseUrl:f,browser:g||"chromium",headless:h??!0,timeout:i??3e4,screenshotOnFailure:!0},o=new TextEncoder,p=new ReadableStream({async start(a){let b=!1,f=c=>{if(!b)try{a.enqueue(o.encode(`data: ${JSON.stringify(c)}
|
|
67
|
+
|
|
68
|
+
`))}catch{}};d.addEventListener("abort",()=>{b=!0,f({type:"aborted",message:"Test run stopped by user"});try{a.close()}catch{}});try{f({type:"status",message:"Initializing browser..."});let{chromium:a,firefox:g,webkit:h}=await Promise.resolve().then(c.bind(c,83237)),i="edge"===n.browser?"chromium":n.browser||"chromium",j={headless:n.headless??!0};"edge"===n.browser&&(j.channel="msedge"),f({type:"status",message:`Launching ${i} browser...`});let k=await (({chromium:a,firefox:g,webkit:h})[i]||a).launch(j),l=await k.newContext({viewport:{width:1280,height:720},userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"});f({type:"status",message:"Browser ready. Starting tests..."});let o=[];for(let a=0;a<e.length&&!b&&!d.aborted;a++){let c=e[a],g=Date.now(),h=x(c,n.baseUrl);f({type:"testStart",index:a+1,total:e.length,testCaseId:c.id,title:c.title,code:c.code,script:h});let i={testCaseId:c.id,status:"pass",duration:0,steps:[]},j=await l.newPage(),k=async a=>{try{let b=await j.screenshot({type:"jpeg",quality:60});f({type:"screenshot",image:b.toString("base64"),label:a,testCaseId:c.id})}catch{}};try{f({type:"step",message:`Navigating to ${n.baseUrl}...`}),await j.goto(n.baseUrl,{timeout:n.timeout??3e4,waitUntil:"domcontentloaded"}),f({type:"step",message:"Page loaded successfully"}),await j.waitForTimeout(1e3),await k("Page loaded");let a=await z(j),e=c.steps.split("\n").filter(a=>a.trim());for(let c=0;c<e.length&&!b&&!d.aborted;c++){let b=e[c].replace(/^\d+[\.\)]\s*/,"").trim();if(!b)continue;if(f({type:"step",message:`Step ${c+1}/${e.length}: ${b}`}),y(b)){f({type:"stepResult",status:"pass",message:"Skipped (precondition/assumption)"}),i.steps.push({step:b,status:"pass"});continue}let d={step:b,status:"pass"};try{f({type:"aiThinking",message:"AI analyzing step..."});let c=await B(m,b,j.url(),await j.title(),a);c.skip?f({type:"stepResult",status:"pass",message:`Skipped: ${c.description}`}):(f({type:"aiAction",message:`AI suggests: ${c.action} on "${c.selector}"${c.value?` with value "${c.value}"`:""}`,action:c}),await E(j,c,b,n.timeout??1e4),await k(`After: ${b.substring(0,40)}`),f({type:"stepResult",status:"pass",message:"Step completed"})),d.status="pass"}catch(c){await k(`Failed: ${b.substring(0,40)}`),f({type:"healing",message:"Step failed. Attempting to heal..."}),await C(j,m,b,c,a,f)?(await k(`Healed: ${b.substring(0,40)}`),f({type:"healed",message:"Step healed successfully!"}),d.status="pass"):(d.status="fail",d.error=c instanceof Error?c.message:String(c),f({type:"stepResult",status:"fail",message:`Step failed: ${d.error}`})),n.screenshotOnFailure&&"fail"===d.status&&(d.screenshot=(await j.screenshot({type:"png"})).toString("base64"))}if(i.steps.push(d),"fail"===d.status){i.status="fail";break}try{let b=await z(j);Object.assign(a,b)}catch{}}if("pass"===i.status&&c.expected){f({type:"step",message:"Verifying expected result..."});try{let a=await j.textContent("body"),b=await D(m,c.expected,a||"",j.url());b.passed?f({type:"stepResult",status:"pass",message:"Expected result verified"}):(i.status="fail",i.error=`Expected result not met: ${b.reason}`,f({type:"stepResult",status:"fail",message:i.error}))}catch(a){i.status="fail",i.error=a instanceof Error?a.message:String(a),f({type:"stepResult",status:"fail",message:`Verification error: ${i.error}`})}}}catch(a){i.status="error",i.error=a instanceof Error?a.message:String(a),f({type:"error",message:`Execution error: ${i.error}`})}if(await j.close(),i.duration=Date.now()-g,"fail"===i.status||"error"===i.status){f({type:"aiThinking",message:"AI analyzing failure..."});try{i.aiAnalysis=await (0,u.PW)(c,i.error||"Unknown error",i.screenshot,m),f({type:"aiAnalysis",message:i.aiAnalysis})}catch{}}o.push(i),f({type:"testComplete",index:a+1,total:e.length,testCaseId:c.id,status:i.status,duration:i.duration,result:i,script:h})}await k.close();let p=function(a,b){let c=b.filter(a=>"fail"===a.status||"error"===a.status);if(0===c.length)return"All tests passed! No healing needed.";let d="## Test Healing Report\n\n";for(let b of(d+=`${c.length} test(s) failed.
|
|
69
|
+
|
|
70
|
+
`,c)){let c=a.find(a=>a.id===b.testCaseId);c&&(d+=`### ${c.code}: ${c.title}
|
|
71
|
+
**Status:** ${b.status.toUpperCase()}
|
|
72
|
+
**Error:** ${b.error||"Unknown"}
|
|
73
|
+
|
|
74
|
+
**Suggested Fixes:**
|
|
75
|
+
1. Add data-testid attributes to elements
|
|
76
|
+
2. Convert assumption steps to explicit navigation
|
|
77
|
+
3. Add explicit waits for dynamic content
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
`)}return d}(e,o);f({type:"healingReport",report:p}),f({type:"complete",results:o})}catch(a){f({type:"error",message:a instanceof Error?a.message:"Unknown error"})}a.close()}});return new Response(p,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}function x(a,b){let c=a.steps.split("\n").filter(a=>a.trim()).map((a,b)=>{let c=a.replace(/^\d+[\.\)]\s*/,"").trim();return y(c)?` // Precondition: ${c}`:` // Step ${b+1}: ${c}
|
|
82
|
+
// TODO: Implement with proper selectors`}).join("\n");return`import { test, expect } from '@playwright/test';
|
|
83
|
+
|
|
84
|
+
test.describe('${a.code}: ${a.title.replace(/'/g,"\\'")}', () => {
|
|
85
|
+
test.beforeEach(async ({ page }) => {
|
|
86
|
+
await page.goto('${b}');
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
test('should execute test case', async ({ page }) => {
|
|
90
|
+
${c}
|
|
91
|
+
|
|
92
|
+
// Expected: ${a.expected||"Verify expected result"}
|
|
93
|
+
// TODO: Add assertion
|
|
94
|
+
});
|
|
95
|
+
});`}function y(a){return[/^assume\b/i,/^given that\b/i,/^given the user\b/i,/^prerequisite/i,/^precondition/i,/^user is already/i,/^user has already/i,/^ensure that.*is/i,/^make sure.*is/i,/^suppose\b/i].some(b=>b.test(a.trim()))}async function z(a){return a.evaluate(()=>({url:window.location.href,title:document.title,visibleElements:Array.from(document.querySelectorAll('a, button, input, select, textarea, [role="button"], [role="link"], [data-testid], h1, h2, h3, nav, header, main, footer')).slice(0,50).map(a=>({tag:a.tagName.toLowerCase(),text:a.textContent?.trim().substring(0,50)||"",id:a.id||"",testId:a.getAttribute("data-testid")||"",className:a.className?.toString().substring(0,50)||"",href:a.href||"",type:a.type||"",placeholder:a.placeholder||"",role:a.getAttribute("role")||"",ariaLabel:a.getAttribute("aria-label")||""})),headings:Array.from(document.querySelectorAll("h1, h2, h3")).map(a=>a.textContent?.trim()).filter(Boolean).slice(0,10)}))}function A(a){let b=a.trim();b.startsWith("```")&&(b=b.replace(/^```(?:json)?\n?/,"").replace(/\n?```$/,""));let c=b.match(/\{[^{}]*\}/);if(!c)throw Error("No JSON found");return JSON.parse(c[0])}async function B(a,b,d,e,f,g=0){let{generateText:h}=await Promise.resolve().then(c.bind(c,2112)),{createModel:i}=await Promise.resolve().then(c.bind(c,6552)),{getProviderDef:j}=await Promise.resolve().then(c.bind(c,86006)),k=i({def:j(a.provider),apiKey:a.apiKey,model:a.model,baseURL:a.baseURL}),l=/navigate|go to|open|visit|browse to/i.test(b)?"navigate":/verify|check|assert|confirm|ensure|presence|visible|display|should be|should show/i.test(b)?"verify":/click|tap|press|select|choose/i.test(b)?"click":/fill|enter|type|input|write/i.test(b)?"fill":/hover|mouse over/i.test(b)?"hover":/scroll|swipe/i.test(b)?"scroll":/wait|pause|delay/i.test(b)?"wait":"general",m=(f.visibleElements?.slice(0,40)||[]).map((a,b)=>{let c=[];return a.testId&&c.push(`data-testid="${a.testId}"`),a.id&&c.push(`id="${a.id}"`),a.role&&c.push(`role="${a.role}"`),a.ariaLabel&&c.push(`aria-label="${a.ariaLabel}"`),a.placeholder&&c.push(`placeholder="${a.placeholder}"`),a.href&&c.push(`href="${a.href}"`),`[${b}] <${a.tag} ${c.join(" ")}>${a.text?` "${a.text}"`:""}`}).join("\n")||"No elements found",n="";switch(l){case"navigate":n='NAVIGATION: Extract URL from step. If already on that page, use action "wait" with value "500". Put URL in "value" field.';break;case"verify":n='VERIFY: Find an element that should be visible. Use action "assert" with a specific selector. Check the element list above.';break;case"click":n="CLICK: Find the target element in the list. Use the most specific selector available.";break;case"fill":n='FILL: Find the input field. Put the text to type in "value" field.'}let o=`Execute this E2E test step.
|
|
96
|
+
|
|
97
|
+
PAGE: ${d} (${e})
|
|
98
|
+
HEADINGS: ${f.headings?.join(", ")||"None"}
|
|
99
|
+
|
|
100
|
+
ELEMENTS:
|
|
101
|
+
${m}
|
|
102
|
+
|
|
103
|
+
STEP: "${b}"
|
|
104
|
+
TYPE: ${l}
|
|
105
|
+
|
|
106
|
+
${n}
|
|
107
|
+
|
|
108
|
+
RULES:
|
|
109
|
+
- Use specific selectors: data-testid, id, aria-label
|
|
110
|
+
- NEVER return empty selector
|
|
111
|
+
- For navigate, put full URL in "value"
|
|
112
|
+
- If step cannot be automated, set skip=true
|
|
113
|
+
|
|
114
|
+
Reply with ONLY this JSON (no markdown):
|
|
115
|
+
{"action":"click|fill|navigate|wait|assert|hover","selector":"...","value":"...","description":"...","skip":false}`;try{let{text:a}=await h({model:k,messages:[{role:"user",content:o}],maxOutputTokens:300}),c=A(a);if(!c.selector||""===c.selector)if("navigate"===l){let a=b.match(/https?:\/\/[^\s]+/);c.selector=a?a[0]:d,c.value=c.selector,c.action="navigate"}else"verify"===l?(c.selector="body",c.action="assert"):c.selector="body";return["click","fill","navigate","wait","assert","select","check","press","hover","scroll","skip"].includes(c.action)||(c.action="verify"===l?"assert":"wait"),c}catch(c){if(g<2)return await new Promise(a=>setTimeout(a,1e3*(g+1))),B(a,b,d,e,f,g+1);if("navigate"===l){let a=b.match(/https?:\/\/[^\s]+/);return{action:"navigate",selector:a?a[0]:d,value:d,description:b,skip:!1}}if("verify"===l)return{action:"assert",selector:"body",description:b,skip:!1};return{action:"wait",selector:"body",value:"500",description:b,skip:!1}}}async function C(a,b,d,e,f,g){let{generateText:h}=await Promise.resolve().then(c.bind(c,2112)),{createModel:i}=await Promise.resolve().then(c.bind(c,6552)),{getProviderDef:j}=await Promise.resolve().then(c.bind(c,86006)),k=i({def:j(b.provider),apiKey:b.apiKey,model:b.model,baseURL:b.baseURL}),l=f.visibleElements?.slice(0,20).map(a=>`${a.tag}[${a.testId||a.id||a.text?.substring(0,20)}]`).join(", ")||"Unknown",m=`Fix failed E2E step.
|
|
116
|
+
|
|
117
|
+
STEP: "${d}"
|
|
118
|
+
ERROR: ${e.message}
|
|
119
|
+
ELEMENTS: ${l}
|
|
120
|
+
|
|
121
|
+
Reply with ONLY this JSON:
|
|
122
|
+
{"shouldRetry":true,"action":"click|assert|wait|skip","selector":"...","value":"...","reason":"..."}
|
|
123
|
+
|
|
124
|
+
If cannot fix: {"shouldRetry":false}`;try{let{text:b}=await h({model:k,messages:[{role:"user",content:m}],maxOutputTokens:200}),c=A(b);if(!c.shouldRetry)return!1;switch(g({type:"healingAction",message:`Trying: ${c.action} on "${c.selector}" - ${c.reason}`}),c.action){case"click":return await a.locator(c.selector).click({timeout:5e3}),!0;case"fill":return await a.locator(c.selector).fill(c.value||"",{timeout:5e3}),!0;case"assert":return await a.locator(c.selector).waitFor({state:"visible",timeout:5e3}),!0;case"wait":return await a.waitForTimeout(parseInt(c.value)||2e3),!0;case"skip":return!0;default:return!1}}catch{return!1}}async function D(a,b,d,e){let{generateText:f}=await Promise.resolve().then(c.bind(c,2112)),{createModel:g}=await Promise.resolve().then(c.bind(c,6552)),{getProviderDef:h}=await Promise.resolve().then(c.bind(c,86006)),i=g({def:h(a.provider),apiKey:a.apiKey,model:a.model,baseURL:a.baseURL}),j=`Verify E2E test result.
|
|
125
|
+
|
|
126
|
+
EXPECTED: "${b}"
|
|
127
|
+
URL: ${e}
|
|
128
|
+
CONTENT: ${d.substring(0,1500)}
|
|
129
|
+
|
|
130
|
+
Reply with ONLY JSON:
|
|
131
|
+
{"passed":true,"reason":"..."}`;try{let{text:a}=await f({model:i,messages:[{role:"user",content:j}],maxOutputTokens:200});return A(a)}catch{return{passed:!0,reason:"Verification skipped"}}}async function E(a,b,c,d){if("navigate"===b.action){let a=b.value||b.selector;if(!a||!a.startsWith("http"))return}for(let c=0;c<=2;c++)try{switch(b.action){case"click":await a.locator(b.selector).click({timeout:d,strict:!0});break;case"fill":await a.locator(b.selector).fill(b.value||"",{timeout:d});break;case"navigate":let c=b.value||b.selector;c&&c.startsWith("http")&&await a.goto(c,{timeout:d,waitUntil:"domcontentloaded"});break;case"wait":b.selector&&"body"!==b.selector?await a.locator(b.selector).waitFor({state:"visible",timeout:d}):await a.waitForTimeout(parseInt(b.value||"1000")||1e3);break;case"assert":await a.locator(b.selector).waitFor({state:"visible",timeout:d});break;case"select":await a.locator(b.selector).selectOption(b.value||"",{timeout:d});break;case"check":await a.locator(b.selector).check({timeout:d});break;case"press":await a.keyboard.press(b.value||"Enter");break;case"hover":await a.locator(b.selector).hover({timeout:d});break;case"scroll":await a.locator(b.selector).scrollIntoViewIfNeeded({timeout:d})}return}catch(b){if(2===c)throw b;await a.waitForTimeout(500)}}let F=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/e2e/route",pathname:"/api/e2e",filename:"route",bundlePath:"app/api/e2e/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"/home/sltr91025/code-repository/open-source/test-lah/src/app/api/e2e/route.ts",nextConfigOutput:"standalone",userland:d}),{workAsyncStorage:G,workUnitAsyncStorage:H,serverHooks:I}=F;function J(){return(0,g.patchFetch)({workAsyncStorage:G,workUnitAsyncStorage:H})}async function K(a,b,c){var d;let e="/api/e2e/route";"/index"===e&&(e="/");let g=await F.prepare(a,b,{srcPage:e,multiZoneDraftMode:!1});if(!g)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:u,params:v,nextConfig:w,isDraftMode:x,prerenderManifest:y,routerServerContext:z,isOnDemandRevalidate:A,revalidateOnlyGenerated:B,resolvedPathname:C}=g,D=(0,j.normalizeAppPath)(e),E=!!(y.dynamicRoutes[D]||y.routes[C]);if(E&&!x){let a=!!y.routes[C],b=y.dynamicRoutes[D];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let G=null;!E||F.isDev||x||(G="/index"===(G=C)?"/":G);let H=!0===F.isDev||!E,I=E&&!H,J=a.method||"GET",K=(0,i.getTracer)(),L=K.getActiveScopeSpan(),M={params:v,prerenderManifest:y,renderOpts:{experimental:{cacheComponents:!!w.experimental.cacheComponents,authInterrupts:!!w.experimental.authInterrupts},supportsDynamicResponse:H,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=w.experimental)?void 0:d.cacheLife,isRevalidate:I,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>F.onRequestError(a,b,d,z)},sharedContext:{buildId:u}},N=new k.NodeNextRequest(a),O=new k.NodeNextResponse(b),P=l.NextRequestAdapter.fromNodeNextRequest(N,(0,l.signalFromNodeResponse)(b));try{let d=async c=>F.handle(P,M).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=K.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${J} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${J} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&A&&B&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let e=await d(g);a.fetchMetrics=M.renderOpts.fetchMetrics;let i=M.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=M.renderOpts.collectedTags;if(!E)return await (0,o.I)(N,O,e,M.renderOpts.pendingWaitUntil),null;{let a=await e.blob(),b=(0,p.toNodeOutgoingHttpHeaders)(e.headers);j&&(b[r.NEXT_CACHE_TAGS_HEADER]=j),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==M.renderOpts.collectedRevalidate&&!(M.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&M.renderOpts.collectedRevalidate,d=void 0===M.renderOpts.collectedExpire||M.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:M.renderOpts.collectedExpire;return{value:{kind:t.CachedRouteKind.APP_ROUTE,status:e.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:d}}}}catch(b){throw(null==f?void 0:f.isStale)&&await F.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:A})},z),b}},l=await F.handleResponse({req:a,nextConfig:w,cacheKey:G,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:y,isRoutePPREnabled:!1,isOnDemandRevalidate:A,revalidateOnlyGenerated:B,responseGenerator:k,waitUntil:c.waitUntil});if(!E)return null;if((null==l||null==(i=l.value)?void 0:i.kind)!==t.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(j=l.value)?void 0:j.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});(0,h.getRequestMeta)(a,"minimalMode")||b.setHeader("x-nextjs-cache",A?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),x&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,p.fromNodeOutgoingHttpHeaders)(l.value.headers);return(0,h.getRequestMeta)(a,"minimalMode")&&E||m.delete(r.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||b.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,q.getCacheControlHeader)(l.cacheControl)),await (0,o.I)(N,O,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};L?await g(L):await K.withPropagatedContext(a.headers,()=>K.trace(m.BaseServerSpan.handleRequest,{spanName:`${J} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":J,"http.target":a.url}},g))}catch(b){if(b instanceof s.NoFallbackError||await F.onRequestError(a,b,{routerKind:"App Router",routePath:D,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:A})}),E)throw b;return await (0,o.I)(N,O,new Response(null,{status:500})),null}}},55511:a=>{"use strict";a.exports=require("crypto")},62322:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"60a3ea029916e378c2d86e693740e24a303aaf50d6":()=>d.vm,"70ec37527f854489dd782643d7896ddea22d39a1eb":()=>d.i0,"785ce821970b970b41c6827cb01aa6f624cf5d6466":()=>d.jT,"78a6afe4f65d149677061ced217792707b27de1558":()=>d.PW});var d=c(13026)},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},68633:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{decryptActionBoundArgs:function(){return s},encryptActionBoundArgs:function(){return r}}),c(77925);let d=c(97954),e=c(27825),f=c(47686),g=c(77533),h=c(63033),i=c(26906),j=function(a){return a&&a.__esModule?a:{default:a}}(c(74515)),k=new TextEncoder,l=new TextDecoder,m=void 0,n=void 0;async function o(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=atob(b),e=d.slice(0,16),f=d.slice(16),h=l.decode(await (0,g.decrypt)(c,(0,g.stringToUint8Array)(e),(0,g.stringToUint8Array)(f)));if(!h.startsWith(a))throw Object.defineProperty(Error("Invalid Server Action payload: failed to decrypt."),"__NEXT_ERROR_CODE",{value:"E191",enumerable:!1,configurable:!0});return h.slice(a.length)}async function p(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=new Uint8Array(16);h.workUnitAsyncStorage.exit(()=>crypto.getRandomValues(d));let e=(0,g.arrayBufferToString)(d.buffer),f=await (0,g.encrypt)(c,d,k.encode(a+b));return btoa(e+(0,g.arrayBufferToString)(f))}var q=function(a){return a[a.Ready=0]="Ready",a[a.Pending=1]="Pending",a[a.Complete=2]="Complete",a}(q||{});let r=j.default.cache(async function a(b,...c){let e=h.workUnitAsyncStorage.getStore(),j=e?(0,h.getCacheSignal)(e):void 0,{clientModules:k}=(0,g.getClientReferenceManifestForRsc)(),l=Error();Error.captureStackTrace(l,a);let n=!1,o=e?(0,i.createHangingInputAbortSignal)(e):void 0,q=0;function r(){0===q&&(q=1,null==j||j.beginRead())}function s(){1===q&&(null==j||j.endRead()),q=2}o&&j&&o.addEventListener("abort",r,{once:!0});let t=await (0,f.streamToString)((0,d.renderToReadableStream)(c,k,{filterStackFrame:m,signal:o,onError(a){(null==o||!o.aborted)&&(n||(n=!0,l.message=a instanceof Error?a.message:String(a)))}}),o);if(n)throw s(),l;if(!e)return p(b,t);r();let u=(0,h.getPrerenderResumeDataCache)(e),v=(0,h.getRenderResumeDataCache)(e),w=b+t,x=(null==u?void 0:u.encryptedBoundArgs.get(w))??(null==v?void 0:v.encryptedBoundArgs.get(w));if(x)return x;let y=await p(b,t);return s(),null==u||u.encryptedBoundArgs.set(w,y),y});async function s(a,b){let c,d=await b,f=h.workUnitAsyncStorage.getStore();if(f){let b=(0,h.getCacheSignal)(f),e=(0,h.getPrerenderResumeDataCache)(f),g=(0,h.getRenderResumeDataCache)(f);(c=(null==e?void 0:e.decryptedBoundArgs.get(d))??(null==g?void 0:g.decryptedBoundArgs.get(d)))||(null==b||b.beginRead(),c=await o(a,d),null==b||b.endRead(),null==e||e.decryptedBoundArgs.set(d,c))}else c=await o(a,d);let{edgeRscModuleMapping:i,rscModuleMapping:j}=(0,g.getClientReferenceManifestForRsc)();return await (0,e.createFromReadableStream)(new ReadableStream({start(a){switch(a.enqueue(k.encode(c)),null==f?void 0:f.type){case"prerender":case"prerender-runtime":f.renderSignal.aborted?a.close():f.renderSignal.addEventListener("abort",()=>a.close(),{once:!0});break;case"prerender-client":case"prerender-ppr":case"prerender-legacy":case"request":case"cache":case"private-cache":case"unstable-cache":case void 0:return a.close()}}}),{findSourceMapURL:n,serverConsumerManifest:{moduleLoading:null,moduleMap:j,serverModuleMap:(0,g.getServerModuleMap)()}})}},75879:(a,b,c)=>{"use strict";Object.defineProperty(b,"A",{enumerable:!0,get:function(){return d.registerServerReference}});let d=c(97954)},78335:()=>{},83237:a=>{"use strict";a.exports=import("playwright")},86006:(a,b,c)=>{"use strict";c.d(b,{getProviderDef:()=>e});let d={openai:{id:"openai",name:"OpenAI",type:"native",description:"GPT models powering ChatGPT. Industry-leading language understanding.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/openai.svg",keyUrl:"https://platform.openai.com/api-keys",keyPlaceholder:"sk-...",color:"#10A37F",sdkProvider:"openai",defaultModel:"gpt-4o-mini",popularModels:["gpt-4o","gpt-4o-mini","gpt-4-turbo","gpt-3.5-turbo"]},google:{id:"google",name:"Google Gemini",type:"native",description:"Google's multimodal AI with strong reasoning capabilities.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/googlegemini.svg",keyUrl:"https://aistudio.google.com/apikey",keyPlaceholder:"AIza...",color:"#4285F4",sdkProvider:"google",defaultModel:"gemini-2.5-flash",popularModels:["gemini-2.5-flash","gemini-2.5-pro","gemini-2.0-flash"]},anthropic:{id:"anthropic",name:"Anthropic",type:"native",description:"Claude models — safe, steerable, and highly capable.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/anthropic.svg",keyUrl:"https://console.anthropic.com/settings/keys",keyPlaceholder:"sk-ant-...",color:"#D97706",sdkProvider:"anthropic",defaultModel:"claude-sonnet-4-20250514",popularModels:["claude-sonnet-4-20250514","claude-haiku-4-20250514","claude-3-5-sonnet-20241022"]},deepseek:{id:"deepseek",name:"DeepSeek",type:"openai-compatible",description:"High-performance open-source models with competitive reasoning.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/deepseek.svg",keyUrl:"https://platform.deepseek.com/api_keys",keyPlaceholder:"sk-...",color:"#4D6BFE",sdkProvider:"openai",baseURL:"https://api.deepseek.com/v1",defaultModel:"deepseek-chat",popularModels:["deepseek-chat","deepseek-reasoner"]},xiaomi:{id:"xiaomi",name:"Xiaomi (MiMo)",type:"openai-compatible",description:"Xiaomi's MiMo models — OpenAI-compatible API.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/xiaomi.svg",keyUrl:"https://platform.xiaomimimo.com/",keyPlaceholder:"tp-...",color:"#FF6900",sdkProvider:"openai",baseURL:"https://token-plan-sgp.xiaomimimo.com/v1",defaultModel:"mimo-v2.5",popularModels:["mimo-v2.5","mimo-v2.5-pro"]},openrouter:{id:"openrouter",name:"OpenRouter",type:"openai-compatible",description:"Unified gateway to 200+ models — Claude, Llama, Mistral, Gemini, and more.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/openrouter.svg",keyUrl:"https://openrouter.ai/keys",keyPlaceholder:"sk-or-...",color:"#6366F1",sdkProvider:"openai",baseURL:"https://openrouter.ai/api/v1",defaultModel:"openrouter/free",popularModels:["openrouter/free","meta-llama/llama-4-maverick:free","google/gemini-2.5-flash:free","deepseek/deepseek-chat-v3-0324:free","mistralai/mistral-small-3.2-24b:free","qwen/qwen3-235b-a22b:free","microsoft/phi-4-reasoning-plus:free"]},groq:{id:"groq",name:"Groq",type:"native",description:"Ultra-fast inference with LPU hardware. Blazing speed for Llama, Mixtral, and Gemma models.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/groq.svg",keyUrl:"https://console.groq.com/keys",keyPlaceholder:"gsk_...",color:"#F55036",sdkProvider:"groq",defaultModel:"llama-3.3-70b-versatile",popularModels:["llama-3.3-70b-versatile","llama-3.1-8b-instant","mixtral-8x7b-32768","gemma2-9b-it","meta-llama/llama-4-scout-17b-16e-instruct","qwen-qwq-32b"]},custom:{id:"custom",name:"Custom (OpenAI-compatible)",type:"openai-compatible",description:"Any OpenAI-compatible API — Ollama, LM Studio, vLLM, LiteLLM, etc.",logoUrl:"",keyUrl:"",keyPlaceholder:"sk-... or any key",color:"#6B7280",sdkProvider:"openai",defaultModel:"",popularModels:[],requiresBaseURL:!0}};function e(a){return d[a]??d.custom}Object.values(d)},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},95736:(a,b,c)=>{"use strict";a.exports=c(44870)},96487:()=>{}};var b=require("../../../webpack-runtime.js");b.C(a);var c=b.X(0,[873,917,845],()=>b(b.s=55344));module.exports=c})();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":1,"files":["../../../../../node_modules/@opentelemetry/api/build/src/api/context.js","../../../../../node_modules/@opentelemetry/api/build/src/api/diag.js","../../../../../node_modules/@opentelemetry/api/build/src/api/metrics.js","../../../../../node_modules/@opentelemetry/api/build/src/api/propagation.js","../../../../../node_modules/@opentelemetry/api/build/src/api/trace.js","../../../../../node_modules/@opentelemetry/api/build/src/baggage/context-helpers.js","../../../../../node_modules/@opentelemetry/api/build/src/baggage/internal/baggage-impl.js","../../../../../node_modules/@opentelemetry/api/build/src/baggage/internal/symbol.js","../../../../../node_modules/@opentelemetry/api/build/src/baggage/utils.js","../../../../../node_modules/@opentelemetry/api/build/src/context-api.js","../../../../../node_modules/@opentelemetry/api/build/src/context/NoopContextManager.js","../../../../../node_modules/@opentelemetry/api/build/src/context/context.js","../../../../../node_modules/@opentelemetry/api/build/src/diag-api.js","../../../../../node_modules/@opentelemetry/api/build/src/diag/ComponentLogger.js","../../../../../node_modules/@opentelemetry/api/build/src/diag/consoleLogger.js","../../../../../node_modules/@opentelemetry/api/build/src/diag/internal/logLevelLogger.js","../../../../../node_modules/@opentelemetry/api/build/src/diag/types.js","../../../../../node_modules/@opentelemetry/api/build/src/index.js","../../../../../node_modules/@opentelemetry/api/build/src/internal/global-utils.js","../../../../../node_modules/@opentelemetry/api/build/src/internal/semver.js","../../../../../node_modules/@opentelemetry/api/build/src/metrics-api.js","../../../../../node_modules/@opentelemetry/api/build/src/metrics/Metric.js","../../../../../node_modules/@opentelemetry/api/build/src/metrics/NoopMeter.js","../../../../../node_modules/@opentelemetry/api/build/src/metrics/NoopMeterProvider.js","../../../../../node_modules/@opentelemetry/api/build/src/propagation-api.js","../../../../../node_modules/@opentelemetry/api/build/src/propagation/NoopTextMapPropagator.js","../../../../../node_modules/@opentelemetry/api/build/src/propagation/TextMapPropagator.js","../../../../../node_modules/@opentelemetry/api/build/src/trace-api.js","../../../../../node_modules/@opentelemetry/api/build/src/trace/NonRecordingSpan.js","../../../../../node_modules/@opentelemetry/api/build/src/trace/NoopTracer.js","../../../../../node_modules/@opentelemetry/api/build/src/trace/NoopTracerProvider.js","../../../../../node_modules/@opentelemetry/api/build/src/trace/ProxyTracer.js","../../../../../node_modules/@opentelemetry/api/build/src/trace/ProxyTracerProvider.js","../../../../../node_modules/@opentelemetry/api/build/src/trace/SamplingResult.js","../../../../../node_modules/@opentelemetry/api/build/src/trace/context-utils.js","../../../../../node_modules/@opentelemetry/api/build/src/trace/internal/tracestate-impl.js","../../../../../node_modules/@opentelemetry/api/build/src/trace/internal/tracestate-validators.js","../../../../../node_modules/@opentelemetry/api/build/src/trace/internal/utils.js","../../../../../node_modules/@opentelemetry/api/build/src/trace/invalid-span-constants.js","../../../../../node_modules/@opentelemetry/api/build/src/trace/span_kind.js","../../../../../node_modules/@opentelemetry/api/build/src/trace/spancontext-utils.js","../../../../../node_modules/@opentelemetry/api/build/src/trace/status.js","../../../../../node_modules/@opentelemetry/api/build/src/trace/trace_flags.js","../../../../../node_modules/@opentelemetry/api/build/src/version.js","../../../../../node_modules/@opentelemetry/api/package.json","../../../../../node_modules/next/dist/client/components/app-router-headers.js","../../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../../node_modules/next/dist/compiled/next-server/app-route.runtime.prod.js","../../../../../node_modules/next/dist/lib/client-and-server-references.js","../../../../../node_modules/next/dist/lib/constants.js","../../../../../node_modules/next/dist/lib/interop-default.js","../../../../../node_modules/next/dist/lib/is-error.js","../../../../../node_modules/next/dist/lib/semver-noop.js","../../../../../node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../../../../node_modules/next/dist/server/app-render/action-async-storage.external.js","../../../../../node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../../../../node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../../../../node_modules/next/dist/server/app-render/async-local-storage.js","../../../../../node_modules/next/dist/server/app-render/cache-signal.js","../../../../../node_modules/next/dist/server/app-render/dynamic-access-async-storage-instance.js","../../../../../node_modules/next/dist/server/app-render/dynamic-access-async-storage.external.js","../../../../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js","../../../../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js","../../../../../node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../../../../node_modules/next/dist/server/app-render/work-async-storage.external.js","../../../../../node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../../../../node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../../../../node_modules/next/dist/server/lib/cache-handlers/default.external.js","../../../../../node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../../../../node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../../../../node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../../../../node_modules/next/dist/server/lib/lru-cache.js","../../../../../node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../../../../node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js","../../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../../node_modules/next/dist/server/load-manifest.external.js","../../../../../node_modules/next/dist/server/response-cache/types.js","../../../../../node_modules/next/dist/shared/lib/deep-freeze.js","../../../../../node_modules/next/dist/shared/lib/invariant-error.js","../../../../../node_modules/next/dist/shared/lib/is-plain-object.js","../../../../../node_modules/next/dist/shared/lib/is-thenable.js","../../../../../node_modules/next/dist/shared/lib/no-fallback-error.external.js","../../../../../node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js","../../../../../node_modules/next/dist/shared/lib/router/utils/app-paths.js","../../../../../node_modules/next/dist/shared/lib/segment.js","../../../../../node_modules/next/dist/shared/lib/server-reference-info.js","../../../../../node_modules/next/package.json","../../../../../node_modules/playwright-core/browsers.json","../../../../../node_modules/playwright-core/index.js","../../../../../node_modules/playwright-core/index.mjs","../../../../../node_modules/playwright-core/lib/coreBundle.js","../../../../../node_modules/playwright-core/lib/utilsBundle.js","../../../../../node_modules/playwright-core/lib/xdg-open","../../../../../node_modules/playwright-core/package.json","../../../../../node_modules/playwright/index.js","../../../../../node_modules/playwright/index.mjs","../../../../../node_modules/playwright/package.json","../../../../../package.json","../../../../package.json","../../../chunks/845.js","../../../chunks/873.js","../../../chunks/882.js","../../../chunks/917.js","../../../webpack-runtime.js","route_client-reference-manifest.js"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/api/e2e/route"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"622":{"*":{"id":"82146","name":"*","chunks":[],"async":false}},"1343":{"*":{"id":"17638","name":"*","chunks":[],"async":false}},"1959":{"*":{"id":"31603","name":"*","chunks":[],"async":false}},"3542":{"*":{"id":"62003","name":"*","chunks":[],"async":false}},"3886":{"*":{"id":"75170","name":"*","chunks":[],"async":false}},"4071":{"*":{"id":"95183","name":"*","chunks":[],"async":false}},"4431":{"*":{"id":"12263","name":"*","chunks":[],"async":false}},"5278":{"*":{"id":"78922","name":"*","chunks":[],"async":false}},"6061":{"*":{"id":"35473","name":"*","chunks":[],"async":false}},"6268":{"*":{"id":"27328","name":"*","chunks":[],"async":false}},"7150":{"*":{"id":"54160","name":"*","chunks":[],"async":false}},"7193":{"*":{"id":"1342","name":"*","chunks":[],"async":false}},"7989":{"*":{"id":"68495","name":"*","chunks":[],"async":false}},"8609":{"*":{"id":"22048","name":"*","chunks":[],"async":false}},"8924":{"*":{"id":"29234","name":"*","chunks":[],"async":false}},"9547":{"*":{"id":"68137","name":"*","chunks":[],"async":false}},"9766":{"*":{"id":"77526","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/client/components/builtin/global-error.js":{"id":7150,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":7150,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/client/components/client-page.js":{"id":1959,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/esm/client/components/client-page.js":{"id":1959,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/client/components/client-segment.js":{"id":7989,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/esm/client/components/client-segment.js":{"id":7989,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":3886,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":3886,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/client/components/layout-router.js":{"id":9766,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/esm/client/components/layout-router.js":{"id":9766,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/client/components/metadata/async-metadata.js":{"id":5278,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/esm/client/components/metadata/async-metadata.js":{"id":5278,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/client/components/render-from-template-context.js":{"id":8924,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":8924,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/lib/framework/boundary-components.js":{"id":4431,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":4431,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":622,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":622,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/node_modules/next/font/google/target.css?{\"path\":\"src/app/layout.tsx\",\"import\":\"Inter\",\"arguments\":[{\"subsets\":[\"latin\"],\"variable\":\"--font-inter\"}],\"variableName\":\"inter\"}":{"id":3037,"name":"*","chunks":["177","static/chunks/app/layout-3ad98a7069d70b7b.js"],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/src/app/globals.css":{"id":3673,"name":"*","chunks":["177","static/chunks/app/layout-3ad98a7069d70b7b.js"],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/src/components/shared/Providers.tsx":{"id":6061,"name":"*","chunks":["177","static/chunks/app/layout-3ad98a7069d70b7b.js"],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/src/app/login/page.tsx":{"id":1343,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/src/app/page.tsx":{"id":9547,"name":"*","chunks":["974","static/chunks/app/page-a90eeaea3538ebf2.js"],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/src/app/(dashboard)/layout.tsx":{"id":8609,"name":"*","chunks":["619","static/chunks/619-ba102abea3e3d0e4.js","246","static/chunks/246-1673b37cc8edb269.js","305","static/chunks/app/(dashboard)/layout-69e4ea7abe9faff3.js"],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/src/app/(dashboard)/integrations/page.tsx":{"id":4071,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/src/app/(dashboard)/projects/[projectId]/page.tsx":{"id":3542,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/src/app/(dashboard)/projects/[projectId]/summary/page.tsx":{"id":6268,"name":"*","chunks":[],"async":false},"/home/sltr91025/code-repository/open-source/test-lah/src/app/(dashboard)/projects/page.tsx":{"id":7193,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/sltr91025/code-repository/open-source/test-lah/src/":[],"/home/sltr91025/code-repository/open-source/test-lah/src/app/layout":[{"inlined":false,"path":"static/css/0ecf0abc0513341e.css"}],"/home/sltr91025/code-repository/open-source/test-lah/src/app/page":[],"/home/sltr91025/code-repository/open-source/test-lah/src/app/(dashboard)/layout":[],"/home/sltr91025/code-repository/open-source/test-lah/src/app/api/e2e/route":[]},"rscModuleMapping":{"622":{"*":{"id":"51384","name":"*","chunks":[],"async":false}},"1343":{"*":{"id":"15109","name":"*","chunks":[],"async":false}},"1959":{"*":{"id":"23597","name":"*","chunks":[],"async":false}},"3542":{"*":{"id":"41009","name":"*","chunks":[],"async":false}},"3673":{"*":{"id":"61135","name":"*","chunks":[],"async":false}},"3886":{"*":{"id":"89748","name":"*","chunks":[],"async":false}},"4071":{"*":{"id":"70393","name":"*","chunks":[],"async":false}},"4431":{"*":{"id":"73041","name":"*","chunks":[],"async":false}},"5278":{"*":{"id":"7184","name":"*","chunks":[],"async":false}},"6061":{"*":{"id":"26239","name":"*","chunks":[],"async":false}},"6268":{"*":{"id":"12202","name":"*","chunks":[],"async":false}},"7150":{"*":{"id":"81170","name":"*","chunks":[],"async":false}},"7193":{"*":{"id":"40228","name":"*","chunks":[],"async":false}},"7989":{"*":{"id":"36893","name":"*","chunks":[],"async":false}},"8609":{"*":{"id":"97788","name":"*","chunks":[],"async":false}},"8924":{"*":{"id":"69576","name":"*","chunks":[],"async":false}},"9547":{"*":{"id":"60967","name":"*","chunks":[],"async":false}},"9766":{"*":{"id":"6060","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(()=>{var a={};a.id=435,a.ids=[435],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},4237:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>E,patchFetch:()=>D,routeModule:()=>z,serverHooks:()=>C,workAsyncStorage:()=>A,workUnitAsyncStorage:()=>B});var d={};c.r(d),c.d(d,{POST:()=>y});var e=c(95736),f=c(9117),g=c(4044),h=c(39326),i=c(32324),j=c(261),k=c(54290),l=c(85328),m=c(38928),n=c(46595),o=c(3421),p=c(17679),q=c(41681),r=c(63446),s=c(86439),t=c(51356),u=c(10641),v=c(6552),w=c(86006),x=c(15995);async function y(a){try{let{title:b,prompt:c,apiKey:d,provider:e,model:f,language:g,baseURL:h,images:i}=await a.json();if(!d)return u.NextResponse.json({error:"API key required"},{status:400});if(!b&&!c&&(!i||0===i.length))return u.NextResponse.json({error:"Title, prompt, or image required"},{status:400});let j=(0,w.
|
|
1
|
+
(()=>{var a={};a.id=435,a.ids=[435],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},4237:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>E,patchFetch:()=>D,routeModule:()=>z,serverHooks:()=>C,workAsyncStorage:()=>A,workUnitAsyncStorage:()=>B});var d={};c.r(d),c.d(d,{POST:()=>y});var e=c(95736),f=c(9117),g=c(4044),h=c(39326),i=c(32324),j=c(261),k=c(54290),l=c(85328),m=c(38928),n=c(46595),o=c(3421),p=c(17679),q=c(41681),r=c(63446),s=c(86439),t=c(51356),u=c(10641),v=c(6552),w=c(86006),x=c(15995);async function y(a){try{let{title:b,prompt:c,apiKey:d,provider:e,model:f,language:g,baseURL:h,images:i}=await a.json();if(!d)return u.NextResponse.json({error:"API key required"},{status:400});if(!b&&!c&&(!i||0===i.length))return u.NextResponse.json({error:"Title, prompt, or image required"},{status:400});let j=(0,w.getProviderDef)(e||"google"),k=(0,x.Yc)(d),l=await (0,v.Z)({def:j,apiKey:k,model:f||"",baseURL:h},b,c,g,i);return u.NextResponse.json({testCases:l})}catch(b){let a=b instanceof Error?b.message:"Internal error";return u.NextResponse.json({error:a},{status:500})}}let z=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/generate/route",pathname:"/api/generate",filename:"route",bundlePath:"app/api/generate/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"/home/sltr91025/code-repository/open-source/test-lah/src/app/api/generate/route.ts",nextConfigOutput:"standalone",userland:d}),{workAsyncStorage:A,workUnitAsyncStorage:B,serverHooks:C}=z;function D(){return(0,g.patchFetch)({workAsyncStorage:A,workUnitAsyncStorage:B})}async function E(a,b,c){var d;let e="/api/generate/route";"/index"===e&&(e="/");let g=await z.prepare(a,b,{srcPage:e,multiZoneDraftMode:!1});if(!g)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:u,params:v,nextConfig:w,isDraftMode:x,prerenderManifest:y,routerServerContext:A,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,resolvedPathname:D}=g,E=(0,j.normalizeAppPath)(e),F=!!(y.dynamicRoutes[E]||y.routes[D]);if(F&&!x){let a=!!y.routes[D],b=y.dynamicRoutes[E];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let G=null;!F||z.isDev||x||(G="/index"===(G=D)?"/":G);let H=!0===z.isDev||!F,I=F&&!H,J=a.method||"GET",K=(0,i.getTracer)(),L=K.getActiveScopeSpan(),M={params:v,prerenderManifest:y,renderOpts:{experimental:{cacheComponents:!!w.experimental.cacheComponents,authInterrupts:!!w.experimental.authInterrupts},supportsDynamicResponse:H,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=w.experimental)?void 0:d.cacheLife,isRevalidate:I,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>z.onRequestError(a,b,d,A)},sharedContext:{buildId:u}},N=new k.NodeNextRequest(a),O=new k.NodeNextResponse(b),P=l.NextRequestAdapter.fromNodeNextRequest(N,(0,l.signalFromNodeResponse)(b));try{let d=async c=>z.handle(P,M).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=K.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${J} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${J} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&B&&C&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let e=await d(g);a.fetchMetrics=M.renderOpts.fetchMetrics;let i=M.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=M.renderOpts.collectedTags;if(!F)return await (0,o.I)(N,O,e,M.renderOpts.pendingWaitUntil),null;{let a=await e.blob(),b=(0,p.toNodeOutgoingHttpHeaders)(e.headers);j&&(b[r.NEXT_CACHE_TAGS_HEADER]=j),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==M.renderOpts.collectedRevalidate&&!(M.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&M.renderOpts.collectedRevalidate,d=void 0===M.renderOpts.collectedExpire||M.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:M.renderOpts.collectedExpire;return{value:{kind:t.CachedRouteKind.APP_ROUTE,status:e.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:d}}}}catch(b){throw(null==f?void 0:f.isStale)&&await z.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})},A),b}},l=await z.handleResponse({req:a,nextConfig:w,cacheKey:G,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:y,isRoutePPREnabled:!1,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,responseGenerator:k,waitUntil:c.waitUntil});if(!F)return null;if((null==l||null==(i=l.value)?void 0:i.kind)!==t.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(j=l.value)?void 0:j.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});(0,h.getRequestMeta)(a,"minimalMode")||b.setHeader("x-nextjs-cache",B?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),x&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,p.fromNodeOutgoingHttpHeaders)(l.value.headers);return(0,h.getRequestMeta)(a,"minimalMode")&&F||m.delete(r.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||b.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,q.getCacheControlHeader)(l.cacheControl)),await (0,o.I)(N,O,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};L?await g(L):await K.withPropagatedContext(a.headers,()=>K.trace(m.BaseServerSpan.handleRequest,{spanName:`${J} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":J,"http.target":a.url}},g))}catch(b){if(b instanceof s.NoFallbackError||await z.onRequestError(a,b,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})}),F)throw b;return await (0,o.I)(N,O,new Response(null,{status:500})),null}}},6552:(a,b,c)=>{"use strict";c.d(b,{Z:()=>l,createModel:()=>k,r:()=>m});var d=c(2112),e=c(70),f=c(28670),g=c(44491),h=c(21520),i=c(59256);let j=i.Ik({title:i.Yj().describe("Short descriptive title of the test case"),steps:i.Yj().describe("Numbered test steps separated by newlines"),expected:i.Yj().describe("Expected result of the test")});function k(a){let{def:b,apiKey:c,model:d,baseURL:i}=a;if("native"===b.type)switch(b.sdkProvider){case"openai":return(0,e.ry)({apiKey:c})(d||b.defaultModel);case"google":return(0,f.sw)({apiKey:c})(d||b.defaultModel);case"anthropic":return(0,g.nM)({apiKey:c})(d||b.defaultModel);case"groq":return(0,h.cn)({apiKey:c})(d||b.defaultModel);default:throw Error(`Unknown native SDK provider: ${b.sdkProvider}`)}let j=i||b.baseURL;if(!j)throw Error(`Base URL is required for OpenAI-compatible provider "${b.id}"`);return(0,e.ry)({apiKey:c,baseURL:j,name:b.id})(d||b.defaultModel)}async function l(a,b,c,e="en",f){let g=k(a),h=function(a="en"){return`You are a QA engineer. Generate test cases for the given feature.
|
|
2
2
|
${"id"===a?"Write ALL test case content (title, steps, expected result) in Bahasa Indonesia.":"Write ALL test case content (title, steps, expected result) in English."}
|
|
3
3
|
|
|
4
4
|
RULES FOR STEPS:
|
|
@@ -8,7 +8,7 @@ RULES FOR STEPS:
|
|
|
8
8
|
- Be concise: 2-5 steps per test case.
|
|
9
9
|
- Focus on the action being tested, not boilerplate.
|
|
10
10
|
|
|
11
|
-
Generate 3-8 test cases covering happy path, edge cases, and error scenarios.`}(e),
|
|
11
|
+
Generate 3-8 test cases covering happy path, edge cases, and error scenarios.`}(e),i=[{type:"text",text:`Feature: ${b}
|
|
12
12
|
|
|
13
13
|
Description / DoD / Acceptance Criteria:
|
|
14
|
-
${c||"(no additional description provided)"}${f?.length?"\n\nThe user has attached screenshot(s) of the UI/feature. Use them as additional context to write more accurate and specific test cases.":""}`}];if(f?.length)for(let a of f)
|
|
14
|
+
${c||"(no additional description provided)"}${f?.length?"\n\nThe user has attached screenshot(s) of the UI/feature. Use them as additional context to write more accurate and specific test cases.":""}`}];if(f?.length)for(let a of f)i.push({type:"image",image:a});let{output:m}=await (0,d.generateText)({model:g,output:d.k7.array({element:j}),system:h,messages:[{role:"user",content:i}],temperature:.4});return m}async function m(a){try{let b=k(a);return await (0,d.generateText)({model:b,prompt:'Say "ok" in one word.',maxOutputTokens:10}),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:"Connection failed"}}}},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},15995:(a,b,c)=>{"use strict";c.d(b,{Yc:()=>h,w:()=>g});var d=c(55511);let e="aes-256-gcm";function f(){let a=process.env.ENCRYPTION_KEY;if(!a)throw Error("ENCRYPTION_KEY environment variable is not set");return(0,d.createHash)("sha256").update(a).digest()}function g(a){let b=f(),c=(0,d.randomBytes)(12),g=(0,d.createCipheriv)(e,b,c,{authTagLength:16}),h=Buffer.concat([g.update(a,"utf8"),g.final()]),i=g.getAuthTag();return"enc:"+Buffer.concat([c,i,h]).toString("base64")}function h(a){if(!a.startsWith("enc:"))return a;let b=f(),c=Buffer.from(a.slice(4),"base64"),g=c.subarray(0,12),h=c.subarray(12,28),i=c.subarray(28),j=(0,d.createDecipheriv)(e,b,g,{authTagLength:16});return j.setAuthTag(h),Buffer.concat([j.update(i),j.final()]).toString("utf8")}},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},21820:a=>{"use strict";a.exports=require("os")},29021:a=>{"use strict";a.exports=require("fs")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33873:a=>{"use strict";a.exports=require("path")},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},55511:a=>{"use strict";a.exports=require("crypto")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},78335:()=>{},86006:(a,b,c)=>{"use strict";c.d(b,{getProviderDef:()=>e});let d={openai:{id:"openai",name:"OpenAI",type:"native",description:"GPT models powering ChatGPT. Industry-leading language understanding.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/openai.svg",keyUrl:"https://platform.openai.com/api-keys",keyPlaceholder:"sk-...",color:"#10A37F",sdkProvider:"openai",defaultModel:"gpt-4o-mini",popularModels:["gpt-4o","gpt-4o-mini","gpt-4-turbo","gpt-3.5-turbo"]},google:{id:"google",name:"Google Gemini",type:"native",description:"Google's multimodal AI with strong reasoning capabilities.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/googlegemini.svg",keyUrl:"https://aistudio.google.com/apikey",keyPlaceholder:"AIza...",color:"#4285F4",sdkProvider:"google",defaultModel:"gemini-2.5-flash",popularModels:["gemini-2.5-flash","gemini-2.5-pro","gemini-2.0-flash"]},anthropic:{id:"anthropic",name:"Anthropic",type:"native",description:"Claude models — safe, steerable, and highly capable.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/anthropic.svg",keyUrl:"https://console.anthropic.com/settings/keys",keyPlaceholder:"sk-ant-...",color:"#D97706",sdkProvider:"anthropic",defaultModel:"claude-sonnet-4-20250514",popularModels:["claude-sonnet-4-20250514","claude-haiku-4-20250514","claude-3-5-sonnet-20241022"]},deepseek:{id:"deepseek",name:"DeepSeek",type:"openai-compatible",description:"High-performance open-source models with competitive reasoning.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/deepseek.svg",keyUrl:"https://platform.deepseek.com/api_keys",keyPlaceholder:"sk-...",color:"#4D6BFE",sdkProvider:"openai",baseURL:"https://api.deepseek.com/v1",defaultModel:"deepseek-chat",popularModels:["deepseek-chat","deepseek-reasoner"]},xiaomi:{id:"xiaomi",name:"Xiaomi (MiMo)",type:"openai-compatible",description:"Xiaomi's MiMo models — OpenAI-compatible API.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/xiaomi.svg",keyUrl:"https://platform.xiaomimimo.com/",keyPlaceholder:"tp-...",color:"#FF6900",sdkProvider:"openai",baseURL:"https://token-plan-sgp.xiaomimimo.com/v1",defaultModel:"mimo-v2.5",popularModels:["mimo-v2.5","mimo-v2.5-pro"]},openrouter:{id:"openrouter",name:"OpenRouter",type:"openai-compatible",description:"Unified gateway to 200+ models — Claude, Llama, Mistral, Gemini, and more.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/openrouter.svg",keyUrl:"https://openrouter.ai/keys",keyPlaceholder:"sk-or-...",color:"#6366F1",sdkProvider:"openai",baseURL:"https://openrouter.ai/api/v1",defaultModel:"openrouter/free",popularModels:["openrouter/free","meta-llama/llama-4-maverick:free","google/gemini-2.5-flash:free","deepseek/deepseek-chat-v3-0324:free","mistralai/mistral-small-3.2-24b:free","qwen/qwen3-235b-a22b:free","microsoft/phi-4-reasoning-plus:free"]},groq:{id:"groq",name:"Groq",type:"native",description:"Ultra-fast inference with LPU hardware. Blazing speed for Llama, Mixtral, and Gemma models.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/groq.svg",keyUrl:"https://console.groq.com/keys",keyPlaceholder:"gsk_...",color:"#F55036",sdkProvider:"groq",defaultModel:"llama-3.3-70b-versatile",popularModels:["llama-3.3-70b-versatile","llama-3.1-8b-instant","mixtral-8x7b-32768","gemma2-9b-it","meta-llama/llama-4-scout-17b-16e-instruct","qwen-qwq-32b"]},custom:{id:"custom",name:"Custom (OpenAI-compatible)",type:"openai-compatible",description:"Any OpenAI-compatible API — Ollama, LM Studio, vLLM, LiteLLM, etc.",logoUrl:"",keyUrl:"",keyPlaceholder:"sk-... or any key",color:"#6B7280",sdkProvider:"openai",defaultModel:"",popularModels:[],requiresBaseURL:!0}};function e(a){return d[a]??d.custom}Object.values(d)},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},96487:()=>{}};var b=require("../../../webpack-runtime.js");b.C(a);var c=b.X(0,[873,692,845],()=>b(b.s=4237));module.exports=c})();
|