diff --git a/apps/example/package.json b/apps/example/package.json
index a6ccd15362..942e203873 100644
--- a/apps/example/package.json
+++ b/apps/example/package.json
@@ -35,6 +35,6 @@
"cross-env": "^10.1.0",
"jiti": "^2.7.0",
"nitro": "3.0.260522-beta",
- "typescript": "^6.0.3"
+ "typescript": "^7.0.2"
}
}
diff --git a/packages/junior-dashboard/package.json b/packages/junior-dashboard/package.json
index 4907273097..eb223d7805 100644
--- a/packages/junior-dashboard/package.json
+++ b/packages/junior-dashboard/package.json
@@ -25,7 +25,7 @@
"build": "pnpm --filter @sentry/junior-plugin-api build && pnpm --filter @sentry/junior build && pnpm run build:client && pnpm run build:css && pnpm run build:server",
"build:client": "tsup --config tsup.client.config.ts",
"build:css": "tailwindcss -i src/tailwind.css -o dist/tailwind.css --minify",
- "build:server": "tsup --config tsup.config.ts",
+ "build:server": "tsup --config tsup.config.ts && tsdown --config tsdown.dts.config.ts",
"lint": "oxlint --config .oxlintrc.json --deny-warnings src",
"prepare": "pnpm run build",
"prepack": "pnpm run build",
@@ -60,8 +60,9 @@
"eslint": "^10.8.0",
"oxlint": "^1.79.0",
"tailwindcss": "^4.3.0",
+ "tsdown": "0.23.1",
"tsup": "^8.5.1",
- "typescript": "^6.0.3",
+ "typescript": "^7.0.2",
"vitest": "^4.1.7"
}
}
diff --git a/packages/junior-dashboard/src/app.ts b/packages/junior-dashboard/src/app.ts
index 40093f8897..65d7d74c6a 100644
--- a/packages/junior-dashboard/src/app.ts
+++ b/packages/junior-dashboard/src/app.ts
@@ -575,6 +575,7 @@ export function createDashboardApp(
c.set("viewer", viewer);
}
await next();
+ return undefined;
};
app.use("*", requireAuth);
diff --git a/packages/junior-dashboard/src/authenticated-routes.ts b/packages/junior-dashboard/src/authenticated-routes.ts
index a2293699f7..9b64e30834 100644
--- a/packages/junior-dashboard/src/authenticated-routes.ts
+++ b/packages/junior-dashboard/src/authenticated-routes.ts
@@ -19,8 +19,7 @@ export function isAuthPath(
const requestSegments = segments(pathname);
return routes.some((route) => {
const routeSegments = segments(route.path);
- for (let index = 0; index < routeSegments.length; index += 1) {
- const pattern = routeSegments[index];
+ for (const [index, pattern] of routeSegments.entries()) {
if (pattern === "*") return true;
const value = requestSegments[index];
if (!value || (pattern !== value && !pattern.startsWith(":"))) {
diff --git a/packages/junior-dashboard/src/client.tsx b/packages/junior-dashboard/src/client.tsx
index c45cb40a1b..53d97325f5 100644
--- a/packages/junior-dashboard/src/client.tsx
+++ b/packages/junior-dashboard/src/client.tsx
@@ -22,18 +22,18 @@ class DashboardErrorBoundary extends Component<
{ children: ReactNode },
ErrorBoundaryState
> {
- state: ErrorBoundaryState = { error: null };
+ override state: ErrorBoundaryState = { error: null };
static getDerivedStateFromError(error: Error): ErrorBoundaryState {
return { error };
}
- componentDidCatch(error: Error, errorInfo: ErrorInfo) {
+ override componentDidCatch(error: Error, errorInfo: ErrorInfo) {
const stack = error.stack ?? errorInfo.componentStack;
window.__JUNIOR_DASHBOARD_SHOW_ERROR__?.(stack ? new Error(stack) : error);
}
- render() {
+ override render() {
if (this.state.error) {
return ;
}
diff --git a/packages/junior-dashboard/src/client/conversations/TranscriptActivityGroup.tsx b/packages/junior-dashboard/src/client/conversations/TranscriptActivityGroup.tsx
index 6bd09d951b..a1922ce54b 100644
--- a/packages/junior-dashboard/src/client/conversations/TranscriptActivityGroup.tsx
+++ b/packages/junior-dashboard/src/client/conversations/TranscriptActivityGroup.tsx
@@ -101,9 +101,10 @@ export function activityGroupSummary(
(entry) => entry.kind === "attachments_delivered",
).length;
const eventCount = entries.filter((entry) => entry.kind === "message").length;
+ const [onlyHandoff] = handoffs;
const handoffSummary =
- handoffs.length === 1
- ? `model handoff to ${handoffs[0].modelId} (${handoffs[0].modelProfile})`
+ handoffs.length === 1 && onlyHandoff
+ ? `model handoff to ${onlyHandoff.modelId} (${onlyHandoff.modelProfile})`
: handoffs.length > 1
? countLabel(handoffs.length, "model handoff", "model handoffs")
: undefined;
diff --git a/packages/junior-dashboard/src/client/conversations/transcriptFailure.ts b/packages/junior-dashboard/src/client/conversations/transcriptFailure.ts
index 46513e2af8..2ed6a1803e 100644
--- a/packages/junior-dashboard/src/client/conversations/transcriptFailure.ts
+++ b/packages/junior-dashboard/src/client/conversations/transcriptFailure.ts
@@ -55,8 +55,6 @@ export function transcriptFailureTitle(
case "agent_run_failed":
return "Internal error";
}
-
- return "Internal error";
}
/** Short description for one failed turn in the transcript. */
@@ -111,8 +109,6 @@ export function transcriptFailureDescription(
case "agent_run_failed":
return `${agentName} hit an internal error during this turn.`;
}
-
- return `${agentName} hit an internal error during this turn.`;
}
/** Search text for one failed turn in the transcript. */
diff --git a/packages/junior-dashboard/src/client/conversations/transcriptMarkdownLinks.ts b/packages/junior-dashboard/src/client/conversations/transcriptMarkdownLinks.ts
index 280ed1f2c5..4f100dcd7f 100644
--- a/packages/junior-dashboard/src/client/conversations/transcriptMarkdownLinks.ts
+++ b/packages/junior-dashboard/src/client/conversations/transcriptMarkdownLinks.ts
@@ -88,6 +88,7 @@ function findNextMarkdownLink(
start: linkStart,
};
}
+ return undefined;
}
function findMarkdownLinkSyntaxRanges(
@@ -148,6 +149,7 @@ function readMarkdownDestination(
const href = text.slice(start, index);
return href ? { end: index + 1, href } : undefined;
}
+ return undefined;
}
function findCommonMarkAutolinks(
@@ -199,6 +201,7 @@ function findNextBareLink(
start: match.index,
};
}
+ return undefined;
}
function findBareLinks(
diff --git a/packages/junior-dashboard/src/client/pages/automations/AutomationOutcomeFields.tsx b/packages/junior-dashboard/src/client/pages/automations/AutomationOutcomeFields.tsx
index ee526cc4f8..3fdb3eae5d 100644
--- a/packages/junior-dashboard/src/client/pages/automations/AutomationOutcomeFields.tsx
+++ b/packages/junior-dashboard/src/client/pages/automations/AutomationOutcomeFields.tsx
@@ -141,10 +141,10 @@ export function AutomationOutcomeFields(props: {
disabled={index === 0}
onClick={() => {
const next = [...props.value];
- [next[index - 1], next[index]] = [
- next[index],
- next[index - 1],
- ];
+ const previous = next[index - 1];
+ if (!previous) return;
+ next[index - 1] = outcome;
+ next[index] = previous;
props.onChange(next);
}}
>
diff --git a/packages/junior-dashboard/src/client/pages/automations/automationDraft.ts b/packages/junior-dashboard/src/client/pages/automations/automationDraft.ts
index 80b7c7f9b4..d1b7d23d0d 100644
--- a/packages/junior-dashboard/src/client/pages/automations/automationDraft.ts
+++ b/packages/junior-dashboard/src/client/pages/automations/automationDraft.ts
@@ -53,7 +53,7 @@ export function scheduleDraft(
...fields,
timezone: value.schedule.timezone,
time: `${String(time.hour).padStart(2, "0")}:${String(time.minute).padStart(2, "0")}`,
- weekdays: days?.map((day) => weekdays[day]),
+ weekdays: days?.flatMap((day) => weekdays[day] ?? []),
};
}
if (value.nextRunAtMs) {
diff --git a/packages/junior-dashboard/src/client/pages/system/PluginBarChart.tsx b/packages/junior-dashboard/src/client/pages/system/PluginBarChart.tsx
index d6005b1754..c0ca1d591f 100644
--- a/packages/junior-dashboard/src/client/pages/system/PluginBarChart.tsx
+++ b/packages/junior-dashboard/src/client/pages/system/PluginBarChart.tsx
@@ -23,6 +23,12 @@ const toneColors = {
warning: "#fbbf24",
} as const;
+function seriesColor(series: Widget["series"][number], index: number): string {
+ return series.tone
+ ? toneColors[series.tone]
+ : (colors[index % colors.length] ?? colors[0]);
+}
+
/** Render a validated plugin-owned categorical bar chart. */
export function PluginBarChart(props: {
range?: TimeRangeDays;
@@ -69,9 +75,7 @@ export function PluginBarChart(props: {
({
- color: series.tone
- ? toneColors[series.tone]
- : colors[index % colors.length],
+ color: seriesColor(series, index),
key: series.key,
label: series.label,
}))}
@@ -122,11 +126,7 @@ export function PluginBarChart(props: {
>
{
expect(
formatCacheShare(summary.input.cacheCreationTokens, summary.total),
).toBe("11.1%");
- const missing = { ...days[0], cacheCreationTokens: undefined };
+ const missing = { ...days[0]!, cacheCreationTokens: undefined };
expect(cacheInputTotal(missing)).toBeUndefined();
- expect(summarizeCacheInput([missing, days[1]]).total).toBeUndefined();
- expect(summarizeCacheInput([missing, days[1]]).incompletePeriods).toBe(1);
+ expect(summarizeCacheInput([missing, days[1]!]).total).toBeUndefined();
+ expect(summarizeCacheInput([missing, days[1]!]).incompletePeriods).toBe(1);
const zeroWrites = { ...days[0], cacheCreationTokens: 0 };
expect(cacheInputTotal(zeroWrites)).toBe(1_000_000_000);
expect(formatCacheShare(0, cacheInputTotal(zeroWrites))).toBe("0.0%");
diff --git a/packages/junior-dashboard/tests/client-api.test.ts b/packages/junior-dashboard/tests/client-api.test.ts
index d0ed4a5494..f2bbd9aaed 100644
--- a/packages/junior-dashboard/tests/client-api.test.ts
+++ b/packages/junior-dashboard/tests/client-api.test.ts
@@ -12,7 +12,6 @@ import {
setMockConversationArchived,
} from "../src/mock-reporting/fixtures";
import { personalSpendRefreshDelay } from "../src/client/api";
-import { fetchDashboardJson } from "../src/client/http";
import { dashboardVersionDrift } from "../src/client/components/VersionDriftBanner";
import { DASHBOARD_VERSION_HEADER } from "../src/dashboard-version";
import {
diff --git a/packages/junior-dashboard/tests/telemetry-components.test.tsx b/packages/junior-dashboard/tests/telemetry-components.test.tsx
index 7688a21771..73231b41ed 100644
--- a/packages/junior-dashboard/tests/telemetry-components.test.tsx
+++ b/packages/junior-dashboard/tests/telemetry-components.test.tsx
@@ -161,7 +161,9 @@ function plugin(name: string, overrides: Partial = {}): Plugin {
configKeys: [],
description: `${name} plugin description`,
displayName:
- name === "github" ? "GitHub" : `${name[0].toUpperCase()}${name.slice(1)}`,
+ name === "github"
+ ? "GitHub"
+ : `${name.charAt(0).toUpperCase()}${name.slice(1)}`,
name,
...overrides,
};
diff --git a/packages/junior-dashboard/tsconfig.json b/packages/junior-dashboard/tsconfig.json
index 99dac1dee6..c1982352ac 100644
--- a/packages/junior-dashboard/tsconfig.json
+++ b/packages/junior-dashboard/tsconfig.json
@@ -1,15 +1,13 @@
{
+ "extends": "../../tsconfig.base.json",
"compilerOptions": {
"target": "ES2022",
"lib": ["ES2022", "DOM"],
"module": "ESNext",
"moduleResolution": "Bundler",
- "strict": true,
"jsx": "react-jsx",
"esModuleInterop": true,
- "skipLibCheck": true,
"resolveJsonModule": true,
- "isolatedModules": true,
"allowJs": false,
"noEmit": true,
"paths": {
diff --git a/packages/junior-dashboard/tsdown.dts.config.ts b/packages/junior-dashboard/tsdown.dts.config.ts
new file mode 100644
index 0000000000..07377ba87c
--- /dev/null
+++ b/packages/junior-dashboard/tsdown.dts.config.ts
@@ -0,0 +1,19 @@
+import { defineConfig } from "tsdown";
+
+// tsup still emits the server JavaScript. Its declaration bundler needs the
+// TypeScript 6 compiler API, so tsdown bundles the public types instead.
+export default defineConfig({
+ entry: {
+ index: "src/index.ts",
+ },
+ tsconfig: "tsconfig.build.json",
+ dts: {
+ emitDtsOnly: true,
+ },
+ outDir: "dist",
+ outExtensions: () => ({
+ js: ".js",
+ dts: ".d.ts",
+ }),
+ clean: false,
+});
diff --git a/packages/junior-dashboard/tsup.config.ts b/packages/junior-dashboard/tsup.config.ts
index d72e2006bb..35337cbb0a 100644
--- a/packages/junior-dashboard/tsup.config.ts
+++ b/packages/junior-dashboard/tsup.config.ts
@@ -93,15 +93,7 @@ export default defineConfig({
},
format: "esm",
tsconfig: "tsconfig.build.json",
- dts: {
- entry: {
- index: "src/index.ts",
- },
- compilerOptions: {
- // TODO(upstream): Remove after tsup stops adding deprecated baseUrl.
- ignoreDeprecations: "6.0",
- },
- },
+ dts: false,
outDir: "dist",
clean: false,
splitting: false,
diff --git a/packages/junior-evals/package.json b/packages/junior-evals/package.json
index 3b594961f2..3bbec4641e 100644
--- a/packages/junior-evals/package.json
+++ b/packages/junior-evals/package.json
@@ -28,7 +28,7 @@
"hono": "^4.12.27",
"msw": "^2.14.6",
"tinyrainbow": "^3.1.0",
- "typescript": "^6.0.3",
+ "typescript": "^7.0.2",
"undici": "7.29.0",
"vitest": "^4.1.7",
"vitest-evals": "0.16.1",
diff --git a/packages/junior-evals/src/fixture/google.ts b/packages/junior-evals/src/fixture/google.ts
index 616077a68d..55af3f9327 100644
--- a/packages/junior-evals/src/fixture/google.ts
+++ b/packages/junior-evals/src/fixture/google.ts
@@ -60,19 +60,20 @@ function offsetMs(ms: number): number {
.formatToParts(ms)
.map((part) => [part.type, Number(part.value)]),
);
+ const part = (type: Intl.DateTimeFormatPartTypes) => parts[type] ?? 0;
const wall = Date.UTC(
- parts.year,
- parts.month - 1,
- parts.day,
- parts.hour,
- parts.minute,
+ part("year"),
+ part("month") - 1,
+ part("day"),
+ part("hour"),
+ part("minute"),
);
return wall - Math.floor(ms / 60_000) * 60_000;
}
/** The instant of a Pacific time on a day, given as UTC midnight. */
function pacificMs(dayMs: number, clock: string): number {
- const [hours, minutes] = clock.split(":").map(Number);
+ const [hours = 0, minutes = 0] = clock.split(":").map(Number);
const wall = dayMs + hours * 3_600_000 + minutes * 60_000;
// A second pass corrects the offset on days when it changes.
return wall - offsetMs(wall - offsetMs(wall));
@@ -92,6 +93,7 @@ function occurrences(calendar: MockCalendar, timeMin: string, timeMax: string) {
dayMs += DAY_MS
) {
const weekday = WEEKDAYS[new Date(dayMs).getUTCDay()];
+ if (!weekday) continue;
const date = new Date(dayMs).toISOString().slice(0, 10).replaceAll("-", "");
for (const [index, event] of calendar.events.entries()) {
const startMs = pacificMs(dayMs, event.start);
diff --git a/packages/junior-evals/tsconfig.json b/packages/junior-evals/tsconfig.json
index a8b95686ad..5c41b38ee9 100644
--- a/packages/junior-evals/tsconfig.json
+++ b/packages/junior-evals/tsconfig.json
@@ -1,14 +1,12 @@
{
+ "extends": "../../tsconfig.base.json",
"compilerOptions": {
"target": "ES2022",
"lib": ["ES2022", "DOM"],
"module": "ESNext",
"moduleResolution": "Bundler",
- "strict": true,
"esModuleInterop": true,
- "skipLibCheck": true,
"resolveJsonModule": true,
- "isolatedModules": true,
"noEmit": true,
"allowImportingTsExtensions": true,
"paths": {
diff --git a/packages/junior-github/package.json b/packages/junior-github/package.json
index b34f98f930..a851c6c4e3 100644
--- a/packages/junior-github/package.json
+++ b/packages/junior-github/package.json
@@ -50,7 +50,7 @@
"msw": "^2.14.6",
"oxlint": "^1.79.0",
"tsup": "^8.5.1",
- "typescript": "^6.0.3",
+ "typescript": "^7.0.2",
"vitest": "^4.1.7"
}
}
diff --git a/packages/junior-github/src/tool-support/attribution.ts b/packages/junior-github/src/tool-support/attribution.ts
index 5ce181cf4d..52dc3fe36e 100644
--- a/packages/junior-github/src/tool-support/attribution.ts
+++ b/packages/junior-github/src/tool-support/attribution.ts
@@ -120,9 +120,10 @@ function applyAttribution(body: string, label: string | undefined): string {
`${GITHUB_REQUEST_ATTRIBUTION_START}([\\s\\S]*?)${GITHUB_REQUEST_ATTRIBUTION_END}`,
);
const existingMatch = normalizedBody.match(existing);
- const existingLabels = existingMatch
- ? parseExistingLabels(existingMatch[1])
- : [];
+ const existingLabels =
+ existingMatch?.[1] !== undefined
+ ? parseExistingLabels(existingMatch[1])
+ : [];
const labels =
label && !existingLabels.includes(label)
? [...existingLabels, label]
diff --git a/packages/junior-github/src/webhooks/ownership.ts b/packages/junior-github/src/webhooks/ownership.ts
index bec0f3ea62..4783b61580 100644
--- a/packages/junior-github/src/webhooks/ownership.ts
+++ b/packages/junior-github/src/webhooks/ownership.ts
@@ -11,10 +11,12 @@ function parseGitHubBotIdentity(
value: string | undefined,
): GitHubBotIdentity | undefined {
const match = GITHUB_BOT_NOREPLY_EMAIL.exec(value?.trim() ?? "");
- if (!match?.groups) return undefined;
+ const login = match?.groups?.login;
+ const userId = match?.groups?.userId;
+ if (!login || !userId) return undefined;
return {
- login: match.groups.login,
- userId: Number(match.groups.userId),
+ login,
+ userId: Number(userId),
};
}
diff --git a/packages/junior-github/tsconfig.json b/packages/junior-github/tsconfig.json
index 4c12d9d7dc..3258d42876 100644
--- a/packages/junior-github/tsconfig.json
+++ b/packages/junior-github/tsconfig.json
@@ -1,12 +1,10 @@
{
+ "extends": "../../tsconfig.base.json",
"compilerOptions": {
"target": "ES2022",
"lib": ["ES2022", "DOM"],
"module": "ESNext",
"moduleResolution": "Bundler",
- "strict": true,
- "skipLibCheck": true,
- "isolatedModules": true,
"noEmit": true,
"types": ["node"]
},
diff --git a/packages/junior-google/package.json b/packages/junior-google/package.json
index f5cadb9d2d..2dd2d1f59e 100644
--- a/packages/junior-google/package.json
+++ b/packages/junior-google/package.json
@@ -43,7 +43,7 @@
"drizzle-kit": "catalog:",
"oxlint": "^1.79.0",
"tsup": "^8.5.1",
- "typescript": "^6.0.3",
+ "typescript": "^7.0.2",
"vitest": "^4.1.7"
}
}
diff --git a/packages/junior-google/src/tools/find-meeting-times.ts b/packages/junior-google/src/tools/find-meeting-times.ts
index c5759dee43..c17564a537 100644
--- a/packages/junior-google/src/tools/find-meeting-times.ts
+++ b/packages/junior-google/src/tools/find-meeting-times.ts
@@ -144,7 +144,7 @@ function localFormat(timeZone: string): Intl.DateTimeFormat {
}
function clockMinutes(value: string): number {
- const [hours, minutes] = value.split(":").map(Number);
+ const [hours = 0, minutes = 0] = value.split(":").map(Number);
return hours * 60 + minutes;
}
diff --git a/packages/junior-google/tsconfig.json b/packages/junior-google/tsconfig.json
index 8c5ea28503..928957d7f7 100644
--- a/packages/junior-google/tsconfig.json
+++ b/packages/junior-google/tsconfig.json
@@ -1,12 +1,10 @@
{
+ "extends": "../../tsconfig.base.json",
"compilerOptions": {
"target": "ES2022",
"lib": ["ES2022"],
"module": "ESNext",
"moduleResolution": "Bundler",
- "strict": true,
- "skipLibCheck": true,
- "isolatedModules": true,
"noEmit": true,
"types": ["node"]
},
diff --git a/packages/junior-linear/package.json b/packages/junior-linear/package.json
index 64e8c1a161..df76066bec 100644
--- a/packages/junior-linear/package.json
+++ b/packages/junior-linear/package.json
@@ -38,7 +38,7 @@
"@types/node": "^25.9.1",
"oxlint": "^1.79.0",
"tsup": "^8.5.1",
- "typescript": "^6.0.3",
+ "typescript": "^7.0.2",
"vitest": "^4.1.7"
}
}
diff --git a/packages/junior-linear/tsconfig.json b/packages/junior-linear/tsconfig.json
index 4c12d9d7dc..3258d42876 100644
--- a/packages/junior-linear/tsconfig.json
+++ b/packages/junior-linear/tsconfig.json
@@ -1,12 +1,10 @@
{
+ "extends": "../../tsconfig.base.json",
"compilerOptions": {
"target": "ES2022",
"lib": ["ES2022", "DOM"],
"module": "ESNext",
"moduleResolution": "Bundler",
- "strict": true,
- "skipLibCheck": true,
- "isolatedModules": true,
"noEmit": true,
"types": ["node"]
},
diff --git a/packages/junior-memory/package.json b/packages/junior-memory/package.json
index 4ec9aed007..fe8a60f087 100644
--- a/packages/junior-memory/package.json
+++ b/packages/junior-memory/package.json
@@ -22,9 +22,9 @@
"migrations"
],
"scripts": {
- "build": "tsup",
+ "build": "tsdown",
"db:generate": "pnpm exec drizzle-kit generate --config drizzle.config.ts",
- "lint": "oxlint --config ../junior/.oxlintrc.json --deny-warnings src tests tsup.config.ts",
+ "lint": "oxlint --config ../junior/.oxlintrc.json --deny-warnings src tests tsdown.config.ts",
"prepare": "pnpm run build",
"prepack": "pnpm run build",
"test": "vitest run",
@@ -43,8 +43,8 @@
"@types/node": "^25.9.1",
"drizzle-kit": "catalog:",
"oxlint": "^1.79.0",
- "tsup": "^8.5.1",
- "typescript": "^6.0.3",
+ "tsdown": "0.23.1",
+ "typescript": "^7.0.2",
"vitest": "^4.1.7"
}
}
diff --git a/packages/junior-memory/src/store.ts b/packages/junior-memory/src/store.ts
index e00c50f78b..f23151cf24 100644
--- a/packages/junior-memory/src/store.ts
+++ b/packages/junior-memory/src/store.ts
@@ -632,10 +632,10 @@ export async function archiveExpiredMemoryBatch(args: {
return { archivedCount: archivedIds.length };
}
-function denseRanks(
+function withDenseRanks(
values: T[],
key: (value: T) => string | number,
-): number[] {
+): Array<{ rank: number; value: T }> {
let previous: string | number | undefined;
let rank = 0;
return values.map((value, index) => {
@@ -644,7 +644,7 @@ function denseRanks(
rank = index + 1;
previous = current;
}
- return rank;
+ return { rank, value };
});
}
@@ -659,13 +659,14 @@ async function embedOne(
const result = embeddingResultSchema.parse(
await embedder.embedTexts({ texts: [normalized] }),
);
- if (result.vectors.length !== 1) {
+ const [vector] = result.vectors;
+ if (result.vectors.length !== 1 || !vector) {
throw new Error("Embedding provider returned an unexpected vector count.");
}
return {
model: result.model,
provider: result.provider,
- vector: result.vectors[0],
+ vector,
};
}
@@ -1110,11 +1111,12 @@ async function searchVisibleLexicalMemories(args: {
.from(candidates)
.orderBy(desc(textRank), desc(candidates.observedAtMs), asc(candidates.id))
.limit(args.limit);
- const ranks = denseRanks(rows, (row) => Number(row.textRank));
- return rows.map((row, index) => ({
- lexical: { rank: ranks[index] },
- memory: parseMemoryRow(row.memory),
- }));
+ return withDenseRanks(rows, (row) => Number(row.textRank)).map(
+ ({ rank, value: row }) => ({
+ lexical: { rank },
+ memory: parseMemoryRow(row.memory),
+ }),
+ );
}
/** Search active visible records with pgvector cosine distance. */
@@ -1167,25 +1169,26 @@ async function searchVisibleVectorMemories(args: {
asc(juniorMemoryMemories.id),
)
.limit(args.limit);
- const ranks = denseRanks(rows, (row) => Number(row.distance));
- return rows.flatMap((row, index) => {
- const distanceValue = Number(row.distance);
- if (
- row.distance === null ||
- !Number.isFinite(distanceValue) ||
- hashEmbeddedContent(row.memory.content) !== row.contentHash
- ) {
- return [];
- }
- return [
- {
- memory: parseMemoryRow(row.memory),
- vector: {
- rank: ranks[index],
+ return withDenseRanks(rows, (row) => Number(row.distance)).flatMap(
+ ({ rank, value: row }) => {
+ const distanceValue = Number(row.distance);
+ if (
+ row.distance === null ||
+ !Number.isFinite(distanceValue) ||
+ hashEmbeddedContent(row.memory.content) !== row.contentHash
+ ) {
+ return [];
+ }
+ return [
+ {
+ memory: parseMemoryRow(row.memory),
+ vector: {
+ rank,
+ },
},
- },
- ];
- });
+ ];
+ },
+ );
}
/** Create a context-bound SQL-backed store for explicit memory operations. */
diff --git a/packages/junior-memory/tsconfig.json b/packages/junior-memory/tsconfig.json
index 8c5ea28503..928957d7f7 100644
--- a/packages/junior-memory/tsconfig.json
+++ b/packages/junior-memory/tsconfig.json
@@ -1,12 +1,10 @@
{
+ "extends": "../../tsconfig.base.json",
"compilerOptions": {
"target": "ES2022",
"lib": ["ES2022"],
"module": "ESNext",
"moduleResolution": "Bundler",
- "strict": true,
- "skipLibCheck": true,
- "isolatedModules": true,
"noEmit": true,
"types": ["node"]
},
diff --git a/packages/junior-memory/tsdown.config.ts b/packages/junior-memory/tsdown.config.ts
new file mode 100644
index 0000000000..55b16d767d
--- /dev/null
+++ b/packages/junior-memory/tsdown.config.ts
@@ -0,0 +1,14 @@
+import { defineConfig } from "tsdown";
+
+export default defineConfig({
+ clean: true,
+ dts: true,
+ entry: ["src/index.ts"],
+ format: "esm",
+ outExtensions: () => ({
+ js: ".js",
+ dts: ".d.ts",
+ }),
+ sourcemap: true,
+ target: "node24",
+});
diff --git a/packages/junior-memory/tsup.config.ts b/packages/junior-memory/tsup.config.ts
deleted file mode 100644
index 91816ef4dd..0000000000
--- a/packages/junior-memory/tsup.config.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { defineConfig } from "tsup";
-
-export default defineConfig({
- clean: true,
- dts: {
- compilerOptions: {
- // TODO(upstream): Remove after tsup stops adding deprecated baseUrl.
- ignoreDeprecations: "6.0",
- },
- },
- entry: ["src/index.ts"],
- format: ["esm"],
- sourcemap: true,
- target: "node24",
-});
diff --git a/packages/junior-plugin-api/package.json b/packages/junior-plugin-api/package.json
index c12700ce73..47d6075d6f 100644
--- a/packages/junior-plugin-api/package.json
+++ b/packages/junior-plugin-api/package.json
@@ -26,16 +26,16 @@
"zod": "catalog:"
},
"scripts": {
- "build": "tsup",
+ "build": "tsdown",
"prepare": "pnpm run build",
"prepack": "pnpm run build",
- "lint": "oxlint --config ../junior/.oxlintrc.json --deny-warnings src tsup.config.ts",
+ "lint": "oxlint --config ../junior/.oxlintrc.json --deny-warnings src tsdown.config.ts",
"typecheck": "tsc --noEmit"
},
"devDependencies": {
"@oxlint/plugins": "1.79.0",
"oxlint": "^1.79.0",
- "tsup": "^8.5.1",
- "typescript": "^6.0.3"
+ "tsdown": "0.23.1",
+ "typescript": "^7.0.2"
}
}
diff --git a/packages/junior-plugin-api/tsconfig.json b/packages/junior-plugin-api/tsconfig.json
index edada258b8..ca09e695e7 100644
--- a/packages/junior-plugin-api/tsconfig.json
+++ b/packages/junior-plugin-api/tsconfig.json
@@ -1,12 +1,10 @@
{
+ "extends": "../../tsconfig.base.json",
"compilerOptions": {
"target": "ES2022",
"lib": ["ES2022", "DOM"],
"module": "ESNext",
"moduleResolution": "Bundler",
- "strict": true,
- "skipLibCheck": true,
- "isolatedModules": true,
"noEmit": true
},
"include": ["src/**/*.ts"]
diff --git a/packages/junior-plugin-api/tsdown.config.ts b/packages/junior-plugin-api/tsdown.config.ts
new file mode 100644
index 0000000000..889d9d21e3
--- /dev/null
+++ b/packages/junior-plugin-api/tsdown.config.ts
@@ -0,0 +1,16 @@
+import { defineConfig } from "tsdown";
+
+export default defineConfig({
+ entry: {
+ index: "src/index.ts",
+ },
+ format: "esm",
+ tsconfig: "tsconfig.build.json",
+ dts: true,
+ outDir: "dist",
+ outExtensions: () => ({
+ js: ".js",
+ dts: ".d.ts",
+ }),
+ clean: true,
+});
diff --git a/packages/junior-plugin-api/tsup.config.ts b/packages/junior-plugin-api/tsup.config.ts
deleted file mode 100644
index 09936ed862..0000000000
--- a/packages/junior-plugin-api/tsup.config.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { defineConfig } from "tsup";
-
-export default defineConfig({
- entry: {
- index: "src/index.ts",
- },
- format: "esm",
- tsconfig: "tsconfig.build.json",
- dts: {
- compilerOptions: {
- // TODO(upstream): Remove after tsup stops adding deprecated baseUrl.
- ignoreDeprecations: "6.0",
- },
- },
- outDir: "dist",
- clean: true,
-});
diff --git a/packages/junior-sentry/package.json b/packages/junior-sentry/package.json
index 9e9a31709b..b5666fcdfa 100644
--- a/packages/junior-sentry/package.json
+++ b/packages/junior-sentry/package.json
@@ -42,7 +42,7 @@
"@types/node": "^25.9.1",
"oxlint": "^1.79.0",
"tsup": "^8.5.1",
- "typescript": "^6.0.3",
+ "typescript": "^7.0.2",
"vitest": "^4.1.7"
}
}
diff --git a/packages/junior-sentry/tsconfig.json b/packages/junior-sentry/tsconfig.json
index 4c12d9d7dc..3258d42876 100644
--- a/packages/junior-sentry/tsconfig.json
+++ b/packages/junior-sentry/tsconfig.json
@@ -1,12 +1,10 @@
{
+ "extends": "../../tsconfig.base.json",
"compilerOptions": {
"target": "ES2022",
"lib": ["ES2022", "DOM"],
"module": "ESNext",
"moduleResolution": "Bundler",
- "strict": true,
- "skipLibCheck": true,
- "isolatedModules": true,
"noEmit": true,
"types": ["node"]
},
diff --git a/packages/junior-testing/package.json b/packages/junior-testing/package.json
index 98a1f5ac43..b4ed443419 100644
--- a/packages/junior-testing/package.json
+++ b/packages/junior-testing/package.json
@@ -21,6 +21,6 @@
"devDependencies": {
"@types/node": "^25.9.1",
"@types/pg": "^8.15.6",
- "typescript": "^6.0.3"
+ "typescript": "^7.0.2"
}
}
diff --git a/packages/junior-testing/src/pglite.ts b/packages/junior-testing/src/pglite.ts
index 97676b2d38..5254fa0723 100644
--- a/packages/junior-testing/src/pglite.ts
+++ b/packages/junior-testing/src/pglite.ts
@@ -27,11 +27,13 @@ export interface LocalPgliteFixture {
class LocalPgliteExecutor implements LocalPgliteFixture {
private activeTransaction: Transaction | undefined;
+ readonly client: PGlite;
+ private readonly schema: Record;
- constructor(
- readonly client: PGlite,
- private readonly schema: Record,
- ) {}
+ constructor(client: PGlite, schema: Record) {
+ this.client = client;
+ this.schema = schema;
+ }
db(): TDatabase {
return drizzle(this.queryClient() as PGlite, {
diff --git a/packages/junior-testing/tsconfig.json b/packages/junior-testing/tsconfig.json
index d5e6868fb4..bcecb871fb 100644
--- a/packages/junior-testing/tsconfig.json
+++ b/packages/junior-testing/tsconfig.json
@@ -1,14 +1,12 @@
{
+ "extends": "../../tsconfig.base.json",
"compilerOptions": {
"target": "ES2022",
"lib": ["ES2022", "DOM"],
"module": "ESNext",
"moduleResolution": "Bundler",
- "strict": true,
"esModuleInterop": true,
- "skipLibCheck": true,
"resolveJsonModule": true,
- "isolatedModules": true,
"noEmit": true
},
"include": ["src/**/*.ts"]
diff --git a/packages/junior-vercel/package.json b/packages/junior-vercel/package.json
index 70cf7d94f0..838308e575 100644
--- a/packages/junior-vercel/package.json
+++ b/packages/junior-vercel/package.json
@@ -42,7 +42,7 @@
"@types/node": "^25.9.1",
"oxlint": "^1.79.0",
"tsup": "^8.5.1",
- "typescript": "^6.0.3",
+ "typescript": "^7.0.2",
"vitest": "^4.1.7"
}
}
diff --git a/packages/junior-vercel/tsconfig.json b/packages/junior-vercel/tsconfig.json
index 4c12d9d7dc..3258d42876 100644
--- a/packages/junior-vercel/tsconfig.json
+++ b/packages/junior-vercel/tsconfig.json
@@ -1,12 +1,10 @@
{
+ "extends": "../../tsconfig.base.json",
"compilerOptions": {
"target": "ES2022",
"lib": ["ES2022", "DOM"],
"module": "ESNext",
"moduleResolution": "Bundler",
- "strict": true,
- "skipLibCheck": true,
- "isolatedModules": true,
"noEmit": true,
"types": ["node"]
},
diff --git a/packages/junior/package.json b/packages/junior/package.json
index 655e295f97..d74386ad52 100644
--- a/packages/junior/package.json
+++ b/packages/junior/package.json
@@ -116,14 +116,15 @@
"@sentry/junior-testing": "workspace:*",
"@types/node": "^25.9.1",
"@types/pg": "^8.15.6",
+ "@typescript/typescript6": "6.0.2",
"@vitest/coverage-v8": "4.1.7",
"dependency-cruiser": "^17.4.0",
"drizzle-kit": "catalog:",
"msw": "^2.14.6",
"nitro": "3.0.260522-beta",
"oxlint": "^1.79.0",
- "tsdown": "0.23.0",
- "typescript": "^6.0.3",
+ "tsdown": "0.23.1",
+ "typescript": "^7.0.2",
"vercel": "^54.4.0",
"vitest": "^4.1.7"
}
diff --git a/packages/junior/scripts/check-tool-annotations.mjs b/packages/junior/scripts/check-tool-annotations.mjs
index cbe504b07a..d76188f5b1 100644
--- a/packages/junior/scripts/check-tool-annotations.mjs
+++ b/packages/junior/scripts/check-tool-annotations.mjs
@@ -1,7 +1,7 @@
import fs from "node:fs/promises";
import path from "node:path";
import { fileURLToPath } from "node:url";
-import ts from "typescript";
+import ts from "@typescript/typescript6";
const TOOL_CONSTRUCTORS = new Set(["definePluginTool", "tool", "zodTool"]);
const REQUIRED_HINTS = [
diff --git a/packages/junior/scripts/check-tool-error-classification.mjs b/packages/junior/scripts/check-tool-error-classification.mjs
index eb9ceae4db..132913d4df 100644
--- a/packages/junior/scripts/check-tool-error-classification.mjs
+++ b/packages/junior/scripts/check-tool-error-classification.mjs
@@ -1,7 +1,7 @@
import fs from "node:fs/promises";
import path from "node:path";
import { fileURLToPath } from "node:url";
-import ts from "typescript";
+import ts from "@typescript/typescript6";
const BASELINE_RELATIVE_PATH =
"packages/junior/scripts/tool-error-classification-baseline.txt";
diff --git a/packages/junior/src/api/automations/routes.ts b/packages/junior/src/api/automations/routes.ts
index 1ec114aa05..f659a2da1d 100644
--- a/packages/junior/src/api/automations/routes.ts
+++ b/packages/junior/src/api/automations/routes.ts
@@ -266,6 +266,7 @@ export function createAutomationRoutes(): Hono {
{ status: 400 },
);
}
+ return undefined;
}),
async (context) => {
const { id } = context.req.valid("param");
diff --git a/packages/junior/src/build/copy-build-content.ts b/packages/junior/src/build/copy-build-content.ts
index de6e085b29..31c4051559 100644
--- a/packages/junior/src/build/copy-build-content.ts
+++ b/packages/junior/src/build/copy-build-content.ts
@@ -168,7 +168,7 @@ function parseIncludePattern(pattern: string): {
);
}
- const isScopedPackage = parts[0].startsWith("@");
+ const isScopedPackage = parts[0]?.startsWith("@") ?? false;
const packagePartCount = isScopedPackage ? 2 : 1;
const pkgName = parts.slice(0, packagePartCount).join("/");
const subpath = parts.slice(packagePartCount).join("/");
diff --git a/packages/junior/src/chat/agent/index.ts b/packages/junior/src/chat/agent/index.ts
index 0ccf882752..d5dd69a887 100644
--- a/packages/junior/src/chat/agent/index.ts
+++ b/packages/junior/src/chat/agent/index.ts
@@ -183,8 +183,11 @@ async function readRunConversationVisibility(
/** Preserve delivery-error ownership across the agent generation boundary. */
class AssistantMessageDeliveryError extends Error {
- constructor(readonly originalError: unknown) {
+ readonly originalError: unknown;
+
+ constructor(originalError: unknown) {
super("Assistant message delivery failed");
+ this.originalError = originalError;
}
}
@@ -1290,6 +1293,7 @@ async function executeAgentRunInPrivacyContext(
}
return deliverAssistantMessage(event.message);
}
+ return undefined;
});
let newMessages: PiMessage[] = [];
@@ -1662,6 +1666,7 @@ async function executeAgentRunInPrivacyContext(
}
throw error;
}
+ return undefined;
},
{
"gen_ai.operation.name": "invoke_agent",
diff --git a/packages/junior/src/chat/automations/edit-rules.ts b/packages/junior/src/chat/automations/edit-rules.ts
index 4e347b4437..011d8da784 100644
--- a/packages/junior/src/chat/automations/edit-rules.ts
+++ b/packages/junior/src/chat/automations/edit-rules.ts
@@ -7,11 +7,11 @@ import type { EventAutomation } from "@/chat/event-automations/types";
import type { ScheduledAutomation } from "@/chat/scheduled-automations/types";
export class AutomationEditError extends ToolInputError {
- constructor(
- message: string,
- readonly field?: string,
- ) {
+ readonly field: string | undefined;
+
+ constructor(message: string, field?: string) {
super(message);
+ this.field = field;
this.name = "AutomationEditError";
}
}
diff --git a/packages/junior/src/chat/capabilities/jr-rpc-command.ts b/packages/junior/src/chat/capabilities/jr-rpc-command.ts
index 60520681b7..09584d2034 100644
--- a/packages/junior/src/chat/capabilities/jr-rpc-command.ts
+++ b/packages/junior/src/chat/capabilities/jr-rpc-command.ts
@@ -59,7 +59,7 @@ function parsePrefixFlag(
const prefix = extras[1]?.trim();
return { ok: true, ...(prefix ? { prefix } : undefined) };
}
- if (extras.length === 1 && extras[0].startsWith("--prefix=")) {
+ if (extras.length === 1 && extras[0]?.startsWith("--prefix=")) {
const prefix = extras[0].slice("--prefix=".length).trim();
return { ok: true, ...(prefix ? { prefix } : undefined) };
}
diff --git a/packages/junior/src/chat/conversations/sql/history.ts b/packages/junior/src/chat/conversations/sql/history.ts
index d01f03f595..7306e4c24a 100644
--- a/packages/junior/src/chat/conversations/sql/history.ts
+++ b/packages/junior/src/chat/conversations/sql/history.ts
@@ -151,7 +151,11 @@ function messagesSummarizedEventFromRow(
}
class SqlConversationEventStore implements ConversationEventStore {
- constructor(private readonly executor: JuniorSqlDatabase) {}
+ private readonly executor: JuniorSqlDatabase;
+
+ constructor(executor: JuniorSqlDatabase) {
+ this.executor = executor;
+ }
async append(
conversationId: string,
diff --git a/packages/junior/src/chat/conversations/sql/message-search.ts b/packages/junior/src/chat/conversations/sql/message-search.ts
index fc9a468315..61e61345ad 100644
--- a/packages/junior/src/chat/conversations/sql/message-search.ts
+++ b/packages/junior/src/chat/conversations/sql/message-search.ts
@@ -1,14 +1,4 @@
-import {
- and,
- desc,
- eq,
- gte,
- isNull,
- lt,
- ne,
- sql,
- type SQL,
-} from "drizzle-orm";
+import { and, desc, eq, gte, isNull, lt, ne, sql, type SQL } from "drizzle-orm";
import type { JuniorSqlDatabase } from "@/db/db";
import {
juniorConversationAnnotations,
@@ -26,7 +16,11 @@ import type {
const EXCERPT_WITHOUT_QUERY_CHARS = 240;
class SqlConversationMessageSearchStore implements ConversationMessageSearchStore {
- constructor(private readonly executor: JuniorSqlDatabase) {}
+ private readonly executor: JuniorSqlDatabase;
+
+ constructor(executor: JuniorSqlDatabase) {
+ this.executor = executor;
+ }
async search(args: {
currentConversationId: string;
diff --git a/packages/junior/src/chat/conversations/sql/privacy.ts b/packages/junior/src/chat/conversations/sql/privacy.ts
index ac87c50817..8bc9c0d399 100644
--- a/packages/junior/src/chat/conversations/sql/privacy.ts
+++ b/packages/junior/src/chat/conversations/sql/privacy.ts
@@ -40,10 +40,11 @@ async function readRootCandidate(
)
.where(eq(juniorConversations.conversationId, conversationId));
const row = rows[0];
- return row?.requestedRootConversationId !== null &&
- (row?.requestedParentConversationId !== null ||
- row?.requestedRootConversationId === row?.requestedConversationId) &&
- row?.rootConversationId === row.requestedRootConversationId &&
+ return row !== undefined &&
+ row.requestedRootConversationId !== null &&
+ (row.requestedParentConversationId !== null ||
+ row.requestedRootConversationId === row.requestedConversationId) &&
+ row.rootConversationId === row.requestedRootConversationId &&
row.rootRootConversationId === row.rootConversationId &&
row.rootParentConversationId === null &&
row.rootDestinationId !== null
diff --git a/packages/junior/src/chat/conversations/sql/store.ts b/packages/junior/src/chat/conversations/sql/store.ts
index 83e74eac5f..b314b312cd 100644
--- a/packages/junior/src/chat/conversations/sql/store.ts
+++ b/packages/junior/src/chat/conversations/sql/store.ts
@@ -338,7 +338,11 @@ function assertSameConversationDestination(args: {
}
export class SqlStore implements ConversationStore {
- constructor(private readonly executor: JuniorSqlDatabase) {}
+ private readonly executor: JuniorSqlDatabase;
+
+ constructor(executor: JuniorSqlDatabase) {
+ this.executor = executor;
+ }
async getConversationIdByProviderConversation(
args: ProviderConversationReference,
diff --git a/packages/junior/src/chat/conversations/turn-lifecycle.ts b/packages/junior/src/chat/conversations/turn-lifecycle.ts
index 1eb8e78d1f..c06ddf165d 100644
--- a/packages/junior/src/chat/conversations/turn-lifecycle.ts
+++ b/packages/junior/src/chat/conversations/turn-lifecycle.ts
@@ -41,7 +41,11 @@ export interface ConversationTurnLifecycle {
/** Persist correlated turn lifecycle facts with retry-safe terminal exclusion. */
export class ConversationTurnLifecycleService implements ConversationTurnLifecycle {
- constructor(private readonly events: ConversationEventStore) {}
+ private readonly events: ConversationEventStore;
+
+ constructor(events: ConversationEventStore) {
+ this.events = events;
+ }
/** Record the turn start once after every input message is durable. */
async start(input: StartConversationTurnInput): Promise {
diff --git a/packages/junior/src/chat/discovery.ts b/packages/junior/src/chat/discovery.ts
index 27c01769ae..25c5d7df4b 100644
--- a/packages/junior/src/chat/discovery.ts
+++ b/packages/junior/src/chat/discovery.ts
@@ -241,10 +241,6 @@ export function resolveHomeDir(
resolvedCwd,
options?.projectRoots,
);
- if (candidates.length === 0) {
- return directApp;
- }
-
candidates.sort((left, right) => {
const leftScore = scoreAppCandidate(left);
const rightScore = scoreAppCandidate(right);
@@ -262,15 +258,15 @@ export function resolveHomeDir(
}
return left.localeCompare(right);
});
- return candidates[0];
+ return candidates[0] ?? directApp;
}
-function resolveContentRoots(subdir: "data" | "skills" | "plugins"): string[] {
+function resolveContentRoot(subdir: "data" | "skills" | "plugins"): string {
if (subdir === "data") {
- return [homeDir()];
+ return homeDir();
}
- return [path.join(homeDir(), subdir)];
+ return path.join(homeDir(), subdir);
}
/** Return the built-in skills directory in source and packaged builds. */
@@ -292,7 +288,7 @@ export function builtInSkillsDir(): string {
/** Return the data directory (same as homeDir). */
export function dataDir(): string {
- return resolveContentRoots("data")[0];
+ return resolveContentRoot("data");
}
/** Return the path to the SOUL.md file. */
@@ -312,27 +308,27 @@ export function descriptionPath(): string {
/** Return the skills directory path. */
export function skillsDir(): string {
- return resolveContentRoots("skills")[0];
+ return resolveContentRoot("skills");
}
/** Return the plugins directory path. */
export function pluginsDir(): string {
- return resolveContentRoots("plugins")[0];
+ return resolveContentRoot("plugins");
}
/** Return all unique data root directories. */
export function dataRoots(): string[] {
- return unique(resolveContentRoots("data"));
+ return unique([resolveContentRoot("data")]);
}
/** Return all unique skill root directories. */
export function skillRoots(): string[] {
- return unique([builtInSkillsDir(), ...resolveContentRoots("skills")]);
+ return unique([builtInSkillsDir(), resolveContentRoot("skills")]);
}
/** Return all unique plugin root directories. */
export function pluginRoots(): string[] {
- return unique(resolveContentRoots("plugins"));
+ return unique([resolveContentRoot("plugins")]);
}
/** Return candidate paths where SOUL.md might be found. */
diff --git a/packages/junior/src/chat/ingress/slack-webhook.ts b/packages/junior/src/chat/ingress/slack-webhook.ts
index d2c1a1b4c6..bf53baf36b 100644
--- a/packages/junior/src/chat/ingress/slack-webhook.ts
+++ b/packages/junior/src/chat/ingress/slack-webhook.ts
@@ -128,7 +128,7 @@ const IGNORED_MESSAGE_SUBTYPES = new Set([
]);
class SlackEventPersistenceError extends Error {
- readonly cause: unknown;
+ override readonly cause: unknown;
constructor(cause: unknown) {
super("Slack event durable persistence failed");
diff --git a/packages/junior/src/chat/mcp/client.ts b/packages/junior/src/chat/mcp/client.ts
index 762c42a2f3..dfefb677d8 100644
--- a/packages/junior/src/chat/mcp/client.ts
+++ b/packages/junior/src/chat/mcp/client.ts
@@ -89,10 +89,12 @@ export class PluginMcpClient {
private listedTools?: ListedTool[];
private readonly resourceHost?: string;
- constructor(
- private readonly plugin: PluginDefinition,
- private readonly options: PluginMcpClientOptions = {},
- ) {
+ private readonly plugin: PluginDefinition;
+ private readonly options: PluginMcpClientOptions;
+
+ constructor(plugin: PluginDefinition, options: PluginMcpClientOptions = {}) {
+ this.plugin = plugin;
+ this.options = options;
const url = plugin.manifest.mcp?.url;
this.resourceHost = url ? new URL(url).hostname : undefined;
}
diff --git a/packages/junior/src/chat/mcp/oauth-provider.ts b/packages/junior/src/chat/mcp/oauth-provider.ts
index 1297774cdd..63c0a0b5db 100644
--- a/packages/junior/src/chat/mcp/oauth-provider.ts
+++ b/packages/junior/src/chat/mcp/oauth-provider.ts
@@ -53,10 +53,28 @@ function requireEnv(name: string): string {
export class StateBackedMcpOAuthClientProvider implements OAuthClientProvider {
readonly clientMetadata: OAuthClientMetadata;
+ readonly authSessionId: string;
+ private readonly callbackUrl: string;
+ private readonly sessionContext:
+ | Omit<
+ McpAuthSessionState,
+ | "schemaVersion"
+ | "authSessionId"
+ | "authorizationUrl"
+ | "codeVerifier"
+ | "createdAtMs"
+ | "updatedAtMs"
+ >
+ | undefined;
+ private readonly runCredentialMutation:
+ | ((mutation: () => Promise) => Promise)
+ | undefined;
+ private readonly oauthClient: PluginMcpOAuthClientConfig | undefined;
+
constructor(
- readonly authSessionId: string,
- private readonly callbackUrl: string,
- private readonly sessionContext?: Omit<
+ authSessionId: string,
+ callbackUrl: string,
+ sessionContext?: Omit<
McpAuthSessionState,
| "schemaVersion"
| "authSessionId"
@@ -65,11 +83,14 @@ export class StateBackedMcpOAuthClientProvider implements OAuthClientProvider {
| "createdAtMs"
| "updatedAtMs"
>,
- private readonly runCredentialMutation?: (
- mutation: () => Promise,
- ) => Promise,
- private readonly oauthClient?: PluginMcpOAuthClientConfig,
+ runCredentialMutation?: (mutation: () => Promise) => Promise,
+ oauthClient?: PluginMcpOAuthClientConfig,
) {
+ this.authSessionId = authSessionId;
+ this.callbackUrl = callbackUrl;
+ this.sessionContext = sessionContext;
+ this.runCredentialMutation = runCredentialMutation;
+ this.oauthClient = oauthClient;
this.clientMetadata = createClientMetadata(callbackUrl);
}
diff --git a/packages/junior/src/chat/mcp/tool-manager.ts b/packages/junior/src/chat/mcp/tool-manager.ts
index 8a650466e4..184a681b46 100644
--- a/packages/junior/src/chat/mcp/tool-manager.ts
+++ b/packages/junior/src/chat/mcp/tool-manager.ts
@@ -347,10 +347,13 @@ export class McpToolManager {
>();
private readonly toolsByProvider = new Map();
+ private readonly options: McpToolManagerOptions;
+
constructor(
plugins: PluginDefinition[],
- private readonly options: McpToolManagerOptions = {},
+ options: McpToolManagerOptions = {},
) {
+ this.options = options;
for (const plugin of plugins) {
if (plugin.manifest.mcp) {
this.pluginsByProvider.set(plugin.manifest.name, plugin);
diff --git a/packages/junior/src/chat/plugins/agent-hooks.ts b/packages/junior/src/chat/plugins/agent-hooks.ts
index 0cc92c8cd9..05ccbb50ec 100644
--- a/packages/junior/src/chat/plugins/agent-hooks.ts
+++ b/packages/junior/src/chat/plugins/agent-hooks.ts
@@ -1292,12 +1292,13 @@ function sanitizeOperationalReport(args: {
OPERATIONAL_REPORT_MAX_LABEL_LENGTH,
) ?? String(categoryIndex + 1),
values: Object.fromEntries(
- seriesEntries.map(({ sanitizedSeries, sourceKey }) => [
- sanitizedSeries.key,
- Number.isFinite(category.values[sourceKey])
- ? category.values[sourceKey]
- : 0,
- ]),
+ seriesEntries.map(({ sanitizedSeries, sourceKey }) => {
+ const value = category.values[sourceKey];
+ return [
+ sanitizedSeries.key,
+ value !== undefined && Number.isFinite(value) ? value : 0,
+ ];
+ }),
),
}));
const sanitizedWidget: NonNullable<
diff --git a/packages/junior/src/chat/plugins/task-runner.ts b/packages/junior/src/chat/plugins/task-runner.ts
index a4f7262590..be6d821a5b 100644
--- a/packages/junior/src/chat/plugins/task-runner.ts
+++ b/packages/junior/src/chat/plugins/task-runner.ts
@@ -494,7 +494,7 @@ export async function processPluginTask(
): Promise {
await withPluginTaskLock(pluginTaskId(message), async () => {
const resolved = findPluginTask(message);
- if (!resolved) {
+ if (!resolved?.task) {
throw new Error(
`Plugin task "${message.plugin}.${message.name}" is not registered`,
);
diff --git a/packages/junior/src/chat/providers/slack/runtime.ts b/packages/junior/src/chat/providers/slack/runtime.ts
index 4bc5654236..83d4c62199 100644
--- a/packages/junior/src/chat/providers/slack/runtime.ts
+++ b/packages/junior/src/chat/providers/slack/runtime.ts
@@ -442,7 +442,7 @@ export function createSlackTurnRuntime<
return {
start: async (
- context: RuntimeLogContext,
+ _context: RuntimeLogContext,
targetMessage: Message,
): Promise => {
const channelId = getChannelId(thread, targetMessage);
diff --git a/packages/junior/src/chat/sandbox/skill-sandbox.ts b/packages/junior/src/chat/sandbox/skill-sandbox.ts
index 96cb7fd477..92bdb37cd9 100644
--- a/packages/junior/src/chat/sandbox/skill-sandbox.ts
+++ b/packages/junior/src/chat/sandbox/skill-sandbox.ts
@@ -270,8 +270,9 @@ export class SkillSandbox {
return active;
}
- if (this.loadedSkills.size === 1) {
- return [...this.loadedSkills.values()][0];
+ const [onlySkill, ...otherSkills] = this.loadedSkills.values();
+ if (onlySkill && otherSkills.length === 0) {
+ return onlySkill;
}
throw new Error(
diff --git a/packages/junior/src/chat/services/context-compaction.ts b/packages/junior/src/chat/services/context-compaction.ts
index 5fbb1f83bd..889ed8b1ab 100644
--- a/packages/junior/src/chat/services/context-compaction.ts
+++ b/packages/junior/src/chat/services/context-compaction.ts
@@ -113,13 +113,15 @@ interface ActiveContextCompactionArgs {
/** Raised when Junior cannot compact history below the active model's hard ceiling. */
export class ContextInputLimitExceededError extends Error {
- constructor(
- readonly estimatedTokens: number,
- readonly inputLimitTokens: number,
- ) {
+ readonly estimatedTokens: number;
+ readonly inputLimitTokens: number;
+
+ constructor(estimatedTokens: number, inputLimitTokens: number) {
super(
`Agent context is ${estimatedTokens} estimated input tokens, above the ${inputLimitTokens} token limit`,
);
+ this.estimatedTokens = estimatedTokens;
+ this.inputLimitTokens = inputLimitTokens;
this.name = "ContextInputLimitExceededError";
}
}
diff --git a/packages/junior/src/chat/services/conversation-memory.ts b/packages/junior/src/chat/services/conversation-memory.ts
index 438929a279..18d5fda3d0 100644
--- a/packages/junior/src/chat/services/conversation-memory.ts
+++ b/packages/junior/src/chat/services/conversation-memory.ts
@@ -212,6 +212,7 @@ export function markConversationMessage(
if (messageIndex < 0) return;
const current = conversation.messages[messageIndex];
+ if (!current) return;
conversation.messages[messageIndex] = {
...current,
meta: {
diff --git a/packages/junior/src/chat/services/subscribed-decision.ts b/packages/junior/src/chat/services/subscribed-decision.ts
index 6b7970c61c..fa09050158 100644
--- a/packages/junior/src/chat/services/subscribed-decision.ts
+++ b/packages/junior/src/chat/services/subscribed-decision.ts
@@ -4,18 +4,22 @@ import { estimateTextTokens } from "@/chat/services/context-budget";
import { isProviderRetryError } from "@/chat/services/provider-error";
import { buildSubscribedReplyRouterPolicy } from "@/chat/services/subscribed-reply-router-policy";
-export enum SubscribedReplyReason {
- ThreadOptOut = "thread_opt_out",
- ExplicitMention = "explicit_mention",
- DirectedFollowUp = "directed_follow_up",
- DirectedToOtherParty = "directed_to_other_party",
- EmptyMessage = "empty_message",
- Classifier = "llm_classifier",
- SideConversation = "side_conversation",
- LowConfidence = "low_confidence",
- ClassifierError = "classifier_error",
- PassiveDisabled = "passive_disabled",
-}
+/** Why the subscribed-thread router chose to reply or stay silent. */
+export const SubscribedReplyReason = {
+ ThreadOptOut: "thread_opt_out",
+ ExplicitMention: "explicit_mention",
+ DirectedFollowUp: "directed_follow_up",
+ DirectedToOtherParty: "directed_to_other_party",
+ EmptyMessage: "empty_message",
+ Classifier: "llm_classifier",
+ SideConversation: "side_conversation",
+ LowConfidence: "low_confidence",
+ ClassifierError: "classifier_error",
+ PassiveDisabled: "passive_disabled",
+} as const;
+
+export type SubscribedReplyReason =
+ (typeof SubscribedReplyReason)[keyof typeof SubscribedReplyReason];
export interface SubscribedDecisionInput {
rawText: string;
@@ -241,7 +245,7 @@ function parseTranscriptMessages(
for (const line of lines) {
const match = line.match(TRANSCRIPT_MESSAGE_LINE_RE);
- if (!match) {
+ if (!match?.[1]) {
continue;
}
diff --git a/packages/junior/src/chat/skills.ts b/packages/junior/src/chat/skills.ts
index d49206ebca..054f56021f 100644
--- a/packages/junior/src/chat/skills.ts
+++ b/packages/junior/src/chat/skills.ts
@@ -144,7 +144,7 @@ export function parseSkillFile(
expectedName?: string,
): { ok: true; skill: ParsedSkillFile } | { ok: false; error: string } {
const match = FRONTMATTER_RE.exec(raw);
- if (!match) {
+ if (match?.[1] === undefined) {
return { ok: false, error: "Missing YAML frontmatter at start of file" };
}
@@ -201,7 +201,9 @@ export function parseSkillFile(
name: result.data.name,
description: result.data.description,
body: stripFrontmatter(raw),
- ...(result.data.metadata ? { metadata: result.data.metadata } : undefined),
+ ...(result.data.metadata
+ ? { metadata: result.data.metadata }
+ : undefined),
...(result.data.compatibility !== undefined
? { compatibility: result.data.compatibility }
: undefined),
@@ -436,7 +438,7 @@ export function parseSkillInvocation(
const escapePattern = (value: string) =>
value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
const slashMatch = /(?:^|\s)\/([a-z0-9]+(?:-[a-z0-9]+)*)/i.exec(trimmed);
- if (slashMatch) {
+ if (slashMatch?.[1]) {
const skillName = slashMatch[1].toLowerCase();
if (!availableSkills.some((skill) => skill.name === skillName)) {
return null;
@@ -447,7 +449,10 @@ export function parseSkillInvocation(
const dollarPattern = /(?:^|\s)\$([a-z0-9]+(?:-[a-z0-9]+)*)/gi;
for (const match of trimmed.matchAll(dollarPattern)) {
- const skillName = match[1].toLowerCase();
+ const skillName = match[1]?.toLowerCase();
+ if (!skillName) {
+ continue;
+ }
if (isCommonEnvironmentVariable(skillName)) {
continue;
}
diff --git a/packages/junior/src/chat/slack/assistant-thread/status-scheduler.ts b/packages/junior/src/chat/slack/assistant-thread/status-scheduler.ts
index 415268a6d2..e1e207ed69 100644
--- a/packages/junior/src/chat/slack/assistant-thread/status-scheduler.ts
+++ b/packages/junior/src/chat/slack/assistant-thread/status-scheduler.ts
@@ -97,8 +97,9 @@ export function createAssistantStatusScheduler(args: {
): string[] | undefined => (visible ? [visible] : undefined);
const getInitialStatusText = (): string => {
- if (loadingMessages?.length) {
- return loadingMessages[0];
+ const [firstLoadingMessage] = loadingMessages ?? [];
+ if (firstLoadingMessage) {
+ return firstLoadingMessage;
}
return defaultStatus.text;
diff --git a/packages/junior/src/chat/slack/mrkdwn.ts b/packages/junior/src/chat/slack/mrkdwn.ts
index d49bfe800f..bf0d195bd9 100644
--- a/packages/junior/src/chat/slack/mrkdwn.ts
+++ b/packages/junior/src/chat/slack/mrkdwn.ts
@@ -118,7 +118,7 @@ function readBareUrl(
): { url: string; suffix: string; end: number } | undefined {
let end = start;
while (end < line.length) {
- const ch = line[end];
+ const ch = line.charAt(end);
if (
/\s/.test(ch) ||
ch === "<" ||
@@ -267,8 +267,7 @@ export function ensureBlockSpacing(text: string): string {
const result: string[] = [];
let inCodeBlock = false;
- for (let i = 0; i < lines.length; i++) {
- const line = lines[i];
+ for (const line of lines) {
const isCodeFence = codeBlockPattern.test(line.trimStart());
if (isCodeFence) {
diff --git a/packages/junior/src/chat/slack/output.ts b/packages/junior/src/chat/slack/output.ts
index 089e7101e7..69c0049169 100644
--- a/packages/junior/src/chat/slack/output.ts
+++ b/packages/junior/src/chat/slack/output.ts
@@ -98,7 +98,7 @@ function getFenceContinuation(text: string): FenceContinuation | null {
for (const line of text.split("\n")) {
const trimmed = line.trimStart();
const openerMatch = trimmed.match(/^(`{3,}|~{3,})(.*)$/);
- if (!openerMatch) {
+ if (!openerMatch?.[1]) {
continue;
}
diff --git a/packages/junior/src/chat/task-execution/slack-work.ts b/packages/junior/src/chat/task-execution/slack-work.ts
index 5247dca6bd..0cae2c7bf4 100644
--- a/packages/junior/src/chat/task-execution/slack-work.ts
+++ b/packages/junior/src/chat/task-execution/slack-work.ts
@@ -807,6 +807,7 @@ export function createSlackConversationWorker(
}
throw error;
}
+ return undefined;
},
});
if (
diff --git a/packages/junior/src/chat/tool-support/zod-tool.ts b/packages/junior/src/chat/tool-support/zod-tool.ts
index 3a7db17e7f..105f54aefc 100644
--- a/packages/junior/src/chat/tool-support/zod-tool.ts
+++ b/packages/junior/src/chat/tool-support/zod-tool.ts
@@ -31,7 +31,8 @@ type StructuredToolExecuteResult =
| z.input
| StructuredToolResultEnvelope>;
-interface StructuredToolResultEnvelope {
+/** Tool result that carries model-visible content and typed details. */
+export interface StructuredToolResultEnvelope {
content: Array;
details: TDetails;
}
diff --git a/packages/junior/src/chat/tools/sandbox/file-uploads.ts b/packages/junior/src/chat/tools/sandbox/file-uploads.ts
index 9332219ab9..6786a9dadf 100644
--- a/packages/junior/src/chat/tools/sandbox/file-uploads.ts
+++ b/packages/junior/src/chat/tools/sandbox/file-uploads.ts
@@ -97,8 +97,11 @@ export interface SandboxFileUpload {
/** Signal that a model-provided file path did not resolve in the active sandbox. */
export class SandboxFileNotFoundError extends ToolInputError {
- constructor(readonly path: string) {
+ readonly path: string;
+
+ constructor(path: string) {
super(`failed to read file: ${path}`);
+ this.path = path;
}
}
diff --git a/packages/junior/src/chat/tools/sandbox/file-utils.ts b/packages/junior/src/chat/tools/sandbox/file-utils.ts
index efcfb57b51..1386d11868 100644
--- a/packages/junior/src/chat/tools/sandbox/file-utils.ts
+++ b/packages/junior/src/chat/tools/sandbox/file-utils.ts
@@ -104,7 +104,7 @@ function escapeRegExp(value: string): string {
function globToRegExp(pattern: string): RegExp {
let source = "";
for (let index = 0; index < pattern.length; index += 1) {
- const char = pattern[index];
+ const char = pattern.charAt(index);
const next = pattern[index + 1];
if (char === "*" && next === "*") {
if (pattern[index + 2] === "/") {
diff --git a/packages/junior/src/chat/tools/sandbox/grep.ts b/packages/junior/src/chat/tools/sandbox/grep.ts
index 0773708c94..00a172c886 100644
--- a/packages/junior/src/chat/tools/sandbox/grep.ts
+++ b/packages/junior/src/chat/tools/sandbox/grep.ts
@@ -170,11 +170,11 @@ export async function grepFiles(params: {
? path.posix.basename(filePath)
: path.posix.relative(root, filePath);
const matchedLines: number[] = [];
- for (let lineIndex = 0; lineIndex < lines.length; lineIndex += 1) {
+ for (const [lineIndex, line] of lines.entries()) {
if (
!lineMatches({
ignoreCase: params.ignoreCase,
- line: lines[lineIndex],
+ line,
literal: params.literal,
pattern: params.pattern,
regex,
@@ -200,7 +200,7 @@ export async function grepFiles(params: {
continue;
}
emittedLines.add(current);
- const truncated = truncateGrepLine(lines[current]);
+ const truncated = truncateGrepLine(lines[current] ?? "");
lineTruncated ||= truncated.truncated;
const separator = matchedLineSet.has(current) ? ":" : "-";
output.push(
@@ -334,7 +334,11 @@ async function grepFilesWithRipgrep(params: {
cause: new Error(detail),
});
}
- if (/regex parse error|error parsing regex|is not allowed in a regex/i.test(detail)) {
+ if (
+ /regex parse error|error parsing regex|is not allowed in a regex/i.test(
+ detail,
+ )
+ ) {
throw new ToolInputError(`Invalid regex pattern: ${params.pattern}`, {
cause: new Error(detail),
});
diff --git a/packages/junior/src/chat/tools/sandbox/text-edits.ts b/packages/junior/src/chat/tools/sandbox/text-edits.ts
index 2e89f0d412..3bfca25441 100644
--- a/packages/junior/src/chat/tools/sandbox/text-edits.ts
+++ b/packages/junior/src/chat/tools/sandbox/text-edits.ts
@@ -214,8 +214,7 @@ export function validateAndApplyTextEdits(
});
const matchedEdits: MatchedEdit[] = [];
- for (let index = 0; index < normalizedEdits.length; index += 1) {
- const edit = normalizedEdits[index];
+ for (const [index, edit] of normalizedEdits.entries()) {
const matchIndex = content.indexOf(edit.oldText);
if (matchIndex === -1) {
throw new ToolInputError(
@@ -237,9 +236,11 @@ export function validateAndApplyTextEdits(
}
matchedEdits.sort((a, b) => a.matchIndex - b.matchIndex);
- for (let index = 1; index < matchedEdits.length; index += 1) {
+ for (const [index, current] of matchedEdits.entries()) {
const previous = matchedEdits[index - 1];
- const current = matchedEdits[index];
+ if (!previous) {
+ continue;
+ }
if (previous.matchIndex + previous.matchLength > current.matchIndex) {
throw new ToolInputError(
`edits[${previous.editIndex}] and edits[${current.editIndex}] overlap in ${targetName}. Merge overlapping replacements into one edit.`,
@@ -248,8 +249,7 @@ export function validateAndApplyTextEdits(
}
let newContent = content;
- for (let index = matchedEdits.length - 1; index >= 0; index -= 1) {
- const edit = matchedEdits[index];
+ for (const edit of [...matchedEdits].reverse()) {
newContent =
newContent.slice(0, edit.matchIndex) +
edit.newText +
diff --git a/packages/junior/src/chat/tools/web/fetch-content.ts b/packages/junior/src/chat/tools/web/fetch-content.ts
index a72b819991..ad6a004b36 100644
--- a/packages/junior/src/chat/tools/web/fetch-content.ts
+++ b/packages/junior/src/chat/tools/web/fetch-content.ts
@@ -82,7 +82,10 @@ function decodeHtmlEntities(value: string): string {
function extractTitle(html: string): string | undefined {
const match = html.match(/]*>([\s\S]*?)<\/title>/i);
- const title = match ? normalizeWhitespace(decodeHtmlEntities(match[1])) : "";
+ const title =
+ match?.[1] !== undefined
+ ? normalizeWhitespace(decodeHtmlEntities(match[1]))
+ : "";
return title.length > 0 ? title : undefined;
}
diff --git a/packages/junior/src/chat/tools/web/network.ts b/packages/junior/src/chat/tools/web/network.ts
index 6f728298ee..3ce294a7f5 100644
--- a/packages/junior/src/chat/tools/web/network.ts
+++ b/packages/junior/src/chat/tools/web/network.ts
@@ -7,18 +7,21 @@ import { ToolInputError } from "@/chat/tools/execution/tool-input-error";
function isPrivateIpv4(ip: string): boolean {
const parts = ip.split(".").map((chunk) => Number.parseInt(chunk, 10));
+ const [first, second] = parts;
if (
parts.length !== 4 ||
+ first === undefined ||
+ second === undefined ||
parts.some((n) => Number.isNaN(n) || n < 0 || n > 255)
) {
return true;
}
- if (parts[0] === 10 || parts[0] === 127) return true;
- if (parts[0] === 169 && parts[1] === 254) return true;
- if (parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31) return true;
- if (parts[0] === 192 && parts[1] === 168) return true;
- if (parts[0] === 0) return true;
+ if (first === 10 || first === 127) return true;
+ if (first === 169 && second === 254) return true;
+ if (first === 172 && second >= 16 && second <= 31) return true;
+ if (first === 192 && second === 168) return true;
+ if (first === 0) return true;
return false;
}
@@ -28,12 +31,13 @@ function parseMappedIpv4FromIpv6(mapped: string): string | undefined {
}
const hexMatch = mapped.match(/^([0-9a-f]{1,4}):([0-9a-f]{1,4})$/i);
- if (!hexMatch) {
+ const [, highHex, lowHex] = hexMatch ?? [];
+ if (!highHex || !lowHex) {
return undefined;
}
- const high = Number.parseInt(hexMatch[1], 16);
- const low = Number.parseInt(hexMatch[2], 16);
+ const high = Number.parseInt(highHex, 16);
+ const low = Number.parseInt(lowHex, 16);
return `${(high >> 8) & 0xff}.${high & 0xff}.${(low >> 8) & 0xff}.${low & 0xff}`;
}
@@ -72,6 +76,8 @@ type ResolvedAddress = {
family: 4 | 6;
};
+type ResolvedAddresses = [ResolvedAddress, ...ResolvedAddress[]];
+
function normalizeHostname(hostname: string): string {
const lowered = hostname.toLowerCase();
if (lowered.startsWith("[") && lowered.endsWith("]")) {
@@ -82,12 +88,8 @@ function normalizeHostname(hostname: string): string {
async function resolvePublicHostname(
hostname: string,
-): Promise {
+): Promise {
const records = await dns.lookup(hostname, { all: true, verbatim: true });
- if (records.length === 0) {
- throw new ToolInputError("Could not resolve hostname");
- }
-
const deduped = new Map();
for (const record of records) {
const family = record.family === 6 ? 6 : 4;
@@ -103,12 +105,16 @@ async function resolvePublicHostname(
});
}
- return [...deduped.values()];
+ const [first, ...rest] = deduped.values();
+ if (!first) {
+ throw new ToolInputError("Could not resolve hostname");
+ }
+ return [first, ...rest];
}
async function resolvePinnedAddresses(
url: URL,
-): Promise {
+): Promise {
const hostname = normalizeHostname(url.hostname);
if (net.isIP(hostname) !== 0) {
return undefined;
@@ -116,8 +122,8 @@ async function resolvePinnedAddresses(
return resolvePublicHostname(hostname);
}
-function createPinnedLookup(resolved: ResolvedAddress[]) {
- const fallback = resolved[0];
+function createPinnedLookup(resolved: ResolvedAddresses) {
+ const [fallback] = resolved;
return (
_hostname: string,
options: { family?: number | "IPv4" | "IPv6"; all?: boolean },
@@ -155,7 +161,7 @@ function createPinnedLookup(resolved: ResolvedAddress[]) {
async function fetchWithPinnedLookup(
url: URL,
- resolved: ResolvedAddress[] | undefined,
+ resolved: ResolvedAddresses | undefined,
signal: AbortSignal,
): Promise {
if (!resolved) {
@@ -180,7 +186,9 @@ async function fetchWithPinnedLookup(
path: `${url.pathname}${url.search}`,
method: "GET",
lookup,
- ...(url.protocol === "https:" ? { servername: url.hostname } : undefined),
+ ...(url.protocol === "https:"
+ ? { servername: url.hostname }
+ : undefined),
headers: {
"user-agent": USER_AGENT,
"accept-encoding": "identity",
@@ -196,8 +204,8 @@ async function fetchWithPinnedLookup(
signal.removeEventListener("abort", onAbort);
const headers = new Headers();
const rawHeaders = response.rawHeaders;
- for (let i = 0; i < rawHeaders.length; i += 2) {
- headers.append(rawHeaders[i], rawHeaders[i + 1]);
+ for (let i = 0; i + 1 < rawHeaders.length; i += 2) {
+ headers.append(rawHeaders[i] ?? "", rawHeaders[i + 1] ?? "");
}
const rawStatus = response.statusCode ?? 500;
diff --git a/packages/junior/src/cli/init.ts b/packages/junior/src/cli/init.ts
index da6ada8174..770ecb00e7 100644
--- a/packages/junior/src/cli/init.ts
+++ b/packages/junior/src/cli/init.ts
@@ -192,7 +192,7 @@ export async function runInit(
"cross-env": "^10.1.0",
jiti: "^2.7.0",
nitro: "3.0.260522-beta",
- typescript: "^6.0.3",
+ typescript: "^7.0.2",
},
};
fs.writeFileSync(
diff --git a/packages/junior/src/dashboard-routes.ts b/packages/junior/src/dashboard-routes.ts
index a7a6591e25..f56c67843b 100644
--- a/packages/junior/src/dashboard-routes.ts
+++ b/packages/junior/src/dashboard-routes.ts
@@ -253,7 +253,7 @@ function routePatternMatchesConcretePath(
const patternSegments = routeSegments(pattern);
const pathSegments = routeSegments(concretePath);
for (let index = 0; index < patternSegments.length; index += 1) {
- const segment = patternSegments[index];
+ const segment = patternSegments[index] ?? "";
if (segment === "**" || segment === "*") {
return true;
}
diff --git a/packages/junior/src/db/neon.ts b/packages/junior/src/db/neon.ts
index b085889e9d..810f6ee37d 100644
--- a/packages/junior/src/db/neon.ts
+++ b/packages/junior/src/db/neon.ts
@@ -23,10 +23,13 @@ class NeonExecutor implements NeonJuniorSqlExecutor {
private savepointId = 0;
private isolatedQueryId = 0;
- constructor(
- private readonly pool: Pool,
- private readonly connectionString: string,
- ) {}
+ private readonly pool: Pool;
+ private readonly connectionString: string;
+
+ constructor(pool: Pool, connectionString: string) {
+ this.pool = pool;
+ this.connectionString = connectionString;
+ }
db(): JuniorDatabase {
return drizzle(this.queryClient(), {
diff --git a/packages/junior/src/db/postgres.ts b/packages/junior/src/db/postgres.ts
index 2259b7dd99..e71e89a5d6 100644
--- a/packages/junior/src/db/postgres.ts
+++ b/packages/junior/src/db/postgres.ts
@@ -21,10 +21,13 @@ class PostgresExecutor implements JuniorSqlExecutor {
private savepointId = 0;
private isolatedQueryId = 0;
- constructor(
- private readonly pool: PgPool,
- private readonly connectionString: string,
- ) {}
+ private readonly pool: PgPool;
+ private readonly connectionString: string;
+
+ constructor(pool: PgPool, connectionString: string) {
+ this.pool = pool;
+ this.connectionString = connectionString;
+ }
db(): JuniorDatabase {
return drizzle(this.queryClient(), {
diff --git a/packages/junior/src/package-resolution.ts b/packages/junior/src/package-resolution.ts
index 3b6f996e09..ba3415bc84 100644
--- a/packages/junior/src/package-resolution.ts
+++ b/packages/junior/src/package-resolution.ts
@@ -89,17 +89,18 @@ export function isValidPackageName(packageName: string): boolean {
return false;
}
- const parts = packageName.split("/");
- if (parts[0].startsWith("@")) {
+ const [scopeOrName = "", name, ...rest] = packageName.split("/");
+ if (scopeOrName.startsWith("@")) {
return (
- parts.length === 2 &&
- parts[0].length > 1 &&
- isValidPackageSegment(parts[0].slice(1)) &&
- isValidPackageSegment(parts[1])
+ name !== undefined &&
+ rest.length === 0 &&
+ scopeOrName.length > 1 &&
+ isValidPackageSegment(scopeOrName.slice(1)) &&
+ isValidPackageSegment(name)
);
}
- return parts.length === 1 && isValidPackageSegment(parts[0]);
+ return name === undefined && isValidPackageSegment(scopeOrName);
}
function findPackageRoot(entryPath: string): string | undefined {
diff --git a/packages/junior/tests/component/memory-plugin-storage.test.ts b/packages/junior/tests/component/memory-plugin-storage.test.ts
index 7af60c9e98..fba9dfb60b 100644
--- a/packages/junior/tests/component/memory-plugin-storage.test.ts
+++ b/packages/junior/tests/component/memory-plugin-storage.test.ts
@@ -470,7 +470,7 @@ WHERE indexname = 'junior_memory_memories_search_idx'
conversationId: "slack:D999:1718800099.000000",
locationId: "other-location",
userId: "U123",
- }).memory_listMemories.execute!({}, {}),
+ }).memory_listMemories!.execute!({}, {}),
).resolves.toEqual({
memories: [
expect.objectContaining({ id: privateMemory.memory.id }),
@@ -556,7 +556,7 @@ WHERE indexname = 'junior_memory_memories_search_idx'
expect(tools).toHaveProperty("memory_createMemory");
await expect(
- tools.memory_listMemories.execute!({}, {}),
+ tools.memory_listMemories!.execute!({}, {}),
).resolves.toMatchObject({
memories: [
expect.objectContaining({
@@ -568,7 +568,7 @@ WHERE indexname = 'junior_memory_memories_search_idx'
],
});
await expect(
- tools.memory_searchMemories.execute!({ query: "personal recall" }, {}),
+ tools.memory_searchMemories!.execute!({ query: "personal recall" }, {}),
).resolves.toMatchObject({
memories: [
expect.objectContaining({
@@ -577,7 +577,7 @@ WHERE indexname = 'junior_memory_memories_search_idx'
],
});
await expect(
- tools.memory_createMemory.execute!(
+ tools.memory_createMemory!.execute!(
{
content: "I prefer terse status updates.",
scope: "public",
diff --git a/packages/junior/tests/component/runtime/agent-run-mcp-progressive-loading.test.ts b/packages/junior/tests/component/runtime/agent-run-mcp-progressive-loading.test.ts
index 19ff00c84c..3bd3f02f5b 100644
--- a/packages/junior/tests/component/runtime/agent-run-mcp-progressive-loading.test.ts
+++ b/packages/junior/tests/component/runtime/agent-run-mcp-progressive-loading.test.ts
@@ -635,14 +635,23 @@ vi.mock("@/chat/mcp/client", () => {
}
class MockPluginMcpClient {
+ private readonly plugin: { manifest: { name: string } };
+ private readonly options: {
+ authProvider?: {
+ redirectToAuthorization?: (authorizationUrl: URL) => Promise;
+ };
+ };
+
constructor(
- private readonly plugin: { manifest: { name: string } },
- private readonly options: {
+ plugin: { manifest: { name: string } },
+ options: {
authProvider?: {
redirectToAuthorization?: (authorizationUrl: URL) => Promise;
};
},
) {
+ this.plugin = plugin;
+ this.options = options;
clientOptions.push({ ...options });
}
diff --git a/packages/junior/tests/component/sandbox/snapshot/resolve.test.ts b/packages/junior/tests/component/sandbox/snapshot/resolve.test.ts
index 046cc15ff1..848f8550e4 100644
--- a/packages/junior/tests/component/sandbox/snapshot/resolve.test.ts
+++ b/packages/junior/tests/component/sandbox/snapshot/resolve.test.ts
@@ -3,11 +3,11 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
const {
sandboxCreateMock,
getRuntimeDependenciesMock,
- getRuntimePostinstallMock
+ getRuntimePostinstallMock,
} = vi.hoisted(() => ({
sandboxCreateMock: vi.fn(),
getRuntimeDependenciesMock: vi.fn(),
- getRuntimePostinstallMock: vi.fn()
+ getRuntimePostinstallMock: vi.fn(),
}));
const { withSpanMock } = vi.hoisted(() => ({
withSpanMock: vi.fn(
@@ -17,28 +17,28 @@ const { withSpanMock } = vi.hoisted(() => ({
_context: unknown,
callback: () => Promise,
) => callback(),
- )
+ ),
}));
vi.mock("@vercel/sandbox", () => ({
FileSystem: class {},
Sandbox: {
- create: sandboxCreateMock
- }
+ create: sandboxCreateMock,
+ },
}));
vi.mock("@/chat/plugins/catalog-runtime", () => ({
pluginCatalogRuntime: {
getRuntimeDependencies: getRuntimeDependenciesMock,
- getRuntimePostinstall: getRuntimePostinstallMock
- }
+ getRuntimePostinstall: getRuntimePostinstallMock,
+ },
}));
vi.mock("@/chat/sandbox/runtime-dependencies", () => ({
GLOBAL_RUNTIME_DEPENDENCIES: [],
- GLOBAL_RUNTIME_POSTINSTALL: []
+ GLOBAL_RUNTIME_POSTINSTALL: [],
}));
vi.mock("@/chat/logging", () => ({
- withSpan: withSpanMock
+ withSpan: withSpanMock,
}));
const store = new Map();
@@ -68,8 +68,8 @@ vi.mock("@/chat/state/adapter", () => ({
}),
releaseLock: vi.fn(async (lock: { key: string }) => {
heldLocks.delete(lock.key);
- })
- })
+ }),
+ }),
}));
import { resolve as resolveSnapshot } from "@/chat/sandbox/snapshot/resolve";
@@ -78,7 +78,7 @@ function makeSandbox(snapshotId: string) {
const runCommand = vi.fn(async () => ({
exitCode: 0,
stdout: async () => "",
- stderr: async () => ""
+ stderr: async () => "",
}));
const snapshot = vi.fn(async () => ({ snapshotId }));
const stop = vi.fn(async () => {});
@@ -88,11 +88,11 @@ function makeSandbox(snapshotId: string) {
sessionId: `sbx_${snapshotId}_session`,
runCommand,
snapshot,
- stop
+ stop,
})),
runCommand,
snapshot,
- stop
+ stop,
};
}
@@ -138,12 +138,12 @@ describe("snapshot resolution", () => {
const first = await resolveSnapshot({
runtime: "node22",
- timeoutMs: 60_000
+ timeoutMs: 60_000,
});
expect(first.snapshotId).toBe("snap_new");
expect(first.cacheHit).toBe(false);
expect(first.resolveOutcome).toBe("rebuilt");
- const [cacheKey] = [...store.keys()];
+ const cacheKey = [...store.keys()][0]!;
const cached = JSON.parse(store.get(cacheKey) ?? "") as {
buildDurationMs?: number;
};
@@ -154,7 +154,7 @@ describe("snapshot resolution", () => {
runtime: "node22",
timeoutMs: 60_000,
forceRebuild: true,
- staleSnapshotId: "snap_old"
+ staleSnapshotId: "snap_old",
});
expect(forced.snapshotId).toBe("snap_new");
expect(forced.cacheHit).toBe(true);
@@ -172,7 +172,7 @@ describe("snapshot resolution", () => {
const snapshot = await resolveSnapshot({
runtime: "node22",
- timeoutMs: 60_000
+ timeoutMs: 60_000,
});
expect(snapshot.snapshotId).toBe("snap_stopped");
expect(sandbox.stop).toHaveBeenCalledTimes(1);
@@ -187,7 +187,7 @@ describe("snapshot resolution", () => {
await expect(
resolveSnapshot({
runtime: "node22",
- timeoutMs: 60_000
+ timeoutMs: 60_000,
}),
).rejects.toThrow("state unavailable");
expect(sandboxCreateMock).not.toHaveBeenCalled();
@@ -201,15 +201,15 @@ describe("snapshot resolution", () => {
const first = await resolveSnapshot({
runtime: "node22",
- timeoutMs: 60_000
+ timeoutMs: 60_000,
});
- const [cacheKey] = [...store.keys()];
+ const cacheKey = [...store.keys()][0]!;
store.set(cacheKey, "private-token-abc");
await expect(
resolveSnapshot({
runtime: "node22",
- timeoutMs: 60_000
+ timeoutMs: 60_000,
}),
).rejects.toEqual(
new Error(`Invalid cached sandbox snapshot for ${first.profileHash}`),
@@ -225,7 +225,7 @@ describe("snapshot resolution", () => {
await resolveSnapshot({
runtime: "node22",
- timeoutMs: 60_000
+ timeoutMs: 60_000,
});
expect(acquiredLockTtls).toEqual([90_000]);
@@ -248,7 +248,7 @@ describe("snapshot resolution", () => {
if (phase === "waiting_for_lock") {
controller.abort(reason);
}
- }
+ },
});
await expect(resolving).rejects.toBe(reason);
@@ -265,7 +265,7 @@ describe("snapshot resolution", () => {
async ({ signal }: { signal?: AbortSignal }) =>
await new Promise((_resolve, reject) => {
signal?.addEventListener("abort", () => reject(signal.reason), {
- once: true
+ once: true,
});
}),
);
@@ -273,7 +273,7 @@ describe("snapshot resolution", () => {
const resolving = resolveSnapshot({
runtime: "node22",
timeoutMs: 60_000,
- signal: controller.signal
+ signal: controller.signal,
});
await vi.waitFor(() => {
expect(sandboxCreateMock).toHaveBeenCalledWith(
@@ -296,7 +296,7 @@ describe("snapshot resolution", () => {
const first = await resolveSnapshot({
runtime: "node22",
- timeoutMs: 60_000
+ timeoutMs: 60_000,
});
expect(first.snapshotId).toBe("snap_old");
expect(first.cacheHit).toBe(false);
@@ -312,7 +312,7 @@ describe("snapshot resolution", () => {
runtime: "node22",
timeoutMs: 60_000,
forceRebuild: true,
- staleSnapshotId: "snap_old"
+ staleSnapshotId: "snap_old",
});
expect(second.snapshotId).toBe("snap_new");
expect(second.cacheHit).toBe(false);
@@ -331,7 +331,7 @@ describe("snapshot resolution", () => {
const first = await resolveSnapshot({
runtime: "node22",
- timeoutMs: 60_000
+ timeoutMs: 60_000,
});
expect(first.snapshotId).toBe("snap_initial");
expect(first.cacheHit).toBe(false);
@@ -340,7 +340,7 @@ describe("snapshot resolution", () => {
const forced = await resolveSnapshot({
runtime: "node22",
timeoutMs: 60_000,
- forceRebuild: true
+ forceRebuild: true,
});
expect(forced.snapshotId).toBe("snap_forced");
expect(forced.cacheHit).toBe(false);
@@ -359,13 +359,13 @@ describe("snapshot resolution", () => {
const first = await resolveSnapshot({
runtime: "node22",
- timeoutMs: 60_000
+ timeoutMs: 60_000,
});
expect(first.snapshotId).toBe("snap_initial");
expect(first.cacheHit).toBe(false);
expect(first.resolveOutcome).toBe("rebuilt");
- const [cacheKey] = [...store.keys()];
+ const cacheKey = [...store.keys()][0]!;
const initialCached = JSON.parse(store.get(cacheKey) ?? "") as {
snapshotId: string;
createdAtMs: number;
@@ -378,7 +378,7 @@ describe("snapshot resolution", () => {
cacheKey,
JSON.stringify({
...initialCached,
- snapshotId: "snap_from_other_worker"
+ snapshotId: "snap_from_other_worker",
}),
);
}, 100);
@@ -389,7 +389,7 @@ describe("snapshot resolution", () => {
const concurrent = resolveSnapshot({
runtime: "node22",
timeoutMs: 60_000,
- forceRebuild: true
+ forceRebuild: true,
});
await vi.advanceTimersByTimeAsync(2_000);
@@ -406,13 +406,13 @@ describe("snapshot resolution", () => {
const snapshot = await resolveSnapshot({
runtime: "node22",
- timeoutMs: 60_000
+ timeoutMs: 60_000,
});
expect(snapshot).toMatchObject({
dependencyCount: 0,
cacheHit: false,
- resolveOutcome: "no_profile"
+ resolveOutcome: "no_profile",
});
expect(sandboxCreateMock).not.toHaveBeenCalled();
});
@@ -432,16 +432,16 @@ describe("snapshot resolution", () => {
repos: [
{
provider: "github",
- repo: "getsentry/sentry"
+ repo: "getsentry/sentry",
},
- ]
+ ],
};
const snapshot = await resolveSnapshot({
runtime: "node22",
timeoutMs: 60_000,
workspace,
- prepareWorkspace
+ prepareWorkspace,
});
expect(snapshot.snapshotId).toBe("snap_workspace");
@@ -458,7 +458,7 @@ describe("snapshot resolution", () => {
runtime: "node22",
timeoutMs: 60_000,
workspace,
- prepareWorkspace
+ prepareWorkspace,
});
expect(reused.snapshotId).toBe("snap_workspace");
expect(reused.cacheHit).toBe(true);
diff --git a/packages/junior/tests/component/task-execution/slack-conversation-work.test.ts b/packages/junior/tests/component/task-execution/slack-conversation-work.test.ts
index 0de2b399ce..badd0be6aa 100644
--- a/packages/junior/tests/component/task-execution/slack-conversation-work.test.ts
+++ b/packages/junior/tests/component/task-execution/slack-conversation-work.test.ts
@@ -1814,7 +1814,6 @@ describe("Slack conversation work execution", () => {
services: {
agentRunner: {
run: async (request) => {
- const _text = request.instruction.text;
const context = request;
await context?.durability?.onInputCommitted?.();
diff --git a/packages/junior/tests/component/vercel-queue-dev.test.ts b/packages/junior/tests/component/vercel-queue-dev.test.ts
index 3af0e2cd2d..0c28f3704d 100644
--- a/packages/junior/tests/component/vercel-queue-dev.test.ts
+++ b/packages/junior/tests/component/vercel-queue-dev.test.ts
@@ -256,7 +256,6 @@ describe("plugin task Vercel queue integration", () => {
region: "iad1",
topicName: "topic",
};
- // @ts-expect-error non-overlapping boundary cast; rule forbids as-unknown-as chains
const call = handleCallback.mock.calls[0] as PluginQueueCall;
const handler = call?.[0];
const retry = call?.[1].retry;
@@ -427,7 +426,6 @@ describe("registerVercelConversationWorkDevConsumer", () => {
region: "iad1",
topicName: "topic",
};
- // @ts-expect-error non-overlapping boundary cast; rule forbids as-unknown-as chains
const call = handleCallback.mock.calls[0] as ConversationQueueCall;
const handler = call?.[0];
const retry = call?.[1].retry;
@@ -536,7 +534,6 @@ describe("registerVercelConversationWorkDevConsumer", () => {
});
createVercelConversationWorkCallback({ run });
- // @ts-expect-error non-overlapping boundary cast; rule forbids as-unknown-as chains
const call = handleCallback.mock.calls[0] as
| [
(
diff --git a/packages/junior/tests/fixtures/postgres/executor.ts b/packages/junior/tests/fixtures/postgres/executor.ts
index a2ac4c6770..2649ddb05f 100644
--- a/packages/junior/tests/fixtures/postgres/executor.ts
+++ b/packages/junior/tests/fixtures/postgres/executor.ts
@@ -10,10 +10,13 @@ class ClientJuniorSqlExecutor implements JuniorSqlExecutor {
private savepointId = 0;
private isolatedQueryId = 0;
- constructor(
- private readonly client: PoolClient,
- private readonly closeTransaction: () => Promise,
- ) {}
+ private readonly client: PoolClient;
+ private readonly closeTransaction: () => Promise;
+
+ constructor(client: PoolClient, closeTransaction: () => Promise) {
+ this.client = client;
+ this.closeTransaction = closeTransaction;
+ }
db(): JuniorDatabase {
return drizzle(this.client, {
diff --git a/packages/junior/tests/integration/api/automation-edits.test.ts b/packages/junior/tests/integration/api/automation-edits.test.ts
index 94bd7ceb9e..b85b2e7980 100644
--- a/packages/junior/tests/integration/api/automation-edits.test.ts
+++ b/packages/junior/tests/integration/api/automation-edits.test.ts
@@ -50,7 +50,7 @@ async function setup(kind: "scheduled" | "event") {
["U123", "creator@example.com", "T123"],
["U456", "reader@example.com", "T123"],
["U123", "foreign@example.com", "TFOREIGN"],
- ]) {
+ ] as const) {
await getConversationStore().recordActivity({
conversationId: `slack:${teamId}:${slackUserId}:edit`,
actor: { platform: "slack", slackUserId, email, teamId },
diff --git a/packages/junior/tests/integration/api/conversations/event-list.test.ts b/packages/junior/tests/integration/api/conversations/event-list.test.ts
index 243262b9b8..f51df9ea88 100644
--- a/packages/junior/tests/integration/api/conversations/event-list.test.ts
+++ b/packages/junior/tests/integration/api/conversations/event-list.test.ts
@@ -472,7 +472,7 @@ describe("conversation event list API", () => {
for (const [conversationId, cursor] of [
[firstConversationId, tampered],
[secondConversationId, previousCursor],
- ]) {
+ ] as const) {
const response = await app.request(
`http://localhost/api/conversations/${conversationId}/events?before=${encodeURIComponent(cursor)}`,
);
diff --git a/packages/junior/tests/integration/event-automations.test.ts b/packages/junior/tests/integration/event-automations.test.ts
index fa54a49f72..83db11f1ab 100644
--- a/packages/junior/tests/integration/event-automations.test.ts
+++ b/packages/junior/tests/integration/event-automations.test.ts
@@ -464,7 +464,7 @@ describe("event automations", () => {
{ queue, teamId },
);
- const [{ conversationId }] = queue.sentRecords();
+ const { conversationId } = queue.sentRecords()[0]!;
expect(conversationId).toBeDefined();
const dispatch = await getDispatchRecord(
conversationId!.replace(/^agent-dispatch:/, ""),
@@ -682,7 +682,7 @@ describe("event automations", () => {
),
).resolves.toEqual({ dispatched: 1 });
- const [{ conversationId }] = queue.sentRecords();
+ const { conversationId } = queue.sentRecords()[0]!;
const dispatch = await getDispatchRecord(
conversationId!.replace(/^agent-dispatch:/, ""),
);
diff --git a/packages/junior/tests/integration/slack-file-upload.test.ts b/packages/junior/tests/integration/slack-file-upload.test.ts
index 4c893e8127..d393279548 100644
--- a/packages/junior/tests/integration/slack-file-upload.test.ts
+++ b/packages/junior/tests/integration/slack-file-upload.test.ts
@@ -127,11 +127,11 @@ describe("uploadFilesToThread", () => {
expect(uploadUrlCalls).toHaveLength(2);
expect(uploadUrlCalls[0]?.params).toMatchObject({
filename: "a.png",
- length: String(files[0].data.length),
+ length: String(files[0]!.data.length),
});
expect(uploadUrlCalls[1]?.params).toMatchObject({
filename: "b.jpg",
- length: String(files[1].data.length),
+ length: String(files[1]!.data.length),
});
const externalUploadCalls = getCapturedSlackFileUploadCalls();
diff --git a/packages/junior/tests/integration/slack-schedule-tools.test.ts b/packages/junior/tests/integration/slack-schedule-tools.test.ts
index 967d37c7c6..e6eed9aa00 100644
--- a/packages/junior/tests/integration/slack-schedule-tools.test.ts
+++ b/packages/junior/tests/integration/slack-schedule-tools.test.ts
@@ -1992,7 +1992,7 @@ describe("Slack schedule tool wiring via createTools", () => {
// Create a task through the real wired tool.
const result = await executeRegisteredTool<{
automation: { id: string };
- }>(tools.slackScheduleCreateAutomation, {
+ }>(tools.slackScheduleCreateAutomation!, {
instruction: "Wiring test: post a weekly digest.",
schedule: {
kind: "recurring",
@@ -2066,7 +2066,7 @@ describe("Slack schedule tool wiring via createTools", () => {
);
await expect(
- executeRegisteredTool(tools.slackScheduleCreateAutomation, {
+ executeRegisteredTool(tools.slackScheduleCreateAutomation!, {
instruction: "Post a weekly digest.",
schedule: {
kind: "recurring",
@@ -2078,12 +2078,12 @@ describe("Slack schedule tool wiring via createTools", () => {
}),
).rejects.toThrow("No active Slack conversation is available.");
await expect(
- executeRegisteredTool(tools.slackScheduleDeleteAutomation, {
+ executeRegisteredTool(tools.slackScheduleDeleteAutomation!, {
automationId: "sched_missing",
}),
).rejects.toThrow("No active Slack conversation is available.");
await expect(
- executeRegisteredTool(tools.createEventAutomation, {
+ executeRegisteredTool(tools.createEventAutomation!, {
instruction: "Summarize new channel messages.",
trigger: {
namespace: "slack",
diff --git a/packages/junior/tests/integration/user-lookup.test.ts b/packages/junior/tests/integration/user-lookup.test.ts
index 642de818cb..445c6e7eb3 100644
--- a/packages/junior/tests/integration/user-lookup.test.ts
+++ b/packages/junior/tests/integration/user-lookup.test.ts
@@ -816,7 +816,7 @@ describe("userLookup", () => {
);
expect(tools).toHaveProperty("userLookup");
- expect(tools.userLookup.description).toContain("provider");
+ expect(tools.userLookup?.description).toContain("provider");
});
});
});
diff --git a/packages/junior/tests/msw/handlers/slack-api.ts b/packages/junior/tests/msw/handlers/slack-api.ts
index 98a64fa01d..8b79cd5b4f 100644
--- a/packages/junior/tests/msw/handlers/slack-api.ts
+++ b/packages/junior/tests/msw/handlers/slack-api.ts
@@ -335,7 +335,6 @@ function getSlackConversationParam(
}
function validateSlackApiRequest(
- method: SlackApiMethod,
params: Record,
): SlackMockHttpResponse | undefined {
const conversation = getSlackConversationParam(params);
@@ -447,7 +446,7 @@ export const slackApiHandlers = [
params: requestBody,
});
- const validationResponse = validateSlackApiRequest(rawMethod, requestBody);
+ const validationResponse = validateSlackApiRequest(requestBody);
if (validationResponse) {
return toHttpResponse(validationResponse);
}
diff --git a/packages/junior/tests/unit/build/nitro-plugin-module.test.ts b/packages/junior/tests/unit/build/nitro-plugin-module.test.ts
index f21752b8ab..86541a232b 100644
--- a/packages/junior/tests/unit/build/nitro-plugin-module.test.ts
+++ b/packages/junior/tests/unit/build/nitro-plugin-module.test.ts
@@ -453,7 +453,7 @@ describe("juniorNitro plugin modules", () => {
}).nitro.setup(nitro);
expect(rollupBeforeHooks).toHaveLength(1);
- await rollupBeforeHooks[0]({}, { plugins: buildPlugins });
+ await rollupBeforeHooks[0]!({}, { plugins: buildPlugins });
expect(buildPlugins).toHaveLength(1);
await buildPlugins[0]?.writeBundle?.();
diff --git a/packages/junior/tests/unit/cli/snapshot-create-cli.test.ts b/packages/junior/tests/unit/cli/snapshot-create-cli.test.ts
index b48a119f78..5304f4f82a 100644
--- a/packages/junior/tests/unit/cli/snapshot-create-cli.test.ts
+++ b/packages/junior/tests/unit/cli/snapshot-create-cli.test.ts
@@ -63,7 +63,7 @@ describe("snapshot create cli", () => {
expect(logs).toContain(
"Sandbox snapshot inputs: plugins=0 system_dependencies=0 npm_dependencies=0 postinstall_commands=0",
);
- await resolveMock.mock.calls[0][0].onProgress("resolve_start");
+ await resolveMock.mock.calls[0]![0].onProgress("resolve_start");
expect(logs).toContain("Resolving sandbox snapshot profile...");
expect(
logs.some((line) => line.includes("resolve_outcome=no_profile")),
diff --git a/packages/junior/tests/unit/mcp/tool-manager.test.ts b/packages/junior/tests/unit/mcp/tool-manager.test.ts
index f48e4f2c6f..1866cc2ba6 100644
--- a/packages/junior/tests/unit/mcp/tool-manager.test.ts
+++ b/packages/junior/tests/unit/mcp/tool-manager.test.ts
@@ -29,10 +29,10 @@ vi.mock("@/chat/mcp/client", () => {
}
class MockPluginMcpClient {
- constructor(
- private readonly plugin: PluginDefinition,
- options?: unknown,
- ) {
+ private readonly plugin: PluginDefinition;
+
+ constructor(plugin: PluginDefinition, options?: unknown) {
+ this.plugin = plugin;
if (clientSetupError.value) {
throw clientSetupError.value;
}
diff --git a/packages/junior/tests/unit/web/image-generate.test.ts b/packages/junior/tests/unit/web/image-generate.test.ts
index 030d18b2d4..0e0f3495b1 100644
--- a/packages/junior/tests/unit/web/image-generate.test.ts
+++ b/packages/junior/tests/unit/web/image-generate.test.ts
@@ -37,7 +37,7 @@ const defaultImageOptions = {
};
function getRequestBody(fetchMock: ReturnType) {
- const request = fetchMock.mock.calls[0];
+ const request = fetchMock.mock.calls[0]!;
expect(request).toBeDefined();
expect(request[1]).toBeDefined();
return JSON.parse((request[1] as RequestInit).body as string);
@@ -120,7 +120,7 @@ describe("createImageGenerateTool", () => {
const result = await tool.execute({ prompt: "test prompt" }, {} as any);
expect(fetchMock).toHaveBeenCalledTimes(1);
- const request = fetchMock.mock.calls[0];
+ const request = fetchMock.mock.calls[0]!;
expect(request).toBeDefined();
expect(request[0]).toBe("https://ai-gateway.vercel.sh/v1/chat/completions");
expect(getRequestBody(fetchMock)).toMatchObject({
diff --git a/packages/junior/tsconfig.build.json b/packages/junior/tsconfig.build.json
index b94167f70e..763de65c55 100644
--- a/packages/junior/tsconfig.build.json
+++ b/packages/junior/tsconfig.build.json
@@ -11,6 +11,7 @@
"src/api.ts",
"src/api/**/*.ts",
"src/app.ts",
+ "src/cli/**/*.ts",
"src/handlers/**/*.ts",
"src/instrumentation.ts",
"src/nitro.ts",
diff --git a/packages/junior/tsconfig.json b/packages/junior/tsconfig.json
index 985b0197f1..3d86291090 100644
--- a/packages/junior/tsconfig.json
+++ b/packages/junior/tsconfig.json
@@ -1,14 +1,12 @@
{
+ "extends": "../../tsconfig.base.json",
"compilerOptions": {
"target": "ES2022",
"lib": ["ES2022", "DOM"],
"module": "ESNext",
"moduleResolution": "Bundler",
- "strict": true,
"esModuleInterop": true,
- "skipLibCheck": true,
"resolveJsonModule": true,
- "isolatedModules": true,
"allowJs": false,
"noEmit": true,
"paths": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d423599877..8d7124b2ce 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -48,6 +48,8 @@ overrides:
ws: 8.20.1
yaml: ^2.9.0
+packageExtensionsChecksum: sha256-yO3rUISp2Y4ah1jg/R+Tkn/ZrTP8tMj6B0BkRdDGQqQ=
+
importers:
.:
@@ -102,7 +104,7 @@ importers:
version: 2.9.0(@opentelemetry/api@1.9.1)
'@sentry/junior':
specifier: workspace:*
- version: file:packages/junior
+ version: file:packages/junior(@types/node@25.9.1)
'@sentry/junior-agent-browser':
specifier: workspace:*
version: link:../../packages/junior-agent-browser
@@ -111,7 +113,7 @@ importers:
version: link:../../packages/junior-amplitude
'@sentry/junior-dashboard':
specifier: workspace:*
- version: file:packages/junior-dashboard(@opentelemetry/api@1.9.1)(jiti@2.7.0)
+ version: file:packages/junior-dashboard(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(jiti@2.7.0)
'@sentry/junior-datadog':
specifier: workspace:*
version: link:../../packages/junior-datadog
@@ -159,8 +161,8 @@ importers:
specifier: 3.0.260522-beta
version: 3.0.260522-beta(jiti@2.7.0)
typescript:
- specifier: ^6.0.3
- version: 6.0.3
+ specifier: ^7.0.2
+ version: 7.0.2
packages/docs:
dependencies:
@@ -321,6 +323,9 @@ importers:
'@types/pg':
specifier: ^8.15.6
version: 8.15.6
+ '@typescript/typescript6':
+ specifier: 6.0.2
+ version: 6.0.2
'@vitest/coverage-v8':
specifier: 4.1.7
version: 4.1.7(vitest@4.1.7)
@@ -332,7 +337,7 @@ importers:
version: 0.31.10
msw:
specifier: ^2.14.6
- version: 2.14.6(@types/node@25.9.1)(typescript@6.0.3)
+ version: 2.14.6(@types/node@25.9.1)(typescript@7.0.2)
nitro:
specifier: 3.0.260522-beta
version: 3.0.260522-beta(@vercel/blob@2.8.0)(@vercel/functions@3.6.0)(@vercel/queue@0.2.0)(drizzle-orm@0.45.2(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(pg@8.21.0))(jiti@2.7.0)
@@ -340,17 +345,17 @@ importers:
specifier: ^1.79.0
version: 1.79.0
tsdown:
- specifier: 0.23.0
- version: 0.23.0(publint@0.3.21)(tsx@4.22.3)(typescript@6.0.3)
+ specifier: 0.23.1
+ version: 0.23.1(publint@0.3.21)(tsx@4.22.3)(typescript@7.0.2)
typescript:
- specifier: ^6.0.3
- version: 6.0.3
+ specifier: ^7.0.2
+ version: 7.0.2
vercel:
specifier: ^54.4.0
version: 54.4.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
vitest:
specifier: ^4.1.7
- version: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/coverage-v8@4.1.7)(jiti@2.7.0)(msw@2.14.6(@types/node@25.9.1)(typescript@6.0.3))(tsx@4.22.3)(yaml@2.9.0)
+ version: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/coverage-v8@4.1.7)(jiti@2.7.0)(msw@2.14.6(@types/node@25.9.1)(typescript@7.0.2))(tsx@4.22.3)(yaml@2.9.0)
packages/junior-agent-browser: {}
@@ -365,7 +370,7 @@ importers:
version: 1.1.23(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@sentry/junior':
specifier: workspace:*
- version: file:packages/junior
+ version: file:packages/junior(@types/node@25.9.1)
'@sentry/junior-plugin-api':
specifier: workspace:*
version: link:../junior-plugin-api
@@ -411,7 +416,7 @@ importers:
version: 4.3.0
'@tanstack/eslint-plugin-query':
specifier: ^5.101.4
- version: 5.101.4(eslint@10.8.0)(typescript@6.0.3)
+ version: 5.101.4(eslint@10.8.0)(typescript@7.0.2)
'@types/node':
specifier: ^25.9.1
version: 25.9.1
@@ -433,12 +438,15 @@ importers:
tailwindcss:
specifier: ^4.3.0
version: 4.3.0
+ tsdown:
+ specifier: 0.23.1
+ version: 0.23.1(publint@0.3.21)(tsx@4.22.3)(typescript@7.0.2)
tsup:
specifier: ^8.5.1
- version: 8.5.1(tsx@4.22.3)(typescript@6.0.3)
+ version: 8.5.1(tsx@4.22.3)(typescript@7.0.2)
typescript:
- specifier: ^6.0.3
- version: 6.0.3
+ specifier: ^7.0.2
+ version: 7.0.2
vitest:
specifier: ^4.1.7
version: 4.1.7(@types/node@25.9.1)(@vitest/coverage-v8@4.1.7)(tsx@4.22.3)
@@ -485,22 +493,22 @@ importers:
version: 4.12.27
msw:
specifier: ^2.14.6
- version: 2.14.6(typescript@6.0.3)
+ version: 2.14.6(typescript@7.0.2)
tinyrainbow:
specifier: ^3.1.0
version: 3.1.0
typescript:
- specifier: ^6.0.3
- version: 6.0.3
+ specifier: ^7.0.2
+ version: 7.0.2
undici:
specifier: 7.29.0
version: 7.29.0
vitest:
specifier: ^4.1.7
- version: 4.1.7(msw@2.14.6(typescript@6.0.3))(tsx@4.22.3)
+ version: 4.1.7(msw@2.14.6(typescript@7.0.2))(tsx@4.22.3)
vitest-evals:
specifier: 0.16.1
- version: 0.16.1(ai@6.0.190(zod@4.5.4))(tinyrainbow@3.1.0)(vitest@4.1.7(msw@2.14.6(typescript@6.0.3))(tsx@4.22.3))(zod@4.5.4)
+ version: 0.16.1(ai@6.0.190(zod@4.5.4))(tinyrainbow@3.1.0)(vitest@4.1.7(msw@2.14.6(typescript@7.0.2))(tsx@4.22.3))(zod@4.5.4)
zod:
specifier: 'catalog:'
version: 4.5.4
@@ -534,19 +542,19 @@ importers:
version: 0.31.10
msw:
specifier: ^2.14.6
- version: 2.14.6(@types/node@25.9.1)(typescript@6.0.3)
+ version: 2.14.6(@types/node@25.9.1)(typescript@7.0.2)
oxlint:
specifier: ^1.79.0
version: 1.79.0
tsup:
specifier: ^8.5.1
- version: 8.5.1(tsx@4.22.3)(typescript@6.0.3)
+ version: 8.5.1(tsx@4.22.3)(typescript@7.0.2)
typescript:
- specifier: ^6.0.3
- version: 6.0.3
+ specifier: ^7.0.2
+ version: 7.0.2
vitest:
specifier: ^4.1.7
- version: 4.1.7(@types/node@25.9.1)(msw@2.14.6(@types/node@25.9.1)(typescript@6.0.3))(tsx@4.22.3)
+ version: 4.1.7(@types/node@25.9.1)(msw@2.14.6(@types/node@25.9.1)(typescript@7.0.2))(tsx@4.22.3)
packages/junior-google:
dependencies:
@@ -580,10 +588,10 @@ importers:
version: 1.79.0
tsup:
specifier: ^8.5.1
- version: 8.5.1(tsx@4.22.3)(typescript@6.0.3)
+ version: 8.5.1(tsx@4.22.3)(typescript@7.0.2)
typescript:
- specifier: ^6.0.3
- version: 6.0.3
+ specifier: ^7.0.2
+ version: 7.0.2
vitest:
specifier: ^4.1.7
version: 4.1.7(@types/node@25.9.1)(tsx@4.22.3)
@@ -610,10 +618,10 @@ importers:
version: 1.79.0
tsup:
specifier: ^8.5.1
- version: 8.5.1(tsx@4.22.3)(typescript@6.0.3)
+ version: 8.5.1(tsx@4.22.3)(typescript@7.0.2)
typescript:
- specifier: ^6.0.3
- version: 6.0.3
+ specifier: ^7.0.2
+ version: 7.0.2
vitest:
specifier: ^4.1.7
version: 4.1.7(@types/node@25.9.1)(tsx@4.22.3)
@@ -653,12 +661,12 @@ importers:
oxlint:
specifier: ^1.79.0
version: 1.79.0
- tsup:
- specifier: ^8.5.1
- version: 8.5.1(tsx@4.22.3)(typescript@6.0.3)
+ tsdown:
+ specifier: 0.23.1
+ version: 0.23.1(publint@0.3.21)(tsx@4.22.3)(typescript@7.0.2)
typescript:
- specifier: ^6.0.3
- version: 6.0.3
+ specifier: ^7.0.2
+ version: 7.0.2
vitest:
specifier: ^4.1.7
version: 4.1.7(@types/node@25.9.1)(tsx@4.22.3)
@@ -682,12 +690,12 @@ importers:
oxlint:
specifier: ^1.79.0
version: 1.79.0
- tsup:
- specifier: ^8.5.1
- version: 8.5.1(tsx@4.22.3)(typescript@6.0.3)
+ tsdown:
+ specifier: 0.23.1
+ version: 0.23.1(publint@0.3.21)(tsx@4.22.3)(typescript@7.0.2)
typescript:
- specifier: ^6.0.3
- version: 6.0.3
+ specifier: ^7.0.2
+ version: 7.0.2
packages/junior-sentry:
dependencies:
@@ -709,10 +717,10 @@ importers:
version: 1.79.0
tsup:
specifier: ^8.5.1
- version: 8.5.1(tsx@4.22.3)(typescript@6.0.3)
+ version: 8.5.1(tsx@4.22.3)(typescript@7.0.2)
typescript:
- specifier: ^6.0.3
- version: 6.0.3
+ specifier: ^7.0.2
+ version: 7.0.2
vitest:
specifier: ^4.1.7
version: 4.1.7(@types/node@25.9.1)(tsx@4.22.3)
@@ -739,8 +747,8 @@ importers:
specifier: ^8.15.6
version: 8.15.6
typescript:
- specifier: ^6.0.3
- version: 6.0.3
+ specifier: ^7.0.2
+ version: 7.0.2
packages/junior-tts: {}
@@ -764,10 +772,10 @@ importers:
version: 1.79.0
tsup:
specifier: ^8.5.1
- version: 8.5.1(tsx@4.22.3)(typescript@6.0.3)
+ version: 8.5.1(tsx@4.22.3)(typescript@7.0.2)
typescript:
- specifier: ^6.0.3
- version: 6.0.3
+ specifier: ^7.0.2
+ version: 7.0.2
vitest:
specifier: ^4.1.7
version: 4.1.7(@types/node@25.9.1)(tsx@4.22.3)
@@ -2729,8 +2737,8 @@ packages:
'@oxc-project/types@0.132.0':
resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==}
- '@oxc-project/types@0.148.0':
- resolution: {integrity: sha512-Nm4s/jB+4FpFsPhWGEC4h7rzksesmtnMXomo6rCMcg/b8zLQuOziRgkCS1fxDCXOlJB/6Q8oABOZ/OP6RIPj9A==}
+ '@oxc-project/types@0.154.0':
+ resolution: {integrity: sha512-KYOUGQFlLWR+s4QMV2Q9ko38TZm7EdO87Qm7rvZLqk/webse/cDjtyxKhg/47l0byCbs/k46LT8qc4PKjAikzA==}
'@oxc-transform/binding-android-arm-eabi@0.111.0':
resolution: {integrity: sha512-NdFLicvorfHYu0g2ftjVJaH7+Dz27AQUNJOq8t/ofRUoWmczOodgUCHx8C1M1htCN4ZmhS/FzfSy6yd/UngJGg==}
@@ -3148,8 +3156,8 @@ packages:
'@protobufjs/utf8@1.1.1':
resolution: {integrity: sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==}
- '@publint/pack@0.1.6':
- resolution: {integrity: sha512-3uVNyGcVplhPZSLVyeIpL7+cIRn1YCSNHLG/rUIlBQMVH8YuN9++YF+5+UDIIO9RW98dujiUoTltO7RDB5bFJA==}
+ '@publint/pack@0.1.7':
+ resolution: {integrity: sha512-4EDEmvxWtgsCnnVeBvtFIFZtUhPPt1+bA9JrSwU4Sa//6oKtzCSlGGXYJr44OD9aGISymbieJ4mCKHUygUDU+g==}
engines: {node: '>=18'}
'@quansync/fs@1.0.0':
@@ -3373,8 +3381,8 @@ packages:
resolution: {integrity: sha512-2FK1hF93Fuf1laSdfiEmJvSJPVIDHEUTz68D3Fi9s0IZrrpaEcj6pTFBTbYvsgC5du4ogrtf5re7yMMvrKNgkw==}
engines: {node: ^20.9.0 || ^22.11.0 || ^24, pnpm: ^10.0.0}
- '@rolldown/binding-android-arm-eabi@1.2.7':
- resolution: {integrity: sha512-EypzgnYCwyVY4NDHKzGmNJT5b+XaQEBniHxsMdeIQLB/tcCzZnhqrzHpZFbX9iaxx+5RiB8caATBtfvZP7zVxQ==}
+ '@rolldown/binding-android-arm-eabi@1.2.14':
+ resolution: {integrity: sha512-aWR+XKH9+rW7m5fWq/5360J3mHycrx/o6xZM2DQFdJnTMdyP7/WzxPjhtLbVWdKo2y612/4U1bWqb3HQhiF7vg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [android]
@@ -3391,8 +3399,8 @@ packages:
cpu: [arm64]
os: [android]
- '@rolldown/binding-android-arm64@1.2.7':
- resolution: {integrity: sha512-l17HE9EweWaqJZhuUuNBN/FzM62xw+DECVnJyvMsxn8vJFAGLy5QfLDoYAcronkAN8VxKZHezDpulHDPx95vFw==}
+ '@rolldown/binding-android-arm64@1.2.14':
+ resolution: {integrity: sha512-QiVxHofl6A8lQU7WAtOUY4QMVZXohxwz7WJJoeh8NBEUyKfIkMRKhYyq8az/1RypNiIXzNTtiS6KwHz0erxYRQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
@@ -3409,8 +3417,8 @@ packages:
cpu: [arm64]
os: [darwin]
- '@rolldown/binding-darwin-arm64@1.2.7':
- resolution: {integrity: sha512-8ED8ELFvHXc6OCETIn4gXObPiaR6bckM/ipXtbzlPVDRMBfEGjCKgO90F9YtfdpDatVx/ZQw7aZ1vUMf/+T3Mw==}
+ '@rolldown/binding-darwin-arm64@1.2.14':
+ resolution: {integrity: sha512-lTQOzHuBIooh3jIr5XINQkjPGEuGy+Dsy0meXDr6Sjty0b99kYgGh4uBC/8mJX1T0kC8d6S0aPP1Y+bHkh6aBw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
@@ -3427,8 +3435,8 @@ packages:
cpu: [x64]
os: [darwin]
- '@rolldown/binding-darwin-x64@1.2.7':
- resolution: {integrity: sha512-/WPripjtiAIZ2tWY7ddijORT0Ujg87wxWW/qcoFVCKAWVDPhtY0xr7Dj0M3GyNGz60jGwTElhro/mkF9dT7dDQ==}
+ '@rolldown/binding-darwin-x64@1.2.14':
+ resolution: {integrity: sha512-hyMKEGatjmBYCs/Q4sbIcL/GqpFEqsX3wc+HYVQ/85A4rxc1o7rPm4DUI4GV4k/h0ITddwFSGpqQunI14GXjTA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
@@ -3445,8 +3453,8 @@ packages:
cpu: [x64]
os: [freebsd]
- '@rolldown/binding-freebsd-x64@1.2.7':
- resolution: {integrity: sha512-14DI4NcqpvbICxSnGLx3PmtDaWqRP/KGSGb6C+JLLVPeZRl6dKdHba3pGsqT3vpdTqhEYIPG0MMQ8c0xYqoJxA==}
+ '@rolldown/binding-freebsd-x64@1.2.14':
+ resolution: {integrity: sha512-u371GbXoVXrEgP20PwzoGNOdAOqAMhzo19JzzY+V4YmmnC+DTOoqdbMu+O+54emM59Mik/UdrtWgcuEDKWRPKA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
@@ -3463,8 +3471,8 @@ packages:
cpu: [arm]
os: [linux]
- '@rolldown/binding-linux-arm-gnueabihf@1.2.7':
- resolution: {integrity: sha512-bxrWIRvHWQvbJwi+VIie/kDJmQxcNE6xxWwZdqF/ExVAigtHkv54WTLQPb+QsZdnFy18fg7JPfWGL0RH6vwIlQ==}
+ '@rolldown/binding-linux-arm-gnueabihf@1.2.14':
+ resolution: {integrity: sha512-BqwKsdZQf6EqVWr8fv2MrDYzAvOZ7+NYFSJESRGs87fkseEhs0TU9TXgRJTkZoRRkxTizyEg1LKUXfU3/78uqg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
@@ -3483,8 +3491,8 @@ packages:
os: [linux]
libc: [glibc]
- '@rolldown/binding-linux-arm64-gnu@1.2.7':
- resolution: {integrity: sha512-toOY2BChBZyuxU7OYX6Tn389di4IzAqPTycVcci0O7FSfBqzRB3RZn+K5Is6ANf4tmgRd/K1yZTsNTXbkXsnLg==}
+ '@rolldown/binding-linux-arm64-gnu@1.2.14':
+ resolution: {integrity: sha512-SD9kY8M009x/7s57Z1dgUVlP5+uYBgKQK0Tkr1WIWngrtUJmRCW1RJFMY7QDla2khXhmg2i5Io7MUjcmZNZ/KQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
@@ -3504,8 +3512,8 @@ packages:
os: [linux]
libc: [musl]
- '@rolldown/binding-linux-arm64-musl@1.2.7':
- resolution: {integrity: sha512-lAIXTH/aiLRLxsTgQvfhjo4K1ydWIp00+V0voOr9beb/9ZmkUFrSIb03dXNFRgMNvkE6oGsF10ioQ6UsI+vS5Q==}
+ '@rolldown/binding-linux-arm64-musl@1.2.14':
+ resolution: {integrity: sha512-BJ2CL19M6uuWesMgnqJzgxoI+N+eV7b0A9O9vLV42y+gitC41fNa8KElau1tHVzuLWX5GzEuxMPhAO0tQXQMkg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
@@ -3518,8 +3526,8 @@ packages:
os: [linux]
libc: [glibc]
- '@rolldown/binding-linux-ppc64-gnu@1.2.7':
- resolution: {integrity: sha512-kdnwS28Pkenp/mZMRwjXXXwxQ7pIsm+bF919LUK93BOyhcLsrVKdP2p9fxpiPNPAbNuch8ypQt0pm2P2LYCAGg==}
+ '@rolldown/binding-linux-ppc64-gnu@1.2.14':
+ resolution: {integrity: sha512-4+Kl8daPV8NDHaD7mfCcc1pRM+Qg7ab8DyMm5FG5WoZgv4h2i3KFN1CybYBNbQqmuYm7ftJLvmMI1eHYJ22S/Q==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
@@ -3532,8 +3540,8 @@ packages:
os: [linux]
libc: [glibc]
- '@rolldown/binding-linux-s390x-gnu@1.2.7':
- resolution: {integrity: sha512-516OdsyLdr5E65paF3yBF55t8mfm9+gmtCsK3xI7XKXIT7EfRlHhxL8K/NR6Hu8BWSgF5+1w74lTL0+nxcc8Qw==}
+ '@rolldown/binding-linux-s390x-gnu@1.2.14':
+ resolution: {integrity: sha512-V/h8ePq1fKDrmtFMz6xcCN3DKvuvMRrwwD1q0PkBeeo4DpK64biaKvqWGVxqCeYKqeRk7gE7/iKPxLCn08O97A==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
@@ -3553,8 +3561,8 @@ packages:
os: [linux]
libc: [glibc]
- '@rolldown/binding-linux-x64-gnu@1.2.7':
- resolution: {integrity: sha512-r8/z8n7GFaYRln3xmP1Cxy0HH/HLM0uBUPkEuSVEfKGDA89M0FsZRZJRSwe/tJjRx+fpH/gjorfhB8tmEbSFLA==}
+ '@rolldown/binding-linux-x64-gnu@1.2.14':
+ resolution: {integrity: sha512-WxalXzgrLVpKC93xfpaJ3gCXUWzeCr+FRCbDVD2mUAy4L6Vo3lNVz0epUEUpxPWJkLNYUwM4OSIikv36OJ9mLg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
@@ -3574,8 +3582,8 @@ packages:
os: [linux]
libc: [musl]
- '@rolldown/binding-linux-x64-musl@1.2.7':
- resolution: {integrity: sha512-pAsE8iiDxUg1xBqdhrTfg45AVDVpirjz00sblEYClGNNcMnDb+e8beQgqIAw6LvauX/APvgxUnwrgun/YYGBhw==}
+ '@rolldown/binding-linux-x64-musl@1.2.14':
+ resolution: {integrity: sha512-3G3tnAmTpdk9jO3GQtyHXqeFD2SlecfTws/Y3M2mmj9nMBwwuLT4kur8sZKeu7ENUHSpVO3cIsm5A52LEWWwlg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
@@ -3593,8 +3601,8 @@ packages:
cpu: [arm64]
os: [openharmony]
- '@rolldown/binding-openharmony-arm64@1.2.7':
- resolution: {integrity: sha512-lTcIYmmnQQA8Or/2DatS6oSqcdLHvendjS+zLu+FwgToynWMRSmQdpM65fTANJgIS4mjbMOo5KT2lnT9SAb96w==}
+ '@rolldown/binding-openharmony-arm64@1.2.14':
+ resolution: {integrity: sha512-qyr5XiNGxm2ytx17vvtcJ9nXn6v1gENETi503bJx3OGwZ1tSonj7BosxbMa/xeAfSl5iS9X6KjEWYXLu6v1L7Q==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
@@ -3621,8 +3629,8 @@ packages:
cpu: [arm64]
os: [win32]
- '@rolldown/binding-win32-arm64-msvc@1.2.7':
- resolution: {integrity: sha512-e3Gu3WxbNk/UqQhxqU7YIYO+9ZBvWNz3U+h/qRFosscMFzdRPbXYSaSWgSnklv2fz1TgzBTcti2z35c/7irsHw==}
+ '@rolldown/binding-win32-arm64-msvc@1.2.14':
+ resolution: {integrity: sha512-oA4o5o0S2yB199YyYXDzKUv1Z56Rc+mgOjwm7Z/vJ9Z8igiDPYvoOuDyo6g7AK/ZaF09nPhDKVnGBcYHO11GXA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
@@ -3639,8 +3647,8 @@ packages:
cpu: [x64]
os: [win32]
- '@rolldown/binding-win32-x64-msvc@1.2.7':
- resolution: {integrity: sha512-W/jg5qoRSqjsEv0+dZi4e687mcHqmVuU0P4fK6qS/xjetW2Gmc1W8j//z5nAeNcC8Ttm0hV46IjcYeuVwYhuiw==}
+ '@rolldown/binding-win32-x64-msvc@1.2.14':
+ resolution: {integrity: sha512-9mE94bf2GZUaR/fUSXCMpBoWkctu421Mi0ORpm4zqfbkjKep7RxzPFa5etcGs5h+2KApoWBOA/hAJa/7saGgEQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
@@ -4297,6 +4305,130 @@ packages:
resolution: {integrity: sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@typescript/typescript-aix-ppc64@7.0.2':
+ resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@typescript/typescript-darwin-arm64@7.0.2':
+ resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@typescript/typescript-darwin-x64@7.0.2':
+ resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@typescript/typescript-freebsd-arm64@7.0.2':
+ resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@typescript/typescript-freebsd-x64@7.0.2':
+ resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@typescript/typescript-linux-arm64@7.0.2':
+ resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@typescript/typescript-linux-arm@7.0.2':
+ resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm]
+ os: [linux]
+
+ '@typescript/typescript-linux-loong64@7.0.2':
+ resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@typescript/typescript-linux-mips64el@7.0.2':
+ resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@typescript/typescript-linux-ppc64@7.0.2':
+ resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@typescript/typescript-linux-riscv64@7.0.2':
+ resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@typescript/typescript-linux-s390x@7.0.2':
+ resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==}
+ engines: {node: '>=16.20.0'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@typescript/typescript-linux-x64@7.0.2':
+ resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@typescript/typescript-netbsd-arm64@7.0.2':
+ resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@typescript/typescript-netbsd-x64@7.0.2':
+ resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@typescript/typescript-openbsd-arm64@7.0.2':
+ resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@typescript/typescript-openbsd-x64@7.0.2':
+ resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@typescript/typescript-sunos-x64@7.0.2':
+ resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@typescript/typescript-win32-arm64@7.0.2':
+ resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@typescript/typescript-win32-x64@7.0.2':
+ resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [win32]
+
+ '@typescript/typescript6@6.0.2':
+ resolution: {integrity: sha512-mbCddXd+jm7hfx7w2YU64/Av4/NqqeG3GoRZgxPcgoTxYjhrcfJRw9ULch71SS4G+Q3bOXFhRvPqjguN0Hyp5w==}
+ hasBin: true
+
'@ungap/structured-clone@1.3.1':
resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==}
@@ -4512,164 +4644,74 @@ packages:
'@workflow/serde@4.1.0-beta.2':
resolution: {integrity: sha512-8kkeoQKLDaKXefjV5dbhBj2aErfKp1Mc4pb6tj8144cF+Em5SPbyMbyLCHp+BVrFfFVCBluCtMx+jjvaFVZGww==}
- '@yuku-codegen/binding-android-arm64@0.9.4':
- resolution: {integrity: sha512-6ViGFAr+N2Yjnc8wBx16wJZGB0pGmClILO+FUC3kzwEydfjXQovWEdcFyl98RVtWdj9ahS41XXe2zKFl+L3uWg==}
- cpu: [arm64]
- os: [android]
- deprecated: yuku-codegen is pure JavaScript since 0.14
-
- '@yuku-codegen/binding-darwin-arm64@0.9.4':
- resolution: {integrity: sha512-0BTB70ha+wRsz6fI5HosevJpMmvgndmf+6ND1OneFKCrWhNzX/2xIQ36Z8rUgv5bpnWjKl6bRvzSFV3PU+WOlQ==}
- cpu: [arm64]
- os: [darwin]
- deprecated: yuku-codegen is pure JavaScript since 0.14
-
- '@yuku-codegen/binding-darwin-x64@0.9.4':
- resolution: {integrity: sha512-9QVVqq8LCD6v+Gl099u32YJ0999HBCoe09ecIeifKTi4Y1azX44DkF9q9pP2lxgwRUvR3GmWl5k1pLe3ojR2rg==}
- cpu: [x64]
- os: [darwin]
- deprecated: yuku-codegen is pure JavaScript since 0.14
-
- '@yuku-codegen/binding-freebsd-x64@0.9.4':
- resolution: {integrity: sha512-Qm3ky33Em9w1XVSryq+D/arLVapeqp0Bu1719UGV6olmfp4kTD+NfsLG9bRx5hOJSu1Zl3r9LbyTP1oTmcHAsg==}
- cpu: [x64]
- os: [freebsd]
- deprecated: yuku-codegen is pure JavaScript since 0.14
-
- '@yuku-codegen/binding-linux-arm-gnu@0.9.4':
- resolution: {integrity: sha512-euKmS7pnkeJylEN6+9bfu0jHtGfbQRfFBIpmTe8YVnWzQ5Rjyrns13+1kao2RSS9DNkucX1RXIdiTvQoDUXF0w==}
- cpu: [arm]
- os: [linux]
- libc: [glibc]
- deprecated: yuku-codegen is pure JavaScript since 0.14
-
- '@yuku-codegen/binding-linux-arm-musl@0.9.4':
- resolution: {integrity: sha512-7JTizi2O+ks9/dLPDLYmVLsYQUC9Fxu0e6LNA+F6FFQ/sV2o7owBb1eTccMKkgauWGGUpJYQvlXrCKpGwguvhA==}
- cpu: [arm]
- os: [linux]
- libc: [musl]
- deprecated: yuku-codegen is pure JavaScript since 0.14
-
- '@yuku-codegen/binding-linux-arm64-gnu@0.9.4':
- resolution: {integrity: sha512-f7eLYDwmcz56Jzvp8UmXUehFzTAn6hEHt64GDWNWGSqrphHRvWLEshQ+sQv8DfNpkXFaOQ49erl4gb2Wm0JM+A==}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
- deprecated: yuku-codegen is pure JavaScript since 0.14
-
- '@yuku-codegen/binding-linux-arm64-musl@0.9.4':
- resolution: {integrity: sha512-bLdjCgo+u3dU3HH/t+WZ8FsAo2IgdOzruTHZ+XTFquj6j//QJjH9xfyRtu7h65lCT3CQVW9aGEe6/A/HPyA9KQ==}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
- deprecated: yuku-codegen is pure JavaScript since 0.14
-
- '@yuku-codegen/binding-linux-x64-gnu@0.9.4':
- resolution: {integrity: sha512-hDMB71QCDx2AAxhlCBgakngMAa4KK6f6rcTt9v8nrzoXs681cmZultGeZk0tjONxli+N+VMhXQUoiVCSJuKiQg==}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
- deprecated: yuku-codegen is pure JavaScript since 0.14
-
- '@yuku-codegen/binding-linux-x64-musl@0.9.4':
- resolution: {integrity: sha512-uk1hOZA79AqziAH9A/eSD05VchNRdnLb6zxFGHhCbLYeeGYL+KOEL0+kCIPtaKuQ7wdxDOooiKE1D0jpaWQ0aA==}
- cpu: [x64]
- os: [linux]
- libc: [musl]
- deprecated: yuku-codegen is pure JavaScript since 0.14
-
- '@yuku-codegen/binding-win32-arm64@0.9.4':
- resolution: {integrity: sha512-IbZuNVrctjts5lAKUEd9ppnzvylaPdYBTv8AVDtY6EyQ5hpgUfsReqbqODJVGpn2/uIk1fa1jWP012orPoiK+A==}
- cpu: [arm64]
- os: [win32]
- deprecated: yuku-codegen is pure JavaScript since 0.14
-
- '@yuku-codegen/binding-win32-x64@0.9.4':
- resolution: {integrity: sha512-UqC4C0PlVAPEQ8fYr0AamuW2zKAkqQFiaaQ88Rl3YlzSNlshj+VmDoSbJRw4TFYL22+Vw53zDSJ95aXyjJN/aw==}
- cpu: [x64]
- os: [win32]
- deprecated: yuku-codegen is pure JavaScript since 0.14
-
- '@yuku-parser/binding-android-arm64@0.9.4':
- resolution: {integrity: sha512-x+dZef5ulszaYzgjHLUgnhDXAgJsGfodl30JuTinfLN5mEyB50burpUuyUqufGQp0fpI/sHLAN3V8fuJteFEQQ==}
+ '@yuku-core/binding-android-arm64@0.19.0':
+ resolution: {integrity: sha512-wdL2XmTiZixAOaHk9Z0JJZ8u9Qm8d333Zjpc6gaxXFX+UR5BlsfxZ7a2+2Rm71pamppsPYGUGFq2oVLbh6DISw==}
cpu: [arm64]
os: [android]
- deprecated: yuku-parser runs on yuku-core since 0.14
- '@yuku-parser/binding-darwin-arm64@0.9.4':
- resolution: {integrity: sha512-bSpjVPP8zTTcMZi78gxPkZZhVNbg4Doqsb2CrxHR2g+vZxP7Ey4GVzgD5nVYSHgS1y8dGULGW8AhPrfRWFEF6w==}
+ '@yuku-core/binding-darwin-arm64@0.19.0':
+ resolution: {integrity: sha512-7sNJa6XJhyetnTy64jw3NEi4YgUcezHk1G5GH9FSvXAuC8wIlbaOwT9lgq5qo5sspjrZJQlBR1TWflP49uRpMw==}
cpu: [arm64]
os: [darwin]
- deprecated: yuku-parser runs on yuku-core since 0.14
- '@yuku-parser/binding-darwin-x64@0.9.4':
- resolution: {integrity: sha512-QNswJLBxsoDkghztrF0bUy+DEUoeX1lS4cL3dCM1IB4hfLoZ3Jf3jmCoggDnqN++sJ91F6w8oHiyQ4ZhUEr/bg==}
+ '@yuku-core/binding-darwin-x64@0.19.0':
+ resolution: {integrity: sha512-pTC7dYEc59isdyizc3nsuyFNBu2LU5wMYZ1be6UMr59PY/AJNtO1aBLWV0MgL/z7C1nv/2sX4TNjGgKLoeevJw==}
cpu: [x64]
os: [darwin]
- deprecated: yuku-parser runs on yuku-core since 0.14
- '@yuku-parser/binding-freebsd-x64@0.9.4':
- resolution: {integrity: sha512-D4rmGI0EOwxmKsv3+iGQDmtJ9/Oqr9wPxsQpONZ+QmxHqNbl+08XaJkhuC5wAg17bj6afcpdQfiIAoSMBY17Rw==}
+ '@yuku-core/binding-freebsd-x64@0.19.0':
+ resolution: {integrity: sha512-xrZjF6XOEwyLOiDIfrwDdRCS6ghxcJeirNC1KivQhVcUwlRonaU79S3/Uiyx3lBylPnT8qKJ3/aMT+H52nGTJQ==}
cpu: [x64]
os: [freebsd]
- deprecated: yuku-parser runs on yuku-core since 0.14
- '@yuku-parser/binding-linux-arm-gnu@0.9.4':
- resolution: {integrity: sha512-rZuqBxlaRnNY57nawRP1LPx4i+ieCrvIQkBsbGu/xjWkZGzFCrHPliy5YiMxp3Mw4v5KftAlDJx7c9jApNk2ww==}
+ '@yuku-core/binding-linux-arm-gnu@0.19.0':
+ resolution: {integrity: sha512-0OyIH53C0I1CbADHn9FSdCfX5qbpeLwJhmOVhonFJNYheybOnkSJ50qGMfTJIb8y5zrwqvLs7FVBvz6Fk8maZg==}
cpu: [arm]
os: [linux]
libc: [glibc]
- deprecated: yuku-parser runs on yuku-core since 0.14
- '@yuku-parser/binding-linux-arm-musl@0.9.4':
- resolution: {integrity: sha512-0PRDvRZvh18Q1lADxs0RMtqYHTd3dD/o1WEnMO/K8o7V9Gmy/7nD3/HjGQCxFPxkHTp41toF+DsXgEandAc2Gw==}
+ '@yuku-core/binding-linux-arm-musl@0.19.0':
+ resolution: {integrity: sha512-z/iPfkCOCSXE34VXNt0uP1ORSW+4mEa9b5CiJcWZeqZH08g49bFU/jRM2T04f+Wpw5mJ6HIzNBiojxeAbrHjeg==}
cpu: [arm]
os: [linux]
libc: [musl]
- deprecated: yuku-parser runs on yuku-core since 0.14
- '@yuku-parser/binding-linux-arm64-gnu@0.9.4':
- resolution: {integrity: sha512-CT1I24KFA/Tv/Exi1f+CVxafUIjlKm3gc51HbWLW7yf7OvJKCvKSja+EB17sDtYsS5a2EB9BTr8I5fPuDJ8rFA==}
+ '@yuku-core/binding-linux-arm64-gnu@0.19.0':
+ resolution: {integrity: sha512-jLNTi+gzaRwBJ+gwhCJ+rDb5dmx/8hEBx93UWd7hjMSqPTL1D1wvVSvXVAldV5kALvju7b0/m51EHEhs4+I1fA==}
cpu: [arm64]
os: [linux]
libc: [glibc]
- deprecated: yuku-parser runs on yuku-core since 0.14
- '@yuku-parser/binding-linux-arm64-musl@0.9.4':
- resolution: {integrity: sha512-DP193Z3nUXQ92AwmmkIAhVLxv2qj8rWAAAODownCwUk0wKrmnyH9km9Gd4NSmntBYG/Kv0P5btN6qcO1JXgEdw==}
+ '@yuku-core/binding-linux-arm64-musl@0.19.0':
+ resolution: {integrity: sha512-YwyPIdW/rN2Fmv0MTFWi47FaB3F9g+2b+sJISyAw83Yd60RWH4T3Nx6XkAHHVN+uKJNBAd6So7/BVihSiFYvuQ==}
cpu: [arm64]
os: [linux]
libc: [musl]
- deprecated: yuku-parser runs on yuku-core since 0.14
- '@yuku-parser/binding-linux-x64-gnu@0.9.4':
- resolution: {integrity: sha512-tjoxmuNz+xmSt/Or+US5aaKpRZcptQsWYaPtDp1/0QUvhyg8VS6mOrizKkzVBJKYVNZ7eDTleOBquYVm+Haz6w==}
+ '@yuku-core/binding-linux-x64-gnu@0.19.0':
+ resolution: {integrity: sha512-/vskaAXVX3ESR43FiTdfiYS7z1b9uoQJwVQ/0RgUHgN2sWoAyCZs+aX4CgU7eKGIHTVfp9VFwv+c+2XchYiEtQ==}
cpu: [x64]
os: [linux]
libc: [glibc]
- deprecated: yuku-parser runs on yuku-core since 0.14
- '@yuku-parser/binding-linux-x64-musl@0.9.4':
- resolution: {integrity: sha512-kHXf72EM6oHN58Swwruf9plXlCVY4mOlgqIjpXenEAY87cVcH3VxMZdCQG7rIKa+k0Hf3E/WS/8ufqZSCER7Gw==}
+ '@yuku-core/binding-linux-x64-musl@0.19.0':
+ resolution: {integrity: sha512-FuXL5igeSKib9Rye02TdH+D6SQezTyGxIATMu1Qsn/QywrzwpGl35OLpS2C1x5vpGLeVE2XgiLd5mVPFHmIglQ==}
cpu: [x64]
os: [linux]
libc: [musl]
- deprecated: yuku-parser runs on yuku-core since 0.14
- '@yuku-parser/binding-win32-arm64@0.9.4':
- resolution: {integrity: sha512-Yj6+bbGDZrLbzp1Qr7hiaIjYagslUrRy6t3TIxfiXUeJWNH8ydx7birM0UJiIInqUld0mk9qBz1kei/T8gcKvw==}
+ '@yuku-core/binding-win32-arm64@0.19.0':
+ resolution: {integrity: sha512-YuJAe7zEKT1Xa7LuHlhGJpPnYQeVtvo0rZvNjJRqkH0hQGOw4C8QeP30Tg5VKGzZfo2x8CjhjEhKt4TmLwfmdg==}
cpu: [arm64]
os: [win32]
- deprecated: yuku-parser runs on yuku-core since 0.14
- '@yuku-parser/binding-win32-x64@0.9.4':
- resolution: {integrity: sha512-B9D+Z1/jVfoEd1SgbuaYTPH6onVlSsSaK151mW8Rb6Yv+OrTOocNnv2w3peBicS6MB3VI+mJG8YqxRI4ONd1OQ==}
+ '@yuku-core/binding-win32-x64@0.19.0':
+ resolution: {integrity: sha512-o8iY/mXwlRkedp0LNTr4+TEfXTPQwoNZmv6k+1WIAd1ZXEn8xJJTBCtB0osaVvdZo/x/cNmV16UrWrrGpM5Mvw==}
cpu: [x64]
os: [win32]
- deprecated: yuku-parser runs on yuku-core since 0.14
- '@yuku-toolchain/types@0.9.4':
- resolution: {integrity: sha512-dqnMswJWE7YBbPEvGstgFlWFTRn20V/Hu82XTDjWxzaU18rGpxBqxhKlBlgyWrPARRvNLIqY2XA6S9edR+2AsA==}
+ '@yuku-toolchain/types@0.19.0':
+ resolution: {integrity: sha512-tFkNbsP4WXX9UMUC5syJGdK9dPMLK0PPaIuXCcCYH75sZ8MrebfBZ2XvCILRTw8AgLivSSCfDa4R67iYBDa4Kg==}
abbrev@3.0.1:
resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==}
@@ -5022,8 +5064,8 @@ packages:
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'}
- cac@7.0.0:
- resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==}
+ cac@7.1.0:
+ resolution: {integrity: sha512-LMDU/U2yA4IPIY8KT0NsNPWEYZvAMkbgyspxJ6btJaYV+WMDOHAZCmB0lsTObiHaRS1V/ztKAl7+TSkTqXyeoA==}
engines: {node: '>=20.19.0'}
call-bind-apply-helpers@1.0.2:
@@ -5559,8 +5601,8 @@ packages:
emojilib@2.4.0:
resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==}
- empathic@2.0.1:
- resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==}
+ empathic@2.1.0:
+ resolution: {integrity: sha512-AnfC1ATldl49/cvZdLPDjBfrRNwbDO05aibiOtzQu3qtlbJtomNLhF30HEtn/7iBz50dlMECqATo3fG0LrdEgw==}
engines: {node: '>=14'}
encodeurl@2.0.0:
@@ -5656,6 +5698,7 @@ packages:
esbuild@0.28.1:
resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==}
engines: {node: '>=18'}
+ hasBin: true
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
@@ -5981,8 +6024,8 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
- get-east-asian-width@1.6.0:
- resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==}
+ get-east-asian-width@1.7.0:
+ resolution: {integrity: sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==}
engines: {node: '>=18'}
get-intrinsic@1.3.0:
@@ -6162,6 +6205,9 @@ packages:
hookable@6.1.1:
resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==}
+ hookable@6.1.2:
+ resolution: {integrity: sha512-+abwxtiEA52GCVIsQqut3S/uKTbUwYIp4Pe/vv+6py5XiXBCqMZHg6pA6Y5qhgLSEys0/cYuPbO0z1QFj5ZCmg==}
+
html-escaper@2.0.2:
resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
@@ -6239,8 +6285,8 @@ packages:
resolution: {integrity: sha512-pYkiyXVL2Mf3pozdlDGV6NAObxQx13Ae8knZk1UJRJ6uRW/ZRmTGHlQYtrsSl7ubuE5F8CD1z+s1n4RHNuTtuA==}
engines: {node: '>=18'}
- import-without-cache@0.4.0:
- resolution: {integrity: sha512-NkJQA7oZ4YHQhd2+H3BoRFKF3d/XNsiKpHZCQEMH9pDX27hQQLsTyOocyRgaIVtf8gHX3Nt3LPkR4e5EdtPAGQ==}
+ import-without-cache@0.4.1:
+ resolution: {integrity: sha512-vXoV9PjKHEednCUu01e98TkImxy67e3BJXbTIOmIq4Hyzw3IAwYRcuPkfeTzJzwyyts4kjuA73x+pWJLc4f86A==}
engines: {node: ^22.18.0 || >=24.0.0}
imurmurhash@0.1.4:
@@ -7183,6 +7229,10 @@ packages:
resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==}
engines: {node: '>=12.20.0'}
+ obug@3.0.0:
+ resolution: {integrity: sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==}
+ engines: {node: '>=12.20.0'}
+
ocache@0.1.4:
resolution: {integrity: sha512-e7geNdWjxSnvsSgvLuPvgKgu7ubM10ZmTPOgpr7mz2BXYtvjMKTiLhjFi/gWU8chkuP6hNkZBsa9LzOusyaqkQ==}
@@ -7813,12 +7863,13 @@ packages:
rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
- rolldown-plugin-dts@0.28.5:
- resolution: {integrity: sha512-yYd3C9CeJwqjOc9X23m0Tyxcqic491uLZlfg51szT287S8zCCqLR2uoySoElgqy2CLn7PdXcEo1dlkBs4n1WHg==}
+ rolldown-plugin-dts@0.28.8:
+ resolution: {integrity: sha512-FVhfqxorCWcc20BVT5eVRfRjzLLl6mgzjcMR4gSBf0K4oQMXT0qoHhhzfXy0L7y83fQy7Ug5ZDNk90xM3/LiCQ==}
engines: {node: ^22.18.0 || ^24.11.0 || >=26.0.0}
peerDependencies:
'@typescript/native-preview': '*'
'@volar/typescript': ~2.4.0
+ '@vue/language-core': ~3.2.0 || ~3.3.0
rolldown: ^1.2.0
typescript: ^5.0.0 || ^6.0.0 || ~7.0.0
vue-tsc: ~3.2.0 || ~3.3.0
@@ -7827,6 +7878,8 @@ packages:
optional: true
'@volar/typescript':
optional: true
+ '@vue/language-core':
+ optional: true
typescript:
optional: true
vue-tsc:
@@ -7841,8 +7894,8 @@ packages:
resolution: {integrity: sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==}
engines: {node: ^20.19.0 || >=22.12.0}
- rolldown@1.2.7:
- resolution: {integrity: sha512-g0EtLvBjTUB7jhyV0S/TCup3v/XSVl45vUIGbOGU4QPiyjTenCe4mKuFvW9fEgYmS2Fo42AUssRmNuMziXdrig==}
+ rolldown@1.2.14:
+ resolution: {integrity: sha512-eTBTTqMR6uHKLgcUqpJP8ntzDI6V4LYA8negAMBEI7gkgVvOdrx6VsvS2Ym+83KhOPdLCHWJu0w7UQFJZhHKNw==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
@@ -8129,8 +8182,8 @@ packages:
resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
engines: {node: '>=18'}
- string-width@8.2.2:
- resolution: {integrity: sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==}
+ string-width@8.3.0:
+ resolution: {integrity: sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==}
engines: {node: '>=20'}
string_decoder@1.3.0:
@@ -8328,14 +8381,14 @@ packages:
resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
engines: {node: '>=6'}
- tsdown@0.23.0:
- resolution: {integrity: sha512-BaT+ep1xnj5hdyICLd5r5SYYE+TXnI1ATePLykv9vcKpHpFTWUWRH+x1AF/E2qcu3YB6+vI8IdyxIIIffEqw5Q==}
+ tsdown@0.23.1:
+ resolution: {integrity: sha512-MSC2WSOts3in95J334/VIS7KPfor3eCSvndJ6KdoVj9Aak9Kh1aNfz9ws5owhdukuTNSXRdfkPEzA/ihpDD6SA==}
engines: {node: ^22.18.0 || ^24.11.0 || >=26.0.0}
hasBin: true
peerDependencies:
'@arethetypeswrong/core': ^0.18.1
- '@tsdown/css': 0.23.0
- '@tsdown/exe': 0.23.0
+ '@tsdown/css': 0.23.1
+ '@tsdown/exe': 0.23.1
'@vitejs/devtools': '*'
publint: ^0.3.8
tsx: '*'
@@ -8435,6 +8488,11 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
+ typescript@7.0.2:
+ resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==}
+ engines: {node: '>=16.20.0'}
+ hasBin: true
+
ufo@1.6.4:
resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==}
@@ -8696,8 +8754,8 @@ packages:
resolution: {integrity: sha512-9BBo/6XZYMIUe2UFcffUDSocyEf8d7iFRTF13f1RloWpTObJozOqpT3mzpZkNO24zRbGVi3ElanegMS+vkFzgQ==}
engines: {node: '>= 18'}
- verkit@0.4.0:
- resolution: {integrity: sha512-sXMwN6DMHeouPfCxkxWkKAmxphWKEenHYY5H1nIBzU3PmDsmJp6kBXJdshjVdpMZuWCmL9SH7KFRx29AylpP6g==}
+ verkit@0.5.0:
+ resolution: {integrity: sha512-u4J1hr6Y+C/hit34GwL3eIcUf3wngT8TlYUjK7tk0jxydKLAq3sYvifjdTDA6U3KCKRcQCQDGf/srjxfZF3l7g==}
engines: {node: '>=18.12.0'}
vfile-location@5.0.3:
@@ -8939,8 +8997,8 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
- wrap-ansi@10.0.1:
- resolution: {integrity: sha512-M0N4xzyzosiIok3svYlEo1sdLZts/8FPgYH/GPC3wvlmPoRvnoManGMrE54waYj3tISA8w6lsdesfVv67qSr8Q==}
+ wrap-ansi@10.0.2:
+ resolution: {integrity: sha512-6OLRNZqRntVGBm26ghZ5eZhCuWWyOkRCSn8XsOIuq5stpCE/tjLbdozd93naILZig0lmD8ANfRwnhn0DLeXGlg==}
engines: {node: '>=20'}
wrap-ansi@7.0.0:
@@ -9049,14 +9107,21 @@ packages:
resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==}
engines: {node: '>=12.20'}
- yuku-ast@0.9.4:
- resolution: {integrity: sha512-AeeHDopMAy2mMafUMEIZxmQaCJOPEvBGDSSA23y5iKuzak3H2otfmgo4ObJubuzdHlJrv4eFY3KQ5XZOru5gpw==}
+ yuku-ast@0.19.0:
+ resolution: {integrity: sha512-PyCsiScaelhxBGzL8dyeJkLqvRZycoh78R31Vrt/WqYrm0hMFoKwIw/X7Dx5mBKLWAMlV9I9HEyBOHnj2gZVyw==}
+ engines: {node: '>=14.18.0'}
+
+ yuku-codegen@0.19.0:
+ resolution: {integrity: sha512-uymAKHjDuaP4BEpkXC/BSLz4DUEF5oArZ5AuD3888nb2miChjWSgpPdojEJxm3pjpXkgUaCRJQyNAbnMN33wHg==}
+ engines: {node: '>=14.18.0'}
- yuku-codegen@0.9.4:
- resolution: {integrity: sha512-pPr8xA8wBjrebER5VFeqS1XqATED1dQXU7JoAectAi1RBG4YFJz5yBirnmmmHZHldgnMKs/pMGkDtwGVQX+Efg==}
+ yuku-core@0.19.0:
+ resolution: {integrity: sha512-kYK9e1XdfirNhkipzW0wmMcSWcVF/CWnuugodfVYRCUwvoBefweL9HzB96OiKEhsx78V5WbUxbJqlizMX869Qg==}
+ engines: {node: '>=14.18.0'}
- yuku-parser@0.9.4:
- resolution: {integrity: sha512-VWnoJzdB2g1JjsMEcB2MxSLoDbgISgOiNRsgiR0qrQKiUw2yyzEfYEYkNHSMNhdGkSo7gtmcN+2UOczzGDLAuw==}
+ yuku-parser@0.19.0:
+ resolution: {integrity: sha512-XrBh9ZiQK5mJVRxZBAvD6LwRyAYrK3MFtH3+onyuxFL5hFD44EC3QOmIC1FjTj6H2MMwq46/NAI+NZxLZPZgxg==}
+ engines: {node: '>=14.18.0'}
zod-to-json-schema@3.25.2:
resolution: {integrity: sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==}
@@ -9270,7 +9335,7 @@ snapshots:
'@types/hast': 3.0.5
'@types/mdast': 4.0.4
js-yaml: 4.3.0
- picomatch: 4.0.5
+ picomatch: 4.0.7
retext-smartypants: 6.2.0
shiki: 4.1.0
smol-toml: 1.7.1
@@ -9281,7 +9346,7 @@ snapshots:
'@types/hast': 3.0.5
'@types/mdast': 4.0.4
js-yaml: 4.3.0
- picomatch: 4.0.5
+ picomatch: 4.0.7
retext-smartypants: 6.2.0
shiki: 4.1.0
smol-toml: 1.7.1
@@ -11028,7 +11093,7 @@ snapshots:
'@oxc-project/types@0.132.0': {}
- '@oxc-project/types@0.148.0': {}
+ '@oxc-project/types@0.154.0': {}
'@oxc-transform/binding-android-arm-eabi@0.111.0':
optional: true
@@ -11221,7 +11286,7 @@ snapshots:
detect-libc: 2.1.2
is-glob: 4.0.3
node-addon-api: 7.1.1
- picomatch: 4.0.5
+ picomatch: 4.0.7
optionalDependencies:
'@parcel/watcher-android-arm64': 2.5.6
'@parcel/watcher-darwin-arm64': 2.5.6
@@ -11267,7 +11332,7 @@ snapshots:
'@protobufjs/utf8@1.1.1': {}
- '@publint/pack@0.1.6':
+ '@publint/pack@0.1.7':
dependencies:
tinyexec: 1.1.2
@@ -11556,7 +11621,7 @@ snapshots:
'@renovatebot/pep440@4.2.1': {}
- '@rolldown/binding-android-arm-eabi@1.2.7':
+ '@rolldown/binding-android-arm-eabi@1.2.14':
optional: true
'@rolldown/binding-android-arm64@1.0.0-rc.1':
@@ -11565,7 +11630,7 @@ snapshots:
'@rolldown/binding-android-arm64@1.0.2':
optional: true
- '@rolldown/binding-android-arm64@1.2.7':
+ '@rolldown/binding-android-arm64@1.2.14':
optional: true
'@rolldown/binding-darwin-arm64@1.0.0-rc.1':
@@ -11574,7 +11639,7 @@ snapshots:
'@rolldown/binding-darwin-arm64@1.0.2':
optional: true
- '@rolldown/binding-darwin-arm64@1.2.7':
+ '@rolldown/binding-darwin-arm64@1.2.14':
optional: true
'@rolldown/binding-darwin-x64@1.0.0-rc.1':
@@ -11583,7 +11648,7 @@ snapshots:
'@rolldown/binding-darwin-x64@1.0.2':
optional: true
- '@rolldown/binding-darwin-x64@1.2.7':
+ '@rolldown/binding-darwin-x64@1.2.14':
optional: true
'@rolldown/binding-freebsd-x64@1.0.0-rc.1':
@@ -11592,7 +11657,7 @@ snapshots:
'@rolldown/binding-freebsd-x64@1.0.2':
optional: true
- '@rolldown/binding-freebsd-x64@1.2.7':
+ '@rolldown/binding-freebsd-x64@1.2.14':
optional: true
'@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.1':
@@ -11601,7 +11666,7 @@ snapshots:
'@rolldown/binding-linux-arm-gnueabihf@1.0.2':
optional: true
- '@rolldown/binding-linux-arm-gnueabihf@1.2.7':
+ '@rolldown/binding-linux-arm-gnueabihf@1.2.14':
optional: true
'@rolldown/binding-linux-arm64-gnu@1.0.0-rc.1':
@@ -11610,7 +11675,7 @@ snapshots:
'@rolldown/binding-linux-arm64-gnu@1.0.2':
optional: true
- '@rolldown/binding-linux-arm64-gnu@1.2.7':
+ '@rolldown/binding-linux-arm64-gnu@1.2.14':
optional: true
'@rolldown/binding-linux-arm64-musl@1.0.0-rc.1':
@@ -11619,19 +11684,19 @@ snapshots:
'@rolldown/binding-linux-arm64-musl@1.0.2':
optional: true
- '@rolldown/binding-linux-arm64-musl@1.2.7':
+ '@rolldown/binding-linux-arm64-musl@1.2.14':
optional: true
'@rolldown/binding-linux-ppc64-gnu@1.0.2':
optional: true
- '@rolldown/binding-linux-ppc64-gnu@1.2.7':
+ '@rolldown/binding-linux-ppc64-gnu@1.2.14':
optional: true
'@rolldown/binding-linux-s390x-gnu@1.0.2':
optional: true
- '@rolldown/binding-linux-s390x-gnu@1.2.7':
+ '@rolldown/binding-linux-s390x-gnu@1.2.14':
optional: true
'@rolldown/binding-linux-x64-gnu@1.0.0-rc.1':
@@ -11640,7 +11705,7 @@ snapshots:
'@rolldown/binding-linux-x64-gnu@1.0.2':
optional: true
- '@rolldown/binding-linux-x64-gnu@1.2.7':
+ '@rolldown/binding-linux-x64-gnu@1.2.14':
optional: true
'@rolldown/binding-linux-x64-musl@1.0.0-rc.1':
@@ -11649,7 +11714,7 @@ snapshots:
'@rolldown/binding-linux-x64-musl@1.0.2':
optional: true
- '@rolldown/binding-linux-x64-musl@1.2.7':
+ '@rolldown/binding-linux-x64-musl@1.2.14':
optional: true
'@rolldown/binding-openharmony-arm64@1.0.0-rc.1':
@@ -11658,7 +11723,7 @@ snapshots:
'@rolldown/binding-openharmony-arm64@1.0.2':
optional: true
- '@rolldown/binding-openharmony-arm64@1.2.7':
+ '@rolldown/binding-openharmony-arm64@1.2.14':
optional: true
'@rolldown/binding-wasm32-wasi@1.0.0-rc.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
@@ -11682,7 +11747,7 @@ snapshots:
'@rolldown/binding-win32-arm64-msvc@1.0.2':
optional: true
- '@rolldown/binding-win32-arm64-msvc@1.2.7':
+ '@rolldown/binding-win32-arm64-msvc@1.2.14':
optional: true
'@rolldown/binding-win32-x64-msvc@1.0.0-rc.1':
@@ -11691,7 +11756,7 @@ snapshots:
'@rolldown/binding-win32-x64-msvc@1.0.2':
optional: true
- '@rolldown/binding-win32-x64-msvc@1.2.7':
+ '@rolldown/binding-win32-x64-msvc@1.2.14':
optional: true
'@rolldown/pluginutils@1.0.0-rc.1': {}
@@ -11702,7 +11767,7 @@ snapshots:
dependencies:
'@types/estree': 1.0.9
estree-walker: 2.0.2
- picomatch: 4.0.5
+ picomatch: 4.0.7
'@rollup/rollup-android-arm-eabi@4.60.4':
optional: true
@@ -11844,10 +11909,10 @@ snapshots:
dependencies:
'@sentry/conventions': 0.15.1
- '@sentry/junior-dashboard@file:packages/junior-dashboard(@opentelemetry/api@1.9.1)(jiti@2.7.0)':
+ '@sentry/junior-dashboard@file:packages/junior-dashboard(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(jiti@2.7.0)':
dependencies:
'@radix-ui/react-hover-card': 1.1.23(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
- '@sentry/junior': file:packages/junior
+ '@sentry/junior': file:packages/junior(@types/node@25.9.1)
'@sentry/junior-plugin-api': file:packages/junior-plugin-api
'@tanstack/react-query': 5.100.14(react@19.2.6)
better-auth: 1.6.22(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
@@ -11890,6 +11955,7 @@ snapshots:
- '@tanstack/solid-start'
- '@tidbcloud/serverless'
- '@types/better-sqlite3'
+ - '@types/node'
- '@types/pg'
- '@types/react'
- '@types/react-dom'
@@ -12337,6 +12403,87 @@ snapshots:
- '@prisma/client'
- '@tidbcloud/serverless'
- '@types/better-sqlite3'
+ - '@types/node'
+ - '@types/pg'
+ - '@types/sql.js'
+ - '@upstash/redis'
+ - '@vercel/postgres'
+ - '@xata.io/client'
+ - bare-abort-controller
+ - better-sqlite3
+ - bufferutil
+ - bun-types
+ - debug
+ - expo-sqlite
+ - gel
+ - knex
+ - kysely
+ - mysql2
+ - pg-native
+ - postgres
+ - prisma
+ - react-native-b4a
+ - sql.js
+ - sqlite3
+ - supports-color
+ - utf-8-validate
+ - ws
+
+ '@sentry/junior@file:packages/junior(@types/node@25.9.1)':
+ dependencies:
+ '@agentclientprotocol/sdk': 1.3.0(zod@4.5.4)
+ '@ai-sdk/gateway': 3.0.119(zod@4.5.4)
+ '@chat-adapter/slack': 4.29.0(ai@6.0.190(zod@4.5.4))(zod@4.5.4)
+ '@chat-adapter/state-memory': 4.29.0(ai@6.0.190(zod@4.5.4))(zod@4.5.4)
+ '@chat-adapter/state-redis': 4.29.0(@opentelemetry/api@1.9.1)(ai@6.0.190(zod@4.5.4))(zod@4.5.4)
+ '@earendil-works/pi-agent-core': 0.84.1(@modelcontextprotocol/sdk@1.31.0(zod@4.5.4))(zod@4.5.4)
+ '@earendil-works/pi-ai': 0.84.1(@modelcontextprotocol/sdk@1.31.0(zod@4.5.4))(zod@4.5.4)
+ '@hono/zod-validator': 0.9.0(hono@4.12.27)(zod@4.5.4)
+ '@logtape/logtape': 2.1.1
+ '@modelcontextprotocol/sdk': 1.31.0(zod@4.5.4)
+ '@neondatabase/serverless': 1.1.0
+ '@opentelemetry/api': 1.9.1
+ '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.1)
+ '@sentry/junior-plugin-api': file:packages/junior-plugin-api
+ '@sentry/node': 10.65.0(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.1))
+ '@sinclair/typebox': 0.34.49
+ '@slack/types': 2.21.1
+ '@slack/web-api': 7.16.0
+ '@vercel/blob': 2.8.0
+ '@vercel/functions': 3.6.0
+ '@vercel/oidc': 3.4.1
+ '@vercel/queue': 0.2.0
+ '@vercel/sandbox': 2.8.0
+ ai: 6.0.190(zod@4.5.4)
+ chat: 4.29.0(ai@6.0.190(zod@4.5.4))(zod@4.5.4)
+ commander: 14.0.3
+ diff: 8.0.4
+ drizzle-orm: 0.45.2(@neondatabase/serverless@1.1.0)(@opentelemetry/api@1.9.1)(pg@8.21.0)
+ hono: 4.12.27
+ jiti: 2.7.0
+ jose: 6.2.3
+ just-bash: 3.0.1
+ node-html-markdown: 2.0.0
+ pg: 8.21.0
+ sharp: 0.35.3(@types/node@25.9.1)
+ yaml: 2.9.0
+ zod: 4.5.4
+ transitivePeerDependencies:
+ - '@aws-sdk/client-rds-data'
+ - '@aws-sdk/credential-provider-web-identity'
+ - '@cfworker/json-schema'
+ - '@cloudflare/workers-types'
+ - '@electric-sql/pglite'
+ - '@libsql/client'
+ - '@libsql/client-wasm'
+ - '@node-rs/xxhash'
+ - '@op-engineering/op-sqlite'
+ - '@opentelemetry/exporter-trace-otlp-http'
+ - '@planetscale/database'
+ - '@prisma/client'
+ - '@tidbcloud/serverless'
+ - '@types/better-sqlite3'
+ - '@types/node'
- '@types/pg'
- '@types/sql.js'
- '@upstash/redis'
@@ -12644,12 +12791,12 @@ snapshots:
'@tailwindcss/oxide-win32-arm64-msvc': 4.3.0
'@tailwindcss/oxide-win32-x64-msvc': 4.3.0
- '@tanstack/eslint-plugin-query@5.101.4(eslint@10.8.0)(typescript@6.0.3)':
+ '@tanstack/eslint-plugin-query@5.101.4(eslint@10.8.0)(typescript@7.0.2)':
dependencies:
- '@typescript-eslint/utils': 8.65.0(eslint@10.8.0)(typescript@6.0.3)
+ '@typescript-eslint/utils': 8.65.0(eslint@10.8.0)(typescript@7.0.2)
eslint: 10.8.0
optionalDependencies:
- typescript: 6.0.3
+ typescript: 7.0.2
transitivePeerDependencies:
- supports-color
@@ -12781,12 +12928,12 @@ snapshots:
dependencies:
'@types/node': 25.9.1
- '@typescript-eslint/project-service@8.65.0(typescript@6.0.3)':
+ '@typescript-eslint/project-service@8.65.0(typescript@7.0.2)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@6.0.3)
+ '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@7.0.2)
'@typescript-eslint/types': 8.65.0
debug: 4.4.3
- typescript: 6.0.3
+ typescript: 7.0.2
transitivePeerDependencies:
- supports-color
@@ -12795,35 +12942,35 @@ snapshots:
'@typescript-eslint/types': 8.65.0
'@typescript-eslint/visitor-keys': 8.65.0
- '@typescript-eslint/tsconfig-utils@8.65.0(typescript@6.0.3)':
+ '@typescript-eslint/tsconfig-utils@8.65.0(typescript@7.0.2)':
dependencies:
- typescript: 6.0.3
+ typescript: 7.0.2
'@typescript-eslint/types@8.65.0': {}
- '@typescript-eslint/typescript-estree@8.65.0(typescript@6.0.3)':
+ '@typescript-eslint/typescript-estree@8.65.0(typescript@7.0.2)':
dependencies:
- '@typescript-eslint/project-service': 8.65.0(typescript@6.0.3)
- '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@6.0.3)
+ '@typescript-eslint/project-service': 8.65.0(typescript@7.0.2)
+ '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@7.0.2)
'@typescript-eslint/types': 8.65.0
'@typescript-eslint/visitor-keys': 8.65.0
debug: 4.4.3
minimatch: 10.2.5
semver: 7.8.5
tinyglobby: 0.2.17
- ts-api-utils: 2.5.0(typescript@6.0.3)
- typescript: 6.0.3
+ ts-api-utils: 2.5.0(typescript@7.0.2)
+ typescript: 7.0.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.65.0(eslint@10.8.0)(typescript@6.0.3)':
+ '@typescript-eslint/utils@8.65.0(eslint@10.8.0)(typescript@7.0.2)':
dependencies:
'@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0)
'@typescript-eslint/scope-manager': 8.65.0
'@typescript-eslint/types': 8.65.0
- '@typescript-eslint/typescript-estree': 8.65.0(typescript@6.0.3)
+ '@typescript-eslint/typescript-estree': 8.65.0(typescript@7.0.2)
eslint: 10.8.0
- typescript: 6.0.3
+ typescript: 7.0.2
transitivePeerDependencies:
- supports-color
@@ -12832,6 +12979,70 @@ snapshots:
'@typescript-eslint/types': 8.65.0
eslint-visitor-keys: 5.0.1
+ '@typescript/typescript-aix-ppc64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-darwin-arm64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-darwin-x64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-freebsd-arm64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-freebsd-x64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-arm64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-arm@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-loong64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-mips64el@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-ppc64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-riscv64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-s390x@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-x64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-netbsd-arm64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-netbsd-x64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-openbsd-arm64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-openbsd-x64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-sunos-x64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-win32-arm64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-win32-x64@7.0.2':
+ optional: true
+
+ '@typescript/typescript6@6.0.2':
+ dependencies:
+ '@typescript/old': typescript@6.0.3
+
'@ungap/structured-clone@1.3.1': {}
'@vercel/backends@0.7.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
@@ -13048,7 +13259,7 @@ snapshots:
glob: 13.0.6
graceful-fs: 4.2.11
node-gyp-build: 4.8.4
- picomatch: 4.0.5
+ picomatch: 4.0.7
resolve-from: 5.0.0
transitivePeerDependencies:
- encoding
@@ -13213,7 +13424,7 @@ snapshots:
obug: 2.1.1
std-env: 4.1.0
tinyrainbow: 3.1.0
- vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/coverage-v8@4.1.7)(jiti@2.7.0)(msw@2.14.6(@types/node@25.9.1)(typescript@6.0.3))(tsx@4.22.3)(yaml@2.9.0)
+ vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/coverage-v8@4.1.7)(jiti@2.7.0)(msw@2.14.6(@types/node@25.9.1)(typescript@7.0.2))(tsx@4.22.3)(yaml@2.9.0)
'@vitest/expect@4.1.7':
dependencies:
@@ -13224,31 +13435,31 @@ snapshots:
chai: 6.2.2
tinyrainbow: 3.1.0
- '@vitest/mocker@4.1.7(msw@2.14.6(@types/node@25.9.1)(typescript@6.0.3))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))':
+ '@vitest/mocker@4.1.7(msw@2.14.6(@types/node@25.9.1)(typescript@7.0.2))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))':
dependencies:
'@vitest/spy': 4.1.7
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- msw: 2.14.6(@types/node@25.9.1)(typescript@6.0.3)
+ msw: 2.14.6(@types/node@25.9.1)(typescript@7.0.2)
vite: 8.0.14(@types/node@25.9.1)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)
- '@vitest/mocker@4.1.7(msw@2.14.6(@types/node@25.9.1)(typescript@6.0.3))(vite@8.0.14(@types/node@25.9.1)(tsx@4.22.3))':
+ '@vitest/mocker@4.1.7(msw@2.14.6(@types/node@25.9.1)(typescript@7.0.2))(vite@8.0.14(@types/node@25.9.1)(tsx@4.22.3))':
dependencies:
'@vitest/spy': 4.1.7
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- msw: 2.14.6(@types/node@25.9.1)(typescript@6.0.3)
+ msw: 2.14.6(@types/node@25.9.1)(typescript@7.0.2)
vite: 8.0.14(@types/node@25.9.1)(tsx@4.22.3)
- '@vitest/mocker@4.1.7(msw@2.14.6(typescript@6.0.3))(vite@8.0.14(tsx@4.22.3))':
+ '@vitest/mocker@4.1.7(msw@2.14.6(typescript@7.0.2))(vite@8.0.14(tsx@4.22.3))':
dependencies:
'@vitest/spy': 4.1.7
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- msw: 2.14.6(typescript@6.0.3)
+ msw: 2.14.6(typescript@7.0.2)
vite: 8.0.14(tsx@4.22.3)
'@vitest/mocker@4.1.7(vite@8.0.14(@types/node@25.9.1)(tsx@4.22.3))':
@@ -13335,79 +13546,43 @@ snapshots:
'@workflow/serde@4.1.0-beta.2': {}
- '@yuku-codegen/binding-android-arm64@0.9.4':
+ '@yuku-core/binding-android-arm64@0.19.0':
optional: true
- '@yuku-codegen/binding-darwin-arm64@0.9.4':
+ '@yuku-core/binding-darwin-arm64@0.19.0':
optional: true
- '@yuku-codegen/binding-darwin-x64@0.9.4':
+ '@yuku-core/binding-darwin-x64@0.19.0':
optional: true
- '@yuku-codegen/binding-freebsd-x64@0.9.4':
+ '@yuku-core/binding-freebsd-x64@0.19.0':
optional: true
- '@yuku-codegen/binding-linux-arm-gnu@0.9.4':
+ '@yuku-core/binding-linux-arm-gnu@0.19.0':
optional: true
- '@yuku-codegen/binding-linux-arm-musl@0.9.4':
+ '@yuku-core/binding-linux-arm-musl@0.19.0':
optional: true
- '@yuku-codegen/binding-linux-arm64-gnu@0.9.4':
+ '@yuku-core/binding-linux-arm64-gnu@0.19.0':
optional: true
- '@yuku-codegen/binding-linux-arm64-musl@0.9.4':
+ '@yuku-core/binding-linux-arm64-musl@0.19.0':
optional: true
- '@yuku-codegen/binding-linux-x64-gnu@0.9.4':
+ '@yuku-core/binding-linux-x64-gnu@0.19.0':
optional: true
- '@yuku-codegen/binding-linux-x64-musl@0.9.4':
+ '@yuku-core/binding-linux-x64-musl@0.19.0':
optional: true
- '@yuku-codegen/binding-win32-arm64@0.9.4':
+ '@yuku-core/binding-win32-arm64@0.19.0':
optional: true
- '@yuku-codegen/binding-win32-x64@0.9.4':
+ '@yuku-core/binding-win32-x64@0.19.0':
optional: true
- '@yuku-parser/binding-android-arm64@0.9.4':
- optional: true
-
- '@yuku-parser/binding-darwin-arm64@0.9.4':
- optional: true
-
- '@yuku-parser/binding-darwin-x64@0.9.4':
- optional: true
-
- '@yuku-parser/binding-freebsd-x64@0.9.4':
- optional: true
-
- '@yuku-parser/binding-linux-arm-gnu@0.9.4':
- optional: true
-
- '@yuku-parser/binding-linux-arm-musl@0.9.4':
- optional: true
-
- '@yuku-parser/binding-linux-arm64-gnu@0.9.4':
- optional: true
-
- '@yuku-parser/binding-linux-arm64-musl@0.9.4':
- optional: true
-
- '@yuku-parser/binding-linux-x64-gnu@0.9.4':
- optional: true
-
- '@yuku-parser/binding-linux-x64-musl@0.9.4':
- optional: true
-
- '@yuku-parser/binding-win32-arm64@0.9.4':
- optional: true
-
- '@yuku-parser/binding-win32-x64@0.9.4':
- optional: true
-
- '@yuku-toolchain/types@0.9.4': {}
+ '@yuku-toolchain/types@0.19.0': {}
abbrev@3.0.1: {}
@@ -13817,7 +13992,7 @@ snapshots:
cac@6.7.14: {}
- cac@7.0.0: {}
+ cac@7.1.0: {}
call-bind-apply-helpers@1.0.2:
dependencies:
@@ -13912,7 +14087,7 @@ snapshots:
cli-truncate@5.2.0:
dependencies:
slice-ansi: 8.0.0
- string-width: 8.2.2
+ string-width: 8.3.0
cli-width@4.1.0: {}
@@ -14107,6 +14282,7 @@ snapshots:
safe-regex: 2.1.1
semver: 7.7.4
tsconfig-paths-webpack-plugin: 4.2.0
+ typescript: '@typescript/typescript6@6.0.2'
watskeburt: 5.0.3
dequal@2.0.3: {}
@@ -14231,7 +14407,7 @@ snapshots:
emojilib@2.4.0: {}
- empathic@2.0.1: {}
+ empathic@2.1.0: {}
encodeurl@2.0.0: {}
@@ -14720,9 +14896,9 @@ snapshots:
dependencies:
pend: 1.2.0
- fdir@6.5.0(picomatch@4.0.5):
+ fdir@6.5.0(picomatch@4.0.7):
optionalDependencies:
- picomatch: 4.0.5
+ picomatch: 4.0.7
fetch-blob@3.2.0:
dependencies:
@@ -14852,7 +15028,7 @@ snapshots:
get-caller-file@2.0.5: {}
- get-east-asian-width@1.6.0: {}
+ get-east-asian-width@1.7.0: {}
get-intrinsic@1.3.0:
dependencies:
@@ -15173,6 +15349,8 @@ snapshots:
hookable@6.1.1: {}
+ hookable@6.1.2: {}
+
html-escaper@2.0.2: {}
html-escaper@3.0.3: {}
@@ -15251,7 +15429,7 @@ snapshots:
cjs-module-lexer: 2.2.0
module-details-from-path: 1.0.4
- import-without-cache@0.4.0: {}
+ import-without-cache@0.4.1: {}
imurmurhash@0.1.4: {}
@@ -15299,7 +15477,7 @@ snapshots:
is-fullwidth-code-point@5.1.0:
dependencies:
- get-east-asian-width: 1.6.0
+ get-east-asian-width: 1.7.0
is-glob@4.0.3:
dependencies:
@@ -15559,7 +15737,7 @@ snapshots:
lint-staged@17.0.5:
dependencies:
listr2: 10.2.2
- picomatch: 4.0.5
+ picomatch: 4.0.7
string-argv: 0.3.2
tinyexec: 1.1.2
optionalDependencies:
@@ -15571,7 +15749,7 @@ snapshots:
eventemitter3: 5.0.4
log-update: 6.1.0
rfdc: 1.4.1
- wrap-ansi: 10.0.1
+ wrap-ansi: 10.0.2
load-tsconfig@0.2.5: {}
@@ -16191,7 +16369,7 @@ snapshots:
ms@2.1.3: {}
- msw@2.14.6(@types/node@25.9.1)(typescript@6.0.3):
+ msw@2.14.6(@types/node@25.9.1)(typescript@7.0.2):
dependencies:
'@inquirer/confirm': 6.0.13(@types/node@25.9.1)
'@mswjs/interceptors': 0.41.9
@@ -16212,11 +16390,11 @@ snapshots:
until-async: 3.0.2
yargs: 17.7.2
optionalDependencies:
- typescript: 6.0.3
+ typescript: 7.0.2
transitivePeerDependencies:
- '@types/node'
- msw@2.14.6(typescript@6.0.3):
+ msw@2.14.6(typescript@7.0.2):
dependencies:
'@inquirer/confirm': 6.0.13
'@mswjs/interceptors': 0.41.9
@@ -16237,7 +16415,7 @@ snapshots:
until-async: 3.0.2
yargs: 17.7.2
optionalDependencies:
- typescript: 6.0.3
+ typescript: 7.0.2
transitivePeerDependencies:
- '@types/node'
@@ -16500,6 +16678,8 @@ snapshots:
obug@2.1.4: {}
+ obug@3.0.0: {}
+
ocache@0.1.4:
dependencies:
ohash: 2.0.11
@@ -16923,7 +17103,7 @@ snapshots:
publint@0.3.21:
dependencies:
- '@publint/pack': 0.1.6
+ '@publint/pack': 0.1.7
package-manager-detector: 1.8.0
picocolors: 1.1.1
sade: 1.8.1
@@ -17234,17 +17414,17 @@ snapshots:
rfdc@1.4.1: {}
- rolldown-plugin-dts@0.28.5(rolldown@1.2.7)(typescript@6.0.3):
+ rolldown-plugin-dts@0.28.8(rolldown@1.2.14)(typescript@7.0.2):
dependencies:
dts-resolver: 3.0.0
get-tsconfig: 5.0.0-beta.6
- obug: 2.1.4
- rolldown: 1.2.7
- yuku-ast: 0.9.4
- yuku-codegen: 0.9.4
- yuku-parser: 0.9.4
+ obug: 3.0.0
+ rolldown: 1.2.14
+ yuku-ast: 0.19.0
+ yuku-codegen: 0.19.0
+ yuku-parser: 0.19.0
optionalDependencies:
- typescript: 6.0.3
+ typescript: 7.0.2
transitivePeerDependencies:
- oxc-resolver
@@ -17291,26 +17471,26 @@ snapshots:
'@rolldown/binding-win32-arm64-msvc': 1.0.2
'@rolldown/binding-win32-x64-msvc': 1.0.2
- rolldown@1.2.7:
+ rolldown@1.2.14:
dependencies:
- '@oxc-project/types': 0.148.0
+ '@oxc-project/types': 0.154.0
'@rolldown/pluginutils': 1.0.1
optionalDependencies:
- '@rolldown/binding-android-arm-eabi': 1.2.7
- '@rolldown/binding-android-arm64': 1.2.7
- '@rolldown/binding-darwin-arm64': 1.2.7
- '@rolldown/binding-darwin-x64': 1.2.7
- '@rolldown/binding-freebsd-x64': 1.2.7
- '@rolldown/binding-linux-arm-gnueabihf': 1.2.7
- '@rolldown/binding-linux-arm64-gnu': 1.2.7
- '@rolldown/binding-linux-arm64-musl': 1.2.7
- '@rolldown/binding-linux-ppc64-gnu': 1.2.7
- '@rolldown/binding-linux-s390x-gnu': 1.2.7
- '@rolldown/binding-linux-x64-gnu': 1.2.7
- '@rolldown/binding-linux-x64-musl': 1.2.7
- '@rolldown/binding-openharmony-arm64': 1.2.7
- '@rolldown/binding-win32-arm64-msvc': 1.2.7
- '@rolldown/binding-win32-x64-msvc': 1.2.7
+ '@rolldown/binding-android-arm-eabi': 1.2.14
+ '@rolldown/binding-android-arm64': 1.2.14
+ '@rolldown/binding-darwin-arm64': 1.2.14
+ '@rolldown/binding-darwin-x64': 1.2.14
+ '@rolldown/binding-freebsd-x64': 1.2.14
+ '@rolldown/binding-linux-arm-gnueabihf': 1.2.14
+ '@rolldown/binding-linux-arm64-gnu': 1.2.14
+ '@rolldown/binding-linux-arm64-musl': 1.2.14
+ '@rolldown/binding-linux-ppc64-gnu': 1.2.14
+ '@rolldown/binding-linux-s390x-gnu': 1.2.14
+ '@rolldown/binding-linux-x64-gnu': 1.2.14
+ '@rolldown/binding-linux-x64-musl': 1.2.14
+ '@rolldown/binding-openharmony-arm64': 1.2.14
+ '@rolldown/binding-win32-arm64-msvc': 1.2.14
+ '@rolldown/binding-win32-x64-msvc': 1.2.14
rollup@4.60.4:
dependencies:
@@ -17488,7 +17668,6 @@ snapshots:
'@img/sharp-win32-arm64': 0.35.3
'@img/sharp-win32-ia32': 0.35.3
'@img/sharp-win32-x64': 0.35.3
- optional: true
sharp@0.35.3(@types/node@25.9.1):
dependencies:
@@ -17706,12 +17885,12 @@ snapshots:
string-width@7.2.0:
dependencies:
emoji-regex: 10.6.0
- get-east-asian-width: 1.6.0
+ get-east-asian-width: 1.7.0
strip-ansi: 7.2.0
- string-width@8.2.2:
+ string-width@8.3.0:
dependencies:
- get-east-asian-width: 1.6.0
+ get-east-asian-width: 1.7.0
strip-ansi: 7.2.0
string_decoder@1.3.0:
@@ -17862,8 +18041,8 @@ snapshots:
tinyglobby@0.2.17:
dependencies:
- fdir: 6.5.0(picomatch@4.0.5)
- picomatch: 4.0.5
+ fdir: 6.5.0(picomatch@4.0.7)
+ picomatch: 4.0.7
tinyrainbow@3.1.0: {}
@@ -17901,9 +18080,9 @@ snapshots:
ts-algebra@2.0.0: {}
- ts-api-utils@2.5.0(typescript@6.0.3):
+ ts-api-utils@2.5.0(typescript@7.0.2):
dependencies:
- typescript: 6.0.3
+ typescript: 7.0.2
ts-interface-checker@0.1.13: {}
@@ -17927,35 +18106,36 @@ snapshots:
minimist: 1.2.8
strip-bom: 3.0.0
- tsdown@0.23.0(publint@0.3.21)(tsx@4.22.3)(typescript@6.0.3):
+ tsdown@0.23.1(publint@0.3.21)(tsx@4.22.3)(typescript@7.0.2):
dependencies:
- cac: 7.0.0
+ cac: 7.1.0
defu: 6.1.7
- empathic: 2.0.1
- hookable: 6.1.1
- import-without-cache: 0.4.0
- obug: 2.1.4
+ empathic: 2.1.0
+ hookable: 6.1.2
+ import-without-cache: 0.4.1
+ obug: 3.0.0
picomatch: 4.0.7
- rolldown: 1.2.7
- rolldown-plugin-dts: 0.28.5(rolldown@1.2.7)(typescript@6.0.3)
+ rolldown: 1.2.14
+ rolldown-plugin-dts: 0.28.8(rolldown@1.2.14)(typescript@7.0.2)
tinyexec: 1.1.2
tinyglobby: 0.2.17
tree-kill: 1.2.2
unconfig-core: 7.5.0
- verkit: 0.4.0
+ verkit: 0.5.0
optionalDependencies:
publint: 0.3.21
tsx: 4.22.3
- typescript: 6.0.3
+ typescript: 7.0.2
transitivePeerDependencies:
- '@typescript/native-preview'
- '@volar/typescript'
+ - '@vue/language-core'
- oxc-resolver
- vue-tsc
tslib@2.8.1: {}
- tsup@8.5.1(tsx@4.22.3)(typescript@6.0.3):
+ tsup@8.5.1(tsx@4.22.3)(typescript@7.0.2):
dependencies:
bundle-require: 5.1.0(esbuild@0.27.7)
cac: 6.7.14
@@ -17975,7 +18155,7 @@ snapshots:
tinyglobby: 0.2.17
tree-kill: 1.2.2
optionalDependencies:
- typescript: 6.0.3
+ typescript: 7.0.2
transitivePeerDependencies:
- jiti
- supports-color
@@ -18032,6 +18212,29 @@ snapshots:
typescript@6.0.3: {}
+ typescript@7.0.2:
+ optionalDependencies:
+ '@typescript/typescript-aix-ppc64': 7.0.2
+ '@typescript/typescript-darwin-arm64': 7.0.2
+ '@typescript/typescript-darwin-x64': 7.0.2
+ '@typescript/typescript-freebsd-arm64': 7.0.2
+ '@typescript/typescript-freebsd-x64': 7.0.2
+ '@typescript/typescript-linux-arm': 7.0.2
+ '@typescript/typescript-linux-arm64': 7.0.2
+ '@typescript/typescript-linux-loong64': 7.0.2
+ '@typescript/typescript-linux-mips64el': 7.0.2
+ '@typescript/typescript-linux-ppc64': 7.0.2
+ '@typescript/typescript-linux-riscv64': 7.0.2
+ '@typescript/typescript-linux-s390x': 7.0.2
+ '@typescript/typescript-linux-x64': 7.0.2
+ '@typescript/typescript-netbsd-arm64': 7.0.2
+ '@typescript/typescript-netbsd-x64': 7.0.2
+ '@typescript/typescript-openbsd-arm64': 7.0.2
+ '@typescript/typescript-openbsd-x64': 7.0.2
+ '@typescript/typescript-sunos-x64': 7.0.2
+ '@typescript/typescript-win32-arm64': 7.0.2
+ '@typescript/typescript-win32-x64': 7.0.2
+
ufo@1.6.4: {}
uid-promise@1.0.0: {}
@@ -18222,7 +18425,7 @@ snapshots:
- rollup
- supports-color
- verkit@0.4.0: {}
+ verkit@0.5.0: {}
vfile-location@5.0.3:
dependencies:
@@ -18242,7 +18445,7 @@ snapshots:
vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0):
dependencies:
lightningcss: 1.33.0
- picomatch: 4.0.5
+ picomatch: 4.0.7
postcss: 8.5.25
rolldown: 1.0.2
tinyglobby: 0.2.17
@@ -18256,7 +18459,7 @@ snapshots:
vite@8.0.14(@types/node@25.9.1)(tsx@4.22.3):
dependencies:
lightningcss: 1.33.0
- picomatch: 4.0.5
+ picomatch: 4.0.7
postcss: 8.5.25
rolldown: 1.0.2
tinyglobby: 0.2.17
@@ -18268,7 +18471,7 @@ snapshots:
vite@8.0.14(esbuild@0.28.1)(tsx@4.22.3):
dependencies:
lightningcss: 1.33.0
- picomatch: 4.0.5
+ picomatch: 4.0.7
postcss: 8.5.25
rolldown: 1.0.2
tinyglobby: 0.2.17
@@ -18280,7 +18483,7 @@ snapshots:
vite@8.0.14(tsx@4.22.3):
dependencies:
lightningcss: 1.33.0
- picomatch: 4.0.5
+ picomatch: 4.0.7
postcss: 8.5.25
rolldown: 1.0.2
tinyglobby: 0.2.17
@@ -18292,20 +18495,20 @@ snapshots:
optionalDependencies:
vite: 8.0.14(esbuild@0.28.1)(tsx@4.22.3)
- vitest-evals@0.16.1(ai@6.0.190(zod@4.5.4))(tinyrainbow@3.1.0)(vitest@4.1.7(msw@2.14.6(typescript@6.0.3))(tsx@4.22.3))(zod@4.5.4):
+ vitest-evals@0.16.1(ai@6.0.190(zod@4.5.4))(tinyrainbow@3.1.0)(vitest@4.1.7(msw@2.14.6(typescript@7.0.2))(tsx@4.22.3))(zod@4.5.4):
dependencies:
'@vitest-evals/core': 0.16.1
'@vitest-evals/report-ui': 0.16.1
tinyrainbow: 3.1.0
- vitest: 4.1.7(msw@2.14.6(typescript@6.0.3))(tsx@4.22.3)
+ vitest: 4.1.7(msw@2.14.6(typescript@7.0.2))(tsx@4.22.3)
optionalDependencies:
ai: 6.0.190(zod@4.5.4)
zod: 4.5.4
- vitest@4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/coverage-v8@4.1.7)(jiti@2.7.0)(msw@2.14.6(@types/node@25.9.1)(typescript@6.0.3))(tsx@4.22.3)(yaml@2.9.0):
+ vitest@4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(@vitest/coverage-v8@4.1.7)(jiti@2.7.0)(msw@2.14.6(@types/node@25.9.1)(typescript@7.0.2))(tsx@4.22.3)(yaml@2.9.0):
dependencies:
'@vitest/expect': 4.1.7
- '@vitest/mocker': 4.1.7(msw@2.14.6(@types/node@25.9.1)(typescript@6.0.3))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))
+ '@vitest/mocker': 4.1.7(msw@2.14.6(@types/node@25.9.1)(typescript@7.0.2))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))
'@vitest/pretty-format': 4.1.7
'@vitest/runner': 4.1.7
'@vitest/snapshot': 4.1.7
@@ -18381,10 +18584,10 @@ snapshots:
- tsx
- yaml
- vitest@4.1.7(@types/node@25.9.1)(msw@2.14.6(@types/node@25.9.1)(typescript@6.0.3))(tsx@4.22.3):
+ vitest@4.1.7(@types/node@25.9.1)(msw@2.14.6(@types/node@25.9.1)(typescript@7.0.2))(tsx@4.22.3):
dependencies:
'@vitest/expect': 4.1.7
- '@vitest/mocker': 4.1.7(msw@2.14.6(@types/node@25.9.1)(typescript@6.0.3))(vite@8.0.14(@types/node@25.9.1)(tsx@4.22.3))
+ '@vitest/mocker': 4.1.7(msw@2.14.6(@types/node@25.9.1)(typescript@7.0.2))(vite@8.0.14(@types/node@25.9.1)(tsx@4.22.3))
'@vitest/pretty-format': 4.1.7
'@vitest/runner': 4.1.7
'@vitest/snapshot': 4.1.7
@@ -18457,10 +18660,10 @@ snapshots:
- tsx
- yaml
- vitest@4.1.7(msw@2.14.6(typescript@6.0.3))(tsx@4.22.3):
+ vitest@4.1.7(msw@2.14.6(typescript@7.0.2))(tsx@4.22.3):
dependencies:
'@vitest/expect': 4.1.7
- '@vitest/mocker': 4.1.7(msw@2.14.6(typescript@6.0.3))(vite@8.0.14(tsx@4.22.3))
+ '@vitest/mocker': 4.1.7(msw@2.14.6(typescript@7.0.2))(vite@8.0.14(tsx@4.22.3))
'@vitest/pretty-format': 4.1.7
'@vitest/runner': 4.1.7
'@vitest/snapshot': 4.1.7
@@ -18616,10 +18819,10 @@ snapshots:
word-wrap@1.2.5: {}
- wrap-ansi@10.0.1:
+ wrap-ansi@10.0.2:
dependencies:
ansi-styles: 6.2.3
- string-width: 8.2.2
+ string-width: 8.3.0
wrap-ansi@7.0.0:
dependencies:
@@ -18724,44 +18927,35 @@ snapshots:
yocto-queue@1.2.2: {}
- yuku-ast@0.9.4:
+ yuku-ast@0.19.0:
dependencies:
- '@yuku-toolchain/types': 0.9.4
+ '@yuku-toolchain/types': 0.19.0
- yuku-codegen@0.9.4:
+ yuku-codegen@0.19.0:
dependencies:
- '@yuku-toolchain/types': 0.9.4
- optionalDependencies:
- '@yuku-codegen/binding-android-arm64': 0.9.4
- '@yuku-codegen/binding-darwin-arm64': 0.9.4
- '@yuku-codegen/binding-darwin-x64': 0.9.4
- '@yuku-codegen/binding-freebsd-x64': 0.9.4
- '@yuku-codegen/binding-linux-arm-gnu': 0.9.4
- '@yuku-codegen/binding-linux-arm-musl': 0.9.4
- '@yuku-codegen/binding-linux-arm64-gnu': 0.9.4
- '@yuku-codegen/binding-linux-arm64-musl': 0.9.4
- '@yuku-codegen/binding-linux-x64-gnu': 0.9.4
- '@yuku-codegen/binding-linux-x64-musl': 0.9.4
- '@yuku-codegen/binding-win32-arm64': 0.9.4
- '@yuku-codegen/binding-win32-x64': 0.9.4
-
- yuku-parser@0.9.4:
- dependencies:
- '@yuku-toolchain/types': 0.9.4
- yuku-ast: 0.9.4
+ '@yuku-toolchain/types': 0.19.0
+
+ yuku-core@0.19.0:
+ dependencies:
+ '@yuku-toolchain/types': 0.19.0
optionalDependencies:
- '@yuku-parser/binding-android-arm64': 0.9.4
- '@yuku-parser/binding-darwin-arm64': 0.9.4
- '@yuku-parser/binding-darwin-x64': 0.9.4
- '@yuku-parser/binding-freebsd-x64': 0.9.4
- '@yuku-parser/binding-linux-arm-gnu': 0.9.4
- '@yuku-parser/binding-linux-arm-musl': 0.9.4
- '@yuku-parser/binding-linux-arm64-gnu': 0.9.4
- '@yuku-parser/binding-linux-arm64-musl': 0.9.4
- '@yuku-parser/binding-linux-x64-gnu': 0.9.4
- '@yuku-parser/binding-linux-x64-musl': 0.9.4
- '@yuku-parser/binding-win32-arm64': 0.9.4
- '@yuku-parser/binding-win32-x64': 0.9.4
+ '@yuku-core/binding-android-arm64': 0.19.0
+ '@yuku-core/binding-darwin-arm64': 0.19.0
+ '@yuku-core/binding-darwin-x64': 0.19.0
+ '@yuku-core/binding-freebsd-x64': 0.19.0
+ '@yuku-core/binding-linux-arm-gnu': 0.19.0
+ '@yuku-core/binding-linux-arm-musl': 0.19.0
+ '@yuku-core/binding-linux-arm64-gnu': 0.19.0
+ '@yuku-core/binding-linux-arm64-musl': 0.19.0
+ '@yuku-core/binding-linux-x64-gnu': 0.19.0
+ '@yuku-core/binding-linux-x64-musl': 0.19.0
+ '@yuku-core/binding-win32-arm64': 0.19.0
+ '@yuku-core/binding-win32-x64': 0.19.0
+
+ yuku-parser@0.19.0:
+ dependencies:
+ '@yuku-toolchain/types': 0.19.0
+ yuku-core: 0.19.0
zod-to-json-schema@3.25.2(zod@4.5.4):
dependencies:
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 0112f40071..052e75b821 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -26,6 +26,12 @@ overrides:
tldts: 7.0.30
ws: 8.20.1
yaml: ^2.9.0
+packageExtensions:
+ dependency-cruiser:
+ dependencies:
+ # TypeScript 7 has no compiler API. dependency-cruiser needs it to parse
+ # TypeScript sources, and finds no TypeScript files without it.
+ typescript: npm:@typescript/typescript6@6.0.2
peerDependencyRules:
allowedVersions:
vitest-evals>ai: ">=4"
diff --git a/tsconfig.base.json b/tsconfig.base.json
new file mode 100644
index 0000000000..0dfe99a545
--- /dev/null
+++ b/tsconfig.base.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://json.schemastore.org/tsconfig",
+ "compilerOptions": {
+ /* Interop Constraints */
+ "isolatedModules": true,
+ "erasableSyntaxOnly": true,
+ "forceConsistentCasingInFileNames": true,
+
+ /* Type Checking */
+ "strict": true,
+ "noUncheckedIndexedAccess": true,
+ "noImplicitOverride": true,
+ "noImplicitReturns": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noUncheckedSideEffectImports": true,
+ "allowUnreachableCode": false,
+ "allowUnusedLabels": false,
+
+ /* Completeness */
+ "skipLibCheck": true
+ }
+}