@guuey/create-agentic-app 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) 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 +17 -3
  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 +376 -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 +28 -0
  18. package/dist/templates/agentic-app/claude-agent-sdk/web/src/components/AgentChat.tsx +53 -0
  19. package/dist/templates/agentic-app/claude-agent-sdk/web/src/components/AppShell.tsx +65 -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/Shell.tsx +50 -0
  22. package/dist/templates/agentic-app/claude-agent-sdk/web/src/config.ts +148 -0
  23. package/dist/templates/agentic-app/claude-agent-sdk/web/src/lib/identity.ts +67 -0
  24. package/dist/templates/agentic-app/claude-agent-sdk/web/src/lib/oidc.ts +79 -0
  25. package/dist/templates/agentic-app/claude-agent-sdk/web/src/lib/status.ts +45 -0
  26. package/dist/templates/agentic-app/claude-agent-sdk/web/src/lib/widget.ts +96 -0
  27. package/dist/templates/agentic-app/claude-agent-sdk/web/src/main.tsx +52 -0
  28. package/dist/templates/agentic-app/claude-agent-sdk/web/src/pages/AgentCanvas.tsx +14 -0
  29. package/dist/templates/agentic-app/claude-agent-sdk/web/src/pages/Dashboard.tsx +36 -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 +50 -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 +50 -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 +132 -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 +1 -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 +376 -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 +28 -0
  49. package/dist/templates/agentic-app/google-adk/web/src/components/AgentChat.tsx +53 -0
  50. package/dist/templates/agentic-app/google-adk/web/src/components/AppShell.tsx +65 -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/Shell.tsx +50 -0
  53. package/dist/templates/agentic-app/google-adk/web/src/config.ts +148 -0
  54. package/dist/templates/agentic-app/google-adk/web/src/lib/identity.ts +67 -0
  55. package/dist/templates/agentic-app/google-adk/web/src/lib/oidc.ts +79 -0
  56. package/dist/templates/agentic-app/google-adk/web/src/lib/status.ts +45 -0
  57. package/dist/templates/agentic-app/google-adk/web/src/lib/widget.ts +96 -0
  58. package/dist/templates/agentic-app/google-adk/web/src/main.tsx +52 -0
  59. package/dist/templates/agentic-app/google-adk/web/src/pages/AgentCanvas.tsx +14 -0
  60. package/dist/templates/agentic-app/google-adk/web/src/pages/Dashboard.tsx +36 -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 +50 -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 +50 -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 +132 -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 +1 -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 +17 -3
  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 +376 -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 +28 -0
  81. package/dist/templates/agentic-app/openai-agents-sdk/web/src/components/AgentChat.tsx +53 -0
  82. package/dist/templates/agentic-app/openai-agents-sdk/web/src/components/AppShell.tsx +65 -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/Shell.tsx +50 -0
  85. package/dist/templates/agentic-app/openai-agents-sdk/web/src/config.ts +148 -0
  86. package/dist/templates/agentic-app/openai-agents-sdk/web/src/lib/identity.ts +67 -0
  87. package/dist/templates/agentic-app/openai-agents-sdk/web/src/lib/oidc.ts +79 -0
  88. package/dist/templates/agentic-app/openai-agents-sdk/web/src/lib/status.ts +45 -0
  89. package/dist/templates/agentic-app/openai-agents-sdk/web/src/lib/widget.ts +96 -0
  90. package/dist/templates/agentic-app/openai-agents-sdk/web/src/main.tsx +52 -0
  91. package/dist/templates/agentic-app/openai-agents-sdk/web/src/pages/AgentCanvas.tsx +14 -0
  92. package/dist/templates/agentic-app/openai-agents-sdk/web/src/pages/Dashboard.tsx +36 -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 +50 -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 +50 -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 +132 -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 +1 -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 +171 -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 +376 -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 +9 -8
  131. package/dist/templates/base/claude-agent-sdk/web/src/components/AgentChat.tsx +53 -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/Shell.tsx +50 -0
  134. package/dist/templates/base/claude-agent-sdk/web/src/config.ts +148 -0
  135. package/dist/templates/base/claude-agent-sdk/web/src/lib/identity.ts +67 -0
  136. package/dist/templates/base/claude-agent-sdk/web/src/lib/oidc.ts +79 -0
  137. package/dist/templates/base/claude-agent-sdk/web/src/lib/status.ts +45 -0
  138. package/dist/templates/base/claude-agent-sdk/web/src/lib/widget.ts +96 -0
  139. package/dist/templates/base/claude-agent-sdk/web/src/main.tsx +38 -0
  140. package/dist/templates/base/claude-agent-sdk/web/src/pages/Chat.tsx +15 -0
  141. package/dist/templates/base/claude-agent-sdk/web/src/pages/Home.tsx +133 -0
  142. package/dist/templates/base/claude-agent-sdk/web/src/pages/Landing.tsx +50 -0
  143. package/dist/templates/base/claude-agent-sdk/web/src/pages/Login.tsx +81 -0
  144. package/dist/templates/base/claude-agent-sdk/web/src/routes.ts +7 -0
  145. package/dist/templates/base/claude-agent-sdk/web/src/styles.css +248 -0
  146. package/dist/templates/base/claude-agent-sdk/web/src/vite-env.d.ts +1 -0
  147. package/dist/templates/base/claude-agent-sdk/web/tsconfig.json +18 -0
  148. package/dist/templates/base/claude-agent-sdk/web/vite.config.ts +46 -0
  149. package/dist/templates/base/google-adk/.env.example +4 -0
  150. package/dist/templates/base/google-adk/.mcp.json +1 -0
  151. package/dist/templates/base/google-adk/AGENTS.md +135 -0
  152. package/dist/templates/base/google-adk/README.md +90 -0
  153. package/dist/templates/base/google-adk/ggui/blueprints/.gitkeep +0 -0
  154. package/dist/templates/base/google-adk/ggui/ggui.json +15 -0
  155. package/dist/templates/base/google-adk/ggui/themes/.gitkeep +0 -0
  156. package/dist/templates/base/google-adk/gitignore +5 -0
  157. package/dist/templates/base/google-adk/guuey.app.json +28 -0
  158. package/dist/templates/base/google-adk/guuey.app.schema.json +119 -0
  159. package/dist/templates/base/google-adk/guuey.json +15 -0
  160. package/dist/templates/base/google-adk/mcps/todo/Dockerfile +46 -0
  161. package/dist/templates/base/google-adk/mcps/todo/package.json +22 -0
  162. package/dist/templates/base/google-adk/mcps/todo/src/server.ts +173 -0
  163. package/dist/templates/base/google-adk/mcps/todo/tsconfig.json +15 -0
  164. package/dist/templates/base/google-adk/mcps/todo/tsup.config.ts +14 -0
  165. package/dist/templates/base/google-adk/package.json +30 -0
  166. package/dist/templates/base/google-adk/pnpm-workspace.yaml +34 -0
  167. package/dist/templates/base/google-adk/prompts/system.md +4 -0
  168. package/dist/templates/base/google-adk/scripts/bootstrap.mjs +376 -0
  169. package/dist/templates/base/google-adk/scripts/dev.mjs +45 -0
  170. package/dist/templates/base/google-adk/src/agent.ts +43 -0
  171. package/dist/templates/base/google-adk/tsconfig.json +15 -0
  172. package/dist/templates/base/google-adk/tsup.config.ts +13 -0
  173. package/dist/templates/base/google-adk/web/index.html +12 -0
  174. package/dist/templates/{google-adk → base/google-adk}/web/package.json +9 -8
  175. package/dist/templates/base/google-adk/web/src/components/AgentChat.tsx +53 -0
  176. package/dist/templates/base/google-adk/web/src/components/BootstrapGate.tsx +30 -0
  177. package/dist/templates/base/google-adk/web/src/components/Shell.tsx +50 -0
  178. package/dist/templates/base/google-adk/web/src/config.ts +148 -0
  179. package/dist/templates/base/google-adk/web/src/lib/identity.ts +67 -0
  180. package/dist/templates/base/google-adk/web/src/lib/oidc.ts +79 -0
  181. package/dist/templates/base/google-adk/web/src/lib/status.ts +45 -0
  182. package/dist/templates/base/google-adk/web/src/lib/widget.ts +96 -0
  183. package/dist/templates/base/google-adk/web/src/main.tsx +38 -0
  184. package/dist/templates/base/google-adk/web/src/pages/Chat.tsx +15 -0
  185. package/dist/templates/base/google-adk/web/src/pages/Home.tsx +133 -0
  186. package/dist/templates/base/google-adk/web/src/pages/Landing.tsx +50 -0
  187. package/dist/templates/base/google-adk/web/src/pages/Login.tsx +81 -0
  188. package/dist/templates/base/google-adk/web/src/routes.ts +7 -0
  189. package/dist/templates/base/google-adk/web/src/styles.css +248 -0
  190. package/dist/templates/base/google-adk/web/src/vite-env.d.ts +1 -0
  191. package/dist/templates/base/google-adk/web/tsconfig.json +18 -0
  192. package/dist/templates/base/google-adk/web/vite.config.ts +46 -0
  193. package/dist/templates/base/openai-agents-sdk/.env.example +4 -0
  194. package/dist/templates/base/openai-agents-sdk/.mcp.json +1 -0
  195. package/dist/templates/base/openai-agents-sdk/AGENTS.md +135 -0
  196. package/dist/templates/base/openai-agents-sdk/README.md +171 -0
  197. package/dist/templates/base/openai-agents-sdk/ggui/blueprints/.gitkeep +0 -0
  198. package/dist/templates/base/openai-agents-sdk/ggui/ggui.json +15 -0
  199. package/dist/templates/base/openai-agents-sdk/ggui/themes/.gitkeep +0 -0
  200. package/dist/templates/base/openai-agents-sdk/gitignore +5 -0
  201. package/dist/templates/base/openai-agents-sdk/guuey.app.json +28 -0
  202. package/dist/templates/base/openai-agents-sdk/guuey.app.schema.json +119 -0
  203. package/dist/templates/base/openai-agents-sdk/guuey.json +27 -0
  204. package/dist/templates/base/openai-agents-sdk/mcps/todo/Dockerfile +46 -0
  205. package/dist/templates/base/openai-agents-sdk/mcps/todo/package.json +22 -0
  206. package/dist/templates/base/openai-agents-sdk/mcps/todo/src/server.ts +173 -0
  207. package/dist/templates/base/openai-agents-sdk/mcps/todo/tsconfig.json +15 -0
  208. package/dist/templates/base/openai-agents-sdk/mcps/todo/tsup.config.ts +14 -0
  209. package/dist/templates/base/openai-agents-sdk/package.json +30 -0
  210. package/dist/templates/base/openai-agents-sdk/pnpm-workspace.yaml +24 -0
  211. package/dist/templates/base/openai-agents-sdk/prompts/system.md +4 -0
  212. package/dist/templates/base/openai-agents-sdk/scripts/bootstrap.mjs +376 -0
  213. package/dist/templates/base/openai-agents-sdk/scripts/dev.mjs +45 -0
  214. package/dist/templates/base/openai-agents-sdk/src/agent-config.ts +77 -0
  215. package/dist/templates/base/openai-agents-sdk/src/worker.ts +75 -0
  216. package/dist/templates/base/openai-agents-sdk/tsconfig.json +15 -0
  217. package/dist/templates/base/openai-agents-sdk/tsup.config.ts +16 -0
  218. package/dist/templates/base/openai-agents-sdk/web/index.html +12 -0
  219. package/dist/templates/{openai-agents-sdk → base/openai-agents-sdk}/web/package.json +9 -8
  220. package/dist/templates/base/openai-agents-sdk/web/src/components/AgentChat.tsx +53 -0
  221. package/dist/templates/base/openai-agents-sdk/web/src/components/BootstrapGate.tsx +30 -0
  222. package/dist/templates/base/openai-agents-sdk/web/src/components/Shell.tsx +50 -0
  223. package/dist/templates/base/openai-agents-sdk/web/src/config.ts +148 -0
  224. package/dist/templates/base/openai-agents-sdk/web/src/lib/identity.ts +67 -0
  225. package/dist/templates/base/openai-agents-sdk/web/src/lib/oidc.ts +79 -0
  226. package/dist/templates/base/openai-agents-sdk/web/src/lib/status.ts +45 -0
  227. package/dist/templates/base/openai-agents-sdk/web/src/lib/widget.ts +96 -0
  228. package/dist/templates/base/openai-agents-sdk/web/src/main.tsx +38 -0
  229. package/dist/templates/base/openai-agents-sdk/web/src/pages/Chat.tsx +15 -0
  230. package/dist/templates/base/openai-agents-sdk/web/src/pages/Home.tsx +133 -0
  231. package/dist/templates/base/openai-agents-sdk/web/src/pages/Landing.tsx +50 -0
  232. package/dist/templates/base/openai-agents-sdk/web/src/pages/Login.tsx +81 -0
  233. package/dist/templates/base/openai-agents-sdk/web/src/routes.ts +7 -0
  234. package/dist/templates/base/openai-agents-sdk/web/src/styles.css +248 -0
  235. package/dist/templates/base/openai-agents-sdk/web/src/vite-env.d.ts +1 -0
  236. package/dist/templates/base/openai-agents-sdk/web/tsconfig.json +18 -0
  237. package/dist/templates/base/openai-agents-sdk/web/vite.config.ts +46 -0
  238. package/package.json +6 -3
  239. package/dist/templates/claude-agent-sdk/web/.env.example +0 -17
  240. package/dist/templates/claude-agent-sdk/web/sandbox-proxy.ts +0 -239
  241. package/dist/templates/claude-agent-sdk/web/src/App.tsx +0 -272
  242. package/dist/templates/claude-agent-sdk/web/src/main.tsx +0 -12
  243. package/dist/templates/claude-agent-sdk/web/src/useAgentChat.ts +0 -122
  244. package/dist/templates/claude-agent-sdk/web/src/vite-env.d.ts +0 -27
  245. package/dist/templates/claude-agent-sdk/web/tsconfig.json +0 -20
  246. package/dist/templates/claude-agent-sdk/web/vite.config.ts +0 -12
  247. package/dist/templates/google-adk/web/.env.example +0 -17
  248. package/dist/templates/google-adk/web/sandbox-proxy.ts +0 -239
  249. package/dist/templates/google-adk/web/src/App.tsx +0 -272
  250. package/dist/templates/google-adk/web/src/main.tsx +0 -12
  251. package/dist/templates/google-adk/web/src/useAgentChat.ts +0 -122
  252. package/dist/templates/google-adk/web/src/vite-env.d.ts +0 -27
  253. package/dist/templates/google-adk/web/tsconfig.json +0 -20
  254. package/dist/templates/google-adk/web/vite.config.ts +0 -12
  255. package/dist/templates/openai-agents-sdk/web/.env.example +0 -17
  256. package/dist/templates/openai-agents-sdk/web/sandbox-proxy.ts +0 -239
  257. package/dist/templates/openai-agents-sdk/web/src/App.tsx +0 -272
  258. package/dist/templates/openai-agents-sdk/web/src/main.tsx +0 -12
  259. package/dist/templates/openai-agents-sdk/web/src/useAgentChat.ts +0 -122
  260. package/dist/templates/openai-agents-sdk/web/src/vite-env.d.ts +0 -27
  261. package/dist/templates/openai-agents-sdk/web/tsconfig.json +0 -20
  262. package/dist/templates/openai-agents-sdk/web/vite.config.ts +0 -12
  263. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/.env.example +0 -0
  264. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/.mcp.json +0 -0
  265. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/ggui/blueprints/.gitkeep +0 -0
  266. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/ggui/ggui.json +0 -0
  267. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/ggui/themes/.gitkeep +0 -0
  268. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/guuey.json +0 -0
  269. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/mcps/todo/Dockerfile +0 -0
  270. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/mcps/todo/package.json +0 -0
  271. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/mcps/todo/src/server.ts +0 -0
  272. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/mcps/todo/tsconfig.json +0 -0
  273. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/mcps/todo/tsup.config.ts +0 -0
  274. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/pnpm-workspace.yaml +0 -0
  275. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/prompts/system.md +0 -0
  276. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/scripts/dev.mjs +0 -0
  277. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/src/agent-config.ts +0 -0
  278. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/src/worker.ts +0 -0
  279. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/tsconfig.json +0 -0
  280. /package/dist/templates/{claude-agent-sdk → agentic-app/claude-agent-sdk}/tsup.config.ts +0 -0
  281. /package/dist/templates/{google-adk → agentic-app/google-adk}/.env.example +0 -0
  282. /package/dist/templates/{google-adk → agentic-app/google-adk}/.mcp.json +0 -0
  283. /package/dist/templates/{google-adk → agentic-app/google-adk}/README.md +0 -0
  284. /package/dist/templates/{google-adk → agentic-app/google-adk}/ggui/blueprints/.gitkeep +0 -0
  285. /package/dist/templates/{google-adk → agentic-app/google-adk}/ggui/ggui.json +0 -0
  286. /package/dist/templates/{google-adk → agentic-app/google-adk}/ggui/themes/.gitkeep +0 -0
  287. /package/dist/templates/{google-adk → agentic-app/google-adk}/guuey.json +0 -0
  288. /package/dist/templates/{google-adk → agentic-app/google-adk}/mcps/todo/Dockerfile +0 -0
  289. /package/dist/templates/{google-adk → agentic-app/google-adk}/mcps/todo/package.json +0 -0
  290. /package/dist/templates/{google-adk → agentic-app/google-adk}/mcps/todo/src/server.ts +0 -0
  291. /package/dist/templates/{google-adk → agentic-app/google-adk}/mcps/todo/tsconfig.json +0 -0
  292. /package/dist/templates/{google-adk → agentic-app/google-adk}/mcps/todo/tsup.config.ts +0 -0
  293. /package/dist/templates/{google-adk → agentic-app/google-adk}/pnpm-workspace.yaml +0 -0
  294. /package/dist/templates/{google-adk → agentic-app/google-adk}/prompts/system.md +0 -0
  295. /package/dist/templates/{google-adk → agentic-app/google-adk}/scripts/dev.mjs +0 -0
  296. /package/dist/templates/{google-adk → agentic-app/google-adk}/src/agent.ts +0 -0
  297. /package/dist/templates/{google-adk → agentic-app/google-adk}/tsconfig.json +0 -0
  298. /package/dist/templates/{google-adk → agentic-app/google-adk}/tsup.config.ts +0 -0
  299. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/.env.example +0 -0
  300. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/.mcp.json +0 -0
  301. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/ggui/blueprints/.gitkeep +0 -0
  302. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/ggui/ggui.json +0 -0
  303. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/ggui/themes/.gitkeep +0 -0
  304. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/guuey.json +0 -0
  305. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/mcps/todo/Dockerfile +0 -0
  306. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/mcps/todo/package.json +0 -0
  307. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/mcps/todo/src/server.ts +0 -0
  308. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/mcps/todo/tsconfig.json +0 -0
  309. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/mcps/todo/tsup.config.ts +0 -0
  310. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/pnpm-workspace.yaml +0 -0
  311. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/prompts/system.md +0 -0
  312. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/scripts/dev.mjs +0 -0
  313. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/src/agent-config.ts +0 -0
  314. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/src/worker.ts +0 -0
  315. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/tsconfig.json +0 -0
  316. /package/dist/templates/{openai-agents-sdk → agentic-app/openai-agents-sdk}/tsup.config.ts +0 -0
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Placeholder product page — REPLACE with your app's real dashboard. It
3
+ * exists so the shell demonstrates the swap: menus render your product
4
+ * here; the agent dock swaps this canvas for the fullscreen agent.
5
+ */
6
+ import { Link } from "react-router-dom";
7
+ import { appConfig } from "../config";
8
+
9
+ export function Dashboard() {
10
+ return (
11
+ <div className="page">
12
+ <h1>Dashboard</h1>
13
+ <p className="calm">
14
+ This is your product's canvas — replace this page with the real thing. The agent lives in
15
+ the dock at the bottom of the sidebar; activating it swaps this whole canvas to the
16
+ fullscreen agent.
17
+ </p>
18
+ <section className="card">
19
+ <h2>Getting oriented</h2>
20
+ <ul>
21
+ <li>
22
+ <Link to="/app/agent">● Agent</Link> — the fullscreen chat with generative UI
23
+ </li>
24
+ <li>
25
+ <Link to="/app/mobile">📱 Talk on mobile</Link> — the same agent, on a phone via the
26
+ guuey portal
27
+ </li>
28
+ <li>
29
+ <Link to="/app/setup">Setup</Link> — live status + the three distribution channels for{" "}
30
+ {appConfig.brand.name}
31
+ </li>
32
+ </ul>
33
+ </section>
34
+ </div>
35
+ );
36
+ }
@@ -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,50 @@
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
+
12
+ export function Landing() {
13
+ const [widget, setWidget] = useState<WidgetOutcome | "unlinked" | "loading">(
14
+ isLinked ? "loading" : "unlinked",
15
+ );
16
+
17
+ useEffect(() => {
18
+ if (!isLinked) return;
19
+ mountWidget((outcome) => setWidget(outcome));
20
+ }, []);
21
+
22
+ return (
23
+ <main className="page landing">
24
+ <section className="hero">
25
+ <h1>{appConfig.copy.landing.headline}</h1>
26
+ <p>{appConfig.copy.landing.sub}</p>
27
+ <div className="hero-actions">
28
+ <Link to={CHAT_PATH} className="btn btn-accent">
29
+ Open the chat
30
+ </Link>
31
+ <Link to={HOME_PATH} className="btn">
32
+ How this app is wired
33
+ </Link>
34
+ </div>
35
+ {widget === "unlinked" ? (
36
+ <p className="hint">
37
+ The floating agent launcher appears here once the app is bound to a
38
+ deployed guuey agent — <code>pnpm bootstrap -- --link</code>.
39
+ </p>
40
+ ) : null}
41
+ {widget === "offline" ? (
42
+ <p className="hint">
43
+ Widget script failed to load from this environment — check the app's
44
+ Allowed Domains include this site.
45
+ </p>
46
+ ) : null}
47
+ </section>
48
+ </main>
49
+ );
50
+ }
@@ -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,50 @@
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 { useEffect, useRef, useState } from "react";
9
+ import QRCode from "qrcode";
10
+ import { appConfig } from "../config";
11
+
12
+ export function TalkOnMobile() {
13
+ const canvasRef = useRef<HTMLCanvasElement | null>(null);
14
+ const [error, setError] = useState<string | null>(null);
15
+ const link = appConfig.link;
16
+ const target = link ? `${link.portalUrl}/agent/${link.slug ?? link.appId}` : null;
17
+
18
+ useEffect(() => {
19
+ if (!target || !canvasRef.current) return;
20
+ QRCode.toCanvas(canvasRef.current, target, { width: 240, margin: 1 }).catch((err: unknown) => {
21
+ setError(err instanceof Error ? err.message : String(err));
22
+ });
23
+ }, [target]);
24
+
25
+ return (
26
+ <div className="page mobile-page">
27
+ <h1>Talk on mobile</h1>
28
+ {target ? (
29
+ <>
30
+ <p className="calm">
31
+ Scan with a phone — the same agent, in the guuey portal. (The portal
32
+ has its own sign-in, so phone conversations are separate threads.)
33
+ </p>
34
+ <canvas ref={canvasRef} className="qr" />
35
+ <p>
36
+ <a href={target} target="_blank" rel="noreferrer">
37
+ {target}
38
+ </a>
39
+ </p>
40
+ {error ? <p className="error">QR render failed: {error}</p> : null}
41
+ </>
42
+ ) : (
43
+ <p className="calm">
44
+ Available once the app is bound to a deployed guuey agent —{" "}
45
+ <code>pnpm bootstrap -- --link</code>.
46
+ </p>
47
+ )}
48
+ </div>
49
+ );
50
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Route constants shared by the chrome and pages. In the agentic-app
3
+ * template the chat is the fullscreen agent canvas inside the app shell,
4
+ * and the setup guide lives there too.
5
+ */
6
+ export const CHAT_PATH = "/app/agent";
7
+ export const HOME_PATH = "/app/setup";
@@ -0,0 +1,132 @@
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: 220px;
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
+ .sidebar-dock {
55
+ display: flex;
56
+ flex-direction: column;
57
+ gap: 2px;
58
+ padding: 8px;
59
+ border-top: 1px solid var(--line);
60
+ }
61
+
62
+ .sidebar-dock a {
63
+ padding: 9px 12px;
64
+ border-radius: 8px;
65
+ color: var(--fg-soft);
66
+ text-decoration: none;
67
+ }
68
+
69
+ .sidebar-dock a.active {
70
+ background: var(--app-accent);
71
+ color: #fff;
72
+ font-weight: 600;
73
+ }
74
+
75
+ .dock-agent {
76
+ display: flex;
77
+ align-items: center;
78
+ gap: 8px;
79
+ }
80
+
81
+ .dock-dot {
82
+ width: 8px;
83
+ height: 8px;
84
+ border-radius: 50%;
85
+ background: var(--ok);
86
+ }
87
+
88
+ .dock-agent.active .dock-dot {
89
+ background: #fff;
90
+ }
91
+
92
+ .dock-logout {
93
+ margin-top: 4px;
94
+ padding: 8px 12px;
95
+ border: none;
96
+ border-radius: 8px;
97
+ background: transparent;
98
+ color: var(--fg-soft);
99
+ text-align: left;
100
+ font-size: 14px;
101
+ cursor: pointer;
102
+ }
103
+
104
+ .canvas {
105
+ flex: 1;
106
+ min-width: 0;
107
+ display: flex;
108
+ flex-direction: column;
109
+ overflow-y: auto;
110
+ }
111
+
112
+ .canvas .page {
113
+ max-width: 880px;
114
+ }
115
+
116
+ .agent-canvas {
117
+ flex: 1;
118
+ display: flex;
119
+ min-height: 0;
120
+ padding: 16px;
121
+ }
122
+
123
+ .mobile-page {
124
+ text-align: center;
125
+ }
126
+
127
+ .qr {
128
+ border: 1px solid var(--line);
129
+ border-radius: 12px;
130
+ padding: 8px;
131
+ background: #fff;
132
+ }