dev3000 0.0.121 → 0.0.124

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 (62) hide show
  1. package/dist/cli.js +19 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/dev-environment.d.ts.map +1 -1
  4. package/dist/dev-environment.js +11 -0
  5. package/dist/dev-environment.js.map +1 -1
  6. package/dist/utils/log-filename.d.ts.map +1 -1
  7. package/dist/utils/log-filename.js +8 -3
  8. package/dist/utils/log-filename.js.map +1 -1
  9. package/mcp-server/app/mcp/route.ts +81 -7
  10. package/mcp-server/app/mcp/tools.ts +33 -3
  11. package/mcp-server/next-env.d.ts +1 -1
  12. package/mcp-server/package.json +0 -12
  13. package/package.json +6 -7
  14. package/mcp-server/.next/build/chunks/[root-of-the-server]__25374c4f._.js +0 -500
  15. package/mcp-server/.next/build/chunks/[root-of-the-server]__25374c4f._.js.map +0 -11
  16. package/mcp-server/.next/build/chunks/[root-of-the-server]__6e020478._.js +0 -441
  17. package/mcp-server/.next/build/chunks/[root-of-the-server]__6e020478._.js.map +0 -7
  18. package/mcp-server/.next/build/chunks/[root-of-the-server]__c438ef56._.js +0 -205
  19. package/mcp-server/.next/build/chunks/[root-of-the-server]__c438ef56._.js.map +0 -8
  20. package/mcp-server/.next/build/chunks/[root-of-the-server]__c7ae8543._.js +0 -500
  21. package/mcp-server/.next/build/chunks/[root-of-the-server]__c7ae8543._.js.map +0 -11
  22. package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_80bff36f._.js +0 -13
  23. package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_80bff36f._.js.map +0 -5
  24. package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_webpack-loaders_ts_c84aa21a._.js +0 -12
  25. package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_webpack-loaders_ts_c84aa21a._.js.map +0 -5
  26. package/mcp-server/.next/build/chunks/[turbopack]_runtime.js +0 -770
  27. package/mcp-server/.next/build/chunks/[turbopack]_runtime.js.map +0 -10
  28. package/mcp-server/.next/build/chunks/node_modules__pnpm_806d01c0._.js +0 -6758
  29. package/mcp-server/.next/build/chunks/node_modules__pnpm_806d01c0._.js.map +0 -47
  30. package/mcp-server/.next/build/package.json +0 -1
  31. package/mcp-server/.next/build/postcss.js +0 -6
  32. package/mcp-server/.next/build/postcss.js.map +0 -5
  33. package/mcp-server/.next/build/webpack-loaders.js +0 -6
  34. package/mcp-server/.next/build/webpack-loaders.js.map +0 -5
  35. package/mcp-server/.next/package.json +0 -1
  36. package/mcp-server/app/api/auth/authorize/route.ts +0 -52
  37. package/mcp-server/app/api/auth/callback/route.ts +0 -128
  38. package/mcp-server/app/api/auth/signout/route.ts +0 -34
  39. package/mcp-server/app/api/auth/token/route.ts +0 -16
  40. package/mcp-server/app/api/cloud/check-pr/route.ts +0 -53
  41. package/mcp-server/app/api/cloud/check-pr/steps.ts +0 -458
  42. package/mcp-server/app/api/cloud/check-pr/workflow.ts +0 -109
  43. package/mcp-server/app/api/cloud/fix-workflow/health/route.ts +0 -10
  44. package/mcp-server/app/api/cloud/fix-workflow/route.ts +0 -50
  45. package/mcp-server/app/api/cloud/fix-workflow/steps.ts +0 -2091
  46. package/mcp-server/app/api/cloud/fix-workflow/workflow.ts +0 -296
  47. package/mcp-server/app/api/cloud/start-fix/route.ts +0 -192
  48. package/mcp-server/app/api/integration/webhook/route.ts +0 -290
  49. package/mcp-server/app/api/projects/[projectId]/bypass-token/route.ts +0 -48
  50. package/mcp-server/app/api/projects/branches/route.ts +0 -115
  51. package/mcp-server/app/api/projects/check-protection/route.ts +0 -33
  52. package/mcp-server/app/api/projects/route.ts +0 -97
  53. package/mcp-server/app/api/workflows/route.ts +0 -105
  54. package/mcp-server/app/auth/error/page.tsx +0 -47
  55. package/mcp-server/app/signin/page.tsx +0 -37
  56. package/mcp-server/app/workflows/[id]/report/agent-analysis.tsx +0 -7
  57. package/mcp-server/app/workflows/[id]/report/page.tsx +0 -199
  58. package/mcp-server/app/workflows/new/new-workflow-client.tsx +0 -32
  59. package/mcp-server/app/workflows/new/page.tsx +0 -13
  60. package/mcp-server/app/workflows/new-workflow-modal.tsx +0 -973
  61. package/mcp-server/app/workflows/page.tsx +0 -16
  62. package/mcp-server/app/workflows/workflows-client.tsx +0 -290
