mirror of
https://github.com/wu736139669/hapi.git
synced 2026-08-05 06:24:37 +00:00
* feat(cli): add GitHub Copilot CLI agent support via ACP Wrap `copilot --acp --stdio` for remote sessions and spawn the native TUI locally, with full hub/web integration for spawn, resume, and permissions. Fixes tiann/hapi#362 Co-Authored-By: HAPI <noreply@hapi.run> Co-authored-by: Cursor <cursoragent@cursor.com> * feat(copilot): agent modes, models, slash/file UX, local session sync Add Interactive/Plan/Autopilot (fleet is slash-only), subscription-aware model discovery, web StatusBar/permission UX, @ file mentions, and fix local Safe Yolo plus session-id locator for handoff/resume. Co-authored-by: Cursor <cursoragent@cursor.com> * chore: re-trigger Codex PR review after auth outage Co-authored-by: Cursor <cursoragent@cursor.com> * chore: retry Codex PR review Co-authored-by: Cursor <cursoragent@cursor.com> * fix(copilot): preserve agent mode on resume and apply via ACP set_mode Resume was dropping copilotAgentMode so Plan/Autopilot reset to interactive. Also switch local/remote mode application to --mode / session set_mode instead of slash prompts. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(copilot): wake remote loop when agent mode changes Empty isolated queue tick lets setMode apply without inventing a user prompt. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(copilot): confirm mode changes before persisting Await Copilot mode changes and expose discovered models so session state reflects backend acceptance. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(copilot): guard mode discovery and slash updates Keep model probes within runner roots and preserve active sessions when mode switching is unavailable or rejected. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(copilot): preserve resume and auto semantics Deduplicate Copilot resume rows, apply Auto explicitly, and fail closed on denied permissions. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(copilot): close permission and model discovery gaps Keep write-capable commands pending in read-only mode, extend model probe RPCs, and preserve explicit model validation before session creation. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(copilot): persist runtime model and agent mode Fallback to ACP model options when direct model switching is unavailable and retain Copilot agent mode across hub restarts. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(copilot): normalize composer auto selection Use the null session sentinel for Copilot Auto so the composer selects and resets default models consistently. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(copilot): reject local permission mode changes * style(copilot): remove trailing blank line * fix(copilot): secure local config handoffs * fix(copilot): reject local agent mode slashes * fix(copilot): reject mode changes during turns * fix(copilot): consume rejected slash updates * fix(copilot): preserve thinking across slash handling * fix(copilot): stabilize async config changes * fix(copilot): roll back rejected startup model * fix(copilot): preserve cancellation and file mentions * fix(copilot): hide local permission controls * fix(deps): support clean workspace installs * test(copilot): account for spawn mode argument * fix(copilot): attribute usage to active model --------- Co-authored-by: HAPI <noreply@hapi.run> Co-authored-by: Cursor <cursoragent@cursor.com>
85 lines
2.8 KiB
JSON
85 lines
2.8 KiB
JSON
{
|
|
"name": "hapi-web",
|
|
"private": true,
|
|
"version": "0.1.0",
|
|
"license": "AGPL-3.0-only",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "vite build && cp dist/index.html dist/404.html",
|
|
"typecheck": "tsc --noEmit",
|
|
"preview": "vite preview",
|
|
"test": "vitest run",
|
|
"test:mermaid-lightbox:e2e": "playwright test e2e/mermaid-lightbox.spec.ts"
|
|
},
|
|
"dependencies": {
|
|
"@assistant-ui/react": "^0.14.29",
|
|
"@assistant-ui/react-markdown": "^0.14.7",
|
|
"@assistant-ui/tap": "^0.9.8",
|
|
"@elevenlabs/react": "^0.13.0",
|
|
"@hapi/protocol": "workspace:*",
|
|
"@lobehub/icons": "^5.4.0",
|
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
"@radix-ui/react-popover": "^1.1.15",
|
|
"@radix-ui/react-slot": "^1.2.4",
|
|
"@shikijs/langs": "^3.20.0",
|
|
"@shikijs/themes": "^3.20.0",
|
|
"@tanstack/react-query": "^5.90.12",
|
|
"@tanstack/react-query-devtools": "^5.91.1",
|
|
"@tanstack/react-router": "^1.170.8",
|
|
"@tanstack/router-core": "^1.171.6",
|
|
"@xterm/addon-canvas": "^0.7.0",
|
|
"@xterm/addon-fit": "^0.11.0",
|
|
"@xterm/addon-web-links": "^0.12.0",
|
|
"@xterm/xterm": "^6.0.0",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"diff": "^8.0.2",
|
|
"hast-util-to-jsx-runtime": "^2.3.6",
|
|
"html2canvas-pro": "^2.0.4",
|
|
"katex": "^0.16.45",
|
|
"mermaid": "^11.12.0",
|
|
"react": "^19.2.3",
|
|
"react-dom": "^19.2.3",
|
|
"react-markdown": "^10.1.0",
|
|
"qrcode": "^1.5.4",
|
|
"rehype-katex": "^7.0.1",
|
|
"remark-breaks": "^4.0.0",
|
|
"remark-gfm": "^4.0.1",
|
|
"remark-math": "^6.0.0",
|
|
"shiki": "^3.20.0",
|
|
"socket.io-client": "^4.8.3",
|
|
"tailwind-merge": "^3.4.0",
|
|
"workbox-expiration": "^7.4.0",
|
|
"workbox-precaching": "^7.4.0",
|
|
"workbox-routing": "^7.4.0",
|
|
"workbox-strategies": "^7.4.0",
|
|
"workbox-window": "^7.4.0"
|
|
},
|
|
"devDependencies": {
|
|
"@testing-library/jest-dom": "^6.6.3",
|
|
"@testing-library/react": "^16.3.0",
|
|
"@types/react": "^19.2.7",
|
|
"@types/react-dom": "^19.2.3",
|
|
"@types/qrcode": "^1.5.6",
|
|
"@types/hast": "^3.0.4",
|
|
"@types/mdast": "^4.0.4",
|
|
"@tailwindcss/postcss": "^4.1.18",
|
|
"@vitejs/plugin-react": "^5.1.2",
|
|
"autoprefixer": "^10.4.23",
|
|
"hast-util-to-html": "^9.0.5",
|
|
"jsdom": "^26.1.0",
|
|
"postcss": "^8.5.6",
|
|
"remark-parse": "^11.0.0",
|
|
"remark-rehype": "^11.1.2",
|
|
"remark-stringify": "^11.0.0",
|
|
"tailwindcss": "^4.1.18",
|
|
"typescript": "^5.9.3",
|
|
"unified": "^11.0.5",
|
|
"vite": "^7.3.0",
|
|
"vitest": "^4.0.16",
|
|
"vfile": "^6.0.3",
|
|
"@playwright/test": "1.60.0"
|
|
}
|
|
}
|