@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.
Files changed (319) hide show
  1. package/README.md +22 -2
  2. package/dist/{chunk-JD4RAKEG.js → chunk-5V2IFXD4.js} +96 -21
  3. package/dist/cli.cjs +145 -17
  4. package/dist/cli.js +60 -5
  5. package/dist/index.cjs +97 -21
  6. package/dist/index.d.cts +33 -2
  7. package/dist/index.d.ts +33 -2
  8. package/dist/index.js +3 -1
  9. package/dist/templates/{openai-agents-sdk → agentic-app/claude-agent-sdk}/AGENTS.md +2 -2
  10. package/dist/templates/{openai-agents-sdk → agentic-app/claude-agent-sdk}/README.md +23 -7
  11. package/dist/templates/agentic-app/claude-agent-sdk/gitignore +5 -0
  12. package/dist/templates/agentic-app/claude-agent-sdk/guuey.app.json +28 -0
  13. package/dist/templates/agentic-app/claude-agent-sdk/guuey.app.schema.json +119 -0
  14. package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/package.json +6 -3
  15. package/dist/templates/agentic-app/claude-agent-sdk/scripts/bootstrap.mjs +398 -0
  16. package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/web/index.html +0 -1
  17. package/dist/templates/agentic-app/claude-agent-sdk/web/package.json +29 -0
  18. package/dist/templates/agentic-app/claude-agent-sdk/web/src/components/AgentChat.tsx +91 -0
  19. package/dist/templates/agentic-app/claude-agent-sdk/web/src/components/AppShell.tsx +139 -0
  20. package/dist/templates/agentic-app/claude-agent-sdk/web/src/components/BootstrapGate.tsx +30 -0
  21. package/dist/templates/agentic-app/claude-agent-sdk/web/src/components/QrLink.tsx +25 -0
  22. package/dist/templates/agentic-app/claude-agent-sdk/web/src/components/Shell.tsx +50 -0
  23. package/dist/templates/agentic-app/claude-agent-sdk/web/src/config.ts +148 -0
  24. package/dist/templates/agentic-app/claude-agent-sdk/web/src/lib/identity.ts +67 -0
  25. package/dist/templates/agentic-app/claude-agent-sdk/web/src/lib/oidc.ts +79 -0
  26. package/dist/templates/agentic-app/claude-agent-sdk/web/src/lib/status.ts +45 -0
  27. package/dist/templates/agentic-app/claude-agent-sdk/web/src/lib/widget.ts +96 -0
  28. package/dist/templates/agentic-app/claude-agent-sdk/web/src/main.tsx +51 -0
  29. package/dist/templates/agentic-app/claude-agent-sdk/web/src/pages/Dashboard.tsx +33 -0
  30. package/dist/templates/agentic-app/claude-agent-sdk/web/src/pages/Home.tsx +133 -0
  31. package/dist/templates/agentic-app/claude-agent-sdk/web/src/pages/Landing.tsx +65 -0
  32. package/dist/templates/agentic-app/claude-agent-sdk/web/src/pages/Login.tsx +81 -0
  33. package/dist/templates/agentic-app/claude-agent-sdk/web/src/pages/Reports.tsx +9 -0
  34. package/dist/templates/agentic-app/claude-agent-sdk/web/src/pages/TalkOnMobile.tsx +34 -0
  35. package/dist/templates/agentic-app/claude-agent-sdk/web/src/routes.ts +7 -0
  36. package/dist/templates/agentic-app/claude-agent-sdk/web/src/styles-app.css +130 -0
  37. package/dist/templates/agentic-app/claude-agent-sdk/web/src/styles.css +248 -0
  38. package/dist/templates/agentic-app/claude-agent-sdk/web/src/vite-env.d.ts +14 -0
  39. package/dist/templates/agentic-app/claude-agent-sdk/web/tsconfig.json +18 -0
  40. package/dist/templates/agentic-app/claude-agent-sdk/web/vite.config.ts +46 -0
  41. package/dist/templates/{google-adk → agentic-app/google-adk}/AGENTS.md +2 -2
  42. package/dist/templates/agentic-app/google-adk/gitignore +5 -0
  43. package/dist/templates/agentic-app/google-adk/guuey.app.json +28 -0
  44. package/dist/templates/agentic-app/google-adk/guuey.app.schema.json +119 -0
  45. package/dist/templates/{google-adk → agentic-app/google-adk}/package.json +6 -3
  46. package/dist/templates/agentic-app/google-adk/scripts/bootstrap.mjs +398 -0
  47. package/dist/templates/{google-adk → agentic-app/google-adk}/web/index.html +0 -1
  48. package/dist/templates/agentic-app/google-adk/web/package.json +29 -0
  49. package/dist/templates/agentic-app/google-adk/web/src/components/AgentChat.tsx +91 -0
  50. package/dist/templates/agentic-app/google-adk/web/src/components/AppShell.tsx +139 -0
  51. package/dist/templates/agentic-app/google-adk/web/src/components/BootstrapGate.tsx +30 -0
  52. package/dist/templates/agentic-app/google-adk/web/src/components/QrLink.tsx +25 -0
  53. package/dist/templates/agentic-app/google-adk/web/src/components/Shell.tsx +50 -0
  54. package/dist/templates/agentic-app/google-adk/web/src/config.ts +148 -0
  55. package/dist/templates/agentic-app/google-adk/web/src/lib/identity.ts +67 -0
  56. package/dist/templates/agentic-app/google-adk/web/src/lib/oidc.ts +79 -0
  57. package/dist/templates/agentic-app/google-adk/web/src/lib/status.ts +45 -0
  58. package/dist/templates/agentic-app/google-adk/web/src/lib/widget.ts +96 -0
  59. package/dist/templates/agentic-app/google-adk/web/src/main.tsx +51 -0
  60. package/dist/templates/agentic-app/google-adk/web/src/pages/Dashboard.tsx +33 -0
  61. package/dist/templates/agentic-app/google-adk/web/src/pages/Home.tsx +133 -0
  62. package/dist/templates/agentic-app/google-adk/web/src/pages/Landing.tsx +65 -0
  63. package/dist/templates/agentic-app/google-adk/web/src/pages/Login.tsx +81 -0
  64. package/dist/templates/agentic-app/google-adk/web/src/pages/Reports.tsx +9 -0
  65. package/dist/templates/agentic-app/google-adk/web/src/pages/TalkOnMobile.tsx +34 -0
  66. package/dist/templates/agentic-app/google-adk/web/src/routes.ts +7 -0
  67. package/dist/templates/agentic-app/google-adk/web/src/styles-app.css +130 -0
  68. package/dist/templates/agentic-app/google-adk/web/src/styles.css +248 -0
  69. package/dist/templates/agentic-app/google-adk/web/src/vite-env.d.ts +14 -0
  70. package/dist/templates/agentic-app/google-adk/web/tsconfig.json +18 -0
  71. package/dist/templates/agentic-app/google-adk/web/vite.config.ts +46 -0
  72. package/dist/templates/{claude-agent-sdk → agentic-app/openai-agents-sdk}/AGENTS.md +2 -2
  73. package/dist/templates/{claude-agent-sdk → agentic-app/openai-agents-sdk}/README.md +23 -7
  74. package/dist/templates/agentic-app/openai-agents-sdk/gitignore +5 -0
  75. package/dist/templates/agentic-app/openai-agents-sdk/guuey.app.json +28 -0
  76. package/dist/templates/agentic-app/openai-agents-sdk/guuey.app.schema.json +119 -0
  77. package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/package.json +6 -3
  78. package/dist/templates/agentic-app/openai-agents-sdk/scripts/bootstrap.mjs +398 -0
  79. package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/web/index.html +0 -1
  80. package/dist/templates/agentic-app/openai-agents-sdk/web/package.json +29 -0
  81. package/dist/templates/agentic-app/openai-agents-sdk/web/src/components/AgentChat.tsx +91 -0
  82. package/dist/templates/agentic-app/openai-agents-sdk/web/src/components/AppShell.tsx +139 -0
  83. package/dist/templates/agentic-app/openai-agents-sdk/web/src/components/BootstrapGate.tsx +30 -0
  84. package/dist/templates/agentic-app/openai-agents-sdk/web/src/components/QrLink.tsx +25 -0
  85. package/dist/templates/agentic-app/openai-agents-sdk/web/src/components/Shell.tsx +50 -0
  86. package/dist/templates/agentic-app/openai-agents-sdk/web/src/config.ts +148 -0
  87. package/dist/templates/agentic-app/openai-agents-sdk/web/src/lib/identity.ts +67 -0
  88. package/dist/templates/agentic-app/openai-agents-sdk/web/src/lib/oidc.ts +79 -0
  89. package/dist/templates/agentic-app/openai-agents-sdk/web/src/lib/status.ts +45 -0
  90. package/dist/templates/agentic-app/openai-agents-sdk/web/src/lib/widget.ts +96 -0
  91. package/dist/templates/agentic-app/openai-agents-sdk/web/src/main.tsx +51 -0
  92. package/dist/templates/agentic-app/openai-agents-sdk/web/src/pages/Dashboard.tsx +33 -0
  93. package/dist/templates/agentic-app/openai-agents-sdk/web/src/pages/Home.tsx +133 -0
  94. package/dist/templates/agentic-app/openai-agents-sdk/web/src/pages/Landing.tsx +65 -0
  95. package/dist/templates/agentic-app/openai-agents-sdk/web/src/pages/Login.tsx +81 -0
  96. package/dist/templates/agentic-app/openai-agents-sdk/web/src/pages/Reports.tsx +9 -0
  97. package/dist/templates/agentic-app/openai-agents-sdk/web/src/pages/TalkOnMobile.tsx +34 -0
  98. package/dist/templates/agentic-app/openai-agents-sdk/web/src/routes.ts +7 -0
  99. package/dist/templates/agentic-app/openai-agents-sdk/web/src/styles-app.css +130 -0
  100. package/dist/templates/agentic-app/openai-agents-sdk/web/src/styles.css +248 -0
  101. package/dist/templates/agentic-app/openai-agents-sdk/web/src/vite-env.d.ts +14 -0
  102. package/dist/templates/agentic-app/openai-agents-sdk/web/tsconfig.json +18 -0
  103. package/dist/templates/agentic-app/openai-agents-sdk/web/vite.config.ts +46 -0
  104. package/dist/templates/base/claude-agent-sdk/.env.example +4 -0
  105. package/dist/templates/base/claude-agent-sdk/.mcp.json +1 -0
  106. package/dist/templates/base/claude-agent-sdk/AGENTS.md +135 -0
  107. package/dist/templates/base/claude-agent-sdk/README.md +173 -0
  108. package/dist/templates/base/claude-agent-sdk/ggui/blueprints/.gitkeep +0 -0
  109. package/dist/templates/base/claude-agent-sdk/ggui/ggui.json +15 -0
  110. package/dist/templates/base/claude-agent-sdk/ggui/themes/.gitkeep +0 -0
  111. package/dist/templates/base/claude-agent-sdk/gitignore +5 -0
  112. package/dist/templates/base/claude-agent-sdk/guuey.app.json +28 -0
  113. package/dist/templates/base/claude-agent-sdk/guuey.app.schema.json +119 -0
  114. package/dist/templates/base/claude-agent-sdk/guuey.json +14 -0
  115. package/dist/templates/base/claude-agent-sdk/mcps/todo/Dockerfile +46 -0
  116. package/dist/templates/base/claude-agent-sdk/mcps/todo/package.json +22 -0
  117. package/dist/templates/base/claude-agent-sdk/mcps/todo/src/server.ts +173 -0
  118. package/dist/templates/base/claude-agent-sdk/mcps/todo/tsconfig.json +15 -0
  119. package/dist/templates/base/claude-agent-sdk/mcps/todo/tsup.config.ts +14 -0
  120. package/dist/templates/base/claude-agent-sdk/package.json +30 -0
  121. package/dist/templates/base/claude-agent-sdk/pnpm-workspace.yaml +24 -0
  122. package/dist/templates/base/claude-agent-sdk/prompts/system.md +4 -0
  123. package/dist/templates/base/claude-agent-sdk/scripts/bootstrap.mjs +398 -0
  124. package/dist/templates/base/claude-agent-sdk/scripts/dev.mjs +45 -0
  125. package/dist/templates/base/claude-agent-sdk/src/agent-config.ts +77 -0
  126. package/dist/templates/base/claude-agent-sdk/src/worker.ts +89 -0
  127. package/dist/templates/base/claude-agent-sdk/tsconfig.json +15 -0
  128. package/dist/templates/base/claude-agent-sdk/tsup.config.ts +9 -0
  129. package/dist/templates/base/claude-agent-sdk/web/index.html +12 -0
  130. package/dist/templates/{claude-agent-sdk → base/claude-agent-sdk}/web/package.json +11 -8
  131. package/dist/templates/base/claude-agent-sdk/web/src/components/AgentChat.tsx +91 -0
  132. package/dist/templates/base/claude-agent-sdk/web/src/components/BootstrapGate.tsx +30 -0
  133. package/dist/templates/base/claude-agent-sdk/web/src/components/QrLink.tsx +25 -0
  134. package/dist/templates/base/claude-agent-sdk/web/src/components/Shell.tsx +50 -0
  135. package/dist/templates/base/claude-agent-sdk/web/src/config.ts +148 -0
  136. package/dist/templates/base/claude-agent-sdk/web/src/lib/identity.ts +67 -0
  137. package/dist/templates/base/claude-agent-sdk/web/src/lib/oidc.ts +79 -0
  138. package/dist/templates/base/claude-agent-sdk/web/src/lib/status.ts +45 -0
  139. package/dist/templates/base/claude-agent-sdk/web/src/lib/widget.ts +96 -0
  140. package/dist/templates/base/claude-agent-sdk/web/src/main.tsx +52 -0
  141. package/dist/templates/base/claude-agent-sdk/web/src/pages/Chat.tsx +15 -0
  142. package/dist/templates/base/claude-agent-sdk/web/src/pages/Home.tsx +133 -0
  143. package/dist/templates/base/claude-agent-sdk/web/src/pages/Landing.tsx +65 -0
  144. package/dist/templates/base/claude-agent-sdk/web/src/pages/Login.tsx +81 -0
  145. package/dist/templates/base/claude-agent-sdk/web/src/routes.ts +7 -0
  146. package/dist/templates/base/claude-agent-sdk/web/src/styles.css +248 -0
  147. package/dist/templates/base/claude-agent-sdk/web/src/vite-env.d.ts +14 -0
  148. package/dist/templates/base/claude-agent-sdk/web/tsconfig.json +18 -0
  149. package/dist/templates/base/claude-agent-sdk/web/vite.config.ts +46 -0
  150. package/dist/templates/base/google-adk/.env.example +4 -0
  151. package/dist/templates/base/google-adk/.mcp.json +1 -0
  152. package/dist/templates/base/google-adk/AGENTS.md +135 -0
  153. package/dist/templates/base/google-adk/README.md +90 -0
  154. package/dist/templates/base/google-adk/ggui/blueprints/.gitkeep +0 -0
  155. package/dist/templates/base/google-adk/ggui/ggui.json +15 -0
  156. package/dist/templates/base/google-adk/ggui/themes/.gitkeep +0 -0
  157. package/dist/templates/base/google-adk/gitignore +5 -0
  158. package/dist/templates/base/google-adk/guuey.app.json +28 -0
  159. package/dist/templates/base/google-adk/guuey.app.schema.json +119 -0
  160. package/dist/templates/base/google-adk/guuey.json +15 -0
  161. package/dist/templates/base/google-adk/mcps/todo/Dockerfile +46 -0
  162. package/dist/templates/base/google-adk/mcps/todo/package.json +22 -0
  163. package/dist/templates/base/google-adk/mcps/todo/src/server.ts +173 -0
  164. package/dist/templates/base/google-adk/mcps/todo/tsconfig.json +15 -0
  165. package/dist/templates/base/google-adk/mcps/todo/tsup.config.ts +14 -0
  166. package/dist/templates/base/google-adk/package.json +30 -0
  167. package/dist/templates/base/google-adk/pnpm-workspace.yaml +34 -0
  168. package/dist/templates/base/google-adk/prompts/system.md +4 -0
  169. package/dist/templates/base/google-adk/scripts/bootstrap.mjs +398 -0
  170. package/dist/templates/base/google-adk/scripts/dev.mjs +45 -0
  171. package/dist/templates/base/google-adk/src/agent.ts +43 -0
  172. package/dist/templates/base/google-adk/tsconfig.json +15 -0
  173. package/dist/templates/base/google-adk/tsup.config.ts +13 -0
  174. package/dist/templates/base/google-adk/web/index.html +12 -0
  175. package/dist/templates/{google-adk → base/google-adk}/web/package.json +11 -8
  176. package/dist/templates/base/google-adk/web/src/components/AgentChat.tsx +91 -0
  177. package/dist/templates/base/google-adk/web/src/components/BootstrapGate.tsx +30 -0
  178. package/dist/templates/base/google-adk/web/src/components/QrLink.tsx +25 -0
  179. package/dist/templates/base/google-adk/web/src/components/Shell.tsx +50 -0
  180. package/dist/templates/base/google-adk/web/src/config.ts +148 -0
  181. package/dist/templates/base/google-adk/web/src/lib/identity.ts +67 -0
  182. package/dist/templates/base/google-adk/web/src/lib/oidc.ts +79 -0
  183. package/dist/templates/base/google-adk/web/src/lib/status.ts +45 -0
  184. package/dist/templates/base/google-adk/web/src/lib/widget.ts +96 -0
  185. package/dist/templates/base/google-adk/web/src/main.tsx +52 -0
  186. package/dist/templates/base/google-adk/web/src/pages/Chat.tsx +15 -0
  187. package/dist/templates/base/google-adk/web/src/pages/Home.tsx +133 -0
  188. package/dist/templates/base/google-adk/web/src/pages/Landing.tsx +65 -0
  189. package/dist/templates/base/google-adk/web/src/pages/Login.tsx +81 -0
  190. package/dist/templates/base/google-adk/web/src/routes.ts +7 -0
  191. package/dist/templates/base/google-adk/web/src/styles.css +248 -0
  192. package/dist/templates/base/google-adk/web/src/vite-env.d.ts +14 -0
  193. package/dist/templates/base/google-adk/web/tsconfig.json +18 -0
  194. package/dist/templates/base/google-adk/web/vite.config.ts +46 -0
  195. package/dist/templates/base/openai-agents-sdk/.env.example +4 -0
  196. package/dist/templates/base/openai-agents-sdk/.mcp.json +1 -0
  197. package/dist/templates/base/openai-agents-sdk/AGENTS.md +135 -0
  198. package/dist/templates/base/openai-agents-sdk/README.md +173 -0
  199. package/dist/templates/base/openai-agents-sdk/ggui/blueprints/.gitkeep +0 -0
  200. package/dist/templates/base/openai-agents-sdk/ggui/ggui.json +15 -0
  201. package/dist/templates/base/openai-agents-sdk/ggui/themes/.gitkeep +0 -0
  202. package/dist/templates/base/openai-agents-sdk/gitignore +5 -0
  203. package/dist/templates/base/openai-agents-sdk/guuey.app.json +28 -0
  204. package/dist/templates/base/openai-agents-sdk/guuey.app.schema.json +119 -0
  205. package/dist/templates/base/openai-agents-sdk/guuey.json +27 -0
  206. package/dist/templates/base/openai-agents-sdk/mcps/todo/Dockerfile +46 -0
  207. package/dist/templates/base/openai-agents-sdk/mcps/todo/package.json +22 -0
  208. package/dist/templates/base/openai-agents-sdk/mcps/todo/src/server.ts +173 -0
  209. package/dist/templates/base/openai-agents-sdk/mcps/todo/tsconfig.json +15 -0
  210. package/dist/templates/base/openai-agents-sdk/mcps/todo/tsup.config.ts +14 -0
  211. package/dist/templates/base/openai-agents-sdk/package.json +30 -0
  212. package/dist/templates/base/openai-agents-sdk/pnpm-workspace.yaml +24 -0
  213. package/dist/templates/base/openai-agents-sdk/prompts/system.md +4 -0
  214. package/dist/templates/base/openai-agents-sdk/scripts/bootstrap.mjs +398 -0
  215. package/dist/templates/base/openai-agents-sdk/scripts/dev.mjs +45 -0
  216. package/dist/templates/base/openai-agents-sdk/src/agent-config.ts +77 -0
  217. package/dist/templates/base/openai-agents-sdk/src/worker.ts +75 -0
  218. package/dist/templates/base/openai-agents-sdk/tsconfig.json +15 -0
  219. package/dist/templates/base/openai-agents-sdk/tsup.config.ts +16 -0
  220. package/dist/templates/base/openai-agents-sdk/web/index.html +12 -0
  221. package/dist/templates/{openai-agents-sdk → base/openai-agents-sdk}/web/package.json +11 -8
  222. package/dist/templates/base/openai-agents-sdk/web/src/components/AgentChat.tsx +91 -0
  223. package/dist/templates/base/openai-agents-sdk/web/src/components/BootstrapGate.tsx +30 -0
  224. package/dist/templates/base/openai-agents-sdk/web/src/components/QrLink.tsx +25 -0
  225. package/dist/templates/base/openai-agents-sdk/web/src/components/Shell.tsx +50 -0
  226. package/dist/templates/base/openai-agents-sdk/web/src/config.ts +148 -0
  227. package/dist/templates/base/openai-agents-sdk/web/src/lib/identity.ts +67 -0
  228. package/dist/templates/base/openai-agents-sdk/web/src/lib/oidc.ts +79 -0
  229. package/dist/templates/base/openai-agents-sdk/web/src/lib/status.ts +45 -0
  230. package/dist/templates/base/openai-agents-sdk/web/src/lib/widget.ts +96 -0
  231. package/dist/templates/base/openai-agents-sdk/web/src/main.tsx +52 -0
  232. package/dist/templates/base/openai-agents-sdk/web/src/pages/Chat.tsx +15 -0
  233. package/dist/templates/base/openai-agents-sdk/web/src/pages/Home.tsx +133 -0
  234. package/dist/templates/base/openai-agents-sdk/web/src/pages/Landing.tsx +65 -0
  235. package/dist/templates/base/openai-agents-sdk/web/src/pages/Login.tsx +81 -0
  236. package/dist/templates/base/openai-agents-sdk/web/src/routes.ts +7 -0
  237. package/dist/templates/base/openai-agents-sdk/web/src/styles.css +248 -0
  238. package/dist/templates/base/openai-agents-sdk/web/src/vite-env.d.ts +14 -0
  239. package/dist/templates/base/openai-agents-sdk/web/tsconfig.json +18 -0
  240. package/dist/templates/base/openai-agents-sdk/web/vite.config.ts +46 -0
  241. package/package.json +6 -3
  242. package/dist/templates/claude-agent-sdk/web/.env.example +0 -17
  243. package/dist/templates/claude-agent-sdk/web/sandbox-proxy.ts +0 -239
  244. package/dist/templates/claude-agent-sdk/web/src/App.tsx +0 -272
  245. package/dist/templates/claude-agent-sdk/web/src/main.tsx +0 -12
  246. package/dist/templates/claude-agent-sdk/web/src/useAgentChat.ts +0 -122
  247. package/dist/templates/claude-agent-sdk/web/src/vite-env.d.ts +0 -27
  248. package/dist/templates/claude-agent-sdk/web/tsconfig.json +0 -20
  249. package/dist/templates/claude-agent-sdk/web/vite.config.ts +0 -12
  250. package/dist/templates/google-adk/web/.env.example +0 -17
  251. package/dist/templates/google-adk/web/sandbox-proxy.ts +0 -239
  252. package/dist/templates/google-adk/web/src/App.tsx +0 -272
  253. package/dist/templates/google-adk/web/src/main.tsx +0 -12
  254. package/dist/templates/google-adk/web/src/useAgentChat.ts +0 -122
  255. package/dist/templates/google-adk/web/src/vite-env.d.ts +0 -27
  256. package/dist/templates/google-adk/web/tsconfig.json +0 -20
  257. package/dist/templates/google-adk/web/vite.config.ts +0 -12
  258. package/dist/templates/openai-agents-sdk/web/.env.example +0 -17
  259. package/dist/templates/openai-agents-sdk/web/sandbox-proxy.ts +0 -239
  260. package/dist/templates/openai-agents-sdk/web/src/App.tsx +0 -272
  261. package/dist/templates/openai-agents-sdk/web/src/main.tsx +0 -12
  262. package/dist/templates/openai-agents-sdk/web/src/useAgentChat.ts +0 -122
  263. package/dist/templates/openai-agents-sdk/web/src/vite-env.d.ts +0 -27
  264. package/dist/templates/openai-agents-sdk/web/tsconfig.json +0 -20
  265. package/dist/templates/openai-agents-sdk/web/vite.config.ts +0 -12
  266. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/.env.example +0 -0
  267. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/.mcp.json +0 -0
  268. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/ggui/blueprints/.gitkeep +0 -0
  269. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/ggui/ggui.json +0 -0
  270. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/ggui/themes/.gitkeep +0 -0
  271. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/guuey.json +0 -0
  272. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/mcps/todo/Dockerfile +0 -0
  273. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/mcps/todo/package.json +0 -0
  274. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/mcps/todo/src/server.ts +0 -0
  275. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/mcps/todo/tsconfig.json +0 -0
  276. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/mcps/todo/tsup.config.ts +0 -0
  277. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/pnpm-workspace.yaml +0 -0
  278. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/prompts/system.md +0 -0
  279. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/scripts/dev.mjs +0 -0
  280. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/src/agent-config.ts +0 -0
  281. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/src/worker.ts +0 -0
  282. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/tsconfig.json +0 -0
  283. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/tsup.config.ts +0 -0
  284. /package/dist/templates/{google-adk → agentic-app/google-adk}/.env.example +0 -0
  285. /package/dist/templates/{google-adk → agentic-app/google-adk}/.mcp.json +0 -0
  286. /package/dist/templates/{google-adk → agentic-app/google-adk}/README.md +0 -0
  287. /package/dist/templates/{google-adk → agentic-app/google-adk}/ggui/blueprints/.gitkeep +0 -0
  288. /package/dist/templates/{google-adk → agentic-app/google-adk}/ggui/ggui.json +0 -0
  289. /package/dist/templates/{google-adk → agentic-app/google-adk}/ggui/themes/.gitkeep +0 -0
  290. /package/dist/templates/{google-adk → agentic-app/google-adk}/guuey.json +0 -0
  291. /package/dist/templates/{google-adk → agentic-app/google-adk}/mcps/todo/Dockerfile +0 -0
  292. /package/dist/templates/{google-adk → agentic-app/google-adk}/mcps/todo/package.json +0 -0
  293. /package/dist/templates/{google-adk → agentic-app/google-adk}/mcps/todo/src/server.ts +0 -0
  294. /package/dist/templates/{google-adk → agentic-app/google-adk}/mcps/todo/tsconfig.json +0 -0
  295. /package/dist/templates/{google-adk → agentic-app/google-adk}/mcps/todo/tsup.config.ts +0 -0
  296. /package/dist/templates/{google-adk → agentic-app/google-adk}/pnpm-workspace.yaml +0 -0
  297. /package/dist/templates/{google-adk → agentic-app/google-adk}/prompts/system.md +0 -0
  298. /package/dist/templates/{google-adk → agentic-app/google-adk}/scripts/dev.mjs +0 -0
  299. /package/dist/templates/{google-adk → agentic-app/google-adk}/src/agent.ts +0 -0
  300. /package/dist/templates/{google-adk → agentic-app/google-adk}/tsconfig.json +0 -0
  301. /package/dist/templates/{google-adk → agentic-app/google-adk}/tsup.config.ts +0 -0
  302. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/.env.example +0 -0
  303. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/.mcp.json +0 -0
  304. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/ggui/blueprints/.gitkeep +0 -0
  305. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/ggui/ggui.json +0 -0
  306. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/ggui/themes/.gitkeep +0 -0
  307. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/guuey.json +0 -0
  308. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/mcps/todo/Dockerfile +0 -0
  309. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/mcps/todo/package.json +0 -0
  310. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/mcps/todo/src/server.ts +0 -0
  311. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/mcps/todo/tsconfig.json +0 -0
  312. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/mcps/todo/tsup.config.ts +0 -0
  313. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/pnpm-workspace.yaml +0 -0
  314. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/prompts/system.md +0 -0
  315. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/scripts/dev.mjs +0 -0
  316. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/src/agent-config.ts +0 -0
  317. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/src/worker.ts +0 -0
  318. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/tsconfig.json +0 -0
  319. /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 &lt;name&gt;</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,4 @@
1
+ # LLM key for local dev — the deployed agent uses guuey's managed broker instead.
2
+ ANTHROPIC_API_KEY=
3
+ # Only needed for the openai-agents-sdk template:
4
+ OPENAI_API_KEY=
@@ -0,0 +1 @@
1
+ { "mcpServers": { "ggui-dev": { "type": "http", "url": "https://mcp.ggui.ai/dev" } } }