dev3000 0.0.117 → 0.0.118

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/dist/cdp-monitor.d.ts +1 -0
  2. package/dist/cdp-monitor.d.ts.map +1 -1
  3. package/dist/cdp-monitor.js +11 -2
  4. package/dist/cdp-monitor.js.map +1 -1
  5. package/mcp-server/.next/BUILD_ID +1 -1
  6. package/mcp-server/.next/build-manifest.json +2 -2
  7. package/mcp-server/.next/fallback-build-manifest.json +2 -2
  8. package/mcp-server/.next/prerender-manifest.json +3 -3
  9. package/mcp-server/.next/server/app/.well-known/workflow/v1/step/route.js +1 -1
  10. package/mcp-server/.next/server/app/.well-known/workflow/v1/step/route.js.nft.json +1 -1
  11. package/mcp-server/.next/server/app/_global-error.html +2 -2
  12. package/mcp-server/.next/server/app/_global-error.rsc +1 -1
  13. package/mcp-server/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  14. package/mcp-server/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/mcp-server/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  16. package/mcp-server/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  17. package/mcp-server/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  18. package/mcp-server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/mcp-server/.next/server/app/_not-found.html +1 -1
  20. package/mcp-server/.next/server/app/_not-found.rsc +2 -2
  21. package/mcp-server/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  22. package/mcp-server/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  23. package/mcp-server/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  24. package/mcp-server/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  25. package/mcp-server/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  26. package/mcp-server/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  27. package/mcp-server/.next/server/app/api/cloud/fix-workflow/route.js +1 -1
  28. package/mcp-server/.next/server/app/api/cloud/fix-workflow/route.js.nft.json +1 -1
  29. package/mcp-server/.next/server/app/api/cloud/start-fix/route.js +1 -1
  30. package/mcp-server/.next/server/app/api/cloud/start-fix/route.js.nft.json +1 -1
  31. package/mcp-server/.next/server/app/api/jank/[session]/route.js +1 -1
  32. package/mcp-server/.next/server/app/api/jank/[session]/route.js.nft.json +1 -1
  33. package/mcp-server/.next/server/app/auth/error/page_client-reference-manifest.js +1 -1
  34. package/mcp-server/.next/server/app/auth/error.html +1 -1
  35. package/mcp-server/.next/server/app/auth/error.rsc +2 -2
  36. package/mcp-server/.next/server/app/auth/error.segments/_full.segment.rsc +2 -2
  37. package/mcp-server/.next/server/app/auth/error.segments/_head.segment.rsc +1 -1
  38. package/mcp-server/.next/server/app/auth/error.segments/_index.segment.rsc +2 -2
  39. package/mcp-server/.next/server/app/auth/error.segments/_tree.segment.rsc +2 -2
  40. package/mcp-server/.next/server/app/auth/error.segments/auth/error/__PAGE__.segment.rsc +1 -1
  41. package/mcp-server/.next/server/app/auth/error.segments/auth/error.segment.rsc +1 -1
  42. package/mcp-server/.next/server/app/auth/error.segments/auth.segment.rsc +1 -1
  43. package/mcp-server/.next/server/app/index.html +1 -1
  44. package/mcp-server/.next/server/app/index.rsc +2 -2
  45. package/mcp-server/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  46. package/mcp-server/.next/server/app/index.segments/_full.segment.rsc +2 -2
  47. package/mcp-server/.next/server/app/index.segments/_head.segment.rsc +1 -1
  48. package/mcp-server/.next/server/app/index.segments/_index.segment.rsc +2 -2
  49. package/mcp-server/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  50. package/mcp-server/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  51. package/mcp-server/.next/server/app/mcp/route.js +1 -1
  52. package/mcp-server/.next/server/app/mcp/route.js.nft.json +1 -1
  53. package/mcp-server/.next/server/app/page_client-reference-manifest.js +1 -1
  54. package/mcp-server/.next/server/app/signin/page_client-reference-manifest.js +1 -1
  55. package/mcp-server/.next/server/app/video/[session]/page_client-reference-manifest.js +1 -1
  56. package/mcp-server/.next/server/app/workflows/[id]/report/page.js +1 -1
  57. package/mcp-server/.next/server/app/workflows/[id]/report/page.js.nft.json +1 -1
  58. package/mcp-server/.next/server/app/workflows/[id]/report/page_client-reference-manifest.js +1 -1
  59. package/mcp-server/.next/server/app/workflows/new/page_client-reference-manifest.js +1 -1
  60. package/mcp-server/.next/server/app/workflows/page_client-reference-manifest.js +1 -1
  61. package/mcp-server/.next/server/chunks/{[root-of-the-server]__ec6a1335._.js → [root-of-the-server]__1095b0eb._.js} +2 -2
  62. package/mcp-server/.next/server/chunks/[root-of-the-server]__1095b0eb._.js.map +1 -0
  63. package/mcp-server/.next/server/chunks/[root-of-the-server]__157de66b._.js +111 -111
  64. package/mcp-server/.next/server/chunks/[root-of-the-server]__157de66b._.js.map +1 -1
  65. package/mcp-server/.next/server/chunks/[root-of-the-server]__18ce35ee._.js +3 -0
  66. package/mcp-server/.next/server/chunks/[root-of-the-server]__18ce35ee._.js.map +1 -0
  67. package/mcp-server/.next/server/chunks/{[root-of-the-server]__2920484d._.js → [root-of-the-server]__29c39fca._.js} +2 -2
  68. package/mcp-server/.next/server/chunks/{[root-of-the-server]__2920484d._.js.map → [root-of-the-server]__29c39fca._.js.map} +1 -1
  69. package/mcp-server/.next/server/chunks/[root-of-the-server]__55642730._.js +3 -0
  70. package/mcp-server/.next/server/chunks/[root-of-the-server]__55642730._.js.map +1 -0
  71. package/mcp-server/.next/server/chunks/[root-of-the-server]__730a8fd0._.js +1 -1
  72. package/mcp-server/.next/server/chunks/[root-of-the-server]__730a8fd0._.js.map +1 -1
  73. package/mcp-server/.next/server/chunks/{[root-of-the-server]__ece7a7f7._.js → [root-of-the-server]__951b3108._.js} +2 -2
  74. package/mcp-server/.next/server/chunks/{[root-of-the-server]__bcb77a22._.js → [root-of-the-server]__fd11bb92._.js} +2 -2
  75. package/mcp-server/.next/server/chunks/bee4f_next_dist_esm_build_templates_app-route_1ece9366.js +83 -53
  76. package/mcp-server/.next/server/chunks/bee4f_next_dist_esm_build_templates_app-route_1ece9366.js.map +1 -1
  77. package/mcp-server/.next/server/chunks/mcp-server_app_api_cloud_fix-workflow_steps_ts_b65f3271._.js +19 -19
  78. package/mcp-server/.next/server/chunks/mcp-server_app_api_cloud_fix-workflow_steps_ts_b65f3271._.js.map +1 -1
  79. package/mcp-server/.next/server/chunks/mcp-server_lib_workflow-storage_ts_30ca7761._.js +3 -0
  80. package/mcp-server/.next/server/chunks/mcp-server_lib_workflow-storage_ts_30ca7761._.js.map +1 -0
  81. package/mcp-server/.next/server/chunks/ssr/{[root-of-the-server]__bb161645._.js → [root-of-the-server]__34cc4876._.js} +2 -2
  82. package/mcp-server/.next/server/chunks/ssr/_cd4dc25e._.js.map +1 -1
  83. package/mcp-server/.next/server/chunks/ssr/mcp-server_app_workflows_new_new-workflow-client_tsx_1312c046._.js +1 -1
  84. package/mcp-server/.next/server/chunks/ssr/mcp-server_app_workflows_new_new-workflow-client_tsx_1312c046._.js.map +1 -1
  85. package/mcp-server/.next/server/server-reference-manifest.js +1 -1
  86. package/mcp-server/.next/server/server-reference-manifest.json +1 -1
  87. package/mcp-server/.next/static/chunks/{93db5737a327ab0c.js → 7b9a23e7f572d8a7.js} +1 -1
  88. package/mcp-server/.next/static/chunks/98585d170d82e3e8.css +1 -0
  89. package/mcp-server/app/api/cloud/fix-workflow/steps.ts +35 -4
  90. package/mcp-server/app/api/cloud/fix-workflow/workflow.ts +53 -1
  91. package/mcp-server/app/api/cloud/start-fix/route.ts +11 -2
  92. package/mcp-server/app/api/workflows/route.ts +36 -14
  93. package/mcp-server/app/workflows/new-workflow-modal.tsx +90 -23
  94. package/package.json +1 -1
  95. package/mcp-server/.next/server/chunks/[root-of-the-server]__c1681338._.js +0 -3
  96. package/mcp-server/.next/server/chunks/[root-of-the-server]__c1681338._.js.map +0 -1
  97. package/mcp-server/.next/server/chunks/[root-of-the-server]__ec6a1335._.js.map +0 -1
  98. package/mcp-server/.next/static/chunks/000849a6a897f531.css +0 -1
  99. /package/mcp-server/.next/server/chunks/{[root-of-the-server]__ece7a7f7._.js.map → [root-of-the-server]__951b3108._.js.map} +0 -0
  100. /package/mcp-server/.next/server/chunks/{[root-of-the-server]__bcb77a22._.js.map → [root-of-the-server]__fd11bb92._.js.map} +0 -0
  101. /package/mcp-server/.next/server/chunks/ssr/{[root-of-the-server]__bb161645._.js.map → [root-of-the-server]__34cc4876._.js.map} +0 -0
  102. /package/mcp-server/.next/static/{3tu8GDHzRVmtUnaVw3VqB → GVm-012A2JbRg9oviNAqV}/_buildManifest.js +0 -0
  103. /package/mcp-server/.next/static/{3tu8GDHzRVmtUnaVw3VqB → GVm-012A2JbRg9oviNAqV}/_clientMiddlewareManifest.json +0 -0
  104. /package/mcp-server/.next/static/{3tu8GDHzRVmtUnaVw3VqB → GVm-012A2JbRg9oviNAqV}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../node_modules/.pnpm/next%4016.1.0-canary.9_%40opentelemetry%2Bapi%401.9.0_babel-plugin-react-compiler%401.0.0_react-d_e89f05fa6262f945d2946e6441ada21f/node_modules/next/src/server/route-modules/app-page/module.compiled.js","../../../../node_modules/.pnpm/next%4016.1.0-canary.9_%40opentelemetry%2Bapi%401.9.0_babel-plugin-react-compiler%401.0.0_react-d_e89f05fa6262f945d2946e6441ada21f/node_modules/next/src/server/route-modules/app-page/vendored/rsc/react.ts","../../../../node_modules/.pnpm/next%4016.1.0-canary.9_%40opentelemetry%2Bapi%401.9.0_babel-plugin-react-compiler%401.0.0_react-d_e89f05fa6262f945d2946e6441ada21f/node_modules/next/dist/compiled/%40edge-runtime/cookies/index.js","../../../../node_modules/.pnpm/%40vercel%2Boidc%403.0.5/node_modules/%40vercel/oidc/dist/token-error.js","../../../../node_modules/.pnpm/workflow%404.0.1-beta.26_%40aws-sdk%2Bclient-sts%403.940.0_%40opentelemetry%2Bapi%401.9.0_babel-plugi_59e16b84a7e51de3ccd055db63660cbb/node_modules/workflow/src/api.ts","../../../../mcp-server/app/api/cloud/fix-workflow/workflow.ts","../../../../mcp-server/app/api/cloud/fix-workflow/route.ts","../../../../node_modules/.pnpm/next%4016.1.0-canary.9_%40opentelemetry%2Bapi%401.9.0_babel-plugin-react-compiler%401.0.0_react-d_e89f05fa6262f945d2946e6441ada21f/node_modules/next/dist/esm/build/templates/app-route.js"],"sourcesContent":["if (process.env.NEXT_RUNTIME === 'edge') {\n module.exports = require('next/dist/server/route-modules/app-page/module.js')\n} else {\n if (process.env.__NEXT_EXPERIMENTAL_REACT) {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')\n }\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')\n }\n }\n }\n}\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-rsc']!.React\n","\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/index.ts\nvar src_exports = {};\n__export(src_exports, {\n RequestCookies: () => RequestCookies,\n ResponseCookies: () => ResponseCookies,\n parseCookie: () => parseCookie,\n parseSetCookie: () => parseSetCookie,\n stringifyCookie: () => stringifyCookie\n});\nmodule.exports = __toCommonJS(src_exports);\n\n// src/serialize.ts\nfunction stringifyCookie(c) {\n var _a;\n const attrs = [\n \"path\" in c && c.path && `Path=${c.path}`,\n \"expires\" in c && (c.expires || c.expires === 0) && `Expires=${(typeof c.expires === \"number\" ? new Date(c.expires) : c.expires).toUTCString()}`,\n \"maxAge\" in c && typeof c.maxAge === \"number\" && `Max-Age=${c.maxAge}`,\n \"domain\" in c && c.domain && `Domain=${c.domain}`,\n \"secure\" in c && c.secure && \"Secure\",\n \"httpOnly\" in c && c.httpOnly && \"HttpOnly\",\n \"sameSite\" in c && c.sameSite && `SameSite=${c.sameSite}`,\n \"partitioned\" in c && c.partitioned && \"Partitioned\",\n \"priority\" in c && c.priority && `Priority=${c.priority}`\n ].filter(Boolean);\n const stringified = `${c.name}=${encodeURIComponent((_a = c.value) != null ? _a : \"\")}`;\n return attrs.length === 0 ? stringified : `${stringified}; ${attrs.join(\"; \")}`;\n}\nfunction parseCookie(cookie) {\n const map = /* @__PURE__ */ new Map();\n for (const pair of cookie.split(/; */)) {\n if (!pair)\n continue;\n const splitAt = pair.indexOf(\"=\");\n if (splitAt === -1) {\n map.set(pair, \"true\");\n continue;\n }\n const [key, value] = [pair.slice(0, splitAt), pair.slice(splitAt + 1)];\n try {\n map.set(key, decodeURIComponent(value != null ? value : \"true\"));\n } catch {\n }\n }\n return map;\n}\nfunction parseSetCookie(setCookie) {\n if (!setCookie) {\n return void 0;\n }\n const [[name, value], ...attributes] = parseCookie(setCookie);\n const {\n domain,\n expires,\n httponly,\n maxage,\n path,\n samesite,\n secure,\n partitioned,\n priority\n } = Object.fromEntries(\n attributes.map(([key, value2]) => [\n key.toLowerCase().replace(/-/g, \"\"),\n value2\n ])\n );\n const cookie = {\n name,\n value: decodeURIComponent(value),\n domain,\n ...expires && { expires: new Date(expires) },\n ...httponly && { httpOnly: true },\n ...typeof maxage === \"string\" && { maxAge: Number(maxage) },\n path,\n ...samesite && { sameSite: parseSameSite(samesite) },\n ...secure && { secure: true },\n ...priority && { priority: parsePriority(priority) },\n ...partitioned && { partitioned: true }\n };\n return compact(cookie);\n}\nfunction compact(t) {\n const newT = {};\n for (const key in t) {\n if (t[key]) {\n newT[key] = t[key];\n }\n }\n return newT;\n}\nvar SAME_SITE = [\"strict\", \"lax\", \"none\"];\nfunction parseSameSite(string) {\n string = string.toLowerCase();\n return SAME_SITE.includes(string) ? string : void 0;\n}\nvar PRIORITY = [\"low\", \"medium\", \"high\"];\nfunction parsePriority(string) {\n string = string.toLowerCase();\n return PRIORITY.includes(string) ? string : void 0;\n}\nfunction splitCookiesString(cookiesString) {\n if (!cookiesString)\n return [];\n var cookiesStrings = [];\n var pos = 0;\n var start;\n var ch;\n var lastComma;\n var nextStart;\n var cookiesSeparatorFound;\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1;\n }\n return pos < cookiesString.length;\n }\n function notSpecialChar() {\n ch = cookiesString.charAt(pos);\n return ch !== \"=\" && ch !== \";\" && ch !== \",\";\n }\n while (pos < cookiesString.length) {\n start = pos;\n cookiesSeparatorFound = false;\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos);\n if (ch === \",\") {\n lastComma = pos;\n pos += 1;\n skipWhitespace();\n nextStart = pos;\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1;\n }\n if (pos < cookiesString.length && cookiesString.charAt(pos) === \"=\") {\n cookiesSeparatorFound = true;\n pos = nextStart;\n cookiesStrings.push(cookiesString.substring(start, lastComma));\n start = pos;\n } else {\n pos = lastComma + 1;\n }\n } else {\n pos += 1;\n }\n }\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length));\n }\n }\n return cookiesStrings;\n}\n\n// src/request-cookies.ts\nvar RequestCookies = class {\n constructor(requestHeaders) {\n /** @internal */\n this._parsed = /* @__PURE__ */ new Map();\n this._headers = requestHeaders;\n const header = requestHeaders.get(\"cookie\");\n if (header) {\n const parsed = parseCookie(header);\n for (const [name, value] of parsed) {\n this._parsed.set(name, { name, value });\n }\n }\n }\n [Symbol.iterator]() {\n return this._parsed[Symbol.iterator]();\n }\n /**\n * The amount of cookies received from the client\n */\n get size() {\n return this._parsed.size;\n }\n get(...args) {\n const name = typeof args[0] === \"string\" ? args[0] : args[0].name;\n return this._parsed.get(name);\n }\n getAll(...args) {\n var _a;\n const all = Array.from(this._parsed);\n if (!args.length) {\n return all.map(([_, value]) => value);\n }\n const name = typeof args[0] === \"string\" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;\n return all.filter(([n]) => n === name).map(([_, value]) => value);\n }\n has(name) {\n return this._parsed.has(name);\n }\n set(...args) {\n const [name, value] = args.length === 1 ? [args[0].name, args[0].value] : args;\n const map = this._parsed;\n map.set(name, { name, value });\n this._headers.set(\n \"cookie\",\n Array.from(map).map(([_, value2]) => stringifyCookie(value2)).join(\"; \")\n );\n return this;\n }\n /**\n * Delete the cookies matching the passed name or names in the request.\n */\n delete(names) {\n const map = this._parsed;\n const result = !Array.isArray(names) ? map.delete(names) : names.map((name) => map.delete(name));\n this._headers.set(\n \"cookie\",\n Array.from(map).map(([_, value]) => stringifyCookie(value)).join(\"; \")\n );\n return result;\n }\n /**\n * Delete all the cookies in the cookies in the request.\n */\n clear() {\n this.delete(Array.from(this._parsed.keys()));\n return this;\n }\n /**\n * Format the cookies in the request as a string for logging\n */\n [Symbol.for(\"edge-runtime.inspect.custom\")]() {\n return `RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;\n }\n toString() {\n return [...this._parsed.values()].map((v) => `${v.name}=${encodeURIComponent(v.value)}`).join(\"; \");\n }\n};\n\n// src/response-cookies.ts\nvar ResponseCookies = class {\n constructor(responseHeaders) {\n /** @internal */\n this._parsed = /* @__PURE__ */ new Map();\n var _a, _b, _c;\n this._headers = responseHeaders;\n const setCookie = (_c = (_b = (_a = responseHeaders.getSetCookie) == null ? void 0 : _a.call(responseHeaders)) != null ? _b : responseHeaders.get(\"set-cookie\")) != null ? _c : [];\n const cookieStrings = Array.isArray(setCookie) ? setCookie : splitCookiesString(setCookie);\n for (const cookieString of cookieStrings) {\n const parsed = parseSetCookie(cookieString);\n if (parsed)\n this._parsed.set(parsed.name, parsed);\n }\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-get CookieStore#get} without the Promise.\n */\n get(...args) {\n const key = typeof args[0] === \"string\" ? args[0] : args[0].name;\n return this._parsed.get(key);\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-getAll CookieStore#getAll} without the Promise.\n */\n getAll(...args) {\n var _a;\n const all = Array.from(this._parsed.values());\n if (!args.length) {\n return all;\n }\n const key = typeof args[0] === \"string\" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;\n return all.filter((c) => c.name === key);\n }\n has(name) {\n return this._parsed.has(name);\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-set CookieStore#set} without the Promise.\n */\n set(...args) {\n const [name, value, cookie] = args.length === 1 ? [args[0].name, args[0].value, args[0]] : args;\n const map = this._parsed;\n map.set(name, normalizeCookie({ name, value, ...cookie }));\n replace(map, this._headers);\n return this;\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-delete CookieStore#delete} without the Promise.\n */\n delete(...args) {\n const [name, options] = typeof args[0] === \"string\" ? [args[0]] : [args[0].name, args[0]];\n return this.set({ ...options, name, value: \"\", expires: /* @__PURE__ */ new Date(0) });\n }\n [Symbol.for(\"edge-runtime.inspect.custom\")]() {\n return `ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;\n }\n toString() {\n return [...this._parsed.values()].map(stringifyCookie).join(\"; \");\n }\n};\nfunction replace(bag, headers) {\n headers.delete(\"set-cookie\");\n for (const [, value] of bag) {\n const serialized = stringifyCookie(value);\n headers.append(\"set-cookie\", serialized);\n }\n}\nfunction normalizeCookie(cookie = { name: \"\", value: \"\" }) {\n if (typeof cookie.expires === \"number\") {\n cookie.expires = new Date(cookie.expires);\n }\n if (cookie.maxAge) {\n cookie.expires = new Date(Date.now() + cookie.maxAge * 1e3);\n }\n if (cookie.path === null || cookie.path === void 0) {\n cookie.path = \"/\";\n }\n return cookie;\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n RequestCookies,\n ResponseCookies,\n parseCookie,\n parseSetCookie,\n stringifyCookie\n});\n","\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar token_error_exports = {};\n__export(token_error_exports, {\n VercelOidcTokenError: () => VercelOidcTokenError\n});\nmodule.exports = __toCommonJS(token_error_exports);\nclass VercelOidcTokenError extends Error {\n constructor(message, cause) {\n super(message);\n this.name = \"VercelOidcTokenError\";\n this.cause = cause;\n }\n toString() {\n if (this.cause) {\n return `${this.name}: ${this.message}: ${this.cause}`;\n }\n return `${this.name}: ${this.message}`;\n }\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n VercelOidcTokenError\n});\n","unable to read source [project]/node_modules/.pnpm/workflow@4.0.1-beta.26_@aws-sdk+client-sts@3.940.0_@opentelemetry+api@1.9.0_babel-plugi_59e16b84a7e51de3ccd055db63660cbb/node_modules/workflow/src/api.ts","/**__internal_workflows{\"workflows\":{\"app/api/cloud/fix-workflow/workflow.ts\":{\"cloudFixWorkflow\":{\"workflowId\":\"workflow//app/api/cloud/fix-workflow/workflow.ts//cloudFixWorkflow\"}}},\"steps\":{\"app/api/cloud/fix-workflow/workflow.ts\":{\"analyzeLogsWithAgent\":{\"stepId\":\"step//app/api/cloud/fix-workflow/workflow.ts//analyzeLogsWithAgent\"},\"createD3kSandbox\":{\"stepId\":\"step//app/api/cloud/fix-workflow/workflow.ts//createD3kSandbox\"},\"createGitHubPR\":{\"stepId\":\"step//app/api/cloud/fix-workflow/workflow.ts//createGitHubPR\"},\"fetchRealLogs\":{\"stepId\":\"step//app/api/cloud/fix-workflow/workflow.ts//fetchRealLogs\"},\"updateWorkflowProgressStep\":{\"stepId\":\"step//app/api/cloud/fix-workflow/workflow.ts//updateWorkflowProgressStep\"},\"uploadToBlob\":{\"stepId\":\"step//app/api/cloud/fix-workflow/workflow.ts//uploadToBlob\"}}}}*/;\n/**\n * Cloud Fix Workflow Function - Core workflow logic\n *\n * This file contains ONLY the workflow function and step wrappers.\n * It does NOT import workflow/api to avoid bundler issues.\n */ /**\n * Main workflow function that orchestrates the fix process\n */ export async function cloudFixWorkflow(params) {\n throw new Error(\"You attempted to execute workflow cloudFixWorkflow function directly. To start a workflow, use start(cloudFixWorkflow) from workflow/api\");\n}\ncloudFixWorkflow.workflowId = \"workflow//app/api/cloud/fix-workflow/workflow.ts//cloudFixWorkflow\";\n// Step function wrappers that dynamically import the actual implementations\nasync function createD3kSandbox(repoUrl, branch, projectName, vercelToken, vercelOidcToken) {\n const { createD3kSandbox } = await import(\"./steps\");\n return createD3kSandbox(repoUrl, branch, projectName, vercelToken, vercelOidcToken);\n}\nasync function fetchRealLogs(mcpUrlOrDevUrl, bypassToken, sandboxDevUrl, clsData, mcpError, beforeScreenshotUrlFromStep0) {\n const { fetchRealLogs } = await import(\"./steps\");\n return fetchRealLogs(mcpUrlOrDevUrl, bypassToken, sandboxDevUrl, clsData, mcpError, beforeScreenshotUrlFromStep0);\n}\nasync function analyzeLogsWithAgent(logAnalysis, devUrl) {\n const { analyzeLogsWithAgent } = await import(\"./steps\");\n return analyzeLogsWithAgent(logAnalysis, devUrl);\n}\nasync function uploadToBlob(fixProposal, projectName, logAnalysis, devUrl, beforeScreenshotUrl, gitDiff) {\n const { uploadToBlob } = await import(\"./steps\");\n return uploadToBlob(fixProposal, projectName, logAnalysis, devUrl, beforeScreenshotUrl, gitDiff);\n}\nasync function createGitHubPR(fixProposal, blobUrl, repoOwner, repoName, baseBranch, projectName) {\n const { createGitHubPR } = await import(\"./steps\");\n return createGitHubPR(fixProposal, blobUrl, repoOwner, repoName, baseBranch, projectName);\n}\n// Step wrapper for updating workflow progress (uses dynamic import like other steps)\nasync function updateWorkflowProgressStep(userId, runId, projectName, timestamp, stepNumber, currentStep, sandboxUrl) {\n const { updateWorkflowProgress } = await import(\"@/lib/workflow-storage\");\n return updateWorkflowProgress(userId, runId, projectName, timestamp, stepNumber, currentStep, sandboxUrl);\n}\n","import { start } from \"workflow/api\"\nimport { cloudFixWorkflow } from \"./workflow\"\n\n/**\n * POST /api/cloud/fix-workflow\n * HTTP endpoint that starts the workflow using the Workflow SDK\n */\nexport async function POST(request: Request) {\n try {\n const body = await request.json()\n const { devUrl, projectName, repoOwner, repoName, baseBranch } = body\n\n // Validate required fields\n if (!devUrl || !projectName) {\n return Response.json({ error: \"Missing required fields: devUrl, projectName\" }, { status: 400 })\n }\n\n console.log(`[API] Starting fix workflow for ${projectName}`)\n\n // Start the workflow using the Workflow SDK\n // @ts-expect-error - Workflow SDK types are incomplete\n const workflowRun = await start(cloudFixWorkflow, {\n devUrl,\n projectName,\n repoOwner,\n repoName,\n baseBranch: baseBranch || \"main\"\n })\n\n // @ts-expect-error - Workflow SDK types are incomplete\n console.log(`[API] Workflow started: ${workflowRun.id}`)\n\n // Wait for workflow to complete (workflows are durable and will continue even if this times out)\n // @ts-expect-error - Workflow SDK types are incomplete\n const result = await workflowRun.result()\n\n console.log(`[API] Workflow completed: ${result.status}`)\n\n return result\n } catch (error) {\n console.error(\"[API] Error starting workflow:\", error)\n return Response.json(\n {\n error: error instanceof Error ? error.message : \"Unknown error\",\n details: error instanceof Error ? error.stack : undefined\n },\n { status: 500 }\n )\n }\n}\n","import { AppRouteRouteModule } from \"next/dist/esm/server/route-modules/app-route/module.compiled\";\nimport { RouteKind } from \"next/dist/esm/server/route-kind\";\nimport { patchFetch as _patchFetch } from \"next/dist/esm/server/lib/patch-fetch\";\nimport { addRequestMeta, getRequestMeta } from \"next/dist/esm/server/request-meta\";\nimport { getTracer, SpanKind } from \"next/dist/esm/server/lib/trace/tracer\";\nimport { setReferenceManifestsSingleton } from \"next/dist/esm/server/app-render/encryption-utils\";\nimport { createServerModuleMap } from \"next/dist/esm/server/app-render/action-utils\";\nimport { normalizeAppPath } from \"next/dist/esm/shared/lib/router/utils/app-paths\";\nimport { NodeNextRequest, NodeNextResponse } from \"next/dist/esm/server/base-http/node\";\nimport { NextRequestAdapter, signalFromNodeResponse } from \"next/dist/esm/server/web/spec-extension/adapters/next-request\";\nimport { BaseServerSpan } from \"next/dist/esm/server/lib/trace/constants\";\nimport { getRevalidateReason } from \"next/dist/esm/server/instrumentation/utils\";\nimport { sendResponse } from \"next/dist/esm/server/send-response\";\nimport { fromNodeOutgoingHttpHeaders, toNodeOutgoingHttpHeaders } from \"next/dist/esm/server/web/utils\";\nimport { getCacheControlHeader } from \"next/dist/esm/server/lib/cache-control\";\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from \"next/dist/esm/lib/constants\";\nimport { NoFallbackError } from \"next/dist/esm/shared/lib/no-fallback-error.external\";\nimport { CachedRouteKind } from \"next/dist/esm/server/response-cache\";\nimport * as userland from \"INNER_APP_ROUTE\";\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"\"\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: \"/api/cloud/fix-workflow/route\",\n pathname: \"/api/cloud/fix-workflow\",\n filename: \"route\",\n bundlePath: \"\"\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: \"[project]/mcp-server/app/api/cloud/fix-workflow/route.ts\",\n nextConfigOutput,\n userland\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule;\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage\n });\n}\nexport { routeModule, workAsyncStorage, workUnitAsyncStorage, serverHooks, patchFetch, };\nexport async function handler(req, res, ctx) {\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint());\n }\n let srcPage = \"/api/cloud/fix-workflow/route\";\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/';\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/';\n }\n const multiZoneDraftMode = process.env.__NEXT_MULTI_ZONE_DRAFT_MODE;\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode\n });\n if (!prepareResult) {\n res.statusCode = 400;\n res.end('Bad Request');\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n return null;\n }\n const { buildId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest } = prepareResult;\n const normalizedSrcPage = normalizeAppPath(srcPage);\n let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || prerenderManifest.routes[resolvedPathname]);\n const render404 = async ()=>{\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext == null ? void 0 : routerServerContext.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false);\n } else {\n res.end('This page could not be found');\n }\n return null;\n };\n if (isIsr && !isDraftMode) {\n const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]);\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage];\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.experimental.adapterPath) {\n return await render404();\n }\n throw new NoFallbackError();\n }\n }\n }\n let cacheKey = null;\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname;\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey;\n }\n const supportsDynamicResponse = // If we're in development, we always support dynamic HTML\n routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isIsr;\n // This is a revalidation request if the request is for a static\n // page and it is not being resumed from a postponed render and\n // it is not a dynamic RSC request then it is a revalidation\n // request.\n const isStaticGeneration = isIsr && !supportsDynamicResponse;\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setReferenceManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest,\n serverModuleMap: createServerModuleMap({\n serverActionsManifest\n })\n });\n }\n const method = req.method || 'GET';\n const tracer = getTracer();\n const activeSpan = tracer.getActiveScopeSpan();\n const context = {\n params,\n prerenderManifest,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts)\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n supportsDynamicResponse,\n incrementalCache: getRequestMeta(req, 'incrementalCache'),\n cacheLifeProfiles: nextConfig.cacheLife,\n waitUntil: ctx.waitUntil,\n onClose: (cb)=>{\n res.on('close', cb);\n },\n onAfterTaskError: undefined,\n onInstrumentationRequestError: (error, _request, errorContext, silenceLog)=>routeModule.onRequestError(req, error, errorContext, silenceLog, routerServerContext)\n },\n sharedContext: {\n buildId\n }\n };\n const nodeNextReq = new NodeNextRequest(req);\n const nodeNextRes = new NodeNextResponse(res);\n const nextReq = NextRequestAdapter.fromNodeNextRequest(nodeNextReq, signalFromNodeResponse(res));\n try {\n const invokeRouteModule = async (span)=>{\n return routeModule.handle(nextReq, context).finally(()=>{\n if (!span) return;\n span.setAttributes({\n 'http.status_code': res.statusCode,\n 'next.rsc': false\n });\n const rootSpanAttributes = tracer.getRootSpanAttributes();\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return;\n }\n if (rootSpanAttributes.get('next.span_type') !== BaseServerSpan.handleRequest) {\n console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);\n return;\n }\n const route = rootSpanAttributes.get('next.route');\n if (route) {\n const name = `${method} ${route}`;\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name\n });\n span.updateName(name);\n } else {\n span.updateName(`${method} ${srcPage}`);\n }\n });\n };\n const isMinimalMode = Boolean(process.env.MINIMAL_MODE || getRequestMeta(req, 'minimalMode'));\n const handleResponse = async (currentSpan)=>{\n var _cacheEntry_value;\n const responseGenerator = async ({ previousCacheEntry })=>{\n try {\n if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) {\n res.statusCode = 404;\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED');\n res.end('This page could not be found');\n return null;\n }\n const response = await invokeRouteModule(currentSpan);\n req.fetchMetrics = context.renderOpts.fetchMetrics;\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil;\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil);\n pendingWaitUntil = undefined;\n }\n }\n const cacheTags = context.renderOpts.collectedTags;\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob();\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers);\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags;\n }\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type;\n }\n const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= INFINITE_CACHE ? false : context.renderOpts.collectedRevalidate;\n const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= INFINITE_CACHE ? undefined : context.renderOpts.collectedExpire;\n // Create the cache entry for the response.\n const cacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers\n },\n cacheControl: {\n revalidate,\n expire\n }\n };\n return cacheEntry;\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, context.renderOpts.pendingWaitUntil);\n return null;\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n throw err;\n }\n };\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode\n });\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return null;\n }\n if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== CachedRouteKind.APP_ROUTE) {\n var _cacheEntry_value1;\n throw Object.defineProperty(new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), \"__NEXT_ERROR_CODE\", {\n value: \"E701\",\n enumerable: false,\n configurable: true\n });\n }\n if (!isMinimalMode) {\n res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT');\n }\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');\n }\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers);\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER);\n }\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) {\n headers.set('Cache-Control', getCacheControlHeader(cacheEntry.cacheControl));\n }\n await sendResponse(nodeNextReq, nodeNextRes, // @ts-expect-error - Argument of type 'Buffer<ArrayBufferLike>' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200\n }));\n return null;\n };\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (activeSpan) {\n await handleResponse(activeSpan);\n } else {\n await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(BaseServerSpan.handleRequest, {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url\n }\n }, handleResponse));\n }\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n // rethrow so that we can handle serving error page\n // If this is during static generation, throw the error again.\n if (isIsr) throw err;\n // Otherwise, send a 500 response.\n await sendResponse(nodeNextReq, nodeNextRes, new Response(null, {\n status: 500\n }));\n return null;\n }\n}\n\n//# sourceMappingURL=app-route.js.map\n"],"names":["process","env","NEXT_RUNTIME","module","exports","require","__NEXT_EXPERIMENTAL_REACT","NODE_ENV","TURBOPACK","vendored","React"],"mappings":"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","ignoreList":[0,1,2,3,7]}
