@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,135 @@
1
+ # AGENTS.md — steering for the coding agent working in this repo
2
+
3
+ You (the coding agent) are extending a guuey agentic app. Before you reach
4
+ for a database or a cache, read this file. The single most common mistake
5
+ here is standing up local Redis/SQLite/file-based state "just to get
6
+ something working" — **don't.** Every pod this project deploys to
7
+ (the agent entry's pod — `src/worker.ts`, or `src/agent.ts` in a google-adk scaffold — including every `kind: colocated` `mcps/*`
8
+ server auto-spawned inside it, like this scaffold's `mcps/todo` — and every
9
+ `mcps/*` server deployed with `kind: hosted`) is **ephemeral and horizontally
10
+ replaced**: gVisor-isolated,
11
+ scale-to-zero, ordinary process death on every deploy or idle timeout. A
12
+ local file or an in-process `Map` used as a database is not a shortcut —
13
+ it is silent data loss the first time the pod recycles.
14
+
15
+ Use this table to route persistence decisions. Pick a row, don't invent one.
16
+
17
+ | Need | Use | Why |
18
+ | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
19
+ | Small per-user state on an MCP server (idempotency keys, rate-limit counters, OAuth nonces, prefs, a few KB) | [`@guuey/state`](https://www.npmjs.com/package/@guuey/state) — `withGuueyContext(scopeFromAuthorization(...), fn)` | Zero auth code — guuey owns the identity rails. Durable, per-`(user, mcp)`, survives pod restarts. |
20
+ | Large or relational data (rows, queries, joins, anything you'd reach for Postgres/Redis for) | An external managed serverless DB — Neon, Upstash, Supabase, or Turso — wired in via `guuey mcp secrets set DATABASE_URL=... --server <id>` (hosted MCP) or `guuey env set DATABASE_URL=...` (the agent worker and its colocated MCP children — the pod's declared env/secrets are handed to every colocated child), consumed through the provider's serverless driver | Guuey **integrates, never operates** databases — that's the platform's hosting policy, not a v1 gap. Pick the provider's **`us-east-1`** region: a guuey-hosted MCP → provider hop is then same-region AWS backbone, single-digit-ms — comparable to a cross-AZ hop, and agent turns are already dominated by seconds of LLM inference. |
21
+ | Local Redis, SQLite, or any file written as a database | **Never.** Not for v1, not "temporarily." | Pods are ephemeral and horizontally replaced — a local store vanishes on the next deploy, restart, or scale event, with no warning to you or the user. |
22
+ | Per-user files/blobs from **inside the agent pod** (the agent entry) | [`@guuey/fs`](https://www.npmjs.com/package/@guuey/fs)'s `homeDir()`/`appDir()`/`sessionDir()`, or the raw `$GUUEY_HOME_DIR`/`$GUUEY_APP_DIR` env vars + `node:fs` | Every invoke already gets these three bound directories — `$GUUEY_HOME_DIR` is durable per-user, `$GUUEY_APP_DIR` is read-only shared, cwd is session scratch. No wrapper API required, but the helpers save you the env-var lookups. |
23
+ | Per-user files/blobs from **inside an MCP server** (`mcps/*`) | Not yet available — `@guuey/files` is planned but not shipped. Fall back to the managed-DB row above (e.g. store blobs in the provider's object storage) until it lands. | Don't build against an API that doesn't exist yet. |
24
+ | Conversation / chat history | **Do not re-implement.** The platform already persists it. | Guuey writes thread history to DynamoDB and streams it back over AppSync; agents that keep their own transcript store are duplicating (and diverging from) data the platform already owns. |
25
+
26
+ ## `@guuey/state`: the one-line pattern
27
+
28
+ `@guuey/state` only works inside an MCP server whose `guuey.json` entry is
29
+ **federated** — that's the opt-in. A `kind: colocated` entry (like
30
+ `mcps/todo` in this scaffold) or a `kind: hosted` entry is federated
31
+ automatically. If you add a `kind: external` entry (a server you host
32
+ yourself, reached by URL), you must set `federate: true` on it:
33
+
34
+ ```json
35
+ {
36
+ "kind": "external",
37
+ "url": "https://your-server.example.com",
38
+ "federate": true
39
+ }
40
+ ```
41
+
42
+ Without `federate: true` (or `kind: colocated`/`kind: hosted`/a `ggui`
43
+ URL), guuey has no
44
+ identity to hand your server — a plain external entry with static
45
+ `headers` gets **no token and no state.** The token guuey sends on every
46
+ request to a federated server IS the credential; there is no separate
47
+ API key to provision.
48
+
49
+ Inside a federated MCP server, wrap each request in
50
+ `withGuueyContext(scopeFromAuthorization(header), fn)` and use the
51
+ barrel-exported `kv` inside `fn` — that's the whole integration. One
52
+ complete, runnable example — an idempotency-key check on a tool call,
53
+ using the raw Node `http` transport this scaffold's `mcps/todo/src/server.ts`
54
+ already uses:
55
+
56
+ ```ts
57
+ import { createHash } from "node:crypto";
58
+ import type { IncomingMessage, ServerResponse } from "node:http";
59
+ import { withGuueyContext, scopeFromAuthorization, kv, QuotaExceededError } from "@guuey/state";
60
+
61
+ // Inside the per-request handler (see mcps/todo/src/server.ts for the
62
+ // full StreamableHTTPServerTransport wiring this drops into):
63
+ async function handleRequest(req: IncomingMessage, res: ServerResponse): Promise<void> {
64
+ const authHeader = req.headers.authorization;
65
+ if (typeof authHeader !== "string") {
66
+ res.writeHead(401).end();
67
+ return;
68
+ }
69
+
70
+ await withGuueyContext(scopeFromAuthorization(authHeader), async () => {
71
+ // ... hand off to your MCP transport/tool dispatch here; the
72
+ // AsyncLocalStorage context set above is visible to every `kv.*`
73
+ // call for the lifetime of this request, however deep the call
74
+ // stack goes (tool handlers, helper functions, etc.).
75
+ await handleCreateOrder({ orderPayload: "..." });
76
+ });
77
+ }
78
+
79
+ async function handleCreateOrder(input: { orderPayload: string }): Promise<{ duplicate: boolean }> {
80
+ const idempotencyKey = `order:${createHash("sha256").update(input.orderPayload).digest("hex")}`;
81
+
82
+ if (await kv.has(idempotencyKey)) {
83
+ return { duplicate: true };
84
+ }
85
+
86
+ try {
87
+ // TTL is required on every `set` — no permanent keys. Pick a window
88
+ // that covers realistic retry storms; 1 hour is a reasonable default
89
+ // for an idempotency key.
90
+ await kv.set(idempotencyKey, true, { ttl: 60 * 60 });
91
+ } catch (err) {
92
+ if (err instanceof QuotaExceededError) {
93
+ // The (user, mcp) scope hit its 1 MiB cap. Surface this to the
94
+ // caller instead of silently dropping the idempotency guard.
95
+ throw new Error("state quota exceeded — cannot verify idempotency");
96
+ }
97
+ throw err;
98
+ }
99
+
100
+ // ... actually create the order here.
101
+ return { duplicate: false };
102
+ }
103
+ ```
104
+
105
+ `scopeFromAuthorization` derives `{ userId, mcpId }` from the inbound
106
+ `Authorization: Bearer <jwt>` header guuey sends on every federated call —
107
+ `userId` from the JWT's `sub`, `mcpId` deterministically from its `aud`
108
+ (your server's federated resource URL). You never assert either id
109
+ yourself; a mismatched or missing token is rejected server-side.
110
+
111
+ ## The hard caps (design your data model around these, don't work around them)
112
+
113
+ `@guuey/state` is a KV, not a database — enforced, not a suggestion:
114
+
115
+ | Cap | Value |
116
+ | ------------------ | --------------------------------------------- |
117
+ | Scope size | 1 MiB (per `(user, mcp)`, key bytes included) |
118
+ | Single value | 64 KiB |
119
+ | TTL | required, ≤ 90 days — no permanent keys |
120
+ | `keys()` page size | ≤ 1000 |
121
+ | `mget()` batch | ≤ 100 keys |
122
+ | Counters | safe integers only (`increment`/`decrement`) |
123
+
124
+ If your data model needs more than this — queries, joins, cross-user
125
+ data, anything past a long tail of small per-user facts — that's the
126
+ signal to use the managed-DB row above, not to fight the cap.
127
+
128
+ ## Chat history: really, don't
129
+
130
+ If you find yourself writing message transcripts to `@guuey/state`,
131
+ `$GUUEY_HOME_DIR`, or an external DB keyed by conversation, stop — that's
132
+ the platform's job. Guuey persists every thread to DynamoDB and streams
133
+ history back over AppSync subscriptions; the client and Portal already
134
+ read it from there. A parallel, agent-owned history store will drift from
135
+ the platform's copy and confuse users about which one is authoritative.
@@ -0,0 +1,90 @@
1
+ # Your Google-ADK agent on Guuey
2
+
3
+ You write **pure [Google ADK](https://google.github.io/adk-docs/) code** —
4
+ `src/agent.ts` exports your agent, and Guuey runs it. There is no Guuey SDK
5
+ to learn, no worker loop, no event plumbing: the platform injects the
6
+ harness around your export, locally (`pnpm dev`) and in production
7
+ (`guuey deploy`) identically.
8
+
9
+ ```ts
10
+ import type { GuueyContext } from "@guuey/config";
11
+
12
+ export default (guuey: GuueyContext<MCPToolset>) =>
13
+ new LlmAgent({
14
+ model: guuey.model,
15
+ // Wrapped as a function — see the "instruction" row below.
16
+ instruction: () => guuey.instruction,
17
+ tools: [myTool, ...guuey.mcpToolsets],
18
+ });
19
+ ```
20
+
21
+ ## Quick start
22
+
23
+ ```bash
24
+ pnpm install
25
+ cp .env.example .env.local # set GEMINI_API_KEY
26
+ pnpm dev # local stack: your agent + the todo MCP + chat
27
+ guuey deploy # same code, hosted
28
+ ```
29
+
30
+ ## The GuueyContext (everything the platform hands you)
31
+
32
+ Your factory runs **once per turn** and receives:
33
+
34
+ | field | what it is |
35
+ | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
36
+ | `model` | resolved model id (from `guuey.json`, registry default otherwise) |
37
+ | `instruction` | your system prompt **with the conversation preamble already prepended** — feed it to the agent and it is conversational with zero state code. **Pass it as `() => guuey.instruction`, not a bare string** — ADK applies `{var}` session-state substitution to a string instruction, and the preamble embeds prior user messages verbatim; a message containing `{anything}` would crash the turn. |
38
+ | `mcpToolsets` | ready-to-use ADK `MCPToolset`s for every server in `guuey.json#mcpServers` — credentials, URLs, and auth headers already resolved by the platform |
39
+ | `user` | the end user this turn serves: `{ id, authMode }` — build multi-tenant behavior on `user.id` |
40
+ | `files` | three storage tiers (absolute paths — see the state map below) |
41
+ | `history` / `memory` / `workingState` | the raw conversation state, if you want to render context yourself instead of using `instruction` |
42
+
43
+ ## Where state lives (the three-tier map)
44
+
45
+ | you want to… | use | persistence |
46
+ | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
47
+ | save/read **files** from agent code or tools | `guuey.files.home` (per-USER durable) · `guuey.files.session` (per-session scratch) · `guuey.files.app` (read-only app assets) | `home` survives across sessions per user |
48
+ | have the agent **remember the conversation** | nothing — `instruction` already carries history + thread memory + working state | automatic (Guuey folds every turn) |
49
+ | store data from your **MCP server's tools** (e.g. the todo list) | `@guuey/state` KV inside the MCP server — scoped per `(user, server)` | **durable when `GUUEY_KV_URL` is injected — colocated (like `mcps/todo`) and hosted servers get it automatically on deploy**; the scope survives pod restarts and redeploys. Locally (`pnpm dev`) it falls back to in-memory. |
50
+
51
+ Three honest notes:
52
+
53
+ - **ADK-native session state does not persist across turns here.** Guuey
54
+ runs your agent with a fresh `InMemoryRunner` per turn (that's what makes
55
+ turns cheap and stateless); `session.state` / `outputKey` /
56
+ `DatabaseSessionService` won't carry data forward. Use the table above —
57
+ history and thread memory ARE the persistence, and they arrive
58
+ pre-rendered in `instruction`.
59
+ - **Writing `workingState` for the next turn** is a platform feature in
60
+ flight; today the fold carries what the conversation itself establishes.
61
+ - **Guuey's cross-session `MEMORY.md` file recall is `claude-agent-sdk`-only
62
+ today** — ADK agents get `guuey.files.home` for their own reads/writes,
63
+ but not the platform's automatic recall of it into `instruction`.
64
+ All-framework support arrives with guuey's own memory MCP. Separately,
65
+ ADK's own durable-memory feature (Vertex MemoryBank) is unsupported on
66
+ Guuey — it stores user data in GCP, outside guuey's deletion boundary.
67
+
68
+ The three `guuey.files` paths above are the same platform-wide filesystem
69
+ contract every framework gets (plain paths, `$GUUEY_HOME_DIR`/
70
+ `$GUUEY_APP_DIR` under the hood) — see the guuey monorepo's
71
+ `docs/quickstart.md` ("Your agent's filesystem") for the full contract,
72
+ memory behavior, and rollout status if you want the framework-neutral
73
+ version.
74
+
75
+ ## MCP servers
76
+
77
+ `guuey.json#mcpServers` declares them; the platform connects them and hands
78
+ you `guuey.mcpToolsets`. Locally, `pnpm dev`'s `guuey dev` auto-spawns the
79
+ colocated `mcps/todo` server on its `devPort`; deployed, the same code runs
80
+ as a supervised child inside your agent's pod. Note: ADK speaks
81
+ **Streamable HTTP** only — an
82
+ `sse` transport server will be rejected with a clear error.
83
+
84
+ ## When you outgrow the factory
85
+
86
+ If you need to own the turn loop itself (custom streaming, multiple agents
87
+ per turn, your own protocol), graduate to a full worker: add a
88
+ `guuey.worker.js` build via `@guuey/worker`'s `serveNative()` — see the
89
+ Guuey docs. `agent.entry` and a full worker are mutually exclusive; the
90
+ worker wins if both exist.
@@ -0,0 +1,15 @@
1
+ {
2
+ "schema": "1",
3
+ "protocol": "draft-2026-06-12",
4
+ "app": {
5
+ "slug": "agentic-app-template",
6
+ "name": "agentic-app-template"
7
+ },
8
+ "generation": {
9
+ "model": "anthropic:claude-haiku-4-5-20251001"
10
+ },
11
+ "theme": {
12
+ "preset": "indigo",
13
+ "mode": "dark"
14
+ }
15
+ }
@@ -0,0 +1,5 @@
1
+ node_modules/
2
+ dist/
3
+ .env.local
4
+ guuey.worker.js
5
+ .guuey-dev/
@@ -0,0 +1,28 @@
1
+ {
2
+ "$schema": "./guuey.app.schema.json",
3
+ "schema": 1,
4
+ "bootstrapped": false,
5
+ "brand": {
6
+ "name": "agentic-app-template",
7
+ "tagline": "An agentic app built on guuey",
8
+ "logoText": "AA"
9
+ },
10
+ "theme": {
11
+ "accent": "#6c5ce7",
12
+ "mode": "light"
13
+ },
14
+ "copy": {
15
+ "landing": {
16
+ "headline": "Ask anything.",
17
+ "sub": "This site has an agent. Open the chat, or use the launcher in the corner."
18
+ },
19
+ "login": {
20
+ "guestHint": "One click, no account — this browser gets its own private thread the agent remembers."
21
+ }
22
+ },
23
+ "auth": {
24
+ "oidc": null
25
+ },
26
+ "link": null,
27
+ "demoMode": false
28
+ }
@@ -0,0 +1,119 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "guuey.app.json",
4
+ "description": "App-level configuration for this guuey agentic app. Written by `pnpm bootstrap`; safe to hand-edit. Public-safe by construction: nothing in this file is a secret (the appId ships in page HTML by design).",
5
+ "type": "object",
6
+ "required": ["schema", "bootstrapped", "brand", "theme", "copy", "auth", "link", "demoMode"],
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "$schema": { "type": "string" },
10
+ "schema": { "const": 1 },
11
+ "bootstrapped": {
12
+ "type": "boolean",
13
+ "description": "Flipped true by `pnpm bootstrap`. Dev renders a setup screen until then; production builds fail."
14
+ },
15
+ "brand": {
16
+ "type": "object",
17
+ "required": ["name", "tagline", "logoText"],
18
+ "additionalProperties": false,
19
+ "properties": {
20
+ "name": { "type": "string", "minLength": 1 },
21
+ "tagline": { "type": "string" },
22
+ "logoText": {
23
+ "type": "string",
24
+ "maxLength": 4,
25
+ "description": "1-4 characters shown in the square brand mark."
26
+ }
27
+ }
28
+ },
29
+ "theme": {
30
+ "type": "object",
31
+ "required": ["accent", "mode"],
32
+ "additionalProperties": false,
33
+ "properties": {
34
+ "accent": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" },
35
+ "mode": { "enum": ["light", "dark"] }
36
+ }
37
+ },
38
+ "copy": {
39
+ "type": "object",
40
+ "required": ["landing", "login"],
41
+ "additionalProperties": false,
42
+ "properties": {
43
+ "landing": {
44
+ "type": "object",
45
+ "required": ["headline", "sub"],
46
+ "additionalProperties": false,
47
+ "properties": {
48
+ "headline": { "type": "string" },
49
+ "sub": { "type": "string" }
50
+ }
51
+ },
52
+ "login": {
53
+ "type": "object",
54
+ "required": ["guestHint"],
55
+ "additionalProperties": false,
56
+ "properties": {
57
+ "guestHint": { "type": "string" }
58
+ }
59
+ }
60
+ }
61
+ },
62
+ "auth": {
63
+ "type": "object",
64
+ "required": ["oidc"],
65
+ "additionalProperties": false,
66
+ "properties": {
67
+ "oidc": {
68
+ "description": "BYO-OIDC sign-in. null = guest-only. When set, the bound guuey app must be in BYO auth mode for the same issuer: `guuey apps update <appId> --auth-mode byo --issuer-url <issuer> --audience <clientId>`.",
69
+ "oneOf": [
70
+ { "type": "null" },
71
+ {
72
+ "type": "object",
73
+ "required": ["issuer", "clientId"],
74
+ "additionalProperties": false,
75
+ "properties": {
76
+ "issuer": { "type": "string", "format": "uri" },
77
+ "clientId": { "type": "string", "minLength": 1 }
78
+ }
79
+ }
80
+ ]
81
+ }
82
+ }
83
+ },
84
+ "link": {
85
+ "description": "The bound guuey app. null until `pnpm bootstrap -- --link`. Every value here is read back from the platform, never derived by hand.",
86
+ "oneOf": [
87
+ { "type": "null" },
88
+ {
89
+ "type": "object",
90
+ "required": [
91
+ "appId",
92
+ "env",
93
+ "apiBaseUrl",
94
+ "endpointUrl",
95
+ "widgetOrigin",
96
+ "portalUrl",
97
+ "slug",
98
+ "pageUrl"
99
+ ],
100
+ "additionalProperties": false,
101
+ "properties": {
102
+ "appId": { "type": "string", "minLength": 1 },
103
+ "env": { "enum": ["dev", "staging", "release"] },
104
+ "apiBaseUrl": { "type": "string", "format": "uri" },
105
+ "endpointUrl": { "type": "string", "format": "uri" },
106
+ "widgetOrigin": { "type": "string", "format": "uri" },
107
+ "portalUrl": { "type": "string", "format": "uri" },
108
+ "slug": { "oneOf": [{ "type": "string" }, { "type": "null" }] },
109
+ "pageUrl": { "oneOf": [{ "type": "string", "format": "uri" }, { "type": "null" }] }
110
+ }
111
+ }
112
+ ]
113
+ },
114
+ "demoMode": {
115
+ "type": "boolean",
116
+ "description": "Renders the demo chrome (banner + fictional-product honesty strip). Off in every customer clone."
117
+ }
118
+ }
119
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "schema": "1",
3
+ "agent": {
4
+ "mode": "code",
5
+ "framework": "google-adk",
6
+ "model": "gemini-3.6-flash",
7
+ "entry": "agent.js",
8
+ "systemPrompt": { "file": "prompts/system.md" },
9
+ "mcpServers": {
10
+ "todo": { "kind": "colocated", "source": "./mcps/todo", "devPort": 6782 },
11
+ "ggui": { "kind": "external", "url": "https://mcp.ggui.ai", "transport": "http" }
12
+ }
13
+ },
14
+ "ggui": { "configFile": "./ggui/ggui.json" }
15
+ }
@@ -0,0 +1,46 @@
1
+ # todo-mcp — guuey hosted MCP server image.
2
+ #
3
+ # Self-sufficient multi-stage build: `guuey mcp deploy` packs this directory
4
+ # into a tarball and hands it straight to the builder with no external
5
+ # pre-build step and no build args — this Dockerfile installs its own deps
6
+ # and builds itself. (Different from guuey's own first-party MCP servers,
7
+ # which use a "copy-prebuilt" pattern that expects `dist/` + `node_modules/`
8
+ # to already exist before `docker build` runs — that pattern does not apply
9
+ # to a standalone project like this one.)
10
+ #
11
+ # Build + run locally:
12
+ #
13
+ # docker build -t todo-mcp .
14
+ # docker run -p 8080:8080 todo-mcp
15
+ # curl http://localhost:8080/health
16
+ #
17
+ # Deploy to guuey:
18
+ #
19
+ # cd mcps/todo && guuey mcp deploy
20
+
21
+ FROM node:22-slim AS build
22
+ WORKDIR /app
23
+ COPY package.json ./
24
+ RUN npm install
25
+ COPY tsconfig.json ./
26
+ COPY src ./src
27
+ RUN npm run build
28
+
29
+ FROM node:22-slim
30
+ WORKDIR /app
31
+ ENV NODE_ENV=production
32
+ # guuey's hosted-MCP runtime injects PORT=8080 and probes GET /health at that
33
+ # port — this default matches so `docker run` alone also works.
34
+ ENV PORT=8080
35
+
36
+ COPY package.json ./
37
+ RUN npm install --omit=dev
38
+ COPY --from=build /app/dist ./dist
39
+
40
+ USER node
41
+ EXPOSE 8080
42
+
43
+ HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
44
+ CMD node -e "fetch('http://localhost:' + (process.env.PORT || 8080) + '/health').then(r => { if (!r.ok) throw 1 }).catch(() => process.exit(1))"
45
+
46
+ CMD ["node", "dist/server.js"]
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "@agentic-app-template/todo-mcp",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "tsx src/server.ts",
8
+ "build": "tsup",
9
+ "start": "node dist/server.js",
10
+ "typecheck": "tsc --noEmit"
11
+ },
12
+ "dependencies": {
13
+ "@modelcontextprotocol/sdk": "^1.27.0",
14
+ "zod": "^4.0.0"
15
+ },
16
+ "devDependencies": {
17
+ "@types/node": "^22.0.0",
18
+ "tsx": "^4.19.0",
19
+ "tsup": "^8.5.0",
20
+ "typescript": "^5.8.0"
21
+ }
22
+ }