diff --git a/app/server/modules/agents/agents-manager.ts b/app/server/modules/agents/agents-manager.ts index 29b21b3e..653a0e35 100644 --- a/app/server/modules/agents/agents-manager.ts +++ b/app/server/modules/agents/agents-manager.ts @@ -5,8 +5,8 @@ import { parseAgentMessage, sendControllerMessage, type BackupCommandPayload, -} from "./agent-protocol"; -import { logger } from "~/server/utils/logger"; +} from "@zerobyte/contracts/agent-protocol"; +import { logger } from "@zerobyte/core/utils"; type AgentConnectionData = { id: string; @@ -42,14 +42,12 @@ const setServer = (server: AgentServer | null) => { }; export const spawnLocalAgent = () => { - const wsUrl = `ws://localhost:3001`; - - const agentEntryPoint = path.join(process.cwd(), "app", "server", "modules", "agents", "local-agent.ts"); + const agentEntryPoint = path.join(process.cwd(), "apps", "agent", "src", "index.ts"); const localAgent = spawn("bun", ["run", agentEntryPoint], { env: { - ...process.env, - ZEROBYTE_CONTROLLER_URL: wsUrl, + PATH: process.env.PATH, + ZEROBYTE_CONTROLLER_URL: "ws://localhost:3001", }, stdio: ["ignore", "pipe", "pipe"], }); diff --git a/apps/agent/.gitignore b/apps/agent/.gitignore new file mode 100644 index 00000000..a14702c4 --- /dev/null +++ b/apps/agent/.gitignore @@ -0,0 +1,34 @@ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/apps/agent/build.ts b/apps/agent/build.ts new file mode 100644 index 00000000..e69de29b diff --git a/apps/agent/package.json b/apps/agent/package.json new file mode 100644 index 00000000..a92c4c2f --- /dev/null +++ b/apps/agent/package.json @@ -0,0 +1,16 @@ +{ + "name": "agent", + "private": true, + "type": "module", + "module": "index.ts", + "dependencies": { + "@zerobyte/contracts": "workspace:*", + "@zerobyte/core": "workspace:*" + }, + "devDependencies": { + "@types/bun": "latest" + }, + "peerDependencies": { + "typescript": "^5" + } +} diff --git a/app/server/modules/agents/local-agent.ts b/apps/agent/src/index.ts similarity index 93% rename from app/server/modules/agents/local-agent.ts rename to apps/agent/src/index.ts index 2e33f5f6..a60173f1 100644 --- a/app/server/modules/agents/local-agent.ts +++ b/apps/agent/src/index.ts @@ -1,5 +1,5 @@ -import { logger } from "~/server/utils/logger"; -import { createAgentMessage, parseControllerMessage, sendAgentMessage } from "./agent-protocol"; +import { createAgentMessage, parseControllerMessage, sendAgentMessage } from "@zerobyte/contracts/agent-protocol"; +import { logger } from "@zerobyte/core/utils"; const controllerUrl = process.env.ZEROBYTE_CONTROLLER_URL; diff --git a/apps/agent/tsconfig.json b/apps/agent/tsconfig.json new file mode 100644 index 00000000..146fe4ed --- /dev/null +++ b/apps/agent/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + // Environment setup & latest features + "lib": ["ESNext"], + "target": "ESNext", + "module": "Preserve", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + } +} diff --git a/bun.lock b/bun.lock index 310fe209..a9f2df8f 100644 --- a/bun.lock +++ b/bun.lock @@ -34,6 +34,7 @@ "@tanstack/react-router": "^1.166.8", "@tanstack/react-router-ssr-query": "^1.166.7", "@tanstack/react-start": "^1.166.9", + "@zerobyte/contracts": "workspace:*", "@zerobyte/core": "workspace:*", "better-auth": "^1.5.5", "class-variance-authority": "^0.7.1", @@ -110,6 +111,31 @@ "wait-for-expect": "^4.0.0", }, }, + "apps/agent": { + "name": "agent", + "dependencies": { + "@zerobyte/contracts": "workspace:*", + "@zerobyte/core": "workspace:*", + }, + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "packages/contracts": { + "name": "@zerobyte/contracts", + "dependencies": { + "@zerobyte/core": "workspace:*", + }, + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, "packages/core": { "name": "@zerobyte/core", "devDependencies": { @@ -968,12 +994,16 @@ "@xmldom/xmldom": ["@xmldom/xmldom@0.8.11", "", {}, "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw=="], + "@zerobyte/contracts": ["@zerobyte/contracts@workspace:packages/contracts"], + "@zerobyte/core": ["@zerobyte/core@workspace:packages/core"], "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], + "agent": ["agent@workspace:apps/agent"], + "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], "ansi-colors": ["ansi-colors@4.1.3", "", {}, "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="], diff --git a/package.json b/package.json index 1b50840f..ae94ddaa 100644 --- a/package.json +++ b/package.json @@ -59,6 +59,7 @@ "@tanstack/react-router": "^1.166.8", "@tanstack/react-router-ssr-query": "^1.166.7", "@tanstack/react-start": "^1.166.9", + "@zerobyte/contracts": "workspace:*", "@zerobyte/core": "workspace:*", "better-auth": "^1.5.5", "class-variance-authority": "^0.7.1", diff --git a/packages/contracts/.gitignore b/packages/contracts/.gitignore new file mode 100644 index 00000000..a14702c4 --- /dev/null +++ b/packages/contracts/.gitignore @@ -0,0 +1,34 @@ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/packages/contracts/README.md b/packages/contracts/README.md new file mode 100644 index 00000000..108c34c6 --- /dev/null +++ b/packages/contracts/README.md @@ -0,0 +1,15 @@ +# contracts + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run index.ts +``` + +This project was created using `bun init` in bun v1.3.10. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime. diff --git a/packages/contracts/package.json b/packages/contracts/package.json new file mode 100644 index 00000000..ca203f5e --- /dev/null +++ b/packages/contracts/package.json @@ -0,0 +1,24 @@ +{ + "name": "@zerobyte/contracts", + "private": true, + "type": "module", + "exports": { + "./agent-protocol": { + "types": "./src/agent-protocol.ts", + "import": "./src/agent-protocol.ts", + "default": "./src/agent-protocol.ts" + } + }, + "scripts": { + "tsc": "tsc --noEmit" + }, + "dependencies": { + "@zerobyte/core": "workspace:*" + }, + "devDependencies": { + "@types/bun": "latest" + }, + "peerDependencies": { + "typescript": "^5" + } +} diff --git a/app/server/modules/agents/agent-protocol.ts b/packages/contracts/src/agent-protocol.ts similarity index 97% rename from app/server/modules/agents/agent-protocol.ts rename to packages/contracts/src/agent-protocol.ts index ab2e5f40..ec01483a 100644 --- a/app/server/modules/agents/agent-protocol.ts +++ b/packages/contracts/src/agent-protocol.ts @@ -1,5 +1,5 @@ import { z } from "zod"; -import { safeJsonParse } from "~/server/utils/json"; +import { safeJsonParse } from "@zerobyte/core/utils"; const backupCommandSchema = z .object({ diff --git a/packages/contracts/tsconfig.json b/packages/contracts/tsconfig.json new file mode 100644 index 00000000..146fe4ed --- /dev/null +++ b/packages/contracts/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + // Environment setup & latest features + "lib": ["ESNext"], + "target": "ESNext", + "module": "Preserve", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + } +}