create-skybridge 0.0.0-dev.1b2b016 → 0.0.0-dev.1b2cb1b

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 (117) hide show
  1. package/LICENSE +21 -0
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.js +373 -122
  4. package/index.js +6 -1
  5. package/package.json +15 -12
  6. package/templates/blank/.dockerignore +4 -0
  7. package/templates/blank/AGENTS.md +1 -0
  8. package/templates/blank/Dockerfile +53 -0
  9. package/templates/blank/README.md +92 -0
  10. package/templates/blank/_gitignore +7 -0
  11. package/templates/blank/alpic.json +3 -0
  12. package/templates/blank/node_modules/.bin/alpic +21 -0
  13. package/templates/blank/node_modules/.bin/sb +21 -0
  14. package/templates/blank/node_modules/.bin/skybridge +21 -0
  15. package/templates/blank/node_modules/.bin/tsc +21 -0
  16. package/templates/blank/node_modules/.bin/tsserver +21 -0
  17. package/templates/blank/node_modules/.bin/tsx +21 -0
  18. package/templates/blank/node_modules/.bin/vite +21 -0
  19. package/templates/blank/package.json +29 -0
  20. package/templates/blank/src/helpers.ts +4 -0
  21. package/templates/blank/src/server.ts +16 -0
  22. package/templates/blank/tsconfig.json +5 -0
  23. package/templates/blank/vite.config.ts +6 -0
  24. package/templates/demo/.dockerignore +4 -0
  25. package/templates/demo/AGENTS.md +1 -0
  26. package/templates/demo/Dockerfile +53 -0
  27. package/templates/demo/README.md +95 -0
  28. package/templates/demo/_gitignore +7 -0
  29. package/templates/demo/alpic.json +3 -0
  30. package/templates/demo/node_modules/.bin/alpic +21 -0
  31. package/templates/demo/node_modules/.bin/sb +21 -0
  32. package/templates/demo/node_modules/.bin/skybridge +21 -0
  33. package/templates/demo/node_modules/.bin/tsc +21 -0
  34. package/templates/demo/node_modules/.bin/tsserver +21 -0
  35. package/templates/demo/node_modules/.bin/tsx +21 -0
  36. package/templates/demo/node_modules/.bin/vite +21 -0
  37. package/templates/demo/package.json +41 -0
  38. package/templates/demo/src/helpers.ts +4 -0
  39. package/templates/demo/src/index.css +59 -0
  40. package/templates/demo/src/server.ts +94 -0
  41. package/templates/demo/src/views/components/doc-link.tsx +22 -0
  42. package/templates/demo/src/views/components/doc.tsx +21 -0
  43. package/templates/demo/src/views/components/nav.tsx +31 -0
  44. package/templates/demo/src/views/components/progress.tsx +35 -0
  45. package/templates/demo/src/views/components/steps/outro.tsx +68 -0
  46. package/templates/demo/src/views/components/steps/state.tsx +47 -0
  47. package/templates/demo/src/views/components/steps/tool-call.tsx +53 -0
  48. package/templates/demo/src/views/components/steps/tool-output.tsx +40 -0
  49. package/templates/demo/src/views/images/mascot/beret.png +0 -0
  50. package/templates/demo/src/views/images/mascot/chapka.png +0 -0
  51. package/templates/demo/src/views/images/mascot/cowboy-hat.png +0 -0
  52. package/templates/demo/src/views/images/mascot/fez.png +0 -0
  53. package/templates/demo/src/views/images/mascot/jester-hat.png +0 -0
  54. package/templates/demo/src/views/images/mascot/mitre.png +0 -0
  55. package/templates/demo/src/views/images/mascot/non-la.png +0 -0
  56. package/templates/demo/src/views/images/mascot/original.png +0 -0
  57. package/templates/demo/src/views/images/mascot/propeller-beanie.png +0 -0
  58. package/templates/demo/src/views/images/mascot/ski-mask.png +0 -0
  59. package/templates/demo/src/views/images/mascot/sombrero.png +0 -0
  60. package/templates/demo/src/views/images/mascot/top-hat.png +0 -0
  61. package/templates/demo/src/views/images/mascot/viking-helmet.png +0 -0
  62. package/templates/demo/src/views/onboarding.tsx +63 -0
  63. package/templates/demo/src/views/use-mascot.ts +60 -0
  64. package/templates/demo/tsconfig.json +11 -0
  65. package/{template/web → templates/demo}/vite.config.ts +1 -3
  66. package/templates/ecom/.dockerignore +4 -0
  67. package/templates/ecom/.env.template +2 -0
  68. package/templates/ecom/AGENTS.md +2 -0
  69. package/templates/ecom/Dockerfile +53 -0
  70. package/templates/ecom/README.md +92 -0
  71. package/templates/ecom/_gitignore +8 -0
  72. package/templates/ecom/alpic.json +3 -0
  73. package/templates/ecom/node_modules/.bin/alpic +21 -0
  74. package/templates/ecom/node_modules/.bin/sb +21 -0
  75. package/templates/ecom/node_modules/.bin/skybridge +21 -0
  76. package/templates/ecom/node_modules/.bin/tsc +21 -0
  77. package/templates/ecom/node_modules/.bin/tsserver +21 -0
  78. package/templates/ecom/node_modules/.bin/tsx +21 -0
  79. package/templates/ecom/node_modules/.bin/vite +21 -0
  80. package/templates/ecom/package.json +29 -0
  81. package/templates/ecom/src/helpers.ts +4 -0
  82. package/templates/ecom/src/lib/format.ts +56 -0
  83. package/templates/ecom/src/server.ts +125 -0
  84. package/templates/ecom/tsconfig.json +5 -0
  85. package/templates/ecom/vite.config.ts +6 -0
  86. package/template/.cursor/mcp.json +0 -7
  87. package/template/.nvmrc +0 -1
  88. package/template/.vscode/launch.json +0 -16
  89. package/template/.vscode/settings.json +0 -3
  90. package/template/.vscode/tasks.json +0 -14
  91. package/template/README.md +0 -116
  92. package/template/_gitignore +0 -194
  93. package/template/alpic.json +0 -4
  94. package/template/docs/demo.gif +0 -0
  95. package/template/package.json +0 -22
  96. package/template/pnpm-lock.yaml +0 -408
  97. package/template/pnpm-workspace.yaml +0 -7
  98. package/template/server/nodemon.json +0 -5
  99. package/template/server/package.json +0 -37
  100. package/template/server/pnpm-lock.yaml +0 -3796
  101. package/template/server/src/env.ts +0 -12
  102. package/template/server/src/index.ts +0 -34
  103. package/template/server/src/middleware.ts +0 -54
  104. package/template/server/src/pokedex.ts +0 -148
  105. package/template/server/src/server.ts +0 -76
  106. package/template/server/tsconfig.json +0 -17
  107. package/template/web/components.json +0 -22
  108. package/template/web/package.json +0 -33
  109. package/template/web/pnpm-lock.yaml +0 -2629
  110. package/template/web/src/components/ui/shadcn-io/spinner/index.tsx +0 -272
  111. package/template/web/src/helpers.ts +0 -4
  112. package/template/web/src/index.css +0 -120
  113. package/template/web/src/utils.ts +0 -6
  114. package/template/web/src/widgets/pokemon.tsx +0 -203
  115. package/template/web/tsconfig.app.json +0 -34
  116. package/template/web/tsconfig.json +0 -13
  117. package/template/web/tsconfig.node.json +0 -26