@@ -267,108 +267,7 @@ ${e.stdout||"(no output)"}`),e.stderr&&console.log(` ⚠️ Chrome CDP test std
267
267
  ${t.stdout||"(no output)"}`),t.stderr&&console.log(` ⚠️ spawn() test stderr: ${t.stderr}`)}catch(e){console.log(` ❌ spawn() test failed: ${e instanceof Error?e.message:String(e)}`)}if(console.log(" 🔍 ===== END spawn() TEST ====="),await c.runCommand({cmd:"sh",args:["-c",`mkdir -p /home/vercel-sandbox/.d3k/logs && cd ${e} && MCP_SKIP_PERMISSIONS=true d3k --no-tui --debug --headless --browser ${I} > /home/vercel-sandbox/.d3k/logs/d3k-startup.log 2>&1`],detached:!0}),o&&console.log(" ✅ d3k started in detached mode (headless)"),o&&console.log(" ⏳ Waiting for d3k to start..."),await new Promise(e=>setTimeout(e,5e3)),o){console.log(" 🔍 Checking d3k process status...");let e=await l(c,{cmd:"sh",args:["-c","ps aux | grep -E '(d3k|pnpm|next)' | grep -v grep || echo 'No d3k/pnpm/next processes found'"]});console.log(` 📋 Process list:
