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.
- package/LICENSE +21 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +373 -122
- package/index.js +6 -1
- package/package.json +15 -12
- package/templates/blank/.dockerignore +4 -0
- package/templates/blank/AGENTS.md +1 -0
- package/templates/blank/Dockerfile +53 -0
- package/templates/blank/README.md +92 -0
- package/templates/blank/_gitignore +7 -0
- package/templates/blank/alpic.json +3 -0
- package/templates/blank/node_modules/.bin/alpic +21 -0
- package/templates/blank/node_modules/.bin/sb +21 -0
- package/templates/blank/node_modules/.bin/skybridge +21 -0
- package/templates/blank/node_modules/.bin/tsc +21 -0
- package/templates/blank/node_modules/.bin/tsserver +21 -0
- package/templates/blank/node_modules/.bin/tsx +21 -0
- package/templates/blank/node_modules/.bin/vite +21 -0
- package/templates/blank/package.json +29 -0
- package/templates/blank/src/helpers.ts +4 -0
- package/templates/blank/src/server.ts +16 -0
- package/templates/blank/tsconfig.json +5 -0
- package/templates/blank/vite.config.ts +6 -0
- package/templates/demo/.dockerignore +4 -0
- package/templates/demo/AGENTS.md +1 -0
- package/templates/demo/Dockerfile +53 -0
- package/templates/demo/README.md +95 -0
- package/templates/demo/_gitignore +7 -0
- package/templates/demo/alpic.json +3 -0
- package/templates/demo/node_modules/.bin/alpic +21 -0
- package/templates/demo/node_modules/.bin/sb +21 -0
- package/templates/demo/node_modules/.bin/skybridge +21 -0
- package/templates/demo/node_modules/.bin/tsc +21 -0
- package/templates/demo/node_modules/.bin/tsserver +21 -0
- package/templates/demo/node_modules/.bin/tsx +21 -0
- package/templates/demo/node_modules/.bin/vite +21 -0
- package/templates/demo/package.json +41 -0
- package/templates/demo/src/helpers.ts +4 -0
- package/templates/demo/src/index.css +59 -0
- package/templates/demo/src/server.ts +94 -0
- package/templates/demo/src/views/components/doc-link.tsx +22 -0
- package/templates/demo/src/views/components/doc.tsx +21 -0
- package/templates/demo/src/views/components/nav.tsx +31 -0
- package/templates/demo/src/views/components/progress.tsx +35 -0
- package/templates/demo/src/views/components/steps/outro.tsx +68 -0
- package/templates/demo/src/views/components/steps/state.tsx +47 -0
- package/templates/demo/src/views/components/steps/tool-call.tsx +53 -0
- package/templates/demo/src/views/components/steps/tool-output.tsx +40 -0
- package/templates/demo/src/views/images/mascot/beret.png +0 -0
- package/templates/demo/src/views/images/mascot/chapka.png +0 -0
- package/templates/demo/src/views/images/mascot/cowboy-hat.png +0 -0
- package/templates/demo/src/views/images/mascot/fez.png +0 -0
- package/templates/demo/src/views/images/mascot/jester-hat.png +0 -0
- package/templates/demo/src/views/images/mascot/mitre.png +0 -0
- package/templates/demo/src/views/images/mascot/non-la.png +0 -0
- package/templates/demo/src/views/images/mascot/original.png +0 -0
- package/templates/demo/src/views/images/mascot/propeller-beanie.png +0 -0
- package/templates/demo/src/views/images/mascot/ski-mask.png +0 -0
- package/templates/demo/src/views/images/mascot/sombrero.png +0 -0
- package/templates/demo/src/views/images/mascot/top-hat.png +0 -0
- package/templates/demo/src/views/images/mascot/viking-helmet.png +0 -0
- package/templates/demo/src/views/onboarding.tsx +63 -0
- package/templates/demo/src/views/use-mascot.ts +60 -0
- package/templates/demo/tsconfig.json +11 -0
- package/{template/web → templates/demo}/vite.config.ts +1 -3
- package/templates/ecom/.dockerignore +4 -0
- package/templates/ecom/.env.template +2 -0
- package/templates/ecom/AGENTS.md +2 -0
- package/templates/ecom/Dockerfile +53 -0
- package/templates/ecom/README.md +92 -0
- package/templates/ecom/_gitignore +8 -0
- package/templates/ecom/alpic.json +3 -0
- package/templates/ecom/node_modules/.bin/alpic +21 -0
- package/templates/ecom/node_modules/.bin/sb +21 -0
- package/templates/ecom/node_modules/.bin/skybridge +21 -0
- package/templates/ecom/node_modules/.bin/tsc +21 -0
- package/templates/ecom/node_modules/.bin/tsserver +21 -0
- package/templates/ecom/node_modules/.bin/tsx +21 -0
- package/templates/ecom/node_modules/.bin/vite +21 -0
- package/templates/ecom/package.json +29 -0
- package/templates/ecom/src/helpers.ts +4 -0
- package/templates/ecom/src/lib/format.ts +56 -0
- package/templates/ecom/src/server.ts +125 -0
- package/templates/ecom/tsconfig.json +5 -0
- package/templates/ecom/vite.config.ts +6 -0
- package/template/.cursor/mcp.json +0 -7
- package/template/.nvmrc +0 -1
- package/template/.vscode/launch.json +0 -16
- package/template/.vscode/settings.json +0 -3
- package/template/.vscode/tasks.json +0 -14
- package/template/README.md +0 -116
- package/template/_gitignore +0 -194
- package/template/alpic.json +0 -4
- package/template/docs/demo.gif +0 -0
- package/template/package.json +0 -22
- package/template/pnpm-lock.yaml +0 -408
- package/template/pnpm-workspace.yaml +0 -7
- package/template/server/nodemon.json +0 -5
- package/template/server/package.json +0 -37
- package/template/server/pnpm-lock.yaml +0 -3796
- package/template/server/src/env.ts +0 -12
- package/template/server/src/index.ts +0 -34
- package/template/server/src/middleware.ts +0 -54
- package/template/server/src/pokedex.ts +0 -148
- package/template/server/src/server.ts +0 -76
- package/template/server/tsconfig.json +0 -17
- package/template/web/components.json +0 -22
- package/template/web/package.json +0 -33
- package/template/web/pnpm-lock.yaml +0 -2629
- package/template/web/src/components/ui/shadcn-io/spinner/index.tsx +0 -272
- package/template/web/src/helpers.ts +0 -4
- package/template/web/src/index.css +0 -120
- package/template/web/src/utils.ts +0 -6
- package/template/web/src/widgets/pokemon.tsx +0 -203
- package/template/web/tsconfig.app.json +0 -34
- package/template/web/tsconfig.json +0 -13
- 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;
|
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
|
-
}
|
package/template/README.md
DELETED
|
@@ -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
|
-

|
|
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
|
-
[](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/)
|
package/template/_gitignore
DELETED
|
@@ -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
|
package/template/alpic.json
DELETED
package/template/docs/demo.gif
DELETED
|
Binary file
|
package/template/package.json
DELETED
|
@@ -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
|
-
}
|