@@ -1 +0,0 @@
1
- {"type": "commonjs"}
@@ -1,6 +0,0 @@
1
- var R=require("./chunks/[turbopack]_runtime.js")("postcss.js")
2
- R.c("chunks/[turbopack-node]_transforms_postcss_ts_80bff36f._.js")
3
- R.c("chunks/[root-of-the-server]__25374c4f._.js")
4
- R.m("[turbopack-node]/globals.ts [postcss] (ecmascript)")
5
- R.m("[turbopack-node]/ipc/evaluate.ts/evaluate.js { INNER => \"[turbopack-node]/transforms/postcss.ts { CONFIG => \\\"[project]/mcp-server/postcss.config.mjs [postcss] (ecmascript)\\\" } [postcss] (ecmascript)\", RUNTIME => \"[turbopack-node]/ipc/evaluate.ts [postcss] (ecmascript)\" } [postcss] (ecmascript)")
6
- module.exports=R.m("[turbopack-node]/ipc/evaluate.ts/evaluate.js { INNER => \"[turbopack-node]/transforms/postcss.ts { CONFIG => \\\"[project]/mcp-server/postcss.config.mjs [postcss] (ecmascript)\\\" } [postcss] (ecmascript)\", RUNTIME => \"[turbopack-node]/ipc/evaluate.ts [postcss] (ecmascript)\" } [postcss] (ecmascript)").exports
@@ -1,5 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sections": []
5
- }
@@ -1,6 +0,0 @@
1
- var R=require("./chunks/[turbopack]_runtime.js")("webpack-loaders.js")
2
- R.c("chunks/[turbopack-node]_transforms_webpack-loaders_ts_c84aa21a._.js")
3
- R.c("chunks/[root-of-the-server]__c7ae8543._.js")
4
- R.m("[turbopack-node]/globals.ts [webpack_loaders] (ecmascript)")
5
- R.m("[turbopack-node]/ipc/evaluate.ts/evaluate.js { INNER => \"[turbopack-node]/transforms/webpack-loaders.ts [webpack_loaders] (ecmascript)\", RUNTIME => \"[turbopack-node]/ipc/evaluate.ts [webpack_loaders] (ecmascript)\" } [webpack_loaders] (ecmascript)")
6
- module.exports=R.m("[turbopack-node]/ipc/evaluate.ts/evaluate.js { INNER => \"[turbopack-node]/transforms/webpack-loaders.ts [webpack_loaders] (ecmascript)\", RUNTIME => \"[turbopack-node]/ipc/evaluate.ts [webpack_loaders] (ecmascript)\" } [webpack_loaders] (ecmascript)").exports
@@ -1,5 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sections": []
5
- }
@@ -1 +0,0 @@
1
- {"type": "commonjs"}
@@ -1,52 +0,0 @@
1
- import crypto from "node:crypto"
2
- import { cookies } from "next/headers"
3
- import { type NextRequest, NextResponse } from "next/server"
4
-
5
- function generateSecureRandomString(length: number) {
6
- return crypto
7
- .randomBytes(Math.ceil(length / 2))
8
- .toString("hex")
9
- .substring(0, length)
10
- }
11
-
12
- export async function GET(req: NextRequest) {
13
- const state = generateSecureRandomString(43)
14
- const nonce = generateSecureRandomString(43)
15
- const code_verifier = generateSecureRandomString(43)
16
- const code_challenge = crypto.createHash("sha256").update(code_verifier).digest("base64url")
17
- const cookieStore = await cookies()
18
-
19
- cookieStore.set("oauth_state", state, {
20
- maxAge: 10 * 60, // 10 minutes
21
- secure: true,
22
- httpOnly: true,
23
- sameSite: "lax"
24
- })
25
- cookieStore.set("oauth_nonce", nonce, {
26
- maxAge: 10 * 60, // 10 minutes
27
- secure: true,
28
- httpOnly: true,
29
- sameSite: "lax"
30
- })
31
- cookieStore.set("oauth_code_verifier", code_verifier, {
32
- maxAge: 10 * 60, // 10 minutes
33
- secure: true,
34
- httpOnly: true,
35
- sameSite: "lax"
36
- })
37
-
38
- const queryParams = new URLSearchParams({
39
- client_id: process.env.NEXT_PUBLIC_CLIENT_ID as string,
40
- redirect_uri: `${req.nextUrl.origin}/api/auth/callback`,
41
- state,
42
- nonce,
43
- code_challenge,
44
- code_challenge_method: "S256",
45
- response_type: "code",
46
- scope: "openid email profile offline_access user team project deployment",
47
- prompt: "consent"
48
- })
49
-
50
- const authorizationUrl = `https://vercel.com/oauth/authorize?${queryParams.toString()}`
51
- return NextResponse.redirect(authorizationUrl)
52
- }
@@ -1,128 +0,0 @@
1
- import { cookies } from "next/headers"
2
- import type { NextRequest } from "next/server"
3
-
4
- interface TokenData {
5
- access_token: string
6
- token_type: string
7
- id_token: string
8
- expires_in: number
9
- scope: string
10
- refresh_token: string
11
- }
12
-
13
- export async function GET(request: NextRequest) {
14
- try {
15
- const url = new URL(request.url)
16
- const code = url.searchParams.get("code")
17
- const state = url.searchParams.get("state")
18
- const error = url.searchParams.get("error")
19
- const errorDescription = url.searchParams.get("error_description")
20
-
21
- // Handle OAuth errors from the provider
22
- if (error) {
23
- const errorUrl = new URL("/auth/error", request.url)
24
- errorUrl.searchParams.set("error", error)
25
- if (errorDescription) {
26
- errorUrl.searchParams.set("error_description", errorDescription)
27
- }
28
- return Response.redirect(errorUrl)
29
- }
30
-
31
- if (!code) {
32
- throw new Error("Authorization code is required")
33
- }
34
-
35
- const storedState = request.cookies.get("oauth_state")?.value
36
- const storedNonce = request.cookies.get("oauth_nonce")?.value
37
- const codeVerifier = request.cookies.get("oauth_code_verifier")?.value
38
-
39
- if (!validate(state, storedState)) {
40
- throw new Error("State mismatch")
41
- }
42
-
43
- const tokenData = await exchangeCodeForToken(code, codeVerifier, request.nextUrl.origin)
44
- const decodedNonce = decodeNonce(tokenData.id_token)
45
-
46
- if (!validate(decodedNonce, storedNonce)) {
47
- throw new Error("Nonce mismatch")
48
- }
49
-
50
- await setAuthCookies(tokenData)
51
-
52
- const cookieStore = await cookies()
53
-
54
- // Clear the state, nonce, and oauth_code_verifier cookies
55
- cookieStore.set("oauth_state", "", { maxAge: 0 })
56
- cookieStore.set("oauth_nonce", "", { maxAge: 0 })
57
- cookieStore.set("oauth_code_verifier", "", { maxAge: 0 })
58
-
59
- return Response.redirect(new URL("/workflows", request.url))
60
- } catch (error) {
61
- console.error("OAuth callback error:", error)
62
- return Response.redirect(new URL("/auth/error", request.url))
63
- }
64
- }
65
-
66
- function validate(value: string | null, storedValue: string | undefined): boolean {
67
- if (!value || !storedValue) {
68
- return false
69
- }
70
- return value === storedValue
71
- }
72
-
73
- function decodeNonce(idToken: string): string {
74
- const payload = idToken.split(".")[1]
75
- const decodedPayload = Buffer.from(payload, "base64").toString("utf-8")
76
- const nonceMatch = decodedPayload.match(/"nonce":"([^"]+)"/)
77
- return nonceMatch ? nonceMatch[1] : ""
78
- }
79
-
80
- async function exchangeCodeForToken(
81
- code: string,
82
- code_verifier: string | undefined,
83
- requestOrigin: string
84
- ): Promise<TokenData> {
85
- const params = new URLSearchParams({
86
- grant_type: "authorization_code",
87
- client_id: process.env.NEXT_PUBLIC_CLIENT_ID as string,
88
- client_secret: process.env.CLIENT_SECRET as string,
89
- code: code,
90
- code_verifier: code_verifier || "",
91
- redirect_uri: `${requestOrigin}/api/auth/callback`
92
- })
93
-
94
- const response = await fetch("https://vercel.com/api/login/oauth/token", {
95
- method: "POST",
96
- headers: {
97
- "Content-Type": "application/x-www-form-urlencoded"
98
- },
99
- body: params.toString()
100
- })
101
-
102
- if (!response.ok) {
103
- const errorData = await response.json()
104
- throw new Error(`Failed to exchange code for token: ${JSON.stringify(errorData)}`)
105
- }
106
-
107
- const tokenData = await response.json()
108
- console.log("Token exchange response - scope:", tokenData.scope)
109
- return tokenData
110
- }
111
-
112
- async function setAuthCookies(tokenData: TokenData) {
113
- const cookieStore = await cookies()
114
-
115
- cookieStore.set("access_token", tokenData.access_token, {
116
- httpOnly: true,
117
- secure: process.env.NODE_ENV === "production",
118
- sameSite: "lax",
119
- maxAge: tokenData.expires_in
120
- })
121
-
122
- cookieStore.set("refresh_token", tokenData.refresh_token, {
123
- httpOnly: true,
124
- secure: process.env.NODE_ENV === "production",
125
- sameSite: "lax",
126
- maxAge: 60 * 60 * 24 * 30 // 30 days
127
- })
128
- }
@@ -1,34 +0,0 @@
1
- import { cookies } from "next/headers"
2
-
3
- export async function POST() {
4
- const cookieStore = await cookies()
5
- const accessToken = cookieStore.get("access_token")?.value
6
-
7
- if (!accessToken) {
8
- return Response.json({ error: "No access token found" }, { status: 401 })
9
- }
10
-
11
- const credentials = `${process.env.NEXT_PUBLIC_CLIENT_ID}:${process.env.CLIENT_SECRET}`
12
-
13
- const response = await fetch("https://vercel.com/api/login/oauth/token/revoke", {
14
- method: "POST",
15
- headers: {
16
- "Content-Type": "application/x-www-form-urlencoded",
17
- Authorization: `Basic ${Buffer.from(credentials).toString("base64")}`
18
- },
19
- body: new URLSearchParams({
20
- token: accessToken
21
- })
22
- })
23
-
24
- if (!response.ok) {
25
- const errorData = await response.json()
26
- console.error("Error revoking token:", errorData)
27
- return Response.json({ error: "Failed to revoke access token" }, { status: response.status })
28
- }
29
-
30
- cookieStore.set("access_token", "", { maxAge: 0 })
31
- cookieStore.set("refresh_token", "", { maxAge: 0 })
32
-
33
- return Response.json({}, { status: response.status })
34
- }
@@ -1,16 +0,0 @@
1
- import { cookies } from "next/headers"
2
-
3
- /**
4
- * Get the current access token from cookies
5
- * This allows the client to retrieve the token for cross-origin API calls
6
- */
7
- export async function GET() {
8
- const cookieStore = await cookies()
9
- const accessToken = cookieStore.get("access_token")?.value
10
-
11
- if (!accessToken) {
12
- return Response.json({ error: "Not authenticated" }, { status: 401 })
13
- }
14
-
15
- return Response.json({ accessToken })
16
- }
@@ -1,53 +0,0 @@
1
- import { start } from "workflow/api"
2
- import { cloudCheckPRWorkflow } from "./workflow"
3
-
4
- /**
5
- * POST /api/cloud/check-pr
6
- * HTTP endpoint that starts the workflow
7
- */
8
- export async function POST(request: Request) {
9
- try {
10
- const body = await request.json()
11
-
12
- const { previewUrl, prTitle, prBody, changedFiles, repoOwner, repoName, prNumber } = body
13
-
14
- // Validate required fields
15
- if (!previewUrl || !prTitle || !repoOwner || !repoName || !prNumber) {
16
- return Response.json({ error: "Missing required fields" }, { status: 400 })
17
- }
18
-
19
- console.log(`[API] Starting PR check for ${repoOwner}/${repoName}#${prNumber}`)
20
-
21
- // Start the workflow
22
- // @ts-expect-error - Workflow SDK types are incomplete
23
- const workflowRun = await start(cloudCheckPRWorkflow, {
24
- previewUrl,
25
- prTitle,
26
- prBody: prBody || "",
27
- changedFiles: changedFiles || [],
28
- repoOwner,
29
- repoName,
30
- prNumber: String(prNumber)
31
- })
32
-
33
- // @ts-expect-error - Workflow SDK types are incomplete
34
- console.log(`[API] Workflow started: ${workflowRun.id}`)
35
-
36
- // Wait for workflow to complete (workflows are durable and will continue even if this times out)
37
- // @ts-expect-error - Workflow SDK types are incomplete
38
- const result = await workflowRun.result()
39
-
40
- console.log(`[API] Workflow completed: ${result.status}`)
41
-
42
- return result
43
- } catch (error) {
44
- console.error("[API] Error starting workflow:", error)
45
- return Response.json(
46
- {
47
- error: error instanceof Error ? error.message : "Unknown error",
48
- details: error instanceof Error ? error.stack : undefined
49
- },
50
- { status: 500 }
51
- )
52
- }
53
- }