268
268
  ${e.stdout}`),console.log(" 🔍 Checking for d3k log files...");let t=await l(c,{cmd:"sh",args:["-c","ls -lah /home/vercel-sandbox/.d3k/logs/ 2>/dev/null || echo 'No .d3k/logs directory found'"]});console.log(` 📋 Log files:
269
269
  ${t.stdout}`);let r=await l(c,{cmd:"sh",args:["-c",'for log in /home/vercel-sandbox/.d3k/logs/*.log; do [ -f "$log" ] && echo "=== $log ===" && head -50 "$log" || true; done 2>/dev/null || true']});console.log(` 📋 Initial log content:
270
- ${r.stdout}`)}o&&console.log(" ⏳ Waiting for dev server on port 3000...");try{await cG(c,3e3,12e4,o)}catch(e){console.log(` ⚠️ Dev server failed to start: ${e instanceof Error?e.message:String(e)}`),console.log(" 🔍 Checking d3k logs for errors...");try{let e=await l(c,{cmd:"sh",args:["-c","cat /home/vercel-sandbox/.d3k/logs/*.log 2>/dev/null || echo 'No log files found'"]});0===e.exitCode&&(console.log(" 📋 All d3k logs:"),console.log(e.stdout))}catch(e){console.log(` ⚠️ Could not read d3k logs: ${e instanceof Error?e.message:String(e)}`)}throw e}let E=c.domain(3e3);o&&console.log(` ✅ Dev server ready: ${E}`),o&&console.log(" ⏳ Waiting for MCP server..."),await cG(c,3684,6e4,o);let Q=c.domain(3684);o&&console.log(` ✅ MCP server ready: ${Q}`),o&&console.log(" ⏳ Waiting for d3k to initialize Chrome and populate CDP URL...");let C=await cV(c,3e4,o);if(C)o&&console.log(` ✅ CDP URL ready: ${C}`);else{console.log(" ⚠️ CDP URL not found - chrome-devtools MCP features may not work"),console.log(" 📋 === d3k LOG DUMP (CDP URL not found) ===");try{let e=await l(c,{cmd:"sh",args:["-c",'for log in /home/vercel-sandbox/.d3k/logs/*.log; do [ -f "$log" ] && echo "\\n=== $log ===" && cat "$log" || true; done 2>/dev/null || echo "No log files found"']});console.log(e.stdout)}catch(e){console.log(` ⚠️ Could not read logs: ${e instanceof Error?e.message:String(e)}`)}console.log(" 📋 === END d3k LOG DUMP ===")}if(o){console.log(" 📋 === d3k FULL LOG DUMP (after initialization) ===");let e=await l(c,{cmd:"sh",args:["-c",'for log in /home/vercel-sandbox/.d3k/logs/*.log; do [ -f "$log" ] && echo "\\n=== $log ===" && cat "$log" || true; done 2>/dev/null || echo "No log files found"']});console.log(e.stdout),console.log(" 📋 === END d3k LOG DUMP ===")}console.log(` 🔍 Testing dev server accessibility at ${E}...`);try{let e=await fetch(E,{method:"GET",redirect:"manual"});console.log(` ✅ Dev server responded with status: ${e.status} ${e.statusText}`),(308===e.status||401===e.status)&&console.log(` ℹ️ Dev server returned ${e.status}, this is expected for protected deployments (use bypass token)`)}catch(e){console.log(` ⚠️ WARNING: Could not fetch dev server: ${e instanceof Error?e.message:String(e)}`)}return o&&console.log(" ✅ d3k sandbox ready!"),{sandbox:c,devUrl:E,mcpUrl:Q,projectName:a,bypassToken:void 0,cleanup:async()=>{o&&console.log(" 🧹 Cleaning up sandbox..."),await c.stop(),o&&console.log(" ✅ Sandbox stopped")}}}catch(e){try{await c.stop()}catch{}throw e}}async function cG(e,t,r,n=!1){let i,A,s=Date.now(),o=e.domain(t);for(;Date.now()-s<r;){try{let e=await fetch(o,{method:"HEAD",redirect:"manual"});if(A=e.status,n&&e.status!==A&&console.log(` 🔍 Port ${t} check: status ${e.status} ${e.statusText}`),e.ok||404===e.status||308===e.status||401===e.status){n&&console.log(` ✅ Port ${t} is ready (status ${e.status})`);return}e.status>=400&&404!==e.status&&(i=`HTTP ${e.status} ${e.statusText}`,n&&console.log(` ⚠️ Port ${t} returned ${i}`))}catch(r){let e=r instanceof Error?r.message:String(r);i!==e&&(i=e,n&&console.log(` ⚠️ Port ${t} check failed: ${e}`))}await new Promise(e=>setTimeout(e,1e3))}throw Error(`Server on port ${t} did not become ready within ${r}ms. Last status: ${A??"no response"}, Last error: ${i??"none"}`)}async function cV(e,t,r=!1){let n=Date.now(),i=null;for(;Date.now()-n<t;){try{let t=await e.runCommand({cmd:"sh",args:["-c",'for f in /home/vercel-sandbox/.d3k/*.json; do [ -f "$f" ] && cat "$f" 2>/dev/null && echo ""; done']}),A="";for await(let e of t.logs())"stdout"===e.stream&&(A+=e.data);await t.wait();let s={exitCode:t.exitCode,stdout:A};if(0===s.exitCode&&s.stdout.trim()){for(let e of s.stdout.trim().split("\n"))if(e.trim().startsWith("{"))try{let t=JSON.parse(e);if(t.cdpUrl?.startsWith("ws://"))return i=t.cdpUrl,r&&console.log(` ✅ CDP URL found: ${i}`),i}catch{}}r&&(Date.now()-n)%5e3<1e3&&console.log(` ⏳ Waiting for CDP URL... (${Math.round((Date.now()-n)/1e3)}s)`)}catch(e){r&&console.log(` ⚠️ Error checking CDP URL: ${e instanceof Error?e.message:String(e)}`)}await new Promise(e=>setTimeout(e,1e3))}return r&&console.log(` ⚠️ CDP URL not available after ${t}ms - chrome-devtools MCP may not work`),null}e.i(43699);var cZ=e.i(75525),cJ=Object.defineProperty,cj=Object.getOwnPropertyNames,cW=(e,t)=>cJ(e,"name",{value:t,configurable:!0}),cz=(e,t)=>function(){return e&&(t=(0,e[cj(e)[0]])(e=0)),t},cq=(e,t)=>{for(var r in t)cJ(e,r,{get:t[r],enumerable:!0})},cX={};async function cK(e,t){console.log(`[Step 1] Identifying affected pages from ${e.length} changed files...`);let r=[/\/pages\/(.*)\.(tsx?|jsx?)$/,/\/app\/(.*)\/(page|route)\.(tsx?|jsx?)$/,/\/routes\/(.*)\.(tsx?|jsx?)$/,/\/src\/routes\/(.*)\.(svelte|tsx?|jsx?)$/,/\.page\.(tsx?|jsx?)$/,/\.route\.(tsx?|jsx?)$/],n=[];for(let t of e)for(let e of r){let r=t.match(e);if(r){let e=r[1]||"";(e=(e=e.replace(/\/(page|route|index)$/,""))||"/").startsWith("/")||(e=`/${e}`),n.includes(e)||n.push(e);break}}if(console.log(`[Step 1] Detected ${n.length} pages from file patterns`),t&&t.length>10){console.log("[Step 1] Analyzing PR description for mentioned pages...");let r=ua({apiKey:process.env.AI_GATEWAY_API_KEY,baseURL:"https://ai-gateway.vercel.sh/v1/ai"})("anthropic/claude-sonnet-4-20250514"),i=`Analyze this PR description and extract any URL paths or routes that are mentioned or affected.
271
-
272
- PR Description:
273
- ${t}
274
-
275
- Changed files:
276
- ${e.join("\n")}
277
-
278
- Return ONLY a JSON array of paths (e.g., ["/", "/about", "/api/users"]). If no specific paths are mentioned, return an empty array [].
279
- Do not include explanations, just the JSON array.`;try{let{text:e}=await cR({model:r,prompt:i,maxTokens:500}),t=e.match(/\[.*\]/);if(t){let e=JSON.parse(t[0]);for(let t of e)t&&!n.includes(t)&&n.push(t);console.log(`[Step 1] AI found ${e.length} additional pages`)}}catch(e){console.error("[Step 1] AI analysis failed:",e)}}return 0===n.length&&(console.log("[Step 1] No specific pages detected, checking homepage"),n.push("/")),console.log(`[Step 1] Final pages to check: ${n.join(", ")}`),n}async function c0(e,t){console.log(`[Step 2] Crawling ${t.length} pages on ${e}`);let r=[];for(let n of t){console.log(`[Step 2] Crawling: ${n}`);try{let t=`${e}${n}`,i=await fetch(t,{method:"GET",headers:{"User-Agent":"dev3000-pr-checker/1.0",Accept:"text/html,application/json,*/*"}}),A=i.headers.get("content-type")||"",s=A.includes("text/html"),o=A.includes("application/json"),a="";(s||o)&&(a=(await i.text()).substring(0,1e3)),r.push({page:n,url:t,status:i.status,statusText:i.statusText,contentType:A,bodyPreview:a,headers:Object.fromEntries(i.headers.entries())}),console.log(`[Step 2] ${n}: ${i.status} ${i.statusText}`)}catch(t){console.error(`[Step 2] Failed to crawl ${n}:`,t),r.push({page:n,url:`${e}${n}`,status:0,statusText:"Fetch failed",error:t instanceof Error?t.message:String(t)})}}return console.log(`[Step 2] Crawled ${r.length} pages`),r}async function c1(e,t,r,n){console.log("[Step 3] Verifying PR claims against actual behavior...");let i=ua({apiKey:process.env.AI_GATEWAY_API_KEY,baseURL:"https://ai-gateway.vercel.sh/v1/ai"})("anthropic/claude-sonnet-4-20250514"),A=`You are verifying a Pull Request for accuracy. Compare the PR's claims with the actual deployment behavior.
280
-
281
- PR Title: ${e}
282
-
283
- PR Description:
284
- ${t}
285
-
286
- Changed Files:
287
- ${n.join("\n")}
288
-
289
- Crawl Results from Preview Deployment:
290
- ${JSON.stringify(r,null,2)}
291
-
292
- Your task:
293
- 1. Analyze whether the PR's claimed changes match the actual behavior shown in the crawl results
294
- 2. Check if pages load successfully (200 status codes)
295
- 3. Identify any errors or unexpected behavior
296
- 4. Verify the changes work as described
297
-
298
- Respond in this exact JSON format:
299
- {
300
- "allChecksPassed": boolean,
301
- "summary": "Brief summary of findings",
302
- "details": {
303
- "claimsVerified": ["List of claims that were verified"],
304
- "issues": ["List of any issues found"],
305
- "warnings": ["List of warnings"]
306
- }
307
- }
308
-
309
- Only return valid JSON, no additional text.`;try{let{text:e}=await cR({model:i,prompt:A,maxTokens:1500}),t=e.match(/\{[\s\S]*\}/);if(t){let e=JSON.parse(t[0]);return console.log(`[Step 3] Verification complete: ${e.allChecksPassed?"PASSED":"FAILED"}`),e}return console.error("[Step 3] Failed to parse AI response"),{allChecksPassed:!1,summary:"Verification failed - could not parse AI response",details:{claimsVerified:[],issues:["AI verification returned invalid format"],warnings:[]}}}catch(e){return console.error("[Step 3] Verification failed:",e),{allChecksPassed:!1,summary:`Verification error: ${e instanceof Error?e.message:String(e)}`,details:{claimsVerified:[],issues:[e instanceof Error?e.message:String(e)],warnings:[]}}}}async function c2(e,t){console.log(`[Step 4] Checking performance for ${t.length} pages`);let r=[];for(let n of t){console.log(`[Step 4] Measuring performance: ${n}`);try{let t=`${e}${n}`,i=Date.now(),A=await fetch(t,{method:"GET",headers:{"User-Agent":"dev3000-pr-checker/1.0",Accept:"text/html,*/*"}}),s=Date.now()-i,o=Number.parseInt(A.headers.get("content-length")||"0",10);r.push({page:n,loadTime:s,contentLength:o,status:A.status,isSlow:s>2e3}),console.log(`[Step 4] ${n}: ${s}ms, ${o} bytes`)}catch(e){console.error(`[Step 4] Performance check failed for ${n}:`,e),r.push({page:n,loadTime:0,contentLength:0,status:0,error:e instanceof Error?e.message:String(e),isSlow:!1})}}let n=r.filter(e=>e.isSlow);return console.log(`[Step 4] Performance check complete. ${n.length} slow pages found.`),{results:r,slowPagesCount:n.length,summary:{avgLoadTime:r.reduce((e,t)=>e+t.loadTime,0)/r.length,slowPages:n.map(e=>e.page)}}}async function c4(e){console.log("[Step 5] Generating comprehensive report...");let{prTitle:t,prBody:r,prNumber:n,previewUrl:i,changedFiles:A,pagesToCheck:s,crawlResults:o,verification:a,performanceResults:l,repoOwner:u,repoName:c}=e,d=`# PR Verification Report
310
-
311
- `;for(let e of(d+=`**PR**: #${n} - ${t}
312
- **Repository**: ${u}/${c}
313
- **Preview URL**: ${i}
314
- **Timestamp**: ${new Date().toISOString()}
315
-
316
- ## Summary
317
-
318
- ${a.allChecksPassed?"✅":"❌"} ${a.summary}
319
-
320
- ## Changed Files
321
-
322
- `,A))d+=`- ${e}
323
- `;for(let e of(d+=`
324
- ## Pages Checked
325
-
326
- `,s))d+=`- ${e}
327
- `;if(d+=`
328
- ## Verification Results
329
-
330
- `,a.details.claimsVerified.length>0){for(let e of(d+=`### Claims Verified \u2705
331
-
332
- `,a.details.claimsVerified))d+=`- ${e}
333
- `;d+=`
334
- `}if(a.details.issues.length>0){for(let e of(d+=`### Issues Found \u274C
335
-
336
- `,a.details.issues))d+=`- ${e}
337
- `;d+=`
338
- `}if(a.details.warnings.length>0){for(let e of(d+=`### Warnings \u26A0\uFE0F
339
-
340
- `,a.details.warnings))d+=`- ${e}
341
- `;d+=`
342
- `}for(let e of(d+=`## Crawl Results
343
-
344
- `,o)){let t=200===e.status?"✅":e.status>=400?"❌":"⚠️";d+=`### ${t} ${e.page}
345
-
346
- - **URL**: ${e.url}
347
- - **Status**: ${e.status} ${e.statusText}
348
- `,e.contentType&&(d+=`- **Content-Type**: ${e.contentType}
349
- `),e.error&&(d+=`- **Error**: ${e.error}
350
- `),d+=`
351
- `}if(d+=`## Performance Analysis
352
-
353
- **Average Load Time**: ${Math.round(l.summary.avgLoadTime)}ms
354
-
355
- `,l.slowPagesCount>0){for(let e of(d+=`\u26A0\uFE0F **Slow Pages** (>2s):
356
- `,l.summary.slowPages))d+=`- ${e}
357
- `;d+=`
358
- `}else d+=`\u2705 All pages loaded in under 2 seconds
359
-
360
- `;for(let e of(d+=`### Detailed Metrics
361
-
362
- `,l.results))d+=`- **${e.page}**: ${e.loadTime}ms (${e.contentLength} bytes)
363
- `;return d+=`
364
- ## PR Description
365
-
366
- ${r||"(No description provided)"}
367
-
368
- ---
369
-
370
- *Generated by dev3000 PR Checker*
371
- `,console.log(`[Step 5] Report generated (${d.length} characters)`),d}async function c9(e,t,r,n){console.log("[Step 6] Uploading report to blob storage...");let i=new Date().toISOString().replace(/[:.]/g,"-"),A=`pr-check-${t}-${r}-pr${n}-${i}.md`,s=await (0,q.put)(A,e,{access:"public",contentType:"text/markdown"});return console.log(`[Step 6] Report uploaded: ${s.url}`),{blobUrl:s.url,filename:A}}cq(cX,{checkPerformance:()=>c2,crawlPreviewPages:()=>c0,generateReport:()=>c4,identifyAffectedPages:()=>cK,uploadReport:()=>c9,verifyPRClaims:()=>c1});var c6=cz({"app/api/cloud/check-pr/steps.ts"(){cW(cK,"identifyAffectedPages"),cW(c0,"crawlPreviewPages"),cW(c1,"verifyPRClaims"),cW(c2,"checkPerformance"),cW(c4,"generateReport"),cW(c9,"uploadReport"),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/steps.ts//identifyAffectedPages",cK),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/steps.ts//crawlPreviewPages",c0),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/steps.ts//verifyPRClaims",c1),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/steps.ts//checkPerformance",c2),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/steps.ts//generateReport",c4),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/steps.ts//uploadReport",c9)}}),c3={};async function c5(e,t,r){let n=await e.runCommand({cmd:t,args:r}),i="",A="";for await(let e of n.logs())"stdout"===e.stream?i+=e.data:A+=e.data;return await n.wait(),{exitCode:n.exitCode,stdout:i,stderr:A}}async function c8(e,t,r,n,i="/vercel/sandbox"){console.log(`[Screenshot] Capturing ${n} screenshot of ${t}...`);let A=`
270
+ ${r.stdout}`)}o&&console.log(" ⏳ Waiting for dev server on port 3000...");try{await cG(c,3e3,12e4,o)}catch(e){console.log(` ⚠️ Dev server failed to start: ${e instanceof Error?e.message:String(e)}`),console.log(" 🔍 Checking d3k logs for errors...");try{let e=await l(c,{cmd:"sh",args:["-c","cat /home/vercel-sandbox/.d3k/logs/*.log 2>/dev/null || echo 'No log files found'"]});0===e.exitCode&&(console.log(" 📋 All d3k logs:"),console.log(e.stdout))}catch(e){console.log(` ⚠️ Could not read d3k logs: ${e instanceof Error?e.message:String(e)}`)}throw e}let E=c.domain(3e3);o&&console.log(` ✅ Dev server ready: ${E}`),o&&console.log(" ⏳ Waiting for MCP server..."),await cG(c,3684,6e4,o);let Q=c.domain(3684);o&&console.log(` ✅ MCP server ready: ${Q}`),o&&console.log(" ⏳ Waiting for d3k to initialize Chrome and populate CDP URL...");let C=await cV(c,3e4,o);if(C)o&&console.log(` ✅ CDP URL ready: ${C}`);else{console.log(" ⚠️ CDP URL not found - chrome-devtools MCP features may not work"),console.log(" 📋 === d3k LOG DUMP (CDP URL not found) ===");try{let e=await l(c,{cmd:"sh",args:["-c",'for log in /home/vercel-sandbox/.d3k/logs/*.log; do [ -f "$log" ] && echo "\\n=== $log ===" && cat "$log" || true; done 2>/dev/null || echo "No log files found"']});console.log(e.stdout)}catch(e){console.log(` ⚠️ Could not read logs: ${e instanceof Error?e.message:String(e)}`)}console.log(" 📋 === END d3k LOG DUMP ===")}if(o){console.log(" 📋 === d3k FULL LOG DUMP (after initialization) ===");let e=await l(c,{cmd:"sh",args:["-c",'for log in /home/vercel-sandbox/.d3k/logs/*.log; do [ -f "$log" ] && echo "\\n=== $log ===" && cat "$log" || true; done 2>/dev/null || echo "No log files found"']});console.log(e.stdout),console.log(" 📋 === END d3k LOG DUMP ===")}console.log(` 🔍 Testing dev server accessibility at ${E}...`);try{let e=await fetch(E,{method:"GET",redirect:"manual"});console.log(` ✅ Dev server responded with status: ${e.status} ${e.statusText}`),(308===e.status||401===e.status)&&console.log(` ℹ️ Dev server returned ${e.status}, this is expected for protected deployments (use bypass token)`)}catch(e){console.log(` ⚠️ WARNING: Could not fetch dev server: ${e instanceof Error?e.message:String(e)}`)}return o&&console.log(" ✅ d3k sandbox ready!"),{sandbox:c,devUrl:E,mcpUrl:Q,projectName:a,bypassToken:void 0,cleanup:async()=>{o&&console.log(" 🧹 Cleaning up sandbox..."),await c.stop(),o&&console.log(" ✅ Sandbox stopped")}}}catch(e){try{await c.stop()}catch{}throw e}}async function cG(e,t,r,n=!1){let i,A,s=Date.now(),o=e.domain(t);for(;Date.now()-s<r;){try{let e=await fetch(o,{method:"HEAD",redirect:"manual"});if(A=e.status,n&&e.status!==A&&console.log(` 🔍 Port ${t} check: status ${e.status} ${e.statusText}`),e.ok||404===e.status||308===e.status||401===e.status){n&&console.log(` ✅ Port ${t} is ready (status ${e.status})`);return}e.status>=400&&404!==e.status&&(i=`HTTP ${e.status} ${e.statusText}`,n&&console.log(` ⚠️ Port ${t} returned ${i}`))}catch(r){let e=r instanceof Error?r.message:String(r);i!==e&&(i=e,n&&console.log(` ⚠️ Port ${t} check failed: ${e}`))}await new Promise(e=>setTimeout(e,1e3))}throw Error(`Server on port ${t} did not become ready within ${r}ms. Last status: ${A??"no response"}, Last error: ${i??"none"}`)}async function cV(e,t,r=!1){let n=Date.now(),i=null;for(;Date.now()-n<t;){try{let t=await e.runCommand({cmd:"sh",args:["-c",'for f in /home/vercel-sandbox/.d3k/*.json; do [ -f "$f" ] && cat "$f" 2>/dev/null && echo ""; done']}),A="";for await(let e of t.logs())"stdout"===e.stream&&(A+=e.data);await t.wait();let s={exitCode:t.exitCode,stdout:A};if(0===s.exitCode&&s.stdout.trim()){for(let e of s.stdout.trim().split("\n"))if(e.trim().startsWith("{"))try{let t=JSON.parse(e);if(t.cdpUrl?.startsWith("ws://"))return i=t.cdpUrl,r&&console.log(` ✅ CDP URL found: ${i}`),i}catch{}}r&&(Date.now()-n)%5e3<1e3&&console.log(` ⏳ Waiting for CDP URL... (${Math.round((Date.now()-n)/1e3)}s)`)}catch(e){r&&console.log(` ⚠️ Error checking CDP URL: ${e instanceof Error?e.message:String(e)}`)}await new Promise(e=>setTimeout(e,1e3))}return r&&console.log(` ⚠️ CDP URL not available after ${t}ms - chrome-devtools MCP may not work`),null}e.i(43699);var cZ=e.i(75525),cJ=Object.defineProperty,cj=Object.getOwnPropertyNames,cW=(e,t)=>cJ(e,"name",{value:t,configurable:!0}),cz=(e,t)=>function(){return e&&(t=(0,e[cj(e)[0]])(e=0)),t},cq=(e,t)=>{for(var r in t)cJ(e,r,{get:t[r],enumerable:!0})},cX={};async function cK(e,t,r){let n=await e.runCommand({cmd:t,args:r}),i="",A="";for await(let e of n.logs())"stdout"===e.stream?i+=e.data:A+=e.data;return await n.wait(),{exitCode:n.exitCode,stdout:i,stderr:A}}async function c0(e,t,r,n,i="/vercel/sandbox"){console.log(`[Screenshot] Capturing ${n} screenshot of ${t}...`);let A=`
372
271
  const puppeteer = require('puppeteer-core');
