mirror of
https://github.com/eliasstepanik/core.git
synced 2026-01-20 09:18:33 +00:00
Fix: clustering UI
This commit is contained in:
parent
7a890d4e13
commit
c9fbb0375b
@ -62,7 +62,6 @@
|
|||||||
"clean": "rimraf dist .tshy .tshy-build .turbo",
|
"clean": "rimraf dist .tshy .tshy-build .turbo",
|
||||||
"typecheck": "tsc -p tsconfig.src.json --noEmit",
|
"typecheck": "tsc -p tsconfig.src.json --noEmit",
|
||||||
"build": "tshy",
|
"build": "tshy",
|
||||||
"dev": "tshy --watch",
|
|
||||||
"test": "vitest",
|
"test": "vitest",
|
||||||
"test:e2e": "vitest --run -c ./e2e/vitest.config.ts"
|
"test:e2e": "vitest --run -c ./e2e/vitest.config.ts"
|
||||||
},
|
},
|
||||||
|
|||||||
@ -9,6 +9,7 @@ const EnvironmentSchema = z.object({
|
|||||||
z.literal("production"),
|
z.literal("production"),
|
||||||
z.literal("test"),
|
z.literal("test"),
|
||||||
]),
|
]),
|
||||||
|
POSTGRES_DB: z.string(),
|
||||||
DATABASE_URL: z
|
DATABASE_URL: z
|
||||||
.string()
|
.string()
|
||||||
.refine(
|
.refine(
|
||||||
|
|||||||
@ -1,17 +1,22 @@
|
|||||||
import { json, type ActionFunctionArgs, type LoaderFunctionArgs } from "@remix-run/node";
|
import { json } from "@remix-run/node";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { logger } from "~/services/logger.service";
|
import { logger } from "~/services/logger.service";
|
||||||
import { createActionApiRoute } from "~/services/routeBuilders/apiBuilder.server";
|
import {
|
||||||
|
createActionApiRoute,
|
||||||
|
createLoaderApiRoute,
|
||||||
|
} from "~/services/routeBuilders/apiBuilder.server";
|
||||||
import { ClusteringService } from "~/services/clustering.server";
|
import { ClusteringService } from "~/services/clustering.server";
|
||||||
|
|
||||||
const clusteringService = new ClusteringService();
|
const clusteringService = new ClusteringService();
|
||||||
|
|
||||||
|
const { action } = createActionApiRoute(
|
||||||
const { action, loader } = createActionApiRoute(
|
|
||||||
{
|
{
|
||||||
body: z.object({
|
body: z.object({
|
||||||
mode: z.enum(['auto', 'incremental', 'complete']).optional().default('auto'),
|
mode: z
|
||||||
forceComplete: z.boolean().optional().default(false)
|
.enum(["auto", "incremental", "complete"])
|
||||||
|
.optional()
|
||||||
|
.default("auto"),
|
||||||
|
forceComplete: z.boolean().optional().default(false),
|
||||||
}),
|
}),
|
||||||
allowJWT: true,
|
allowJWT: true,
|
||||||
authorization: {
|
authorization: {
|
||||||
@ -20,52 +25,73 @@ const { action, loader } = createActionApiRoute(
|
|||||||
corsStrategy: "all",
|
corsStrategy: "all",
|
||||||
},
|
},
|
||||||
async ({ body, authentication, request }) => {
|
async ({ body, authentication, request }) => {
|
||||||
|
console.log(request.method, "asd");
|
||||||
try {
|
try {
|
||||||
|
|
||||||
if (request.method === "POST") {
|
if (request.method === "POST") {
|
||||||
let result;
|
let result;
|
||||||
switch (body.mode) {
|
switch (body.mode) {
|
||||||
case 'incremental':
|
case "incremental":
|
||||||
result = await clusteringService.performIncrementalClustering(authentication.userId);
|
result = await clusteringService.performIncrementalClustering(
|
||||||
|
authentication.userId,
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case 'complete':
|
case "complete":
|
||||||
result = await clusteringService.performCompleteClustering(authentication.userId);
|
result = await clusteringService.performCompleteClustering(
|
||||||
|
authentication.userId,
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case 'auto':
|
case "auto":
|
||||||
default:
|
default:
|
||||||
result = await clusteringService.performClustering(authentication.userId, body.forceComplete);
|
result = await clusteringService.performClustering(
|
||||||
|
authentication.userId,
|
||||||
|
body.forceComplete,
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return json({
|
return json({
|
||||||
success: true,
|
success: true,
|
||||||
data: result
|
data: result,
|
||||||
});
|
});
|
||||||
} else if (request.method === "GET") {
|
} else if (request.method === "GET") {
|
||||||
const clusters = await clusteringService.getClusters(authentication.userId);
|
const clusters = await clusteringService.getClusters(
|
||||||
|
authentication.userId,
|
||||||
|
);
|
||||||
return json({
|
return json({
|
||||||
success: true,
|
success: true,
|
||||||
data: clusters
|
data: clusters,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return json(
|
return json(
|
||||||
{ success: false, error: "Method not allowed" },
|
{ success: false, error: "Method not allowed" },
|
||||||
{ status: 405 }
|
{ status: 405 },
|
||||||
);
|
);
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error("Error in clustering action:", { error });
|
logger.error("Error in clustering action:", { error });
|
||||||
return json(
|
return json(
|
||||||
{
|
{
|
||||||
success: false,
|
success: false,
|
||||||
error: error instanceof Error ? error.message : "Unknown error"
|
error: error instanceof Error ? error.message : "Unknown error",
|
||||||
},
|
},
|
||||||
{ status: 500 }
|
{ status: 500 },
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
export { action, loader };
|
const loader = createLoaderApiRoute(
|
||||||
|
{
|
||||||
|
allowJWT: true,
|
||||||
|
findResource: async () => 1,
|
||||||
|
},
|
||||||
|
async ({ authentication }) => {
|
||||||
|
const clusters = await clusteringService.getClusters(authentication.userId);
|
||||||
|
return json({
|
||||||
|
success: true,
|
||||||
|
data: clusters,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
export { action, loader };
|
||||||
|
|||||||
@ -18,36 +18,31 @@ export default function Dashboard() {
|
|||||||
|
|
||||||
// State for nodeLinks and loading
|
// State for nodeLinks and loading
|
||||||
const [nodeLinks, setNodeLinks] = useState<any[] | null>(null);
|
const [nodeLinks, setNodeLinks] = useState<any[] | null>(null);
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
let cancelled = false;
|
if (!loading && userId) {
|
||||||
async function fetchNodeLinks() {
|
fetchNodeLinks();
|
||||||
setLoading(true);
|
|
||||||
try {
|
|
||||||
const res = await fetch(
|
|
||||||
"/node-links?userId=" +
|
|
||||||
encodeURIComponent("cmc0x85jv0000nu1wiu1yla73"),
|
|
||||||
);
|
|
||||||
if (!res.ok) throw new Error("Failed to fetch node links");
|
|
||||||
const data = await res.json();
|
|
||||||
if (!cancelled) {
|
|
||||||
setNodeLinks(data);
|
|
||||||
setLoading(false);
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
if (!cancelled) {
|
|
||||||
setNodeLinks([]);
|
|
||||||
setLoading(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
fetchNodeLinks();
|
|
||||||
return () => {
|
|
||||||
cancelled = true;
|
|
||||||
};
|
|
||||||
}, [userId]);
|
}, [userId]);
|
||||||
|
|
||||||
|
const fetchNodeLinks = async () => {
|
||||||
|
setLoading(true);
|
||||||
|
try {
|
||||||
|
const res = await fetch(
|
||||||
|
"/node-links?userId=" + encodeURIComponent(userId),
|
||||||
|
);
|
||||||
|
if (!res.ok) throw new Error("Failed to fetch node links");
|
||||||
|
const data = await res.json();
|
||||||
|
|
||||||
|
setNodeLinks(data);
|
||||||
|
setLoading(false);
|
||||||
|
} catch (e) {
|
||||||
|
setNodeLinks([]);
|
||||||
|
setLoading(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<PageHeader title="Memory graph" />
|
<PageHeader title="Memory graph" />
|
||||||
|
|||||||
@ -25,6 +25,7 @@ import { requireUserId } from "~/services/session.server";
|
|||||||
import { updateUser } from "~/models/user.server";
|
import { updateUser } from "~/models/user.server";
|
||||||
import { Copy, Check } from "lucide-react";
|
import { Copy, Check } from "lucide-react";
|
||||||
import { addToQueue } from "~/lib/ingest.server";
|
import { addToQueue } from "~/lib/ingest.server";
|
||||||
|
import { cn } from "~/lib/utils";
|
||||||
|
|
||||||
const ONBOARDING_STEP_COOKIE = "onboardingStep";
|
const ONBOARDING_STEP_COOKIE = "onboardingStep";
|
||||||
const onboardingStepCookie = createCookie(ONBOARDING_STEP_COOKIE, {
|
const onboardingStepCookie = createCookie(ONBOARDING_STEP_COOKIE, {
|
||||||
@ -108,6 +109,9 @@ export default function Onboarding() {
|
|||||||
|
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const [copied, setCopied] = useState(false);
|
const [copied, setCopied] = useState(false);
|
||||||
|
const [selectedSource, setSelectedSource] = useState<
|
||||||
|
"Claude" | "Cursor" | "Other"
|
||||||
|
>("Claude");
|
||||||
|
|
||||||
const [form, fields] = useForm({
|
const [form, fields] = useForm({
|
||||||
lastSubmission: lastSubmission as any,
|
lastSubmission: lastSubmission as any,
|
||||||
@ -117,7 +121,12 @@ export default function Onboarding() {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const memoryUrl = "https://core.heysol.ai/api/v1/mcp/memory";
|
const getMemoryUrl = (source: "Claude" | "Cursor" | "Other") => {
|
||||||
|
const baseUrl = "https://core.heysol.ai/api/v1/mcp/memory";
|
||||||
|
return `${baseUrl}?Source=${source}`;
|
||||||
|
};
|
||||||
|
|
||||||
|
const memoryUrl = getMemoryUrl(selectedSource);
|
||||||
|
|
||||||
const copyToClipboard = async () => {
|
const copyToClipboard = async () => {
|
||||||
try {
|
try {
|
||||||
@ -144,7 +153,25 @@ export default function Onboarding() {
|
|||||||
|
|
||||||
<CardContent className="pt-2 text-base">
|
<CardContent className="pt-2 text-base">
|
||||||
<div className="space-y-4">
|
<div className="space-y-4">
|
||||||
<div>
|
<div className="space-y-3">
|
||||||
|
<div className="bg-grayAlpha-100 flex space-x-1 rounded-lg p-1">
|
||||||
|
{(["Claude", "Cursor", "Other"] as const).map((source) => (
|
||||||
|
<Button
|
||||||
|
key={source}
|
||||||
|
onClick={() => setSelectedSource(source)}
|
||||||
|
variant="ghost"
|
||||||
|
className={cn(
|
||||||
|
"flex-1 rounded-md px-3 py-1.5 transition-all",
|
||||||
|
selectedSource === source
|
||||||
|
? "bg-accent text-accent-foreground shadow-sm"
|
||||||
|
: "text-muted-foreground hover:text-foreground",
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{source}
|
||||||
|
</Button>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
|
||||||
<div className="bg-background-3 flex items-center rounded">
|
<div className="bg-background-3 flex items-center rounded">
|
||||||
<Input
|
<Input
|
||||||
type="text"
|
type="text"
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
export type AuthorizationAction = "read" | "write" | string; // Add more actions as needed
|
export type AuthorizationAction = "read" | "write" | string; // Add more actions as needed
|
||||||
|
|
||||||
const ResourceTypes = ["spaces"] as const;
|
const ResourceTypes = ["clusters"] as const;
|
||||||
|
|
||||||
export type AuthorizationResources = {
|
export type AuthorizationResources = {
|
||||||
[key in (typeof ResourceTypes)[number]]?: string | string[];
|
[key in (typeof ResourceTypes)[number]]?: string | string[];
|
||||||
|
|||||||
@ -108,7 +108,7 @@ const Keys = [
|
|||||||
export async function addEnvVariablesInTrigger() {
|
export async function addEnvVariablesInTrigger() {
|
||||||
const {
|
const {
|
||||||
APP_ORIGIN,
|
APP_ORIGIN,
|
||||||
TRIGGER_DB,
|
POSTGRES_DB,
|
||||||
EMBEDDING_MODEL,
|
EMBEDDING_MODEL,
|
||||||
MODEL,
|
MODEL,
|
||||||
ENCRYPTION_KEY,
|
ENCRYPTION_KEY,
|
||||||
@ -121,7 +121,7 @@ export async function addEnvVariablesInTrigger() {
|
|||||||
TRIGGER_SECRET_KEY,
|
TRIGGER_SECRET_KEY,
|
||||||
} = env;
|
} = env;
|
||||||
|
|
||||||
const DATABASE_URL = getDatabaseUrl(TRIGGER_DB);
|
const DATABASE_URL = getDatabaseUrl(POSTGRES_DB);
|
||||||
|
|
||||||
// Helper to replace 'localhost' with 'host.docker.internal'
|
// Helper to replace 'localhost' with 'host.docker.internal'
|
||||||
function replaceLocalhost(val: string | undefined): string | undefined {
|
function replaceLocalhost(val: string | undefined): string | undefined {
|
||||||
|
|||||||
@ -76,8 +76,13 @@ services:
|
|||||||
image: neo4j:5
|
image: neo4j:5
|
||||||
environment:
|
environment:
|
||||||
- NEO4J_AUTH=${NEO4J_AUTH}
|
- NEO4J_AUTH=${NEO4J_AUTH}
|
||||||
- NEO4J_dbms_security_procedures_unrestricted=gds.*
|
- NEO4J_dbms_security_procedures_unrestricted=gds.*,apoc.*
|
||||||
- NEO4J_dbms_security_procedures_allowlist=gds.*
|
- NEO4J_dbms_security_procedures_allowlist=gds.*,apoc.*
|
||||||
|
- NEO4J_apoc_export_file_enabled=true # Enable file export
|
||||||
|
- NEO4J_apoc_import_file_enabled=true # Enable file import
|
||||||
|
- NEO4J_apoc_import_file_use_neo4j_config=true
|
||||||
|
- NEO4J_dbms_memory_heap_initial__size=2G
|
||||||
|
- NEO4J_dbms_memory_heap_max__size=4G
|
||||||
ports:
|
ports:
|
||||||
- "7474:7474"
|
- "7474:7474"
|
||||||
- "7687:7687"
|
- "7687:7687"
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "dotenv -- turbo run build",
|
"build": "dotenv -- turbo run build",
|
||||||
"dev": "dotenv -- turbo run dev --filter=!@redplanethq/core",
|
"dev": "dotenv -- turbo run dev",
|
||||||
"lint": "dotenv -- turbo run lint",
|
"lint": "dotenv -- turbo run lint",
|
||||||
"format": "dotenv -- prettier --write \"**/*.{ts,tsx,md}\"",
|
"format": "dotenv -- prettier --write \"**/*.{ts,tsx,md}\"",
|
||||||
"check-types": "dotenv -- turbo run check-types",
|
"check-types": "dotenv -- turbo run check-types",
|
||||||
|
|||||||
247
pnpm-lock.yaml
generated
247
pnpm-lock.yaml
generated
@ -747,253 +747,6 @@ importers:
|
|||||||
specifier: ^4.2.1
|
specifier: ^4.2.1
|
||||||
version: 4.3.2(typescript@5.8.3)(vite@6.3.5(@types/node@20.19.7)(jiti@2.4.2)(less@4.4.0)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.42.0)(tsx@4.17.0)(yaml@2.8.0))
|
version: 4.3.2(typescript@5.8.3)(vite@6.3.5(@types/node@20.19.7)(jiti@2.4.2)(less@4.4.0)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.42.0)(tsx@4.17.0)(yaml@2.8.0))
|
||||||
|
|
||||||
packages/core-cli:
|
|
||||||
dependencies:
|
|
||||||
'@clack/prompts':
|
|
||||||
specifier: ^0.10.0
|
|
||||||
version: 0.10.1
|
|
||||||
'@depot/cli':
|
|
||||||
specifier: 0.0.1-cli.2.80.0
|
|
||||||
version: 0.0.1-cli.2.80.0
|
|
||||||
'@opentelemetry/api':
|
|
||||||
specifier: 1.9.0
|
|
||||||
version: 1.9.0
|
|
||||||
'@opentelemetry/api-logs':
|
|
||||||
specifier: 0.52.1
|
|
||||||
version: 0.52.1
|
|
||||||
'@opentelemetry/exporter-logs-otlp-http':
|
|
||||||
specifier: 0.52.1
|
|
||||||
version: 0.52.1(@opentelemetry/api@1.9.0)
|
|
||||||
'@opentelemetry/exporter-trace-otlp-http':
|
|
||||||
specifier: 0.52.1
|
|
||||||
version: 0.52.1(@opentelemetry/api@1.9.0)
|
|
||||||
'@opentelemetry/instrumentation':
|
|
||||||
specifier: 0.52.1
|
|
||||||
version: 0.52.1(@opentelemetry/api@1.9.0)(supports-color@10.0.0)
|
|
||||||
'@opentelemetry/instrumentation-fetch':
|
|
||||||
specifier: 0.52.1
|
|
||||||
version: 0.52.1(@opentelemetry/api@1.9.0)(supports-color@10.0.0)
|
|
||||||
'@opentelemetry/resources':
|
|
||||||
specifier: 1.25.1
|
|
||||||
version: 1.25.1(@opentelemetry/api@1.9.0)
|
|
||||||
'@opentelemetry/sdk-logs':
|
|
||||||
specifier: 0.52.1
|
|
||||||
version: 0.52.1(@opentelemetry/api@1.9.0)
|
|
||||||
'@opentelemetry/sdk-node':
|
|
||||||
specifier: 0.52.1
|
|
||||||
version: 0.52.1(@opentelemetry/api@1.9.0)(supports-color@10.0.0)
|
|
||||||
'@opentelemetry/sdk-trace-base':
|
|
||||||
specifier: 1.25.1
|
|
||||||
version: 1.25.1(@opentelemetry/api@1.9.0)
|
|
||||||
'@opentelemetry/sdk-trace-node':
|
|
||||||
specifier: 1.25.1
|
|
||||||
version: 1.25.1(@opentelemetry/api@1.9.0)
|
|
||||||
'@opentelemetry/semantic-conventions':
|
|
||||||
specifier: 1.25.1
|
|
||||||
version: 1.25.1
|
|
||||||
ansi-escapes:
|
|
||||||
specifier: ^7.0.0
|
|
||||||
version: 7.0.0
|
|
||||||
braces:
|
|
||||||
specifier: ^3.0.3
|
|
||||||
version: 3.0.3
|
|
||||||
c12:
|
|
||||||
specifier: ^1.11.1
|
|
||||||
version: 1.11.2(magicast@0.3.5)
|
|
||||||
chalk:
|
|
||||||
specifier: ^5.2.0
|
|
||||||
version: 5.4.1
|
|
||||||
chokidar:
|
|
||||||
specifier: ^3.6.0
|
|
||||||
version: 3.6.0
|
|
||||||
cli-table3:
|
|
||||||
specifier: ^0.6.3
|
|
||||||
version: 0.6.5
|
|
||||||
commander:
|
|
||||||
specifier: ^9.4.1
|
|
||||||
version: 9.5.0
|
|
||||||
defu:
|
|
||||||
specifier: ^6.1.4
|
|
||||||
version: 6.1.4
|
|
||||||
dotenv:
|
|
||||||
specifier: ^16.4.5
|
|
||||||
version: 16.5.0
|
|
||||||
dotenv-expand:
|
|
||||||
specifier: ^12.0.2
|
|
||||||
version: 12.0.2
|
|
||||||
esbuild:
|
|
||||||
specifier: ^0.23.0
|
|
||||||
version: 0.23.1
|
|
||||||
eventsource:
|
|
||||||
specifier: ^3.0.2
|
|
||||||
version: 3.0.7
|
|
||||||
evt:
|
|
||||||
specifier: ^2.4.13
|
|
||||||
version: 2.5.9
|
|
||||||
fast-npm-meta:
|
|
||||||
specifier: ^0.2.2
|
|
||||||
version: 0.2.2
|
|
||||||
git-last-commit:
|
|
||||||
specifier: ^1.0.1
|
|
||||||
version: 1.0.1
|
|
||||||
gradient-string:
|
|
||||||
specifier: ^2.0.2
|
|
||||||
version: 2.0.2
|
|
||||||
has-flag:
|
|
||||||
specifier: ^5.0.1
|
|
||||||
version: 5.0.1
|
|
||||||
import-in-the-middle:
|
|
||||||
specifier: 1.11.0
|
|
||||||
version: 1.11.0
|
|
||||||
import-meta-resolve:
|
|
||||||
specifier: ^4.1.0
|
|
||||||
version: 4.1.0
|
|
||||||
ini:
|
|
||||||
specifier: ^5.0.0
|
|
||||||
version: 5.0.0
|
|
||||||
jsonc-parser:
|
|
||||||
specifier: 3.2.1
|
|
||||||
version: 3.2.1
|
|
||||||
knex:
|
|
||||||
specifier: 3.1.0
|
|
||||||
version: 3.1.0(pg@8.16.3)(supports-color@10.0.0)
|
|
||||||
magicast:
|
|
||||||
specifier: ^0.3.4
|
|
||||||
version: 0.3.5
|
|
||||||
minimatch:
|
|
||||||
specifier: ^10.0.1
|
|
||||||
version: 10.0.2
|
|
||||||
mlly:
|
|
||||||
specifier: ^1.7.1
|
|
||||||
version: 1.7.4
|
|
||||||
nanoid:
|
|
||||||
specifier: 3.3.8
|
|
||||||
version: 3.3.8
|
|
||||||
nypm:
|
|
||||||
specifier: ^0.5.4
|
|
||||||
version: 0.5.4
|
|
||||||
object-hash:
|
|
||||||
specifier: ^3.0.0
|
|
||||||
version: 3.0.0
|
|
||||||
open:
|
|
||||||
specifier: ^10.0.3
|
|
||||||
version: 10.2.0
|
|
||||||
p-limit:
|
|
||||||
specifier: ^6.2.0
|
|
||||||
version: 6.2.0
|
|
||||||
p-retry:
|
|
||||||
specifier: ^6.1.0
|
|
||||||
version: 6.2.1
|
|
||||||
partysocket:
|
|
||||||
specifier: ^1.0.2
|
|
||||||
version: 1.1.4
|
|
||||||
pg:
|
|
||||||
specifier: 8.16.3
|
|
||||||
version: 8.16.3
|
|
||||||
pkg-types:
|
|
||||||
specifier: ^1.1.3
|
|
||||||
version: 1.3.1
|
|
||||||
polka:
|
|
||||||
specifier: ^0.5.2
|
|
||||||
version: 0.5.2
|
|
||||||
resolve:
|
|
||||||
specifier: ^1.22.8
|
|
||||||
version: 1.22.10
|
|
||||||
semver:
|
|
||||||
specifier: ^7.5.0
|
|
||||||
version: 7.7.2
|
|
||||||
signal-exit:
|
|
||||||
specifier: ^4.1.0
|
|
||||||
version: 4.1.0
|
|
||||||
source-map-support:
|
|
||||||
specifier: 0.5.21
|
|
||||||
version: 0.5.21
|
|
||||||
std-env:
|
|
||||||
specifier: ^3.7.0
|
|
||||||
version: 3.9.0
|
|
||||||
supports-color:
|
|
||||||
specifier: ^10.0.0
|
|
||||||
version: 10.0.0
|
|
||||||
tiny-invariant:
|
|
||||||
specifier: ^1.2.0
|
|
||||||
version: 1.3.3
|
|
||||||
tinyexec:
|
|
||||||
specifier: ^0.3.1
|
|
||||||
version: 0.3.2
|
|
||||||
tinyglobby:
|
|
||||||
specifier: ^0.2.10
|
|
||||||
version: 0.2.14
|
|
||||||
uuid:
|
|
||||||
specifier: 11.1.0
|
|
||||||
version: 11.1.0
|
|
||||||
ws:
|
|
||||||
specifier: ^8.18.0
|
|
||||||
version: 8.18.3
|
|
||||||
xdg-app-paths:
|
|
||||||
specifier: ^8.3.0
|
|
||||||
version: 8.3.0
|
|
||||||
zod:
|
|
||||||
specifier: 3.23.8
|
|
||||||
version: 3.23.8
|
|
||||||
zod-validation-error:
|
|
||||||
specifier: ^1.5.0
|
|
||||||
version: 1.5.0(zod@3.23.8)
|
|
||||||
devDependencies:
|
|
||||||
'@epic-web/test-server':
|
|
||||||
specifier: ^0.1.0
|
|
||||||
version: 0.1.6
|
|
||||||
'@types/gradient-string':
|
|
||||||
specifier: ^1.1.2
|
|
||||||
version: 1.1.6
|
|
||||||
'@types/ini':
|
|
||||||
specifier: ^4.1.1
|
|
||||||
version: 4.1.1
|
|
||||||
'@types/object-hash':
|
|
||||||
specifier: 3.0.6
|
|
||||||
version: 3.0.6
|
|
||||||
'@types/polka':
|
|
||||||
specifier: ^0.5.7
|
|
||||||
version: 0.5.7
|
|
||||||
'@types/react':
|
|
||||||
specifier: ^18.2.48
|
|
||||||
version: 18.2.69
|
|
||||||
'@types/resolve':
|
|
||||||
specifier: ^1.20.6
|
|
||||||
version: 1.20.6
|
|
||||||
'@types/rimraf':
|
|
||||||
specifier: ^4.0.5
|
|
||||||
version: 4.0.5
|
|
||||||
'@types/semver':
|
|
||||||
specifier: ^7.5.0
|
|
||||||
version: 7.7.0
|
|
||||||
'@types/source-map-support':
|
|
||||||
specifier: 0.5.10
|
|
||||||
version: 0.5.10
|
|
||||||
'@types/ws':
|
|
||||||
specifier: ^8.5.3
|
|
||||||
version: 8.18.1
|
|
||||||
cpy-cli:
|
|
||||||
specifier: ^5.0.0
|
|
||||||
version: 5.0.0
|
|
||||||
execa:
|
|
||||||
specifier: ^8.0.1
|
|
||||||
version: 8.0.1
|
|
||||||
find-up:
|
|
||||||
specifier: ^7.0.0
|
|
||||||
version: 7.0.0
|
|
||||||
rimraf:
|
|
||||||
specifier: ^5.0.7
|
|
||||||
version: 5.0.10
|
|
||||||
ts-essentials:
|
|
||||||
specifier: 10.0.1
|
|
||||||
version: 10.0.1(typescript@5.8.3)
|
|
||||||
tshy:
|
|
||||||
specifier: ^3.0.2
|
|
||||||
version: 3.0.2
|
|
||||||
tsx:
|
|
||||||
specifier: 4.17.0
|
|
||||||
version: 4.17.0
|
|
||||||
|
|
||||||
packages/database:
|
packages/database:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@prisma/client':
|
'@prisma/client':
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user