@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,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,9 @@
1
+ /** Placeholder product page — REPLACE with your app's real content. */
2
+ export function Reports() {
3
+ return (
4
+ <div className="page">
5
+ <h1>Reports</h1>
6
+ <p className="calm">Another product page behind an upper-sidebar menu. Replace freely.</p>
7
+ </div>
8
+ );
9
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * "Talk on mobile" — a QR code to this agent in the guuey portal
3
+ * (app.guuey.com and its env twins). The QR targets the agent's CARD page
4
+ * (`/agent/<slug-or-appId>`), which resolves the live endpoint itself —
5
+ * never the chat route directly. Plain URL today; upgrades to a native
6
+ * deep link when portal applinks land (same path, so the QR stays valid).
7
+ */
8
+ import { appConfig } from "../config";
9
+ import { QrLink } from "../components/QrLink";
10
+
11
+ export function TalkOnMobile() {
12
+ const link = appConfig.link;
13
+ const target = link ? `${link.portalUrl}/agent/${link.slug ?? link.appId}` : null;
14
+
15
+ return (
16
+ <div className="page mobile-page">
17
+ <h1>Talk on mobile</h1>
18
+ {target ? (
19
+ <>
20
+ <p className="calm">
21
+ Scan with a phone — the same agent, in the guuey portal. (The portal
22
+ has its own sign-in, so phone conversations are separate threads.)
23
+ </p>
24
+ <QrLink url={target} size={240} />
25
+ </>
26
+ ) : (
27
+ <p className="calm">
28
+ Available once the app is bound to a deployed guuey agent —{" "}
29
+ <code>pnpm bootstrap -- --link</code>.
30
+ </p>
31
+ )}
32
+ </div>
33
+ );
34
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Route constants shared by the chrome and pages. In the agentic-app
3
+ * template the agent RAIL lives inside the app shell (guuey#303's
4
+ * chat-rail layout) — "open the chat" means entering the app.
5
+ */
6
+ export const CHAT_PATH = "/app";
7
+ export const HOME_PATH = "/app/setup";
@@ -0,0 +1,130 @@
1
+ /* agentic-app shell — split sidebar + fullscreen-swap canvas. Loaded after
2
+ styles.css; only shell-specific rules live here. */
3
+
4
+ .app-shell {
5
+ min-height: 100vh;
6
+ display: flex;
7
+ flex-direction: column;
8
+ }
9
+
10
+ .app-body {
11
+ flex: 1;
12
+ display: flex;
13
+ min-height: 0;
14
+ }
15
+
16
+ .sidebar {
17
+ width: 320px;
18
+ flex-shrink: 0;
19
+ display: flex;
20
+ flex-direction: column;
21
+ border-right: 1px solid var(--line);
22
+ background: var(--bg-soft);
23
+ }
24
+
25
+ .sidebar-brand {
26
+ display: flex;
27
+ align-items: center;
28
+ gap: 10px;
29
+ font-weight: 700;
30
+ padding: 16px;
31
+ }
32
+
33
+ .sidebar-menus {
34
+ display: flex;
35
+ flex-direction: column;
36
+ padding: 8px;
37
+ gap: 2px;
38
+ flex: 1;
39
+ }
40
+
41
+ .sidebar-menus a {
42
+ padding: 9px 12px;
43
+ border-radius: 8px;
44
+ color: var(--fg-soft);
45
+ text-decoration: none;
46
+ }
47
+
48
+ .sidebar-menus a.active {
49
+ background: var(--bg);
50
+ color: var(--fg);
51
+ font-weight: 600;
52
+ }
53
+
54
+ .agent-rail {
55
+ display: flex;
56
+ flex-direction: column;
57
+ min-height: 0;
58
+ height: 46vh;
59
+ border-top: 1px solid var(--line);
60
+ background: var(--bg);
61
+ }
62
+
63
+ .rail-chat {
64
+ flex: 1;
65
+ min-height: 0;
66
+ }
67
+
68
+ .canvas-view {
69
+ flex: 1;
70
+ display: flex;
71
+ flex-direction: column;
72
+ min-height: 0;
73
+ }
74
+
75
+ .canvas-view-bar {
76
+ display: flex;
77
+ align-items: center;
78
+ justify-content: space-between;
79
+ gap: 12px;
80
+ padding: 8px 16px;
81
+ border-bottom: 1px solid var(--line);
82
+ font-weight: 600;
83
+ }
84
+
85
+ .canvas-view-mount {
86
+ flex: 1;
87
+ min-height: 0;
88
+ }
89
+
90
+ .dock-logout {
91
+ margin-top: 4px;
92
+ padding: 8px 12px;
93
+ border: none;
94
+ border-radius: 8px;
95
+ background: transparent;
96
+ color: var(--fg-soft);
97
+ text-align: left;
98
+ font-size: 14px;
99
+ cursor: pointer;
100
+ }
101
+
102
+ .canvas {
103
+ flex: 1;
104
+ min-width: 0;
105
+ display: flex;
106
+ flex-direction: column;
107
+ overflow-y: auto;
108
+ }
109
+
110
+ .canvas .page {
111
+ max-width: 880px;
112
+ }
113
+
114
+ .agent-canvas {
115
+ flex: 1;
116
+ display: flex;
117
+ min-height: 0;
118
+ padding: 16px;
119
+ }
120
+
121
+ .mobile-page {
122
+ text-align: center;
123
+ }
124
+
125
+ .qr {
126
+ border: 1px solid var(--line);
127
+ border-radius: 12px;
128
+ padding: 8px;
129
+ background: #fff;
130
+ }
@@ -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
+ }