373
272
 
374
273
  (async () => {
@@ -417,9 +316,9 @@ const puppeteer = require('puppeteer-core');
417
316
  process.exit(1);
418
317
  }
419
318
  })();
420
- `;try{let t=`${i}/_screenshot.js`,r=await c5(e,"sh",["-c",`cat > ${t} << 'SCRIPT_EOF'
319
+ `;try{let t=`${i}/_screenshot.js`,r=await cK(e,"sh",["-c",`cat > ${t} << 'SCRIPT_EOF'
421
320
  ${A}
422
- SCRIPT_EOF`]);if(0!==r.exitCode)return console.log(`[Screenshot] Failed to write script: ${r.stderr}`),null;let s=await e.runCommand({cmd:"node",args:[t],cwd:i}),o="",a="";for await(let e of s.logs())"stdout"===e.stream?o+=e.data:a+=e.data;await s.wait();let l=a.match(/PAGE_TITLE:(.*)/);if(l&&console.log(`[Screenshot] Page title: "${l[1]}"`),0!==s.exitCode)return console.log(`[Screenshot] Failed to capture: ${a}`),null;let u=o.trim();if(u&&u.length>100)return console.log(`[Screenshot] Captured ${n} screenshot (${u.length} bytes base64)`),u;return console.log("[Screenshot] No valid screenshot data returned"),null}catch(e){return console.log(`[Screenshot] Error: ${e instanceof Error?e.message:String(e)}`),null}}async function c7(e,t,r){try{let n=Buffer.from(e,"base64"),i=new Date().toISOString().replace(/[:.]/g,"-"),A=`screenshot-${t}-${r}-${i}.png`,s=await (0,q.put)(A,n,{access:"public",contentType:"image/png"});return console.log(`[Screenshot] Uploaded ${t} screenshot: ${s.url}`),s.url}catch(e){return console.log(`[Screenshot] Upload failed: ${e instanceof Error?e.message:String(e)}`),null}}async function de(e,t,r,n,i){console.log(`[Step 0] Creating d3k sandbox for ${r}...`),console.log(`[Step 0] Repository: ${e}`),console.log(`[Step 0] Branch: ${t}`),console.log(`[Step 0] VERCEL_OIDC_TOKEN from env: ${!!process.env.VERCEL_OIDC_TOKEN}`),console.log(`[Step 0] VERCEL_OIDC_TOKEN passed as param: ${!!i}`),console.log(`[Step 0] VERCEL_TOKEN available: ${!!process.env.VERCEL_TOKEN}`),console.log(`[Step 0] User access token provided: ${!!n}`),i&&!process.env.VERCEL_OIDC_TOKEN&&(process.env.VERCEL_OIDC_TOKEN=i,console.log("[Step 0] Set VERCEL_OIDC_TOKEN from workflow context"));let A=await cH({repoUrl:e,branch:t,projectDir:"",packageManager:"pnpm",debug:!0});console.log("[Step 0] Sandbox created successfully"),console.log(`[Step 0] Dev URL: ${A.devUrl}`),console.log(`[Step 0] MCP URL: ${A.mcpUrl}`),console.log("[Step 0] Getting Chromium path for screenshots...");let s="/tmp/chromium";try{let e=await c5(A.sandbox,"node",["-e","require('@sparticuz/chromium').executablePath().then(p => console.log(p))"]);0===e.exitCode&&e.stdout.trim()&&(s=e.stdout.trim(),console.log(`[Step 0] Chromium path: ${s}`))}catch{console.log(`[Step 0] Could not get chromium path, using default: ${s}`)}console.log("[Step 0] ===== CHROMIUM CDP TEST (d3k exact command) =====");try{let e=`
321
+ SCRIPT_EOF`]);if(0!==r.exitCode)return console.log(`[Screenshot] Failed to write script: ${r.stderr}`),null;let s=await e.runCommand({cmd:"node",args:[t],cwd:i}),o="",a="";for await(let e of s.logs())"stdout"===e.stream?o+=e.data:a+=e.data;await s.wait();let l=a.match(/PAGE_TITLE:(.*)/);if(l&&console.log(`[Screenshot] Page title: "${l[1]}"`),0!==s.exitCode)return console.log(`[Screenshot] Failed to capture: ${a}`),null;let u=o.trim();if(u&&u.length>100)return console.log(`[Screenshot] Captured ${n} screenshot (${u.length} bytes base64)`),u;return console.log("[Screenshot] No valid screenshot data returned"),null}catch(e){return console.log(`[Screenshot] Error: ${e instanceof Error?e.message:String(e)}`),null}}async function c1(e,t,r){try{let n=Buffer.from(e,"base64"),i=new Date().toISOString().replace(/[:.]/g,"-"),A=`screenshot-${t}-${r}-${i}.png`,s=await (0,q.put)(A,n,{access:"public",contentType:"image/png"});return console.log(`[Screenshot] Uploaded ${t} screenshot: ${s.url}`),s.url}catch(e){return console.log(`[Screenshot] Upload failed: ${e instanceof Error?e.message:String(e)}`),null}}async function c2(e,t,r,n,i){console.log(`[Step 0] Creating d3k sandbox for ${r}...`),console.log(`[Step 0] Repository: ${e}`),console.log(`[Step 0] Branch: ${t}`),console.log(`[Step 0] VERCEL_OIDC_TOKEN from env: ${!!process.env.VERCEL_OIDC_TOKEN}`),console.log(`[Step 0] VERCEL_OIDC_TOKEN passed as param: ${!!i}`),console.log(`[Step 0] VERCEL_TOKEN available: ${!!process.env.VERCEL_TOKEN}`),console.log(`[Step 0] User access token provided: ${!!n}`),i&&!process.env.VERCEL_OIDC_TOKEN&&(process.env.VERCEL_OIDC_TOKEN=i,console.log("[Step 0] Set VERCEL_OIDC_TOKEN from workflow context"));let A=await cH({repoUrl:e,branch:t,projectDir:"",packageManager:"pnpm",debug:!0});console.log("[Step 0] Sandbox created successfully"),console.log(`[Step 0] Dev URL: ${A.devUrl}`),console.log(`[Step 0] MCP URL: ${A.mcpUrl}`),console.log("[Step 0] Getting Chromium path for screenshots...");let s="/tmp/chromium";try{let e=await cK(A.sandbox,"node",["-e","require('@sparticuz/chromium').executablePath().then(p => console.log(p))"]);0===e.exitCode&&e.stdout.trim()&&(s=e.stdout.trim(),console.log(`[Step 0] Chromium path: ${s}`))}catch{console.log(`[Step 0] Could not get chromium path, using default: ${s}`)}console.log("[Step 0] ===== CHROMIUM CDP TEST (d3k exact command) =====");try{let e=`
423
322
  exec 2>&1
424
323
  echo "=== Chromium CDP Test (d3k exact command) ==="
425
324
  echo "Chromium path: ${s}"
@@ -498,9 +397,9 @@ LOADINGHTML
498
397
  fi
499
398
  echo ""
500
399
  echo "=== End d3k exact command test ==="
