projectlens 0.1.0 → 1.0.1
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/README.md +31 -16
- package/dist/cli.js +25 -25
- package/package.json +37 -37
- package/public/404.html +1 -1
- package/public/__next.__PAGE__.txt +2 -2
- package/public/__next._full.txt +4 -4
- package/public/__next._head.txt +1 -1
- package/public/__next._index.txt +2 -2
- package/public/__next._tree.txt +2 -2
- package/public/_next/static/chunks/{04..ecqvwwq50.js → 03~rwd658lpsk.js} +6 -6
- package/public/_next/static/chunks/0cbf_ns_utqrn.css +1 -0
- package/public/_not-found/__next._full.txt +3 -3
- package/public/_not-found/__next._head.txt +1 -1
- package/public/_not-found/__next._index.txt +2 -2
- package/public/_not-found/__next._not-found/__PAGE__.txt +1 -1
- package/public/_not-found/__next._not-found.txt +1 -1
- package/public/_not-found/__next._tree.txt +2 -2
- package/public/_not-found.html +1 -1
- package/public/_not-found.txt +3 -3
- package/public/index.html +1 -1
- package/public/index.txt +4 -4
- package/public/_next/static/chunks/0l0vfv7tr4h1n.css +0 -1
- /package/public/_next/static/{Y9zjmXhW-zuG8Rhhw7lhH → 5b9sWw26Magr957-mNW48}/_buildManifest.js +0 -0
- /package/public/_next/static/{Y9zjmXhW-zuG8Rhhw7lhH → 5b9sWw26Magr957-mNW48}/_clientMiddlewareManifest.js +0 -0
- /package/public/_next/static/{Y9zjmXhW-zuG8Rhhw7lhH → 5b9sWw26Magr957-mNW48}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -1,17 +1,21 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Projectlens CLI
|
|
2
2
|
|
|
3
3
|
Local lint, type-check & AI security dashboard for JS/TS projects (Next.js, SvelteKit, Vue, plain Node).
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
| | |
|
|
6
|
+
|---|---|
|
|
7
|
+
|  |  |
|
|
8
|
+
|
|
9
|
+
Run one command inside any project and Projectlens runs your **real** ESLint and
|
|
6
10
|
TypeScript toolchain, audits your dependencies, runs an AI security review over
|
|
7
11
|
your source, and opens a live dashboard at `localhost:4321`.
|
|
8
12
|
|
|
9
13
|
```bash
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
projectlens # run checks + open the dashboard
|
|
15
|
+
projectlens --no-ai # skip the AI security pass (lint + types only)
|
|
16
|
+
projectlens --ci # run once, print summary, exit non-zero on issues
|
|
17
|
+
projectlens --json # print the full report as JSON and exit
|
|
18
|
+
projectlens --min-score 80 # in --ci mode, fail if health score < 80
|
|
15
19
|
```
|
|
16
20
|
|
|
17
21
|
## What the dashboard shows
|
|
@@ -20,7 +24,7 @@ The dashboard turns one run into a navigable workspace:
|
|
|
20
24
|
|
|
21
25
|
- **Overview** — composite health score, severity breakdown, and per-category summaries.
|
|
22
26
|
- **Trends** — an interactive multi-metric chart and per-run history table built from
|
|
23
|
-
the local `.
|
|
27
|
+
the local `.projectlens/` run history (deltas, peak/low/avg).
|
|
24
28
|
- **Code quality** — Lint, Types, and Tests findings from your real toolchain.
|
|
25
29
|
- **Security** — AI security review with severity sub-tabs (Critical → Info).
|
|
26
30
|
- **Dependencies** — real CVE advisories with fix-version guidance.
|
|
@@ -46,6 +50,17 @@ already on your worklist at a glance.
|
|
|
46
50
|
The board is stored only in your browser (localStorage) — it never leaves your machine or
|
|
47
51
|
reaches the CLI. Manage or reset it from **Settings → Task board**.
|
|
48
52
|
|
|
53
|
+
## Screenshots
|
|
54
|
+
|
|
55
|
+
| | |
|
|
56
|
+
|---|---|
|
|
57
|
+
|  |  |
|
|
58
|
+
|  |  |
|
|
59
|
+
|  |  |
|
|
60
|
+
|  |  |
|
|
61
|
+
|  |  |
|
|
62
|
+
|  |  |
|
|
63
|
+
|
|
49
64
|
## How it works
|
|
50
65
|
|
|
51
66
|
```
|
|
@@ -57,7 +72,7 @@ runners/tsc.ts spawns tsc --pretty false, parses the diagnostic chain
|
|
|
57
72
|
runners/audit.ts npm/pnpm/yarn audit --json → real CVE advisories
|
|
58
73
|
ai/audit.ts AI SDK security review (code) + dependency prioritization
|
|
59
74
|
report.ts weighted composite health score
|
|
60
|
-
store.ts local run history in .
|
|
75
|
+
store.ts local run history in .projectlens/ (powers trends)
|
|
61
76
|
server.ts local HTTP + WebSocket server that serves the dashboard
|
|
62
77
|
```
|
|
63
78
|
|
|
@@ -74,7 +89,7 @@ pnpm build # builds the dashboard into ./public, then bundles the CLI
|
|
|
74
89
|
|
|
75
90
|
`pnpm build` runs two steps:
|
|
76
91
|
1. `build:dashboard` — static-exports the Next.js dashboard (with
|
|
77
|
-
`
|
|
92
|
+
`PROJECTLENS_EXPORT=1`) and copies it into `cli/public`.
|
|
78
93
|
2. `tsup` — bundles `src/` into `dist/`.
|
|
79
94
|
|
|
80
95
|
## Installing it into your own projects
|
|
@@ -87,7 +102,7 @@ pnpm build
|
|
|
87
102
|
pnpm link --global
|
|
88
103
|
|
|
89
104
|
cd ~/your-project
|
|
90
|
-
|
|
105
|
+
projectlens
|
|
91
106
|
```
|
|
92
107
|
|
|
93
108
|
**Run directly by path (no linking):**
|
|
@@ -96,7 +111,7 @@ codelens
|
|
|
96
111
|
node ~/path/to/cli/dist/cli.js
|
|
97
112
|
```
|
|
98
113
|
|
|
99
|
-
**Publish (optional, for `npx
|
|
114
|
+
**Publish (optional, for `npx projectlens`):**
|
|
100
115
|
|
|
101
116
|
```bash
|
|
102
117
|
cd cli
|
|
@@ -105,7 +120,7 @@ npm publish
|
|
|
105
120
|
|
|
106
121
|
## AI security audit
|
|
107
122
|
|
|
108
|
-
The AI pass needs a model key.
|
|
123
|
+
The AI pass needs a model key. Projectlens uses the Vercel AI Gateway, so set one of:
|
|
109
124
|
|
|
110
125
|
```bash
|
|
111
126
|
export AI_GATEWAY_API_KEY=... # recommended
|
|
@@ -116,11 +131,11 @@ export OPENAI_API_KEY=...
|
|
|
116
131
|
By default the audit runs on a **free** OpenRouter text model
|
|
117
132
|
(`meta-llama/llama-3.3-70b-instruct:free`) and automatically **falls back** to
|
|
118
133
|
`google/gemini-2.5-flash` if the primary model errors or is rate-limited, so the
|
|
119
|
-
review keeps working out of the box. Override either via env or `.
|
|
134
|
+
review keeps working out of the box. Override either via env or `.projectlensrc`:
|
|
120
135
|
|
|
121
136
|
```bash
|
|
122
|
-
export
|
|
123
|
-
export
|
|
137
|
+
export PROJECTLENS_MODEL=openai/gpt-5-mini # primary model
|
|
138
|
+
export PROJECTLENS_FALLBACK_MODEL=anthropic/claude-haiku-4
|
|
124
139
|
```
|
|
125
140
|
|
|
126
141
|
Without a key, lint + type-check + dependency advisories still run; only the AI
|
package/dist/cli.js
CHANGED
|
@@ -247,7 +247,7 @@ var DEFAULTS = {
|
|
|
247
247
|
var cached = null;
|
|
248
248
|
function readFileConfig(cwd2) {
|
|
249
249
|
try {
|
|
250
|
-
const raw = readFileSync(join(cwd2, ".
|
|
250
|
+
const raw = readFileSync(join(cwd2, ".projectlens.json"), "utf8");
|
|
251
251
|
const parsed = JSON.parse(raw);
|
|
252
252
|
return parsed && typeof parsed === "object" ? parsed : {};
|
|
253
253
|
} catch {
|
|
@@ -262,17 +262,17 @@ function loadConfig(cwd2 = process.cwd()) {
|
|
|
262
262
|
if (value && !process.env[key]) process.env[key] = value;
|
|
263
263
|
}
|
|
264
264
|
}
|
|
265
|
-
const model = process.env.
|
|
266
|
-
const fallbackModel = process.env.
|
|
265
|
+
const model = process.env.projectlens_MODEL ?? file.ai?.model ?? DEFAULTS.model;
|
|
266
|
+
const fallbackModel = process.env.projectlens_FALLBACK_MODEL ?? file.ai?.fallbackModel ?? DEFAULTS.fallbackModel;
|
|
267
267
|
cached = {
|
|
268
268
|
aiEnabled: file.ai?.enabled ?? DEFAULTS.aiEnabled,
|
|
269
269
|
model,
|
|
270
270
|
fallbackModel,
|
|
271
|
-
maxFiles: Number(process.env.
|
|
271
|
+
maxFiles: Number(process.env.projectlens_MAX_FILES) || file.ai?.maxFiles || DEFAULTS.maxFiles,
|
|
272
272
|
redactSecrets: file.ai?.redactSecrets ?? DEFAULTS.redactSecrets,
|
|
273
273
|
chatEnabled: file.chat?.enabled ?? DEFAULTS.chatEnabled,
|
|
274
274
|
persistChats: file.chat?.persist ?? DEFAULTS.persistChats,
|
|
275
|
-
defaultRepo: file.github?.defaultRepo?.trim() || process.env.
|
|
275
|
+
defaultRepo: file.github?.defaultRepo?.trim() || process.env.projectlens_REPO?.trim() || DEFAULTS.defaultRepo
|
|
276
276
|
};
|
|
277
277
|
return cached;
|
|
278
278
|
}
|
|
@@ -284,8 +284,8 @@ async function withModelFallback(call) {
|
|
|
284
284
|
return await call(primary);
|
|
285
285
|
} catch (err) {
|
|
286
286
|
if (!fallbackModel || fallbackModel === primary) throw err;
|
|
287
|
-
if (process.env.
|
|
288
|
-
console.error(`[
|
|
287
|
+
if (process.env.projectlens_DEBUG) {
|
|
288
|
+
console.error(`[Projectlens] model "${primary}" failed, falling back to "${fallbackModel}":`, err);
|
|
289
289
|
}
|
|
290
290
|
return await call(fallbackModel);
|
|
291
291
|
}
|
|
@@ -443,7 +443,7 @@ var IGNORE_DIRS = /* @__PURE__ */ new Set([
|
|
|
443
443
|
"build",
|
|
444
444
|
".svelte-kit",
|
|
445
445
|
"coverage",
|
|
446
|
-
".
|
|
446
|
+
".projectlens"
|
|
447
447
|
]);
|
|
448
448
|
async function selectFiles(root) {
|
|
449
449
|
const maxFiles = loadConfig().maxFiles;
|
|
@@ -482,12 +482,12 @@ async function runSecurityAudit(args) {
|
|
|
482
482
|
const errors = [];
|
|
483
483
|
const [findings, dependencies] = await Promise.all([
|
|
484
484
|
auditCode(project, files).catch((err) => {
|
|
485
|
-
if (process.env.
|
|
485
|
+
if (process.env.projectlens_DEBUG) console.error("[Projectlens] code review failed:", err);
|
|
486
486
|
errors.push(`code review failed (${describeError(err)})`);
|
|
487
487
|
return [];
|
|
488
488
|
}),
|
|
489
489
|
prioritizeDependencies(project, advisories).catch((err) => {
|
|
490
|
-
if (process.env.
|
|
490
|
+
if (process.env.projectlens_DEBUG) console.error("[Projectlens] dependency prioritization failed:", err);
|
|
491
491
|
errors.push(`dependency prioritization failed (${describeError(err)})`);
|
|
492
492
|
return advisories;
|
|
493
493
|
})
|
|
@@ -1475,7 +1475,7 @@ var IGNORE_DIRS2 = /* @__PURE__ */ new Set([
|
|
|
1475
1475
|
".turbo",
|
|
1476
1476
|
".vercel",
|
|
1477
1477
|
"coverage",
|
|
1478
|
-
".
|
|
1478
|
+
".projectlens",
|
|
1479
1479
|
".cache",
|
|
1480
1480
|
"vendor"
|
|
1481
1481
|
]);
|
|
@@ -1867,10 +1867,10 @@ async function collectDocs(ctx) {
|
|
|
1867
1867
|
check("todos", "Few stray TODOs", true, 1, "Tracked separately in Setup.", false)
|
|
1868
1868
|
];
|
|
1869
1869
|
const standards = [
|
|
1870
|
-
buildStandard("quality", "Documentation Quality", "Is the project understandable to humans?", "
|
|
1870
|
+
buildStandard("quality", "Documentation Quality", "Is the project understandable to humans?", "Projectlens", "#", 0.4, qualityChecks),
|
|
1871
1871
|
buildStandard("llmstxt", "llms.txt", "Can AI agents discover your docs?", "llmstxt.org", "https://llmstxt.org", 0.25, llmsChecks),
|
|
1872
1872
|
buildStandard("vercel", "Web & SEO Readiness", "Is the app discoverable and deployable?", "Vercel", "https://vercel.com", 0.2, vercelChecks),
|
|
1873
|
-
buildStandard("farming", "Inline API Docs", "Are exported APIs documented in code?", "
|
|
1873
|
+
buildStandard("farming", "Inline API Docs", "Are exported APIs documented in code?", "Projectlens", "#", 0.15, farmingChecks)
|
|
1874
1874
|
];
|
|
1875
1875
|
const score = Math.round(standards.reduce((sum, s) => sum + s.score * s.weight, 0));
|
|
1876
1876
|
const agentStandards = standards.filter((s) => s.id === "llmstxt" || s.id === "vercel");
|
|
@@ -3261,7 +3261,7 @@ async function collectGenericProvider(ctx, provider) {
|
|
|
3261
3261
|
label: "Analysis depth",
|
|
3262
3262
|
value: "Provider-level",
|
|
3263
3263
|
status: "info",
|
|
3264
|
-
detail: "
|
|
3264
|
+
detail: "Projectlens surfaces provider detection and common pitfalls. Deep config introspection is available for Better Auth."
|
|
3265
3265
|
}
|
|
3266
3266
|
];
|
|
3267
3267
|
findings.sort((a, b) => sevRank2(b.severity) - sevRank2(a.severity));
|
|
@@ -4135,8 +4135,8 @@ async function collectInsights(scan, onProgress) {
|
|
|
4135
4135
|
return result;
|
|
4136
4136
|
} catch (err) {
|
|
4137
4137
|
onProgress?.(`${label} (failed)`);
|
|
4138
|
-
if (process.env.
|
|
4139
|
-
console.error(`[
|
|
4138
|
+
if (process.env.PROJECTLENS_DEBUG) {
|
|
4139
|
+
console.error(`[Projectlens] insight "${label}" failed:`, err);
|
|
4140
4140
|
}
|
|
4141
4141
|
return fallback;
|
|
4142
4142
|
}
|
|
@@ -4619,8 +4619,8 @@ async function runWorkspaceAnalysis(opts2) {
|
|
|
4619
4619
|
});
|
|
4620
4620
|
packageData[pkg.name] = { report, insights };
|
|
4621
4621
|
} catch (err) {
|
|
4622
|
-
if (process.env.
|
|
4623
|
-
console.error(`[
|
|
4622
|
+
if (process.env.PROJECTLENS_DEBUG) {
|
|
4623
|
+
console.error(`[Projectlens] package "${pkg.name}" failed:`, err);
|
|
4624
4624
|
}
|
|
4625
4625
|
}
|
|
4626
4626
|
}
|
|
@@ -4753,7 +4753,7 @@ async function startServer(opts2) {
|
|
|
4753
4753
|
res.writeHead(202, { "content-type": "application/json" });
|
|
4754
4754
|
res.end(JSON.stringify({ ok: true, scope, package: packageParam }));
|
|
4755
4755
|
Promise.resolve().then(() => onRunRequest(scope, packageParam)).catch((err) => {
|
|
4756
|
-
console.error("\x1B[31m[
|
|
4756
|
+
console.error("\x1B[31m[Projectlens]\x1B[0m run failed:", err);
|
|
4757
4757
|
}).finally(() => {
|
|
4758
4758
|
running = false;
|
|
4759
4759
|
});
|
|
@@ -4862,7 +4862,7 @@ function listen(server, preferred) {
|
|
|
4862
4862
|
// src/store.ts
|
|
4863
4863
|
import { promises as fs11 } from "fs";
|
|
4864
4864
|
import path11 from "path";
|
|
4865
|
-
var DIR = ".
|
|
4865
|
+
var DIR = ".projectlens";
|
|
4866
4866
|
var HISTORY_FILE = "history.json";
|
|
4867
4867
|
var LATEST_FILE = "latest.json";
|
|
4868
4868
|
var INSIGHTS_FILE = "insights.json";
|
|
@@ -4982,7 +4982,7 @@ async function savePackageRun(cwd2, packageName, report) {
|
|
|
4982
4982
|
|
|
4983
4983
|
// src/cli.ts
|
|
4984
4984
|
var program = new Command();
|
|
4985
|
-
program.name("
|
|
4985
|
+
program.name("projectlens").description("Local lint, type-check & AI security dashboard for JS/TS projects").version("0.1.0").option("-p, --port <number>", "preferred dashboard port", "4321").option("--no-ai", "skip the AI security audit").option("--no-open", "do not auto-open the browser").option("--ci", "run once, print summary, exit non-zero if issues are found").option("--json", "print the full report as JSON and exit").option("--min-score <number>", "fail in --ci mode if health score is below this", "0").option("-d, --dir <path>", "project directory to analyze (default: cwd)").option("--package <name>", "analyze only this workspace package (monorepo mode)");
|
|
4986
4986
|
program.parse();
|
|
4987
4987
|
var opts = program.opts();
|
|
4988
4988
|
var cwd = opts.dir ? path12.resolve(opts.dir) : process.cwd();
|
|
@@ -4990,7 +4990,7 @@ var config = loadConfig(cwd);
|
|
|
4990
4990
|
var ai = Boolean(opts.ai) && config.aiEnabled && aiEnabled();
|
|
4991
4991
|
if (Boolean(opts.ai) && config.aiEnabled && !aiEnabled()) {
|
|
4992
4992
|
console.error(
|
|
4993
|
-
"\x1B[33m![
|
|
4993
|
+
"\x1B[33m![Projectlens]\x1B[0m AI security audit is enabled but no gateway key was found.\n The default model is free, but requests still route through the Vercel AI Gateway,\n which needs an API key (the key is free \u2014 it does not require an OpenRouter account).\n 1. Get a free key at \x1B[36mhttps://vercel.com/ai-gateway\x1B[0m\n 2. Run \x1B[1mexport AI_GATEWAY_API_KEY=...\x1B[0m (or set it in .projectlens.json / your shell)\n Alternatively set OPENAI_API_KEY, or pass \x1B[1m--no-ai\x1B[0m to silence this.\n Lint, type-check, and dependency audit still run without it.\n"
|
|
4994
4994
|
);
|
|
4995
4995
|
}
|
|
4996
4996
|
async function main() {
|
|
@@ -5089,7 +5089,7 @@ async function main() {
|
|
|
5089
5089
|
onClearData: (scope) => clearData(cwd, scope)
|
|
5090
5090
|
});
|
|
5091
5091
|
console.log(`
|
|
5092
|
-
\x1B[
|
|
5092
|
+
\x1B[36mProjectlens\x1B[0m dashboard \u2192 \x1B[1m${server.url}\x1B[0m
|
|
5093
5093
|
`);
|
|
5094
5094
|
if (monorepo) {
|
|
5095
5095
|
console.log(
|
|
@@ -5128,7 +5128,7 @@ async function main() {
|
|
|
5128
5128
|
function printCiSummary(report) {
|
|
5129
5129
|
const { health, lint, types, security } = report;
|
|
5130
5130
|
console.log(`
|
|
5131
|
-
|
|
5131
|
+
Projectlens \u2014 ${report.meta.project.framework} project`);
|
|
5132
5132
|
console.log(` Health score : ${health.score} (${health.grade})`);
|
|
5133
5133
|
console.log(` Lint : ${lint.errorCount} errors, ${lint.warningCount} warnings`);
|
|
5134
5134
|
console.log(` Types : ${types.diagnostics.length} errors`);
|
|
@@ -5137,6 +5137,6 @@ CodeLens \u2014 ${report.meta.project.framework} project`);
|
|
|
5137
5137
|
);
|
|
5138
5138
|
}
|
|
5139
5139
|
main().catch((err) => {
|
|
5140
|
-
console.error("\x1B[31m[
|
|
5140
|
+
console.error("\x1B[31m[Projectlens] fatal:\x1B[0m", err);
|
|
5141
5141
|
process.exit(1);
|
|
5142
5142
|
});
|
package/package.json
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "projectlens",
|
|
3
|
-
"version": "0.1
|
|
4
|
-
"description": "Local lint, type-check & AI security dashboard for JS/TS projects",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"bin": {
|
|
7
|
-
"
|
|
8
|
-
},
|
|
9
|
-
"files": [
|
|
10
|
-
"dist",
|
|
11
|
-
"public"
|
|
12
|
-
],
|
|
13
|
-
"engines": {
|
|
14
|
-
"node": ">=18"
|
|
15
|
-
},
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
},
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "projectlens",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "Local lint, type-check & AI security dashboard for JS/TS projects",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"projectlens": "./dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"public"
|
|
12
|
+
],
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": ">=18"
|
|
15
|
+
},
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "npm run build:dashboard && tsup",
|
|
18
|
+
"build:dashboard": "node ./scripts/build-dashboard.mjs",
|
|
19
|
+
"dev": "tsup --watch",
|
|
20
|
+
"typecheck": "tsc --noEmit"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"ai": "^6.0.0",
|
|
24
|
+
"commander": "^12.1.0",
|
|
25
|
+
"execa": "^9.5.0",
|
|
26
|
+
"open": "^10.1.0",
|
|
27
|
+
"ws": "^8.18.0",
|
|
28
|
+
"zod": "^3.23.8"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/node": "^22.0.0",
|
|
32
|
+
"@types/ws": "^8.5.12",
|
|
33
|
+
"tsup": "^8.3.0",
|
|
34
|
+
"typescript": "^5.6.0"
|
|
35
|
+
},
|
|
36
|
+
"license": "MIT"
|
|
37
|
+
}
|
package/public/404.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en" class="geist_a71539c9-module__T19VSG__variable jetbrains_mono_7d65b77b-module__VxV-Ta__variable bg-background"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/02jqkfcbj77p5.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/chunks/0l0vfv7tr4h1n.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/17mke5d8u31kx.js"/><script src="/_next/static/chunks/060q84nvp94s6.js" async=""></script><script src="/_next/static/chunks/0ag9_thdvsufz.js" async=""></script><script src="/_next/static/chunks/turbopack-0btzs1a7324pk.js" async=""></script><script src="/_next/static/chunks/0fulyomwb7at-.js" async=""></script><script src="/_next/static/chunks/0~hotr4crj3w3.js" async=""></script><script src="/_next/static/chunks/00g6ktfqbvh0k.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)"/><meta name="theme-color" content="#121212" media="(prefers-color-scheme: dark)"/><title>CodeLens — Local Quality & Security Dashboard</title><meta name="description" content="Run ESLint and TypeScript checks and an AI-powered security audit on your local project, with rich, detailed reporting."/><meta name="generator" content="v0.app"/><script>try{if(JSON.parse(localStorage.getItem('codelens.settings.v1')||'{}').colorAccents){document.documentElement.classList.add('accents')}}catch(e){}</script><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body class="font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","light",null,["light","dark"],null,false,true)</script><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/17mke5d8u31kx.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[89554,[\"/_next/static/chunks/0fulyomwb7at-.js\",\"/_next/static/chunks/0~hotr4crj3w3.js\",\"/_next/static/chunks/00g6ktfqbvh0k.js\"],\"ThemeProvider\"]\n3:I[28231,[\"/_next/static/chunks/0fulyomwb7at-.js\",\"/_next/static/chunks/0~hotr4crj3w3.js\",\"/_next/static/chunks/00g6ktfqbvh0k.js\"],\"TooltipProvider\"]\n4:I[21157,[\"/_next/static/chunks/0fulyomwb7at-.js\",\"/_next/static/chunks/0~hotr4crj3w3.js\",\"/_next/static/chunks/00g6ktfqbvh0k.js\"],\"default\"]\n5:I[15782,[\"/_next/static/chunks/0fulyomwb7at-.js\",\"/_next/static/chunks/0~hotr4crj3w3.js\",\"/_next/static/chunks/00g6ktfqbvh0k.js\"],\"default\"]\n6:I[3656,[\"/_next/static/chunks/0fulyomwb7at-.js\",\"/_next/static/chunks/0~hotr4crj3w3.js\",\"/_next/static/chunks/00g6ktfqbvh0k.js\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[3656,[\"/_next/static/chunks/0fulyomwb7at-.js\",\"/_next/static/chunks/0~hotr4crj3w3.js\",\"/_next/static/chunks/00g6ktfqbvh0k.js\"],\"ViewportBoundary\"]\nc:I[3656,[\"/_next/static/chunks/0fulyomwb7at-.js\",\"/_next/static/chunks/0~hotr4crj3w3.js\",\"/_next/static/chunks/00g6ktfqbvh0k.js\"],\"MetadataBoundary\"]\ne:I[6177,[\"/_next/static/chunks/0fulyomwb7at-.js\",\"/_next/static/chunks/0~hotr4crj3w3.js\",\"/_next/static/chunks/00g6ktfqbvh0k.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/02jqkfcbj77p5.css\",\"style\"]\n:HL[\"/_next/static/chunks/0l0vfv7tr4h1n.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/02jqkfcbj77p5.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0l0vfv7tr4h1n.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0fulyomwb7at-.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0~hotr4crj3w3.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/00g6ktfqbvh0k.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"className\":\"geist_a71539c9-module__T19VSG__variable jetbrains_mono_7d65b77b-module__VxV-Ta__variable bg-background\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"try{if(JSON.parse(localStorage.getItem('codelens.settings.v1')||'{}').colorAccents){document.documentElement.classList.add('accents')}}catch(e){}\"}}]}],[\"$\",\"body\",null,{\"className\":\"font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"attribute\":\"class\",\"defaultTheme\":\"light\",\"enableSystem\":false,\"disableTransitionOnChange\":true,\"children\":[\"$\",\"$L3\",null,{\"delay\":200,\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$@9\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/02jqkfcbj77p5.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0l0vfv7tr4h1n.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"Y9zjmXhW-zuG8Rhhw7lhH\"}\n"])</script><script>self.__next_f.push([1,"f:[]\n9:\"$Wf\"\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#ffffff\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"meta\",\"3\",{\"name\":\"theme-color\",\"content\":\"#121212\",\"media\":\"(prefers-color-scheme: dark)\"}]]\n"])</script><script>self.__next_f.push([1,"8:null\nd:[[\"$\",\"title\",\"0\",{\"children\":\"CodeLens — Local Quality \u0026 Security Dashboard\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Run ESLint and TypeScript checks and an AI-powered security audit on your local project, with rich, detailed reporting.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"generator\",\"content\":\"v0.app\"}]]\n"])</script></body></html>
|
|
1
|
+
<!DOCTYPE html><html lang="en" class="geist_a71539c9-module__T19VSG__variable jetbrains_mono_7d65b77b-module__VxV-Ta__variable bg-background"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/02jqkfcbj77p5.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/chunks/0cbf_ns_utqrn.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/17mke5d8u31kx.js"/><script src="/_next/static/chunks/060q84nvp94s6.js" async=""></script><script src="/_next/static/chunks/0ag9_thdvsufz.js" async=""></script><script src="/_next/static/chunks/turbopack-0btzs1a7324pk.js" async=""></script><script src="/_next/static/chunks/0fulyomwb7at-.js" async=""></script><script src="/_next/static/chunks/0~hotr4crj3w3.js" async=""></script><script src="/_next/static/chunks/00g6ktfqbvh0k.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)"/><meta name="theme-color" content="#121212" media="(prefers-color-scheme: dark)"/><title>Projectlens — Local Quality & Security Dashboard</title><meta name="description" content="Run ESLint and TypeScript checks and an AI-powered security audit on your local project, with rich, detailed reporting."/><meta name="generator" content="v0.app"/><script>try{if(JSON.parse(localStorage.getItem('projectlens.settings.v1')||'{}').colorAccents){document.documentElement.classList.add('accents')}}catch(e){}</script><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body class="font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","light",null,["light","dark"],null,false,true)</script><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/17mke5d8u31kx.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[89554,[\"/_next/static/chunks/0fulyomwb7at-.js\",\"/_next/static/chunks/0~hotr4crj3w3.js\",\"/_next/static/chunks/00g6ktfqbvh0k.js\"],\"ThemeProvider\"]\n3:I[28231,[\"/_next/static/chunks/0fulyomwb7at-.js\",\"/_next/static/chunks/0~hotr4crj3w3.js\",\"/_next/static/chunks/00g6ktfqbvh0k.js\"],\"TooltipProvider\"]\n4:I[21157,[\"/_next/static/chunks/0fulyomwb7at-.js\",\"/_next/static/chunks/0~hotr4crj3w3.js\",\"/_next/static/chunks/00g6ktfqbvh0k.js\"],\"default\"]\n5:I[15782,[\"/_next/static/chunks/0fulyomwb7at-.js\",\"/_next/static/chunks/0~hotr4crj3w3.js\",\"/_next/static/chunks/00g6ktfqbvh0k.js\"],\"default\"]\n6:I[3656,[\"/_next/static/chunks/0fulyomwb7at-.js\",\"/_next/static/chunks/0~hotr4crj3w3.js\",\"/_next/static/chunks/00g6ktfqbvh0k.js\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[3656,[\"/_next/static/chunks/0fulyomwb7at-.js\",\"/_next/static/chunks/0~hotr4crj3w3.js\",\"/_next/static/chunks/00g6ktfqbvh0k.js\"],\"ViewportBoundary\"]\nc:I[3656,[\"/_next/static/chunks/0fulyomwb7at-.js\",\"/_next/static/chunks/0~hotr4crj3w3.js\",\"/_next/static/chunks/00g6ktfqbvh0k.js\"],\"MetadataBoundary\"]\ne:I[6177,[\"/_next/static/chunks/0fulyomwb7at-.js\",\"/_next/static/chunks/0~hotr4crj3w3.js\",\"/_next/static/chunks/00g6ktfqbvh0k.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/02jqkfcbj77p5.css\",\"style\"]\n:HL[\"/_next/static/chunks/0cbf_ns_utqrn.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/02jqkfcbj77p5.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0cbf_ns_utqrn.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0fulyomwb7at-.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0~hotr4crj3w3.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/00g6ktfqbvh0k.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"className\":\"geist_a71539c9-module__T19VSG__variable jetbrains_mono_7d65b77b-module__VxV-Ta__variable bg-background\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"try{if(JSON.parse(localStorage.getItem('projectlens.settings.v1')||'{}').colorAccents){document.documentElement.classList.add('accents')}}catch(e){}\"}}]}],[\"$\",\"body\",null,{\"className\":\"font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"attribute\":\"class\",\"defaultTheme\":\"light\",\"enableSystem\":false,\"disableTransitionOnChange\":true,\"children\":[\"$\",\"$L3\",null,{\"delay\":200,\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$@9\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/02jqkfcbj77p5.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0cbf_ns_utqrn.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"5b9sWw26Magr957-mNW48\"}\n"])</script><script>self.__next_f.push([1,"f:[]\n9:\"$Wf\"\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#ffffff\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"meta\",\"3\",{\"name\":\"theme-color\",\"content\":\"#121212\",\"media\":\"(prefers-color-scheme: dark)\"}]]\n"])</script><script>self.__next_f.push([1,"8:null\nd:[[\"$\",\"title\",\"0\",{\"children\":\"Projectlens — Local Quality \u0026 Security Dashboard\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Run ESLint and TypeScript checks and an AI-powered security audit on your local project, with rich, detailed reporting.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"generator\",\"content\":\"v0.app\"}]]\n"])</script></body></html>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
|
-
2:I[40881,["/_next/static/chunks/0fulyomwb7at-.js","/_next/static/chunks/0~hotr4crj3w3.js","/_next/static/chunks/00g6ktfqbvh0k.js","/_next/static/chunks/
|
|
2
|
+
2:I[40881,["/_next/static/chunks/0fulyomwb7at-.js","/_next/static/chunks/0~hotr4crj3w3.js","/_next/static/chunks/00g6ktfqbvh0k.js","/_next/static/chunks/03~rwd658lpsk.js"],"DashboardLoader"]
|
|
3
3
|
3:I[3656,["/_next/static/chunks/0fulyomwb7at-.js","/_next/static/chunks/0~hotr4crj3w3.js","/_next/static/chunks/00g6ktfqbvh0k.js"],"OutletBoundary"]
|
|
4
4
|
4:"$Sreact.suspense"
|
|
5
|
-
0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{}],[["$","script","script-0",{"src":"/_next/static/chunks/
|
|
5
|
+
0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{}],[["$","script","script-0",{"src":"/_next/static/chunks/03~rwd658lpsk.js","async":true}]],["$","$L3",null,{"children":["$","$4",null,{"name":"Next.MetadataOutlet","children":"$@5"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5b9sWw26Magr957-mNW48"}
|
|
6
6
|
5:null
|
package/public/__next._full.txt
CHANGED
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
3:I[28231,["/_next/static/chunks/0fulyomwb7at-.js","/_next/static/chunks/0~hotr4crj3w3.js","/_next/static/chunks/00g6ktfqbvh0k.js"],"TooltipProvider"]
|
|
4
4
|
4:I[21157,["/_next/static/chunks/0fulyomwb7at-.js","/_next/static/chunks/0~hotr4crj3w3.js","/_next/static/chunks/00g6ktfqbvh0k.js"],"default"]
|
|
5
5
|
5:I[15782,["/_next/static/chunks/0fulyomwb7at-.js","/_next/static/chunks/0~hotr4crj3w3.js","/_next/static/chunks/00g6ktfqbvh0k.js"],"default"]
|
|
6
|
-
6:I[40881,["/_next/static/chunks/0fulyomwb7at-.js","/_next/static/chunks/0~hotr4crj3w3.js","/_next/static/chunks/00g6ktfqbvh0k.js","/_next/static/chunks/
|
|
6
|
+
6:I[40881,["/_next/static/chunks/0fulyomwb7at-.js","/_next/static/chunks/0~hotr4crj3w3.js","/_next/static/chunks/00g6ktfqbvh0k.js","/_next/static/chunks/03~rwd658lpsk.js"],"DashboardLoader"]
|
|
7
7
|
7:I[3656,["/_next/static/chunks/0fulyomwb7at-.js","/_next/static/chunks/0~hotr4crj3w3.js","/_next/static/chunks/00g6ktfqbvh0k.js"],"OutletBoundary"]
|
|
8
8
|
8:"$Sreact.suspense"
|
|
9
9
|
a:I[3656,["/_next/static/chunks/0fulyomwb7at-.js","/_next/static/chunks/0~hotr4crj3w3.js","/_next/static/chunks/00g6ktfqbvh0k.js"],"ViewportBoundary"]
|
|
10
10
|
c:I[3656,["/_next/static/chunks/0fulyomwb7at-.js","/_next/static/chunks/0~hotr4crj3w3.js","/_next/static/chunks/00g6ktfqbvh0k.js"],"MetadataBoundary"]
|
|
11
11
|
e:I[6177,["/_next/static/chunks/0fulyomwb7at-.js","/_next/static/chunks/0~hotr4crj3w3.js","/_next/static/chunks/00g6ktfqbvh0k.js"],"default",1]
|
|
12
12
|
:HL["/_next/static/chunks/02jqkfcbj77p5.css","style"]
|
|
13
|
-
:HL["/_next/static/chunks/
|
|
13
|
+
:HL["/_next/static/chunks/0cbf_ns_utqrn.css","style"]
|
|
14
14
|
:HL["/_next/static/media/70bc3e132a0a741e-s.p.1409xf.ylxg8g.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
15
15
|
:HL["/_next/static/media/caa3a2e1cccd8315-s.p.09~u27dqhyhd6.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
16
|
-
0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/02jqkfcbj77p5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/
|
|
16
|
+
0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/02jqkfcbj77p5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/0cbf_ns_utqrn.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0fulyomwb7at-.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0~hotr4crj3w3.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/00g6ktfqbvh0k.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"className":"geist_a71539c9-module__T19VSG__variable jetbrains_mono_7d65b77b-module__VxV-Ta__variable bg-background","children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"try{if(JSON.parse(localStorage.getItem('projectlens.settings.v1')||'{}').colorAccents){document.documentElement.classList.add('accents')}}catch(e){}"}}]}],["$","body",null,{"className":"font-sans antialiased","children":["$","$L2",null,{"attribute":"class","defaultTheme":"light","enableSystem":false,"disableTransitionOnChange":true,"children":["$","$L3",null,{"delay":200,"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}]]}],{"children":[["$","$1","c",{"children":[["$","$L6",null,{}],[["$","script","script-0",{"src":"/_next/static/chunks/03~rwd658lpsk.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"children":["$","$8",null,{"name":"Next.MetadataOutlet","children":"$@9"}]}]]}],{},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$La",null,{"children":"$Lb"}],["$","div",null,{"hidden":true,"children":["$","$Lc",null,{"children":["$","$8",null,{"name":"Next.Metadata","children":"$Ld"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$e",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/02jqkfcbj77p5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/0cbf_ns_utqrn.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5b9sWw26Magr957-mNW48"}
|
|
17
17
|
b:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","2",{"name":"theme-color","content":"#ffffff","media":"(prefers-color-scheme: light)"}],["$","meta","3",{"name":"theme-color","content":"#121212","media":"(prefers-color-scheme: dark)"}]]
|
|
18
18
|
9:null
|
|
19
|
-
d:[["$","title","0",{"children":"
|
|
19
|
+
d:[["$","title","0",{"children":"Projectlens — Local Quality & Security Dashboard"}],["$","meta","1",{"name":"description","content":"Run ESLint and TypeScript checks and an AI-powered security audit on your local project, with rich, detailed reporting."}],["$","meta","2",{"name":"generator","content":"v0.app"}]]
|
package/public/__next._head.txt
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
2:I[3656,["/_next/static/chunks/0fulyomwb7at-.js","/_next/static/chunks/0~hotr4crj3w3.js","/_next/static/chunks/00g6ktfqbvh0k.js"],"ViewportBoundary"]
|
|
3
3
|
3:I[3656,["/_next/static/chunks/0fulyomwb7at-.js","/_next/static/chunks/0~hotr4crj3w3.js","/_next/static/chunks/00g6ktfqbvh0k.js"],"MetadataBoundary"]
|
|
4
4
|
4:"$Sreact.suspense"
|
|
5
|
-
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","2",{"name":"theme-color","content":"#ffffff","media":"(prefers-color-scheme: light)"}],["$","meta","3",{"name":"theme-color","content":"#121212","media":"(prefers-color-scheme: dark)"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"
|
|
5
|
+
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","2",{"name":"theme-color","content":"#ffffff","media":"(prefers-color-scheme: light)"}],["$","meta","3",{"name":"theme-color","content":"#121212","media":"(prefers-color-scheme: dark)"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Projectlens — Local Quality & Security Dashboard"}],["$","meta","1",{"name":"description","content":"Run ESLint and TypeScript checks and an AI-powered security audit on your local project, with rich, detailed reporting."}],["$","meta","2",{"name":"generator","content":"v0.app"}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5b9sWw26Magr957-mNW48"}
|
package/public/__next._index.txt
CHANGED
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
4:I[21157,["/_next/static/chunks/0fulyomwb7at-.js","/_next/static/chunks/0~hotr4crj3w3.js","/_next/static/chunks/00g6ktfqbvh0k.js"],"default"]
|
|
5
5
|
5:I[15782,["/_next/static/chunks/0fulyomwb7at-.js","/_next/static/chunks/0~hotr4crj3w3.js","/_next/static/chunks/00g6ktfqbvh0k.js"],"default"]
|
|
6
6
|
:HL["/_next/static/chunks/02jqkfcbj77p5.css","style"]
|
|
7
|
-
:HL["/_next/static/chunks/
|
|
8
|
-
0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/02jqkfcbj77p5.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/
|
|
7
|
+
:HL["/_next/static/chunks/0cbf_ns_utqrn.css","style"]
|
|
8
|
+
0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/02jqkfcbj77p5.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/0cbf_ns_utqrn.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/0fulyomwb7at-.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/0~hotr4crj3w3.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/00g6ktfqbvh0k.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"className":"geist_a71539c9-module__T19VSG__variable jetbrains_mono_7d65b77b-module__VxV-Ta__variable bg-background","children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"try{if(JSON.parse(localStorage.getItem('projectlens.settings.v1')||'{}').colorAccents){document.documentElement.classList.add('accents')}}catch(e){}"}}]}],["$","body",null,{"className":"font-sans antialiased","children":["$","$L2",null,{"attribute":"class","defaultTheme":"light","enableSystem":false,"disableTransitionOnChange":true,"children":["$","$L3",null,{"delay":200,"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5b9sWw26Magr957-mNW48"}
|
package/public/__next._tree.txt
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
:HL["/_next/static/chunks/02jqkfcbj77p5.css","style"]
|
|
2
|
-
:HL["/_next/static/chunks/
|
|
2
|
+
:HL["/_next/static/chunks/0cbf_ns_utqrn.css","style"]
|
|
3
3
|
:HL["/_next/static/media/70bc3e132a0a741e-s.p.1409xf.ylxg8g.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
4
4
|
:HL["/_next/static/media/caa3a2e1cccd8315-s.p.09~u27dqhyhd6.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
5
|
-
0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"
|
|
5
|
+
0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"5b9sWw26Magr957-mNW48"}
|