diff --git a/apps/desktop/package.json b/apps/desktop/package.json
index f55c71883f1..88be9c665bc 100644
--- a/apps/desktop/package.json
+++ b/apps/desktop/package.json
@@ -183,6 +183,7 @@
"idb": "^8.0.3",
"idb-keyval": "^6.2.2",
"jose": "^6.1.3",
+ "js-yaml": "^4.1.1",
"jszip": "^3.10.1",
"libsql": "0.5.22",
"line-column-path": "^3.0.0",
@@ -253,6 +254,7 @@
"@types/culori": "^4.0.1",
"@types/diff": "^6.0.0",
"@types/http-proxy": "^1.17.17",
+ "@types/js-yaml": "^4.0.9",
"@types/lodash": "^4.17.20",
"@types/node": "^24.9.1",
"@types/pg": "8.15.6",
diff --git a/apps/desktop/src/lib/trpc/routers/workspaces/procedures/git-status.ts b/apps/desktop/src/lib/trpc/routers/workspaces/procedures/git-status.ts
index 0e999b34799..926849b5e6f 100644
--- a/apps/desktop/src/lib/trpc/routers/workspaces/procedures/git-status.ts
+++ b/apps/desktop/src/lib/trpc/routers/workspaces/procedures/git-status.ts
@@ -4,6 +4,7 @@ import type { GitHubStatus } from "@superset/local-db";
import { workspaces, worktrees } from "@superset/local-db";
import { TRPCError } from "@trpc/server";
import { and, eq, isNull } from "drizzle-orm";
+import yaml from "js-yaml";
import { localDb } from "main/lib/local-db";
import { z } from "zod";
import { publicProcedure, router } from "../../..";
@@ -241,31 +242,105 @@ function isGitHubActionsUrl(url?: string): boolean {
return parseRunIdFromActionsUrl(url) !== null;
}
-function workflowSupportsDispatch({
+interface WorkflowDispatchInput {
+ name: string;
+ description: string;
+ required: boolean;
+ default: string;
+ type: "string" | "choice" | "boolean" | "number" | "environment";
+ options: string[];
+}
+
+interface WorkflowDispatchInfo {
+ supportsDispatch: boolean;
+ inputs: WorkflowDispatchInput[];
+}
+
+function parseWorkflowDispatchInfo({
repoPath,
workflowPath,
}: {
repoPath: string;
workflowPath?: string;
-}): boolean {
+}): WorkflowDispatchInfo {
+ const noDispatch: WorkflowDispatchInfo = {
+ supportsDispatch: false,
+ inputs: [],
+ };
+
if (!workflowPath) {
- return false;
+ return noDispatch;
}
const absolutePath = path.join(repoPath, workflowPath);
if (!existsSync(absolutePath)) {
- return false;
+ return noDispatch;
}
+ let content: string;
try {
- const content = readFileSync(absolutePath, "utf8");
- return (
- /^\s*workflow_dispatch\s*:/m.test(content) ||
- /^\s*on\s*:\s*workflow_dispatch\s*$/m.test(content) ||
- /^\s*on\s*:\s*\[[^\]]*\bworkflow_dispatch\b[^\]]*\]/m.test(content)
- );
+ content = readFileSync(absolutePath, "utf8");
+ } catch {
+ return noDispatch;
+ }
+
+ const hasDispatch =
+ /^\s*workflow_dispatch\s*:/m.test(content) ||
+ /^\s*on\s*:\s*workflow_dispatch\s*$/m.test(content) ||
+ /^\s*on\s*:\s*\[[^\]]*\bworkflow_dispatch\b[^\]]*\]/m.test(content);
+
+ if (!hasDispatch) {
+ return noDispatch;
+ }
+
+ try {
+ const parsed = yaml.load(content) as Record | null;
+ if (!parsed || typeof parsed !== "object") {
+ return { supportsDispatch: true, inputs: [] };
+ }
+
+ const onBlock = parsed.on ?? parsed.true;
+ if (!onBlock || typeof onBlock !== "object") {
+ return { supportsDispatch: true, inputs: [] };
+ }
+
+ const dispatchBlock = (onBlock as Record)
+ .workflow_dispatch;
+ if (!dispatchBlock || typeof dispatchBlock !== "object") {
+ return { supportsDispatch: true, inputs: [] };
+ }
+
+ const rawInputs = (dispatchBlock as Record).inputs;
+ if (!rawInputs || typeof rawInputs !== "object") {
+ return { supportsDispatch: true, inputs: [] };
+ }
+
+ const inputs: WorkflowDispatchInput[] = Object.entries(
+ rawInputs as Record,
+ ).map(([name, value]) => {
+ const input = (value ?? {}) as Record;
+ const inputType = String(input.type ?? "string");
+ const options: string[] = Array.isArray(input.options)
+ ? input.options.map(String)
+ : [];
+
+ return {
+ name,
+ description: String(input.description ?? ""),
+ required: Boolean(input.required ?? false),
+ default: String(input.default ?? ""),
+ type: (
+ ["string", "choice", "boolean", "number", "environment"] as const
+ ).includes(inputType as never)
+ ? (inputType as WorkflowDispatchInput["type"])
+ : "string",
+ options,
+ };
+ });
+
+ return { supportsDispatch: true, inputs };
} catch {
- return false;
+ return { supportsDispatch: true, inputs: [] };
}
}
@@ -545,18 +620,21 @@ async function getGitHubRepositoryOverview(workspaceId: string) {
})),
workflows: workflows
.filter((workflow) => workflow.state !== "disabled_manually")
- .filter((workflow) =>
- workflowSupportsDispatch({
+ .map((workflow) => {
+ const dispatchInfo = parseWorkflowDispatchInfo({
repoPath,
workflowPath: workflow.path,
- }),
- )
- .map((workflow) => ({
- id: workflow.id,
- name: workflow.name,
- path: workflow.path ?? "",
- state: workflow.state ?? "unknown",
- })),
+ });
+ return {
+ id: workflow.id,
+ name: workflow.name,
+ path: workflow.path ?? "",
+ state: workflow.state ?? "unknown",
+ supportsDispatch: dispatchInfo.supportsDispatch,
+ inputs: dispatchInfo.inputs,
+ };
+ })
+ .filter((workflow) => workflow.supportsDispatch),
};
}
@@ -665,10 +743,12 @@ async function dispatchGitHubWorkflowForWorkspace({
workspaceId,
workflowId,
ref,
+ inputs,
}: {
workspaceId: string;
workflowId: number;
ref?: string;
+ inputs?: Record;
}) {
const { repoPath, repositoryNameWithOwner, currentBranch, defaultBranch } =
await resolveRepositoryTargetForWorkspace(workspaceId);
@@ -685,18 +765,22 @@ async function dispatchGitHubWorkflowForWorkspace({
}
}
- await execWithShellEnv(
- "gh",
- [
- "api",
- "--method",
- "POST",
- `repos/${repositoryNameWithOwner}/actions/workflows/${workflowId}/dispatches`,
- "-f",
- `ref=${targetRef}`,
- ],
- { cwd: repoPath },
- );
+ const args = [
+ "api",
+ "--method",
+ "POST",
+ `repos/${repositoryNameWithOwner}/actions/workflows/${workflowId}/dispatches`,
+ "-f",
+ `ref=${targetRef}`,
+ ];
+
+ if (inputs) {
+ for (const [key, value] of Object.entries(inputs)) {
+ args.push("-f", `inputs[${key}]=${value}`);
+ }
+ }
+
+ await execWithShellEnv("gh", args, { cwd: repoPath });
return {
success: true as const,
@@ -745,6 +829,70 @@ async function getGitHubWorkflowRunsForWorkspace({
}));
}
+async function getWorkflowRunJobsForWorkspace({
+ workspaceId,
+ runId,
+}: {
+ workspaceId: string;
+ runId: number;
+}) {
+ const { repoPath, repositoryNameWithOwner } =
+ await resolveRepositoryTargetForWorkspace(workspaceId);
+ const { stdout } = await execWithShellEnv(
+ "gh",
+ [
+ "api",
+ `repos/${repositoryNameWithOwner}/actions/runs/${runId}/jobs?per_page=100`,
+ ],
+ { cwd: repoPath },
+ );
+
+ const raw: unknown = JSON.parse(stdout);
+ const parsed = z
+ .object({
+ jobs: z
+ .array(
+ z.object({
+ id: z.number(),
+ name: z.string(),
+ status: z.string(),
+ conclusion: z.string().nullable(),
+ html_url: z.string().nullable().optional(),
+ }),
+ )
+ .optional(),
+ })
+ .parse(raw);
+
+ return (parsed.jobs ?? []).map((job) => ({
+ detailsUrl: job.html_url ?? "",
+ name: job.name,
+ status: mapJobStatus(job.status, job.conclusion),
+ }));
+}
+
+function mapJobStatus(
+ status: string,
+ conclusion: string | null,
+): "success" | "failure" | "pending" | "skipped" | "cancelled" {
+ if (status !== "completed") {
+ return "pending";
+ }
+ switch (conclusion) {
+ case "success":
+ return "success";
+ case "failure":
+ case "timed_out":
+ return "failure";
+ case "cancelled":
+ return "cancelled";
+ case "skipped":
+ return "skipped";
+ default:
+ return "pending";
+ }
+}
+
async function rerunPullRequestChecksForWorkspace({
workspaceId,
mode,
@@ -1279,6 +1427,7 @@ export const createGitStatusProcedures = () => {
workspaceId: z.string(),
workflowId: z.number().int().positive(),
ref: z.string().optional(),
+ inputs: z.record(z.string(), z.string()).optional(),
}),
)
.mutation(async ({ input }) => {
@@ -1296,6 +1445,17 @@ export const createGitStatusProcedures = () => {
return getGitHubWorkflowRunsForWorkspace(input);
}),
+ getWorkflowRunJobs: publicProcedure
+ .input(
+ z.object({
+ workspaceId: z.string(),
+ runId: z.number().int().positive(),
+ }),
+ )
+ .query(async ({ input }) => {
+ return getWorkflowRunJobsForWorkspace(input);
+ }),
+
rerunPullRequestChecks: publicProcedure
.input(
z.object({
diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/ActionLogsPane/ActionLogsPane.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/ActionLogsPane/ActionLogsPane.tsx
index 6036e6e9145..15f01b3f957 100644
--- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/ActionLogsPane/ActionLogsPane.tsx
+++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/ActionLogsPane/ActionLogsPane.tsx
@@ -9,7 +9,7 @@ import {
import { toast } from "@superset/ui/sonner";
import { cn } from "@superset/ui/utils";
import { AnsiUp } from "ansi_up";
-import { useCallback, useRef, useState } from "react";
+import { useCallback, useMemo, useRef, useState } from "react";
import {
LuCheck,
LuChevronRight,
@@ -98,6 +98,7 @@ interface JobStepsProps {
jobConclusion: string | null;
showTimestamps: boolean;
searchQuery: string;
+ hideRerun?: boolean;
}
function JobSteps({
@@ -108,6 +109,7 @@ function JobSteps({
jobConclusion,
showTimestamps,
searchQuery,
+ hideRerun,
}: JobStepsProps) {
const [expandedSteps, setExpandedSteps] = useState>(new Set());
const rerunMutation =
@@ -207,40 +209,42 @@ function JobSteps({
)}
-
-
-
-
+ {!hideRerun ? (
+
+
+
+
+ ) : null}
{/* Steps */}
@@ -365,6 +369,7 @@ export function ActionLogsPane({
const pane = useTabsStore((s) => s.panes[paneId]);
const initialJobs: ActionLogsJob[] = pane?.actionLogs?.jobs ?? [];
const initialIndex = pane?.actionLogs?.initialJobIndex ?? 0;
+ const runId = pane?.actionLogs?.runId;
const [selectedIndex, setSelectedIndex] = useState(initialIndex);
const [showTimestamps, setShowTimestamps] = useState(false);
@@ -376,18 +381,43 @@ export function ActionLogsPane({
);
const checks = githubStatus?.pr?.checks ?? [];
- // Build live job list: match by name to track across re-runs (URLs change on re-run)
- const jobs: ActionLogsJob[] = initialJobs.map((job) => {
- const liveCheck = checks.find((c) => c.name === job.name);
- if (liveCheck) {
- return {
- detailsUrl: liveCheck.url ?? job.detailsUrl,
- name: liveCheck.name ?? job.name,
- status: liveCheck.status,
- };
+ // Poll workflow run jobs when runId is present (workflow dispatch case)
+ const { data: polledJobs } =
+ electronTrpc.workspaces.getWorkflowRunJobs.useQuery(
+ { workspaceId, runId: runId ?? 0 },
+ {
+ enabled: !!runId,
+ staleTime: 0,
+ refetchInterval: (query) => {
+ const data = query.state.data;
+ if (!data || data.length === 0) return 3_000;
+ const allCompleted = data.every((j) => j.status !== "pending");
+ return allCompleted ? false : 3_000;
+ },
+ refetchIntervalInBackground: true,
+ },
+ );
+
+ // Build live job list
+ const jobs: ActionLogsJob[] = useMemo(() => {
+ // When polling by runId, use polled data as the source of truth
+ if (runId && polledJobs && polledJobs.length > 0) {
+ return polledJobs;
}
- return job;
- });
+
+ // Fallback: match by name against PR checks (original behavior)
+ return initialJobs.map((job) => {
+ const liveCheck = checks.find((c) => c.name === job.name);
+ if (liveCheck) {
+ return {
+ detailsUrl: liveCheck.url ?? job.detailsUrl,
+ name: liveCheck.name ?? job.name,
+ status: liveCheck.status,
+ };
+ }
+ return job;
+ });
+ }, [runId, polledJobs, initialJobs, checks]);
const [searchQuery, setSearchQuery] = useState("");
const [searchOpen, setSearchOpen] = useState(false);
@@ -601,6 +631,7 @@ export function ActionLogsPane({
jobConclusion={null}
showTimestamps={showTimestamps}
searchQuery={searchQuery}
+ hideRerun={!!runId}
/>
)}
diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/RepositoryPanel/RepositoryPanel.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/RepositoryPanel/RepositoryPanel.tsx
index db80bac8304..2ec8b32b184 100644
--- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/RepositoryPanel/RepositoryPanel.tsx
+++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/RepositoryPanel/RepositoryPanel.tsx
@@ -1,6 +1,7 @@
import { Avatar } from "@superset/ui/atoms/Avatar";
import { Badge } from "@superset/ui/badge";
import { Button } from "@superset/ui/button";
+import { Checkbox } from "@superset/ui/checkbox";
import {
Collapsible,
CollapsibleContent,
@@ -16,6 +17,13 @@ import {
} from "@superset/ui/command";
import { Input } from "@superset/ui/input";
import { Popover, PopoverContent, PopoverTrigger } from "@superset/ui/popover";
+import {
+ Select,
+ SelectContent,
+ SelectItem,
+ SelectTrigger,
+ SelectValue,
+} from "@superset/ui/select";
import { Skeleton } from "@superset/ui/skeleton";
import { toast } from "@superset/ui/sonner";
import { Textarea } from "@superset/ui/textarea";
@@ -200,11 +208,13 @@ function WorkflowRunCard({
tracked,
onOpenUrl,
onRemove,
+ onViewLogs,
}: {
workspaceId: string;
tracked: TrackedWorkflowRun;
onOpenUrl: (url: string) => void;
onRemove: (workflowId: number) => void;
+ onViewLogs: (runId: number) => void;
}) {
const { data: runs = [], isFetching } =
electronTrpc.workspaces.getGitHubWorkflowRuns.useQuery(
@@ -283,21 +293,40 @@ function WorkflowRunCard({
? "Waiting for GitHub to create the run..."
: "Looking for the triggered run..."}
- {matchedRun?.url ? (
-
- ) : null}
+
+ {matchedRun?.id ? (
+
+ ) : null}
+ {matchedRun?.url ? (
+
+ ) : null}
+
);
@@ -307,6 +336,7 @@ export function RepositoryPanel({ isActive = true }: RepositoryPanelProps) {
const workspaceId = useWorkspaceId();
const trpcUtils = electronTrpc.useUtils();
const addBrowserTab = useTabsStore((state) => state.addBrowserTab);
+ const addActionLogsTab = useTabsStore((state) => state.addActionLogsTab);
const [open, setOpen] = useState(false);
const [pullRequestsOpen, setPullRequestsOpen] = useState(true);
const [workflowsOpen, setWorkflowsOpen] = useState(true);
@@ -328,6 +358,12 @@ export function RepositoryPanel({ isActive = true }: RepositoryPanelProps) {
const [pendingWorkflowId, setPendingWorkflowId] = useState(
null,
);
+ const [expandedWorkflowId, setExpandedWorkflowId] = useState(
+ null,
+ );
+ const [workflowInputValues, setWorkflowInputValues] = useState<
+ Record>
+ >({});
const [trackedWorkflowRuns, setTrackedWorkflowRuns] = useState<
TrackedWorkflowRun[]
>([]);
@@ -544,17 +580,44 @@ export function RepositoryPanel({ isActive = true }: RepositoryPanelProps) {
const handleRunWorkflow = async (
workflowId: number,
workflowName: string,
+ workflowInputDefs?: Array<{
+ name: string;
+ required: boolean;
+ }>,
) => {
if (!workspaceId) {
return;
}
+ const rawInputs = workflowInputValues[workflowId];
+
+ // Validate required inputs
+ if (workflowInputDefs && rawInputs) {
+ const missing = workflowInputDefs.filter(
+ (def) => def.required && !rawInputs[def.name]?.trim(),
+ );
+ if (missing.length > 0) {
+ toast.error(`Required: ${missing.map((m) => m.name).join(", ")}`);
+ return;
+ }
+ }
+
+ // Strip empty values
+ let filteredInputs: Record | undefined;
+ if (rawInputs) {
+ const cleaned = Object.fromEntries(
+ Object.entries(rawInputs).filter(([, v]) => v !== ""),
+ );
+ filteredInputs = Object.keys(cleaned).length > 0 ? cleaned : undefined;
+ }
+
setPendingWorkflowId(workflowId);
try {
const result = await dispatchWorkflowMutation.mutateAsync({
workspaceId,
workflowId,
ref: workflowRef.trim() || undefined,
+ inputs: filteredInputs,
});
setTrackedWorkflowRuns((current) =>
[
@@ -581,6 +644,27 @@ export function RepositoryPanel({ isActive = true }: RepositoryPanelProps) {
}
};
+ const handleViewWorkflowLogs = async (runId: number) => {
+ if (!workspaceId) {
+ return;
+ }
+ try {
+ const jobs = await trpcUtils.workspaces.getWorkflowRunJobs.fetch({
+ workspaceId,
+ runId,
+ });
+ const failedIdx = jobs.findIndex((j) => j.status === "failure");
+ addActionLogsTab(
+ workspaceId,
+ jobs,
+ failedIdx >= 0 ? failedIdx : undefined,
+ runId,
+ );
+ } catch {
+ toast.error("Failed to fetch workflow jobs");
+ }
+ };
+
return (
{
+ void handleViewWorkflowLogs(runId);
+ }}
/>
))}
@@ -1124,44 +1211,213 @@ export function RepositoryPanel({ isActive = true }: RepositoryPanelProps) {
) : (
- {repositoryOverview.workflows.map((workflow) => (
-
-
-
- {workflow.name}
-
-
- {workflow.path || workflow.state}
-
-
-
+ );
+ })}
)}
diff --git a/apps/desktop/src/renderer/stores/tabs/store.ts b/apps/desktop/src/renderer/stores/tabs/store.ts
index 7442628c040..aaaea777863 100644
--- a/apps/desktop/src/renderer/stores/tabs/store.ts
+++ b/apps/desktop/src/renderer/stores/tabs/store.ts
@@ -1766,6 +1766,7 @@ export const useTabsStore = create()(
status: "success" | "failure" | "pending" | "skipped" | "cancelled";
}>,
initialJobIndex?: number,
+ runId?: number,
) => {
const state = get();
@@ -1773,6 +1774,7 @@ export const useTabsStore = create()(
workspaceId,
jobs,
initialJobIndex,
+ runId,
);
const currentActiveId = state.activeTabIds[workspaceId];
diff --git a/apps/desktop/src/renderer/stores/tabs/types.ts b/apps/desktop/src/renderer/stores/tabs/types.ts
index 1ed7926b7d3..a53d7e55d42 100644
--- a/apps/desktop/src/renderer/stores/tabs/types.ts
+++ b/apps/desktop/src/renderer/stores/tabs/types.ts
@@ -223,6 +223,7 @@ export interface TabsStore extends TabsState {
status: "success" | "failure" | "pending" | "skipped" | "cancelled";
}>,
initialJobIndex?: number,
+ runId?: number,
) => { tabId: string; paneId: string };
openInBrowserPane: (workspaceId: string, url: string) => void;
setDatabaseExplorerConnection: (
diff --git a/apps/desktop/src/renderer/stores/tabs/utils.ts b/apps/desktop/src/renderer/stores/tabs/utils.ts
index b69b4857138..e265a999b5b 100644
--- a/apps/desktop/src/renderer/stores/tabs/utils.ts
+++ b/apps/desktop/src/renderer/stores/tabs/utils.ts
@@ -427,9 +427,10 @@ export const createActionLogsPane = (
tabId: string,
jobs: ActionLogsJob[],
initialJobIndex?: number,
+ runId?: number,
): Pane => {
const id = generateId("pane");
- const actionLogs: ActionLogsPaneState = { jobs, initialJobIndex };
+ const actionLogs: ActionLogsPaneState = { jobs, initialJobIndex, runId };
return {
id,
tabId,
@@ -443,9 +444,10 @@ export const createActionLogsTabWithPane = (
workspaceId: string,
jobs: ActionLogsJob[],
initialJobIndex?: number,
+ runId?: number,
): { tab: Tab; pane: Pane } => {
const tabId = generateId("tab");
- const pane = createActionLogsPane(tabId, jobs, initialJobIndex);
+ const pane = createActionLogsPane(tabId, jobs, initialJobIndex, runId);
const tab: Tab = {
id: tabId,
diff --git a/apps/desktop/src/shared/tabs-types.ts b/apps/desktop/src/shared/tabs-types.ts
index 44ffb018697..7ca7d751f64 100644
--- a/apps/desktop/src/shared/tabs-types.ts
+++ b/apps/desktop/src/shared/tabs-types.ts
@@ -253,6 +253,8 @@ export interface ActionLogsPaneState {
jobs: ActionLogsJob[];
/** Initially selected job index */
initialJobIndex?: number;
+ /** Workflow run ID — when set, jobs are polled from the GitHub API */
+ runId?: number;
}
/**
diff --git a/bun.lock b/bun.lock
index 18ccefce8b3..1097a96863a 100644
--- a/bun.lock
+++ b/bun.lock
@@ -260,6 +260,7 @@
"idb": "^8.0.3",
"idb-keyval": "^6.2.2",
"jose": "^6.1.3",
+ "js-yaml": "^4.1.1",
"jszip": "^3.10.1",
"libsql": "0.5.22",
"line-column-path": "^3.0.0",
@@ -330,6 +331,7 @@
"@types/culori": "^4.0.1",
"@types/diff": "^6.0.0",
"@types/http-proxy": "^1.17.17",
+ "@types/js-yaml": "^4.0.9",
"@types/lodash": "^4.17.20",
"@types/node": "^24.9.1",
"@types/pg": "8.15.6",
@@ -2766,6 +2768,8 @@
"@types/istanbul-reports": ["@types/istanbul-reports@3.0.4", "", { "dependencies": { "@types/istanbul-lib-report": "*" } }, "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ=="],
+ "@types/js-yaml": ["@types/js-yaml@4.0.9", "", {}, "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg=="],
+
"@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="],
"@types/keyv": ["@types/keyv@3.1.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg=="],
@@ -3038,7 +3042,7 @@
"arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="],
- "argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="],
+ "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
"aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="],
@@ -4244,7 +4248,7 @@
"js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="],
- "js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="],
+ "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
"jsc-safe-url": ["jsc-safe-url@0.2.4", "", {}, "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q=="],
@@ -5910,8 +5914,6 @@
"@ai-sdk/ui-utils-v5/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="],
- "@apidevtools/json-schema-ref-parser/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
-
"@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
"@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="],
@@ -6022,8 +6024,6 @@
"@expo/xcpretty/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="],
- "@expo/xcpretty/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
-
"@fast-csv/format/@types/node": ["@types/node@14.18.63", "", {}, "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ=="],
"@fast-csv/parse/@types/node": ["@types/node@14.18.63", "", {}, "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ=="],
@@ -6060,6 +6060,8 @@
"@istanbuljs/load-nyc-config/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="],
+ "@istanbuljs/load-nyc-config/js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="],
+
"@jest/transform/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="],
"@jest/transform/write-file-atomic": ["write-file-atomic@4.0.2", "", { "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" } }, "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg=="],
@@ -6264,8 +6266,6 @@
"app-builder-lib/dotenv-expand": ["dotenv-expand@11.0.7", "", { "dependencies": { "dotenv": "^16.4.5" } }, "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA=="],
- "app-builder-lib/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
-
"app-builder-lib/which": ["which@5.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ=="],
"archiver-utils/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="],
@@ -6294,8 +6294,6 @@
"builder-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="],
- "builder-util/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
-
"cacache/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="],
"cacache/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="],
@@ -6336,8 +6334,6 @@
"connect/finalhandler": ["finalhandler@1.1.2", "", { "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", "parseurl": "~1.3.3", "statuses": "~1.5.0", "unpipe": "~1.0.0" } }, "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA=="],
- "cosmiconfig/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
-
"crc/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="],
"css-tree/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="],
@@ -6360,8 +6356,6 @@
"dmg-builder/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="],
- "dmg-builder/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
-
"dmg-license/ajv": ["ajv@6.14.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw=="],
"dockerfile-ast/vscode-languageserver-types": ["vscode-languageserver-types@3.17.5", "", {}, "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="],
@@ -6380,8 +6374,6 @@
"electron-publish/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="],
- "electron-updater/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
-
"electron-winstaller/fs-extra": ["fs-extra@7.0.1", "", { "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw=="],
"encoding/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="],
@@ -6434,8 +6426,6 @@
"fumadocs-mdx/esbuild": ["esbuild@0.27.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.4", "@esbuild/android-arm": "0.27.4", "@esbuild/android-arm64": "0.27.4", "@esbuild/android-x64": "0.27.4", "@esbuild/darwin-arm64": "0.27.4", "@esbuild/darwin-x64": "0.27.4", "@esbuild/freebsd-arm64": "0.27.4", "@esbuild/freebsd-x64": "0.27.4", "@esbuild/linux-arm": "0.27.4", "@esbuild/linux-arm64": "0.27.4", "@esbuild/linux-ia32": "0.27.4", "@esbuild/linux-loong64": "0.27.4", "@esbuild/linux-mips64el": "0.27.4", "@esbuild/linux-ppc64": "0.27.4", "@esbuild/linux-riscv64": "0.27.4", "@esbuild/linux-s390x": "0.27.4", "@esbuild/linux-x64": "0.27.4", "@esbuild/netbsd-arm64": "0.27.4", "@esbuild/netbsd-x64": "0.27.4", "@esbuild/openbsd-arm64": "0.27.4", "@esbuild/openbsd-x64": "0.27.4", "@esbuild/openharmony-arm64": "0.27.4", "@esbuild/sunos-x64": "0.27.4", "@esbuild/win32-arm64": "0.27.4", "@esbuild/win32-ia32": "0.27.4", "@esbuild/win32-x64": "0.27.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ=="],
- "fumadocs-mdx/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
-
"fumadocs-ui/lucide-react": ["lucide-react@0.562.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw=="],
"get-stream/is-stream": ["is-stream@4.0.1", "", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="],
@@ -6466,6 +6456,8 @@
"graphql-language-service-server/vscode-languageserver-types": ["vscode-languageserver-types@3.17.5", "", {}, "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="],
+ "gray-matter/js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="],
+
"hast-util-from-html/parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="],
"hast-util-raw/parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="],
@@ -6514,12 +6506,12 @@
"make-fetch-happen/proc-log": ["proc-log@5.0.0", "", {}, "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ=="],
- "markdown-it/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
-
"mastracode/@ai-sdk/openai": ["@ai-sdk/openai@3.0.48", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ALmj/53EXpcRqMbGpPJPP4UOSWw0q4VGpnDo7YctvsynjkrKDmoneDG/1a7VQnSPYHnJp6tTRMf5ZdxZ5whulg=="],
"mastracode/@ast-grep/napi": ["@ast-grep/napi@0.42.0", "", { "optionalDependencies": { "@ast-grep/napi-darwin-arm64": "0.42.0", "@ast-grep/napi-darwin-x64": "0.42.0", "@ast-grep/napi-linux-arm64-gnu": "0.42.0", "@ast-grep/napi-linux-arm64-musl": "0.42.0", "@ast-grep/napi-linux-x64-gnu": "0.42.0", "@ast-grep/napi-linux-x64-musl": "0.42.0", "@ast-grep/napi-win32-arm64-msvc": "0.42.0", "@ast-grep/napi-win32-ia32-msvc": "0.42.0", "@ast-grep/napi-win32-x64-msvc": "0.42.0" } }, "sha512-f3DAjeC657EqbWN2In+girgbpvnKMV77bONyhuezXK4XQtvbGCB55u3CnNvQv6EP0caIBTtDHqO5CVyO6qY4LQ=="],
+ "mastracode/js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="],
+
"matcher/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="],
"mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="],
@@ -6720,6 +6712,8 @@
"strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
+ "supertap/js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="],
+
"svelte/css-tree": ["css-tree@2.3.1", "", { "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" } }, "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw=="],
"svelte/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="],
@@ -6852,8 +6846,6 @@
"@ai-sdk/ui-utils-v5/@ai-sdk/provider-utils/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="],
- "@apidevtools/json-schema-ref-parser/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
-
"@babel/helper-compilation-targets/lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="],
"@develar/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="],
@@ -6974,8 +6966,6 @@
"@expo/package-manager/ora/strip-ansi": ["strip-ansi@5.2.0", "", { "dependencies": { "ansi-regex": "^4.1.0" } }, "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA=="],
- "@expo/xcpretty/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
-
"@fastify/otel/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.212.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-TEEVrLbNROUkYY51sBJGk7lO/OLjuepch8+hmpM6ffMJQ2z/KVCjdHuCFX6fJj8OkJP2zckPjrJzQtXU3IAsFg=="],
"@fastify/otel/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@2.0.6", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-3vZV3jX0XRFW3EJDTwzWoZa+RH1b8eTTx6YOCjglrLyPuepwoBti1k3L2dKwdCUrnVEfc5CuRuGstaC/uQJJaw=="],
@@ -6988,6 +6978,8 @@
"@istanbuljs/load-nyc-config/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="],
+ "@istanbuljs/load-nyc-config/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="],
+
"@jest/transform/write-file-atomic/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="],
"@neondatabase/serverless/@types/node/undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="],
@@ -7176,8 +7168,6 @@
"app-builder-lib/@electron/get/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
- "app-builder-lib/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
-
"app-builder-lib/which/isexe": ["isexe@3.1.5", "", {}, "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w=="],
"archiver-utils/glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="],
@@ -7192,8 +7182,6 @@
"ava/pretty-ms/parse-ms": ["parse-ms@3.0.0", "", {}, "sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw=="],
- "builder-util/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
-
"cacache/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="],
"cacache/glob/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="],
@@ -7220,8 +7208,6 @@
"connect/finalhandler/statuses": ["statuses@1.5.0", "", {}, "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA=="],
- "cosmiconfig/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
-
"cytoscape-fcose/cose-base/layout-base": ["layout-base@2.0.1", "", {}, "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg=="],
"d3-sankey/d3-array/internmap": ["internmap@1.0.1", "", {}, "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="],
@@ -7232,16 +7218,12 @@
"dir-compare/minimatch/brace-expansion": ["brace-expansion@1.1.13", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w=="],
- "dmg-builder/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
-
"dmg-license/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="],
"duplexer2/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="],
"duplexer2/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="],
- "electron-updater/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
-
"electron-winstaller/fs-extra/jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="],
"electron-winstaller/fs-extra/universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="],
@@ -7336,8 +7318,6 @@
"fumadocs-mdx/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.4", "", { "os": "win32", "cpu": "x64" }, "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg=="],
- "fumadocs-mdx/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
-
"graphql-config/minimatch/brace-expansion": ["brace-expansion@1.1.13", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w=="],
"graphql-language-service-cli/yargs/cliui": ["cliui@7.0.4", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ=="],
@@ -7346,6 +7326,8 @@
"graphql-language-service-server/glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="],
+ "gray-matter/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="],
+
"hast-util-from-html/parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="],
"hast-util-raw/parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="],
@@ -7382,6 +7364,8 @@
"mastracode/@ast-grep/napi/@ast-grep/napi-win32-x64-msvc": ["@ast-grep/napi-win32-x64-msvc@0.42.0", "", { "os": "win32", "cpu": "x64" }, "sha512-/5PTpk7EFuqwdJyKleX2gPztL5j73Nq/cdkEJQq1Fbx+ze+UM75JniW3D7J7WZygN58+EN9DAxpc2QOlK32urQ=="],
+ "mastracode/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="],
+
"metro-file-map/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="],
"metro-symbolicate/metro-source-map/ob1": ["ob1@0.83.3", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA=="],
@@ -7444,6 +7428,8 @@
"string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
+ "supertap/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="],
+
"svelte/css-tree/mdn-data": ["mdn-data@2.0.30", "", {}, "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA=="],
"temp/rimraf/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="],