501
- `,t=await c5(A.sandbox,"bash",["-c",e]);console.log(`[Step 0] d3k Chrome test (exit ${t.exitCode}):
502
- ${t.stdout||"(no output)"}`),t.stderr&&console.log(`[Step 0] d3k Chrome test stderr: ${t.stderr}`)}catch(e){console.log(`[Step 0] d3k Chrome test error: ${e instanceof Error?e.message:String(e)}`)}console.log("[Step 0] ===== END d3k EXACT COMMAND TEST ====="),console.log("[Step 0] Capturing BEFORE screenshot...");let o=null;try{let e=await c8(A.sandbox,"http://localhost:3000",s,"before");e&&(o=await c7(e,"before",r))}catch(e){console.log(`[Step 0] Before screenshot failed: ${e instanceof Error?e.message:String(e)}`)}console.log("[Step 0] Capturing CLS metrics from inside sandbox...");let a=null,l=null;try{let e='curl -s -X POST http://localhost:3684/mcp -H "Content-Type: application/json" -d \'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"fix_my_app","arguments":{"mode":"snapshot","focusArea":"performance","returnRawData":true}}}\'';console.log("[Step 0] Executing MCP command inside sandbox..."),console.log(`[Step 0] MCP command: ${e.substring(0,200)}...`);let t="",r="",n=-1;try{let i=await c5(A.sandbox,"bash",["-c",e]);t=i.stdout,r=i.stderr,n=i.exitCode,console.log(`[Step 0] MCP command exit code: ${n}`),console.log(`[Step 0] MCP stdout length: ${t.length} bytes`),r&&console.log(`[Step 0] MCP stderr: ${r.substring(0,500)}`)}catch(t){let e=t instanceof Error?t.message:String(t);console.log(`[Step 0] sandbox.runCommand threw: ${e}`),l=`sandbox.runCommand failed: ${e}`}if(0===n&&t)try{let e=JSON.parse(t);if(e.result?.content){for(let t of e.result.content)if("text"===t.type&&t.text)try{a=JSON.parse(t.text),console.log("[Step 0] Successfully parsed CLS data");break}catch{a={rawOutput:t.text}}}console.log("[Step 0] CLS data captured:",JSON.stringify(a).substring(0,500))}catch(e){l=`Failed to parse MCP response: ${e instanceof Error?e.message:String(e)}`,console.log(`[Step 0] ${l}`),console.log(`[Step 0] Raw stdout: ${t.substring(0,1e3)}`)}else 0!==n&&!l&&(l=`MCP command failed with exit code ${n}`,console.log(`[Step 0] ${l}`),r&&console.log(`[Step 0] stderr: ${r}`))}catch(e){l=`MCP execution error: ${e instanceof Error?e.message:String(e)}`,console.log(`[Step 0] ${l}`)}console.log("[Step 0] === Dumping sandbox logs before returning ===");try{let e=await c5(A.sandbox,"sh",["-c",'for log in /home/vercel-sandbox/.d3k/logs/*.log; do [ -f "$log" ] && echo "=== $log ===" && tail -100 "$log" || true; done 2>/dev/null || echo "No log files found"']);console.log(e.stdout)}catch(e){console.log(`[Step 0] Failed to dump logs: ${e instanceof Error?e.message:String(e)}`)}console.log("[Step 0] === End sandbox log dump ==="),console.log("[Step 0] Capturing git diff from sandbox...");let u=null;try{let e=await c5(A.sandbox,"sh",["-c","cd /vercel/sandbox && git diff --no-color 2>/dev/null || echo 'No git diff available'"]);0===e.exitCode&&e.stdout.trim()&&"No git diff available"!==e.stdout.trim()?(u=e.stdout.trim(),console.log(`[Step 0] Git diff captured (${u.length} chars)`),console.log(`[Step 0] Git diff preview:
503
- ${u.substring(0,500)}...`)):console.log("[Step 0] No git changes detected in sandbox")}catch(e){console.log(`[Step 0] Failed to capture git diff: ${e instanceof Error?e.message:String(e)}`)}return{mcpUrl:A.mcpUrl,devUrl:A.devUrl,bypassToken:A.bypassToken,clsData:a,mcpError:l,beforeScreenshotUrl:o,chromiumPath:s,gitDiff:u}}async function dt(e,t,r,n,i,A){if(n)return console.log("[Step 1] Using CLS data captured in Step 0"),A&&console.log(`[Step 1] Before screenshot from Step 0: ${A}`),{logAnalysis:JSON.stringify(n,null,2),beforeScreenshotUrl:A||null};i&&console.log(`[Step 1] Note: MCP error from Step 0: ${i}`);let s=!!r,o=r||e,a=s?e:null;console.log(`[Step 1] Fetching logs from: ${o}`),console.log(`[Step 1] Using sandbox: ${s?"yes":"no"}`),a&&console.log(`[Step 1] MCP URL: ${a}`),console.log(`[Step 1] Bypass token: ${t?"provided":"not provided"}`);try{let e=t?`${o}?x-vercel-protection-bypass=${t}`:o;if(console.log(`[Step 1] Final URL: ${e.replace(t||"","***")}`),s&&a){console.log("[Step 1] Using d3k MCP server to capture CLS metrics and errors..."),console.log("[Step 1] Validating d3k MCP server access...");let t=new AbortController,r=setTimeout(()=>t.abort(),3e4);try{let e=await fetch(`${a}/mcp`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream"},body:JSON.stringify({jsonrpc:"2.0",id:0,method:"tools/list"}),signal:t.signal});if(clearTimeout(r),e.ok){let t=await e.text();try{let e=null;for(let r of t.split("\n"))if(r.startsWith("data: "))try{e=JSON.parse(r.substring(6));break}catch{}e||(e=JSON.parse(t));let r=e.result?.tools?.map(e=>e.name)||[];console.log(`[Step 1] \u2705 d3k MCP server accessible`),console.log(`[Step 1] Available tools (${r.length}): ${r.join(", ")}`);let n=r.some(e=>e.includes("chrome-devtools")),i=r.some(e=>e.includes("nextjs")),A=r.includes("fix_my_app");console.log(`[Step 1] Chrome DevTools MCP: ${n?"✅":"❌"}`),console.log(`[Step 1] Next.js DevTools MCP: ${i?"✅":"❌"}`),console.log(`[Step 1] fix_my_app tool: ${A?"✅":"❌"}`)}catch{console.log(`[Step 1] MCP server responded but couldn't parse tools list: ${t.substring(0,200)}`)}}else console.log(`[Step 1] \u26A0\uFE0F MCP server not accessible: ${e.status}`)}catch(n){clearTimeout(r);let e=n instanceof Error?n.message:String(n),t=n instanceof Error&&"AbortError"===n.name;console.log(`[Step 1] \u26A0\uFE0F Failed to validate MCP server: ${t?"Timed out after 30s":e}`)}console.log("[Step 1] Navigating browser to app URL...");let n=new AbortController,i=setTimeout(()=>n.abort(),3e4);try{let t=await fetch(`${a}/mcp`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream"},body:JSON.stringify({jsonrpc:"2.0",id:0,method:"tools/call",params:{name:"execute_browser_action",arguments:{action:"navigate",params:{url:e}}}}),signal:n.signal});clearTimeout(i),t.ok?console.log("[Step 1] Browser navigation completed"):console.log(`[Step 1] Browser navigation failed: ${t.status}`)}catch(t){clearTimeout(i);let e=t instanceof Error&&"AbortError"===t.name;console.log(`[Step 1] Browser navigation error: ${e?"Timed out after 30s":t instanceof Error?t.message:String(t)}`)}console.log("[Step 1] Waiting 5s for page load..."),await new Promise(e=>setTimeout(e,5e3));let A=null;console.log("[Step 1] Capturing 'before' screenshot...");let s=new AbortController,l=setTimeout(()=>s.abort(),3e4);try{let e=await fetch(`${a}/mcp`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream"},body:JSON.stringify({jsonrpc:"2.0",id:0,method:"tools/call",params:{name:"chrome-devtools_take_snapshot",arguments:{}}}),signal:s.signal});if(clearTimeout(l),e.ok){let t=await e.text();for(let e of t.split("\n"))if(e.startsWith("data: "))try{let t=JSON.parse(e.substring(6));if(t.result?.content){for(let e of t.result.content)if("image"===e.type&&e.data){let t=Buffer.from(e.data,"base64"),r=new Date().toISOString().replace(/[:.]/g,"-"),n=`screenshot-before-${r}.png`;A=(await (0,q.put)(n,t,{access:"public",contentType:"image/png"})).url,console.log(`[Step 1] \u2705 Before screenshot uploaded: ${A}`)}}}catch{}A||(console.log("[Step 1] Screenshot response received but no image data found"),console.log(`[Step 1] Response preview: ${t.substring(0,500)}`))}else console.log(`[Step 1] Screenshot request failed: ${e.status}`)}catch(t){clearTimeout(l);let e=t instanceof Error&&"AbortError"===t.name;console.log(`[Step 1] Screenshot capture error: ${e?"Timed out after 30s":t instanceof Error?t.message:String(t)}`)}console.log("[Step 1] Fetching d3k logs from sandbox to verify it's working...");let u=new AbortController,c=setTimeout(()=>u.abort(),15e3);try{let e=await fetch(`${a}/api/logs`,{signal:u.signal});if(clearTimeout(c),e.ok){let t=await e.text();console.log(`[Step 1] d3k logs (last 1000 chars):
400
+ `,t=await cK(A.sandbox,"bash",["-c",e]);console.log(`[Step 0] d3k Chrome test (exit ${t.exitCode}):
401
+ ${t.stdout||"(no output)"}`),t.stderr&&console.log(`[Step 0] d3k Chrome test stderr: ${t.stderr}`)}catch(e){console.log(`[Step 0] d3k Chrome test error: ${e instanceof Error?e.message:String(e)}`)}console.log("[Step 0] ===== END d3k EXACT COMMAND TEST ====="),console.log("[Step 0] Capturing BEFORE screenshot...");let o=null;try{let e=await c0(A.sandbox,"http://localhost:3000",s,"before");e&&(o=await c1(e,"before",r))}catch(e){console.log(`[Step 0] Before screenshot failed: ${e instanceof Error?e.message:String(e)}`)}console.log("[Step 0] Capturing CLS metrics from inside sandbox...");let a=null,l=null;try{let e='curl -s -X POST http://localhost:3684/mcp -H "Content-Type: application/json" -d \'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"fix_my_app","arguments":{"mode":"snapshot","focusArea":"performance","returnRawData":true}}}\'';console.log("[Step 0] Executing MCP command inside sandbox..."),console.log(`[Step 0] MCP command: ${e.substring(0,200)}...`);let t="",r="",n=-1;try{let i=await cK(A.sandbox,"bash",["-c",e]);t=i.stdout,r=i.stderr,n=i.exitCode,console.log(`[Step 0] MCP command exit code: ${n}`),console.log(`[Step 0] MCP stdout length: ${t.length} bytes`),r&&console.log(`[Step 0] MCP stderr: ${r.substring(0,500)}`)}catch(t){let e=t instanceof Error?t.message:String(t);console.log(`[Step 0] sandbox.runCommand threw: ${e}`),l=`sandbox.runCommand failed: ${e}`}if(0===n&&t)try{let e=JSON.parse(t);if(e.result?.content){for(let t of e.result.content)if("text"===t.type&&t.text){try{a=JSON.parse(t.text),console.log("[Step 0] Successfully parsed CLS data as JSON")}catch{a={rawOutput:t.text},console.log("[Step 0] CLS data stored as rawOutput (not JSON)")}break}}a?console.log("[Step 0] CLS data captured:",JSON.stringify(a).substring(0,500)):(console.log("[Step 0] No CLS data extracted from MCP response"),console.log(`[Step 0] Response structure: ${JSON.stringify(e).substring(0,500)}`))}catch(e){l=`Failed to parse MCP response: ${e instanceof Error?e.message:String(e)}`,console.log(`[Step 0] ${l}`),console.log(`[Step 0] Raw stdout: ${t.substring(0,1e3)}`),a={rawMcpOutput:t.substring(0,1e4),parseError:l},console.log("[Step 0] Using raw stdout as fallback CLS data")}else 0!==n&&!l&&(l=`MCP command failed with exit code ${n}`,console.log(`[Step 0] ${l}`),r&&console.log(`[Step 0] stderr: ${r}`))}catch(e){l=`MCP execution error: ${e instanceof Error?e.message:String(e)}`,console.log(`[Step 0] ${l}`)}a||(console.log("[Step 0] WARNING: No CLS data captured, creating placeholder to prevent Step 1 timeout"),a={warning:"MCP fix_my_app did not return data",mcpError:l||"Unknown error",sandboxDevUrl:A.devUrl,sandboxMcpUrl:A.mcpUrl}),console.log(`[Step 0] Final clsData truthy check: ${!!a}`),console.log("[Step 0] === Dumping sandbox logs before returning ===");try{let e=await cK(A.sandbox,"sh",["-c",'for log in /home/vercel-sandbox/.d3k/logs/*.log; do [ -f "$log" ] && echo "=== $log ===" && tail -100 "$log" || true; done 2>/dev/null || echo "No log files found"']);console.log(e.stdout)}catch(e){console.log(`[Step 0] Failed to dump logs: ${e instanceof Error?e.message:String(e)}`)}console.log("[Step 0] === End sandbox log dump ==="),console.log("[Step 0] Capturing git diff from sandbox...");let u=null;try{let e=await cK(A.sandbox,"sh",["-c","cd /vercel/sandbox && git diff --no-color 2>/dev/null || echo 'No git diff available'"]);0===e.exitCode&&e.stdout.trim()&&"No git diff available"!==e.stdout.trim()?(u=e.stdout.trim(),console.log(`[Step 0] Git diff captured (${u.length} chars)`),console.log(`[Step 0] Git diff preview:
402
+ ${u.substring(0,500)}...`)):console.log("[Step 0] No git changes detected in sandbox")}catch(e){console.log(`[Step 0] Failed to capture git diff: ${e instanceof Error?e.message:String(e)}`)}return{mcpUrl:A.mcpUrl,devUrl:A.devUrl,bypassToken:A.bypassToken,clsData:a,mcpError:l,beforeScreenshotUrl:o,chromiumPath:s,gitDiff:u}}async function c4(e,t,r,n,i,A){if(console.log(`[Step 1] Received clsData: ${n?"truthy":"falsy"}, type: ${typeof n}`),n&&console.log(`[Step 1] clsData preview: ${JSON.stringify(n).substring(0,200)}`),n)return console.log("[Step 1] Using CLS data captured in Step 0 (skipping MCP calls)"),A&&console.log(`[Step 1] Before screenshot from Step 0: ${A}`),{logAnalysis:JSON.stringify(n,null,2),beforeScreenshotUrl:A||null};console.log("[Step 1] ⚠️ No CLS data from Step 0, will try MCP calls (may timeout)"),i&&console.log(`[Step 1] Note: MCP error from Step 0: ${i}`);let s=!!r,o=r||e,a=s?e:null;console.log(`[Step 1] Fetching logs from: ${o}`),console.log(`[Step 1] Using sandbox: ${s?"yes":"no"}`),a&&console.log(`[Step 1] MCP URL: ${a}`),console.log(`[Step 1] Bypass token: ${t?"provided":"not provided"}`);try{let e=t?`${o}?x-vercel-protection-bypass=${t}`:o;if(console.log(`[Step 1] Final URL: ${e.replace(t||"","***")}`),s&&a){console.log("[Step 1] Using d3k MCP server to capture CLS metrics and errors..."),console.log("[Step 1] Validating d3k MCP server access...");let t=new AbortController,r=setTimeout(()=>t.abort(),3e4);try{let e=await fetch(`${a}/mcp`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream"},body:JSON.stringify({jsonrpc:"2.0",id:0,method:"tools/list"}),signal:t.signal});if(clearTimeout(r),e.ok){let t=await e.text();try{let e=null;for(let r of t.split("\n"))if(r.startsWith("data: "))try{e=JSON.parse(r.substring(6));break}catch{}e||(e=JSON.parse(t));let r=e.result?.tools?.map(e=>e.name)||[];console.log(`[Step 1] \u2705 d3k MCP server accessible`),console.log(`[Step 1] Available tools (${r.length}): ${r.join(", ")}`);let n=r.some(e=>e.includes("chrome-devtools")),i=r.some(e=>e.includes("nextjs")),A=r.includes("fix_my_app");console.log(`[Step 1] Chrome DevTools MCP: ${n?"✅":"❌"}`),console.log(`[Step 1] Next.js DevTools MCP: ${i?"✅":"❌"}`),console.log(`[Step 1] fix_my_app tool: ${A?"✅":"❌"}`)}catch{console.log(`[Step 1] MCP server responded but couldn't parse tools list: ${t.substring(0,200)}`)}}else console.log(`[Step 1] \u26A0\uFE0F MCP server not accessible: ${e.status}`)}catch(n){clearTimeout(r);let e=n instanceof Error?n.message:String(n),t=n instanceof Error&&"AbortError"===n.name;console.log(`[Step 1] \u26A0\uFE0F Failed to validate MCP server: ${t?"Timed out after 30s":e}`)}console.log("[Step 1] Navigating browser to app URL...");let n=new AbortController,i=setTimeout(()=>n.abort(),3e4);try{let t=await fetch(`${a}/mcp`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream"},body:JSON.stringify({jsonrpc:"2.0",id:0,method:"tools/call",params:{name:"execute_browser_action",arguments:{action:"navigate",params:{url:e}}}}),signal:n.signal});clearTimeout(i),t.ok?console.log("[Step 1] Browser navigation completed"):console.log(`[Step 1] Browser navigation failed: ${t.status}`)}catch(t){clearTimeout(i);let e=t instanceof Error&&"AbortError"===t.name;console.log(`[Step 1] Browser navigation error: ${e?"Timed out after 30s":t instanceof Error?t.message:String(t)}`)}console.log("[Step 1] Waiting 5s for page load..."),await new Promise(e=>setTimeout(e,5e3));let A=null;console.log("[Step 1] Capturing 'before' screenshot...");let s=new AbortController,l=setTimeout(()=>s.abort(),3e4);try{let e=await fetch(`${a}/mcp`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream"},body:JSON.stringify({jsonrpc:"2.0",id:0,method:"tools/call",params:{name:"chrome-devtools_take_snapshot",arguments:{}}}),signal:s.signal});if(clearTimeout(l),e.ok){let t=await e.text();for(let e of t.split("\n"))if(e.startsWith("data: "))try{let t=JSON.parse(e.substring(6));if(t.result?.content){for(let e of t.result.content)if("image"===e.type&&e.data){let t=Buffer.from(e.data,"base64"),r=new Date().toISOString().replace(/[:.]/g,"-"),n=`screenshot-before-${r}.png`;A=(await (0,q.put)(n,t,{access:"public",contentType:"image/png"})).url,console.log(`[Step 1] \u2705 Before screenshot uploaded: ${A}`)}}}catch{}A||(console.log("[Step 1] Screenshot response received but no image data found"),console.log(`[Step 1] Response preview: ${t.substring(0,500)}`))}else console.log(`[Step 1] Screenshot request failed: ${e.status}`)}catch(t){clearTimeout(l);let e=t instanceof Error&&"AbortError"===t.name;console.log(`[Step 1] Screenshot capture error: ${e?"Timed out after 30s":t instanceof Error?t.message:String(t)}`)}console.log("[Step 1] Fetching d3k logs from sandbox to verify it's working...");let u=new AbortController,c=setTimeout(()=>u.abort(),15e3);try{let e=await fetch(`${a}/api/logs`,{signal:u.signal});if(clearTimeout(c),e.ok){let t=await e.text();console.log(`[Step 1] d3k logs (last 1000 chars):
504
403
  ${t.slice(-1e3)}`)}else console.log(`[Step 1] Could not fetch d3k logs: ${e.status}`)}catch(t){clearTimeout(c);let e=t instanceof Error&&"AbortError"===t.name;console.log(`[Step 1] Failed to fetch d3k logs: ${e?"Timed out after 15s":t instanceof Error?t.message:String(t)}`)}console.log("[Step 1] Calling fix_my_app with focusArea='performance'...");let d=new AbortController,g=setTimeout(()=>d.abort(),18e4);try{let e=await fetch(`${a}/mcp`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"tools/call",params:{name:"fix_my_app",arguments:{mode:"snapshot",focusArea:"performance",timeRangeMinutes:5,returnRawData:!1}}}),signal:d.signal});if(clearTimeout(g),!e.ok)throw Error(`MCP request failed: ${e.status}`);let t=await e.text();console.log(`[Step 1] fix_my_app response length: ${t.length} bytes`),console.log(`[Step 1] fix_my_app response preview (first 500 chars):
