@noodleseed/one 0.21.0 → 0.23.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 (215) hide show
  1. package/dist/commands/author-loop.d.ts.map +1 -1
  2. package/dist/commands/author-loop.js +2 -2
  3. package/dist/commands/author-loop.js.map +1 -1
  4. package/dist/commands/catalog-dispatch.d.ts.map +1 -1
  5. package/dist/commands/catalog-dispatch.js +21 -2
  6. package/dist/commands/catalog-dispatch.js.map +1 -1
  7. package/dist/commands/deploy-ops.d.ts.map +1 -1
  8. package/dist/commands/deploy-ops.js +28 -11
  9. package/dist/commands/deploy-ops.js.map +1 -1
  10. package/dist/first-run.d.ts +11 -0
  11. package/dist/first-run.d.ts.map +1 -1
  12. package/dist/first-run.js +19 -4
  13. package/dist/first-run.js.map +1 -1
  14. package/dist/project-scaffold-templates.d.ts +11 -0
  15. package/dist/project-scaffold-templates.d.ts.map +1 -0
  16. package/dist/project-scaffold-templates.js +359 -0
  17. package/dist/project-scaffold-templates.js.map +1 -0
  18. package/dist/project.d.ts.map +1 -1
  19. package/dist/project.js +1 -323
  20. package/dist/project.js.map +1 -1
  21. package/dist/react.d.ts +2 -2
  22. package/dist/react.d.ts.map +1 -1
  23. package/dist/react.js +1 -1
  24. package/dist/react.js.map +1 -1
  25. package/dist/validate.d.ts +12 -0
  26. package/dist/validate.d.ts.map +1 -1
  27. package/dist/validate.js +11 -0
  28. package/dist/validate.js.map +1 -1
  29. package/node_modules/@noodle-borg/agent-kit/dist/curated/hook-notes.d.ts.map +1 -1
  30. package/node_modules/@noodle-borg/agent-kit/dist/curated/hook-notes.js +2 -1
  31. package/node_modules/@noodle-borg/agent-kit/dist/curated/hook-notes.js.map +1 -1
  32. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
  33. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +1 -0
  34. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
  35. package/node_modules/@noodle-borg/agent-kit/dist/skill-content.d.ts.map +1 -1
  36. package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js +6 -9
  37. package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js.map +1 -1
  38. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  39. package/node_modules/@noodle-borg/authoring/dist/index.d.ts +3 -3
  40. package/node_modules/@noodle-borg/authoring/dist/index.d.ts.map +1 -1
  41. package/node_modules/@noodle-borg/authoring/dist/index.js +1 -1
  42. package/node_modules/@noodle-borg/authoring/dist/index.js.map +1 -1
  43. package/node_modules/@noodle-borg/authoring/dist/react/bridge.d.ts +9 -1
  44. package/node_modules/@noodle-borg/authoring/dist/react/bridge.d.ts.map +1 -1
  45. package/node_modules/@noodle-borg/authoring/dist/react/bridge.js +11 -1
  46. package/node_modules/@noodle-borg/authoring/dist/react/bridge.js.map +1 -1
  47. package/node_modules/@noodle-borg/authoring/dist/react/components.d.ts +306 -9
  48. package/node_modules/@noodle-borg/authoring/dist/react/components.d.ts.map +1 -1
  49. package/node_modules/@noodle-borg/authoring/dist/react/components.js +63 -11
  50. package/node_modules/@noodle-borg/authoring/dist/react/components.js.map +1 -1
  51. package/node_modules/@noodle-borg/authoring/dist/react/hooks.d.ts +2 -0
  52. package/node_modules/@noodle-borg/authoring/dist/react/hooks.d.ts.map +1 -1
  53. package/node_modules/@noodle-borg/authoring/dist/react/hooks.js +11 -0
  54. package/node_modules/@noodle-borg/authoring/dist/react/hooks.js.map +1 -1
  55. package/node_modules/@noodle-borg/authoring/dist/react/index.d.ts +7 -3
  56. package/node_modules/@noodle-borg/authoring/dist/react/index.d.ts.map +1 -1
  57. package/node_modules/@noodle-borg/authoring/dist/react/index.js +4 -2
  58. package/node_modules/@noodle-borg/authoring/dist/react/index.js.map +1 -1
  59. package/node_modules/@noodle-borg/authoring/dist/react/native-components.d.ts +1159 -0
  60. package/node_modules/@noodle-borg/authoring/dist/react/native-components.d.ts.map +1 -0
  61. package/node_modules/@noodle-borg/authoring/dist/react/native-components.js +66 -0
  62. package/node_modules/@noodle-borg/authoring/dist/react/native-components.js.map +1 -0
  63. package/node_modules/@noodle-borg/authoring/dist/react/semantic-components.d.ts +2618 -0
  64. package/node_modules/@noodle-borg/authoring/dist/react/semantic-components.d.ts.map +1 -0
  65. package/node_modules/@noodle-borg/authoring/dist/react/semantic-components.js +110 -0
  66. package/node_modules/@noodle-borg/authoring/dist/react/semantic-components.js.map +1 -0
  67. package/node_modules/@noodle-borg/authoring/dist/react.d.ts +2 -2
  68. package/node_modules/@noodle-borg/authoring/dist/react.d.ts.map +1 -1
  69. package/node_modules/@noodle-borg/authoring/dist/react.js +1 -1
  70. package/node_modules/@noodle-borg/authoring/dist/react.js.map +1 -1
  71. package/node_modules/@noodle-borg/authoring/dist/recording.d.ts +1 -1
  72. package/node_modules/@noodle-borg/authoring/dist/recording.d.ts.map +1 -1
  73. package/node_modules/@noodle-borg/authoring/dist/recording.js +14 -1
  74. package/node_modules/@noodle-borg/authoring/dist/recording.js.map +1 -1
  75. package/node_modules/@noodle-borg/authoring/dist/server.d.ts +25 -2
  76. package/node_modules/@noodle-borg/authoring/dist/server.d.ts.map +1 -1
  77. package/node_modules/@noodle-borg/authoring/dist/server.js +7 -3
  78. package/node_modules/@noodle-borg/authoring/dist/server.js.map +1 -1
  79. package/node_modules/@noodle-borg/compiler/dist/compile.d.ts.map +1 -1
  80. package/node_modules/@noodle-borg/compiler/dist/compile.js +20 -8
  81. package/node_modules/@noodle-borg/compiler/dist/compile.js.map +1 -1
  82. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +2 -0
  83. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts.map +1 -1
  84. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +6 -0
  85. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js.map +1 -1
  86. package/node_modules/@noodle-borg/connector-http/package.json +1 -1
  87. package/node_modules/@noodle-borg/protocol/dist/mapping.d.ts.map +1 -1
  88. package/node_modules/@noodle-borg/protocol/dist/mapping.js +8 -0
  89. package/node_modules/@noodle-borg/protocol/dist/mapping.js.map +1 -1
  90. package/node_modules/hono/dist/adapter/aws-lambda/handler.js +15 -21
  91. package/node_modules/hono/dist/adapter/bun/websocket.js +3 -1
  92. package/node_modules/hono/dist/adapter/lambda-edge/handler.js +8 -2
  93. package/node_modules/hono/dist/cjs/adapter/aws-lambda/handler.js +15 -21
  94. package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +3 -1
  95. package/node_modules/hono/dist/cjs/adapter/lambda-edge/handler.js +8 -2
  96. package/node_modules/hono/dist/cjs/helper/css/common.js +3 -1
  97. package/node_modules/hono/dist/cjs/helper/css/index.js +9 -1
  98. package/node_modules/hono/dist/cjs/jsx/base.js +8 -14
  99. package/node_modules/hono/dist/cjs/jsx/components.js +41 -21
  100. package/node_modules/hono/dist/cjs/jsx/context.js +131 -5
  101. package/node_modules/hono/dist/cjs/jsx/streaming.js +9 -7
  102. package/node_modules/hono/dist/cjs/middleware/cors/index.js +2 -5
  103. package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +2 -2
  104. package/node_modules/hono/dist/cjs/utils/body.js +12 -4
  105. package/node_modules/hono/dist/cjs/utils/buffer.js +2 -1
  106. package/node_modules/hono/dist/cjs/validator/validator.js +3 -3
  107. package/node_modules/hono/dist/helper/css/common.js +3 -1
  108. package/node_modules/hono/dist/helper/css/index.js +9 -1
  109. package/node_modules/hono/dist/jsx/base.js +15 -15
  110. package/node_modules/hono/dist/jsx/components.js +42 -22
  111. package/node_modules/hono/dist/jsx/context.js +129 -5
  112. package/node_modules/hono/dist/jsx/streaming.js +10 -8
  113. package/node_modules/hono/dist/middleware/cors/index.js +2 -5
  114. package/node_modules/hono/dist/middleware/serve-static/index.js +2 -2
  115. package/node_modules/hono/dist/types/adapter/aws-lambda/handler.d.ts +1 -1
  116. package/node_modules/hono/dist/types/jsx/base.d.ts +1 -3
  117. package/node_modules/hono/dist/types/jsx/context.d.ts +39 -0
  118. package/node_modules/hono/dist/types/middleware/context-storage/index.d.ts +2 -2
  119. package/node_modules/hono/dist/types/utils/body.d.ts +1 -1
  120. package/node_modules/hono/dist/utils/body.js +12 -4
  121. package/node_modules/hono/dist/utils/buffer.js +2 -1
  122. package/node_modules/hono/dist/validator/validator.js +3 -3
  123. package/node_modules/hono/package.json +9 -10
  124. package/node_modules/tailwindcss/dist/chunk-HMCCH6MG.mjs +1 -0
  125. package/node_modules/tailwindcss/dist/default-theme.mjs +1 -1
  126. package/node_modules/tailwindcss/dist/lib.js +13 -13
  127. package/node_modules/tailwindcss/dist/lib.mjs +18 -18
  128. package/node_modules/tailwindcss/package.json +2 -2
  129. package/node_modules/undici/README.md +3 -2
  130. package/node_modules/undici/docs/docs/api/Agent.md +248 -44
  131. package/node_modules/undici/docs/docs/api/BalancedPool.md +246 -48
  132. package/node_modules/undici/docs/docs/api/CacheStorage.md +171 -13
  133. package/node_modules/undici/docs/docs/api/CacheStore.md +294 -98
  134. package/node_modules/undici/docs/docs/api/Client.md +365 -178
  135. package/node_modules/undici/docs/docs/api/ClientStats.md +80 -14
  136. package/node_modules/undici/docs/docs/api/Connector.md +118 -36
  137. package/node_modules/undici/docs/docs/api/ContentType.md +65 -25
  138. package/node_modules/undici/docs/docs/api/Cookies.md +125 -47
  139. package/node_modules/undici/docs/docs/api/Debug.md +34 -18
  140. package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +364 -164
  141. package/node_modules/undici/docs/docs/api/Dispatcher.md +479 -1093
  142. package/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +101 -87
  143. package/node_modules/undici/docs/docs/api/Errors.md +503 -40
  144. package/node_modules/undici/docs/docs/api/EventSource.md +294 -32
  145. package/node_modules/undici/docs/docs/api/Fetch.md +680 -31
  146. package/node_modules/undici/docs/docs/api/GlobalInstallation.md +78 -98
  147. package/node_modules/undici/docs/docs/api/H2CClient.md +298 -176
  148. package/node_modules/undici/docs/docs/api/Interceptors.md +355 -0
  149. package/node_modules/undici/docs/docs/api/MockAgent.md +314 -322
  150. package/node_modules/undici/docs/docs/api/MockCallHistory.md +272 -98
  151. package/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +189 -26
  152. package/node_modules/undici/docs/docs/api/MockClient.md +151 -33
  153. package/node_modules/undici/docs/docs/api/MockErrors.md +56 -5
  154. package/node_modules/undici/docs/docs/api/MockPool.md +299 -263
  155. package/node_modules/undici/docs/docs/api/Pool.md +235 -43
  156. package/node_modules/undici/docs/docs/api/PoolStats.md +119 -13
  157. package/node_modules/undici/docs/docs/api/ProxyAgent.md +179 -160
  158. package/node_modules/undici/docs/docs/api/RedirectHandler.md +238 -63
  159. package/node_modules/undici/docs/docs/api/RetryAgent.md +113 -26
  160. package/node_modules/undici/docs/docs/api/RetryHandler.md +161 -77
  161. package/node_modules/undici/docs/docs/api/RoundRobinPool.md +166 -72
  162. package/node_modules/undici/docs/docs/api/SnapshotAgent.md +264 -542
  163. package/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +162 -186
  164. package/node_modules/undici/docs/docs/api/Util.md +68 -11
  165. package/node_modules/undici/docs/docs/api/WebSocket.md +475 -80
  166. package/node_modules/undici/docs/docs/api/api-lifecycle.md +100 -32
  167. package/node_modules/undici/docs/docs/best-practices/client-certificate.md +2 -0
  168. package/node_modules/undici/docs/docs/best-practices/crawling.md +3 -1
  169. package/node_modules/undici/docs/docs/best-practices/migrating-from-v7-to-v8.md +6 -4
  170. package/node_modules/undici/docs/docs/best-practices/mocking-request.md +9 -7
  171. package/node_modules/undici/docs/docs/best-practices/proxy.md +3 -1
  172. package/node_modules/undici/docs/docs/best-practices/undici-vs-builtin-fetch.md +10 -8
  173. package/node_modules/undici/docs/docs/best-practices/writing-tests.md +2 -0
  174. package/node_modules/undici/docs/docs/{GettingStarted.md → getting-started.md} +22 -19
  175. package/node_modules/undici/docs/docs/index.md +779 -0
  176. package/node_modules/undici/docs/docs/site.json +125 -0
  177. package/node_modules/undici/docs/docs/type-map.json +79 -0
  178. package/node_modules/undici/lib/api/api-request.js +7 -1
  179. package/node_modules/undici/lib/api/readable.js +47 -2
  180. package/node_modules/undici/lib/core/errors.js +20 -0
  181. package/node_modules/undici/lib/core/request.js +1 -1
  182. package/node_modules/undici/lib/core/util.js +24 -1
  183. package/node_modules/undici/lib/dispatcher/client-h1.js +92 -1
  184. package/node_modules/undici/lib/dispatcher/client-h2.js +322 -118
  185. package/node_modules/undici/lib/dispatcher/client.js +6 -2
  186. package/node_modules/undici/lib/dispatcher/dispatcher-base.js +1 -0
  187. package/node_modules/undici/lib/dispatcher/proxy-agent.js +42 -7
  188. package/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +4 -2
  189. package/node_modules/undici/lib/handler/redirect-handler.js +1 -0
  190. package/node_modules/undici/lib/handler/retry-handler.js +57 -19
  191. package/node_modules/undici/lib/util/cache.js +8 -2
  192. package/node_modules/undici/lib/web/cookies/parse.js +20 -27
  193. package/node_modules/undici/lib/web/cookies/util.js +1 -1
  194. package/node_modules/undici/lib/web/eventsource/eventsource.js +7 -18
  195. package/node_modules/undici/lib/web/eventsource/util.js +32 -1
  196. package/node_modules/undici/lib/web/fetch/body.js +43 -0
  197. package/node_modules/undici/lib/web/fetch/constants.js +1 -1
  198. package/node_modules/undici/lib/web/fetch/index.js +11 -2
  199. package/node_modules/undici/lib/web/fetch/request.js +1 -0
  200. package/node_modules/undici/lib/web/fetch/util.js +4 -1
  201. package/node_modules/undici/lib/web/websocket/receiver.js +20 -3
  202. package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +8 -1
  203. package/node_modules/undici/lib/web/websocket/websocket.js +3 -1
  204. package/node_modules/undici/package.json +1 -1
  205. package/node_modules/undici/types/client.d.ts +6 -1
  206. package/node_modules/undici/types/cookies.d.ts +1 -1
  207. package/node_modules/undici/types/errors.d.ts +10 -0
  208. package/node_modules/undici/types/fetch.d.ts +1 -0
  209. package/node_modules/undici/types/handlers.d.ts +2 -0
  210. package/node_modules/undici/types/proxy-agent.d.ts +7 -0
  211. package/package.json +8 -6
  212. package/react/styles.css +851 -0
  213. package/react/styles.source.css +850 -0
  214. package/node_modules/hono/dist/tsconfig.build.tsbuildinfo +0 -1
  215. package/node_modules/tailwindcss/dist/chunk-XVOTX5KS.mjs +0 -1
