Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
533ffd1
chore(deps): upgrade biome and ultracite
tnunamak Jul 22, 2026
c0b37b6
style: reformat per biome 2.5
tnunamak Jul 22, 2026
5be873b
fix(tooling): use root biome in connector hooks
tnunamak Jul 22, 2026
5f8a6dd
style: apply biome safe fixes
tnunamak Jul 22, 2026
0ff0d23
fix(biome): exclude design exploration archive
tnunamak Jul 22, 2026
09f3586
fix(biome): preserve TypeScript-only lint scope
tnunamak Jul 22, 2026
3b33bf7
fix(site): stabilize JSX callback props
tnunamak Jul 22, 2026
6578fdf
fix(biome): hoist regexes and preserve response contracts
tnunamak Jul 22, 2026
873ee38
fix(biome): apply verified unsafe rewrites
tnunamak Jul 22, 2026
64e0be4
fix(biome): exclude design exploration materials
tnunamak Jul 22, 2026
7fcc740
fix(biome): replace increment and decrement operators
tnunamak Jul 22, 2026
29f5a24
fix(biome): waive unresolved pnpm export false positives
tnunamak Jul 22, 2026
03a968e
fix(biome): waive unresolved pnpm export false positives
tnunamak Jul 22, 2026
44aee51
fix(biome): preserve causes when wrapping errors
tnunamak Jul 22, 2026
71d0586
fix biome useDestructuring diagnostics
tnunamak Jul 22, 2026
2d67d04
fix biome useErrorCause diagnostics
tnunamak Jul 22, 2026
5b26fed
fix biome useOptionalChain diagnostics
tnunamak Jul 22, 2026
6b4abaf
fix biome useTopLevelRegex diagnostics
tnunamak Jul 22, 2026
aeb5543
fix biome noNestedTernary diagnostics
tnunamak Jul 22, 2026
aae695a
fix biome noNonNullAssertion diagnostics
tnunamak Jul 22, 2026
c205195
fix(biome): clear useAwait diagnostics
tnunamak Jul 22, 2026
0430882
fix(biome): clear noShadow diagnostics
tnunamak Jul 22, 2026
dcc273b
fix(biome): add import extensions
tnunamak Jul 22, 2026
11fc5f8
fix(biome): move CSS imports to the top
tnunamak Jul 22, 2026
aab54fe
fix(biome): break console import cycles
tnunamak Jul 22, 2026
7a8de6d
fix(biome): use stable list keys
tnunamak Jul 22, 2026
114bd27
fix(biome): preserve async contracts
tnunamak Jul 22, 2026
528adbc
chore(biome): suppress intentional JSX prop bindings
tnunamak Jul 22, 2026
66d3b6a
chore(biome): retain runtime condition guards
tnunamak Jul 22, 2026
1cf2634
chore(biome): preserve ordered loop awaits
tnunamak Jul 22, 2026
fb373eb
chore(biome): document essential complex boundaries
tnunamak Jul 22, 2026
e1e4a42
fix(biome): guard optional assertion values
tnunamak Jul 22, 2026
4c8f94c
fix(biome): restore error causes
tnunamak Jul 23, 2026
e3840a9
fix(biome): repair application rule violations
tnunamak Jul 23, 2026
ec9cc16
style(biome): format merged lint repairs
tnunamak Jul 23, 2026
8ed51cb
chore(biome): remove 54 unused suppressions
tnunamak Jul 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions apps/console/biome.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"formatter": {
"lineWidth": 120
},
"linter": { "rules": { "correctness": { "noUnresolvedImports": "off" } } },
"files": {
"ignoreUnknown": true,
// Stock Ultracite + lineWidth 120 — no rule overrides beyond the
Expand Down
3 changes: 2 additions & 1 deletion apps/console/next-config-redirects.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import test from "node:test";
import nextConfig from "./next.config.mjs";

const redirects = await nextConfig.redirects();
const TRAILING_SLASH_RE = /\/$/;

function matchRule(rule, pathname) {
const { source, destination } = rule;
Expand All @@ -17,7 +18,7 @@ function matchRule(rule, pathname) {
}
if (pathname.startsWith(`${prefix}/`)) {
const rest = pathname.slice(prefix.length + 1);
return destination.replace(":rest*", rest).replace(/\/$/, "") || "/";
return destination.replace(":rest*", rest).replace(TRAILING_SLASH_RE, "") || "/";
}
return null;
}
Expand Down
84 changes: 38 additions & 46 deletions apps/console/next.config.mjs
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
// Copyright The PDP-Connect Contributors
// SPDX-License-Identifier: Apache-2.0

import path from 'path';
import { fileURLToPath } from 'url';
import { collectAllowedDevOrigins } from './scripts/dev-origins.mjs';
import path from "node:path";
import { fileURLToPath } from "node:url";
import { collectAllowedDevOrigins } from "./scripts/dev-origins.mjs";

const __dirname = fileURLToPath(new URL('.', import.meta.url));
const __dirname = fileURLToPath(new URL(".", import.meta.url));

const allowedDevOrigins = process.env.NODE_ENV === 'production' ? [] : collectAllowedDevOrigins();
const allowedDevOrigins = process.env.NODE_ENV === "production" ? [] : collectAllowedDevOrigins();

function parseBuildWorkers(value) {
if (!value) {
Expand All @@ -18,80 +18,72 @@ function parseBuildWorkers(value) {
}

const buildWorkers = parseBuildWorkers(process.env.PDPP_WEB_BUILD_WORKERS);
const manualUploadBodyLimit = '1024mb';
const manualUploadBodyLimit = "1024mb";

/** @type {import('next').NextConfig} */
const nextConfig = {
...(allowedDevOrigins.length > 0 ? { allowedDevOrigins } : {}),
output: 'standalone',
outputFileTracingRoot: path.join(__dirname, '../..'),
outputFileTracingIncludes: {
'/well-known/skills/**': [
'../../docs/agent-skills/**/*.md',
'../../openspec/README.md',
'../../pnpm-workspace.yaml',
],
'/llms-full.txt': [
'../../docs/agent-skills/**/*.md',
'../../openspec/README.md',
'../../pnpm-workspace.yaml',
],
'/llms.txt': [
'../../docs/agent-skills/**/*.md',
'../../openspec/README.md',
'../../pnpm-workspace.yaml',
],
},
reactStrictMode: true,
experimental: {
cpus: buildWorkers,
proxyClientMaxBodySize: manualUploadBodyLimit,
serverActions: {
bodySizeLimit: manualUploadBodyLimit,
},
},
// Transpile the reference-implementation workspace package so Next can
// consume its TypeScript sources directly once shim pairs (.js + .d.ts)
// collapse into single .ts exports. Without this, Next's bundler would
// reject .ts entries from a node_modules-resolved workspace package.
transpilePackages: ['pdpp-reference-implementation', '@pdpp/brand', '@pdpp/brand-react', '@pdpp/operator-ui'],
async redirects() {
output: "standalone",
outputFileTracingIncludes: {
"/llms-full.txt": ["../../docs/agent-skills/**/*.md", "../../openspec/README.md", "../../pnpm-workspace.yaml"],
"/llms.txt": ["../../docs/agent-skills/**/*.md", "../../openspec/README.md", "../../pnpm-workspace.yaml"],
"/well-known/skills/**": [
"../../docs/agent-skills/**/*.md",
"../../openspec/README.md",
"../../pnpm-workspace.yaml",
],
},
outputFileTracingRoot: path.join(__dirname, "../.."),
reactStrictMode: true,
redirects() {
return [
{
source: '/favicon.ico',
destination: '/brand/pdpp-favicon.svg',
destination: "/brand/pdpp-favicon.svg",
permanent: false,
source: "/favicon.ico",
},
];
},
async rewrites() {
rewrites() {
return [
{
source: '/.well-known/oauth-authorization-server',
destination: '/well-known/oauth-authorization-server',
destination: "/well-known/oauth-authorization-server",
source: "/.well-known/oauth-authorization-server",
},
{
source: '/.well-known/oauth-protected-resource/:path*',
destination: '/well-known/oauth-protected-resource/:path*',
destination: "/well-known/oauth-protected-resource/:path*",
source: "/.well-known/oauth-protected-resource/:path*",
},
{
source: '/.well-known/oauth-protected-resource',
destination: '/well-known/oauth-protected-resource',
destination: "/well-known/oauth-protected-resource",
source: "/.well-known/oauth-protected-resource",
},
{
source: '/.well-known/skills/:path*',
destination: '/well-known/skills/:path*',
destination: "/well-known/skills/:path*",
source: "/.well-known/skills/:path*",
},
{
source: '/.well-known/llms.txt',
destination: '/llms.txt',
destination: "/llms.txt",
source: "/.well-known/llms.txt",
},
];
},
// Transpile the reference-implementation workspace package so Next can
// consume its TypeScript sources directly once shim pairs (.js + .d.ts)
// collapse into single .ts exports. Without this, Next's bundler would
// reject .ts entries from a node_modules-resolved workspace package.
transpilePackages: ["pdpp-reference-implementation", "@pdpp/brand", "@pdpp/brand-react", "@pdpp/operator-ui"],
webpack(config) {
config.resolve.alias = {
...config.resolve.alias,
'@': path.join(__dirname, 'src'),
"@": path.join(__dirname, "src"),
};
return config;
},
Expand Down
2 changes: 1 addition & 1 deletion apps/console/postcss.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

const config = {
plugins: {
'@tailwindcss/postcss': {},
"@tailwindcss/postcss": {},
},
};

Expand Down
13 changes: 7 additions & 6 deletions apps/console/src/app/(console)/audit/[traceId]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -176,12 +176,12 @@ function groupTimeline(events: SpineEvent[]): TimelineNode[] {
}
const runLen = j - i;
if (runLen >= PROGRESS_GROUP_THRESHOLD) {
nodes.push({ kind: "progress-group", events: events.slice(i, j), start: i });
nodes.push({ events: events.slice(i, j), kind: "progress-group", start: i });
i = j;
continue;
}
}
nodes.push({ kind: "event", event: current, index: i });
nodes.push({ event: current, index: i, kind: "event" });
i += 1;
}
return nodes;
Expand Down Expand Up @@ -230,6 +230,7 @@ function EventTableRow({ event, index }: { event: SpineEvent; index: number }) {
padding: "var(--space-2)",
}}
>
{/** biome-ignore lint/suspicious/noUnnecessaryConditions: runtime value, TS type is optimistic */}
{JSON.stringify(redactSecrets(event.data || {}), null, 2)}
</pre>
</details>
Expand All @@ -239,7 +240,7 @@ function EventTableRow({ event, index }: { event: SpineEvent; index: number }) {
}

function ProgressGroupTableRow({ events, startIndex }: { events: SpineEvent[]; startIndex: number }) {
const first = events[0];
const [first] = events;
const last = events.at(-1);
if (!(first && last)) {
return null;
Expand Down Expand Up @@ -315,7 +316,7 @@ export default async function TraceDetailPage({
notFound();
}

const events = envelope.events;
const { events } = envelope;
const first = events[0] ?? null;
const actorLabel = first ? `${first.actor_type}/${first.actor_id}` : null;

Expand Down Expand Up @@ -413,10 +414,10 @@ export default async function TraceDetailPage({
href={`/grants/${encodeURIComponent(id)}`}
key={`grant:${id}`}
style={{
alignItems: "center",
border: "1px solid var(--color-border)",
color: "var(--color-foreground)",
display: "inline-flex",
alignItems: "center",
padding: "var(--space-1) var(--space-2-5)",
}}
>
Expand All @@ -433,10 +434,10 @@ export default async function TraceDetailPage({
href={`/syncs/${encodeURIComponent(id)}`}
key={`run:${id}`}
style={{
alignItems: "center",
border: "1px solid var(--color-border)",
color: "var(--color-foreground)",
display: "inline-flex",
alignItems: "center",
padding: "var(--space-1) var(--space-2-5)",
}}
>
Expand Down
Loading
Loading