505
404
  ${t.substring(0,500)}`);let r=t.split("\n");console.log(`[Step 1] Response split into ${r.length} lines`);let n="",i=0,s=0;for(let e of r)if(e.startsWith("data: ")){i++;try{let t=JSON.parse(e.substring(6));if(console.log(`[Step 1] Parsed JSON line ${i}:`,JSON.stringify(t).substring(0,200)),t.result?.content)for(let e of t.result.content)"text"===e.type&&(s++,n+=e.text,console.log(`[Step 1] Added text content block ${s}, length: ${e.text.length}`));else t.error&&console.log(`[Step 1] ERROR in response: ${JSON.stringify(t.error)}`)}catch(t){console.log(`[Step 1] Failed to parse JSON line ${i}: ${t instanceof Error?t.message:String(t)}`),console.log(`[Step 1] Problem line: ${e.substring(0,200)}`)}}return console.log(`[Step 1] Processed ${i} data lines, ${s} content blocks`),console.log(`[Step 1] Got ${n.length} chars from fix_my_app (performance analysis)`),0===n.length&&console.log(`[Step 1] WARNING: fix_my_app returned NO data. Full response:
506
405
  ${t}`),{logAnalysis:`d3k Performance Analysis for ${o}
@@ -545,7 +444,7 @@ ${i.substring(0,2e3)}
545
444
 
546
445
  Error: ${e}
547
446
 
548
- This may indicate the dev server is not accessible or has crashed.`,beforeScreenshotUrl:null}}}}async function dr(e,t){console.log("[Step 2] Invoking AI agent to analyze logs...");let r=ua({apiKey:process.env.AI_GATEWAY_API_KEY,baseURL:"https://ai-gateway.vercel.sh/v1/ai"})("anthropic/claude-sonnet-4-20250514"),n=`You are a skilled software engineer debugging an application.
447
+ This may indicate the dev server is not accessible or has crashed.`,beforeScreenshotUrl:null}}}}async function c9(e,t){console.log("[Step 2] Invoking AI agent to analyze logs...");let r=ua({apiKey:process.env.AI_GATEWAY_API_KEY,baseURL:"https://ai-gateway.vercel.sh/v1/ai"})("anthropic/claude-sonnet-4-20250514"),n=`You are a skilled software engineer debugging an application.
549
448
 
550
449
  The dev server is running at: ${t}
551
450
 
@@ -592,7 +491,7 @@ Format your response EXACTLY as follows:
592
491
  IMPORTANT:
593
492
  - The Git Patch section must be a valid unified diff that can be applied directly with 'git apply'.
594
493
  - If no errors are found, respond with "\u2705 **SYSTEM HEALTHY** - No errors found" and do NOT include a Git Patch section.
595
- - Only include a Git Patch if there are actual issues that need fixing.`,{text:i}=await cR({model:r,prompt:n});return console.log(`[Step 2] AI agent response (first 500 chars): ${i.substring(0,500)}...`),i}async function dn(e,t,r,n,i,A){console.log("[Step 3] Uploading fix proposal to blob storage..."),i&&console.log(`[Step 3] Including before screenshot: ${i}`),A&&console.log(`[Step 3] Including git diff (${A.length} chars)`);let s=i?`## Before Screenshot
494
+ - Only include a Git Patch if there are actual issues that need fixing.`,{text:i}=await cR({model:r,prompt:n});return console.log(`[Step 2] AI agent response (first 500 chars): ${i.substring(0,500)}...`),i}async function c6(e,t,r,n,i,A){console.log("[Step 3] Uploading fix proposal to blob storage..."),i&&console.log(`[Step 3] Including before screenshot: ${i}`),A&&console.log(`[Step 3] Including git diff (${A.length} chars)`);let s=i?`## Before Screenshot
596
495
 
597
496
  This screenshot was captured when the sandbox dev server first loaded, proving the page rendered successfully.
598
497
 
@@ -648,7 +547,7 @@ dev3000 monitors your development server, captures errors in real-time, and uses
648
547
  - Suggest specific code changes
649
548
 
650
549
  Learn more at https://github.com/vercel-labs/dev3000
651
- `,u=a.replace(/[:.]/g,"-"),c=`fix-${t}-${u}.md`,d=await (0,q.put)(c,l,{access:"public",contentType:"text/markdown"});return console.log(`[Step 3] Fix proposal uploaded to: ${d.url}`),{success:!0,projectName:t,fixProposal:e,blobUrl:d.url,beforeScreenshotUrl:i||null,message:"Fix analysis completed and uploaded to blob storage"}}async function di(e,t,r,n,i,A){console.log(`[Step 4] Creating GitHub PR for ${r}/${n}...`);let s=process.env.GITHUB_TOKEN;if(!s)return console.error("[Step 4] GITHUB_TOKEN not found in environment"),{success:!1,error:"GitHub token not configured"};try{let o=e.match(/```diff\n([\s\S]*?)\n```/);if(!o)return console.error("[Step 4] No git patch found in fix proposal"),{success:!1,error:"No git patch found in fix proposal"};let a=o[1];console.log(`[Step 4] Extracted patch (${a.length} chars)`);let l=dA(a);if(0===l.length)return console.error("[Step 4] Failed to parse any file changes from patch"),{success:!1,error:"Failed to parse file changes from patch"};console.log(`[Step 4] Parsed ${l.length} file change(s)`);let u=`dev3000-fix-${A}-${Date.now()}`;console.log(`[Step 4] Branch name: ${u}`);let c=await fetch(`https://api.github.com/repos/${r}/${n}/git/ref/heads/${i}`,{headers:{Authorization:`Bearer ${s}`,Accept:"application/vnd.github.v3+json"}});if(!c.ok){let e=await c.text();return console.error(`[Step 4] Failed to get base branch: ${e}`),{success:!1,error:`Failed to get base branch: ${c.status}`}}let d=(await c.json()).object.sha;console.log(`[Step 4] Base SHA: ${d}`);let g=await fetch(`https://api.github.com/repos/${r}/${n}/git/refs`,{method:"POST",headers:{Authorization:`Bearer ${s}`,Accept:"application/vnd.github.v3+json","Content-Type":"application/json"},body:JSON.stringify({ref:`refs/heads/${u}`,sha:d})});if(!g.ok){let e=await g.text();return console.error(`[Step 4] Failed to create branch: ${e}`),{success:!1,error:`Failed to create branch: ${g.status}`}}for(let e of(console.log(`[Step 4] Created branch: ${u}`),l)){console.log(`[Step 4] Processing file: ${e.path}`);let t=await fetch(`https://api.github.com/repos/${r}/${n}/contents/${e.path}?ref=${u}`,{headers:{Authorization:`Bearer ${s}`,Accept:"application/vnd.github.v3+json"}}),i="",o="";if(t.ok){let e=await t.json();o=e.sha,i=Buffer.from(e.content,"base64").toString("utf-8")}else console.log("[Step 4] File doesn't exist, will create new file");let a=ds(i,e.changes),l=await fetch(`https://api.github.com/repos/${r}/${n}/contents/${e.path}`,{method:"PUT",headers:{Authorization:`Bearer ${s}`,Accept:"application/vnd.github.v3+json","Content-Type":"application/json"},body:JSON.stringify({message:`Fix: Apply dev3000 fix for ${A}`,content:Buffer.from(a).toString("base64"),branch:u,...o&&{sha:o}})});if(!l.ok){let t=await l.text();return console.error(`[Step 4] Failed to update file ${e.path}: ${t}`),{success:!1,error:`Failed to update file ${e.path}: ${l.status}`}}console.log(`[Step 4] Updated file: ${e.path}`)}let h=`## Automated Fix Proposal
550
+ `,u=a.replace(/[:.]/g,"-"),c=`fix-${t}-${u}.md`,d=await (0,q.put)(c,l,{access:"public",contentType:"text/markdown"});return console.log(`[Step 3] Fix proposal uploaded to: ${d.url}`),{success:!0,projectName:t,fixProposal:e,blobUrl:d.url,beforeScreenshotUrl:i||null,message:"Fix analysis completed and uploaded to blob storage"}}async function c3(e,t,r,n,i,A){console.log(`[Step 4] Creating GitHub PR for ${r}/${n}...`);let s=process.env.GITHUB_TOKEN;if(!s)return console.error("[Step 4] GITHUB_TOKEN not found in environment"),{success:!1,error:"GitHub token not configured"};try{let o=e.match(/```diff\n([\s\S]*?)\n```/);if(!o)return console.error("[Step 4] No git patch found in fix proposal"),{success:!1,error:"No git patch found in fix proposal"};let a=o[1];console.log(`[Step 4] Extracted patch (${a.length} chars)`);let l=c5(a);if(0===l.length)return console.error("[Step 4] Failed to parse any file changes from patch"),{success:!1,error:"Failed to parse file changes from patch"};console.log(`[Step 4] Parsed ${l.length} file change(s)`);let u=`dev3000-fix-${A}-${Date.now()}`;console.log(`[Step 4] Branch name: ${u}`);let c=await fetch(`https://api.github.com/repos/${r}/${n}/git/ref/heads/${i}`,{headers:{Authorization:`Bearer ${s}`,Accept:"application/vnd.github.v3+json"}});if(!c.ok){let e=await c.text();return console.error(`[Step 4] Failed to get base branch: ${e}`),{success:!1,error:`Failed to get base branch: ${c.status}`}}let d=(await c.json()).object.sha;console.log(`[Step 4] Base SHA: ${d}`);let g=await fetch(`https://api.github.com/repos/${r}/${n}/git/refs`,{method:"POST",headers:{Authorization:`Bearer ${s}`,Accept:"application/vnd.github.v3+json","Content-Type":"application/json"},body:JSON.stringify({ref:`refs/heads/${u}`,sha:d})});if(!g.ok){let e=await g.text();return console.error(`[Step 4] Failed to create branch: ${e}`),{success:!1,error:`Failed to create branch: ${g.status}`}}for(let e of(console.log(`[Step 4] Created branch: ${u}`),l)){console.log(`[Step 4] Processing file: ${e.path}`);let t=await fetch(`https://api.github.com/repos/${r}/${n}/contents/${e.path}?ref=${u}`,{headers:{Authorization:`Bearer ${s}`,Accept:"application/vnd.github.v3+json"}}),i="",o="";if(t.ok){let e=await t.json();o=e.sha,i=Buffer.from(e.content,"base64").toString("utf-8")}else console.log("[Step 4] File doesn't exist, will create new file");let a=c8(i,e.changes),l=await fetch(`https://api.github.com/repos/${r}/${n}/contents/${e.path}`,{method:"PUT",headers:{Authorization:`Bearer ${s}`,Accept:"application/vnd.github.v3+json","Content-Type":"application/json"},body:JSON.stringify({message:`Fix: Apply dev3000 fix for ${A}`,content:Buffer.from(a).toString("base64"),branch:u,...o&&{sha:o}})});if(!l.ok){let t=await l.text();return console.error(`[Step 4] Failed to update file ${e.path}: ${t}`),{success:!1,error:`Failed to update file ${e.path}: ${l.status}`}}console.log(`[Step 4] Updated file: ${e.path}`)}let h=`## Automated Fix Proposal
652
551
 
