@guuey/create-agentic-app 0.8.1 → 0.10.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 +17 -3
- 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 +376 -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 +28 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/components/AgentChat.tsx +53 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/components/AppShell.tsx +65 -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/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 +52 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/pages/AgentCanvas.tsx +14 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/pages/Dashboard.tsx +36 -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 +50 -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 +50 -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 +132 -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 +1 -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 +376 -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 +28 -0
- package/dist/templates/agentic-app/google-adk/web/src/components/AgentChat.tsx +53 -0
- package/dist/templates/agentic-app/google-adk/web/src/components/AppShell.tsx +65 -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/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 +52 -0
- package/dist/templates/agentic-app/google-adk/web/src/pages/AgentCanvas.tsx +14 -0
- package/dist/templates/agentic-app/google-adk/web/src/pages/Dashboard.tsx +36 -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 +50 -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 +50 -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 +132 -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 +1 -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 +17 -3
- 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 +376 -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 +28 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/components/AgentChat.tsx +53 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/components/AppShell.tsx +65 -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/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 +52 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/pages/AgentCanvas.tsx +14 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/pages/Dashboard.tsx +36 -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 +50 -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 +50 -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 +132 -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 +1 -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 +171 -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 +376 -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 +9 -8
- package/dist/templates/base/claude-agent-sdk/web/src/components/AgentChat.tsx +53 -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/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 +38 -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 +50 -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 +1 -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 +376 -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 +9 -8
- package/dist/templates/base/google-adk/web/src/components/AgentChat.tsx +53 -0
- package/dist/templates/base/google-adk/web/src/components/BootstrapGate.tsx +30 -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 +38 -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 +50 -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 +1 -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 +171 -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 +376 -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 +9 -8
- package/dist/templates/base/openai-agents-sdk/web/src/components/AgentChat.tsx +53 -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/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 +38 -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 +50 -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 +1 -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
package/dist/index.cjs
CHANGED
|
@@ -22,6 +22,7 @@ var index_exports = {};
|
|
|
22
22
|
__export(index_exports, {
|
|
23
23
|
isNpmSafeName: () => isNpmSafeName,
|
|
24
24
|
scaffold: () => scaffold,
|
|
25
|
+
scaffoldExample: () => scaffoldExample,
|
|
25
26
|
scaffoldMcp: () => scaffoldMcp
|
|
26
27
|
});
|
|
27
28
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -86,27 +87,33 @@ var execFileAsync = (0, import_node_util.promisify)(import_node_child_process.ex
|
|
|
86
87
|
var here = (0, import_node_path.dirname)((0, import_node_url.fileURLToPath)(import_meta.url));
|
|
87
88
|
var packageRoot = (0, import_node_path.join)(here, "..");
|
|
88
89
|
var defaultTemplatesDir = (0, import_node_path.join)(packageRoot, "dist", "templates");
|
|
89
|
-
async function
|
|
90
|
+
async function listDirs(root) {
|
|
90
91
|
try {
|
|
91
|
-
const entries = await import_node_fs2.promises.readdir(
|
|
92
|
+
const entries = await import_node_fs2.promises.readdir(root, { withFileTypes: true });
|
|
92
93
|
return entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name);
|
|
93
94
|
} catch (err) {
|
|
94
95
|
if (isErrnoException(err) && err.code === "ENOENT") return [];
|
|
95
96
|
throw err;
|
|
96
97
|
}
|
|
97
98
|
}
|
|
98
|
-
async function resolveTemplateDir(templatesDir, framework) {
|
|
99
|
-
const dir = (0, import_node_path.join)(templatesDir, framework);
|
|
99
|
+
async function resolveTemplateDir(templatesDir, template, framework) {
|
|
100
|
+
const dir = (0, import_node_path.join)(templatesDir, template, framework);
|
|
100
101
|
if (await pathExists(dir)) return dir;
|
|
101
|
-
const
|
|
102
|
-
|
|
102
|
+
const templates = (await listDirs(templatesDir)).filter((name) => name !== "mcp-base");
|
|
103
|
+
if (!templates.includes(template)) {
|
|
104
|
+
const list2 = templates.length > 0 ? templates.join(", ") : `(none found under ${templatesDir})`;
|
|
105
|
+
throw new Error(`No template "${template}". Available templates: ${list2}`);
|
|
106
|
+
}
|
|
107
|
+
const frameworks = await listDirs((0, import_node_path.join)(templatesDir, template));
|
|
108
|
+
const list = frameworks.length > 0 ? frameworks.join(", ") : `(none found under ${(0, import_node_path.join)(templatesDir, template)})`;
|
|
103
109
|
throw new Error(`No template for framework "${framework}". Available frameworks: ${list}`);
|
|
104
110
|
}
|
|
105
111
|
async function copyTree(src, dest, name, scope) {
|
|
106
112
|
await import_node_fs2.promises.mkdir(dest, { recursive: true });
|
|
107
113
|
const entries = await import_node_fs2.promises.readdir(src, { withFileTypes: true });
|
|
108
114
|
for (const entry of entries) {
|
|
109
|
-
const
|
|
115
|
+
const rawName = entry.name === "gitignore" ? ".gitignore" : entry.name;
|
|
116
|
+
const destName = renameContent(rawName, name, scope);
|
|
110
117
|
const srcPath = (0, import_node_path.join)(src, entry.name);
|
|
111
118
|
const destPath = (0, import_node_path.join)(dest, destName);
|
|
112
119
|
if (entry.isDirectory()) {
|
|
@@ -168,7 +175,7 @@ async function scaffold(opts) {
|
|
|
168
175
|
assertNpmSafeName(opts.name, "project");
|
|
169
176
|
const scope = opts.scope ?? opts.name;
|
|
170
177
|
const templatesDir = opts.templatesDir ?? defaultTemplatesDir;
|
|
171
|
-
const templateDir = await resolveTemplateDir(templatesDir, opts.framework);
|
|
178
|
+
const templateDir = await resolveTemplateDir(templatesDir, opts.template ?? "base", opts.framework);
|
|
172
179
|
const projectDir = (0, import_node_path.resolve)(opts.targetDir);
|
|
173
180
|
await ensureTargetDir(projectDir, opts.force);
|
|
174
181
|
await copyTree(templateDir, projectDir, opts.name, scope);
|
|
@@ -182,32 +189,100 @@ async function scaffold(opts) {
|
|
|
182
189
|
return { projectDir };
|
|
183
190
|
}
|
|
184
191
|
|
|
185
|
-
// src/scaffold-
|
|
192
|
+
// src/scaffold-example.ts
|
|
186
193
|
var import_node_fs3 = require("fs");
|
|
187
194
|
var import_node_path2 = require("path");
|
|
195
|
+
var import_promises = require("stream/promises");
|
|
196
|
+
var import_node_stream = require("stream");
|
|
197
|
+
var import_node_os = require("os");
|
|
198
|
+
var import_tar = require("tar");
|
|
199
|
+
var EXAMPLES_REPO = "withguuey/demos";
|
|
200
|
+
var EXAMPLES_REF = "main";
|
|
201
|
+
var TARBALL_URL = `https://codeload.github.com/${EXAMPLES_REPO}/tar.gz/${EXAMPLES_REF}`;
|
|
202
|
+
async function defaultFetchTarball() {
|
|
203
|
+
const res = await fetch(TARBALL_URL);
|
|
204
|
+
if (!res.ok) {
|
|
205
|
+
throw new Error(
|
|
206
|
+
`Could not download ${EXAMPLES_REPO} (${res.status} from codeload.github.com). Check your network; the manual alternative is: npx degit ${EXAMPLES_REPO}/<example>`
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
return import_node_stream.Readable.from(Buffer.from(await res.arrayBuffer()));
|
|
210
|
+
}
|
|
211
|
+
async function saveTarball(fetchTarball) {
|
|
212
|
+
const file = (0, import_node_path2.join)(await import_node_fs3.promises.mkdtemp((0, import_node_path2.join)((0, import_node_os.tmpdir)(), "guuey-example-")), "demos.tar.gz");
|
|
213
|
+
await (0, import_promises.pipeline)(await fetchTarball(), (0, import_node_fs3.createWriteStream)(file));
|
|
214
|
+
return file;
|
|
215
|
+
}
|
|
216
|
+
async function listTarball(file) {
|
|
217
|
+
let root = null;
|
|
218
|
+
const examples = /* @__PURE__ */ new Set();
|
|
219
|
+
await (0, import_tar.t)({
|
|
220
|
+
file,
|
|
221
|
+
onReadEntry: (entry) => {
|
|
222
|
+
const segments = entry.path.split("/").filter(Boolean);
|
|
223
|
+
const first = segments[0];
|
|
224
|
+
if (first === void 0) return;
|
|
225
|
+
root ??= first;
|
|
226
|
+
const second = segments[1];
|
|
227
|
+
if (second !== void 0 && segments[2] === "guuey.json") examples.add(second);
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
if (root === null) throw new Error(`The ${EXAMPLES_REPO} tarball was empty.`);
|
|
231
|
+
return { root, examples: [...examples].sort() };
|
|
232
|
+
}
|
|
233
|
+
async function scaffoldExample(opts) {
|
|
234
|
+
const tarball = await saveTarball(opts.fetchTarball ?? defaultFetchTarball);
|
|
235
|
+
const { root, examples } = await listTarball(tarball);
|
|
236
|
+
if (!examples.includes(opts.example)) {
|
|
237
|
+
const list = examples.length > 0 ? examples.join(", ") : "(none published yet)";
|
|
238
|
+
throw new Error(`No example "${opts.example}" in ${EXAMPLES_REPO}. Available: ${list}`);
|
|
239
|
+
}
|
|
240
|
+
const projectDir = (0, import_node_path2.resolve)(opts.targetDir);
|
|
241
|
+
await ensureTargetDir(projectDir, opts.force);
|
|
242
|
+
const prefix = `${root}/${opts.example}/`;
|
|
243
|
+
await (0, import_tar.x)({
|
|
244
|
+
file: tarball,
|
|
245
|
+
cwd: projectDir,
|
|
246
|
+
strip: 2,
|
|
247
|
+
filter: (path) => path.startsWith(prefix)
|
|
248
|
+
});
|
|
249
|
+
if (!await pathExists((0, import_node_path2.join)(projectDir, "guuey.json"))) {
|
|
250
|
+
throw new Error(
|
|
251
|
+
`Extraction produced no guuey.json in ${projectDir} \u2014 the "${opts.example}" example looks malformed; please report this.`
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
await seedEnvLocal(projectDir);
|
|
255
|
+
if (opts.git !== false) await initGit(projectDir);
|
|
256
|
+
if (opts.install) await runInstall(projectDir);
|
|
257
|
+
return { projectDir };
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// src/scaffold-mcp.ts
|
|
261
|
+
var import_node_fs4 = require("fs");
|
|
262
|
+
var import_node_path3 = require("path");
|
|
188
263
|
var import_node_url2 = require("url");
|
|
189
264
|
var import_meta2 = {};
|
|
190
|
-
var here2 = (0,
|
|
191
|
-
var packageRoot2 = (0,
|
|
192
|
-
var defaultTemplatesDir2 = (0,
|
|
265
|
+
var here2 = (0, import_node_path3.dirname)((0, import_node_url2.fileURLToPath)(import_meta2.url));
|
|
266
|
+
var packageRoot2 = (0, import_node_path3.join)(here2, "..");
|
|
267
|
+
var defaultTemplatesDir2 = (0, import_node_path3.join)(packageRoot2, "dist", "templates");
|
|
193
268
|
function renameMcpTokens(content, name, scope) {
|
|
194
269
|
return renameContent(content.replaceAll("NAME_PLACEHOLDER", name), scope, scope);
|
|
195
270
|
}
|
|
196
271
|
async function copyMcpTree(src, dest, name, scope) {
|
|
197
|
-
await
|
|
198
|
-
const entries = await
|
|
272
|
+
await import_node_fs4.promises.mkdir(dest, { recursive: true });
|
|
273
|
+
const entries = await import_node_fs4.promises.readdir(src, { withFileTypes: true });
|
|
199
274
|
for (const entry of entries) {
|
|
200
275
|
const destName = renameMcpTokens(entry.name, name, scope);
|
|
201
|
-
const srcPath = (0,
|
|
202
|
-
const destPath = (0,
|
|
276
|
+
const srcPath = (0, import_node_path3.join)(src, entry.name);
|
|
277
|
+
const destPath = (0, import_node_path3.join)(dest, destName);
|
|
203
278
|
if (entry.isDirectory()) {
|
|
204
279
|
await copyMcpTree(srcPath, destPath, name, scope);
|
|
205
280
|
} else {
|
|
206
|
-
const buf = await
|
|
281
|
+
const buf = await import_node_fs4.promises.readFile(srcPath);
|
|
207
282
|
if (isProbablyText(buf)) {
|
|
208
|
-
await
|
|
283
|
+
await import_node_fs4.promises.writeFile(destPath, renameMcpTokens(buf.toString("utf8"), name, scope), "utf8");
|
|
209
284
|
} else {
|
|
210
|
-
await
|
|
285
|
+
await import_node_fs4.promises.writeFile(destPath, buf);
|
|
211
286
|
}
|
|
212
287
|
}
|
|
213
288
|
}
|
|
@@ -216,11 +291,11 @@ async function scaffoldMcp(opts) {
|
|
|
216
291
|
assertNpmSafeName(opts.name, "MCP");
|
|
217
292
|
const scope = opts.scope ?? opts.name;
|
|
218
293
|
const templatesDir = opts.templatesDir ?? defaultTemplatesDir2;
|
|
219
|
-
const templateDir = (0,
|
|
294
|
+
const templateDir = (0, import_node_path3.join)(templatesDir, "mcp-base");
|
|
220
295
|
if (!await pathExists(templateDir)) {
|
|
221
296
|
throw new Error(`No mcp-base template found at ${templateDir}.`);
|
|
222
297
|
}
|
|
223
|
-
const mcpDir = (0,
|
|
298
|
+
const mcpDir = (0, import_node_path3.resolve)(opts.targetDir);
|
|
224
299
|
await ensureTargetDir(mcpDir, void 0);
|
|
225
300
|
await copyMcpTree(templateDir, mcpDir, opts.name, scope);
|
|
226
301
|
return { mcpDir };
|
|
@@ -229,5 +304,6 @@ async function scaffoldMcp(opts) {
|
|
|
229
304
|
0 && (module.exports = {
|
|
230
305
|
isNpmSafeName,
|
|
231
306
|
scaffold,
|
|
307
|
+
scaffoldExample,
|
|
232
308
|
scaffoldMcp
|
|
233
309
|
});
|
package/dist/index.d.cts
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
/** Frameworks the scaffolder ships templates for. */
|
|
2
2
|
type Framework = 'claude-agent-sdk' | 'openai-agents-sdk' | 'google-adk';
|
|
3
|
+
/**
|
|
4
|
+
* App templates the scaffolder ships. `base` = landing + login + home +
|
|
5
|
+
* chat; `agentic-app` extends it with the split-sidebar product shell whose
|
|
6
|
+
* agent dock swaps the main canvas to a fullscreen agent.
|
|
7
|
+
*/
|
|
8
|
+
type Template = 'base' | 'agentic-app';
|
|
3
9
|
interface ScaffoldOptions {
|
|
4
10
|
/** Absolute or cwd-relative path to create/populate the new project in. */
|
|
5
11
|
targetDir: string;
|
|
6
12
|
/** npm-safe project name (also used as the default scope). */
|
|
7
13
|
name: string;
|
|
8
14
|
framework: Framework;
|
|
15
|
+
/** App template. Default: `base`. */
|
|
16
|
+
template?: Template;
|
|
9
17
|
/** Package scope for `@<scope>/*` packages. Default: `name`. */
|
|
10
18
|
scope?: string;
|
|
11
19
|
/** Run `pnpm install` in the new project after scaffolding. Default: false. */
|
|
@@ -14,7 +22,7 @@ interface ScaffoldOptions {
|
|
|
14
22
|
git?: boolean;
|
|
15
23
|
/** Scaffold into a non-empty targetDir anyway. Default: false. */
|
|
16
24
|
force?: boolean;
|
|
17
|
-
/** Root directory holding
|
|
25
|
+
/** Root directory holding `<template>/<framework>` trees (+ `mcp-base/`). Default: dist/templates. */
|
|
18
26
|
templatesDir?: string;
|
|
19
27
|
}
|
|
20
28
|
interface ScaffoldResult {
|
|
@@ -31,6 +39,29 @@ interface ScaffoldResult {
|
|
|
31
39
|
*/
|
|
32
40
|
declare function scaffold(opts: ScaffoldOptions): Promise<ScaffoldResult>;
|
|
33
41
|
|
|
42
|
+
interface ScaffoldExampleOptions {
|
|
43
|
+
/** Absolute or cwd-relative path to create/populate the new project in. */
|
|
44
|
+
targetDir: string;
|
|
45
|
+
/** The example's top-level directory name in withguuey/demos (e.g. `trimly`). */
|
|
46
|
+
example: string;
|
|
47
|
+
/** Run `pnpm install` after extraction. Default: false. */
|
|
48
|
+
install?: boolean;
|
|
49
|
+
/** Run `git init` + an initial commit. Default: true. */
|
|
50
|
+
git?: boolean;
|
|
51
|
+
/** Extract into a non-empty targetDir anyway. Default: false. */
|
|
52
|
+
force?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Test seam: returns the repo tarball as a stream. Default fetches the
|
|
55
|
+
* codeload URL. The tarball's first path segment (`demos-main/`) is
|
|
56
|
+
* discovered, never assumed.
|
|
57
|
+
*/
|
|
58
|
+
fetchTarball?: () => Promise<NodeJS.ReadableStream>;
|
|
59
|
+
}
|
|
60
|
+
interface ScaffoldExampleResult {
|
|
61
|
+
projectDir: string;
|
|
62
|
+
}
|
|
63
|
+
declare function scaffoldExample(opts: ScaffoldExampleOptions): Promise<ScaffoldExampleResult>;
|
|
64
|
+
|
|
34
65
|
interface ScaffoldMcpOptions {
|
|
35
66
|
/** Absolute or cwd-relative path to create the MCP package in. */
|
|
36
67
|
targetDir: string;
|
|
@@ -73,4 +104,4 @@ declare function scaffoldMcp(opts: ScaffoldMcpOptions): Promise<ScaffoldMcpResul
|
|
|
73
104
|
/** Whether `name` matches the npm-safe {@link NAME_PATTERN} rule. */
|
|
74
105
|
declare function isNpmSafeName(name: string): boolean;
|
|
75
106
|
|
|
76
|
-
export { type Framework, type ScaffoldMcpOptions, type ScaffoldMcpResult, type ScaffoldOptions, type ScaffoldResult, isNpmSafeName, scaffold, scaffoldMcp };
|
|
107
|
+
export { type Framework, type ScaffoldExampleOptions, type ScaffoldExampleResult, type ScaffoldMcpOptions, type ScaffoldMcpResult, type ScaffoldOptions, type ScaffoldResult, type Template, isNpmSafeName, scaffold, scaffoldExample, scaffoldMcp };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
/** Frameworks the scaffolder ships templates for. */
|
|
2
2
|
type Framework = 'claude-agent-sdk' | 'openai-agents-sdk' | 'google-adk';
|
|
3
|
+
/**
|
|
4
|
+
* App templates the scaffolder ships. `base` = landing + login + home +
|
|
5
|
+
* chat; `agentic-app` extends it with the split-sidebar product shell whose
|
|
6
|
+
* agent dock swaps the main canvas to a fullscreen agent.
|
|
7
|
+
*/
|
|
8
|
+
type Template = 'base' | 'agentic-app';
|
|
3
9
|
interface ScaffoldOptions {
|
|
4
10
|
/** Absolute or cwd-relative path to create/populate the new project in. */
|
|
5
11
|
targetDir: string;
|
|
6
12
|
/** npm-safe project name (also used as the default scope). */
|
|
7
13
|
name: string;
|
|
8
14
|
framework: Framework;
|
|
15
|
+
/** App template. Default: `base`. */
|
|
16
|
+
template?: Template;
|
|
9
17
|
/** Package scope for `@<scope>/*` packages. Default: `name`. */
|
|
10
18
|
scope?: string;
|
|
11
19
|
/** Run `pnpm install` in the new project after scaffolding. Default: false. */
|
|
@@ -14,7 +22,7 @@ interface ScaffoldOptions {
|
|
|
14
22
|
git?: boolean;
|
|
15
23
|
/** Scaffold into a non-empty targetDir anyway. Default: false. */
|
|
16
24
|
force?: boolean;
|
|
17
|
-
/** Root directory holding
|
|
25
|
+
/** Root directory holding `<template>/<framework>` trees (+ `mcp-base/`). Default: dist/templates. */
|
|
18
26
|
templatesDir?: string;
|
|
19
27
|
}
|
|
20
28
|
interface ScaffoldResult {
|
|
@@ -31,6 +39,29 @@ interface ScaffoldResult {
|
|
|
31
39
|
*/
|
|
32
40
|
declare function scaffold(opts: ScaffoldOptions): Promise<ScaffoldResult>;
|
|
33
41
|
|
|
42
|
+
interface ScaffoldExampleOptions {
|
|
43
|
+
/** Absolute or cwd-relative path to create/populate the new project in. */
|
|
44
|
+
targetDir: string;
|
|
45
|
+
/** The example's top-level directory name in withguuey/demos (e.g. `trimly`). */
|
|
46
|
+
example: string;
|
|
47
|
+
/** Run `pnpm install` after extraction. Default: false. */
|
|
48
|
+
install?: boolean;
|
|
49
|
+
/** Run `git init` + an initial commit. Default: true. */
|
|
50
|
+
git?: boolean;
|
|
51
|
+
/** Extract into a non-empty targetDir anyway. Default: false. */
|
|
52
|
+
force?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Test seam: returns the repo tarball as a stream. Default fetches the
|
|
55
|
+
* codeload URL. The tarball's first path segment (`demos-main/`) is
|
|
56
|
+
* discovered, never assumed.
|
|
57
|
+
*/
|
|
58
|
+
fetchTarball?: () => Promise<NodeJS.ReadableStream>;
|
|
59
|
+
}
|
|
60
|
+
interface ScaffoldExampleResult {
|
|
61
|
+
projectDir: string;
|
|
62
|
+
}
|
|
63
|
+
declare function scaffoldExample(opts: ScaffoldExampleOptions): Promise<ScaffoldExampleResult>;
|
|
64
|
+
|
|
34
65
|
interface ScaffoldMcpOptions {
|
|
35
66
|
/** Absolute or cwd-relative path to create the MCP package in. */
|
|
36
67
|
targetDir: string;
|
|
@@ -73,4 +104,4 @@ declare function scaffoldMcp(opts: ScaffoldMcpOptions): Promise<ScaffoldMcpResul
|
|
|
73
104
|
/** Whether `name` matches the npm-safe {@link NAME_PATTERN} rule. */
|
|
74
105
|
declare function isNpmSafeName(name: string): boolean;
|
|
75
106
|
|
|
76
|
-
export { type Framework, type ScaffoldMcpOptions, type ScaffoldMcpResult, type ScaffoldOptions, type ScaffoldResult, isNpmSafeName, scaffold, scaffoldMcp };
|
|
107
|
+
export { type Framework, type ScaffoldExampleOptions, type ScaffoldExampleResult, type ScaffoldMcpOptions, type ScaffoldMcpResult, type ScaffoldOptions, type ScaffoldResult, type Template, isNpmSafeName, scaffold, scaffoldExample, scaffoldMcp };
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@ You (the coding agent) are extending a guuey agentic app. Before you reach
|
|
|
4
4
|
for a database or a cache, read this file. The single most common mistake
|
|
5
5
|
here is standing up local Redis/SQLite/file-based state "just to get
|
|
6
6
|
something working" — **don't.** Every pod this project deploys to
|
|
7
|
-
(`src/worker.ts`
|
|
7
|
+
(the agent entry's pod — `src/worker.ts`, or `src/agent.ts` in a google-adk scaffold — including every `kind: colocated` `mcps/*`
|
|
8
8
|
server auto-spawned inside it, like this scaffold's `mcps/todo` — and every
|
|
9
9
|
`mcps/*` server deployed with `kind: hosted`) is **ephemeral and horizontally
|
|
10
10
|
replaced**: gVisor-isolated,
|
|
@@ -19,7 +19,7 @@ Use this table to route persistence decisions. Pick a row, don't invent one.
|
|
|
19
19
|
| Small per-user state on an MCP server (idempotency keys, rate-limit counters, OAuth nonces, prefs, a few KB) | [`@guuey/state`](https://www.npmjs.com/package/@guuey/state) — `withGuueyContext(scopeFromAuthorization(...), fn)` | Zero auth code — guuey owns the identity rails. Durable, per-`(user, mcp)`, survives pod restarts. |
|
|
20
20
|
| Large or relational data (rows, queries, joins, anything you'd reach for Postgres/Redis for) | An external managed serverless DB — Neon, Upstash, Supabase, or Turso — wired in via `guuey mcp secrets set DATABASE_URL=... --server <id>` (hosted MCP) or `guuey env set DATABASE_URL=...` (the agent worker and its colocated MCP children — the pod's declared env/secrets are handed to every colocated child), consumed through the provider's serverless driver | Guuey **integrates, never operates** databases — that's the platform's hosting policy, not a v1 gap. Pick the provider's **`us-east-1`** region: a guuey-hosted MCP → provider hop is then same-region AWS backbone, single-digit-ms — comparable to a cross-AZ hop, and agent turns are already dominated by seconds of LLM inference. |
|
|
21
21
|
| Local Redis, SQLite, or any file written as a database | **Never.** Not for v1, not "temporarily." | Pods are ephemeral and horizontally replaced — a local store vanishes on the next deploy, restart, or scale event, with no warning to you or the user. |
|
|
22
|
-
| Per-user files/blobs from **inside the agent pod** (
|
|
22
|
+
| Per-user files/blobs from **inside the agent pod** (the agent entry) | [`@guuey/fs`](https://www.npmjs.com/package/@guuey/fs)'s `homeDir()`/`appDir()`/`sessionDir()`, or the raw `$GUUEY_HOME_DIR`/`$GUUEY_APP_DIR` env vars + `node:fs` | Every invoke already gets these three bound directories — `$GUUEY_HOME_DIR` is durable per-user, `$GUUEY_APP_DIR` is read-only shared, cwd is session scratch. No wrapper API required, but the helpers save you the env-var lookups. |
|
|
23
23
|
| Per-user files/blobs from **inside an MCP server** (`mcps/*`) | Not yet available — `@guuey/files` is planned but not shipped. Fall back to the managed-DB row above (e.g. store blobs in the provider's object storage) until it lands. | Don't build against an API that doesn't exist yet. |
|
|
24
24
|
| Conversation / chat history | **Do not re-implement.** The platform already persists it. | Guuey writes thread history to DynamoDB and streams it back over AppSync; agents that keep their own transcript store are duplicating (and diverging from) data the platform already owns. |
|
|
25
25
|
|
|
@@ -18,9 +18,15 @@ locally with one command, and deployable to guuey with one more.
|
|
|
18
18
|
├── ggui/ # ggui.json + blueprints/ + themes/ — generative-UI config.
|
|
19
19
|
│ # `ggui serve` runs against this locally; it's pushed to your
|
|
20
20
|
│ # deployed app's guuey-managed ggui instance on `guuey deploy`.
|
|
21
|
-
├── web/ #
|
|
22
|
-
│ #
|
|
21
|
+
├── web/ # the product frontend (Vite + React on @guuey/chat):
|
|
22
|
+
│ # landing (widget) · login (guest + BYO-OIDC seam) · home
|
|
23
|
+
│ # (status + distribution guide) · the chat surface
|
|
24
|
+
├── guuey.app.json # frontend/brand config — written by `pnpm bootstrap`
|
|
25
|
+
│ # (schema: guuey.app.schema.json; public-safe by design)
|
|
26
|
+
├── AGENTS.md # coding-agent steering; `pnpm bootstrap` maintains the
|
|
27
|
+
│ # managed block with this project's real facts
|
|
23
28
|
├── scripts/dev.mjs # `pnpm dev` orchestrator — boots the whole local stack
|
|
29
|
+
├── scripts/bootstrap.mjs # `pnpm bootstrap` — configure, then `-- --link` to bind
|
|
24
30
|
├── .env.example # ANTHROPIC_API_KEY / OPENAI_API_KEY for local dev
|
|
25
31
|
└── .mcp.json # Claude Code convenience wiring (mcp.ggui.ai/dev)
|
|
26
32
|
```
|
|
@@ -33,11 +39,19 @@ level rather than nested under a `servers/` or `apps/` folder.
|
|
|
33
39
|
|
|
34
40
|
```bash
|
|
35
41
|
pnpm install
|
|
42
|
+
pnpm bootstrap # brand, theme, copy → guuey.app.json + AGENTS.md (no account needed;
|
|
43
|
+
# every web page is gated on this, and production builds fail without it)
|
|
36
44
|
cp .env.example .env.local # done automatically on scaffold if .env.local is absent
|
|
37
45
|
# set ANTHROPIC_API_KEY (or OPENAI_API_KEY, for the openai-agents-sdk template) in .env.local
|
|
38
46
|
pnpm dev
|
|
39
47
|
```
|
|
40
48
|
|
|
49
|
+
When the agent is deployed (`guuey login && guuey deploy`), bind it into the
|
|
50
|
+
frontend: `pnpm bootstrap -- --link` — that records the app id, endpoint,
|
|
51
|
+
widget origin and portal link in `guuey.app.json` and pushes brand basics to
|
|
52
|
+
the platform. `pnpm status` shows the live app state; `pnpm bootstrap -- --check`
|
|
53
|
+
prints machine-readable configuration state.
|
|
54
|
+
|
|
41
55
|
`pnpm dev` (`scripts/dev.mjs`) boots four processes with prefixed, interleaved
|
|
42
56
|
logs. Ctrl-C tears all of them down together.
|
|
43
57
|
|
|
@@ -46,7 +60,7 @@ logs. Ctrl-C tears all of them down together.
|
|
|
46
60
|
| `worker` | — | `tsup --watch` — rebuilds `guuey.worker.js` on every save |
|
|
47
61
|
| `guuey dev` | :6790 | local router: spawns your worker per turn, streams SSE; auto-spawns every `colocated` MCP entry — `mcps/todo` lands on its `devPort` :6782 |
|
|
48
62
|
| `ggui serve` | :6781 | local generative-UI server, over `ggui/` |
|
|
49
|
-
| `web` | :6890 | the
|
|
63
|
+
| `web` | :6890 | the product frontend (landing/login/home/chat on @guuey/chat) |
|
|
50
64
|
|
|
51
65
|
The todo MCP still answers on :6782 — it's just a supervised child of
|
|
52
66
|
`guuey dev` now (copy `mcps/todo/` to add your own server; new `colocated`
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./guuey.app.schema.json",
|
|
3
|
+
"schema": 1,
|
|
4
|
+
"bootstrapped": false,
|
|
5
|
+
"brand": {
|
|
6
|
+
"name": "agentic-app-template",
|
|
7
|
+
"tagline": "An agentic app built on guuey",
|
|
8
|
+
"logoText": "AA"
|
|
9
|
+
},
|
|
10
|
+
"theme": {
|
|
11
|
+
"accent": "#6c5ce7",
|
|
12
|
+
"mode": "light"
|
|
13
|
+
},
|
|
14
|
+
"copy": {
|
|
15
|
+
"landing": {
|
|
16
|
+
"headline": "Ask anything.",
|
|
17
|
+
"sub": "This site has an agent. Open the chat, or use the launcher in the corner."
|
|
18
|
+
},
|
|
19
|
+
"login": {
|
|
20
|
+
"guestHint": "One click, no account — this browser gets its own private thread the agent remembers."
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"auth": {
|
|
24
|
+
"oidc": null
|
|
25
|
+
},
|
|
26
|
+
"link": null,
|
|
27
|
+
"demoMode": false
|
|
28
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "guuey.app.json",
|
|
4
|
+
"description": "App-level configuration for this guuey agentic app. Written by `pnpm bootstrap`; safe to hand-edit. Public-safe by construction: nothing in this file is a secret (the appId ships in page HTML by design).",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schema", "bootstrapped", "brand", "theme", "copy", "auth", "link", "demoMode"],
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"properties": {
|
|
9
|
+
"$schema": { "type": "string" },
|
|
10
|
+
"schema": { "const": 1 },
|
|
11
|
+
"bootstrapped": {
|
|
12
|
+
"type": "boolean",
|
|
13
|
+
"description": "Flipped true by `pnpm bootstrap`. Dev renders a setup screen until then; production builds fail."
|
|
14
|
+
},
|
|
15
|
+
"brand": {
|
|
16
|
+
"type": "object",
|
|
17
|
+
"required": ["name", "tagline", "logoText"],
|
|
18
|
+
"additionalProperties": false,
|
|
19
|
+
"properties": {
|
|
20
|
+
"name": { "type": "string", "minLength": 1 },
|
|
21
|
+
"tagline": { "type": "string" },
|
|
22
|
+
"logoText": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"maxLength": 4,
|
|
25
|
+
"description": "1-4 characters shown in the square brand mark."
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"theme": {
|
|
30
|
+
"type": "object",
|
|
31
|
+
"required": ["accent", "mode"],
|
|
32
|
+
"additionalProperties": false,
|
|
33
|
+
"properties": {
|
|
34
|
+
"accent": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" },
|
|
35
|
+
"mode": { "enum": ["light", "dark"] }
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"copy": {
|
|
39
|
+
"type": "object",
|
|
40
|
+
"required": ["landing", "login"],
|
|
41
|
+
"additionalProperties": false,
|
|
42
|
+
"properties": {
|
|
43
|
+
"landing": {
|
|
44
|
+
"type": "object",
|
|
45
|
+
"required": ["headline", "sub"],
|
|
46
|
+
"additionalProperties": false,
|
|
47
|
+
"properties": {
|
|
48
|
+
"headline": { "type": "string" },
|
|
49
|
+
"sub": { "type": "string" }
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"login": {
|
|
53
|
+
"type": "object",
|
|
54
|
+
"required": ["guestHint"],
|
|
55
|
+
"additionalProperties": false,
|
|
56
|
+
"properties": {
|
|
57
|
+
"guestHint": { "type": "string" }
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"auth": {
|
|
63
|
+
"type": "object",
|
|
64
|
+
"required": ["oidc"],
|
|
65
|
+
"additionalProperties": false,
|
|
66
|
+
"properties": {
|
|
67
|
+
"oidc": {
|
|
68
|
+
"description": "BYO-OIDC sign-in. null = guest-only. When set, the bound guuey app must be in BYO auth mode for the same issuer: `guuey apps update <appId> --auth-mode byo --issuer-url <issuer> --audience <clientId>`.",
|
|
69
|
+
"oneOf": [
|
|
70
|
+
{ "type": "null" },
|
|
71
|
+
{
|
|
72
|
+
"type": "object",
|
|
73
|
+
"required": ["issuer", "clientId"],
|
|
74
|
+
"additionalProperties": false,
|
|
75
|
+
"properties": {
|
|
76
|
+
"issuer": { "type": "string", "format": "uri" },
|
|
77
|
+
"clientId": { "type": "string", "minLength": 1 }
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"link": {
|
|
85
|
+
"description": "The bound guuey app. null until `pnpm bootstrap -- --link`. Every value here is read back from the platform, never derived by hand.",
|
|
86
|
+
"oneOf": [
|
|
87
|
+
{ "type": "null" },
|
|
88
|
+
{
|
|
89
|
+
"type": "object",
|
|
90
|
+
"required": [
|
|
91
|
+
"appId",
|
|
92
|
+
"env",
|
|
93
|
+
"apiBaseUrl",
|
|
94
|
+
"endpointUrl",
|
|
95
|
+
"widgetOrigin",
|
|
96
|
+
"portalUrl",
|
|
97
|
+
"slug",
|
|
98
|
+
"pageUrl"
|
|
99
|
+
],
|
|
100
|
+
"additionalProperties": false,
|
|
101
|
+
"properties": {
|
|
102
|
+
"appId": { "type": "string", "minLength": 1 },
|
|
103
|
+
"env": { "enum": ["dev", "staging", "release"] },
|
|
104
|
+
"apiBaseUrl": { "type": "string", "format": "uri" },
|
|
105
|
+
"endpointUrl": { "type": "string", "format": "uri" },
|
|
106
|
+
"widgetOrigin": { "type": "string", "format": "uri" },
|
|
107
|
+
"portalUrl": { "type": "string", "format": "uri" },
|
|
108
|
+
"slug": { "oneOf": [{ "type": "string" }, { "type": "null" }] },
|
|
109
|
+
"pageUrl": { "oneOf": [{ "type": "string", "format": "uri" }, { "type": "null" }] }
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
"demoMode": {
|
|
115
|
+
"type": "boolean",
|
|
116
|
+
"description": "Renders the demo chrome (banner + fictional-product honesty strip). Off in every customer clone."
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -5,16 +5,19 @@
|
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"dev": "node scripts/dev.mjs",
|
|
8
|
+
"bootstrap": "node scripts/bootstrap.mjs",
|
|
9
|
+
"status": "guuey apps get && guuey agent status",
|
|
8
10
|
"build": "tsup",
|
|
9
11
|
"typecheck": "tsc --noEmit"
|
|
10
12
|
},
|
|
11
13
|
"dependencies": {
|
|
12
14
|
"@anthropic-ai/claude-agent-sdk": "^0.3.199",
|
|
13
|
-
"@guuey/config": "0.
|
|
14
|
-
"@guuey/worker": "0.
|
|
15
|
+
"@guuey/config": "0.10.0",
|
|
16
|
+
"@guuey/worker": "0.10.0"
|
|
15
17
|
},
|
|
16
18
|
"devDependencies": {
|
|
17
|
-
"@
|
|
19
|
+
"@ggui-ai/cli": "0.6.3",
|
|
20
|
+
"@guuey/cli": "0.10.0",
|
|
18
21
|
"tsup": "^8.5.0",
|
|
19
22
|
"tsx": "^4.19.0",
|
|
20
23
|
"typescript": "^5.8.0"
|