sunpeak 0.10.7 → 0.12.1

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 (121) hide show
  1. package/README.md +117 -20
  2. package/bin/commands/build.mjs +1 -11
  3. package/bin/commands/deploy.mjs +7 -1
  4. package/bin/commands/dev.mjs +175 -12
  5. package/bin/commands/new.mjs +211 -0
  6. package/bin/commands/pull.mjs +1 -1
  7. package/bin/commands/push.mjs +36 -13
  8. package/bin/lib/patterns.mjs +25 -0
  9. package/bin/sunpeak.js +15 -232
  10. package/dist/chatgpt/index.cjs +1 -1
  11. package/dist/chatgpt/index.js +1 -1
  12. package/dist/index.cjs +1 -1
  13. package/dist/index.js +2 -2
  14. package/dist/mcp/entry.cjs +1 -1
  15. package/dist/mcp/entry.js +1 -1
  16. package/dist/mcp/favicon.d.ts +2 -0
  17. package/dist/mcp/index.cjs +3 -1
  18. package/dist/mcp/index.cjs.map +1 -1
  19. package/dist/mcp/index.d.ts +1 -0
  20. package/dist/mcp/index.js +3 -1
  21. package/dist/{server-BLKltt88.js → server-BI9Y531R.js} +31 -3
  22. package/dist/{server-BLKltt88.js.map → server-BI9Y531R.js.map} +1 -1
  23. package/dist/{server-D_oRdZjX.cjs → server-CcLDAGBE.cjs} +31 -3
  24. package/dist/{server-D_oRdZjX.cjs.map → server-CcLDAGBE.cjs.map} +1 -1
  25. package/dist/{simulator-url-B6DZi3vV.cjs → simulator-url-CYMOGoB1.cjs} +5 -5
  26. package/dist/{simulator-url-B6DZi3vV.cjs.map → simulator-url-CYMOGoB1.cjs.map} +1 -1
  27. package/dist/{simulator-url-izFV6mji.js → simulator-url-DG79-dU3.js} +4 -4
  28. package/dist/{simulator-url-izFV6mji.js.map → simulator-url-DG79-dU3.js.map} +1 -1
  29. package/package.json +1 -1
  30. package/template/.sunpeak/dev.tsx +4 -4
  31. package/template/README.md +25 -27
  32. package/template/_gitignore +4 -0
  33. package/template/dist/albums/albums.json +1 -1
  34. package/template/dist/carousel/carousel.json +1 -1
  35. package/template/dist/map/map.json +1 -1
  36. package/template/dist/review/review.json +1 -1
  37. package/template/index.html +0 -1
  38. package/template/node_modules/.vite/deps/_metadata.json +22 -22
  39. package/template/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  40. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Avatar.js +96 -0
  41. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Avatar.js.map +7 -0
  42. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Button.js +625 -0
  43. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Button.js.map +7 -0
  44. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Checkbox.js +33 -0
  45. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Checkbox.js.map +7 -0
  46. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Icon.js +1498 -0
  47. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Icon.js.map +7 -0
  48. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Input.js +13 -0
  49. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Input.js.map +7 -0
  50. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_SegmentedControl.js +103 -0
  51. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_SegmentedControl.js.map +7 -0
  52. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Select.js +3680 -0
  53. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Select.js.map +7 -0
  54. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Textarea.js +95 -0
  55. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Textarea.js.map +7 -0
  56. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_theme.js +45 -0
  57. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_theme.js.map +7 -0
  58. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-2UDYPUBJ.js +15201 -0
  59. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-2UDYPUBJ.js.map +7 -0
  60. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-6QVG4F2X.js +93 -0
  61. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-6QVG4F2X.js.map +7 -0
  62. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-BUOVMFCD.js +1004 -0
  63. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-BUOVMFCD.js.map +7 -0
  64. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-CNYJBM5F.js +21 -0
  65. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-CNYJBM5F.js.map +7 -0
  66. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-EGRHWZRV.js +1 -0
  67. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-EGRHWZRV.js.map +7 -0
  68. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-ILHRZGIS.js +46 -0
  69. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-ILHRZGIS.js.map +7 -0
  70. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-JAGHY6H6.js +231 -0
  71. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-JAGHY6H6.js.map +7 -0
  72. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-JGVISENQ.js +292 -0
  73. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-JGVISENQ.js.map +7 -0
  74. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-P5LK4A7U.js +112 -0
  75. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-P5LK4A7U.js.map +7 -0
  76. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-QPJAV452.js +13 -0
  77. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-QPJAV452.js.map +7 -0
  78. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-RYYR2YMB.js +111 -0
  79. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-RYYR2YMB.js.map +7 -0
  80. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-UM3ZGDFR.js +4480 -0
  81. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-UM3ZGDFR.js.map +7 -0
  82. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-XZTIOEPG.js +280 -0
  83. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-XZTIOEPG.js.map +7 -0
  84. package/template/node_modules/.vite-mcp/deps_temp_992accd8/clsx.js +10 -0
  85. package/template/node_modules/.vite-mcp/deps_temp_992accd8/clsx.js.map +7 -0
  86. package/template/node_modules/.vite-mcp/deps_temp_992accd8/embla-carousel-react.js +1712 -0
  87. package/template/node_modules/.vite-mcp/deps_temp_992accd8/embla-carousel-react.js.map +7 -0
  88. package/template/node_modules/.vite-mcp/deps_temp_992accd8/embla-carousel-wheel-gestures.js +589 -0
  89. package/template/node_modules/.vite-mcp/deps_temp_992accd8/embla-carousel-wheel-gestures.js.map +7 -0
  90. package/template/node_modules/.vite-mcp/deps_temp_992accd8/mapbox-gl.js +32835 -0
  91. package/template/node_modules/.vite-mcp/deps_temp_992accd8/mapbox-gl.js.map +7 -0
  92. package/template/node_modules/.vite-mcp/deps_temp_992accd8/package.json +3 -0
  93. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react-dom.js +7 -0
  94. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react-dom.js.map +7 -0
  95. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react-dom_client.js +20217 -0
  96. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react-dom_client.js.map +7 -0
  97. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react.js +6 -0
  98. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react.js.map +7 -0
  99. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react_jsx-dev-runtime.js +278 -0
  100. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react_jsx-dev-runtime.js.map +7 -0
  101. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react_jsx-runtime.js +7 -0
  102. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react_jsx-runtime.js.map +7 -0
  103. package/template/node_modules/.vite-mcp/deps_temp_992accd8/tailwind-merge.js +3095 -0
  104. package/template/node_modules/.vite-mcp/deps_temp_992accd8/tailwind-merge.js.map +7 -0
  105. package/template/package.json +0 -1
  106. package/template/vitest.config.ts +1 -1
  107. package/bin/commands/mcp.mjs +0 -244
  108. package/template/public/favicon.ico +0 -0
  109. package/template/src/resources/albums/albums-show-simulation.json +0 -131
  110. package/template/src/resources/carousel/carousel-show-simulation.json +0 -68
  111. package/template/src/resources/map/map-show-simulation.json +0 -123
  112. package/template/src/resources/review/review-diff-simulation.json +0 -80
  113. package/template/src/resources/review/review-post-simulation.json +0 -56
  114. package/template/src/resources/review/review-purchase-simulation.json +0 -88
  115. /package/template/{src/test → tests}/setup.ts +0 -0
  116. /package/template/{dist → tests/simulations}/albums/albums-show-simulation.json +0 -0
  117. /package/template/{dist → tests/simulations}/carousel/carousel-show-simulation.json +0 -0
  118. /package/template/{dist → tests/simulations}/map/map-show-simulation.json +0 -0
  119. /package/template/{dist → tests/simulations}/review/review-diff-simulation.json +0 -0
  120. /package/template/{dist → tests/simulations}/review/review-post-simulation.json +0 -0
  121. /package/template/{dist → tests/simulations}/review/review-purchase-simulation.json +0 -0