653
552
  This PR was automatically generated by [dev3000](https://github.com/vercel-labs/dev3000) after analyzing your application.
654
553
 
@@ -661,6 +560,107 @@ ${e}
661
560
 
662
561
  \u{1F916} Generated with [Claude Code](https://claude.com/claude-code)
663
562
 
664
- Co-Authored-By: Claude (dev3000) <noreply@anthropic.com>`,p=await fetch(`https://api.github.com/repos/${r}/${n}/pulls`,{method:"POST",headers:{Authorization:`Bearer ${s}`,Accept:"application/vnd.github.v3+json","Content-Type":"application/json"},body:JSON.stringify({title:`Fix: ${A} - Automated fix from dev3000`,head:u,base:i,body:h})});if(!p.ok){let e=await p.text();return console.error(`[Step 4] Failed to create PR: ${e}`),{success:!1,error:`Failed to create PR: ${p.status}`}}let I=await p.json();return console.log(`[Step 4] Created PR: ${I.html_url}`),{success:!0,prUrl:I.html_url,prNumber:I.number,branch:u}}catch(e){return console.error("[Step 4] Error creating PR:",e),{success:!1,error:e instanceof Error?e.message:String(e)}}}function dA(e){let t=[];for(let r of e.split(/diff --git /).filter(Boolean)){let e=r.split("\n"),n=e[0].match(/a\/(.*?) b\//);if(!n)continue;let i=n[1],A=e.slice(1).join("\n");t.push({path:i,changes:A})}return t}function ds(e,t){let r=e.split("\n"),n=t.split("\n"),i=0,A=[];for(let e of n)if(e.startsWith("@@")){let t=e.match(/@@ -(\d+)/);t&&(i=Number.parseInt(t[1],10)-1)}else e.startsWith("-")?i++:e.startsWith("+")?A.push(e.substring(1)):e.startsWith(" ")&&i<r.length&&(A.push(r[i]),i++);return A.join("\n")}async function da(e){console.log("[Cleanup] Stopping sandbox...");try{await e(),console.log("[Cleanup] Sandbox stopped successfully")}catch(e){console.error("[Cleanup] Error stopping sandbox:",e)}}cq(c3,{analyzeLogsWithAgent:()=>dr,cleanupSandbox:()=>da,createD3kSandbox:()=>de,createGitHubPR:()=>di,fetchRealLogs:()=>dt,uploadToBlob:()=>dn});var dl=cz({"app/api/cloud/fix-workflow/steps.ts"(){cW(c5,"runSandboxCommand"),cW(c8,"captureScreenshotInSandbox"),cW(c7,"uploadScreenshot"),cW(de,"createD3kSandbox"),cW(dt,"fetchRealLogs"),cW(dr,"analyzeLogsWithAgent"),cW(dn,"uploadToBlob"),cW(di,"createGitHubPR"),cW(dA,"parsePatchToFileChanges"),cW(ds,"applyPatchChanges"),cW(da,"cleanupSandbox"),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/steps.ts//createD3kSandbox",de),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/steps.ts//fetchRealLogs",dt),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/steps.ts//analyzeLogsWithAgent",dr),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/steps.ts//uploadToBlob",dn),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/steps.ts//createGitHubPR",di),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/steps.ts//cleanupSandbox",da)}});async function du(e){return e.arrayBuffer()}async function dc(e){return e.json()}async function dd(e){return e.text()}async function dg(e){throw Error("You attempted to execute workflow cloudCheckPRWorkflow function directly. To start a workflow, use start(cloudCheckPRWorkflow) from workflow/api")}async function dh(e,t){let{identifyAffectedPages:r}=await Promise.resolve().then(()=>(c6(),cX));return r(e,t)}async function dp(e,t){let{crawlPreviewPages:r}=await Promise.resolve().then(()=>(c6(),cX));return r(e,t)}async function dI(e,t,r,n){let{verifyPRClaims:i}=await Promise.resolve().then(()=>(c6(),cX));return i(e,t,r,n)}async function df(e,t){let{checkPerformance:r}=await Promise.resolve().then(()=>(c6(),cX));return r(e,t)}async function dE(e){let{generateReport:t}=await Promise.resolve().then(()=>(c6(),cX));return t(e)}async function dQ(e,t,r,n){let{uploadReport:i}=await Promise.resolve().then(()=>(c6(),cX));return i(e,t,r,n)}async function dC(e){throw Error("You attempted to execute workflow cloudFixWorkflow function directly. To start a workflow, use start(cloudFixWorkflow) from workflow/api")}async function dB(e,t,r,n,i){let{createD3kSandbox:A}=await Promise.resolve().then(()=>(dl(),c3));return A(e,t,r,n,i)}async function dm(e,t,r,n,i,A){let{fetchRealLogs:s}=await Promise.resolve().then(()=>(dl(),c3));return s(e,t,r,n,i,A)}async function dy(e,t){let{analyzeLogsWithAgent:r}=await Promise.resolve().then(()=>(dl(),c3));return r(e,t)}async function db(e,t,r,n,i,A){let{uploadToBlob:s}=await Promise.resolve().then(()=>(dl(),c3));return s(e,t,r,n,i,A)}async function dw(e,t,r,n,i,A){let{createGitHubPR:s}=await Promise.resolve().then(()=>(dl(),c3));return s(e,t,r,n,i,A)}cW(du,"__builtin_response_array_buffer"),cW(dc,"__builtin_response_json"),cW(dd,"__builtin_response_text"),(0,z.registerStepFunction)("__builtin_response_array_buffer",du),(0,z.registerStepFunction)("__builtin_response_json",dc),(0,z.registerStepFunction)("__builtin_response_text",dd),cW(dg,"cloudCheckPRWorkflow"),dg.workflowId="workflow//app/api/cloud/check-pr/workflow.ts//cloudCheckPRWorkflow",cW(dh,"identifyAffectedPagesStep"),cW(dp,"crawlPreviewPagesStep"),cW(dI,"verifyPRClaimsStep"),cW(df,"checkPerformanceStep"),cW(dE,"generateReportStep"),cW(dQ,"uploadReportStep"),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/workflow.ts//identifyAffectedPagesStep",dh),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/workflow.ts//crawlPreviewPagesStep",dp),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/workflow.ts//verifyPRClaimsStep",dI),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/workflow.ts//checkPerformanceStep",df),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/workflow.ts//generateReportStep",dE),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/workflow.ts//uploadReportStep",dQ),cW(dC,"cloudFixWorkflow"),dC.workflowId="workflow//app/api/cloud/fix-workflow/workflow.ts//cloudFixWorkflow",cW(dB,"createD3kSandbox"),cW(dm,"fetchRealLogs"),cW(dy,"analyzeLogsWithAgent"),cW(db,"uploadToBlob"),cW(dw,"createGitHubPR"),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/workflow.ts//createD3kSandbox",dB),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/workflow.ts//fetchRealLogs",dm),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/workflow.ts//analyzeLogsWithAgent",dy),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/workflow.ts//uploadToBlob",db),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/workflow.ts//createGitHubPR",dw),c6(),dl(),e.s([],43048),e.i(43048),e.s(["POST",()=>cZ.stepEntrypoint],42530);var dv=e.i(42530);let dD=new R.AppRouteRouteModule({definition:{kind:U.RouteKind.APP_ROUTE,page:"/.well-known/workflow/v1/step/route",pathname:"/.well-known/workflow/v1/step",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/mcp-server/app/.well-known/workflow/v1/step/route.js",nextConfigOutput:"",userland:dv}),{workAsyncStorage:dS,workUnitAsyncStorage:dN,serverHooks:dk}=dD;function dR(){return(0,_.patchFetch)({workAsyncStorage:dS,workUnitAsyncStorage:dN})}async function dU(e,t,r){dD.isDev&&(0,x.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let n="/.well-known/workflow/v1/step/route";n=n.replace(/\/index$/,"")||"/";let i=await dD.prepare(e,t,{srcPage:n,multiZoneDraftMode:!1});if(!i)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:A,params:s,nextConfig:o,parsedUrl:a,isDraftMode:l,prerenderManifest:u,routerServerContext:c,isOnDemandRevalidate:d,revalidateOnlyGenerated:g,resolvedPathname:h,clientReferenceManifest:p,serverActionsManifest:I}=i,f=(0,L.normalizeAppPath)(n),E=!!(u.dynamicRoutes[f]||u.routes[h]),Q=async()=>((null==c?void 0:c.render404)?await c.render404(e,t,a,!1):t.end("This page could not be found"),null);if(E&&!l){let e=!!u.routes[h],t=u.dynamicRoutes[f];if(t&&!1===t.fallback&&!e){if(o.experimental.adapterPath)return await Q();throw new J.NoFallbackError}}let C=null;!E||dD.isDev||l||(C="/index"===(C=h)?"/":C);let B=!0===dD.isDev||!E,m=E&&!B;I&&p&&(0,F.setReferenceManifestsSingleton)({page:n,clientReferenceManifest:p,serverActionsManifest:I,serverModuleMap:(0,M.createServerModuleMap)({serverActionsManifest:I})});let y=e.method||"GET",b=(0,T.getTracer)(),w=b.getActiveScopeSpan(),v={params:s,prerenderManifest:u,renderOpts:{experimental:{authInterrupts:!!o.experimental.authInterrupts},cacheComponents:!!o.cacheComponents,supportsDynamicResponse:B,incrementalCache:(0,x.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:o.cacheLife,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,i)=>dD.onRequestError(e,t,n,i,c)},sharedContext:{buildId:A}},D=new O.NodeNextRequest(e),S=new O.NodeNextResponse(t),N=$.NextRequestAdapter.fromNodeNextRequest(D,(0,$.signalFromNodeResponse)(t));try{let i=async e=>dD.handle(N,v).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=b.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==Y.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let i=r.get("next.route");if(i){let t=`${y} ${i}`;e.setAttributes({"next.route":i,"http.route":i,"next.span_name":t}),e.updateName(t)}else e.updateName(`${y} ${n}`)}),A=!!(0,x.getRequestMeta)(e,"minimalMode"),s=async s=>{var a,h;let p=async({previousCacheEntry:o})=>{try{if(!A&&d&&g&&!o)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await i(s);e.fetchMetrics=v.renderOpts.fetchMetrics;let a=v.renderOpts.pendingWaitUntil;a&&r.waitUntil&&(r.waitUntil(a),a=void 0);let l=v.renderOpts.collectedTags;if(!E)return await (0,H.sendResponse)(D,S,n,v.renderOpts.pendingWaitUntil),null;{let e=await n.blob(),t=(0,G.toNodeOutgoingHttpHeaders)(n.headers);l&&(t[Z.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==v.renderOpts.collectedRevalidate&&!(v.renderOpts.collectedRevalidate>=Z.INFINITE_CACHE)&&v.renderOpts.collectedRevalidate,i=void 0===v.renderOpts.collectedExpire||v.renderOpts.collectedExpire>=Z.INFINITE_CACHE?void 0:v.renderOpts.collectedExpire;return{value:{kind:j.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:i}}}}catch(t){throw(null==o?void 0:o.isStale)&&await dD.onRequestError(e,t,{routerKind:"App Router",routePath:n,routeType:"route",revalidateReason:(0,P.getRevalidateReason)({isStaticGeneration:m,isOnDemandRevalidate:d})},!1,c),t}},I=await dD.handleResponse({req:e,nextConfig:o,cacheKey:C,routeKind:U.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:u,isRoutePPREnabled:!1,isOnDemandRevalidate:d,revalidateOnlyGenerated:g,responseGenerator:p,waitUntil:r.waitUntil,isMinimalMode:A});if(!E)return null;if((null==I||null==(a=I.value)?void 0:a.kind)!==j.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==I||null==(h=I.value)?void 0:h.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});A||t.setHeader("x-nextjs-cache",d?"REVALIDATED":I.isMiss?"MISS":I.isStale?"STALE":"HIT"),l&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let f=(0,G.fromNodeOutgoingHttpHeaders)(I.value.headers);return A&&E||f.delete(Z.NEXT_CACHE_TAGS_HEADER),!I.cacheControl||t.getHeader("Cache-Control")||f.get("Cache-Control")||f.set("Cache-Control",(0,V.getCacheControlHeader)(I.cacheControl)),await (0,H.sendResponse)(D,S,new Response(I.value.body,{headers:f,status:I.value.status||200})),null};w?await s(w):await b.withPropagatedContext(e.headers,()=>b.trace(Y.BaseServerSpan.handleRequest,{spanName:`${y} ${n}`,kind:T.SpanKind.SERVER,attributes:{"http.method":y,"http.target":e.url}},s))}catch(t){if(t instanceof J.NoFallbackError||await dD.onRequestError(e,t,{routerKind:"App Router",routePath:f,routeType:"route",revalidateReason:(0,P.getRevalidateReason)({isStaticGeneration:m,isOnDemandRevalidate:d})},!1,c),E)throw t;return await (0,H.sendResponse)(D,S,new Response(null,{status:500})),null}}e.s(["handler",()=>dU,"patchFetch",()=>dR,"routeModule",()=>dD,"serverHooks",()=>dk,"workAsyncStorage",()=>dS,"workUnitAsyncStorage",()=>dN],51540)}];
563
+ Co-Authored-By: Claude (dev3000) <noreply@anthropic.com>`,p=await fetch(`https://api.github.com/repos/${r}/${n}/pulls`,{method:"POST",headers:{Authorization:`Bearer ${s}`,Accept:"application/vnd.github.v3+json","Content-Type":"application/json"},body:JSON.stringify({title:`Fix: ${A} - Automated fix from dev3000`,head:u,base:i,body:h})});if(!p.ok){let e=await p.text();return console.error(`[Step 4] Failed to create PR: ${e}`),{success:!1,error:`Failed to create PR: ${p.status}`}}let I=await p.json();return console.log(`[Step 4] Created PR: ${I.html_url}`),{success:!0,prUrl:I.html_url,prNumber:I.number,branch:u}}catch(e){return console.error("[Step 4] Error creating PR:",e),{success:!1,error:e instanceof Error?e.message:String(e)}}}function c5(e){let t=[];for(let r of e.split(/diff --git /).filter(Boolean)){let e=r.split("\n"),n=e[0].match(/a\/(.*?) b\//);if(!n)continue;let i=n[1],A=e.slice(1).join("\n");t.push({path:i,changes:A})}return t}function c8(e,t){let r=e.split("\n"),n=t.split("\n"),i=0,A=[];for(let e of n)if(e.startsWith("@@")){let t=e.match(/@@ -(\d+)/);t&&(i=Number.parseInt(t[1],10)-1)}else e.startsWith("-")?i++:e.startsWith("+")?A.push(e.substring(1)):e.startsWith(" ")&&i<r.length&&(A.push(r[i]),i++);return A.join("\n")}async function c7(e){console.log("[Cleanup] Stopping sandbox...");try{await e(),console.log("[Cleanup] Sandbox stopped successfully")}catch(e){console.error("[Cleanup] Error stopping sandbox:",e)}}cq(cX,{analyzeLogsWithAgent:()=>c9,cleanupSandbox:()=>c7,createD3kSandbox:()=>c2,createGitHubPR:()=>c3,fetchRealLogs:()=>c4,uploadToBlob:()=>c6});var de=cz({"app/api/cloud/fix-workflow/steps.ts"(){cW(cK,"runSandboxCommand"),cW(c0,"captureScreenshotInSandbox"),cW(c1,"uploadScreenshot"),cW(c2,"createD3kSandbox"),cW(c4,"fetchRealLogs"),cW(c9,"analyzeLogsWithAgent"),cW(c6,"uploadToBlob"),cW(c3,"createGitHubPR"),cW(c5,"parsePatchToFileChanges"),cW(c8,"applyPatchChanges"),cW(c7,"cleanupSandbox"),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/steps.ts//createD3kSandbox",c2),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/steps.ts//fetchRealLogs",c4),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/steps.ts//analyzeLogsWithAgent",c9),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/steps.ts//uploadToBlob",c6),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/steps.ts//createGitHubPR",c3),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/steps.ts//cleanupSandbox",c7)}}),dt={};async function dr(e,t){console.log(`[Step 1] Identifying affected pages from ${e.length} changed files...`);let r=[/\/pages\/(.*)\.(tsx?|jsx?)$/,/\/app\/(.*)\/(page|route)\.(tsx?|jsx?)$/,/\/routes\/(.*)\.(tsx?|jsx?)$/,/\/src\/routes\/(.*)\.(svelte|tsx?|jsx?)$/,/\.page\.(tsx?|jsx?)$/,/\.route\.(tsx?|jsx?)$/],n=[];for(let t of e)for(let e of r){let r=t.match(e);if(r){let e=r[1]||"";(e=(e=e.replace(/\/(page|route|index)$/,""))||"/").startsWith("/")||(e=`/${e}`),n.includes(e)||n.push(e);break}}if(console.log(`[Step 1] Detected ${n.length} pages from file patterns`),t&&t.length>10){console.log("[Step 1] Analyzing PR description for mentioned pages...");let r=ua({apiKey:process.env.AI_GATEWAY_API_KEY,baseURL:"https://ai-gateway.vercel.sh/v1/ai"})("anthropic/claude-sonnet-4-20250514"),i=`Analyze this PR description and extract any URL paths or routes that are mentioned or affected.
564
+
565
+ PR Description:
566
+ ${t}
567
+
568
+ Changed files:
569
+ ${e.join("\n")}
570
+
571
+ Return ONLY a JSON array of paths (e.g., ["/", "/about", "/api/users"]). If no specific paths are mentioned, return an empty array [].
572
+ Do not include explanations, just the JSON array.`;try{let{text:e}=await cR({model:r,prompt:i,maxTokens:500}),t=e.match(/\[.*\]/);if(t){let e=JSON.parse(t[0]);for(let t of e)t&&!n.includes(t)&&n.push(t);console.log(`[Step 1] AI found ${e.length} additional pages`)}}catch(e){console.error("[Step 1] AI analysis failed:",e)}}return 0===n.length&&(console.log("[Step 1] No specific pages detected, checking homepage"),n.push("/")),console.log(`[Step 1] Final pages to check: ${n.join(", ")}`),n}async function dn(e,t){console.log(`[Step 2] Crawling ${t.length} pages on ${e}`);let r=[];for(let n of t){console.log(`[Step 2] Crawling: ${n}`);try{let t=`${e}${n}`,i=await fetch(t,{method:"GET",headers:{"User-Agent":"dev3000-pr-checker/1.0",Accept:"text/html,application/json,*/*"}}),A=i.headers.get("content-type")||"",s=A.includes("text/html"),o=A.includes("application/json"),a="";(s||o)&&(a=(await i.text()).substring(0,1e3)),r.push({page:n,url:t,status:i.status,statusText:i.statusText,contentType:A,bodyPreview:a,headers:Object.fromEntries(i.headers.entries())}),console.log(`[Step 2] ${n}: ${i.status} ${i.statusText}`)}catch(t){console.error(`[Step 2] Failed to crawl ${n}:`,t),r.push({page:n,url:`${e}${n}`,status:0,statusText:"Fetch failed",error:t instanceof Error?t.message:String(t)})}}return console.log(`[Step 2] Crawled ${r.length} pages`),r}async function di(e,t,r,n){console.log("[Step 3] Verifying PR claims against actual behavior...");let i=ua({apiKey:process.env.AI_GATEWAY_API_KEY,baseURL:"https://ai-gateway.vercel.sh/v1/ai"})("anthropic/claude-sonnet-4-20250514"),A=`You are verifying a Pull Request for accuracy. Compare the PR's claims with the actual deployment behavior.
573
+
574
+ PR Title: ${e}
575
+
576
+ PR Description:
577
+ ${t}
578
+
579
+ Changed Files:
580
+ ${n.join("\n")}
581
+
582
+ Crawl Results from Preview Deployment:
583
+ ${JSON.stringify(r,null,2)}
584
+
585
+ Your task:
586
+ 1. Analyze whether the PR's claimed changes match the actual behavior shown in the crawl results
587
+ 2. Check if pages load successfully (200 status codes)
588
+ 3. Identify any errors or unexpected behavior
589
+ 4. Verify the changes work as described
590
+
591
+ Respond in this exact JSON format:
592
+ {
593
+ "allChecksPassed": boolean,
594
+ "summary": "Brief summary of findings",
595
+ "details": {
596
+ "claimsVerified": ["List of claims that were verified"],
597
+ "issues": ["List of any issues found"],
598
+ "warnings": ["List of warnings"]
599
+ }
600
+ }
601
+
602
+ Only return valid JSON, no additional text.`;try{let{text:e}=await cR({model:i,prompt:A,maxTokens:1500}),t=e.match(/\{[\s\S]*\}/);if(t){let e=JSON.parse(t[0]);return console.log(`[Step 3] Verification complete: ${e.allChecksPassed?"PASSED":"FAILED"}`),e}return console.error("[Step 3] Failed to parse AI response"),{allChecksPassed:!1,summary:"Verification failed - could not parse AI response",details:{claimsVerified:[],issues:["AI verification returned invalid format"],warnings:[]}}}catch(e){return console.error("[Step 3] Verification failed:",e),{allChecksPassed:!1,summary:`Verification error: ${e instanceof Error?e.message:String(e)}`,details:{claimsVerified:[],issues:[e instanceof Error?e.message:String(e)],warnings:[]}}}}async function dA(e,t){console.log(`[Step 4] Checking performance for ${t.length} pages`);let r=[];for(let n of t){console.log(`[Step 4] Measuring performance: ${n}`);try{let t=`${e}${n}`,i=Date.now(),A=await fetch(t,{method:"GET",headers:{"User-Agent":"dev3000-pr-checker/1.0",Accept:"text/html,*/*"}}),s=Date.now()-i,o=Number.parseInt(A.headers.get("content-length")||"0",10);r.push({page:n,loadTime:s,contentLength:o,status:A.status,isSlow:s>2e3}),console.log(`[Step 4] ${n}: ${s}ms, ${o} bytes`)}catch(e){console.error(`[Step 4] Performance check failed for ${n}:`,e),r.push({page:n,loadTime:0,contentLength:0,status:0,error:e instanceof Error?e.message:String(e),isSlow:!1})}}let n=r.filter(e=>e.isSlow);return console.log(`[Step 4] Performance check complete. ${n.length} slow pages found.`),{results:r,slowPagesCount:n.length,summary:{avgLoadTime:r.reduce((e,t)=>e+t.loadTime,0)/r.length,slowPages:n.map(e=>e.page)}}}async function ds(e){console.log("[Step 5] Generating comprehensive report...");let{prTitle:t,prBody:r,prNumber:n,previewUrl:i,changedFiles:A,pagesToCheck:s,crawlResults:o,verification:a,performanceResults:l,repoOwner:u,repoName:c}=e,d=`# PR Verification Report
603
+
604
+ `;for(let e of(d+=`**PR**: #${n} - ${t}
605
+ **Repository**: ${u}/${c}
606
+ **Preview URL**: ${i}
607
+ **Timestamp**: ${new Date().toISOString()}
608
+
609
+ ## Summary
610
+
611
+ ${a.allChecksPassed?"✅":"❌"} ${a.summary}
612
+
613
+ ## Changed Files
614
+
615
+ `,A))d+=`- ${e}
616
+ `;for(let e of(d+=`
617
+ ## Pages Checked
618
+
619
+ `,s))d+=`- ${e}
620
+ `;if(d+=`
621
+ ## Verification Results
622
+
623
+ `,a.details.claimsVerified.length>0){for(let e of(d+=`### Claims Verified \u2705
624
+
625
+ `,a.details.claimsVerified))d+=`- ${e}
626
+ `;d+=`
627
+ `}if(a.details.issues.length>0){for(let e of(d+=`### Issues Found \u274C
628
+
629
+ `,a.details.issues))d+=`- ${e}
630
+ `;d+=`
631
+ `}if(a.details.warnings.length>0){for(let e of(d+=`### Warnings \u26A0\uFE0F
632
+
633
+ `,a.details.warnings))d+=`- ${e}
634
+ `;d+=`
635
+ `}for(let e of(d+=`## Crawl Results
636
+
637
+ `,o)){let t=200===e.status?"✅":e.status>=400?"❌":"⚠️";d+=`### ${t} ${e.page}
638
+
639
+ - **URL**: ${e.url}
640
+ - **Status**: ${e.status} ${e.statusText}
641
+ `,e.contentType&&(d+=`- **Content-Type**: ${e.contentType}
642
+ `),e.error&&(d+=`- **Error**: ${e.error}
643
+ `),d+=`
644
+ `}if(d+=`## Performance Analysis
645
+
646
+ **Average Load Time**: ${Math.round(l.summary.avgLoadTime)}ms
647
+
648
+ `,l.slowPagesCount>0){for(let e of(d+=`\u26A0\uFE0F **Slow Pages** (>2s):
649
+ `,l.summary.slowPages))d+=`- ${e}
650
+ `;d+=`
651
+ `}else d+=`\u2705 All pages loaded in under 2 seconds
652
+
653
+ `;for(let e of(d+=`### Detailed Metrics
654
+
655
+ `,l.results))d+=`- **${e.page}**: ${e.loadTime}ms (${e.contentLength} bytes)
656
+ `;return d+=`
657
+ ## PR Description
658
+
659
+ ${r||"(No description provided)"}
660
+
661
+ ---
662
+
663
+ *Generated by dev3000 PR Checker*
664
+ `,console.log(`[Step 5] Report generated (${d.length} characters)`),d}async function da(e,t,r,n){console.log("[Step 6] Uploading report to blob storage...");let i=new Date().toISOString().replace(/[:.]/g,"-"),A=`pr-check-${t}-${r}-pr${n}-${i}.md`,s=await (0,q.put)(A,e,{access:"public",contentType:"text/markdown"});return console.log(`[Step 6] Report uploaded: ${s.url}`),{blobUrl:s.url,filename:A}}cq(dt,{checkPerformance:()=>dA,crawlPreviewPages:()=>dn,generateReport:()=>ds,identifyAffectedPages:()=>dr,uploadReport:()=>da,verifyPRClaims:()=>di});var dl=cz({"app/api/cloud/check-pr/steps.ts"(){cW(dr,"identifyAffectedPages"),cW(dn,"crawlPreviewPages"),cW(di,"verifyPRClaims"),cW(dA,"checkPerformance"),cW(ds,"generateReport"),cW(da,"uploadReport"),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/steps.ts//identifyAffectedPages",dr),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/steps.ts//crawlPreviewPages",dn),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/steps.ts//verifyPRClaims",di),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/steps.ts//checkPerformance",dA),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/steps.ts//generateReport",ds),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/steps.ts//uploadReport",da)}});async function du(e){return e.arrayBuffer()}async function dc(e){return e.json()}async function dd(e){return e.text()}async function dg(e){throw Error("You attempted to execute workflow cloudFixWorkflow function directly. To start a workflow, use start(cloudFixWorkflow) from workflow/api")}async function dh(e,t,r,n,i){let{createD3kSandbox:A}=await Promise.resolve().then(()=>(de(),cX));return A(e,t,r,n,i)}async function dp(e,t,r,n,i,A){let{fetchRealLogs:s}=await Promise.resolve().then(()=>(de(),cX));return s(e,t,r,n,i,A)}async function dI(e,t){let{analyzeLogsWithAgent:r}=await Promise.resolve().then(()=>(de(),cX));return r(e,t)}async function df(e,t,r,n,i,A){let{uploadToBlob:s}=await Promise.resolve().then(()=>(de(),cX));return s(e,t,r,n,i,A)}async function dE(e,t,r,n,i,A){let{createGitHubPR:s}=await Promise.resolve().then(()=>(de(),cX));return s(e,t,r,n,i,A)}async function dQ(t,r,n,i,A,s,o){let{updateWorkflowProgress:a}=await e.A(26077);return a(t,r,n,i,A,s,o)}async function dC(e){throw Error("You attempted to execute workflow cloudCheckPRWorkflow function directly. To start a workflow, use start(cloudCheckPRWorkflow) from workflow/api")}async function dB(e,t){let{identifyAffectedPages:r}=await Promise.resolve().then(()=>(dl(),dt));return r(e,t)}async function dm(e,t){let{crawlPreviewPages:r}=await Promise.resolve().then(()=>(dl(),dt));return r(e,t)}async function dy(e,t,r,n){let{verifyPRClaims:i}=await Promise.resolve().then(()=>(dl(),dt));return i(e,t,r,n)}async function db(e,t){let{checkPerformance:r}=await Promise.resolve().then(()=>(dl(),dt));return r(e,t)}async function dw(e){let{generateReport:t}=await Promise.resolve().then(()=>(dl(),dt));return t(e)}async function dv(e,t,r,n){let{uploadReport:i}=await Promise.resolve().then(()=>(dl(),dt));return i(e,t,r,n)}cW(du,"__builtin_response_array_buffer"),cW(dc,"__builtin_response_json"),cW(dd,"__builtin_response_text"),(0,z.registerStepFunction)("__builtin_response_array_buffer",du),(0,z.registerStepFunction)("__builtin_response_json",dc),(0,z.registerStepFunction)("__builtin_response_text",dd),cW(dg,"cloudFixWorkflow"),dg.workflowId="workflow//app/api/cloud/fix-workflow/workflow.ts//cloudFixWorkflow",cW(dh,"createD3kSandbox"),cW(dp,"fetchRealLogs"),cW(dI,"analyzeLogsWithAgent"),cW(df,"uploadToBlob"),cW(dE,"createGitHubPR"),cW(dQ,"updateWorkflowProgressStep"),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/workflow.ts//createD3kSandbox",dh),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/workflow.ts//fetchRealLogs",dp),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/workflow.ts//analyzeLogsWithAgent",dI),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/workflow.ts//uploadToBlob",df),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/workflow.ts//createGitHubPR",dE),(0,z.registerStepFunction)("step//app/api/cloud/fix-workflow/workflow.ts//updateWorkflowProgressStep",dQ),cW(dC,"cloudCheckPRWorkflow"),dC.workflowId="workflow//app/api/cloud/check-pr/workflow.ts//cloudCheckPRWorkflow",cW(dB,"identifyAffectedPagesStep"),cW(dm,"crawlPreviewPagesStep"),cW(dy,"verifyPRClaimsStep"),cW(db,"checkPerformanceStep"),cW(dw,"generateReportStep"),cW(dv,"uploadReportStep"),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/workflow.ts//identifyAffectedPagesStep",dB),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/workflow.ts//crawlPreviewPagesStep",dm),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/workflow.ts//verifyPRClaimsStep",dy),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/workflow.ts//checkPerformanceStep",db),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/workflow.ts//generateReportStep",dw),(0,z.registerStepFunction)("step//app/api/cloud/check-pr/workflow.ts//uploadReportStep",dv),dl(),de(),e.s([],43048),e.i(43048),e.s(["POST",()=>cZ.stepEntrypoint],42530);var dD=e.i(42530);let dS=new R.AppRouteRouteModule({definition:{kind:U.RouteKind.APP_ROUTE,page:"/.well-known/workflow/v1/step/route",pathname:"/.well-known/workflow/v1/step",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/mcp-server/app/.well-known/workflow/v1/step/route.js",nextConfigOutput:"",userland:dD}),{workAsyncStorage:dN,workUnitAsyncStorage:dk,serverHooks:dR}=dS;function dU(){return(0,_.patchFetch)({workAsyncStorage:dN,workUnitAsyncStorage:dk})}async function d_(e,t,r){dS.isDev&&(0,x.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let n="/.well-known/workflow/v1/step/route";n=n.replace(/\/index$/,"")||"/";let i=await dS.prepare(e,t,{srcPage:n,multiZoneDraftMode:!1});if(!i)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:A,params:s,nextConfig:o,parsedUrl:a,isDraftMode:l,prerenderManifest:u,routerServerContext:c,isOnDemandRevalidate:d,revalidateOnlyGenerated:g,resolvedPathname:h,clientReferenceManifest:p,serverActionsManifest:I}=i,f=(0,L.normalizeAppPath)(n),E=!!(u.dynamicRoutes[f]||u.routes[h]),Q=async()=>((null==c?void 0:c.render404)?await c.render404(e,t,a,!1):t.end("This page could not be found"),null);if(E&&!l){let e=!!u.routes[h],t=u.dynamicRoutes[f];if(t&&!1===t.fallback&&!e){if(o.experimental.adapterPath)return await Q();throw new J.NoFallbackError}}let C=null;!E||dS.isDev||l||(C="/index"===(C=h)?"/":C);let B=!0===dS.isDev||!E,m=E&&!B;I&&p&&(0,F.setReferenceManifestsSingleton)({page:n,clientReferenceManifest:p,serverActionsManifest:I,serverModuleMap:(0,M.createServerModuleMap)({serverActionsManifest:I})});let y=e.method||"GET",b=(0,T.getTracer)(),w=b.getActiveScopeSpan(),v={params:s,prerenderManifest:u,renderOpts:{experimental:{authInterrupts:!!o.experimental.authInterrupts},cacheComponents:!!o.cacheComponents,supportsDynamicResponse:B,incrementalCache:(0,x.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:o.cacheLife,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,i)=>dS.onRequestError(e,t,n,i,c)},sharedContext:{buildId:A}},D=new O.NodeNextRequest(e),S=new O.NodeNextResponse(t),N=$.NextRequestAdapter.fromNodeNextRequest(D,(0,$.signalFromNodeResponse)(t));try{let i=async e=>dS.handle(N,v).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=b.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==Y.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let i=r.get("next.route");if(i){let t=`${y} ${i}`;e.setAttributes({"next.route":i,"http.route":i,"next.span_name":t}),e.updateName(t)}else e.updateName(`${y} ${n}`)}),A=!!(0,x.getRequestMeta)(e,"minimalMode"),s=async s=>{var a,h;let p=async({previousCacheEntry:o})=>{try{if(!A&&d&&g&&!o)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await i(s);e.fetchMetrics=v.renderOpts.fetchMetrics;let a=v.renderOpts.pendingWaitUntil;a&&r.waitUntil&&(r.waitUntil(a),a=void 0);let l=v.renderOpts.collectedTags;if(!E)return await (0,H.sendResponse)(D,S,n,v.renderOpts.pendingWaitUntil),null;{let e=await n.blob(),t=(0,G.toNodeOutgoingHttpHeaders)(n.headers);l&&(t[Z.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==v.renderOpts.collectedRevalidate&&!(v.renderOpts.collectedRevalidate>=Z.INFINITE_CACHE)&&v.renderOpts.collectedRevalidate,i=void 0===v.renderOpts.collectedExpire||v.renderOpts.collectedExpire>=Z.INFINITE_CACHE?void 0:v.renderOpts.collectedExpire;return{value:{kind:j.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:i}}}}catch(t){throw(null==o?void 0:o.isStale)&&await dS.onRequestError(e,t,{routerKind:"App Router",routePath:n,routeType:"route",revalidateReason:(0,P.getRevalidateReason)({isStaticGeneration:m,isOnDemandRevalidate:d})},!1,c),t}},I=await dS.handleResponse({req:e,nextConfig:o,cacheKey:C,routeKind:U.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:u,isRoutePPREnabled:!1,isOnDemandRevalidate:d,revalidateOnlyGenerated:g,responseGenerator:p,waitUntil:r.waitUntil,isMinimalMode:A});if(!E)return null;if((null==I||null==(a=I.value)?void 0:a.kind)!==j.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==I||null==(h=I.value)?void 0:h.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});A||t.setHeader("x-nextjs-cache",d?"REVALIDATED":I.isMiss?"MISS":I.isStale?"STALE":"HIT"),l&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let f=(0,G.fromNodeOutgoingHttpHeaders)(I.value.headers);return A&&E||f.delete(Z.NEXT_CACHE_TAGS_HEADER),!I.cacheControl||t.getHeader("Cache-Control")||f.get("Cache-Control")||f.set("Cache-Control",(0,V.getCacheControlHeader)(I.cacheControl)),await (0,H.sendResponse)(D,S,new Response(I.value.body,{headers:f,status:I.value.status||200})),null};w?await s(w):await b.withPropagatedContext(e.headers,()=>b.trace(Y.BaseServerSpan.handleRequest,{spanName:`${y} ${n}`,kind:T.SpanKind.SERVER,attributes:{"http.method":y,"http.target":e.url}},s))}catch(t){if(t instanceof J.NoFallbackError||await dS.onRequestError(e,t,{routerKind:"App Router",routePath:f,routeType:"route",revalidateReason:(0,P.getRevalidateReason)({isStaticGeneration:m,isOnDemandRevalidate:d})},!1,c),E)throw t;return await (0,H.sendResponse)(D,S,new Response(null,{status:500})),null}}e.s(["handler",()=>d_,"patchFetch",()=>dU,"routeModule",()=>dS,"serverHooks",()=>dR,"workAsyncStorage",()=>dN,"workUnitAsyncStorage",()=>dk],51540)}];
665
665
 
666
666
  //# sourceMappingURL=%5Broot-of-the-server%5D__157de66b._.js.map