From 89dbfdf9811e22f818666df8c05749e9440ae368 Mon Sep 17 00:00:00 2001 From: Ibrahim Isa Jajere Date: Sat, 18 Apr 2026 17:40:28 +0100 Subject: [PATCH 1/3] chore: bump version to v2.0.21 --- apps/admin/package.json | 2 +- apps/expo/app.config.ts | 2 +- apps/expo/package.json | 2 +- apps/guides/package.json | 2 +- apps/landing/package.json | 2 +- package.json | 2 +- packages/analytics/package.json | 2 +- packages/api-client/package.json | 2 +- packages/api/container_src/package.json | 2 +- packages/api/package.json | 2 +- packages/checks/package.json | 2 +- packages/cli/package.json | 2 +- packages/config/package.json | 2 +- packages/env/package.json | 2 +- packages/guards/package.json | 2 +- packages/mcp/package.json | 2 +- packages/ui/package.json | 2 +- packages/web-ui/package.json | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/apps/admin/package.json b/apps/admin/package.json index b5027ccc86..8f7ed7f45e 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -1,6 +1,6 @@ { "name": "packrat-admin-app", - "version": "2.0.20", + "version": "2.0.21", "private": true, "scripts": { "build": "next build", diff --git a/apps/expo/app.config.ts b/apps/expo/app.config.ts index 271ecde1a9..363d4a96c3 100644 --- a/apps/expo/app.config.ts +++ b/apps/expo/app.config.ts @@ -37,7 +37,7 @@ export default (): ExpoConfig => { name: getAppName(), slug: 'packrat', - version: '2.0.20', + version: '2.0.21', scheme: 'packrat', web: { bundler: 'metro', diff --git a/apps/expo/package.json b/apps/expo/package.json index 16fa7aa028..11cc2cab1d 100644 --- a/apps/expo/package.json +++ b/apps/expo/package.json @@ -1,6 +1,6 @@ { "name": "packrat-expo-app", - "version": "2.0.20", + "version": "2.0.21", "private": true, "main": "expo-router/entry", "scripts": { diff --git a/apps/guides/package.json b/apps/guides/package.json index 63bb46b162..4ec7437c17 100644 --- a/apps/guides/package.json +++ b/apps/guides/package.json @@ -1,6 +1,6 @@ { "name": "packrat-guides-app", - "version": "2.0.20", + "version": "2.0.21", "private": true, "scripts": { "build": "bun run build-content && next build", diff --git a/apps/landing/package.json b/apps/landing/package.json index 7cb918283d..a900a1a408 100644 --- a/apps/landing/package.json +++ b/apps/landing/package.json @@ -1,6 +1,6 @@ { "name": "packrat-landing-app", - "version": "2.0.20", + "version": "2.0.21", "private": true, "scripts": { "build": "next build", diff --git a/package.json b/package.json index 062845bcac..954cdcfa2e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "packrat-monorepo", - "version": "2.0.20", + "version": "2.0.21", "workspaces": [ "apps/*", "packages/*" diff --git a/packages/analytics/package.json b/packages/analytics/package.json index dbb0ef8599..7eba221f8d 100644 --- a/packages/analytics/package.json +++ b/packages/analytics/package.json @@ -1,6 +1,6 @@ { "name": "@packrat/analytics", - "version": "2.0.20", + "version": "2.0.21", "private": true, "type": "module", "scripts": { diff --git a/packages/api-client/package.json b/packages/api-client/package.json index 89f740740e..969a2fc260 100644 --- a/packages/api-client/package.json +++ b/packages/api-client/package.json @@ -1,6 +1,6 @@ { "name": "@packrat/api-client", - "version": "1.0.0", + "version": "2.0.21", "private": true, "description": "PackRat typed API client — authenticated HTTP client with error handling and MCP result helpers", "type": "module", diff --git a/packages/api/container_src/package.json b/packages/api/container_src/package.json index d337dba7a5..090389a273 100644 --- a/packages/api/container_src/package.json +++ b/packages/api/container_src/package.json @@ -1,6 +1,6 @@ { "name": "container", - "version": "2.0.20", + "version": "2.0.21", "type": "module", "dependencies": { "@aws-sdk/client-s3": "^3.0.0", diff --git a/packages/api/package.json b/packages/api/package.json index e051d92fb1..5388a3a58a 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,6 +1,6 @@ { "name": "@packrat/api", - "version": "2.0.20", + "version": "2.0.21", "scripts": { "check-types": "tsc --noEmit", "check-types-watch": "tsc --noEmit --watch", diff --git a/packages/checks/package.json b/packages/checks/package.json index f0d74b12fa..57b2918104 100644 --- a/packages/checks/package.json +++ b/packages/checks/package.json @@ -1,6 +1,6 @@ { "name": "@packrat/checks", - "version": "2.0.19", + "version": "2.0.21", "private": true, "type": "module", "scripts": { diff --git a/packages/cli/package.json b/packages/cli/package.json index 76bfbfd048..347cd1f174 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@packrat/cli", - "version": "2.0.20", + "version": "2.0.21", "private": true, "type": "module", "bin": { diff --git a/packages/config/package.json b/packages/config/package.json index 3b3a5fb663..28a2057d9f 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@packrat/config", - "version": "2.0.19", + "version": "2.0.21", "private": true, "type": "module", "exports": { diff --git a/packages/env/package.json b/packages/env/package.json index bb6c116588..9c4ea9dd53 100644 --- a/packages/env/package.json +++ b/packages/env/package.json @@ -1,6 +1,6 @@ { "name": "@packrat/env", - "version": "0.0.1", + "version": "2.0.21", "private": true, "type": "module", "exports": { diff --git a/packages/guards/package.json b/packages/guards/package.json index e941325b3c..9aaa40d389 100644 --- a/packages/guards/package.json +++ b/packages/guards/package.json @@ -1,6 +1,6 @@ { "name": "@packrat/guards", - "version": "2.0.20", + "version": "2.0.21", "private": true, "type": "module", "exports": { diff --git a/packages/mcp/package.json b/packages/mcp/package.json index 7ab1c0479c..0d1cf8fdd5 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -1,6 +1,6 @@ { "name": "@packrat/mcp", - "version": "2.0.20", + "version": "2.0.21", "private": true, "description": "PackRat MCP Server — outdoor adventure planning via Model Context Protocol", "scripts": { diff --git a/packages/ui/package.json b/packages/ui/package.json index 9ddf8fd3eb..e021478a15 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@packrat/ui", - "version": "2.0.20", + "version": "2.0.21", "private": true, "dependencies": { "@packrat-ai/nativewindui": "^2.0.2" diff --git a/packages/web-ui/package.json b/packages/web-ui/package.json index f6128b7a89..f68f04a6ca 100644 --- a/packages/web-ui/package.json +++ b/packages/web-ui/package.json @@ -1,6 +1,6 @@ { "name": "@packrat/web-ui", - "version": "2.0.20", + "version": "2.0.21", "private": true, "type": "module", "exports": { From 58b9a99c32f87ffc4ef610fa8bb13561a7963141 Mon Sep 17 00:00:00 2001 From: Ibrahim Isa Jajere Date: Sat, 18 Apr 2026 17:42:16 +0100 Subject: [PATCH 2/3] chore: update bun lock --- bun.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/bun.lock b/bun.lock index 9bf84c5c94..76fa357243 100644 --- a/bun.lock +++ b/bun.lock @@ -19,7 +19,7 @@ }, "apps/admin": { "name": "packrat-admin-app", - "version": "2.0.20", + "version": "2.0.21", "dependencies": { "@packrat/web-ui": "workspace:*", "@radix-ui/react-alert-dialog": "catalog:", @@ -58,7 +58,7 @@ }, "apps/expo": { "name": "packrat-expo-app", - "version": "2.0.20", + "version": "2.0.21", "dependencies": { "@ai-sdk/react": "^2.0.11", "@expo/react-native-action-sheet": "^4.1.1", @@ -181,7 +181,7 @@ }, "apps/guides": { "name": "packrat-guides-app", - "version": "2.0.20", + "version": "2.0.21", "dependencies": { "@ai-sdk/openai": "^2.0.11", "@hookform/resolvers": "^3.10.0", @@ -264,7 +264,7 @@ }, "apps/landing": { "name": "packrat-landing-app", - "version": "2.0.20", + "version": "2.0.21", "dependencies": { "@emotion/is-prop-valid": "^1.3.1", "@hookform/resolvers": "^3.10.0", @@ -329,7 +329,7 @@ }, "packages/analytics": { "name": "@packrat/analytics", - "version": "2.0.20", + "version": "2.0.21", "dependencies": { "@duckdb/node-api": "1.5.0-r.1", "@packrat/env": "workspace:*", @@ -345,7 +345,7 @@ }, "packages/api": { "name": "@packrat/api", - "version": "2.0.20", + "version": "2.0.21", "dependencies": { "@ai-sdk/google": "^2.0.62", "@ai-sdk/openai": "^2.0.11", @@ -399,18 +399,18 @@ }, "packages/api-client": { "name": "@packrat/api-client", - "version": "1.0.0", + "version": "2.0.21", "devDependencies": { "typescript": "catalog:", }, }, "packages/checks": { "name": "@packrat/checks", - "version": "2.0.19", + "version": "2.0.21", }, "packages/cli": { "name": "@packrat/cli", - "version": "2.0.20", + "version": "2.0.21", "bin": { "packrat": "./src/index.ts", }, @@ -430,25 +430,25 @@ }, "packages/config": { "name": "@packrat/config", - "version": "2.0.19", + "version": "2.0.21", }, "packages/env": { "name": "@packrat/env", - "version": "0.0.1", + "version": "2.0.21", "dependencies": { "zod": "catalog:", }, }, "packages/guards": { "name": "@packrat/guards", - "version": "2.0.20", + "version": "2.0.21", "dependencies": { "radash": "catalog:", }, }, "packages/mcp": { "name": "@packrat/mcp", - "version": "2.0.20", + "version": "2.0.21", "dependencies": { "@modelcontextprotocol/sdk": "^1.11.0", "@packrat/api-client": "workspace:*", @@ -466,14 +466,14 @@ }, "packages/ui": { "name": "@packrat/ui", - "version": "2.0.20", + "version": "2.0.21", "dependencies": { "@packrat-ai/nativewindui": "^2.0.2", }, }, "packages/web-ui": { "name": "@packrat/web-ui", - "version": "2.0.20", + "version": "2.0.21", "dependencies": { "@packrat/guards": "workspace:*", "@radix-ui/react-accordion": "catalog:", From d6d11657dc605499357114cc9b463abc432ff4fa Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 18 Apr 2026 17:01:26 +0000 Subject: [PATCH 3/3] fix: address all PR review comments Agent-Logs-Url: https://github.com/PackRat-AI/PackRat/sessions/c3f60a75-a528-428d-9667-a06baabb20d3 Co-authored-by: mikib0 <54102880+mikib0@users.noreply.github.com> --- .github/workflows/api-tests.yml | 2 ++ .github/workflows/copilot-setup-steps.yml | 2 +- apps/admin/package.json | 1 + packages/api/src/db/seed-e2e-user.ts | 7 ++++--- packages/api/src/routes/admin/analytics/index.ts | 7 +++++-- packages/cli/src/index.ts | 3 ++- packages/env/src/node.ts | 7 +++++++ packages/web-ui/package.json | 5 ----- 8 files changed, 22 insertions(+), 12 deletions(-) diff --git a/.github/workflows/api-tests.yml b/.github/workflows/api-tests.yml index ea4fe9deba..ad520e25c6 100644 --- a/.github/workflows/api-tests.yml +++ b/.github/workflows/api-tests.yml @@ -36,4 +36,6 @@ jobs: env: PACKRAT_NATIVEWIND_UI_GITHUB_TOKEN: ${{ secrets.PACKRAT_NATIVEWIND_UI_GITHUB_TOKEN }} run: bun install --frozen-lockfile + + - name: Run API tests run: bun run --cwd packages/api test diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index 1dec145d77..ef4ace135e 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -87,7 +87,7 @@ jobs: - name: Install dependencies env: PACKRAT_NATIVEWIND_UI_GITHUB_TOKEN: ${{ secrets.PACKRAT_NATIVEWIND_UI_GITHUB_TOKEN }} - run: bun install + run: bun install --frozen-lockfile # Confirm the key CLI tools installed by the workspace are usable. # Scoped to cloud-agent-safe tasks (lint/typecheck/tests); no mobile simulator tooling. diff --git a/apps/admin/package.json b/apps/admin/package.json index 8f7ed7f45e..ecd94f564b 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -32,6 +32,7 @@ "next-themes": "^0.4.6", "react": "catalog:", "react-dom": "catalog:", + "recharts": "3.8.1", "sonner": "^2.0.7", "tailwind-merge": "^2.5.5", "zod": "catalog:" diff --git a/packages/api/src/db/seed-e2e-user.ts b/packages/api/src/db/seed-e2e-user.ts index 5e1974e543..e6e7b477b5 100644 --- a/packages/api/src/db/seed-e2e-user.ts +++ b/packages/api/src/db/seed-e2e-user.ts @@ -10,6 +10,7 @@ */ import { neon, neonConfig } from '@neondatabase/serverless'; +import { nodeEnv } from '@packrat/env/node'; import { eq } from 'drizzle-orm'; import { drizzle, type NeonHttpDatabase } from 'drizzle-orm/neon-http'; import { drizzle as drizzlePg, type NodePgDatabase } from 'drizzle-orm/node-postgres'; @@ -33,9 +34,9 @@ const isStandardPostgresUrl = (url: string) => { }; async function seedE2EUser() { - const dbUrl = process.env.NEON_DATABASE_URL; - const email = process.env.E2E_TEST_EMAIL; - const password = process.env.E2E_TEST_PASSWORD; + const dbUrl = nodeEnv.NEON_DATABASE_URL; + const email = nodeEnv.E2E_TEST_EMAIL; + const password = nodeEnv.E2E_TEST_PASSWORD; if (!dbUrl) throw new Error('NEON_DATABASE_URL is required'); if (!email) throw new Error('E2E_TEST_EMAIL is required'); diff --git a/packages/api/src/routes/admin/analytics/index.ts b/packages/api/src/routes/admin/analytics/index.ts index 642c484d91..75fc9750ba 100644 --- a/packages/api/src/routes/admin/analytics/index.ts +++ b/packages/api/src/routes/admin/analytics/index.ts @@ -21,8 +21,11 @@ analyticsRoutes.get('/', (c) => breakdown: '/api/admin/analytics/platform/breakdown', }, catalog: { - dashboard: '/api/admin/analytics/catalog', - health: '/api/admin/analytics/catalog/health', + overview: '/api/admin/analytics/catalog/overview', + brands: '/api/admin/analytics/catalog/brands', + prices: '/api/admin/analytics/catalog/prices', + etl: '/api/admin/analytics/catalog/etl', + embeddings: '/api/admin/analytics/catalog/embeddings', }, }, }), diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index fc2b569c9d..43ce9a9c7f 100755 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -9,6 +9,7 @@ import { readFileSync } from 'node:fs'; import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; +import { nodeEnv } from '@packrat/env/node'; import { defineCommand, runMain } from 'citty'; import consola from 'consola'; import { z } from 'zod'; @@ -87,7 +88,7 @@ const main = defineCommand({ runMain(main).catch((error: unknown) => { if (error instanceof Error) { consola.error(error.message); - if (process.env.DEBUG) { + if (nodeEnv.DEBUG) { consola.error(error.stack ?? '(no stack trace)'); } } else { diff --git a/packages/env/src/node.ts b/packages/env/src/node.ts index 295bb5ae0c..c59b6f4b6d 100644 --- a/packages/env/src/node.ts +++ b/packages/env/src/node.ts @@ -55,6 +55,13 @@ export const nodeEnvSchema = z.object({ // ── Test runner flags ───────────────────────────────────────────── VITEST: z.string().optional(), + + // ── Debug / verbose ─────────────────────────────────────────────── + DEBUG: z.string().optional(), + + // ── E2E test credentials ────────────────────────────────────────── + E2E_TEST_EMAIL: z.string().email().optional(), + E2E_TEST_PASSWORD: z.string().min(1).optional(), }); export type NodeEnv = z.infer; diff --git a/packages/web-ui/package.json b/packages/web-ui/package.json index f68f04a6ca..9884e1781f 100644 --- a/packages/web-ui/package.json +++ b/packages/web-ui/package.json @@ -71,10 +71,5 @@ "react": "catalog:", "recharts": "3.8.1", "tailwindcss": "catalog:" - }, - "peerDependenciesMeta": { - "recharts": { - "optional": true - } } }