@@ -0,0 +1,359 @@
1
+ function title(value) {
2
+ return value
3
+ .split('-')
4
+ .filter(Boolean)
5
+ .map((part) => `${part[0]?.toUpperCase() ?? ''}${part.slice(1)}`)
6
+ .join(' ');
7
+ }
8
+ function manifestName(value) {
9
+ return value.replace(/-/g, '_');
10
+ }
11
+ export function helloFiles(name, agentTargets) {
12
+ const serverName = manifestName(name);
13
+ return commonFiles(name, 'hello', agentTargets, `import { server, tool, z } from '@noodleseed/one';
14
+
15
+ export default server('${serverName}', { title: '${title(name)}', version: '1.0.0' }, [
16
+ tool('greet', {
17
+ description: 'Greet a person by name.',
18
+ input: z.object({
19
+ name: z.string().default('world'),
20
+ }),
21
+ output: z.object({
22
+ message: z.string(),
23
+ }),
24
+ fulfil: ({ input }) => {
25
+ return { message: \`Hello, \${input.name}!\` };
26
+ },
27
+ }),
28
+ ]);
29
+ `, {});
30
+ }
31
+ export function httpApiFiles(name, agentTargets) {
32
+ const serverName = manifestName(name);
33
+ return commonFiles(name, 'http-api', agentTargets, `import { connector, server, tool, z } from '@noodleseed/one';
34
+
35
+ const jsonplaceholder = connector('jsonplaceholder')
36
+ .version('1.0.0')
37
+ .http({
38
+ baseUrl: 'https://jsonplaceholder.typicode.com',
39
+ allowedOrigins: ['https://jsonplaceholder.typicode.com'],
40
+ operations: {
41
+ get_post: {
42
+ type: 'read',
43
+ method: 'GET',
44
+ path: '/posts/\${args.post_id}',
45
+ input: { post_id: { type: 'string', required: true } },
46
+ response: {
47
+ title: '\${response.title}',
48
+ body: '\${response.body}',
49
+ },
50
+ output: {
51
+ title: { type: 'string' },
52
+ body: { type: 'string' },
53
+ },
54
+ },
55
+ },
56
+ });
57
+
58
+ export default server('${serverName}', {
59
+ title: '${title(name)}',
60
+ version: '1.0.0',
61
+ use: { posts: jsonplaceholder },
62
+ }, [
63
+ tool('get_post', {
64
+ description: 'Fetch a post from JSONPlaceholder.',
65
+ input: z.object({
66
+ post_id: z.string().default('1'),
67
+ }),
68
+ output: z.object({
69
+ title: z.string(),
70
+ body: z.string(),
71
+ }),
72
+ fulfil: ({ input, connectors }) => {
73
+ const post = connectors.posts.getPost({ post_id: input.post_id });
74
+ return { title: post.title, body: post.body };
75
+ },
76
+ }),
77
+ ]);
78
+ `, {});
79
+ }
80
+ export function widgetFiles(name, agentTargets) {
81
+ const serverName = manifestName(name);
82
+ const files = commonFiles(name, 'widget', agentTargets, `import { annotations, server, toolForWidget, toolWithWidget, z } from '@noodleseed/one';
83
+
84
+ const greetingInput = z.object({
85
+ name: z.string().default('world'),
86
+ });
87
+
88
+ const greetingOutput = z.object({
89
+ message: z.string(),
90
+ name: z.string(),
91
+ refreshed: z.boolean(),
92
+ });
93
+
94
+ export default server('${serverName}', { title: '${title(name)}', version: '1.0.0' }, [
95
+ toolWithWidget('greet', {
96
+ description: 'Return a greeting and render it in an MCP Apps widget.',
97
+ // Tool annotations are a ChatGPT-submission requirement — declare them for every tool.
98
+ annotations: annotations.readOnly(),
99
+ input: greetingInput,
100
+ output: greetingOutput,
101
+ fulfil: ({ input }) => {
102
+ return {
103
+ message: \`Hello, \${input.name}!\`,
104
+ name: input.name,
105
+ refreshed: false,
106
+ };
107
+ },
108
+ widgetTitle: 'Greeting card',
109
+ // Host status copy for the widget-opening tool (ChatGPT 'invocation metadata').
110
+ invoking: 'Preparing your greeting…',
111
+ invoked: 'Greeting ready',
112
+ // PLACEHOLDER — replace with your app's own dedicated widget domain before ChatGPT submission.
113
+ // ChatGPT requires a unique domain per app and renders the widget under a sandbox origin from it.
114
+ domain: 'https://your-app.example.com',
115
+ // Deny-by-default host CSP: list only the external origins the widget needs. This widget is
116
+ // self-contained, so the placeholder domain is the sole entry — trim or extend it for your app.
117
+ csp: {
118
+ connectDomains: ['https://your-app.example.com'],
119
+ resourceDomains: ['https://your-app.example.com'],
120
+ frameDomains: ['https://your-app.example.com'],
121
+ },
122
+ view: {
123
+ component: 'greeting-card',
124
+ entry: './views/greeting-card.tsx',
125
+ // The widget description ChatGPT reads (openai/widgetDescription) for app review.
126
+ description: 'A React-authored greeting widget with host-adaptive state and actions.',
127
+ },
128
+ }),
129
+ toolForWidget('refresh_greeting', {
130
+ description: 'Refresh the greeting from the widget UI.',
131
+ annotations: annotations.readOnly(),
132
+ input: greetingInput,
133
+ output: greetingOutput,
134
+ fulfil: ({ input }) => {
135
+ return {
136
+ message: \`Fresh hello, \${input.name || 'world'}!\`,
137
+ name: input.name || 'world',
138
+ refreshed: true,
139
+ };
140
+ },
141
+ }),
142
+ ]);
143
+ `, {
144
+ '@types/react': 'latest',
145
+ '@types/react-dom': 'latest',
146
+ '@vitejs/plugin-react': 'latest',
147
+ react: 'latest',
148
+ 'react-dom': 'latest',
149
+ vite: 'latest',
150
+ });
151
+ return {
152
+ ...files,
153
+ // Editor/tsc config for the React widget views: `noodle validate`/`test` bundle the TSX via Vite and
154
+ // don't need this, but it lets an editor resolve `@noodleseed/one/react`, the `react` import, and JSX.
155
+ 'tsconfig.json': `{
156
+ "compilerOptions": {
157
+ "target": "ESNext",
158
+ "module": "ESNext",
159
+ "moduleResolution": "bundler",
160
+ "lib": ["ESNext", "DOM", "DOM.Iterable"],
161
+ "jsx": "react-jsx",
162
+ "strict": true,
163
+ "skipLibCheck": true,
164
+ "esModuleInterop": true,
165
+ "noEmit": true
166
+ },
167
+ "include": ["src"]
168
+ }
169
+ `,
170
+ 'src/helpers.ts': `import type { ServerDefinition } from '@noodleseed/one';
171
+ import { generateHelpers } from '@noodleseed/one/react';
172
+
173
+ export type AppType = ServerDefinition;
174
+
175
+ export const {
176
+ useCallTool,
177
+ useLayout,
178
+ useOpenExternal,
179
+ useSendFollowUpMessage,
180
+ useToolInfo,
181
+ useViewState,
182
+ } = generateHelpers<AppType>();
183
+ `,
184
+ 'src/views/greeting-card.tsx': `import { useState } from 'react';
185
+ import { useCallTool, useLayout, useToolInfo, useViewState } from '../helpers.js';
186
+
187
+ export default function GreetingCard() {
188
+ const toolInfo = useToolInfo('greet');
189
+ const refresh = useCallTool('refresh_greeting');
190
+ const { theme } = useLayout();
191
+ const [draftName, setDraftName] = useViewState('name', 'world');
192
+ const [localName, setLocalName] = useState(draftName);
193
+ const result = refresh.data?.structuredContent as { message?: string; name?: string; refreshed?: boolean } | undefined;
194
+ const initial = toolInfo.structuredContent as { message?: string; name?: string; refreshed?: boolean } | undefined;
195
+ const current = result ?? initial ?? {};
196
+
197
+ return (
198
+ <main className={theme === 'dark' ? 'dark' : ''} data-llm={\`Greeting card for \${current.name ?? localName}\`}>
199
+ <section>
200
+ <h1>Greeting card</h1>
201
+ <dl>
202
+ <div><dt>Recipient</dt><dd>{current.name ?? localName}</dd></div>
203
+ <div><dt>Message</dt><dd>{current.message ?? 'Ready to greet.'}</dd></div>
204
+ <div><dt>Refreshed</dt><dd>{current.refreshed ? 'Yes' : 'No'}</dd></div>
205
+ </dl>
206
+ <label>
207
+ Recipient
208
+ <input
209
+ value={localName}
210
+ onChange={(event) => {
211
+ setLocalName(event.currentTarget.value);
212
+ setDraftName(event.currentTarget.value);
213
+ }}
214
+ placeholder="world"
215
+ />
216
+ </label>
217
+ <button type="button" disabled={refresh.isPending} onClick={() => refresh.callTool({ name: localName })}>
218
+ {refresh.isPending ? 'Refreshing...' : 'Refresh greeting'}
219
+ </button>
220
+ <button type="button" onClick={() => refresh.callTool({ name: 'world' })}>
221
+ Reset to world
222
+ </button>
223
+ </section>
224
+ </main>
225
+ );
226
+ }
227
+ `,
228
+ 'vite.config.ts': `import { defineConfig } from 'vite';
229
+ import react from '@vitejs/plugin-react';
230
+
231
+ export default defineConfig({
232
+ plugins: [react()],
233
+ });
234
+ `,
235
+ 'README.md': `# ${title(name)}
236
+
237
+ ## Run locally (no account, no login)
238
+
239
+ \`\`\`sh
240
+ noodle dev
241
+ \`\`\`
242
+
243
+ \`noodle dev\` boots a local loopback MCP server on \`src/server.ts\` and hot-reloads on save. Use
244
+ \`noodle devtools\` for a local widget preview and \`noodle check\` for widget readiness findings.
245
+
246
+ ## Widget authoring
247
+
248
+ This template uses Noodle's React-first widget authoring target:
249
+
250
+ - \`toolWithWidget(...)\` defines the model-visible tool and its widget together.
251
+ - \`toolForWidget(...)\` defines an app-only helper tool for widget actions.
252
+ - \`view.component\` links the tool to a React view in \`src/views/\`.
253
+ - \`src/helpers.ts\` exposes typed React hooks for tool output, widget state, layout, and UI-triggered tool calls.
254
+
255
+ ## Deploy (requires a Noodle Seed account)
256
+
257
+ \`\`\`sh
258
+ noodle login
259
+ noodle deploy --org <org> --app ${name}
260
+ \`\`\`
261
+
262
+ \`noodle deploy\` infers and saves the target on first run, so later deploys are just \`noodle deploy\`. (Optional: \`noodle link --org <org> --app ${name}\` saves the target up front; \`noodle start\` scaffolds + deploys in one step.)
263
+
264
+ Put local managed secrets and variables in \`.env.noodle\` with \`noodle secrets set\` and
265
+ \`noodle variables set\`. The file is ignored by git and must not contain values you intend to share.
266
+
267
+ ## Agent setup
268
+
269
+ \`noodle init\` generated non-secret project-local Codex and Claude Code instructions/skills. Commit those
270
+ files with \`noodle.json\`, and refresh them after CLI upgrades with \`noodle agents setup --write\`.
271
+ `,
272
+ };
273
+ }
274
+ function commonFiles(name, template, agentTargets, serverTs, extraDevDependencies) {
275
+ // A single agent-facing readiness check that chains the local author loop in machine-readable mode.
276
+ // The widget template adds the widget-specific `check` gate (Apps metadata/privacy readiness).
277
+ const agentCheck = template === 'widget'
278
+ ? 'noodle validate --json && noodle test --json && noodle check --json'
279
+ : 'noodle validate --json && noodle test --json';
280
+ // Widget projects also get a ChatGPT-targeted readiness gate (domain, openai/* metadata, CSP shape) —
281
+ // the ChatGPT App out-of-box promise, so an agent can exercise it explicitly.
282
+ const agentCheckChatgpt = template === 'widget'
283
+ ? 'noodle validate --json && noodle test --json && noodle check --target chatgpt --json'
284
+ : undefined;
285
+ return {
286
+ 'noodle.json': `${JSON.stringify({
287
+ entrypoint: 'src/server.ts',
288
+ name,
289
+ template,
290
+ // --no-agents means "no declaration", not "explicitly none": omit the field so a later
291
+ // `noodle agents setup` still defaults to all targets; only a hand-written `"agents": []`
292
+ // opts a project out of generation.
293
+ ...(agentTargets.length > 0 ? { agents: agentTargets } : {}),
294
+ }, null, 2)}\n`,
295
+ 'src/server.ts': serverTs,
296
+ 'package.json': `${JSON.stringify({
297
+ name,
298
+ version: '0.1.0',
299
+ private: true,
300
+ type: 'module',
301
+ scripts: {
302
+ test: 'vitest run',
303
+ validate: 'noodle validate',
304
+ dev: 'noodle dev',
305
+ deploy: 'noodle deploy',
306
+ 'agent:check': agentCheck,
307
+ ...(agentCheckChatgpt ? { 'agent:check:chatgpt': agentCheckChatgpt } : {}),
308
+ 'agent:commands': 'noodle commands --json',
309
+ },
310
+ devDependencies: {
311
+ '@noodleseed/one': 'latest',
312
+ vitest: 'latest',
313
+ ...extraDevDependencies,
314
+ },
315
+ }, null, 2)}\n`,
316
+ 'test/server.test.ts': `import { describe, expect, it } from 'vitest';
317
+ import app from '../src/server.js';
318
+
319
+ describe('${name}', () => {
320
+ it('exports a Noodle server definition', () => {
321
+ expect(typeof app.toManifest).toBe('function');
322
+ });
323
+ });
324
+ `,
325
+ '.gitignore': ['node_modules', 'dist', '.env.noodle', '.env.*', '.noodle/', ''].join('\n'),
326
+ 'README.md': `# ${title(name)}
327
+
328
+ ## Run locally (no account, no login)
329
+
330
+ \`\`\`sh
331
+ noodle dev
332
+ \`\`\`
333
+
334
+ \`noodle dev\` boots a local loopback MCP server on \`src/server.ts\` and hot-reloads on save. For a
335
+ one-shot check, run \`noodle validate\` (compile only) or \`noodle test\` (compile + MCP smoke).
336
+
337
+ ## Deploy (requires a Noodle Seed account)
338
+
339
+ \`\`\`sh
340
+ noodle login
341
+ noodle deploy --org <org> --app ${name}
342
+ \`\`\`
343
+
344
+ \`noodle deploy\` infers and saves the target on first run, so later deploys are just \`noodle deploy\`. (Optional: \`noodle link --org <org> --app ${name}\` saves the target up front; \`noodle start\` scaffolds + deploys in one step.)
345
+
346
+ Put local managed secrets and variables in \`.env.noodle\` with \`noodle secrets set\` and
347
+ \`noodle variables set\`. The file is ignored by git and must not contain values you intend to share.
348
+
349
+ ## Agent setup
350
+
351
+ \`noodle init\` generated non-secret project-local Codex and Claude Code instructions/skills. Commit those
352
+ files with \`noodle.json\`, and refresh them after CLI upgrades with \`noodle agents setup --write\`.
353
+
354
+ Your \`src/server.ts\` is yours: it compiles to portable manifest JSON (\`noodle export manifest\`) and runs
355
+ on the open-source engine you can self-host for free. See the Noodle self-host guide.
356
+ `,
357
+ };
358
+ }
359
+ //# sourceMappingURL=project-scaffold-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-scaffold-templates.js","sourceRoot":"","sources":["../src/project-scaffold-templates.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}