@guuey/create-agentic-app 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -2
- package/dist/{chunk-JD4RAKEG.js → chunk-5V2IFXD4.js} +96 -21
- package/dist/cli.cjs +145 -17
- package/dist/cli.js +60 -5
- package/dist/index.cjs +97 -21
- package/dist/index.d.cts +33 -2
- package/dist/index.d.ts +33 -2
- package/dist/index.js +3 -1
- package/dist/templates/{openai-agents-sdk → agentic-app/claude-agent-sdk}/AGENTS.md +2 -2
- package/dist/templates/{openai-agents-sdk → agentic-app/claude-agent-sdk}/README.md +23 -7
- package/dist/templates/agentic-app/claude-agent-sdk/gitignore +5 -0
- package/dist/templates/agentic-app/claude-agent-sdk/guuey.app.json +28 -0
- package/dist/templates/agentic-app/claude-agent-sdk/guuey.app.schema.json +119 -0
- package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/package.json +6 -3
- package/dist/templates/agentic-app/claude-agent-sdk/scripts/bootstrap.mjs +398 -0
- package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/web/index.html +0 -1
- package/dist/templates/agentic-app/claude-agent-sdk/web/package.json +29 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/components/AgentChat.tsx +91 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/components/AppShell.tsx +139 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/components/BootstrapGate.tsx +30 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/components/QrLink.tsx +25 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/components/Shell.tsx +50 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/config.ts +148 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/lib/identity.ts +67 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/lib/oidc.ts +79 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/lib/status.ts +45 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/lib/widget.ts +96 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/main.tsx +51 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/pages/Dashboard.tsx +33 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/pages/Home.tsx +133 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/pages/Landing.tsx +65 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/pages/Login.tsx +81 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/pages/Reports.tsx +9 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/pages/TalkOnMobile.tsx +34 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/routes.ts +7 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/styles-app.css +130 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/styles.css +248 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/vite-env.d.ts +14 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/tsconfig.json +18 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/vite.config.ts +46 -0
- package/dist/templates/{google-adk → agentic-app/google-adk}/AGENTS.md +2 -2
- package/dist/templates/agentic-app/google-adk/gitignore +5 -0
- package/dist/templates/agentic-app/google-adk/guuey.app.json +28 -0
- package/dist/templates/agentic-app/google-adk/guuey.app.schema.json +119 -0
- package/dist/templates/{google-adk → agentic-app/google-adk}/package.json +6 -3
- package/dist/templates/agentic-app/google-adk/scripts/bootstrap.mjs +398 -0
- package/dist/templates/{google-adk → agentic-app/google-adk}/web/index.html +0 -1
- package/dist/templates/agentic-app/google-adk/web/package.json +29 -0
- package/dist/templates/agentic-app/google-adk/web/src/components/AgentChat.tsx +91 -0
- package/dist/templates/agentic-app/google-adk/web/src/components/AppShell.tsx +139 -0
- package/dist/templates/agentic-app/google-adk/web/src/components/BootstrapGate.tsx +30 -0
- package/dist/templates/agentic-app/google-adk/web/src/components/QrLink.tsx +25 -0
- package/dist/templates/agentic-app/google-adk/web/src/components/Shell.tsx +50 -0
- package/dist/templates/agentic-app/google-adk/web/src/config.ts +148 -0
- package/dist/templates/agentic-app/google-adk/web/src/lib/identity.ts +67 -0
- package/dist/templates/agentic-app/google-adk/web/src/lib/oidc.ts +79 -0
- package/dist/templates/agentic-app/google-adk/web/src/lib/status.ts +45 -0
- package/dist/templates/agentic-app/google-adk/web/src/lib/widget.ts +96 -0
- package/dist/templates/agentic-app/google-adk/web/src/main.tsx +51 -0
- package/dist/templates/agentic-app/google-adk/web/src/pages/Dashboard.tsx +33 -0
- package/dist/templates/agentic-app/google-adk/web/src/pages/Home.tsx +133 -0
- package/dist/templates/agentic-app/google-adk/web/src/pages/Landing.tsx +65 -0
- package/dist/templates/agentic-app/google-adk/web/src/pages/Login.tsx +81 -0
- package/dist/templates/agentic-app/google-adk/web/src/pages/Reports.tsx +9 -0
- package/dist/templates/agentic-app/google-adk/web/src/pages/TalkOnMobile.tsx +34 -0
- package/dist/templates/agentic-app/google-adk/web/src/routes.ts +7 -0
- package/dist/templates/agentic-app/google-adk/web/src/styles-app.css +130 -0
- package/dist/templates/agentic-app/google-adk/web/src/styles.css +248 -0
- package/dist/templates/agentic-app/google-adk/web/src/vite-env.d.ts +14 -0
- package/dist/templates/agentic-app/google-adk/web/tsconfig.json +18 -0
- package/dist/templates/agentic-app/google-adk/web/vite.config.ts +46 -0
- package/dist/templates/{claude-agent-sdk → agentic-app/openai-agents-sdk}/AGENTS.md +2 -2
- package/dist/templates/{claude-agent-sdk → agentic-app/openai-agents-sdk}/README.md +23 -7
- package/dist/templates/agentic-app/openai-agents-sdk/gitignore +5 -0
- package/dist/templates/agentic-app/openai-agents-sdk/guuey.app.json +28 -0
- package/dist/templates/agentic-app/openai-agents-sdk/guuey.app.schema.json +119 -0
- package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/package.json +6 -3
- package/dist/templates/agentic-app/openai-agents-sdk/scripts/bootstrap.mjs +398 -0
- package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/web/index.html +0 -1
- package/dist/templates/agentic-app/openai-agents-sdk/web/package.json +29 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/components/AgentChat.tsx +91 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/components/AppShell.tsx +139 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/components/BootstrapGate.tsx +30 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/components/QrLink.tsx +25 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/components/Shell.tsx +50 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/config.ts +148 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/lib/identity.ts +67 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/lib/oidc.ts +79 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/lib/status.ts +45 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/lib/widget.ts +96 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/main.tsx +51 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/pages/Dashboard.tsx +33 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/pages/Home.tsx +133 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/pages/Landing.tsx +65 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/pages/Login.tsx +81 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/pages/Reports.tsx +9 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/pages/TalkOnMobile.tsx +34 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/routes.ts +7 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/styles-app.css +130 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/styles.css +248 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/vite-env.d.ts +14 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/tsconfig.json +18 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/vite.config.ts +46 -0
- package/dist/templates/base/claude-agent-sdk/.env.example +4 -0
- package/dist/templates/base/claude-agent-sdk/.mcp.json +1 -0
- package/dist/templates/base/claude-agent-sdk/AGENTS.md +135 -0
- package/dist/templates/base/claude-agent-sdk/README.md +173 -0
- package/dist/templates/base/claude-agent-sdk/ggui/blueprints/.gitkeep +0 -0
- package/dist/templates/base/claude-agent-sdk/ggui/ggui.json +15 -0
- package/dist/templates/base/claude-agent-sdk/ggui/themes/.gitkeep +0 -0
- package/dist/templates/base/claude-agent-sdk/gitignore +5 -0
- package/dist/templates/base/claude-agent-sdk/guuey.app.json +28 -0
- package/dist/templates/base/claude-agent-sdk/guuey.app.schema.json +119 -0
- package/dist/templates/base/claude-agent-sdk/guuey.json +14 -0
- package/dist/templates/base/claude-agent-sdk/mcps/todo/Dockerfile +46 -0
- package/dist/templates/base/claude-agent-sdk/mcps/todo/package.json +22 -0
- package/dist/templates/base/claude-agent-sdk/mcps/todo/src/server.ts +173 -0
- package/dist/templates/base/claude-agent-sdk/mcps/todo/tsconfig.json +15 -0
- package/dist/templates/base/claude-agent-sdk/mcps/todo/tsup.config.ts +14 -0
- package/dist/templates/base/claude-agent-sdk/package.json +30 -0
- package/dist/templates/base/claude-agent-sdk/pnpm-workspace.yaml +24 -0
- package/dist/templates/base/claude-agent-sdk/prompts/system.md +4 -0
- package/dist/templates/base/claude-agent-sdk/scripts/bootstrap.mjs +398 -0
- package/dist/templates/base/claude-agent-sdk/scripts/dev.mjs +45 -0
- package/dist/templates/base/claude-agent-sdk/src/agent-config.ts +77 -0
- package/dist/templates/base/claude-agent-sdk/src/worker.ts +89 -0
- package/dist/templates/base/claude-agent-sdk/tsconfig.json +15 -0
- package/dist/templates/base/claude-agent-sdk/tsup.config.ts +9 -0
- package/dist/templates/base/claude-agent-sdk/web/index.html +12 -0
- package/dist/templates/{claude-agent-sdk → base/claude-agent-sdk}/web/package.json +11 -8
- package/dist/templates/base/claude-agent-sdk/web/src/components/AgentChat.tsx +91 -0
- package/dist/templates/base/claude-agent-sdk/web/src/components/BootstrapGate.tsx +30 -0
- package/dist/templates/base/claude-agent-sdk/web/src/components/QrLink.tsx +25 -0
- package/dist/templates/base/claude-agent-sdk/web/src/components/Shell.tsx +50 -0
- package/dist/templates/base/claude-agent-sdk/web/src/config.ts +148 -0
- package/dist/templates/base/claude-agent-sdk/web/src/lib/identity.ts +67 -0
- package/dist/templates/base/claude-agent-sdk/web/src/lib/oidc.ts +79 -0
- package/dist/templates/base/claude-agent-sdk/web/src/lib/status.ts +45 -0
- package/dist/templates/base/claude-agent-sdk/web/src/lib/widget.ts +96 -0
- package/dist/templates/base/claude-agent-sdk/web/src/main.tsx +52 -0
- package/dist/templates/base/claude-agent-sdk/web/src/pages/Chat.tsx +15 -0
- package/dist/templates/base/claude-agent-sdk/web/src/pages/Home.tsx +133 -0
- package/dist/templates/base/claude-agent-sdk/web/src/pages/Landing.tsx +65 -0
- package/dist/templates/base/claude-agent-sdk/web/src/pages/Login.tsx +81 -0
- package/dist/templates/base/claude-agent-sdk/web/src/routes.ts +7 -0
- package/dist/templates/base/claude-agent-sdk/web/src/styles.css +248 -0
- package/dist/templates/base/claude-agent-sdk/web/src/vite-env.d.ts +14 -0
- package/dist/templates/base/claude-agent-sdk/web/tsconfig.json +18 -0
- package/dist/templates/base/claude-agent-sdk/web/vite.config.ts +46 -0
- package/dist/templates/base/google-adk/.env.example +4 -0
- package/dist/templates/base/google-adk/.mcp.json +1 -0
- package/dist/templates/base/google-adk/AGENTS.md +135 -0
- package/dist/templates/base/google-adk/README.md +90 -0
- package/dist/templates/base/google-adk/ggui/blueprints/.gitkeep +0 -0
- package/dist/templates/base/google-adk/ggui/ggui.json +15 -0
- package/dist/templates/base/google-adk/ggui/themes/.gitkeep +0 -0
- package/dist/templates/base/google-adk/gitignore +5 -0
- package/dist/templates/base/google-adk/guuey.app.json +28 -0
- package/dist/templates/base/google-adk/guuey.app.schema.json +119 -0
- package/dist/templates/base/google-adk/guuey.json +15 -0
- package/dist/templates/base/google-adk/mcps/todo/Dockerfile +46 -0
- package/dist/templates/base/google-adk/mcps/todo/package.json +22 -0
- package/dist/templates/base/google-adk/mcps/todo/src/server.ts +173 -0
- package/dist/templates/base/google-adk/mcps/todo/tsconfig.json +15 -0
- package/dist/templates/base/google-adk/mcps/todo/tsup.config.ts +14 -0
- package/dist/templates/base/google-adk/package.json +30 -0
- package/dist/templates/base/google-adk/pnpm-workspace.yaml +34 -0
- package/dist/templates/base/google-adk/prompts/system.md +4 -0
- package/dist/templates/base/google-adk/scripts/bootstrap.mjs +398 -0
- package/dist/templates/base/google-adk/scripts/dev.mjs +45 -0
- package/dist/templates/base/google-adk/src/agent.ts +43 -0
- package/dist/templates/base/google-adk/tsconfig.json +15 -0
- package/dist/templates/base/google-adk/tsup.config.ts +13 -0
- package/dist/templates/base/google-adk/web/index.html +12 -0
- package/dist/templates/{google-adk → base/google-adk}/web/package.json +11 -8
- package/dist/templates/base/google-adk/web/src/components/AgentChat.tsx +91 -0
- package/dist/templates/base/google-adk/web/src/components/BootstrapGate.tsx +30 -0
- package/dist/templates/base/google-adk/web/src/components/QrLink.tsx +25 -0
- package/dist/templates/base/google-adk/web/src/components/Shell.tsx +50 -0
- package/dist/templates/base/google-adk/web/src/config.ts +148 -0
- package/dist/templates/base/google-adk/web/src/lib/identity.ts +67 -0
- package/dist/templates/base/google-adk/web/src/lib/oidc.ts +79 -0
- package/dist/templates/base/google-adk/web/src/lib/status.ts +45 -0
- package/dist/templates/base/google-adk/web/src/lib/widget.ts +96 -0
- package/dist/templates/base/google-adk/web/src/main.tsx +52 -0
- package/dist/templates/base/google-adk/web/src/pages/Chat.tsx +15 -0
- package/dist/templates/base/google-adk/web/src/pages/Home.tsx +133 -0
- package/dist/templates/base/google-adk/web/src/pages/Landing.tsx +65 -0
- package/dist/templates/base/google-adk/web/src/pages/Login.tsx +81 -0
- package/dist/templates/base/google-adk/web/src/routes.ts +7 -0
- package/dist/templates/base/google-adk/web/src/styles.css +248 -0
- package/dist/templates/base/google-adk/web/src/vite-env.d.ts +14 -0
- package/dist/templates/base/google-adk/web/tsconfig.json +18 -0
- package/dist/templates/base/google-adk/web/vite.config.ts +46 -0
- package/dist/templates/base/openai-agents-sdk/.env.example +4 -0
- package/dist/templates/base/openai-agents-sdk/.mcp.json +1 -0
- package/dist/templates/base/openai-agents-sdk/AGENTS.md +135 -0
- package/dist/templates/base/openai-agents-sdk/README.md +173 -0
- package/dist/templates/base/openai-agents-sdk/ggui/blueprints/.gitkeep +0 -0
- package/dist/templates/base/openai-agents-sdk/ggui/ggui.json +15 -0
- package/dist/templates/base/openai-agents-sdk/ggui/themes/.gitkeep +0 -0
- package/dist/templates/base/openai-agents-sdk/gitignore +5 -0
- package/dist/templates/base/openai-agents-sdk/guuey.app.json +28 -0
- package/dist/templates/base/openai-agents-sdk/guuey.app.schema.json +119 -0
- package/dist/templates/base/openai-agents-sdk/guuey.json +27 -0
- package/dist/templates/base/openai-agents-sdk/mcps/todo/Dockerfile +46 -0
- package/dist/templates/base/openai-agents-sdk/mcps/todo/package.json +22 -0
- package/dist/templates/base/openai-agents-sdk/mcps/todo/src/server.ts +173 -0
- package/dist/templates/base/openai-agents-sdk/mcps/todo/tsconfig.json +15 -0
- package/dist/templates/base/openai-agents-sdk/mcps/todo/tsup.config.ts +14 -0
- package/dist/templates/base/openai-agents-sdk/package.json +30 -0
- package/dist/templates/base/openai-agents-sdk/pnpm-workspace.yaml +24 -0
- package/dist/templates/base/openai-agents-sdk/prompts/system.md +4 -0
- package/dist/templates/base/openai-agents-sdk/scripts/bootstrap.mjs +398 -0
- package/dist/templates/base/openai-agents-sdk/scripts/dev.mjs +45 -0
- package/dist/templates/base/openai-agents-sdk/src/agent-config.ts +77 -0
- package/dist/templates/base/openai-agents-sdk/src/worker.ts +75 -0
- package/dist/templates/base/openai-agents-sdk/tsconfig.json +15 -0
- package/dist/templates/base/openai-agents-sdk/tsup.config.ts +16 -0
- package/dist/templates/base/openai-agents-sdk/web/index.html +12 -0
- package/dist/templates/{openai-agents-sdk → base/openai-agents-sdk}/web/package.json +11 -8
- package/dist/templates/base/openai-agents-sdk/web/src/components/AgentChat.tsx +91 -0
- package/dist/templates/base/openai-agents-sdk/web/src/components/BootstrapGate.tsx +30 -0
- package/dist/templates/base/openai-agents-sdk/web/src/components/QrLink.tsx +25 -0
- package/dist/templates/base/openai-agents-sdk/web/src/components/Shell.tsx +50 -0
- package/dist/templates/base/openai-agents-sdk/web/src/config.ts +148 -0
- package/dist/templates/base/openai-agents-sdk/web/src/lib/identity.ts +67 -0
- package/dist/templates/base/openai-agents-sdk/web/src/lib/oidc.ts +79 -0
- package/dist/templates/base/openai-agents-sdk/web/src/lib/status.ts +45 -0
- package/dist/templates/base/openai-agents-sdk/web/src/lib/widget.ts +96 -0
- package/dist/templates/base/openai-agents-sdk/web/src/main.tsx +52 -0
- package/dist/templates/base/openai-agents-sdk/web/src/pages/Chat.tsx +15 -0
- package/dist/templates/base/openai-agents-sdk/web/src/pages/Home.tsx +133 -0
- package/dist/templates/base/openai-agents-sdk/web/src/pages/Landing.tsx +65 -0
- package/dist/templates/base/openai-agents-sdk/web/src/pages/Login.tsx +81 -0
- package/dist/templates/base/openai-agents-sdk/web/src/routes.ts +7 -0
- package/dist/templates/base/openai-agents-sdk/web/src/styles.css +248 -0
- package/dist/templates/base/openai-agents-sdk/web/src/vite-env.d.ts +14 -0
- package/dist/templates/base/openai-agents-sdk/web/tsconfig.json +18 -0
- package/dist/templates/base/openai-agents-sdk/web/vite.config.ts +46 -0
- package/package.json +6 -3
- package/dist/templates/claude-agent-sdk/web/.env.example +0 -17
- package/dist/templates/claude-agent-sdk/web/sandbox-proxy.ts +0 -239
- package/dist/templates/claude-agent-sdk/web/src/App.tsx +0 -272
- package/dist/templates/claude-agent-sdk/web/src/main.tsx +0 -12
- package/dist/templates/claude-agent-sdk/web/src/useAgentChat.ts +0 -122
- package/dist/templates/claude-agent-sdk/web/src/vite-env.d.ts +0 -27
- package/dist/templates/claude-agent-sdk/web/tsconfig.json +0 -20
- package/dist/templates/claude-agent-sdk/web/vite.config.ts +0 -12
- package/dist/templates/google-adk/web/.env.example +0 -17
- package/dist/templates/google-adk/web/sandbox-proxy.ts +0 -239
- package/dist/templates/google-adk/web/src/App.tsx +0 -272
- package/dist/templates/google-adk/web/src/main.tsx +0 -12
- package/dist/templates/google-adk/web/src/useAgentChat.ts +0 -122
- package/dist/templates/google-adk/web/src/vite-env.d.ts +0 -27
- package/dist/templates/google-adk/web/tsconfig.json +0 -20
- package/dist/templates/google-adk/web/vite.config.ts +0 -12
- package/dist/templates/openai-agents-sdk/web/.env.example +0 -17
- package/dist/templates/openai-agents-sdk/web/sandbox-proxy.ts +0 -239
- package/dist/templates/openai-agents-sdk/web/src/App.tsx +0 -272
- package/dist/templates/openai-agents-sdk/web/src/main.tsx +0 -12
- package/dist/templates/openai-agents-sdk/web/src/useAgentChat.ts +0 -122
- package/dist/templates/openai-agents-sdk/web/src/vite-env.d.ts +0 -27
- package/dist/templates/openai-agents-sdk/web/tsconfig.json +0 -20
- package/dist/templates/openai-agents-sdk/web/vite.config.ts +0 -12
- /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/.env.example +0 -0
- /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/.mcp.json +0 -0
- /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/ggui/blueprints/.gitkeep +0 -0
- /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/ggui/ggui.json +0 -0
- /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/ggui/themes/.gitkeep +0 -0
- /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/guuey.json +0 -0
- /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/mcps/todo/Dockerfile +0 -0
- /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/mcps/todo/package.json +0 -0
- /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/mcps/todo/src/server.ts +0 -0
- /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/mcps/todo/tsconfig.json +0 -0
- /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/mcps/todo/tsup.config.ts +0 -0
- /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/pnpm-workspace.yaml +0 -0
- /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/prompts/system.md +0 -0
- /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/scripts/dev.mjs +0 -0
- /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/src/agent-config.ts +0 -0
- /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/src/worker.ts +0 -0
- /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/tsconfig.json +0 -0
- /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/tsup.config.ts +0 -0
- /package/dist/templates/{google-adk → agentic-app/google-adk}/.env.example +0 -0
- /package/dist/templates/{google-adk → agentic-app/google-adk}/.mcp.json +0 -0
- /package/dist/templates/{google-adk → agentic-app/google-adk}/README.md +0 -0
- /package/dist/templates/{google-adk → agentic-app/google-adk}/ggui/blueprints/.gitkeep +0 -0
- /package/dist/templates/{google-adk → agentic-app/google-adk}/ggui/ggui.json +0 -0
- /package/dist/templates/{google-adk → agentic-app/google-adk}/ggui/themes/.gitkeep +0 -0
- /package/dist/templates/{google-adk → agentic-app/google-adk}/guuey.json +0 -0
- /package/dist/templates/{google-adk → agentic-app/google-adk}/mcps/todo/Dockerfile +0 -0
- /package/dist/templates/{google-adk → agentic-app/google-adk}/mcps/todo/package.json +0 -0
- /package/dist/templates/{google-adk → agentic-app/google-adk}/mcps/todo/src/server.ts +0 -0
- /package/dist/templates/{google-adk → agentic-app/google-adk}/mcps/todo/tsconfig.json +0 -0
- /package/dist/templates/{google-adk → agentic-app/google-adk}/mcps/todo/tsup.config.ts +0 -0
- /package/dist/templates/{google-adk → agentic-app/google-adk}/pnpm-workspace.yaml +0 -0
- /package/dist/templates/{google-adk → agentic-app/google-adk}/prompts/system.md +0 -0
- /package/dist/templates/{google-adk → agentic-app/google-adk}/scripts/dev.mjs +0 -0
- /package/dist/templates/{google-adk → agentic-app/google-adk}/src/agent.ts +0 -0
- /package/dist/templates/{google-adk → agentic-app/google-adk}/tsconfig.json +0 -0
- /package/dist/templates/{google-adk → agentic-app/google-adk}/tsup.config.ts +0 -0
- /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/.env.example +0 -0
- /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/.mcp.json +0 -0
- /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/ggui/blueprints/.gitkeep +0 -0
- /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/ggui/ggui.json +0 -0
- /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/ggui/themes/.gitkeep +0 -0
- /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/guuey.json +0 -0
- /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/mcps/todo/Dockerfile +0 -0
- /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/mcps/todo/package.json +0 -0
- /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/mcps/todo/src/server.ts +0 -0
- /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/mcps/todo/tsconfig.json +0 -0
- /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/mcps/todo/tsup.config.ts +0 -0
- /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/pnpm-workspace.yaml +0 -0
- /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/prompts/system.md +0 -0
- /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/scripts/dev.mjs +0 -0
- /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/src/agent-config.ts +0 -0
- /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/src/worker.ts +0 -0
- /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/tsconfig.json +0 -0
- /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/tsup.config.ts +0 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { StrictMode } from "react";
|
|
2
|
+
import { createRoot } from "react-dom/client";
|
|
3
|
+
import { createBrowserRouter, RouterProvider } from "react-router-dom";
|
|
4
|
+
import "@guuey/chat/styles.css";
|
|
5
|
+
import "./styles.css";
|
|
6
|
+
import { appConfig } from "./config";
|
|
7
|
+
import { BootstrapGate } from "./components/BootstrapGate";
|
|
8
|
+
import { Shell } from "./components/Shell";
|
|
9
|
+
import { Landing } from "./pages/Landing";
|
|
10
|
+
import { Login } from "./pages/Login";
|
|
11
|
+
import { Chat } from "./pages/Chat";
|
|
12
|
+
import { Home } from "./pages/Home";
|
|
13
|
+
|
|
14
|
+
// Site theme: one accent + light/dark, applied as CSS variables. The chat
|
|
15
|
+
// kit themes itself via its own tokens (see @guuey/chat theming docs).
|
|
16
|
+
document.documentElement.dataset.mode = appConfig.theme.mode;
|
|
17
|
+
document.documentElement.style.setProperty("--app-accent", appConfig.theme.accent);
|
|
18
|
+
document.title = appConfig.brand.name;
|
|
19
|
+
|
|
20
|
+
// Optional external script (the analytics-snippet pattern): a build-time
|
|
21
|
+
// env names a script URL and this app loads it — the demo tour rides this
|
|
22
|
+
// hook (its bundle lives OUTSIDE the template; guuey#303). The script can
|
|
23
|
+
// anchor on the `data-tour` attributes the pages carry and listen for the
|
|
24
|
+
// `demo:render-complete` CustomEvent the app shell dispatches when a
|
|
25
|
+
// generative view first lands on the canvas.
|
|
26
|
+
const tourSrc = import.meta.env.VITE_DEMO_TOUR_SRC;
|
|
27
|
+
if (tourSrc !== undefined && tourSrc !== "") {
|
|
28
|
+
const script = document.createElement("script");
|
|
29
|
+
script.src = tourSrc;
|
|
30
|
+
script.defer = true;
|
|
31
|
+
document.head.appendChild(script);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const router = createBrowserRouter([
|
|
35
|
+
{
|
|
36
|
+
element: <Shell />,
|
|
37
|
+
children: [
|
|
38
|
+
{ path: "/", element: <Landing /> },
|
|
39
|
+
{ path: "/login", element: <Login /> },
|
|
40
|
+
{ path: "/chat", element: <Chat /> },
|
|
41
|
+
{ path: "/home", element: <Home /> },
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
]);
|
|
45
|
+
|
|
46
|
+
createRoot(document.getElementById("root")!).render(
|
|
47
|
+
<StrictMode>
|
|
48
|
+
<BootstrapGate>
|
|
49
|
+
<RouterProvider router={router} />
|
|
50
|
+
</BootstrapGate>
|
|
51
|
+
</StrictMode>,
|
|
52
|
+
);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The embedded chat page — distribution way #2 in the flesh. In local dev
|
|
3
|
+
* this talks to `guuey dev --serve` (pnpm dev boots it); once linked it
|
|
4
|
+
* talks to the deployed agent pod. Generative-UI cards render inline via
|
|
5
|
+
* the chat kit's sandboxed default mount — no extra setup.
|
|
6
|
+
*/
|
|
7
|
+
import { AgentChat } from "../components/AgentChat";
|
|
8
|
+
|
|
9
|
+
export function Chat() {
|
|
10
|
+
return (
|
|
11
|
+
<main className="page chat-page">
|
|
12
|
+
<AgentChat className="chat-fill" />
|
|
13
|
+
</main>
|
|
14
|
+
);
|
|
15
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Home — the instructions page: live agent status + the three-ways
|
|
3
|
+
* distribution guide, every snippet carrying this app's REAL values (no
|
|
4
|
+
* "replace me" placeholders once linked).
|
|
5
|
+
*/
|
|
6
|
+
import { useEffect, useState } from "react";
|
|
7
|
+
import { Link } from "react-router-dom";
|
|
8
|
+
import { agentEndpointUrl, appConfig } from "../config";
|
|
9
|
+
import { CHAT_PATH } from "../routes";
|
|
10
|
+
import { probeAgent, type AgentProbe } from "../lib/status";
|
|
11
|
+
import { widgetSnippet } from "../lib/widget";
|
|
12
|
+
|
|
13
|
+
function chatSnippet(): string {
|
|
14
|
+
const endpoint = appConfig.link?.endpointUrl ?? "http://localhost:6790";
|
|
15
|
+
const api = appConfig.link?.apiBaseUrl ?? "http://localhost:6790";
|
|
16
|
+
const appId = appConfig.link?.appId ?? "local";
|
|
17
|
+
return [
|
|
18
|
+
`import { GuueyChat } from "@guuey/chat/react";`,
|
|
19
|
+
`import "@guuey/chat/styles.css";`,
|
|
20
|
+
``,
|
|
21
|
+
`<GuueyChat`,
|
|
22
|
+
` endpointUrl="${endpoint}"`,
|
|
23
|
+
` appId="${appId}"`,
|
|
24
|
+
` apiBaseUrl="${api}"`,
|
|
25
|
+
` getGuestSecret={() => myGuestSecret}`,
|
|
26
|
+
`/>`,
|
|
27
|
+
].join("\n");
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function Home() {
|
|
31
|
+
const [probe, setProbe] = useState<AgentProbe>({ state: "checking" });
|
|
32
|
+
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
let cancelled = false;
|
|
35
|
+
void probeAgent().then((result) => {
|
|
36
|
+
if (!cancelled) setProbe(result);
|
|
37
|
+
});
|
|
38
|
+
return () => {
|
|
39
|
+
cancelled = true;
|
|
40
|
+
};
|
|
41
|
+
}, []);
|
|
42
|
+
|
|
43
|
+
const link = appConfig.link;
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<main className="page home">
|
|
47
|
+
<section className="card">
|
|
48
|
+
<h2>Agent status</h2>
|
|
49
|
+
<dl className="facts">
|
|
50
|
+
<dt>Endpoint</dt>
|
|
51
|
+
<dd>
|
|
52
|
+
<code>{agentEndpointUrl()}</code>
|
|
53
|
+
</dd>
|
|
54
|
+
<dt>Reachability</dt>
|
|
55
|
+
<dd>
|
|
56
|
+
{probe.state === "checking" ? "checking…" : null}
|
|
57
|
+
{probe.state === "reachable" ? <span className="ok">reachable</span> : null}
|
|
58
|
+
{probe.state === "unreachable" ? <span className="calm">{probe.hint}</span> : null}
|
|
59
|
+
</dd>
|
|
60
|
+
{link ? (
|
|
61
|
+
<>
|
|
62
|
+
<dt>App</dt>
|
|
63
|
+
<dd>
|
|
64
|
+
<code>{link.appId}</code> ({link.env})
|
|
65
|
+
</dd>
|
|
66
|
+
{link.pageUrl ? (
|
|
67
|
+
<>
|
|
68
|
+
<dt>Agent's page</dt>
|
|
69
|
+
<dd>
|
|
70
|
+
<a href={link.pageUrl} target="_blank" rel="noreferrer">
|
|
71
|
+
{link.pageUrl}
|
|
72
|
+
</a>
|
|
73
|
+
</dd>
|
|
74
|
+
</>
|
|
75
|
+
) : null}
|
|
76
|
+
</>
|
|
77
|
+
) : (
|
|
78
|
+
<>
|
|
79
|
+
<dt>Deployment</dt>
|
|
80
|
+
<dd className="calm">
|
|
81
|
+
not linked yet — <code>pnpm bootstrap -- --link</code> binds a deployed guuey app
|
|
82
|
+
</dd>
|
|
83
|
+
</>
|
|
84
|
+
)}
|
|
85
|
+
</dl>
|
|
86
|
+
<p className="hint">
|
|
87
|
+
Full detail lives in the CLI: <code>pnpm status</code> (runs{" "}
|
|
88
|
+
<code>guuey apps get</code> + <code>guuey agent status</code>).
|
|
89
|
+
</p>
|
|
90
|
+
</section>
|
|
91
|
+
|
|
92
|
+
<section className="card">
|
|
93
|
+
<h2>Three ways your users reach this agent</h2>
|
|
94
|
+
|
|
95
|
+
<h3>1 · The widget, on any site</h3>
|
|
96
|
+
<p>One script tag gives any page the floating launcher.</p>
|
|
97
|
+
{link ? (
|
|
98
|
+
<pre>
|
|
99
|
+
<code>{widgetSnippet()}</code>
|
|
100
|
+
</pre>
|
|
101
|
+
) : (
|
|
102
|
+
<p className="calm">Snippet appears with real values after linking.</p>
|
|
103
|
+
)}
|
|
104
|
+
|
|
105
|
+
<h3>2 · Embedded chat, inside your app</h3>
|
|
106
|
+
<p>
|
|
107
|
+
The <code>@guuey/chat</code> kit, running on the <Link to={CHAT_PATH}>Chat page</Link> of
|
|
108
|
+
this very app:
|
|
109
|
+
</p>
|
|
110
|
+
<pre>
|
|
111
|
+
<code>{chatSnippet()}</code>
|
|
112
|
+
</pre>
|
|
113
|
+
|
|
114
|
+
<h3>3 · The guuey portal</h3>
|
|
115
|
+
{link?.slug ? (
|
|
116
|
+
<p>
|
|
117
|
+
Users can find and chat with this agent in the portal:{" "}
|
|
118
|
+
<a href={`${link.portalUrl}/agent/${link.slug}`} target="_blank" rel="noreferrer">
|
|
119
|
+
{link.portalUrl}/agent/{link.slug}
|
|
120
|
+
</a>
|
|
121
|
+
</p>
|
|
122
|
+
) : link ? (
|
|
123
|
+
<p className="calm">
|
|
124
|
+
Claim a public short name first — <code>guuey slug claim <name></code> — then the
|
|
125
|
+
portal link (and the agent's own page) light up.
|
|
126
|
+
</p>
|
|
127
|
+
) : (
|
|
128
|
+
<p className="calm">Available after linking a deployed app.</p>
|
|
129
|
+
)}
|
|
130
|
+
</section>
|
|
131
|
+
</main>
|
|
132
|
+
);
|
|
133
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Landing — the widget IS the hero (distribution way #1). On a linked app
|
|
3
|
+
* the real guuey widget launcher mounts in the corner; before linking, an
|
|
4
|
+
* honest placeholder explains what will appear here.
|
|
5
|
+
*/
|
|
6
|
+
import { useEffect, useState } from "react";
|
|
7
|
+
import { Link } from "react-router-dom";
|
|
8
|
+
import { appConfig, isLinked } from "../config";
|
|
9
|
+
import { CHAT_PATH, HOME_PATH } from "../routes";
|
|
10
|
+
import { mountWidget, type WidgetOutcome } from "../lib/widget";
|
|
11
|
+
import { QrLink } from "../components/QrLink";
|
|
12
|
+
|
|
13
|
+
export function Landing() {
|
|
14
|
+
const [widget, setWidget] = useState<WidgetOutcome | "unlinked" | "loading">(
|
|
15
|
+
isLinked ? "loading" : "unlinked",
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (!isLinked) return;
|
|
20
|
+
mountWidget((outcome) => setWidget(outcome));
|
|
21
|
+
}, []);
|
|
22
|
+
|
|
23
|
+
// The demo posture (spec §2.3): a REAL product site whose hero's one job
|
|
24
|
+
// is getting the visitor INTO the demo — big CTA to the console page +
|
|
25
|
+
// a QR to continue on mobile via the portal.
|
|
26
|
+
const portalTarget =
|
|
27
|
+
appConfig.link !== null
|
|
28
|
+
? `${appConfig.link.portalUrl}/agent/${appConfig.link.slug ?? appConfig.link.appId}`
|
|
29
|
+
: null;
|
|
30
|
+
|
|
31
|
+
return (
|
|
32
|
+
<main className="page landing">
|
|
33
|
+
<section className="hero" data-tour="hero">
|
|
34
|
+
<h1>{appConfig.copy.landing.headline}</h1>
|
|
35
|
+
<p>{appConfig.copy.landing.sub}</p>
|
|
36
|
+
<div className="hero-actions">
|
|
37
|
+
<Link to={CHAT_PATH} className="btn btn-accent">
|
|
38
|
+
{appConfig.demoMode ? "Enter the demo" : "Open the chat"}
|
|
39
|
+
</Link>
|
|
40
|
+
<Link to={HOME_PATH} className="btn">
|
|
41
|
+
How this app is wired
|
|
42
|
+
</Link>
|
|
43
|
+
</div>
|
|
44
|
+
{appConfig.demoMode && portalTarget !== null ? (
|
|
45
|
+
<div className="hero-qr">
|
|
46
|
+
<p className="hint">Or continue on your phone:</p>
|
|
47
|
+
<QrLink url={portalTarget} size={140} />
|
|
48
|
+
</div>
|
|
49
|
+
) : null}
|
|
50
|
+
{widget === "unlinked" ? (
|
|
51
|
+
<p className="hint">
|
|
52
|
+
The floating agent launcher appears here once the app is bound to a
|
|
53
|
+
deployed guuey agent — <code>pnpm bootstrap -- --link</code>.
|
|
54
|
+
</p>
|
|
55
|
+
) : null}
|
|
56
|
+
{widget === "offline" ? (
|
|
57
|
+
<p className="hint">
|
|
58
|
+
Widget script failed to load from this environment — check the app's
|
|
59
|
+
Allowed Domains include this site.
|
|
60
|
+
</p>
|
|
61
|
+
) : null}
|
|
62
|
+
</section>
|
|
63
|
+
</main>
|
|
64
|
+
);
|
|
65
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Login — two doors, one identity rule (never both at once):
|
|
3
|
+
*
|
|
4
|
+
* - "Continue as guest": one click, no account. A per-browser secret is
|
|
5
|
+
* minted locally; the agent remembers this browser across visits.
|
|
6
|
+
* - "Sign in": the BYO-OIDC seam. Active only when `auth.oidc` is
|
|
7
|
+
* configured in guuey.app.json (any spec-compliant IdP — this is where a
|
|
8
|
+
* "Sign in with Google" plugs in). The bound guuey app must be in BYO
|
|
9
|
+
* auth mode for the same issuer.
|
|
10
|
+
*/
|
|
11
|
+
import { useEffect, useRef, useState } from "react";
|
|
12
|
+
import { useNavigate } from "react-router-dom";
|
|
13
|
+
import { appConfig } from "../config";
|
|
14
|
+
import { CHAT_PATH } from "../routes";
|
|
15
|
+
import { continueAsGuest, setIdentityMode } from "../lib/identity";
|
|
16
|
+
import { completeSignIn, isSigninCallback, oidcConfigured, signIn, signOutOidc } from "../lib/oidc";
|
|
17
|
+
|
|
18
|
+
export function Login() {
|
|
19
|
+
const navigate = useNavigate();
|
|
20
|
+
const [error, setError] = useState<string | null>(null);
|
|
21
|
+
const [completing, setCompleting] = useState(isSigninCallback());
|
|
22
|
+
// One-shot: StrictMode double-invokes effects in dev, and the OIDC
|
|
23
|
+
// authorization code is single-use — a second signinCallback() would
|
|
24
|
+
// double-spend it and flash a bogus failure.
|
|
25
|
+
const callbackStarted = useRef(false);
|
|
26
|
+
|
|
27
|
+
// Finish the redirect flow when the IdP sent us back here.
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
if (!isSigninCallback() || callbackStarted.current) return;
|
|
30
|
+
callbackStarted.current = true;
|
|
31
|
+
completeSignIn()
|
|
32
|
+
.then(() => {
|
|
33
|
+
setIdentityMode("oidc");
|
|
34
|
+
navigate(CHAT_PATH, { replace: true });
|
|
35
|
+
})
|
|
36
|
+
.catch((err: unknown) => {
|
|
37
|
+
setCompleting(false);
|
|
38
|
+
setError(err instanceof Error ? err.message : String(err));
|
|
39
|
+
});
|
|
40
|
+
}, [navigate]);
|
|
41
|
+
|
|
42
|
+
function guest() {
|
|
43
|
+
// One identity mode per surface: an explicit guest choice also drops
|
|
44
|
+
// any cached OIDC session, so a stale bearer can never shadow it.
|
|
45
|
+
void signOutOidc();
|
|
46
|
+
continueAsGuest();
|
|
47
|
+
navigate(CHAT_PATH);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (completing) {
|
|
51
|
+
return (
|
|
52
|
+
<main className="page login">
|
|
53
|
+
<div className="login-card">
|
|
54
|
+
<p>Completing sign-in…</p>
|
|
55
|
+
</div>
|
|
56
|
+
</main>
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return (
|
|
61
|
+
<main className="page login">
|
|
62
|
+
<div className="login-card">
|
|
63
|
+
<h1>Welcome to {appConfig.brand.name}</h1>
|
|
64
|
+
{oidcConfigured() ? (
|
|
65
|
+
<button type="button" className="btn btn-accent btn-wide" onClick={() => void signIn()}>
|
|
66
|
+
Sign in
|
|
67
|
+
</button>
|
|
68
|
+
) : (
|
|
69
|
+
<button type="button" className="btn btn-wide" disabled title="Configure auth.oidc in guuey.app.json (or via bootstrap) to enable sign-in">
|
|
70
|
+
Sign in — not configured yet
|
|
71
|
+
</button>
|
|
72
|
+
)}
|
|
73
|
+
<button type="button" className="btn btn-wide" onClick={guest}>
|
|
74
|
+
Continue as guest
|
|
75
|
+
</button>
|
|
76
|
+
<p className="hint">{appConfig.copy.login.guestHint}</p>
|
|
77
|
+
{error ? <p className="error">Sign-in failed: {error}</p> : null}
|
|
78
|
+
</div>
|
|
79
|
+
</main>
|
|
80
|
+
);
|
|
81
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route constants shared by the chrome and pages. The agentic-app template
|
|
3
|
+
* overlays this file (its chat lives at /app/agent inside the app shell) —
|
|
4
|
+
* link via these constants, never hard-code the paths in components.
|
|
5
|
+
*/
|
|
6
|
+
export const CHAT_PATH = "/chat";
|
|
7
|
+
export const HOME_PATH = "/home";
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/* agentic-app-template site styles — one accent, light/dark, no framework. */
|
|
2
|
+
|
|
3
|
+
:root {
|
|
4
|
+
--app-accent: #6c5ce7;
|
|
5
|
+
--bg: #ffffff;
|
|
6
|
+
--bg-soft: #f6f7f9;
|
|
7
|
+
--fg: #16181d;
|
|
8
|
+
--fg-soft: #5b6270;
|
|
9
|
+
--line: #e4e7ec;
|
|
10
|
+
--ok: #1a7f37;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
:root[data-mode="dark"] {
|
|
14
|
+
--bg: #101216;
|
|
15
|
+
--bg-soft: #181b21;
|
|
16
|
+
--fg: #e8eaee;
|
|
17
|
+
--fg-soft: #9aa2b1;
|
|
18
|
+
--line: #262a33;
|
|
19
|
+
--ok: #3fb950;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
* {
|
|
23
|
+
box-sizing: border-box;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
body {
|
|
27
|
+
margin: 0;
|
|
28
|
+
font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
|
|
29
|
+
background: var(--bg);
|
|
30
|
+
color: var(--fg);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
code,
|
|
34
|
+
pre {
|
|
35
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
36
|
+
font-size: 0.9em;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
pre {
|
|
40
|
+
background: var(--bg-soft);
|
|
41
|
+
border: 1px solid var(--line);
|
|
42
|
+
border-radius: 8px;
|
|
43
|
+
padding: 12px 14px;
|
|
44
|
+
overflow-x: auto;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
a {
|
|
48
|
+
color: var(--app-accent);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.shell {
|
|
52
|
+
min-height: 100vh;
|
|
53
|
+
display: flex;
|
|
54
|
+
flex-direction: column;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.topbar {
|
|
58
|
+
display: flex;
|
|
59
|
+
align-items: center;
|
|
60
|
+
justify-content: space-between;
|
|
61
|
+
padding: 12px 24px;
|
|
62
|
+
border-bottom: 1px solid var(--line);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.brand {
|
|
66
|
+
display: flex;
|
|
67
|
+
align-items: center;
|
|
68
|
+
gap: 10px;
|
|
69
|
+
font-weight: 700;
|
|
70
|
+
color: var(--fg);
|
|
71
|
+
text-decoration: none;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.brand-mark {
|
|
75
|
+
display: inline-flex;
|
|
76
|
+
align-items: center;
|
|
77
|
+
justify-content: center;
|
|
78
|
+
width: 30px;
|
|
79
|
+
height: 30px;
|
|
80
|
+
border-radius: 8px;
|
|
81
|
+
background: var(--app-accent);
|
|
82
|
+
color: #fff;
|
|
83
|
+
font-size: 13px;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.topbar nav {
|
|
87
|
+
display: flex;
|
|
88
|
+
align-items: center;
|
|
89
|
+
gap: 16px;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.topbar nav a {
|
|
93
|
+
color: var(--fg-soft);
|
|
94
|
+
text-decoration: none;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.topbar nav a.active {
|
|
98
|
+
color: var(--fg);
|
|
99
|
+
font-weight: 600;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.btn {
|
|
103
|
+
display: inline-flex;
|
|
104
|
+
align-items: center;
|
|
105
|
+
justify-content: center;
|
|
106
|
+
padding: 8px 16px;
|
|
107
|
+
border-radius: 8px;
|
|
108
|
+
border: 1px solid var(--line);
|
|
109
|
+
background: var(--bg);
|
|
110
|
+
color: var(--fg);
|
|
111
|
+
font-size: 14px;
|
|
112
|
+
cursor: pointer;
|
|
113
|
+
text-decoration: none;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.btn:disabled {
|
|
117
|
+
opacity: 0.5;
|
|
118
|
+
cursor: not-allowed;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.btn-accent {
|
|
122
|
+
background: var(--app-accent);
|
|
123
|
+
border-color: var(--app-accent);
|
|
124
|
+
color: #fff;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.btn-wide {
|
|
128
|
+
width: 100%;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.page {
|
|
132
|
+
flex: 1;
|
|
133
|
+
width: 100%;
|
|
134
|
+
max-width: 880px;
|
|
135
|
+
margin: 0 auto;
|
|
136
|
+
padding: 32px 24px;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.hero {
|
|
140
|
+
text-align: center;
|
|
141
|
+
padding: 64px 0;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.hero h1 {
|
|
145
|
+
font-size: 44px;
|
|
146
|
+
margin: 0 0 12px;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.hero p {
|
|
150
|
+
color: var(--fg-soft);
|
|
151
|
+
font-size: 18px;
|
|
152
|
+
margin: 0 0 28px;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.hero-actions {
|
|
156
|
+
display: flex;
|
|
157
|
+
gap: 12px;
|
|
158
|
+
justify-content: center;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.login {
|
|
162
|
+
display: flex;
|
|
163
|
+
justify-content: center;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.login-card,
|
|
167
|
+
.gate-card {
|
|
168
|
+
width: 100%;
|
|
169
|
+
max-width: 380px;
|
|
170
|
+
margin-top: 48px;
|
|
171
|
+
padding: 28px;
|
|
172
|
+
border: 1px solid var(--line);
|
|
173
|
+
border-radius: 12px;
|
|
174
|
+
background: var(--bg-soft);
|
|
175
|
+
display: flex;
|
|
176
|
+
flex-direction: column;
|
|
177
|
+
gap: 12px;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.gate {
|
|
181
|
+
min-height: 100vh;
|
|
182
|
+
display: flex;
|
|
183
|
+
justify-content: center;
|
|
184
|
+
background: var(--bg);
|
|
185
|
+
color: var(--fg);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.gate-card {
|
|
189
|
+
max-width: 520px;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.chat-page {
|
|
193
|
+
display: flex;
|
|
194
|
+
max-width: 880px;
|
|
195
|
+
height: calc(100vh - 61px);
|
|
196
|
+
padding: 16px 24px 24px;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.chat-fill {
|
|
200
|
+
flex: 1;
|
|
201
|
+
min-height: 0;
|
|
202
|
+
border: 1px solid var(--line);
|
|
203
|
+
border-radius: 12px;
|
|
204
|
+
overflow: hidden;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.card {
|
|
208
|
+
border: 1px solid var(--line);
|
|
209
|
+
border-radius: 12px;
|
|
210
|
+
padding: 20px 24px;
|
|
211
|
+
margin-bottom: 24px;
|
|
212
|
+
background: var(--bg);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.facts {
|
|
216
|
+
display: grid;
|
|
217
|
+
grid-template-columns: 140px 1fr;
|
|
218
|
+
gap: 8px 16px;
|
|
219
|
+
margin: 0;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.facts dt {
|
|
223
|
+
color: var(--fg-soft);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.facts dd {
|
|
227
|
+
margin: 0;
|
|
228
|
+
overflow-wrap: anywhere;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
.ok {
|
|
232
|
+
color: var(--ok);
|
|
233
|
+
font-weight: 600;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.calm {
|
|
237
|
+
color: var(--fg-soft);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.hint {
|
|
241
|
+
color: var(--fg-soft);
|
|
242
|
+
font-size: 14px;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.error {
|
|
246
|
+
color: #c0392b;
|
|
247
|
+
font-size: 14px;
|
|
248
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/// <reference types="vite/client" />
|
|
2
|
+
|
|
3
|
+
interface ImportMetaEnv {
|
|
4
|
+
/**
|
|
5
|
+
* Optional external-script hook (guuey#303): a URL loaded at boot — the
|
|
6
|
+
* demo tour's bundle rides this in the demo apps; unset in customer
|
|
7
|
+
* builds.
|
|
8
|
+
*/
|
|
9
|
+
readonly VITE_DEMO_TOUR_SRC?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface ImportMeta {
|
|
13
|
+
readonly env: ImportMetaEnv;
|
|
14
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"lib": ["ES2022", "DOM", "DOM.Iterable"],
|
|
5
|
+
"module": "ESNext",
|
|
6
|
+
"moduleResolution": "bundler",
|
|
7
|
+
"resolveJsonModule": true,
|
|
8
|
+
"esModuleInterop": true,
|
|
9
|
+
"jsx": "react-jsx",
|
|
10
|
+
"strict": true,
|
|
11
|
+
"noUncheckedIndexedAccess": true,
|
|
12
|
+
"noEmit": true,
|
|
13
|
+
"skipLibCheck": true,
|
|
14
|
+
"isolatedModules": true,
|
|
15
|
+
"types": ["vite/client", "node"]
|
|
16
|
+
},
|
|
17
|
+
"include": ["src", "vite.config.ts", "../guuey.app.json"]
|
|
18
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { join, dirname } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { defineConfig, type Plugin } from "vite";
|
|
5
|
+
import react from "@vitejs/plugin-react";
|
|
6
|
+
|
|
7
|
+
const projectRoot = join(dirname(fileURLToPath(import.meta.url)), "..");
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Fail-loud production gate (never a half-styled deploy): `pnpm bootstrap`
|
|
11
|
+
* not run yet → the BUILD fails with the exact command. An UNLINKED build
|
|
12
|
+
* is allowed — the pages state the missing binding honestly — but gets a
|
|
13
|
+
* loud warning, since a deployed frontend without a bound guuey app has no
|
|
14
|
+
* live agent to talk to.
|
|
15
|
+
*
|
|
16
|
+
* Dev is NOT gated here — `src/components/BootstrapGate.tsx` renders the
|
|
17
|
+
* "run bootstrap first" screen instead, so `pnpm dev` always starts.
|
|
18
|
+
*/
|
|
19
|
+
function bootstrapGatePlugin(): Plugin {
|
|
20
|
+
return {
|
|
21
|
+
name: "guuey-bootstrap-gate",
|
|
22
|
+
apply: "build",
|
|
23
|
+
buildStart() {
|
|
24
|
+
const raw = readFileSync(join(projectRoot, "guuey.app.json"), "utf8");
|
|
25
|
+
const app = JSON.parse(raw) as { bootstrapped?: boolean; link?: object | null };
|
|
26
|
+
if (app.bootstrapped !== true) {
|
|
27
|
+
throw new Error(
|
|
28
|
+
"guuey.app.json is not bootstrapped — run `pnpm bootstrap` at the project root first.",
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
if (!app.link) {
|
|
32
|
+
console.warn(
|
|
33
|
+
"[guuey-bootstrap-gate] building WITHOUT a bound guuey app — the deployed site will have " +
|
|
34
|
+
"no live agent until you run `pnpm bootstrap -- --link --app-id <appId>` and rebuild.",
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Port is passed via the `dev` script's `--port 6890` flag (see package.json)
|
|
42
|
+
// so it stays visible in one place; `scripts/dev.mjs` boots this on the same
|
|
43
|
+
// port.
|
|
44
|
+
export default defineConfig({
|
|
45
|
+
plugins: [react(), bootstrapGatePlugin()],
|
|
46
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "mcpServers": { "ggui-dev": { "type": "http", "url": "https://mcp.ggui.ai/dev" } } }
|