@@ -0,0 +1,125 @@
1
+ import { existsSync } from "node:fs";
2
+ import { McpServer } from "skybridge/server";
3
+ import { z } from "zod";
4
+ import {
5
+ type NarrateSearchResultsInput,
6
+ narrateSearchResults,
7
+ } from "./lib/format.js";
8
+
9
+ // Load .env into process.env when present (native to Node, no dependency).
10
+ if (existsSync(".env")) {
11
+ process.loadEnvFile();
12
+ }
13
+
14
+ // @todo: how many products the carousel curates toward. CAROUSEL_RANGE is
15
+ // interpolated into the prompts below so the model aims for the right amount.
16
+ const CAROUSEL_MAX_SIZE = 6;
17
+ const CAROUSEL_RANGE = `${Math.ceil(CAROUSEL_MAX_SIZE / 2)}-${CAROUSEL_MAX_SIZE}`;
18
+
19
+ // @todo: minimum number of searches the model runs before rendering. Feeds the
20
+ // prompts below to enforce multi-call exploration; raise for deeper results.
21
+ const MIN_SEARCH_ITERATIONS = 2;
22
+
23
+ const inputSchema = {
24
+ // @todo: tune this guidance to your catalog's vocabulary. The model reads
25
+ // it to turn conversational input into a good keyword.
26
+ keyword: z.string().describe(
27
+ `\
28
+ Short noun phrases extracted from conversational input. Never pass full sentences. \
29
+ ALWAYS use the singular form, not the plural. \
30
+ Include color, material, and style descriptors for accuracy. \
31
+ For vague gift or occasion queries without a clear product type, use broad category terms. \
32
+ Preserve the existing keyword across filter refinements; only replace when the user makes a completely different request.`,
33
+ ),
34
+
35
+ // @todo: set the sort options your backend supports (or remove).
36
+ sort: z.enum(["price-asc", "price-desc"]).optional().describe("Sort order."),
37
+
38
+ // @todo: declare the filters your catalog supports. Add one param per
39
+ // facet (category, color, size...), each optional so the model only sends
40
+ // what the user asked for. `priceRange` below is just an example, remove it.
41
+ priceRange: z
42
+ .string()
43
+ .optional()
44
+ .describe(
45
+ "Price range in dollars. Format: 'min-max' e.g. '0-500', '1000-2000'.",
46
+ ),
47
+ };
48
+
49
+ type SearchInput = z.infer<z.ZodObject<typeof inputSchema>>;
50
+
51
+ function search(input: SearchInput): NarrateSearchResultsInput {
52
+ // @todo: plug in your product API / DB. Query it with the input params and map
53
+ // each result into `products` below. `pages` and `totalHits` are optional.
54
+ return {
55
+ keyword: input.keyword,
56
+ products: [], // { id: string; properties: { name: string; value: string[] }[] }[]
57
+ pages: { current: 1, total: 1 },
58
+ totalHits: 0,
59
+ carouselMaxSize: CAROUSEL_MAX_SIZE,
60
+ };
61
+ }
62
+
63
+ const server = new McpServer(
64
+ {
65
+ // @todo: name and version your app.
66
+ name: "skybridge-ecom",
67
+ version: "0.0.1",
68
+ },
69
+ {
70
+ // @todo: adapt this server-wide prompt to your catalog.
71
+ instructions: `\
72
+ Two phases:
73
+
74
+ SEARCH: Call search_products ${MIN_SEARCH_ITERATIONS}+ times before presenting—never off one call. \
75
+ Vary the keyword, apply filters from a prior response, or page deeper. \
76
+ Stay silent while searching: emit NO text between calls. Speak only \
77
+ once the carousel renders. Never call a category unavailable before searching.`,
78
+ },
79
+ ).registerTool(
80
+ {
81
+ name: "search_products",
82
+ // @todo: describe YOUR catalog and how the agent should search and curate
83
+ // it. This is the model's main guide: be specific about your categories,
84
+ // the multi-call search loop, and when to render vs. keep searching.
85
+ description: `\
86
+ Search the product catalog. Handles any query: specific products, broad categories, gifts, occasions, or open discovery.
87
+ Never assume a category is unavailable: always search before responding.
88
+
89
+ The response is data only: a list of matching products (name, ID, price, description, and any product-specific attributes) plus pagination and the available filters. The raw results are for your eyes only: the client never sees them.
90
+
91
+ NEVER describe or characterize the raw results to the client: do not mention how many there are, what categories they fall into, or that they look off-topic. While searching, stay silent: do not narrate what you are doing, announce searches, or report progress between tool calls. Speak only once the carousel is rendered.
92
+
93
+ Act on the response as follows:
94
+
95
+ - FIRST SEARCH: use the keyword only (plus sort if needed). Read the available filters in the response; these are the only valid filter options for follow-ups.
96
+ - REFINEMENT: if the user's intent matches an available filter, apply it. If it doesn't match any filter, start a new keyword search.
97
+ - ITERATE: a single search is never enough. Run several searches (${MIN_SEARCH_ITERATIONS} minimum) before rendering: vary the keyword, apply a filter, or page deeper, and compare results across them. Quality comes from this multi-call exploration; one call then render gives shallow results.
98
+ - CURATION: read results and pick the best matches for the client's intent, grounding your choice in each product's description. If zero results, broaden the keyword or relax filters and search again: do NOT call render-carousel. If fewer than 3 results and the user didn't ask for a specific product, search again with broader terms. Only after exploring across several searches, call render-carousel with the selected IDs.
99
+ - PRESENT: Once you have ${CAROUSEL_RANGE} distinct, relevant products, call render-carousel with their IDs. Recommend ONLY AFTER the carousel displays, in carousel order.
100
+
101
+ The sweet spot is ${CAROUSEL_RANGE} products.
102
+ `,
103
+ annotations: {
104
+ readOnlyHint: true,
105
+ openWorldHint: false,
106
+ destructiveHint: false,
107
+ },
108
+ // @todo: customize the status messages shown in ChatGPT while the tool runs.
109
+ _meta: {
110
+ "openai/toolInvocation/invoking": "Searching",
111
+ "openai/toolInvocation/invoked": "Done searching",
112
+ },
113
+ inputSchema,
114
+ outputSchema: {},
115
+ },
116
+ (input) => {
117
+ const results = search(input);
118
+ const { content } = narrateSearchResults(results);
119
+ return { structuredContent: {}, content, isError: false };
120
+ },
121
+ );
122
+
123
+ export default await server.run();
124
+
125
+ export type AppType = typeof server;
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": "skybridge/tsconfig",
3
+
4
+ "include": ["src", ".skybridge/**/*.d.ts"]
5
+ }
@@ -0,0 +1,6 @@
1
+ import { skybridge } from "skybridge/vite";
2
+ import { defineConfig } from "vite";
3
+
4
+ export default defineConfig({
5
+ plugins: [skybridge()],
6
+ });
@@ -1,7 +0,0 @@
1
- {
2
- "mcpServers": {
3
- "local": {
4
- "url": "http://localhost:3000/mcp"
5
- }
6
- }
7
- }
package/template/.nvmrc DELETED
@@ -1 +0,0 @@
1
- lts/jod
@@ -1,16 +0,0 @@
1
- {
2
- "version": "0.0.1",
3
- "configurations": [
4
- {
5
- "name": "Debug MCP Server",
6
- "type": "node",
7
- "request": "launch",
8
- "program": "${workspaceFolder}/dist/index.js",
9
- "console": "integratedTerminal",
10
- "sourceMaps": true,
11
- "outFiles": ["${workspaceFolder}/dist/**/*.js"],
12
- "preLaunchTask": "npm: build",
13
- "stopOnEntry": false
14
- }
15
- ]
16
- }
@@ -1,3 +0,0 @@
1
- {
2
- "editor.formatOnSave": true
3
- }
@@ -1,14 +0,0 @@
1
- {
2
- "version": "2.0.0",
3
- "tasks": [
4
- {
5
- "type": "shell",
6
- "command": "npm",
7
- "args": ["build"],
8
- "group": "build",
9
- "label": "npm: build",
10
- "detail": "npm build",
11
- "problemMatcher": ["$tsc"]
12
- }
13
- ]
14
- }
@@ -1,116 +0,0 @@
1
- # ChatGPT Apps SDK Alpic Starter
2
-
3
- This repository is a minimal Typescript application demonstrating how to build an OpenAI Apps SDK compatible MCP server with widget rendering in ChatGPT.
4
-
5
- ![Demo](docs/demo.gif)
6
-
7
- ## Overview
8
-
9
- This project shows how to integrate a Typescript express application with the ChatGPT Apps SDK using the Model Context Protocol (MCP). It includes a working MCP server that exposes tools and resources that can be called from ChatGPT, with responses rendered natively in ChatGPT. It also includes MCP tools without UI widgets.
10
-
11
- ## Getting Started
12
-
13
- ### Prerequisites
14
-
15
- - Node.js 22+ (see `.nvmrc` for exact version)
16
- - pnpm (install with `npm install -g pnpm`)
17
- - Ngrok
18
-
19
- ### Local Development with Hot Module Replacement (HMR)
20
-
21
- This project uses Vite for React widget development with full HMR support, allowing you to see changes in real-time, directly within ChatGPT conversation, without restarting the server.
22
-
23
- #### 1. Install
24
-
25
- ```bash
26
- pnpm install
27
- ```
28
-
29
- #### 2. Start the Development Server
30
-
31
- Run the development server from the root directory:
32
-
33
- ```bash
34
- pnpm dev
35
- ```
36
-
37
- This command starts an Express server on port 3000. This server packages:
38
-
39
- - an MCP endpoint on `/mcp` - aka the ChatGPT App Backend
40
- - a React application on Vite HMR dev server - aka the ChatGPT App Frontend
41
-
42
- #### 3. Expose Your Local Server
43
-
44
- In a separate terminal, expose your local server using ngrok:
45
-
46
- ```bash
47
- ngrok http 3000
48
- ```
49
-
50
- Copy the forwarding URL from ngrok output:
51
-
52
- ```bash
53
- Forwarding https://3785c5ddc4b6.ngrok-free.app -> http://localhost:3000
54
- ```
55
-
56
- #### 4. Connect to ChatGPT
57
-
58
- - Enable **Settings → Connectors → Advanced → Developer mode** in the ChatGPT client
59
- - Navigate to **Settings → Connectors → Create**
60
- - Enter your ngrok URL with the `/mcp` path (e.g., `https://3785c5ddc4b6.ngrok-free.app/mcp`)
61
- - Click **Create**
62
-
63
- #### 5. Test Your Integration
64
-
65
- - Start a new conversation in ChatGPT
66
- - Select your newly created connector using **the + button → Your connector**
67
- - Try prompting the model (e.g., "Show me pikachu details")
68
-
69
- #### 6. Develop with HMR
70
-
71
- Now you can edit React components in `web` and see changes instantly:
72
-
73
- - Make changes to any component
74
- - Save the file
75
- - The widget will automatically update in ChatGPT without refreshing or reconnecting
76
- - The Express server and MCP server continue running without interruption
77
-
78
- **Note:** When you modify widget components, changes will be reflected immediately. If you modify MCP server code (in `src/`), you may need to reload your connector in **Settings → Connectors → [Your connector] → Reload**.
79
-
80
- ## Widget Naming Convention
81
-
82
- **Important:** For a widget to work properly, the name of the endpoint in your MCP server must match the file name of the corresponding React component in `web/src/widgets/`.
83
-
84
- For example:
85
-
86
- - If you create a widget endpoint named `pokemon-card`, you must create a corresponding React component file at `web/src/widgets/pokemon-card.tsx`
87
- - The endpoint name and the widget file name (without the `.tsx` extension) must be identical
88
-
89
- This naming convention allows the system to automatically map widget requests to their corresponding React components.
90
-
91
- ## Deploy to Production
92
-
93
- Use Alpic to deploy your OpenAI App to production.
94
-
95
- [![Deploy on Alpic](https://assets.alpic.ai/button.svg)](https://app.alpic.ai/new/clone?repositoryUrl=https%3A%2F%2Fgithub.com%2Falpic-ai%2Fapps-sdk-template)
96
-
97
- - In ChatGPT, navigate to **Settings → Connectors → Create** and add your MCP server URL (e.g., `https://your-app-name.alpic.live`)
98
-
99
- ## Project Structure
100
-
101
- ```
102
- .
103
- ├── server/
104
- │ ├── app.ts # OpenAI App extension class with widget API implementation
105
- │ ├── server.ts # MCP server with tool/resource/prompt registration
106
- │ └── index.ts # Express server definition
107
- └── web/
108
- └── src/
109
- └── widgets/ # React widget components (must match endpoint names)
110
- ```
111
-
112
- ## Resources
113
-
114
- - [Apps SDK Documentation](https://developers.openai.com/apps-sdk)
115
- - [Model Context Protocol Documentation](https://modelcontextprotocol.io/)
116
- - [Alpic Documentation](https://docs.alpic.ai/)
@@ -1,194 +0,0 @@
1
- # =============================================================================
2
- # OPERATING SYSTEM FILES
3
- # =============================================================================
4
- .DS_Store
5
- .DS_Store?
6
- ._*
7
- .Spotlight-V100
8
- .Trashes
9
- ehthumbs.db
10
- Thumbs.db
11
-
12
- # =============================================================================
13
- # NODE.JS & PACKAGE MANAGERS
14
- # =============================================================================
15
- node_modules/
16
- npm-debug.log*
17
- yarn-debug.log*
18
- yarn-error.log*
19
- .pnpm-debug.log*
20
- .npm
21
- .pnp.js
22
- .pnp.cjs
23
- .pnp.mjs
24
- .pnp.json
25
- .pnp.ts
26
-
27
- # =============================================================================
28
- # TYPESCRIPT & JAVASCRIPT
29
- # =============================================================================
30
- *.tsbuildinfo
31
- .tscache/
32
- *.js.map
33
- *.mjs.map
34
- *.cjs.map
35
- *.d.ts.map
36
- *.d.ts
37
- !*.d.ts.template
38
- *.tgz
39
- .eslintcache
40
- .rollup.cache
41
-
42
- # =============================================================================
43
- # PYTHON
44
- # =============================================================================
45
- __pycache__/
46
- *.py[cod]
47
- *$py.class
48
- *.so
49
- .Python
50
- develop-eggs/
51
- eggs/
52
- .eggs/
53
- lib/
54
- lib64/
55
- parts/
56
- sdist/
57
- var/
58
- wheels/
59
- *.egg-info/
60
- .installed.cfg
61
- *.egg
62
- .pytest_cache/
63
- .coverage
64
- htmlcov/
65
- .tox/
66
- .venv
67
- venv/
68
- ENV/
69
-
70
- # =============================================================================
71
- # JAVA
72
- # =============================================================================
73
- *.class
74
- *.jar
75
- *.war
76
- *.nar
77
- *.ear
78
- hs_err_pid*
79
- target/
80
- .gradle/
81
-
82
- # =============================================================================
83
- # RUBY
84
- # =============================================================================
85
- *.gem
86
- *.rbc
87
- /.config
88
- /coverage/
89
- /InstalledFiles
90
- /pkg/
91
- /spec/reports/
92
- /spec/examples.txt
93
- /test/tmp/
94
- /test/version_tmp/
95
- /tmp/
96
- .byebug_history
97
-
98
- # =============================================================================
99
- # BUILD & DISTRIBUTION
100
- # =============================================================================
101
- build/
102
- dist/
103
- dist-ssr/
104
- out/
105
-
106
- # =============================================================================
107
- # COMPILED FILES
108
- # =============================================================================
109
- *.com
110
- *.dll
111
- *.exe
112
- *.o
113
-
114
- # =============================================================================
115
- # PACKAGE & ARCHIVE FILES
116
- # =============================================================================
117
- *.7z
118
- *.dmg
119
- *.gz
120
- *.iso
121
- *.rar
122
- *.tar
123
- *.tar.gz
124
- *.zip
125
-
126
- # =============================================================================
127
- # LOGS & DATABASES
128
- # =============================================================================
129
- *.log
130
- *.sql
131
- *.sqlite
132
- *.sqlite3
133
- logs/
134
-
135
- # =============================================================================
136
- # TESTING & COVERAGE
137
- # =============================================================================
138
- coverage/
139
- .nyc_output/
140
-
141
- # =============================================================================
142
- # CACHE & TEMPORARY FILES
143
- # =============================================================================
144
- .cache/
145
- .parcel-cache/
146
- *.bak
147
-
148
- # =============================================================================
149
- # ENVIRONMENT & CONFIGURATION
150
- # =============================================================================
151
- .env
152
- .env.local
153
- .env.development.local
154
- .env.test.local
155
- .env.production.local
156
- .sample-env
157
- sample.*
158
- !sample.template.*
159
- *.local
160
- mcp-servers.json
161
- mcp-config.json
162
-
163
- # =============================================================================
164
- # DEMO & EXAMPLE DIRECTORIES
165
- # =============================================================================
166
- demo/
167
- demos/
168
- example/
169
- examples/
170
- samples/
171
-
172
- # =============================================================================
173
- # GENERATED DOCUMENTATION
174
- # =============================================================================
175
- docs/api/
176
-
177
- # =============================================================================
178
- # EDITOR DIRECTORIES AND FILES
179
- # =============================================================================
180
- .vscode/*
181
- !.vscode/extensions.json
182
- .idea
183
- *.suo
184
- *.ntvs*
185
- *.njsproj
186
- *.sln
187
- *.sw?
188
-
189
- # =============================================================================
190
- # APPLICATION SPECIFIC
191
- # =============================================================================
192
- repomix-output*
193
- duckdata/
194
- .claude
@@ -1,4 +0,0 @@
1
- {
2
- "$schema": "https://assets.alpic.ai/alpic.json",
3
- "buildOutputDir": "server/dist"
4
- }
Binary file
@@ -1,22 +0,0 @@
1
- {
2
- "name": "apps-sdk-template",
3
- "version": "0.0.1",
4
- "private": true,
5
- "description": "Alpic MCP Server Template",
6
- "type": "module",
7
- "packageManager": "pnpm@10.18.3",
8
- "scripts": {
9
- "dev": "pnpm --filter @apps-sdk-template/server dev",
10
- "build": "pnpm web:build && rm -rf server/dist && pnpm --filter=@apps-sdk-template/server --prod deploy server/dist && cp -r web/dist server/dist/assets && pnpm --filter=@apps-sdk-template/server build",
11
- "lint": "biome ci",
12
- "start": "pnpm server:start",
13
- "inspector": "pnpm --filter @apps-sdk-template/server inspector",
14
- "server:build": "pnpm --filter @apps-sdk-template/server build",
15
- "server:start": "pnpm --filter @apps-sdk-template/server start",
16
- "web:build": "pnpm --filter @apps-sdk-template/web build",
17
- "web:preview": "pnpm --filter @apps-sdk-template/web preview"
18
- },
19
- "devDependencies": {
20
- "tsx": "^4.19.4"
21
- }
22
- }