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.
- package/dist/cli.js +19 -0
- package/dist/cli.js.map +1 -1
- package/dist/dev-environment.d.ts.map +1 -1
- package/dist/dev-environment.js +11 -0
- package/dist/dev-environment.js.map +1 -1
- package/dist/utils/log-filename.d.ts.map +1 -1
- package/dist/utils/log-filename.js +8 -3
- package/dist/utils/log-filename.js.map +1 -1
- package/mcp-server/app/mcp/route.ts +81 -7
- package/mcp-server/app/mcp/tools.ts +33 -3
- package/mcp-server/next-env.d.ts +1 -1
- package/mcp-server/package.json +0 -12
- package/package.json +6 -7
- package/mcp-server/.next/build/chunks/[root-of-the-server]__25374c4f._.js +0 -500
- package/mcp-server/.next/build/chunks/[root-of-the-server]__25374c4f._.js.map +0 -11
- package/mcp-server/.next/build/chunks/[root-of-the-server]__6e020478._.js +0 -441
- package/mcp-server/.next/build/chunks/[root-of-the-server]__6e020478._.js.map +0 -7
- package/mcp-server/.next/build/chunks/[root-of-the-server]__c438ef56._.js +0 -205
- package/mcp-server/.next/build/chunks/[root-of-the-server]__c438ef56._.js.map +0 -8
- package/mcp-server/.next/build/chunks/[root-of-the-server]__c7ae8543._.js +0 -500
- package/mcp-server/.next/build/chunks/[root-of-the-server]__c7ae8543._.js.map +0 -11
- package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_80bff36f._.js +0 -13
- package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_80bff36f._.js.map +0 -5
- package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_webpack-loaders_ts_c84aa21a._.js +0 -12
- package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_webpack-loaders_ts_c84aa21a._.js.map +0 -5
- package/mcp-server/.next/build/chunks/[turbopack]_runtime.js +0 -770
- package/mcp-server/.next/build/chunks/[turbopack]_runtime.js.map +0 -10
- package/mcp-server/.next/build/chunks/node_modules__pnpm_806d01c0._.js +0 -6758
- package/mcp-server/.next/build/chunks/node_modules__pnpm_806d01c0._.js.map +0 -47
- package/mcp-server/.next/build/package.json +0 -1
- package/mcp-server/.next/build/postcss.js +0 -6
- package/mcp-server/.next/build/postcss.js.map +0 -5
- package/mcp-server/.next/build/webpack-loaders.js +0 -6
- package/mcp-server/.next/build/webpack-loaders.js.map +0 -5
- package/mcp-server/.next/package.json +0 -1
- package/mcp-server/app/api/auth/authorize/route.ts +0 -52
- package/mcp-server/app/api/auth/callback/route.ts +0 -128
- package/mcp-server/app/api/auth/signout/route.ts +0 -34
- package/mcp-server/app/api/auth/token/route.ts +0 -16
- package/mcp-server/app/api/cloud/check-pr/route.ts +0 -53
- package/mcp-server/app/api/cloud/check-pr/steps.ts +0 -458
- package/mcp-server/app/api/cloud/check-pr/workflow.ts +0 -109
- package/mcp-server/app/api/cloud/fix-workflow/health/route.ts +0 -10
- package/mcp-server/app/api/cloud/fix-workflow/route.ts +0 -50
- package/mcp-server/app/api/cloud/fix-workflow/steps.ts +0 -2091
- package/mcp-server/app/api/cloud/fix-workflow/workflow.ts +0 -296
- package/mcp-server/app/api/cloud/start-fix/route.ts +0 -192
- package/mcp-server/app/api/integration/webhook/route.ts +0 -290
- package/mcp-server/app/api/projects/[projectId]/bypass-token/route.ts +0 -48
- package/mcp-server/app/api/projects/branches/route.ts +0 -115
- package/mcp-server/app/api/projects/check-protection/route.ts +0 -33
- package/mcp-server/app/api/projects/route.ts +0 -97
- package/mcp-server/app/api/workflows/route.ts +0 -105
- package/mcp-server/app/auth/error/page.tsx +0 -47
- package/mcp-server/app/signin/page.tsx +0 -37
- package/mcp-server/app/workflows/[id]/report/agent-analysis.tsx +0 -7
- package/mcp-server/app/workflows/[id]/report/page.tsx +0 -199
- package/mcp-server/app/workflows/new/new-workflow-client.tsx +0 -32
- package/mcp-server/app/workflows/new/page.tsx +0 -13
- package/mcp-server/app/workflows/new-workflow-modal.tsx +0 -973
- package/mcp-server/app/workflows/page.tsx +0 -16
- package/mcp-server/app/workflows/workflows-client.tsx +0 -290
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import Link from "next/link"
|
|
2
|
-
|
|
3
|
-
export default function AuthErrorPage({
|
|
4
|
-
searchParams
|
|
5
|
-
}: {
|
|
6
|
-
searchParams: { error?: string; error_description?: string }
|
|
7
|
-
}) {
|
|
8
|
-
const error = searchParams.error || "unknown_error"
|
|
9
|
-
const description = searchParams.error_description || "An unknown error occurred during authentication"
|
|
10
|
-
|
|
11
|
-
return (
|
|
12
|
-
<div className="flex min-h-screen items-center justify-center bg-gray-50">
|
|
13
|
-
<div className="w-full max-w-md space-y-8 rounded-lg bg-white p-8 shadow-md">
|
|
14
|
-
<div className="text-center">
|
|
15
|
-
<div className="mx-auto h-12 w-12 text-red-600">
|
|
16
|
-
<svg className="h-full w-full" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
17
|
-
<path
|
|
18
|
-
strokeLinecap="round"
|
|
19
|
-
strokeLinejoin="round"
|
|
20
|
-
strokeWidth={2}
|
|
21
|
-
d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"
|
|
22
|
-
/>
|
|
23
|
-
</svg>
|
|
24
|
-
</div>
|
|
25
|
-
<h1 className="mt-4 text-2xl font-bold tracking-tight text-gray-900">Authentication Error</h1>
|
|
26
|
-
<p className="mt-2 text-sm text-gray-600">Error: {error}</p>
|
|
27
|
-
<p className="mt-1 text-sm text-gray-500">{decodeURIComponent(description)}</p>
|
|
28
|
-
</div>
|
|
29
|
-
|
|
30
|
-
<div className="mt-8 space-y-4">
|
|
31
|
-
<Link
|
|
32
|
-
href="/signin"
|
|
33
|
-
className="flex w-full justify-center rounded-md bg-black px-4 py-3 text-sm font-semibold text-white shadow-sm hover:bg-gray-800 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-black"
|
|
34
|
-
>
|
|
35
|
-
Try Again
|
|
36
|
-
</Link>
|
|
37
|
-
<Link
|
|
38
|
-
href="/"
|
|
39
|
-
className="flex w-full justify-center rounded-md border border-gray-300 bg-white px-4 py-3 text-sm font-semibold text-gray-700 shadow-sm hover:bg-gray-50"
|
|
40
|
-
>
|
|
41
|
-
Go Home
|
|
42
|
-
</Link>
|
|
43
|
-
</div>
|
|
44
|
-
</div>
|
|
45
|
-
</div>
|
|
46
|
-
)
|
|
47
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import Link from "next/link"
|
|
2
|
-
import { redirect } from "next/navigation"
|
|
3
|
-
import { getCurrentUser } from "@/lib/auth"
|
|
4
|
-
|
|
5
|
-
export default async function SignInPage() {
|
|
6
|
-
const user = await getCurrentUser()
|
|
7
|
-
|
|
8
|
-
// If already signed in, redirect to workflows
|
|
9
|
-
if (user) {
|
|
10
|
-
redirect("/workflows")
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
return (
|
|
14
|
-
<div className="flex min-h-screen items-center justify-center bg-gray-50">
|
|
15
|
-
<div className="w-full max-w-md space-y-8 rounded-lg bg-white p-8 shadow-md">
|
|
16
|
-
<div className="text-center">
|
|
17
|
-
<h1 className="text-3xl font-bold tracking-tight text-gray-900">Sign in to dev3000</h1>
|
|
18
|
-
<p className="mt-2 text-sm text-gray-600">Access your workflows and projects</p>
|
|
19
|
-
</div>
|
|
20
|
-
|
|
21
|
-
<div className="mt-8">
|
|
22
|
-
<Link
|
|
23
|
-
href="/api/auth/authorize"
|
|
24
|
-
prefetch={false}
|
|
25
|
-
className="flex w-full justify-center rounded-md bg-black px-4 py-3 text-sm font-semibold text-white shadow-sm hover:bg-gray-800 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-black"
|
|
26
|
-
>
|
|
27
|
-
Sign in with Vercel
|
|
28
|
-
</Link>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
<p className="mt-4 text-center text-xs text-gray-500">
|
|
32
|
-
By signing in, you agree to our Terms of Service and Privacy Policy
|
|
33
|
-
</p>
|
|
34
|
-
</div>
|
|
35
|
-
</div>
|
|
36
|
-
)
|
|
37
|
-
}
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
import { ArrowLeft, Download } from "lucide-react"
|
|
2
|
-
import Image from "next/image"
|
|
3
|
-
import { redirect } from "next/navigation"
|
|
4
|
-
import { getCurrentUser } from "@/lib/auth"
|
|
5
|
-
import { getWorkflowRun } from "@/lib/workflow-storage"
|
|
6
|
-
import type { WorkflowReport } from "@/types"
|
|
7
|
-
import { AgentAnalysis } from "./agent-analysis"
|
|
8
|
-
|
|
9
|
-
export default async function WorkflowReportPage({ params }: { params: Promise<{ id: string }> }) {
|
|
10
|
-
const user = await getCurrentUser()
|
|
11
|
-
const { id } = await params
|
|
12
|
-
|
|
13
|
-
if (!user) {
|
|
14
|
-
redirect("/signin")
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const run = await getWorkflowRun(user.id, id)
|
|
18
|
-
|
|
19
|
-
if (!run || !run.reportBlobUrl) {
|
|
20
|
-
redirect("/workflows")
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// Fetch the JSON report from the blob URL
|
|
24
|
-
const response = await fetch(run.reportBlobUrl)
|
|
25
|
-
const report: WorkflowReport = await response.json()
|
|
26
|
-
|
|
27
|
-
// Helper to format CLS grade
|
|
28
|
-
const gradeColor = (grade?: string) => {
|
|
29
|
-
switch (grade) {
|
|
30
|
-
case "good":
|
|
31
|
-
return "text-green-600 bg-green-100"
|
|
32
|
-
case "needs-improvement":
|
|
33
|
-
return "text-yellow-600 bg-yellow-100"
|
|
34
|
-
case "poor":
|
|
35
|
-
return "text-red-600 bg-red-100"
|
|
36
|
-
default:
|
|
37
|
-
return "text-gray-600 bg-gray-100"
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return (
|
|
42
|
-
<div className="min-h-screen bg-background">
|
|
43
|
-
<div className="container mx-auto px-4 py-8 max-w-4xl">
|
|
44
|
-
<div className="flex items-center gap-4 mb-6">
|
|
45
|
-
<a
|
|
46
|
-
href="/workflows"
|
|
47
|
-
className="inline-flex items-center gap-2 text-muted-foreground hover:text-foreground transition-colors"
|
|
48
|
-
>
|
|
49
|
-
<ArrowLeft className="h-4 w-4" />
|
|
50
|
-
<span className="font-semibold">d3k</span>
|
|
51
|
-
</a>
|
|
52
|
-
<span className="text-muted-foreground">/</span>
|
|
53
|
-
<span className="text-muted-foreground">Fix Report</span>
|
|
54
|
-
</div>
|
|
55
|
-
|
|
56
|
-
<div className="flex items-center justify-between mb-6">
|
|
57
|
-
<div>
|
|
58
|
-
<h1 className="text-3xl font-bold">{report.projectName}</h1>
|
|
59
|
-
<p className="text-muted-foreground mt-1">{new Date(report.timestamp).toLocaleString()}</p>
|
|
60
|
-
</div>
|
|
61
|
-
<a
|
|
62
|
-
href={run.reportBlobUrl}
|
|
63
|
-
download
|
|
64
|
-
className="inline-flex items-center gap-2 px-4 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90 transition-colors"
|
|
65
|
-
>
|
|
66
|
-
<Download className="h-4 w-4" />
|
|
67
|
-
Download JSON
|
|
68
|
-
</a>
|
|
69
|
-
</div>
|
|
70
|
-
|
|
71
|
-
{/* CLS Score Section */}
|
|
72
|
-
{report.clsScore !== undefined && (
|
|
73
|
-
<div className="bg-card border border-border rounded-lg p-6 mb-6">
|
|
74
|
-
<h2 className="text-xl font-semibold mb-4">Cumulative Layout Shift (CLS)</h2>
|
|
75
|
-
<div className="flex items-center gap-4 mb-4">
|
|
76
|
-
<div className="text-4xl font-bold">{report.clsScore.toFixed(4)}</div>
|
|
77
|
-
{report.clsGrade && (
|
|
78
|
-
<span className={`px-3 py-1 rounded-full text-sm font-medium ${gradeColor(report.clsGrade)}`}>
|
|
79
|
-
{report.clsGrade}
|
|
80
|
-
</span>
|
|
81
|
-
)}
|
|
82
|
-
</div>
|
|
83
|
-
|
|
84
|
-
{/* Layout Shifts Details */}
|
|
85
|
-
{report.layoutShifts && report.layoutShifts.length > 0 && (
|
|
86
|
-
<div className="mt-4">
|
|
87
|
-
<h3 className="text-sm font-medium text-muted-foreground mb-2">Layout Shift Details</h3>
|
|
88
|
-
<div className="space-y-2">
|
|
89
|
-
{report.layoutShifts.map((shift, i) => (
|
|
90
|
-
<div key={`shift-${shift.timestamp}`} className="bg-muted/50 rounded p-3 text-sm">
|
|
91
|
-
<div className="flex justify-between mb-1">
|
|
92
|
-
<span className="font-medium">Shift #{i + 1}</span>
|
|
93
|
-
<span className="text-muted-foreground">score: {shift.score.toFixed(4)}</span>
|
|
94
|
-
</div>
|
|
95
|
-
{shift.elements.length > 0 && (
|
|
96
|
-
<div className="text-muted-foreground text-xs">Elements: {shift.elements.join(", ")}</div>
|
|
97
|
-
)}
|
|
98
|
-
</div>
|
|
99
|
-
))}
|
|
100
|
-
</div>
|
|
101
|
-
</div>
|
|
102
|
-
)}
|
|
103
|
-
</div>
|
|
104
|
-
)}
|
|
105
|
-
|
|
106
|
-
{/* Screenshots Section */}
|
|
107
|
-
{(report.beforeScreenshotUrl || (report.clsScreenshots && report.clsScreenshots.length > 0)) && (
|
|
108
|
-
<div className="bg-card border border-border rounded-lg p-6 mb-6">
|
|
109
|
-
<h2 className="text-xl font-semibold mb-4">Screenshots</h2>
|
|
110
|
-
<div className="flex flex-wrap gap-2">
|
|
111
|
-
{report.beforeScreenshotUrl && (
|
|
112
|
-
<a href={report.beforeScreenshotUrl} target="_blank" rel="noopener noreferrer" className="inline-block">
|
|
113
|
-
<Image
|
|
114
|
-
src={report.beforeScreenshotUrl}
|
|
115
|
-
alt="Before screenshot"
|
|
116
|
-
width={192}
|
|
117
|
-
height={108}
|
|
118
|
-
unoptimized
|
|
119
|
-
className="w-48 h-auto rounded border border-border hover:border-primary transition-colors cursor-pointer"
|
|
120
|
-
/>
|
|
121
|
-
<span className="text-xs text-muted-foreground mt-1 block">Before</span>
|
|
122
|
-
</a>
|
|
123
|
-
)}
|
|
124
|
-
{report.clsScreenshots?.map((screenshot) => (
|
|
125
|
-
<a
|
|
126
|
-
key={`screenshot-${screenshot.timestamp}`}
|
|
127
|
-
href={screenshot.blobUrl}
|
|
128
|
-
target="_blank"
|
|
129
|
-
rel="noopener noreferrer"
|
|
130
|
-
className="inline-block"
|
|
131
|
-
>
|
|
132
|
-
<Image
|
|
133
|
-
src={screenshot.blobUrl}
|
|
134
|
-
alt={screenshot.label || "CLS Screenshot"}
|
|
135
|
-
width={192}
|
|
136
|
-
height={108}
|
|
137
|
-
unoptimized
|
|
138
|
-
className="w-48 h-auto rounded border border-border hover:border-primary transition-colors cursor-pointer"
|
|
139
|
-
/>
|
|
140
|
-
<span className="text-xs text-muted-foreground mt-1 block">{screenshot.label || "Shift"}</span>
|
|
141
|
-
</a>
|
|
142
|
-
))}
|
|
143
|
-
</div>
|
|
144
|
-
</div>
|
|
145
|
-
)}
|
|
146
|
-
|
|
147
|
-
{/* AI Agent Analysis Section */}
|
|
148
|
-
<div className="bg-card border border-border rounded-lg p-6 mb-6">
|
|
149
|
-
<div className="flex items-center justify-between mb-4">
|
|
150
|
-
<h2 className="text-xl font-semibold">AI Agent Analysis</h2>
|
|
151
|
-
{report.agentAnalysisModel && (
|
|
152
|
-
<span className="text-xs text-muted-foreground bg-muted px-2 py-1 rounded">
|
|
153
|
-
{report.agentAnalysisModel}
|
|
154
|
-
</span>
|
|
155
|
-
)}
|
|
156
|
-
</div>
|
|
157
|
-
<AgentAnalysis content={report.agentAnalysis} />
|
|
158
|
-
</div>
|
|
159
|
-
|
|
160
|
-
{/* Sandbox Info */}
|
|
161
|
-
{(report.sandboxDevUrl || report.sandboxMcpUrl) && (
|
|
162
|
-
<div className="bg-card border border-border rounded-lg p-6 mb-6">
|
|
163
|
-
<h2 className="text-xl font-semibold mb-4">Sandbox Details</h2>
|
|
164
|
-
<dl className="space-y-2 text-sm">
|
|
165
|
-
{report.sandboxDevUrl && (
|
|
166
|
-
<div className="flex gap-2">
|
|
167
|
-
<dt className="text-muted-foreground w-24">Dev URL:</dt>
|
|
168
|
-
<dd className="font-mono text-xs">{report.sandboxDevUrl}</dd>
|
|
169
|
-
</div>
|
|
170
|
-
)}
|
|
171
|
-
{report.sandboxMcpUrl && (
|
|
172
|
-
<div className="flex gap-2">
|
|
173
|
-
<dt className="text-muted-foreground w-24">MCP URL:</dt>
|
|
174
|
-
<dd className="font-mono text-xs">{report.sandboxMcpUrl}</dd>
|
|
175
|
-
</div>
|
|
176
|
-
)}
|
|
177
|
-
</dl>
|
|
178
|
-
</div>
|
|
179
|
-
)}
|
|
180
|
-
|
|
181
|
-
<div className="mt-6 flex gap-4">
|
|
182
|
-
<a href="/workflows" className="px-4 py-2 border border-border rounded-md hover:bg-muted transition-colors">
|
|
183
|
-
← Back to Workflows
|
|
184
|
-
</a>
|
|
185
|
-
{run.prUrl && (
|
|
186
|
-
<a
|
|
187
|
-
href={run.prUrl}
|
|
188
|
-
target="_blank"
|
|
189
|
-
rel="noopener noreferrer"
|
|
190
|
-
className="px-4 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90 transition-colors"
|
|
191
|
-
>
|
|
192
|
-
View Pull Request →
|
|
193
|
-
</a>
|
|
194
|
-
)}
|
|
195
|
-
</div>
|
|
196
|
-
</div>
|
|
197
|
-
</div>
|
|
198
|
-
)
|
|
199
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use client"
|
|
2
|
-
|
|
3
|
-
import { useRouter } from "next/navigation"
|
|
4
|
-
import { Suspense } from "react"
|
|
5
|
-
import NewWorkflowModal from "../new-workflow-modal"
|
|
6
|
-
|
|
7
|
-
interface UserInfo {
|
|
8
|
-
id: string
|
|
9
|
-
email: string
|
|
10
|
-
name: string
|
|
11
|
-
username: string
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
interface NewWorkflowClientProps {
|
|
15
|
-
user: UserInfo
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export default function NewWorkflowClient({ user }: NewWorkflowClientProps) {
|
|
19
|
-
const router = useRouter()
|
|
20
|
-
|
|
21
|
-
const handleClose = () => {
|
|
22
|
-
router.push("/workflows")
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
return (
|
|
26
|
-
<div>
|
|
27
|
-
<Suspense fallback={<div>Loading...</div>}>
|
|
28
|
-
<NewWorkflowModal isOpen={true} onClose={handleClose} userId={user.id} />
|
|
29
|
-
</Suspense>
|
|
30
|
-
</div>
|
|
31
|
-
)
|
|
32
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { redirect } from "next/navigation"
|
|
2
|
-
import { getCurrentUser } from "@/lib/auth"
|
|
3
|
-
import NewWorkflowClient from "./new-workflow-client"
|
|
4
|
-
|
|
5
|
-
export default async function NewWorkflowPage() {
|
|
6
|
-
const user = await getCurrentUser()
|
|
7
|
-
|
|
8
|
-
if (!user) {
|
|
9
|
-
redirect("/api/auth/authorize")
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
return <NewWorkflowClient user={user} />
|
|
13
|
-
}
|