authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-05-13 21:35:01+02:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-05-13 21:35:01+02:00
logf92e1e1b06ec5ba78ce66849cf288a3a45e54bb0
treed360353895b6da02c850b9a58b30c522c9b5ba9c
parent556c42452c5ac94ae8d8698d64fcd372c1680955
signature Signed by PGP key B5690EEEBB952194

Simplify workspace package builds and deps (#2676)


16 files changed, 106 insertions(+), 130 deletions(-)

apps/desktop/package.json+4-6
...@@ -16,6 +16,10 @@...@@ -16,6 +16,10 @@
16 },16 },
17 "dependencies": {17 "dependencies": {
18 "@effect/platform-node": "catalog:",18 "@effect/platform-node": "catalog:",
19 "@t3tools/contracts": "workspace:*",
20 "@t3tools/shared": "workspace:*",
21 "@t3tools/ssh": "workspace:*",
22 "@t3tools/tailscale": "workspace:*",
19 "effect": "catalog:",23 "effect": "catalog:",
20 "electron": "41.5.0",24 "electron": "41.5.0",
21 "electron-updater": "^6.6.2"25 "electron-updater": "^6.6.2"
...@@ -23,13 +27,7 @@...@@ -23,13 +27,7 @@
23 "devDependencies": {27 "devDependencies": {
24 "@effect/language-service": "catalog:",28 "@effect/language-service": "catalog:",
25 "@effect/vitest": "catalog:",29 "@effect/vitest": "catalog:",
26 "@t3tools/client-runtime": "workspace:*",
27 "@t3tools/contracts": "workspace:*",
28 "@t3tools/shared": "workspace:*",
29 "@t3tools/ssh": "workspace:*",
30 "@t3tools/tailscale": "workspace:*",
31 "@types/node": "catalog:",30 "@types/node": "catalog:",
32 "effect-acp": "workspace:*",
33 "tsdown": "catalog:",31 "tsdown": "catalog:",
34 "typescript": "catalog:",32 "typescript": "catalog:",
35 "vitest": "catalog:"33 "vitest": "catalog:"
apps/desktop/src/backend/DesktopServerExposure.ts+1-1
...@@ -3,7 +3,7 @@ import * as NodeOS from "node:os";...@@ -3,7 +3,7 @@ import * as NodeOS from "node:os";
3import {3import {
4 createAdvertisedEndpoint,4 createAdvertisedEndpoint,
5 type CreateAdvertisedEndpointInput,5 type CreateAdvertisedEndpointInput,
6} from "@t3tools/client-runtime";6} from "@t3tools/shared/advertisedEndpoint";
7import type {7import type {
8 AdvertisedEndpoint,8 AdvertisedEndpoint,
9 AdvertisedEndpointProvider,9 AdvertisedEndpointProvider,
apps/desktop/src/backend/tailscaleEndpointProvider.ts+1-1
...@@ -1,4 +1,4 @@...@@ -1,4 +1,4 @@
1import { createAdvertisedEndpoint } from "@t3tools/client-runtime";1import { createAdvertisedEndpoint } from "@t3tools/shared/advertisedEndpoint";
2import type { AdvertisedEndpoint, AdvertisedEndpointProvider } from "@t3tools/contracts";2import type { AdvertisedEndpoint, AdvertisedEndpointProvider } from "@t3tools/contracts";
3import {3import {
4 buildTailscaleHttpsBaseUrl,4 buildTailscaleHttpsBaseUrl,
apps/desktop/tsdown.config.ts+1-1
...@@ -12,7 +12,7 @@ export default defineConfig([...@@ -12,7 +12,7 @@ export default defineConfig([
12 ...shared,12 ...shared,
13 entry: ["src/main.ts"],13 entry: ["src/main.ts"],
14 clean: true,14 clean: true,
15 noExternal: (id) => id.startsWith("@t3tools/") || id.startsWith("effect-acp"),15 noExternal: (id) => id.startsWith("@t3tools/"),
16 },16 },
17 {17 {
18 ...shared,18 ...shared,
apps/server/package.json+2-2
...@@ -20,13 +20,13 @@...@@ -20,13 +20,13 @@
20 "build:bundle": "tsdown",20 "build:bundle": "tsdown",
21 "start": "node dist/bin.mjs",21 "start": "node dist/bin.mjs",
22 "typecheck": "tsc --noEmit",22 "typecheck": "tsc --noEmit",
23 "test": "vitest run",23 "test": "vitest run"
24 "test:process-reaper": "vitest run src/server.test.ts src/provider/Layers/ClaudeAdapter.test.ts src/provider/Layers/ProviderSessionDirectory.test.ts src/provider/Layers/ProviderSessionReaper.test.ts src/provider/Layers/CodexAdapter.test.ts"
25 },24 },
26 "dependencies": {25 "dependencies": {
27 "@anthropic-ai/claude-agent-sdk": "^0.2.111",26 "@anthropic-ai/claude-agent-sdk": "^0.2.111",
28 "@effect/platform-bun": "catalog:",27 "@effect/platform-bun": "catalog:",
29 "@effect/platform-node": "catalog:",28 "@effect/platform-node": "catalog:",
29 "@effect/platform-node-shared": "catalog:",
30 "@effect/sql-sqlite-bun": "catalog:",30 "@effect/sql-sqlite-bun": "catalog:",
31 "@opencode-ai/sdk": "^1.3.15",31 "@opencode-ai/sdk": "^1.3.15",
32 "@pierre/diffs": "catalog:",32 "@pierre/diffs": "catalog:",
apps/server/tsdown.config.ts+3-5
...@@ -1,15 +1,13 @@...@@ -1,15 +1,13 @@
1import { defineConfig } from "tsdown";1import { defineConfig } from "tsdown";
22
3const internalPackagePrefixes = ["@t3tools/", "effect-acp", "effect-codex-app-server"];
4
3export default defineConfig({5export default defineConfig({
4 entry: ["src/bin.ts"],6 entry: ["src/bin.ts"],
5 format: ["esm", "cjs"],
6 checks: {
7 legacyCjs: false,
8 },
9 outDir: "dist",7 outDir: "dist",
10 sourcemap: true,8 sourcemap: true,
11 clean: true,9 clean: true,
12 noExternal: (id) => id.startsWith("@t3tools/") || id.startsWith("effect-acp"),10 noExternal: (id) => internalPackagePrefixes.some((prefix) => id.startsWith(prefix)),
13 inlineOnly: false,11 inlineOnly: false,
14 banner: {12 banner: {
15 js: "#!/usr/bin/env node\n",13 js: "#!/usr/bin/env node\n",
bun.lock+5-13
...@@ -20,6 +20,10 @@...@@ -20,6 +20,10 @@
20 "version": "0.0.23",20 "version": "0.0.23",
21 "dependencies": {21 "dependencies": {
22 "@effect/platform-node": "catalog:",22 "@effect/platform-node": "catalog:",
23 "@t3tools/contracts": "workspace:*",
24 "@t3tools/shared": "workspace:*",
25 "@t3tools/ssh": "workspace:*",
26 "@t3tools/tailscale": "workspace:*",
23 "effect": "catalog:",27 "effect": "catalog:",
24 "electron": "41.5.0",28 "electron": "41.5.0",
25 "electron-updater": "^6.6.2",29 "electron-updater": "^6.6.2",
...@@ -27,13 +31,7 @@...@@ -27,13 +31,7 @@
27 "devDependencies": {31 "devDependencies": {
28 "@effect/language-service": "catalog:",32 "@effect/language-service": "catalog:",
29 "@effect/vitest": "catalog:",33 "@effect/vitest": "catalog:",
30 "@t3tools/client-runtime": "workspace:*",
31 "@t3tools/contracts": "workspace:*",
32 "@t3tools/shared": "workspace:*",
33 "@t3tools/ssh": "workspace:*",
34 "@t3tools/tailscale": "workspace:*",
35 "@types/node": "catalog:",34 "@types/node": "catalog:",
36 "effect-acp": "workspace:*",
37 "tsdown": "catalog:",35 "tsdown": "catalog:",
38 "typescript": "catalog:",36 "typescript": "catalog:",
39 "vitest": "catalog:",37 "vitest": "catalog:",
...@@ -60,6 +58,7 @@...@@ -60,6 +58,7 @@
60 "@anthropic-ai/claude-agent-sdk": "^0.2.111",58 "@anthropic-ai/claude-agent-sdk": "^0.2.111",
61 "@effect/platform-bun": "catalog:",59 "@effect/platform-bun": "catalog:",
62 "@effect/platform-node": "catalog:",60 "@effect/platform-node": "catalog:",
61 "@effect/platform-node-shared": "catalog:",
63 "@effect/sql-sqlite-bun": "catalog:",62 "@effect/sql-sqlite-bun": "catalog:",
64 "@opencode-ai/sdk": "^1.3.15",63 "@opencode-ai/sdk": "^1.3.15",
65 "@pierre/diffs": "catalog:",64 "@pierre/diffs": "catalog:",
...@@ -153,7 +152,6 @@...@@ -153,7 +152,6 @@
153 },152 },
154 "packages/client-runtime": {153 "packages/client-runtime": {
155 "name": "@t3tools/client-runtime",154 "name": "@t3tools/client-runtime",
156 "version": "0.0.0-alpha.1",
157 "dependencies": {155 "dependencies": {
158 "@t3tools/contracts": "workspace:*",156 "@t3tools/contracts": "workspace:*",
159 "effect": "catalog:",157 "effect": "catalog:",
...@@ -173,7 +171,6 @@...@@ -173,7 +171,6 @@
173 "devDependencies": {171 "devDependencies": {
174 "@effect/language-service": "catalog:",172 "@effect/language-service": "catalog:",
175 "@effect/vitest": "catalog:",173 "@effect/vitest": "catalog:",
176 "tsdown": "catalog:",
177 "typescript": "catalog:",174 "typescript": "catalog:",
178 "vitest": "catalog:",175 "vitest": "catalog:",
179 },176 },
...@@ -188,7 +185,6 @@...@@ -188,7 +185,6 @@
188 "@effect/openapi-generator": "catalog:",185 "@effect/openapi-generator": "catalog:",
189 "@effect/platform-node": "catalog:",186 "@effect/platform-node": "catalog:",
190 "@effect/vitest": "catalog:",187 "@effect/vitest": "catalog:",
191 "tsdown": "catalog:",
192 "typescript": "catalog:",188 "typescript": "catalog:",
193 "vitest": "catalog:",189 "vitest": "catalog:",
194 },190 },
...@@ -203,14 +199,12 @@...@@ -203,14 +199,12 @@
203 "@effect/openapi-generator": "catalog:",199 "@effect/openapi-generator": "catalog:",
204 "@effect/platform-node": "catalog:",200 "@effect/platform-node": "catalog:",
205 "@effect/vitest": "catalog:",201 "@effect/vitest": "catalog:",
206 "tsdown": "catalog:",
207 "typescript": "catalog:",202 "typescript": "catalog:",
208 "vitest": "catalog:",203 "vitest": "catalog:",
209 },204 },
210 },205 },
211 "packages/shared": {206 "packages/shared": {
212 "name": "@t3tools/shared",207 "name": "@t3tools/shared",
213 "version": "0.0.0-alpha.1",
214 "dependencies": {208 "dependencies": {
215 "@t3tools/contracts": "workspace:*",209 "@t3tools/contracts": "workspace:*",
216 "effect": "catalog:",210 "effect": "catalog:",
...@@ -226,7 +220,6 @@...@@ -226,7 +220,6 @@
226 },220 },
227 "packages/ssh": {221 "packages/ssh": {
228 "name": "@t3tools/ssh",222 "name": "@t3tools/ssh",
229 "version": "0.0.0-alpha.1",
230 "dependencies": {223 "dependencies": {
231 "@t3tools/contracts": "workspace:*",224 "@t3tools/contracts": "workspace:*",
232 "@t3tools/shared": "workspace:*",225 "@t3tools/shared": "workspace:*",
...@@ -243,7 +236,6 @@...@@ -243,7 +236,6 @@
243 },236 },
244 "packages/tailscale": {237 "packages/tailscale": {
245 "name": "@t3tools/tailscale",238 "name": "@t3tools/tailscale",
246 "version": "0.0.0-alpha.1",
247 "dependencies": {239 "dependencies": {
248 "@effect/platform-node": "catalog:",240 "@effect/platform-node": "catalog:",
249 "effect": "catalog:",241 "effect": "catalog:",
packages/client-runtime/package.json+1-1
...@@ -1,6 +1,5 @@...@@ -1,6 +1,5 @@
1{1{
2 "name": "@t3tools/client-runtime",2 "name": "@t3tools/client-runtime",
3 "version": "0.0.0-alpha.1",
4 "private": true,3 "private": true,
5 "type": "module",4 "type": "module",
6 "exports": {5 "exports": {
...@@ -15,6 +14,7 @@...@@ -15,6 +14,7 @@
15 },14 },
16 "dependencies": {15 "dependencies": {
17 "@t3tools/contracts": "workspace:*",16 "@t3tools/contracts": "workspace:*",
17 "@t3tools/shared": "workspace:*",
18 "effect": "catalog:"18 "effect": "catalog:"
19 },19 },
20 "devDependencies": {20 "devDependencies": {
packages/client-runtime/src/advertisedEndpoint.ts+1-78
...@@ -1,78 +1 @@...@@ -1,78 +1 @@
1import type {1export * from "@t3tools/shared/advertisedEndpoint";
2 AdvertisedEndpoint,
3 AdvertisedEndpointHostedHttpsCompatibility,
4 AdvertisedEndpointProvider,
5 AdvertisedEndpointReachability,
6 AdvertisedEndpointSource,
7 AdvertisedEndpointStatus,
8} from "@t3tools/contracts";
9
10export interface CreateAdvertisedEndpointInput {
11 readonly id: string;
12 readonly label: string;
13 readonly provider: AdvertisedEndpointProvider;
14 readonly httpBaseUrl: string;
15 readonly reachability: AdvertisedEndpointReachability;
16 readonly hostedHttpsCompatibility?: AdvertisedEndpointHostedHttpsCompatibility;
17 readonly desktopCompatibility?: "compatible" | "unknown";
18 readonly source: AdvertisedEndpointSource;
19 readonly status?: AdvertisedEndpointStatus;
20 readonly isDefault?: boolean;
21 readonly description?: string;
22}
23
24export function normalizeHttpBaseUrl(rawValue: string): string {
25 const url = new URL(rawValue);
26 if (url.protocol === "ws:") {
27 url.protocol = "http:";
28 } else if (url.protocol === "wss:") {
29 url.protocol = "https:";
30 }
31
32 if (url.protocol !== "http:" && url.protocol !== "https:") {
33 throw new Error(`Endpoint must use HTTP or HTTPS. Received ${url.protocol}`);
34 }
35
36 url.pathname = "/";
37 url.search = "";
38 url.hash = "";
39 return url.toString();
40}
41
42export function deriveWsBaseUrl(httpBaseUrl: string): string {
43 const url = new URL(normalizeHttpBaseUrl(httpBaseUrl));
44 url.protocol = url.protocol === "https:" ? "wss:" : "ws:";
45 return url.toString();
46}
47
48export function classifyHostedHttpsCompatibility(
49 httpBaseUrl: string,
50 fallback: AdvertisedEndpointHostedHttpsCompatibility = "unknown",
51): AdvertisedEndpointHostedHttpsCompatibility {
52 const url = new URL(normalizeHttpBaseUrl(httpBaseUrl));
53 if (url.protocol === "http:") {
54 return "mixed-content-blocked";
55 }
56 return fallback === "mixed-content-blocked" ? "unknown" : fallback;
57}
58
59export function createAdvertisedEndpoint(input: CreateAdvertisedEndpointInput): AdvertisedEndpoint {
60 const httpBaseUrl = normalizeHttpBaseUrl(input.httpBaseUrl);
61 return {
62 id: input.id,
63 label: input.label,
64 provider: input.provider,
65 httpBaseUrl,
66 wsBaseUrl: deriveWsBaseUrl(httpBaseUrl),
67 reachability: input.reachability,
68 compatibility: {
69 hostedHttpsApp:
70 input.hostedHttpsCompatibility ?? classifyHostedHttpsCompatibility(httpBaseUrl),
71 desktopApp: input.desktopCompatibility ?? "compatible",
72 },
73 source: input.source,
74 status: input.status ?? "available",
75 ...(input.isDefault === undefined ? {} : { isDefault: input.isDefault }),
76 ...(input.description === undefined ? {} : { description: input.description }),
77 };
78}
packages/contracts/package.json+5-13
...@@ -6,24 +6,17 @@...@@ -6,24 +6,17 @@
6 "dist"6 "dist"
7 ],7 ],
8 "type": "module",8 "type": "module",
9 "main": "./dist/index.cjs",
10 "module": "./dist/index.mjs",
11 "types": "./src/index.ts",
12 "exports": {9 "exports": {
13 "./settings": {
14 "types": "./src/settings.ts",
15 "import": "./src/settings.ts",
16 "require": "./src/settings.ts"
17 },
18 ".": {10 ".": {
19 "types": "./src/index.ts",11 "types": "./src/index.ts",
20 "import": "./src/index.ts",12 "import": "./src/index.ts"
21 "require": "./dist/index.cjs"13 },
14 "./settings": {
15 "types": "./src/settings.ts",
16 "import": "./src/settings.ts"
22 }17 }
23 },18 },
24 "scripts": {19 "scripts": {
25 "dev": "tsdown src/index.ts --format esm,cjs --dts --watch --clean",
26 "build": "tsdown src/index.ts --format esm,cjs --dts --clean",
27 "typecheck": "tsc --noEmit",20 "typecheck": "tsc --noEmit",
28 "test": "vitest run"21 "test": "vitest run"
29 },22 },
...@@ -33,7 +26,6 @@...@@ -33,7 +26,6 @@
33 "devDependencies": {26 "devDependencies": {
34 "@effect/language-service": "catalog:",27 "@effect/language-service": "catalog:",
35 "@effect/vitest": "catalog:",28 "@effect/vitest": "catalog:",
36 "tsdown": "catalog:",
37 "typescript": "catalog:",29 "typescript": "catalog:",
38 "vitest": "catalog:"30 "vitest": "catalog:"
39 }31 }
packages/effect-acp/package.json-3
...@@ -33,8 +33,6 @@...@@ -33,8 +33,6 @@
33 }33 }
34 },34 },
35 "scripts": {35 "scripts": {
36 "dev": "tsdown src/client.ts src/agent.ts src/_generated/schema.gen.ts src/rpc.ts src/protocol.ts src/terminal.ts --format esm,cjs --dts --watch --clean",
37 "build": "tsdown src/client.ts src/agent.ts src/_generated/schema.gen.ts src/rpc.ts src/protocol.ts src/terminal.ts --format esm,cjs --dts --clean",
38 "typecheck": "tsc --noEmit",36 "typecheck": "tsc --noEmit",
39 "test": "vitest run",37 "test": "vitest run",
40 "generate": "bun run scripts/generate.ts"38 "generate": "bun run scripts/generate.ts"
...@@ -47,7 +45,6 @@...@@ -47,7 +45,6 @@
47 "@effect/openapi-generator": "catalog:",45 "@effect/openapi-generator": "catalog:",
48 "@effect/platform-node": "catalog:",46 "@effect/platform-node": "catalog:",
49 "@effect/vitest": "catalog:",47 "@effect/vitest": "catalog:",
50 "tsdown": "catalog:",
51 "typescript": "catalog:",48 "typescript": "catalog:",
52 "vitest": "catalog:"49 "vitest": "catalog:"
53 }50 }
packages/effect-codex-app-server/package.json-3
...@@ -25,8 +25,6 @@...@@ -25,8 +25,6 @@
25 }25 }
26 },26 },
27 "scripts": {27 "scripts": {
28 "dev": "tsdown src/client.ts src/rpc.ts src/protocol.ts src/schema.ts --format esm,cjs --dts --watch --clean",
29 "build": "tsdown src/client.ts src/rpc.ts src/protocol.ts src/schema.ts --format esm,cjs --dts --clean",
30 "typecheck": "tsc --noEmit",28 "typecheck": "tsc --noEmit",
31 "test": "vitest run",29 "test": "vitest run",
32 "generate": "bun run scripts/generate.ts",30 "generate": "bun run scripts/generate.ts",
...@@ -40,7 +38,6 @@...@@ -40,7 +38,6 @@
40 "@effect/openapi-generator": "catalog:",38 "@effect/openapi-generator": "catalog:",
41 "@effect/platform-node": "catalog:",39 "@effect/platform-node": "catalog:",
42 "@effect/vitest": "catalog:",40 "@effect/vitest": "catalog:",
43 "tsdown": "catalog:",
44 "typescript": "catalog:",41 "typescript": "catalog:",
45 "vitest": "catalog:"42 "vitest": "catalog:"
46 }43 }
packages/shared/package.json+4-1
...@@ -1,6 +1,5 @@...@@ -1,6 +1,5 @@
1{1{
2 "name": "@t3tools/shared",2 "name": "@t3tools/shared",
3 "version": "0.0.0-alpha.1",
4 "private": true,3 "private": true,
5 "type": "module",4 "type": "module",
6 "exports": {5 "exports": {
...@@ -8,6 +7,10 @@...@@ -8,6 +7,10 @@
8 "types": "./src/model.ts",7 "types": "./src/model.ts",
9 "import": "./src/model.ts"8 "import": "./src/model.ts"
10 },9 },
10 "./advertisedEndpoint": {
11 "types": "./src/advertisedEndpoint.ts",
12 "import": "./src/advertisedEndpoint.ts"
13 },
11 "./git": {14 "./git": {
12 "types": "./src/git.ts",15 "types": "./src/git.ts",
13 "import": "./src/git.ts"16 "import": "./src/git.ts"
packages/shared/src/advertisedEndpoint.ts created+78
...@@ -0,0 +1,78 @@
1import type {
2 AdvertisedEndpoint,
3 AdvertisedEndpointHostedHttpsCompatibility,
4 AdvertisedEndpointProvider,
5 AdvertisedEndpointReachability,
6 AdvertisedEndpointSource,
7 AdvertisedEndpointStatus,
8} from "@t3tools/contracts";
9
10export interface CreateAdvertisedEndpointInput {
11 readonly id: string;
12 readonly label: string;
13 readonly provider: AdvertisedEndpointProvider;
14 readonly httpBaseUrl: string;
15 readonly reachability: AdvertisedEndpointReachability;
16 readonly hostedHttpsCompatibility?: AdvertisedEndpointHostedHttpsCompatibility;
17 readonly desktopCompatibility?: "compatible" | "unknown";
18 readonly source: AdvertisedEndpointSource;
19 readonly status?: AdvertisedEndpointStatus;
20 readonly isDefault?: boolean;
21 readonly description?: string;
22}
23
24export function normalizeHttpBaseUrl(rawValue: string): string {
25 const url = new URL(rawValue);
26 if (url.protocol === "ws:") {
27 url.protocol = "http:";
28 } else if (url.protocol === "wss:") {
29 url.protocol = "https:";
30 }
31
32 if (url.protocol !== "http:" && url.protocol !== "https:") {
33 throw new Error(`Endpoint must use HTTP or HTTPS. Received ${url.protocol}`);
34 }
35
36 url.pathname = "/";
37 url.search = "";
38 url.hash = "";
39 return url.toString();
40}
41
42export function deriveWsBaseUrl(httpBaseUrl: string): string {
43 const url = new URL(normalizeHttpBaseUrl(httpBaseUrl));
44 url.protocol = url.protocol === "https:" ? "wss:" : "ws:";
45 return url.toString();
46}
47
48export function classifyHostedHttpsCompatibility(
49 httpBaseUrl: string,
50 fallback: AdvertisedEndpointHostedHttpsCompatibility = "unknown",
51): AdvertisedEndpointHostedHttpsCompatibility {
52 const url = new URL(normalizeHttpBaseUrl(httpBaseUrl));
53 if (url.protocol === "http:") {
54 return "mixed-content-blocked";
55 }
56 return fallback === "mixed-content-blocked" ? "unknown" : fallback;
57}
58
59export function createAdvertisedEndpoint(input: CreateAdvertisedEndpointInput): AdvertisedEndpoint {
60 const httpBaseUrl = normalizeHttpBaseUrl(input.httpBaseUrl);
61 return {
62 id: input.id,
63 label: input.label,
64 provider: input.provider,
65 httpBaseUrl,
66 wsBaseUrl: deriveWsBaseUrl(httpBaseUrl),
67 reachability: input.reachability,
68 compatibility: {
69 hostedHttpsApp:
70 input.hostedHttpsCompatibility ?? classifyHostedHttpsCompatibility(httpBaseUrl),
71 desktopApp: input.desktopCompatibility ?? "compatible",
72 },
73 source: input.source,
74 status: input.status ?? "available",
75 ...(input.isDefault === undefined ? {} : { isDefault: input.isDefault }),
76 ...(input.description === undefined ? {} : { description: input.description }),
77 };
78}
packages/ssh/package.json-1
...@@ -1,6 +1,5 @@...@@ -1,6 +1,5 @@
1{1{
2 "name": "@t3tools/ssh",2 "name": "@t3tools/ssh",
3 "version": "0.0.0-alpha.1",
4 "private": true,3 "private": true,
5 "type": "module",4 "type": "module",
6 "exports": {5 "exports": {
packages/tailscale/package.json-1
...@@ -1,6 +1,5 @@...@@ -1,6 +1,5 @@
1{1{
2 "name": "@t3tools/tailscale",2 "name": "@t3tools/tailscale",
3 "version": "0.0.0-alpha.1",
4 "private": true,3 "private": true,
5 "type": "module",4 "type": "module",
6 "exports": {5 "exports": {