@@ -1,244 +0,0 @@
1
- #!/usr/bin/env node
2
- import { existsSync, readFileSync, readdirSync } from 'fs';
3
- import { join, dirname, resolve, basename } from 'path';
4
- import { createRequire } from 'module';
5
- import { pathToFileURL } from 'url';
6
-
7
- /**
8
- * Import a module from the project's node_modules using ESM resolution
9
- */
10
- async function importFromProject(require, moduleName) {
11
- const resolvedPath = require.resolve(moduleName);
12
-
13
- // Walk up to find package.json
14
- let pkgDir = dirname(resolvedPath);
15
- let pkg;
16
- while (pkgDir !== dirname(pkgDir)) {
17
- try {
18
- const pkgJsonPath = join(pkgDir, 'package.json');
19
- pkg = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'));
20
- if (pkg.name === moduleName || moduleName.startsWith(pkg.name + '/')) {
21
- break;
22
- }
23
- } catch {
24
- // No package.json at this level, keep looking
25
- }
26
- pkgDir = dirname(pkgDir);
27
- }
28
-
29
- if (!pkg) {
30
- return import(resolvedPath);
31
- }
32
-
33
- // Determine ESM entry
34
- let entry = pkg.main || 'index.js';
35
- if (pkg.exports) {
36
- const exp = pkg.exports['.'] || pkg.exports;
37
- if (typeof exp === 'string') {
38
- entry = exp;
39
- } else if (exp.import) {
40
- entry = typeof exp.import === 'string' ? exp.import : exp.import.default;
41
- } else if (exp.default) {
42
- entry = exp.default;
43
- }
44
- } else if (pkg.module) {
45
- entry = pkg.module;
46
- }
47
-
48
- const entryPath = join(pkgDir, entry);
49
- return import(pathToFileURL(entryPath).href);
50
- }
51
-
52
- /**
53
- * Discover simulations from src/resources directories
54
- */
55
- function discoverSimulations(projectRoot) {
56
- const resourcesDir = join(projectRoot, 'src/resources');
57
- const resourceDirs = readdirSync(resourcesDir, { withFileTypes: true }).filter((entry) =>
58
- entry.isDirectory()
59
- );
60
-
61
- const simulations = [];
62
-
63
- for (const entry of resourceDirs) {
64
- const resourceKey = entry.name;
65
- const resourceDir = join(resourcesDir, resourceKey);
66
- const resourcePath = join(resourceDir, `${resourceKey}-resource.json`);
67
-
68
- if (!existsSync(resourcePath)) {
69
- continue;
70
- }
71
-
72
- const resource = JSON.parse(readFileSync(resourcePath, 'utf-8'));
73
-
74
- const dirFiles = readdirSync(resourceDir);
75
- for (const file of dirFiles) {
76
- if (file.endsWith('-simulation.json')) {
77
- const simulationKey = file.replace(/-simulation\.json$/, '');
78
- const simulationPath = join(resourceDir, file);
79
- const simulation = JSON.parse(readFileSync(simulationPath, 'utf-8'));
80
-
81
- simulations.push({
82
- ...simulation,
83
- name: simulationKey,
84
- distPath: join(projectRoot, `dist/${resourceKey}/${resourceKey}.js`),
85
- srcPath: `/src/resources/${resourceKey}/${resourceKey}-resource.tsx`,
86
- resource,
87
- });
88
- }
89
- }
90
- }
91
-
92
- return simulations;
93
- }
94
-
95
- /**
96
- * Start the MCP server with Vite HMR
97
- *
98
- * Architecture:
99
- * 1. Vite dev server runs in middleware mode on the same port
100
- * 2. MCP resources return HTML that loads from Vite
101
- * 3. Vite handles all HMR natively - no custom WebSocket needed
102
- */
103
- export async function mcp(projectRoot = process.cwd(), args = []) {
104
- // Check for package.json
105
- const pkgJsonPath = join(projectRoot, 'package.json');
106
- if (!existsSync(pkgJsonPath)) {
107
- console.error('Error: No package.json found in current directory');
108
- console.error('Make sure you are in a Sunpeak project directory');
109
- process.exit(1);
110
- }
111
-
112
- // Check for --no-vite flag (production mode)
113
- const noVite = args.includes('--no-vite');
114
-
115
- const pkg = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'));
116
- const require = createRequire(join(projectRoot, 'package.json'));
117
-
118
- // Discover simulations
119
- const simulations = discoverSimulations(projectRoot);
120
- if (simulations.length === 0) {
121
- console.error('Error: No simulations found in src/resources/');
122
- process.exit(1);
123
- }
124
-
125
- console.log(`Found ${simulations.length} simulation(s)`);
126
-
127
- let viteServer = null;
128
-
129
- if (!noVite) {
130
- console.log('Starting Vite dev server for HMR...\n');
131
-
132
- // Import vite and plugins from the project's node_modules
133
- const vite = await importFromProject(require, 'vite');
134
- const reactPlugin = await importFromProject(require, '@vitejs/plugin-react');
135
- const react = reactPlugin.default;
136
- const tailwindPlugin = await importFromProject(require, '@tailwindcss/vite');
137
- const tailwindcss = tailwindPlugin.default;
138
-
139
- // Check if we're in the sunpeak workspace (directory is named "template")
140
- const isTemplate = basename(projectRoot) === 'template';
141
- const parentSrc = resolve(projectRoot, '../src');
142
-
143
- // Virtual entry module plugin for consistent React resolution
144
- // This ensures React/ReactDOM imports in the entry module resolve to the same
145
- // pre-bundled versions as the component imports
146
- const sunpeakEntryPlugin = () => ({
147
- name: 'sunpeak-entry',
148
- resolveId(id) {
149
- if (id.startsWith('virtual:sunpeak-entry')) {
150
- return id;
151
- }
152
- },
153
- load(id) {
154
- if (id.startsWith('virtual:sunpeak-entry')) {
155
- const url = new URL(id.replace('virtual:sunpeak-entry', 'http://x'));
156
- const srcPath = url.searchParams.get('src');
157
- const componentName = url.searchParams.get('component');
158
-
159
- if (!srcPath || !componentName) {
160
- return 'console.error("Missing src or component param");';
161
- }
162
-
163
- return `
164
- import { createElement } from 'react';
165
- import { createRoot } from 'react-dom/client';
166
- import * as ResourceModule from '${srcPath}';
167
-
168
- const Component = ResourceModule.default || ResourceModule['${componentName}'];
169
- if (!Component) {
170
- document.getElementById('root').innerHTML = '<pre style="color:red;padding:16px">Component not found: ${componentName}\\nExports: ' + Object.keys(ResourceModule).join(', ') + '</pre>';
171
- } else {
172
- createRoot(document.getElementById('root')).render(createElement(Component));
173
- }
174
- `;
175
- }
176
- },
177
- });
178
-
179
- // Create Vite dev server in middleware mode (matching skybridge's approach)
180
- viteServer = await vite.createServer({
181
- root: projectRoot,
182
- plugins: [react(), tailwindcss(), sunpeakEntryPlugin()],
183
- resolve: {
184
- alias: {
185
- // In workspace dev mode, use local sunpeak source
186
- ...(isTemplate && {
187
- sunpeak: parentSrc,
188
- }),
189
- },
190
- },
191
- server: {
192
- middlewareMode: true,
193
- // Allow all hosts for tunnel services (ngrok, cloudflared, etc.)
194
- allowedHosts: true,
195
- // Don't override HMR - let Vite handle it (like skybridge)
196
- },
197
- optimizeDeps: {
198
- include: ['react', 'react-dom/client'],
199
- },
200
- appType: 'custom',
201
- });
202
- } else {
203
- console.log('Starting MCP server (production mode, no HMR)...\n');
204
- }
205
-
206
- // Import runMCPServer from sunpeak/mcp
207
- // Use direct import with file URL for workspace compatibility
208
- const sunpeakMcpPath = join(require.resolve('sunpeak').replace(/dist\/index\.(c)?js$/, ''), 'dist/mcp/index.js');
209
- const sunpeakMcp = await import(pathToFileURL(sunpeakMcpPath).href);
210
- const { runMCPServer } = sunpeakMcp;
211
-
212
- // Start MCP server with Vite integration
213
- runMCPServer({
214
- name: pkg.name || 'Sunpeak',
215
- version: pkg.version || '0.1.0',
216
- simulations,
217
- port: 6766,
218
- viteServer,
219
- });
220
-
221
- // Handle signals
222
- process.on('SIGINT', async () => {
223
- if (viteServer) {
224
- await viteServer.close();
225
- }
226
- process.exit(0);
227
- });
228
-
229
- process.on('SIGTERM', async () => {
230
- if (viteServer) {
231
- await viteServer.close();
232
- }
233
- process.exit(0);
234
- });
235
- }
236
-
237
- // Allow running directly
238
- if (import.meta.url === `file://${process.argv[1]}`) {
239
- const args = process.argv.slice(2);
240
- mcp(process.cwd(), args).catch(error => {
241
- console.error('Error:', error.message);
242
- process.exit(1);
243
- });
244
- }
Binary file
@@ -1,131 +0,0 @@
1
- {
2
- "userMessage": "Pizza time",
3
- "tool": {
4
- "name": "show-albums",
5
- "description": "Show photo albums",
6
- "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false },
7
- "title": "Show Albums",
8
- "annotations": { "readOnlyHint": true },
9
- "_meta": {
10
- "openai/toolInvocation/invoking": "Loading albums",
11
- "openai/toolInvocation/invoked": "Album loaded",
12
- "openai/widgetAccessible": true,
13
- "openai/resultCanProduceWidget": true
14
- }
15
- },
16
- "callToolResult": {
17
- "structuredContent": {
18
- "albums": [
19
- {
20
- "id": "summer-escape",
21
- "title": "Summer Slice",
22
- "cover": "https://persistent.oaistatic.com/pizzaz/pizzaz-1.png",
23
- "photos": [
24
- {
25
- "id": "s1",
26
- "title": "Waves",
27
- "url": "https://persistent.oaistatic.com/pizzaz/pizzaz-2.png"
28
- },
29
- {
30
- "id": "s2",
31
- "title": "Palm trees",
32
- "url": "https://persistent.oaistatic.com/pizzaz/pizzaz-3.png"
33
- },
34
- {
35
- "id": "s3",
36
- "title": "Sunset",
37
- "url": "https://persistent.oaistatic.com/pizzaz/pizzaz-6.png"
38
- }
39
- ]
40
- },
41
- {
42
- "id": "city-lights",
43
- "title": "Pepperoni Nights",
44
- "cover": "https://persistent.oaistatic.com/pizzaz/pizzaz-4.png",
45
- "photos": [
46
- {
47
- "id": "c1",
48
- "title": "Downtown",
49
- "url": "https://persistent.oaistatic.com/pizzaz/pizzaz-5.png"
50
- },
51
- {
52
- "id": "c2",
53
- "title": "Neon",
54
- "url": "https://persistent.oaistatic.com/pizzaz/pizzaz-1.png"
55
- },
56
- {
57
- "id": "c3",
58
- "title": "Streets",
59
- "url": "https://persistent.oaistatic.com/pizzaz/pizzaz-2.png"
60
- }
61
- ]
62
- },
63
- {
64
- "id": "into-the-woods",
65
- "title": "Truffle Forest",
66
- "cover": "https://persistent.oaistatic.com/pizzaz/pizzaz-3.png",
67
- "photos": [
68
- {
69
- "id": "n1",
70
- "title": "Forest path",
71
- "url": "https://persistent.oaistatic.com/pizzaz/pizzaz-6.png"
72
- },
73
- {
74
- "id": "n2",
75
- "title": "Misty",
76
- "url": "https://persistent.oaistatic.com/pizzaz/pizzaz-4.png"
77
- },
78
- {
79
- "id": "n3",
80
- "title": "Waterfall",
81
- "url": "https://persistent.oaistatic.com/pizzaz/pizzaz-5.png"
82
- }
83
- ]
84
- },
85
- {
86
- "id": "pizza-tour",
87
- "title": "Pizza tour",
88
- "cover": "https://persistent.oaistatic.com/pizzaz/pizzaz-1.png",
89
- "photos": [
90
- {
91
- "id": "tonys-pizza-napoletana",
92
- "title": "Tony's Pizza Napoletana",
93
- "url": "https://persistent.oaistatic.com/pizzaz/pizzaz-2.png"
94
- },
95
- {
96
- "id": "golden-boy-pizza",
97
- "title": "Golden Boy Pizza",
98
- "url": "https://persistent.oaistatic.com/pizzaz/pizzaz-3.png"
99
- },
100
- {
101
- "id": "pizzeria-delfina-mission",
102
- "title": "Pizzeria Delfina (Mission)",
103
- "url": "https://persistent.oaistatic.com/pizzaz/pizzaz-6.png"
104
- },
105
- {
106
- "id": "ragazza",
107
- "title": "Ragazza",
108
- "url": "https://persistent.oaistatic.com/pizzaz/pizzaz-4.png"
109
- },
110
- {
111
- "id": "del-popolo",
112
- "title": "Del Popolo",
113
- "url": "https://persistent.oaistatic.com/pizzaz/pizzaz-5.png"
114
- },
115
- {
116
- "id": "square-pie-guys",
117
- "title": "Square Pie Guys",
118
- "url": "https://persistent.oaistatic.com/pizzaz/pizzaz-1.png"
119
- },
120
- {
121
- "id": "zero-zero",
122
- "title": "Zero Zero",
123
- "url": "https://persistent.oaistatic.com/pizzaz/pizzaz-2.png"
124
- }
125
- ]
126
- }
127
- ]
128
- },
129
- "_meta": {}
130
- }
131
- }
@@ -1,68 +0,0 @@
1
- {
2
- "userMessage": "Show me popular places to visit in Austin Texas",
3
- "tool": {
4
- "name": "show-carousel",
5
- "description": "Show popular places to visit",
6
- "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false },
7
- "title": "Show Carousel",
8
- "annotations": { "readOnlyHint": true },
9
- "_meta": {
10
- "openai/toolInvocation/invoking": "Loading carousel",
11
- "openai/toolInvocation/invoked": "Carousel loaded",
12
- "openai/widgetAccessible": true,
13
- "openai/resultCanProduceWidget": true
14
- }
15
- },
16
- "callToolResult": {
17
- "structuredContent": {
18
- "places": [
19
- {
20
- "id": "1",
21
- "name": "Lady Bird Lake",
22
- "rating": 4.5,
23
- "category": "Waterfront",
24
- "location": "Austin",
25
- "image": "https://images.unsplash.com/photo-1520950237264-dfe336995c34?w=400&h=400&fit=crop",
26
- "description": "Scenic lake perfect for kayaking, paddleboarding, and trails."
27
- },
28
- {
29
- "id": "2",
30
- "name": "Texas State Capitol",
31
- "rating": 4.8,
32
- "category": "Historic Site",
33
- "location": "Austin",
34
- "image": "https://images.unsplash.com/photo-1664231978322-4d0b45c7027b?w=400&h=400&fit=crop",
35
- "description": "Stunning capitol building with free tours and beautiful grounds."
36
- },
37
- {
38
- "id": "3",
39
- "name": "The Paramount Theatre",
40
- "rating": 4.7,
41
- "category": "Architecture",
42
- "location": "Austin",
43
- "image": "https://images.unsplash.com/photo-1583097090970-4d3b940ea1a0?w=400&h=400&fit=crop",
44
- "description": "Century-old performance and movie theatre in the heart of downtown Austin."
45
- },
46
- {
47
- "id": "4",
48
- "name": "Zilker Park",
49
- "rating": 4.7,
50
- "category": "Park",
51
- "location": "Austin",
52
- "image": "https://images.unsplash.com/photo-1563828568124-f800803ba13c?w=400&h=400&fit=crop",
53
- "description": "Popular park with trails, sports fields, and Barton Springs Pool."
54
- },
55
- {
56
- "id": "5",
57
- "name": "South Congress Avenue",
58
- "rating": 4.6,
59
- "category": "Landmark",
60
- "location": "Austin",
61
- "image": "https://images.unsplash.com/photo-1588993608283-7f0eda4438be?w=400&h=400&fit=crop",
62
- "description": "Vibrant street with unique shops, restaurants, and live music."
63
- }
64
- ]
65
- },
66
- "_meta": {}
67
- }
68
- }
@@ -1,123 +0,0 @@
1
- {
2
- "userMessage": "Find pizza near me",
3
- "tool": {
4
- "name": "show-map",
5
- "description": "Show the map",
6
- "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false },
7
- "title": "Show Map",
8
- "annotations": { "readOnlyHint": true },
9
- "_meta": {
10
- "openai/toolInvocation/invoking": "Finding pizza places",
11
- "openai/toolInvocation/invoked": "Found pizza places",
12
- "openai/widgetAccessible": true,
13
- "openai/resultCanProduceWidget": true
14
- }
15
- },
16
- "callToolResult": {
17
- "structuredContent": {
18
- "places": [
19
- {
20
- "id": "nova-slice-lab",
21
- "name": "Nova Slice Lab",
22
- "coords": [-122.4098, 37.8001],
23
- "description": "Award-winning Neapolitan pies in North Beach.",
24
- "city": "North Beach",
25
- "rating": 4.8,
26
- "price": "$$$",
27
- "thumbnail": "https://persistent.oaistatic.com/pizzaz/pizzaz-1.png"
28
- },
29
- {
30
- "id": "midnight-marinara",
31
- "name": "Midnight Marinara",
32
- "coords": [-122.4093, 37.799],
33
- "description": "Focaccia-style squares, late-night favorite.",
34
- "city": "North Beach",
35
- "rating": 4.6,
36
- "price": "$",
37
- "thumbnail": "https://persistent.oaistatic.com/pizzaz/pizzaz-2.png"
38
- },
39
- {
40
- "id": "cinder-oven-co",
41
- "name": "Cinder Oven Co.",
42
- "coords": [-122.4255, 37.7613],
43
- "description": "Thin-crust classics on 18th Street.",
44
- "city": "Mission",
45
- "rating": 4.5,
46
- "price": "$$",
47
- "thumbnail": "https://persistent.oaistatic.com/pizzaz/pizzaz-3.png"
48
- },
49
- {
50
- "id": "neon-crust-works",
51
- "name": "Neon Crust Works",
52
- "coords": [-122.4388, 37.7775],
53
- "description": "Deep-dish and cornmeal crust favorites.",
54
- "city": "Alamo Square",
55
- "rating": 4.5,
56
- "price": "$$",
57
- "thumbnail": "https://persistent.oaistatic.com/pizzaz/pizzaz-6.png"
58
- },
59
- {
60
- "id": "luna-pie-collective",
61
- "name": "Luna Pie Collective",
62
- "coords": [-122.4077, 37.799],
63
- "description": "Wood-fired pies and burrata in North Beach.",
64
- "city": "North Beach",
65
- "rating": 4.6,
66
- "price": "$$",
67
- "thumbnail": "https://persistent.oaistatic.com/pizzaz/pizzaz-4.png"
68
- },
69
- {
70
- "id": "bricklight-deep-dish",
71
- "name": "Bricklight Deep Dish",
72
- "coords": [-122.4097, 37.7992],
73
- "description": "Chicago-style pies from Tony Gemignani.",
74
- "city": "North Beach",
75
- "rating": 4.4,
76
- "price": "$$$",
77
- "thumbnail": "https://persistent.oaistatic.com/pizzaz/pizzaz-5.png"
78
- },
79
- {
80
- "id": "garden-ember-pies",
81
- "name": "Garden Ember Pies",
82
- "coords": [-122.438, 37.7722],
83
- "description": "Neighborhood spot with seasonal toppings.",
84
- "city": "Lower Haight",
85
- "rating": 4.4,
86
- "price": "$$",
87
- "thumbnail": "https://persistent.oaistatic.com/pizzaz/pizzaz-1.png"
88
- },
89
- {
90
- "id": "atlas-fire-pizzeria",
91
- "name": "Atlas Fire Pizzeria",
92
- "coords": [-122.4123, 37.7899],
93
- "description": "Sourdough, wood-fired pies near Nob Hill.",
94
- "city": "Nob Hill",
95
- "rating": 4.6,
96
- "price": "$$$",
97
- "thumbnail": "https://persistent.oaistatic.com/pizzaz/pizzaz-2.png"
98
- },
99
- {
100
- "id": "circuit-slice-garage",
101
- "name": "Circuit Slice Garage",
102
- "coords": [-122.4135, 37.7805],
103
- "description": "Crispy-edged Detroit-style in SoMa.",
104
- "city": "SoMa",
105
- "rating": 4.5,
106
- "price": "$$",
107
- "thumbnail": "https://persistent.oaistatic.com/pizzaz/pizzaz-3.png"
108
- },
109
- {
110
- "id": "velvet-mozza-lounge",
111
- "name": "Velvet Mozza Lounge",
112
- "coords": [-122.4019, 37.7818],
113
- "description": "Bianca pies and cocktails near Yerba Buena.",
114
- "city": "Yerba Buena",
115
- "rating": 4.3,
116
- "price": "$$",
117
- "thumbnail": "https://persistent.oaistatic.com/pizzaz/pizzaz-6.png"
118
- }
119
- ]
120
- },
121
- "_meta": {}
122
- }
123
- }
@@ -1,80 +0,0 @@
1
- {
2
- "userMessage": "I'd like to refactor the authentication module",
3
- "tool": {
4
- "name": "diff-review",
5
- "description": "Show a review dialog for a proposed code diff",
6
- "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false },
7
- "title": "Diff Review",
8
- "annotations": { "readOnlyHint": false },
9
- "_meta": {
10
- "openai/toolInvocation/invoking": "Preparing changes",
11
- "openai/toolInvocation/invoked": "Changes ready for review",
12
- "openai/widgetAccessible": true,
13
- "openai/resultCanProduceWidget": true
14
- }
15
- },
16
- "callToolResult": {
17
- "structuredContent": {
18
- "title": "Refactor Authentication Module",
19
- "description": "The following changes will update the authentication system to use JWT tokens instead of session-based auth.",
20
- "sections": [
21
- {
22
- "title": "File Changes",
23
- "type": "changes",
24
- "content": [
25
- {
26
- "id": "1",
27
- "type": "create",
28
- "path": "src/lib/jwt.ts",
29
- "description": "Create JWT utility functions",
30
- "details": "Token generation, verification, and refresh logic"
31
- },
32
- {
33
- "id": "2",
34
- "type": "modify",
35
- "path": "src/middleware/auth.ts",
36
- "description": "Update auth middleware to use JWT",
37
- "details": "Replace session checks with JWT verification"
38
- },
39
- {
40
- "id": "3",
41
- "type": "modify",
42
- "path": "src/routes/login.ts",
43
- "description": "Update login endpoint to return JWT tokens"
44
- },
45
- {
46
- "id": "4",
47
- "type": "delete",
48
- "path": "src/lib/session.ts",
49
- "description": "Remove deprecated session management",
50
- "details": "No longer needed after JWT migration"
51
- },
52
- {
53
- "id": "5",
54
- "type": "action",
55
- "description": "Run database migration for token storage",
56
- "details": "Creates refresh_tokens table"
57
- }
58
- ]
59
- }
60
- ],
61
- "acceptLabel": "Apply Changes",
62
- "rejectLabel": "Cancel",
63
- "acceptedMessage": "Changes applied",
64
- "rejectedMessage": "Changes cancelled",
65
- "reviewTool": {
66
- "name": "apply_changes",
67
- "arguments": {
68
- "changesetId": "cs_789",
69
- "files": [
70
- "src/lib/jwt.ts",
71
- "src/middleware/auth.ts",
72
- "src/routes/login.ts",
73
- "src/lib/session.ts"
74
- ]
75
- }
76
- }
77
- },
78
- "_meta": {}
79
- }
80
- }