diff --git a/.github/workflows/update-nix-hashes.yml b/.github/workflows/update-nix-hashes.yml index 38dba2e35..1f1ca0e80 100644 --- a/.github/workflows/update-nix-hashes.yml +++ b/.github/workflows/update-nix-hashes.yml @@ -18,6 +18,7 @@ on: jobs: update: + if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository runs-on: ubuntu-latest env: SYSTEM: x86_64-linux @@ -29,6 +30,7 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} fetch-depth: 0 ref: ${{ github.head_ref || github.ref_name }} + repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }} - name: Setup Nix uses: DeterminateSystems/nix-installer-action@v20 diff --git a/.husky/pre-push b/.husky/pre-push index b26017ee9..2fd039d56 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -1,2 +1,9 @@ #!/bin/sh +# Check if bun version matches package.json +EXPECTED_VERSION=$(grep '"packageManager"' package.json | sed 's/.*"bun@\([^"]*\)".*/\1/') +CURRENT_VERSION=$(bun --version) +if [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; then + echo "Error: Bun version $CURRENT_VERSION does not match expected version $EXPECTED_VERSION from package.json" + exit 1 +fi bun typecheck diff --git a/STATS.md b/STATS.md index b58a8f1c5..55a9ba565 100644 --- a/STATS.md +++ b/STATS.md @@ -152,3 +152,5 @@ | 2025-11-24 | 856,733 (+10,124) | 804,033 (+8,964) | 1,660,766 (+19,088) | | 2025-11-25 | 869,423 (+12,690) | 817,339 (+13,306) | 1,686,762 (+25,996) | | 2025-11-26 | 881,414 (+11,991) | 832,518 (+15,179) | 1,713,932 (+27,170) | +| 2025-11-27 | 893,960 (+12,546) | 846,180 (+13,662) | 1,740,140 (+26,208) | +| 2025-11-28 | 901,741 (+7,781) | 856,482 (+10,302) | 1,758,223 (+18,083) | diff --git a/bun.lock b/bun.lock index 9ea4c7de3..ba18de13b 100644 --- a/bun.lock +++ b/bun.lock @@ -217,7 +217,7 @@ "@actions/github": "6.0.1", "@agentclientprotocol/sdk": "0.5.1", "@ai-sdk/amazon-bedrock": "3.0.57", - "@ai-sdk/anthropic": "2.0.45", + "@ai-sdk/anthropic": "2.0.50", "@ai-sdk/azure": "2.0.73", "@ai-sdk/google": "2.0.42", "@ai-sdk/google-vertex": "3.0.74", @@ -4073,7 +4073,7 @@ "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], - "opencode/@ai-sdk/anthropic": ["@ai-sdk/anthropic@2.0.45", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.17" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-Ipv62vavDCmrV/oE/lXehL9FzwQuZOnnlhPEftWizx464Wb6lvnBTJx8uhmEYruFSzOWTI95Z33ncZ4tA8E6RQ=="], + "opencode/@ai-sdk/anthropic": ["@ai-sdk/anthropic@2.0.50", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.18" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-21PaHfoLmouOXXNINTsZJsMw+wE5oLR2He/1kq/sKokTVKyq7ObGT1LDk6ahwxaz/GoaNaGankMh+EgVcdv2Cw=="], "opencode/@ai-sdk/openai": ["@ai-sdk/openai@2.0.71", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.17" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-tg+gj+R0z/On9P4V7hy7/7o04cQPjKGayMCL3gzWD/aNGjAKkhEnaocuNDidSnghizt8g2zJn16cAuAolnW+qQ=="], @@ -4619,7 +4619,7 @@ "jsonwebtoken/jws/jwa": ["jwa@1.4.2", "", { "dependencies": { "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw=="], - "opencode/@ai-sdk/anthropic/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.17", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-TR3Gs4I3Tym4Ll+EPdzRdvo/rc8Js6c4nVhFLuvGLX/Y4V9ZcQMa/HTiYsHEgmYrf1zVi6Q145UEZUfleOwOjw=="], + "opencode/@ai-sdk/anthropic/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.18", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ypv1xXMsgGcNKUP+hglKqtdDuMg68nWHucPPAhIENrbFAI+xCHiqPVN8Zllxyv1TNZwGWUghPxJXU+Mqps0YRQ=="], "opencode/@ai-sdk/openai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.17", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-TR3Gs4I3Tym4Ll+EPdzRdvo/rc8Js6c4nVhFLuvGLX/Y4V9ZcQMa/HTiYsHEgmYrf1zVi6Q145UEZUfleOwOjw=="], diff --git a/flake.lock b/flake.lock index b0749bea4..b67bb39a7 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1764138170, - "narHash": "sha256-2bCmfCUZyi2yj9FFXYKwsDiaZmizN75cLhI/eWmf3tk=", + "lastModified": 1764230294, + "narHash": "sha256-Z63xl5Scj3Y/zRBPAWq1eT68n2wBWGCIEF4waZ0bQBE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "bb813de6d2241bcb1b5af2d3059f560c66329967", + "rev": "0d59e0290eefe0f12512043842d7096c4070f30e", "type": "github" }, "original": { diff --git a/nix/hashes.json b/nix/hashes.json index 1f11430f2..08fee7014 100644 --- a/nix/hashes.json +++ b/nix/hashes.json @@ -1,3 +1,3 @@ { - "nodeModules": "sha256-dTGBX5mde/hQP36MSFwq3G81OdwpcYRl8bcjLpesbPw=" + "nodeModules": "sha256-RHAcxfg1XmbGhft9kT+NA2JOan3yVKD76U1zV0cVIow=" } diff --git a/packages/console/app/src/routes/api/enterprise.ts b/packages/console/app/src/routes/api/enterprise.ts index e33737d57..6776a7b3c 100644 --- a/packages/console/app/src/routes/api/enterprise.ts +++ b/packages/console/app/src/routes/api/enterprise.ts @@ -36,6 +36,7 @@ ${body.email}`.trim() to: "contact@anoma.ly", subject: `Enterprise Inquiry from ${body.name}`, body: emailContent, + replyTo: body.email, }) return Response.json({ success: true, message: "Form submitted successfully" }, { status: 200 }) diff --git a/packages/console/core/src/aws.ts b/packages/console/core/src/aws.ts index e87ada6ef..a4c151086 100644 --- a/packages/console/core/src/aws.ts +++ b/packages/console/core/src/aws.ts @@ -22,6 +22,7 @@ export namespace AWS { to: z.string(), subject: z.string(), body: z.string(), + replyTo: z.string().optional(), }), async (input) => { const res = await createClient().fetch("https://email.us-east-1.amazonaws.com/v2/email/outbound-emails", { @@ -35,6 +36,7 @@ export namespace AWS { Destination: { ToAddresses: [input.to], }, + ...(input.replyTo && { ReplyToAddresses: [input.replyTo] }), Content: { Simple: { Subject: { diff --git a/packages/desktop/index.html b/packages/desktop/index.html index 57e10defa..6e67e6d47 100644 --- a/packages/desktop/index.html +++ b/packages/desktop/index.html @@ -9,7 +9,7 @@ - + diff --git a/packages/desktop/src/pages/session.tsx b/packages/desktop/src/pages/session.tsx index 60f9e9ef5..c990bf87f 100644 --- a/packages/desktop/src/pages/session.tsx +++ b/packages/desktop/src/pages/session.tsx @@ -333,14 +333,19 @@ export default function Page() { flex: layout.review.state() === "pane", }} > -
+
1}> <>
-
+
New session
@@ -390,12 +399,14 @@ export default function Page() {
-
- { - inputRef = el - }} - /> +
+
+ { + inputRef = el + }} + /> +
@@ -498,7 +509,7 @@ export default function Page() { -
+
{ inputRef = el diff --git a/packages/enterprise/src/entry-server.tsx b/packages/enterprise/src/entry-server.tsx index df095023a..85d69e2e0 100644 --- a/packages/enterprise/src/entry-server.tsx +++ b/packages/enterprise/src/entry-server.tsx @@ -9,6 +9,7 @@ export default createHandler(() => ( OpenCode + {assets} diff --git a/packages/enterprise/src/routes/share/[shareID].tsx b/packages/enterprise/src/routes/share/[shareID].tsx index 271fb290a..7c4af8ac2 100644 --- a/packages/enterprise/src/routes/share/[shareID].tsx +++ b/packages/enterprise/src/routes/share/[shareID].tsx @@ -171,7 +171,7 @@ export default function () { }) const title = () => ( -
+
@@ -215,7 +215,6 @@ export default function () { ) const wide = createMemo(() => diffs().length === 0) - const columnPadding = () => (wide() ? "px-6" : "px-21 @4xl:px-6") return (
@@ -243,44 +242,44 @@ export default function () {
-