diff --git a/.github/workflows/pullfrog.yml b/.github/workflows/pullfrog.yml index d86479432..e5a760711 100644 --- a/.github/workflows/pullfrog.yml +++ b/.github/workflows/pullfrog.yml @@ -43,4 +43,3 @@ jobs: GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }} DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }} OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} - diff --git a/.oxfmtrc.json b/.oxfmtrc.json new file mode 100644 index 000000000..4d30dc2c2 --- /dev/null +++ b/.oxfmtrc.json @@ -0,0 +1,15 @@ +{ + "$schema": "./node_modules/oxfmt/configuration_schema.json", + "tabWidth": 2, + "singleQuote": false, + "printWidth": 80, + "ignorePatterns": [ + ".next", + "node_modules", + "dist", + "build", + ".turbo", + "packages/benchmarks/shadcn-dashboard", + "pnpm-lock.yaml" + ] +} diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 9bb0feff3..000000000 --- a/.prettierignore +++ /dev/null @@ -1,7 +0,0 @@ -.next -node_modules -dist -build -.turbo -packages/benchmarks/shadcn-dashboard -pnpm-lock.yaml diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index e02a8a5cf..000000000 --- a/.prettierrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "tabWidth": 2, - "singleQuote": false, - "printWidth": 80 -} diff --git a/package.json b/package.json index 932838271..f91d326b2 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,9 @@ { "private": true, + "workspaces": [ + "packages/*", + "packages/benchmarks/next-app" + ], "type": "module", "scripts": { "build": "turbo run build --filter=react-grab --filter=@react-grab/cursor --filter=@react-grab/claude-code --filter=@react-grab/ami --filter=@react-grab/opencode --filter=@react-grab/codex --filter=@react-grab/gemini --filter=@react-grab/amp --filter=@react-grab/droid --filter=@react-grab/cli --filter=@react-grab/utils && pnpm --filter grab build", @@ -8,7 +12,7 @@ "typecheck": "pnpm --filter react-grab typecheck", "lint": "pnpm --filter react-grab lint", "lint:fix": "pnpm --filter react-grab lint:fix", - "format": "prettier --write .", + "format": "oxfmt", "changeset": "changeset", "version": "changeset version", "prebump": "cp README.md packages/react-grab/README.md && pnpm --filter grab build", @@ -20,7 +24,7 @@ }, "devDependencies": { "@changesets/cli": "^2.27.10", - "prettier": "^3.4.2", + "oxfmt": "^0.27.0", "turbo": "^2.6.3", "untun": "^0.1.3" }, @@ -28,9 +32,5 @@ "node": ">=18", "pnpm": ">=8" }, - "packageManager": "pnpm@10.24.0", - "workspaces": [ - "packages/*", - "packages/benchmarks/next-app" - ] + "packageManager": "pnpm@10.24.0" } diff --git a/packages/cli/package.json b/packages/cli/package.json index f533f94ee..1f935de60 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,10 +1,13 @@ { "name": "@react-grab/cli", "version": "0.1.0-beta.12", - "type": "module", "bin": { "react-grab": "./dist/cli.js" }, + "files": [ + "dist" + ], + "type": "module", "exports": { ".": { "types": "./dist/cli.d.ts", @@ -12,25 +15,22 @@ "require": "./dist/cli.cjs" } }, - "files": [ - "dist" - ], "scripts": { "dev": "tsup --watch", "build": "rm -rf dist && NODE_ENV=production tsup", "test": "vitest run", "test:watch": "vitest" }, - "devDependencies": { - "@types/prompts": "^2.4.9", - "tsup": "^8.4.0", - "vitest": "^3.2.4" - }, "dependencies": { "@antfu/ni": "^0.23.0", "commander": "^14.0.0", "ora": "^8.2.0", "picocolors": "^1.1.1", "prompts": "^2.4.2" + }, + "devDependencies": { + "@types/prompts": "^2.4.9", + "tsup": "^8.4.0", + "vitest": "^3.2.4" } } diff --git a/packages/e2e-playground/package.json b/packages/e2e-playground/package.json index dc6771f1d..a2ccf55e1 100644 --- a/packages/e2e-playground/package.json +++ b/packages/e2e-playground/package.json @@ -8,10 +8,10 @@ "preview": "vite preview" }, "dependencies": { - "react-grab": "workspace:*", "clsx": "^2.1.1", "react": "19.1.2", "react-dom": "19.1.2", + "react-grab": "workspace:*", "tailwind-merge": "^2.6.0" }, "devDependencies": { diff --git a/packages/grab/package.json b/packages/grab/package.json index b756ae3b9..7eafb0423 100644 --- a/packages/grab/package.json +++ b/packages/grab/package.json @@ -3,26 +3,40 @@ "version": "0.1.0-beta.12", "description": "Select context for coding agents directly from your website", "keywords": [ - "react", - "grab", - "react-grab", "agent", - "context" + "context", + "grab", + "react", + "react-grab" ], "homepage": "https://react-grab.com", "bugs": { "url": "https://github.com/aidenybai/react-grab/issues" }, - "repository": { - "type": "git", - "url": "git+https://github.com/aidenybai/react-grab.git" - }, "license": "MIT", "author": { "name": "Aiden Bai", "email": "aiden@million.dev" }, + "repository": { + "type": "git", + "url": "git+https://github.com/aidenybai/react-grab.git" + }, + "bin": { + "grab": "./bin/cli.js" + }, + "files": [ + "bin", + "dist", + "package.json", + "README.md", + "LICENSE" + ], "type": "module", + "main": "dist/index.js", + "module": "dist/index.js", + "browser": "dist/index.global.js", + "types": "dist/index.d.ts", "exports": { "./package.json": "./package.json", ".": { @@ -50,27 +64,13 @@ "./dist/*.cjs": "./dist/*.cjs", "./dist/*.mjs": "./dist/*.mjs" }, - "bin": { - "grab": "./bin/cli.js" + "publishConfig": { + "access": "public" }, - "main": "dist/index.js", - "module": "dist/index.js", - "browser": "dist/index.global.js", - "types": "dist/index.d.ts", - "files": [ - "bin", - "dist", - "package.json", - "README.md", - "LICENSE" - ], "scripts": { "build": "node scripts/build.js" }, "dependencies": { "@react-grab/cli": "workspace:*" - }, - "publishConfig": { - "access": "public" } } diff --git a/packages/next-playground/package.json b/packages/next-playground/package.json index fcec3acd5..27f3fefb8 100644 --- a/packages/next-playground/package.json +++ b/packages/next-playground/package.json @@ -12,12 +12,12 @@ "lint": "next lint" }, "dependencies": { - "react-grab": "workspace:*", "bippy": "^0.5.11", "clsx": "^2.1.1", "next": "15.3.8", "react": "19.0.1", "react-dom": "19.0.1", + "react-grab": "workspace:*", "tailwind-merge": "^2.6.0" }, "devDependencies": { diff --git a/packages/provider-ami/package.json b/packages/provider-ami/package.json index 47d77b879..11aff00f5 100644 --- a/packages/provider-ami/package.json +++ b/packages/provider-ami/package.json @@ -1,7 +1,11 @@ { "name": "@react-grab/ami", "version": "0.1.0-beta.12", + "files": [ + "dist" + ], "type": "module", + "browser": "dist/client.global.js", "exports": { "./client": { "types": "./dist/client.d.ts", @@ -11,19 +15,15 @@ "./dist/*": "./dist/*.js", "./dist/*.js": "./dist/*.js" }, - "browser": "dist/client.global.js", - "files": [ - "dist" - ], "scripts": { "dev": "tsup --watch", "build": "rm -rf dist && NODE_ENV=production tsup" }, + "dependencies": { + "react-grab": "workspace:*" + }, "devDependencies": { "@types/node": "^22.10.7", "tsup": "^8.4.0" - }, - "dependencies": { - "react-grab": "workspace:*" } } diff --git a/packages/provider-amp/package.json b/packages/provider-amp/package.json index 81d3c084f..6c334fe92 100644 --- a/packages/provider-amp/package.json +++ b/packages/provider-amp/package.json @@ -1,10 +1,14 @@ { "name": "@react-grab/amp", "version": "0.1.0-beta.12", - "type": "module", "bin": { "react-grab-amp": "./dist/cli.cjs" }, + "files": [ + "dist" + ], + "type": "module", + "browser": "dist/client.global.js", "exports": { "./client": { "types": "./dist/client.d.ts", @@ -19,23 +23,19 @@ "./dist/*": "./dist/*.js", "./dist/*.js": "./dist/*.js" }, - "browser": "dist/client.global.js", - "files": [ - "dist" - ], "scripts": { "dev": "tsup --watch", "build": "rm -rf dist && NODE_ENV=production tsup" }, - "devDependencies": { - "@react-grab/utils": "workspace:*", - "@types/node": "^22.10.7", - "tsup": "^8.4.0" - }, "dependencies": { "@react-grab/relay": "workspace:*", "@sourcegraph/amp": "^0.0.1767830505-ga62310", "@sourcegraph/amp-sdk": "^0.1.0-20251210081226-g90e3892", "react-grab": "workspace:*" + }, + "devDependencies": { + "@react-grab/utils": "workspace:*", + "@types/node": "^22.10.7", + "tsup": "^8.4.0" } } diff --git a/packages/provider-claude-code/package.json b/packages/provider-claude-code/package.json index 2c5248ac1..b316f9f49 100644 --- a/packages/provider-claude-code/package.json +++ b/packages/provider-claude-code/package.json @@ -1,10 +1,14 @@ { "name": "@react-grab/claude-code", "version": "0.1.0-beta.12", - "type": "module", "bin": { "react-grab-claude-code": "./dist/cli.cjs" }, + "files": [ + "dist" + ], + "type": "module", + "browser": "dist/client.global.js", "exports": { "./client": { "types": "./dist/client.d.ts", @@ -19,22 +23,18 @@ "./dist/*": "./dist/*.js", "./dist/*.js": "./dist/*.js" }, - "browser": "dist/client.global.js", - "files": [ - "dist" - ], "scripts": { "dev": "tsup --watch", "build": "rm -rf dist && NODE_ENV=production tsup" }, - "devDependencies": { - "@react-grab/utils": "workspace:*", - "@types/node": "^22.10.7", - "tsup": "^8.4.0" - }, "dependencies": { "@anthropic-ai/claude-agent-sdk": "^0.1.0", "@react-grab/relay": "workspace:*", "react-grab": "workspace:*" + }, + "devDependencies": { + "@react-grab/utils": "workspace:*", + "@types/node": "^22.10.7", + "tsup": "^8.4.0" } } diff --git a/packages/provider-claude-code/src/handler.ts b/packages/provider-claude-code/src/handler.ts index 2f9ef8f92..cb3dbbebb 100644 --- a/packages/provider-claude-code/src/handler.ts +++ b/packages/provider-claude-code/src/handler.ts @@ -13,8 +13,7 @@ import { COMPLETED_STATUS } from "@react-grab/relay"; import { formatSpawnError } from "@react-grab/utils/server"; export interface ClaudeAgentOptions - extends AgentRunOptions, - Omit {} + extends AgentRunOptions, Omit {} type ContentBlock = SDKAssistantMessage["message"]["content"][number]; type TextContentBlock = Extract; diff --git a/packages/provider-codex/package.json b/packages/provider-codex/package.json index 4be4ea1d5..8d849513d 100644 --- a/packages/provider-codex/package.json +++ b/packages/provider-codex/package.json @@ -1,10 +1,14 @@ { "name": "@react-grab/codex", "version": "0.1.0-beta.12", - "type": "module", "bin": { "react-grab-codex": "./dist/cli.cjs" }, + "files": [ + "dist" + ], + "type": "module", + "browser": "dist/client.global.js", "exports": { "./client": { "types": "./dist/client.d.ts", @@ -19,22 +23,18 @@ "./dist/*": "./dist/*.js", "./dist/*.js": "./dist/*.js" }, - "browser": "dist/client.global.js", - "files": [ - "dist" - ], "scripts": { "dev": "tsup --watch", "build": "rm -rf dist && NODE_ENV=production tsup" }, - "devDependencies": { - "@react-grab/utils": "workspace:*", - "@types/node": "^22.10.7", - "tsup": "^8.4.0" - }, "dependencies": { "@openai/codex-sdk": "^0.66.0", "@react-grab/relay": "workspace:*", "react-grab": "workspace:*" + }, + "devDependencies": { + "@react-grab/utils": "workspace:*", + "@types/node": "^22.10.7", + "tsup": "^8.4.0" } } diff --git a/packages/provider-cursor/package.json b/packages/provider-cursor/package.json index c9bb04423..7eaaba94e 100644 --- a/packages/provider-cursor/package.json +++ b/packages/provider-cursor/package.json @@ -1,10 +1,14 @@ { "name": "@react-grab/cursor", "version": "0.1.0-beta.12", - "type": "module", "bin": { "react-grab-cursor": "./dist/cli.cjs" }, + "files": [ + "dist" + ], + "type": "module", + "browser": "dist/client.global.js", "exports": { "./client": { "types": "./dist/client.d.ts", @@ -19,22 +23,18 @@ "./dist/*": "./dist/*.js", "./dist/*.js": "./dist/*.js" }, - "browser": "dist/client.global.js", - "files": [ - "dist" - ], "scripts": { "dev": "tsup --watch", "build": "rm -rf dist && NODE_ENV=production tsup" }, - "devDependencies": { - "@react-grab/utils": "workspace:*", - "@types/node": "^22.10.7", - "tsup": "^8.4.0" - }, "dependencies": { "@react-grab/relay": "workspace:*", "execa": "^9.6.0", "react-grab": "workspace:*" + }, + "devDependencies": { + "@react-grab/utils": "workspace:*", + "@types/node": "^22.10.7", + "tsup": "^8.4.0" } } diff --git a/packages/provider-droid/package.json b/packages/provider-droid/package.json index 7ae908f51..ad4f7e43b 100644 --- a/packages/provider-droid/package.json +++ b/packages/provider-droid/package.json @@ -1,10 +1,14 @@ { "name": "@react-grab/droid", "version": "0.1.0-beta.12", - "type": "module", "bin": { "react-grab-droid": "./dist/cli.cjs" }, + "files": [ + "dist" + ], + "type": "module", + "browser": "dist/client.global.js", "exports": { "./client": { "types": "./dist/client.d.ts", @@ -19,22 +23,18 @@ "./dist/*": "./dist/*.js", "./dist/*.js": "./dist/*.js" }, - "browser": "dist/client.global.js", - "files": [ - "dist" - ], "scripts": { "dev": "tsup --watch", "build": "rm -rf dist && NODE_ENV=production tsup" }, - "devDependencies": { - "@react-grab/utils": "workspace:*", - "@types/node": "^22.10.7", - "tsup": "^8.4.0" - }, "dependencies": { "@react-grab/relay": "workspace:*", "execa": "^9.6.0", "react-grab": "workspace:*" + }, + "devDependencies": { + "@react-grab/utils": "workspace:*", + "@types/node": "^22.10.7", + "tsup": "^8.4.0" } } diff --git a/packages/provider-gemini/package.json b/packages/provider-gemini/package.json index 22e1710ec..660a225dc 100644 --- a/packages/provider-gemini/package.json +++ b/packages/provider-gemini/package.json @@ -1,10 +1,14 @@ { "name": "@react-grab/gemini", "version": "0.1.0-beta.12", - "type": "module", "bin": { "react-grab-gemini": "./dist/cli.cjs" }, + "files": [ + "dist" + ], + "type": "module", + "browser": "dist/client.global.js", "exports": { "./client": { "types": "./dist/client.d.ts", @@ -19,22 +23,18 @@ "./dist/*": "./dist/*.js", "./dist/*.js": "./dist/*.js" }, - "browser": "dist/client.global.js", - "files": [ - "dist" - ], "scripts": { "dev": "tsup --watch", "build": "rm -rf dist && NODE_ENV=production tsup" }, - "devDependencies": { - "@react-grab/utils": "workspace:*", - "@types/node": "^22.10.7", - "tsup": "^8.4.0" - }, "dependencies": { "@react-grab/relay": "workspace:*", "execa": "^9.6.0", "react-grab": "workspace:*" + }, + "devDependencies": { + "@react-grab/utils": "workspace:*", + "@types/node": "^22.10.7", + "tsup": "^8.4.0" } } diff --git a/packages/provider-opencode/package.json b/packages/provider-opencode/package.json index 273d68948..1032ee533 100644 --- a/packages/provider-opencode/package.json +++ b/packages/provider-opencode/package.json @@ -1,10 +1,14 @@ { "name": "@react-grab/opencode", "version": "0.1.0-beta.12", - "type": "module", "bin": { "react-grab-opencode": "./dist/cli.cjs" }, + "files": [ + "dist" + ], + "type": "module", + "browser": "dist/client.global.js", "exports": { "./client": { "types": "./dist/client.d.ts", @@ -19,23 +23,19 @@ "./dist/*": "./dist/*.js", "./dist/*.js": "./dist/*.js" }, - "browser": "dist/client.global.js", - "files": [ - "dist" - ], "scripts": { "dev": "tsup --watch", "build": "rm -rf dist && NODE_ENV=production tsup" }, - "devDependencies": { - "@react-grab/utils": "workspace:*", - "@types/node": "^22.10.7", - "tsup": "^8.4.0" - }, "dependencies": { "@opencode-ai/sdk": "^1.0.132", "@react-grab/relay": "workspace:*", "fkill": "^9.0.0", "react-grab": "workspace:*" + }, + "devDependencies": { + "@react-grab/utils": "workspace:*", + "@types/node": "^22.10.7", + "tsup": "^8.4.0" } } diff --git a/packages/react-grab/package.json b/packages/react-grab/package.json index 49fcf0432..553a66d23 100644 --- a/packages/react-grab/package.json +++ b/packages/react-grab/package.json @@ -3,26 +3,36 @@ "version": "0.1.0-beta.12", "description": "Select context for coding agents directly from your website", "keywords": [ - "react", - "grab", - "react-grab", "agent", - "context" + "context", + "grab", + "react", + "react-grab" ], "homepage": "https://react-grab.com", "bugs": { "url": "https://github.com/aidenybai/react-grab/issues" }, - "repository": { - "type": "git", - "url": "git+https://github.com/aidenybai/react-grab.git" - }, "license": "MIT", "author": { "name": "Aiden Bai", "email": "aiden@million.dev" }, + "repository": { + "type": "git", + "url": "git+https://github.com/aidenybai/react-grab.git" + }, + "files": [ + "dist", + "package.json", + "README.md", + "LICENSE" + ], "type": "module", + "main": "dist/index.js", + "module": "dist/index.js", + "browser": "dist/index.global.js", + "types": "dist/index.d.ts", "exports": { "./package.json": "./package.json", ".": { @@ -52,16 +62,9 @@ "./dist/*.cjs": "./dist/*.cjs", "./dist/*.mjs": "./dist/*.mjs" }, - "main": "dist/index.js", - "module": "dist/index.js", - "browser": "dist/index.global.js", - "types": "dist/index.d.ts", - "files": [ - "dist", - "package.json", - "README.md", - "LICENSE" - ], + "publishConfig": { + "access": "public" + }, "scripts": { "css:build": "tailwindcss -i ./src/styles.css -o ./dist/styles.css -m", "css:watch": "tailwindcss -i ./src/styles.css -o ./dist/styles.css -w", @@ -78,6 +81,10 @@ "test:e2e": "playwright test", "test:e2e:ui": "playwright test --ui" }, + "dependencies": { + "bippy": "^0.5.28", + "solid-js": "^1.9.10" + }, "devDependencies": { "@babel/core": "^7.28.5", "@babel/preset-typescript": "^7.28.5", @@ -94,12 +101,5 @@ "tailwindcss": "^4.1.0", "tsup": "^8.2.4", "typescript-eslint": "^8.46.1" - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "bippy": "^0.5.28", - "solid-js": "^1.9.10" } } diff --git a/packages/react-grab/src/components/context-menu.tsx b/packages/react-grab/src/components/context-menu.tsx index 4411eb073..397ad427a 100644 --- a/packages/react-grab/src/components/context-menu.tsx +++ b/packages/react-grab/src/components/context-menu.tsx @@ -12,7 +12,8 @@ import type { ContextMenuAction, ActionContext, } from "../types.js"; -import { ARROW_HEIGHT_PX, LABEL_GAP_PX } from "../constants.js"; +import { ARROW_HEIGHT_PX, LABEL_GAP_PX, PANEL_STYLES } from "../constants.js"; +import { cn } from "../utils/cn.js"; import { Arrow } from "./selection-label/arrow.js"; import { TagBadge } from "./selection-label/tag-badge.js"; import { BottomSection } from "./selection-label/bottom-section.js"; @@ -293,7 +294,7 @@ export const ContextMenu: Component = (props) => { ref={containerRef} data-react-grab-ignore-events data-react-grab-context-menu - class="fixed font-sans text-[13px] antialiased filter-[drop-shadow(0px_0px_4px_#51515180)] select-none transition-opacity duration-150 ease-out" + class="fixed font-sans text-[13px] antialiased filter-[drop-shadow(0px_1px_2px_#51515140)] select-none transition-opacity duration-150 ease-out" style={{ top: `${computedPosition().top}px`, left: `${computedPosition().left}px`, @@ -316,8 +317,13 @@ export const ContextMenu: Component = (props) => { leftOffsetPx={computedPosition().arrowLeft} /> -
-
+
+
= (props) => { />
-
+
{(item) => (
-
+
= (props) => { when={!didCopy() && props.supportsFollowUp && props.onFollowUpSubmit} > -
+ +
+ + + {props.previousPrompt} + +
+
+