@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.
- package/dist/commands/author-loop.d.ts.map +1 -1
- package/dist/commands/author-loop.js +2 -2
- package/dist/commands/author-loop.js.map +1 -1
- package/dist/commands/catalog-dispatch.d.ts.map +1 -1
- package/dist/commands/catalog-dispatch.js +21 -2
- package/dist/commands/catalog-dispatch.js.map +1 -1
- package/dist/commands/deploy-ops.d.ts.map +1 -1
- package/dist/commands/deploy-ops.js +28 -11
- package/dist/commands/deploy-ops.js.map +1 -1
- package/dist/first-run.d.ts +11 -0
- package/dist/first-run.d.ts.map +1 -1
- package/dist/first-run.js +19 -4
- package/dist/first-run.js.map +1 -1
- package/dist/project-scaffold-templates.d.ts +11 -0
- package/dist/project-scaffold-templates.d.ts.map +1 -0
- package/dist/project-scaffold-templates.js +359 -0
- package/dist/project-scaffold-templates.js.map +1 -0
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js +1 -323
- package/dist/project.js.map +1 -1
- package/dist/react.d.ts +2 -2
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +1 -1
- package/dist/react.js.map +1 -1
- package/dist/validate.d.ts +12 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +11 -0
- package/dist/validate.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/hook-notes.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/hook-notes.js +2 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/hook-notes.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-content.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js +6 -9
- package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/authoring/dist/index.d.ts +3 -3
- package/node_modules/@noodle-borg/authoring/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/index.js +1 -1
- package/node_modules/@noodle-borg/authoring/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react/bridge.d.ts +9 -1
- package/node_modules/@noodle-borg/authoring/dist/react/bridge.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react/bridge.js +11 -1
- package/node_modules/@noodle-borg/authoring/dist/react/bridge.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react/components.d.ts +306 -9
- package/node_modules/@noodle-borg/authoring/dist/react/components.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react/components.js +63 -11
- package/node_modules/@noodle-borg/authoring/dist/react/components.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react/hooks.d.ts +2 -0
- package/node_modules/@noodle-borg/authoring/dist/react/hooks.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react/hooks.js +11 -0
- package/node_modules/@noodle-borg/authoring/dist/react/hooks.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react/index.d.ts +7 -3
- package/node_modules/@noodle-borg/authoring/dist/react/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react/index.js +4 -2
- package/node_modules/@noodle-borg/authoring/dist/react/index.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react/native-components.d.ts +1159 -0
- package/node_modules/@noodle-borg/authoring/dist/react/native-components.d.ts.map +1 -0
- package/node_modules/@noodle-borg/authoring/dist/react/native-components.js +66 -0
- package/node_modules/@noodle-borg/authoring/dist/react/native-components.js.map +1 -0
- package/node_modules/@noodle-borg/authoring/dist/react/semantic-components.d.ts +2618 -0
- package/node_modules/@noodle-borg/authoring/dist/react/semantic-components.d.ts.map +1 -0
- package/node_modules/@noodle-borg/authoring/dist/react/semantic-components.js +110 -0
- package/node_modules/@noodle-borg/authoring/dist/react/semantic-components.js.map +1 -0
- package/node_modules/@noodle-borg/authoring/dist/react.d.ts +2 -2
- package/node_modules/@noodle-borg/authoring/dist/react.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react.js +1 -1
- package/node_modules/@noodle-borg/authoring/dist/react.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/recording.d.ts +1 -1
- package/node_modules/@noodle-borg/authoring/dist/recording.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/recording.js +14 -1
- package/node_modules/@noodle-borg/authoring/dist/recording.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/server.d.ts +25 -2
- package/node_modules/@noodle-borg/authoring/dist/server.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/server.js +7 -3
- package/node_modules/@noodle-borg/authoring/dist/server.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/compile.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/compile.js +20 -8
- package/node_modules/@noodle-borg/compiler/dist/compile.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +2 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +6 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js.map +1 -1
- package/node_modules/@noodle-borg/connector-http/package.json +1 -1
- package/node_modules/@noodle-borg/protocol/dist/mapping.d.ts.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/mapping.js +8 -0
- package/node_modules/@noodle-borg/protocol/dist/mapping.js.map +1 -1
- package/node_modules/hono/dist/adapter/aws-lambda/handler.js +15 -21
- package/node_modules/hono/dist/adapter/bun/websocket.js +3 -1
- package/node_modules/hono/dist/adapter/lambda-edge/handler.js +8 -2
- package/node_modules/hono/dist/cjs/adapter/aws-lambda/handler.js +15 -21
- package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +3 -1
- package/node_modules/hono/dist/cjs/adapter/lambda-edge/handler.js +8 -2
- package/node_modules/hono/dist/cjs/helper/css/common.js +3 -1
- package/node_modules/hono/dist/cjs/helper/css/index.js +9 -1
- package/node_modules/hono/dist/cjs/jsx/base.js +8 -14
- package/node_modules/hono/dist/cjs/jsx/components.js +41 -21
- package/node_modules/hono/dist/cjs/jsx/context.js +131 -5
- package/node_modules/hono/dist/cjs/jsx/streaming.js +9 -7
- package/node_modules/hono/dist/cjs/middleware/cors/index.js +2 -5
- package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +2 -2
- package/node_modules/hono/dist/cjs/utils/body.js +12 -4
- package/node_modules/hono/dist/cjs/utils/buffer.js +2 -1
- package/node_modules/hono/dist/cjs/validator/validator.js +3 -3
- package/node_modules/hono/dist/helper/css/common.js +3 -1
- package/node_modules/hono/dist/helper/css/index.js +9 -1
- package/node_modules/hono/dist/jsx/base.js +15 -15
- package/node_modules/hono/dist/jsx/components.js +42 -22
- package/node_modules/hono/dist/jsx/context.js +129 -5
- package/node_modules/hono/dist/jsx/streaming.js +10 -8
- package/node_modules/hono/dist/middleware/cors/index.js +2 -5
- package/node_modules/hono/dist/middleware/serve-static/index.js +2 -2
- package/node_modules/hono/dist/types/adapter/aws-lambda/handler.d.ts +1 -1
- package/node_modules/hono/dist/types/jsx/base.d.ts +1 -3
- package/node_modules/hono/dist/types/jsx/context.d.ts +39 -0
- package/node_modules/hono/dist/types/middleware/context-storage/index.d.ts +2 -2
- package/node_modules/hono/dist/types/utils/body.d.ts +1 -1
- package/node_modules/hono/dist/utils/body.js +12 -4
- package/node_modules/hono/dist/utils/buffer.js +2 -1
- package/node_modules/hono/dist/validator/validator.js +3 -3
- package/node_modules/hono/package.json +9 -10
- package/node_modules/tailwindcss/dist/chunk-HMCCH6MG.mjs +1 -0
- package/node_modules/tailwindcss/dist/default-theme.mjs +1 -1
- package/node_modules/tailwindcss/dist/lib.js +13 -13
- package/node_modules/tailwindcss/dist/lib.mjs +18 -18
- package/node_modules/tailwindcss/package.json +2 -2
- package/node_modules/undici/README.md +3 -2
- package/node_modules/undici/docs/docs/api/Agent.md +248 -44
- package/node_modules/undici/docs/docs/api/BalancedPool.md +246 -48
- package/node_modules/undici/docs/docs/api/CacheStorage.md +171 -13
- package/node_modules/undici/docs/docs/api/CacheStore.md +294 -98
- package/node_modules/undici/docs/docs/api/Client.md +365 -178
- package/node_modules/undici/docs/docs/api/ClientStats.md +80 -14
- package/node_modules/undici/docs/docs/api/Connector.md +118 -36
- package/node_modules/undici/docs/docs/api/ContentType.md +65 -25
- package/node_modules/undici/docs/docs/api/Cookies.md +125 -47
- package/node_modules/undici/docs/docs/api/Debug.md +34 -18
- package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +364 -164
- package/node_modules/undici/docs/docs/api/Dispatcher.md +479 -1093
- package/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +101 -87
- package/node_modules/undici/docs/docs/api/Errors.md +503 -40
- package/node_modules/undici/docs/docs/api/EventSource.md +294 -32
- package/node_modules/undici/docs/docs/api/Fetch.md +680 -31
- package/node_modules/undici/docs/docs/api/GlobalInstallation.md +78 -98
- package/node_modules/undici/docs/docs/api/H2CClient.md +298 -176
- package/node_modules/undici/docs/docs/api/Interceptors.md +355 -0
- package/node_modules/undici/docs/docs/api/MockAgent.md +314 -322
- package/node_modules/undici/docs/docs/api/MockCallHistory.md +272 -98
- package/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +189 -26
- package/node_modules/undici/docs/docs/api/MockClient.md +151 -33
- package/node_modules/undici/docs/docs/api/MockErrors.md +56 -5
- package/node_modules/undici/docs/docs/api/MockPool.md +299 -263
- package/node_modules/undici/docs/docs/api/Pool.md +235 -43
- package/node_modules/undici/docs/docs/api/PoolStats.md +119 -13
- package/node_modules/undici/docs/docs/api/ProxyAgent.md +179 -160
- package/node_modules/undici/docs/docs/api/RedirectHandler.md +238 -63
- package/node_modules/undici/docs/docs/api/RetryAgent.md +113 -26
- package/node_modules/undici/docs/docs/api/RetryHandler.md +161 -77
- package/node_modules/undici/docs/docs/api/RoundRobinPool.md +166 -72
- package/node_modules/undici/docs/docs/api/SnapshotAgent.md +264 -542
- package/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +162 -186
- package/node_modules/undici/docs/docs/api/Util.md +68 -11
- package/node_modules/undici/docs/docs/api/WebSocket.md +475 -80
- package/node_modules/undici/docs/docs/api/api-lifecycle.md +100 -32
- package/node_modules/undici/docs/docs/best-practices/client-certificate.md +2 -0
- package/node_modules/undici/docs/docs/best-practices/crawling.md +3 -1
- package/node_modules/undici/docs/docs/best-practices/migrating-from-v7-to-v8.md +6 -4
- package/node_modules/undici/docs/docs/best-practices/mocking-request.md +9 -7
- package/node_modules/undici/docs/docs/best-practices/proxy.md +3 -1
- package/node_modules/undici/docs/docs/best-practices/undici-vs-builtin-fetch.md +10 -8
- package/node_modules/undici/docs/docs/best-practices/writing-tests.md +2 -0
- package/node_modules/undici/docs/docs/{GettingStarted.md → getting-started.md} +22 -19
- package/node_modules/undici/docs/docs/index.md +779 -0
- package/node_modules/undici/docs/docs/site.json +125 -0
- package/node_modules/undici/docs/docs/type-map.json +79 -0
- package/node_modules/undici/lib/api/api-request.js +7 -1
- package/node_modules/undici/lib/api/readable.js +47 -2
- package/node_modules/undici/lib/core/errors.js +20 -0
- package/node_modules/undici/lib/core/request.js +1 -1
- package/node_modules/undici/lib/core/util.js +24 -1
- package/node_modules/undici/lib/dispatcher/client-h1.js +92 -1
- package/node_modules/undici/lib/dispatcher/client-h2.js +322 -118
- package/node_modules/undici/lib/dispatcher/client.js +6 -2
- package/node_modules/undici/lib/dispatcher/dispatcher-base.js +1 -0
- package/node_modules/undici/lib/dispatcher/proxy-agent.js +42 -7
- package/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +4 -2
- package/node_modules/undici/lib/handler/redirect-handler.js +1 -0
- package/node_modules/undici/lib/handler/retry-handler.js +57 -19
- package/node_modules/undici/lib/util/cache.js +8 -2
- package/node_modules/undici/lib/web/cookies/parse.js +20 -27
- package/node_modules/undici/lib/web/cookies/util.js +1 -1
- package/node_modules/undici/lib/web/eventsource/eventsource.js +7 -18
- package/node_modules/undici/lib/web/eventsource/util.js +32 -1
- package/node_modules/undici/lib/web/fetch/body.js +43 -0
- package/node_modules/undici/lib/web/fetch/constants.js +1 -1
- package/node_modules/undici/lib/web/fetch/index.js +11 -2
- package/node_modules/undici/lib/web/fetch/request.js +1 -0
- package/node_modules/undici/lib/web/fetch/util.js +4 -1
- package/node_modules/undici/lib/web/websocket/receiver.js +20 -3
- package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +8 -1
- package/node_modules/undici/lib/web/websocket/websocket.js +3 -1
- package/node_modules/undici/package.json +1 -1
- package/node_modules/undici/types/client.d.ts +6 -1
- package/node_modules/undici/types/cookies.d.ts +1 -1
- package/node_modules/undici/types/errors.d.ts +10 -0
- package/node_modules/undici/types/fetch.d.ts +1 -0
- package/node_modules/undici/types/handlers.d.ts +2 -0
- package/node_modules/undici/types/proxy-agent.d.ts +7 -0
- package/package.json +8 -6
- package/react/styles.css +851 -0
- package/react/styles.source.css +850 -0
- package/node_modules/hono/dist/tsconfig.build.tsbuildinfo +0 -1
- 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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"}
|
package/dist/project.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,UAAU,EAAuB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
|