create-skybridge 0.0.0-dev.f762713 → 0.0.0-dev.fb825da

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/index.js CHANGED
@@ -4,7 +4,6 @@ import path from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import * as prompts from "@clack/prompts";
6
6
  import mri from "mri";
7
- const minimumPnpmVersion = 10;
8
7
  const defaultProjectName = "skybridge-project";
9
8
  // prettier-ignore
10
9
  const helpMessage = `\
@@ -108,18 +107,16 @@ export async function init(args = process.argv.slice(2)) {
108
107
  // Copy template to target directory
109
108
  fs.cpSync(templateDir, root, {
110
109
  recursive: true,
111
- filter: (src) => !src.endsWith(".npmrc"),
110
+ filter: (src) => [".npmrc"].every((file) => !src.endsWith(file)),
112
111
  });
113
112
  // Rename _gitignore to .gitignore
114
113
  fs.renameSync(path.join(root, "_gitignore"), path.join(root, ".gitignore"));
115
114
  // Update project name in package.json
116
115
  const name = path.basename(root);
117
- for (const dir of ["", "server", "web"]) {
118
- const pkgPath = path.join(root, dir, "package.json");
119
- const pkg = fs.readFileSync(pkgPath, "utf-8");
120
- const fixed = pkg.replace(/apps-sdk-template/g, name);
121
- fs.writeFileSync(pkgPath, fixed);
122
- }
116
+ const pkgPath = path.join(root, "package.json");
117
+ const pkg = fs.readFileSync(pkgPath, "utf-8");
118
+ const fixed = pkg.replace(/apps-sdk-template/g, name);
119
+ fs.writeFileSync(pkgPath, fixed);
123
120
  prompts.log.success(`Project created in ${root}`);
124
121
  }
125
122
  catch (error) {
@@ -127,12 +124,14 @@ export async function init(args = process.argv.slice(2)) {
127
124
  console.error(error);
128
125
  process.exit(1);
129
126
  }
127
+ const userAgent = process.env.npm_config_user_agent;
128
+ const pkgManager = userAgent?.split(" ")[0]?.split("/")[0] || "npm";
130
129
  // 4. Ask about immediate installation
131
130
  let immediate = argImmediate;
132
131
  if (immediate === undefined) {
133
132
  if (interactive) {
134
133
  const immediateResult = await prompts.confirm({
135
- message: `Install with pnpm and start now?`,
134
+ message: `Install with ${pkgManager} and start now?`,
136
135
  });
137
136
  if (prompts.isCancel(immediateResult)) {
138
137
  return cancel();
@@ -143,8 +142,20 @@ export async function init(args = process.argv.slice(2)) {
143
142
  immediate = false;
144
143
  }
145
144
  }
146
- const installCmd = ["pnpm", "install"];
147
- const runCmd = ["pnpm", "dev"];
145
+ const installCmd = [pkgManager, "install"];
146
+ const runCmd = [pkgManager];
147
+ switch (pkgManager) {
148
+ case "yarn":
149
+ case "pnpm":
150
+ case "bun":
151
+ break;
152
+ case "deno":
153
+ runCmd.push("task");
154
+ break;
155
+ default:
156
+ runCmd.push("run");
157
+ }
158
+ runCmd.push("dev");
148
159
  if (!immediate) {
149
160
  prompts.outro(`Done! Next steps:
150
161
  cd ${targetDir}
@@ -153,20 +164,7 @@ export async function init(args = process.argv.slice(2)) {
153
164
  `);
154
165
  return;
155
166
  }
156
- // check if pnpm is installed
157
- const result = spawnSync("pnpm", ["--version"], { encoding: "utf-8" });
158
- if (result.error || result.status !== 0) {
159
- console.error("Error: pnpm is not installed. Please install pnpm first.");
160
- process.exit(1);
161
- }
162
- // check if pnpm major is greater or equal to the one set in package.json packageManager, which should do the trick
163
- const version = result.stdout.trim();
164
- const major = Number(version.split(".")[0]);
165
- if (Number.isNaN(major) || major < minimumPnpmVersion) {
166
- console.error(`Error: pnpm version ${version} is too old. Minimum required version is ${minimumPnpmVersion}.`);
167
- process.exit(1);
168
- }
169
- prompts.log.step(`Installing dependencies with pnpm...`);
167
+ prompts.log.step(`Installing dependencies with ${pkgManager}...`);
170
168
  run(installCmd, {
171
169
  stdio: "inherit",
172
170
  cwd: root,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-skybridge",
3
- "version": "0.0.0-dev.f762713",
3
+ "version": "0.0.0-dev.fb825da",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "author": "Alpic",
@@ -7,7 +7,6 @@ A minimal TypeScript template for building OpenAI Apps SDK compatible MCP server
7
7
  ### Prerequisites
8
8
 
9
9
  - Node.js 22+
10
- - pnpm (install with `npm install -g pnpm`)
11
10
  - HTTP tunnel such as [ngrok](https://ngrok.com/download)
12
11
 
13
12
  ### Local Development
@@ -15,7 +14,13 @@ A minimal TypeScript template for building OpenAI Apps SDK compatible MCP server
15
14
  #### 1. Install
16
15
 
17
16
  ```bash
17
+ npm install
18
+ # or
19
+ yarn install
20
+ # or
18
21
  pnpm install
22
+ # or
23
+ bun install
19
24
  ```
20
25
 
21
26
  #### 2. Start your local server
@@ -23,7 +28,13 @@ pnpm install
23
28
  Run the development server from the root directory:
24
29
 
25
30
  ```bash
31
+ npm run dev
32
+ # or
33
+ yarn dev
34
+ # or
26
35
  pnpm dev
36
+ # or
37
+ bun dev
27
38
  ```
28
39
 
29
40
  This command starts an Express server on port 3000. This server packages:
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@22.19.3_@types+react-dom@19.2.3_@typ_fbf681106c9330dfa636ee45da0d45d7/node_modules/@modelcontextprotocol/inspector/cli/build/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@22.19.3_@types+react-dom@19.2.3_@typ_fbf681106c9330dfa636ee45da0d45d7/node_modules/@modelcontextprotocol/inspector/cli/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@22.19.3_@types+react-dom@19.2.3_@typ_fbf681106c9330dfa636ee45da0d45d7/node_modules/@modelcontextprotocol/inspector/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@22.19.3_@types+react-dom@19.2.3_@typ_fbf681106c9330dfa636ee45da0d45d7/node_modules/@modelcontextprotocol/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@22.19.3_@types+react-dom@19.2.3_@typ_fbf681106c9330dfa636ee45da0d45d7/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@22.19.3_@types+react-dom@19.2.3_@typ_fbf681106c9330dfa636ee45da0d45d7/node_modules/@modelcontextprotocol/inspector/cli/build/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@22.19.3_@types+react-dom@19.2.3_@typ_fbf681106c9330dfa636ee45da0d45d7/node_modules/@modelcontextprotocol/inspector/cli/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@22.19.3_@types+react-dom@19.2.3_@typ_fbf681106c9330dfa636ee45da0d45d7/node_modules/@modelcontextprotocol/inspector/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@22.19.3_@types+react-dom@19.2.3_@typ_fbf681106c9330dfa636ee45da0d45d7/node_modules/@modelcontextprotocol/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@22.19.3_@types+react-dom@19.2.3_@typ_fbf681106c9330dfa636ee45da0d45d7/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../@modelcontextprotocol/inspector/cli/build/cli.js" "$@"
19
+ else
20
+ exec node "$basedir/../@modelcontextprotocol/inspector/cli/build/cli.js" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/nodemon@3.1.11/node_modules/nodemon/bin/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/nodemon@3.1.11/node_modules/nodemon/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/nodemon@3.1.11/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/nodemon@3.1.11/node_modules/nodemon/bin/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/nodemon@3.1.11/node_modules/nodemon/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/nodemon@3.1.11/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../nodemon/bin/nodemon.js" "$@"
19
+ else
20
+ exec node "$basedir/../nodemon/bin/nodemon.js" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/shx@0.4.0/node_modules/shx/lib/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/shx@0.4.0/node_modules/shx/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/shx@0.4.0/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/shx@0.4.0/node_modules/shx/lib/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/shx@0.4.0/node_modules/shx/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/shx@0.4.0/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../shx/lib/cli.js" "$@"
19
+ else
20
+ exec node "$basedir/../shx/lib/cli.js" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/typescript@5.9.3/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/typescript@5.9.3/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../typescript/bin/tsc" "$@"
19
+ else
20
+ exec node "$basedir/../typescript/bin/tsc" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/typescript@5.9.3/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/typescript@5.9.3/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../typescript/bin/tsserver" "$@"
19
+ else
20
+ exec node "$basedir/../typescript/bin/tsserver" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/tsx@4.21.0/node_modules/tsx/dist/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/tsx@4.21.0/node_modules/tsx/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/tsx@4.21.0/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/tsx@4.21.0/node_modules/tsx/dist/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/tsx@4.21.0/node_modules/tsx/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/tsx@4.21.0/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../tsx/dist/cli.mjs" "$@"
19
+ else
20
+ exec node "$basedir/../tsx/dist/cli.mjs" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/vite@7.3.0_@types+node@22.19.3_jiti@2.6.1_lightningcss@1.30.2_terser@5.44.1_tsx@4.21.0/node_modules/vite/bin/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/vite@7.3.0_@types+node@22.19.3_jiti@2.6.1_lightningcss@1.30.2_terser@5.44.1_tsx@4.21.0/node_modules/vite/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/vite@7.3.0_@types+node@22.19.3_jiti@2.6.1_lightningcss@1.30.2_terser@5.44.1_tsx@4.21.0/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/vite@7.3.0_@types+node@22.19.3_jiti@2.6.1_lightningcss@1.30.2_terser@5.44.1_tsx@4.21.0/node_modules/vite/bin/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/vite@7.3.0_@types+node@22.19.3_jiti@2.6.1_lightningcss@1.30.2_terser@5.44.1_tsx@4.21.0/node_modules/vite/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/vite@7.3.0_@types+node@22.19.3_jiti@2.6.1_lightningcss@1.30.2_terser@5.44.1_tsx@4.21.0/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../vite/bin/vite.js" "$@"
19
+ else
20
+ exec node "$basedir/../vite/bin/vite.js" "$@"
21
+ fi
@@ -0,0 +1,5 @@
1
+ {
2
+ "watch": ["server/src"],
3
+ "ext": "ts,json",
4
+ "exec": "tsx server/src/index.ts"
5
+ }
@@ -4,18 +4,37 @@
4
4
  "private": true,
5
5
  "description": "Alpic MCP Server Template",
6
6
  "type": "module",
7
- "packageManager": "pnpm@10.18.3",
8
7
  "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
- "start": "pnpm server:start",
12
- "inspector": "pnpm --filter @apps-sdk-template/server inspector",
13
- "server:build": "pnpm --filter @apps-sdk-template/server build",
14
- "server:start": "pnpm --filter @apps-sdk-template/server start",
15
- "web:build": "pnpm --filter @apps-sdk-template/web build",
16
- "web:preview": "pnpm --filter @apps-sdk-template/web preview"
8
+ "dev": "nodemon",
9
+ "build": "vite build -c web/vite.config.ts && shx rm -rf server/dist && tsc -p tsconfig.server.json && shx cp -r web/dist server/dist/assets",
10
+ "start": "node server/dist/index.js",
11
+ "inspector": "mcp-inspector http://localhost:3000/mcp",
12
+ "server:build": "tsc -p tsconfig.server.json",
13
+ "server:start": "node server/dist/index.js",
14
+ "web:build": "tsc -b web && vite build -c web/vite.config.ts",
15
+ "web:preview": "vite preview -c web/vite.config.ts"
16
+ },
17
+ "dependencies": {
18
+ "@modelcontextprotocol/sdk": "^1.25.1",
19
+ "express": "^5.2.1",
20
+ "react": "^19.2.3",
21
+ "react-dom": "^19.2.3",
22
+ "skybridge": ">=0.16.2 <1.0.0",
23
+ "vite": "^7.3.0",
24
+ "zod": "^4.3.5"
17
25
  },
18
26
  "devDependencies": {
19
- "tsx": "^4.19.4"
20
- }
27
+ "@modelcontextprotocol/inspector": "^0.18.0",
28
+ "@skybridge/devtools": ">=0.16.2 <1.0.0",
29
+ "@types/express": "^5.0.6",
30
+ "@types/node": "^22.19.3",
31
+ "@types/react": "^19.2.7",
32
+ "@types/react-dom": "^19.2.3",
33
+ "@vitejs/plugin-react": "^5.1.2",
34
+ "nodemon": "^3.1.11",
35
+ "shx": "^0.4.0",
36
+ "tsx": "^4.21.0",
37
+ "typescript": "^5.9.3"
38
+ },
39
+ "workspaces": []
21
40
  }
@@ -1,5 +1,4 @@
1
1
  import express, { type Express } from "express";
2
-
3
2
  import { devtoolsStaticServer, widgetsDevServer } from "skybridge/server";
4
3
  import type { ViteDevServer } from "vite";
5
4
  import { mcp } from "./middleware.js";
@@ -28,6 +27,10 @@ app.listen(3000, (error) => {
28
27
  console.log(
29
28
  "Make your local server accessible with 'ngrok http 3000' and connect to ChatGPT with URL https://xxxxxx.ngrok-free.app/mcp",
30
29
  );
30
+
31
+ if (env !== "production") {
32
+ console.log("Devtools available at http://localhost:3000");
33
+ }
31
34
  });
32
35
 
33
36
  process.on("SIGINT", async () => {
@@ -3,10 +3,6 @@ import { z } from "zod";
3
3
 
4
4
  const Answers = [
5
5
  "As I see it, yes",
6
- "Ask again later",
7
- "Better not tell you now",
8
- "Cannot predict now",
9
- "Concentrate and ask again",
10
6
  "Don't count on it",
11
7
  "It is certain",
12
8
  "It is decidedly so",
@@ -15,7 +11,6 @@ const Answers = [
15
11
  "My sources say no",
16
12
  "Outlook good",
17
13
  "Outlook not so good",
18
- "Reply hazy, try again",
19
14
  "Signs point to yes",
20
15
  "Very doubtful",
21
16
  "Without a doubt",
@@ -0,0 +1,23 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "moduleResolution": "bundler",
6
+ "lib": ["ES2022", "DOM", "DOM.Iterable"],
7
+ "jsx": "react-jsx",
8
+
9
+ "strict": true,
10
+ "skipLibCheck": true,
11
+ "esModuleInterop": true,
12
+ "forceConsistentCasingInFileNames": true,
13
+ "verbatimModuleSyntax": true,
14
+
15
+ "noUnusedLocals": true,
16
+ "noUnusedParameters": true,
17
+ "noFallthroughCasesInSwitch": true,
18
+
19
+ "noEmit": true
20
+ },
21
+ "include": ["server/src", "web/src", "web/vite.config.ts"],
22
+ "exclude": ["dist", "node_modules"]
23
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "noEmit": false,
5
+ "outDir": "server/dist",
6
+ "sourceMap": true,
7
+ "declaration": true
8
+ },
9
+ "include": ["server/src"],
10
+ "exclude": ["dist", "node_modules"]
11
+ }
@@ -15,6 +15,7 @@
15
15
  align-items: center;
16
16
  justify-content: center;
17
17
  font-family: monospace;
18
+ text-align: center;
18
19
  }
19
20
 
20
21
  .question {
@@ -6,7 +6,7 @@ import { defineConfig } from "vite";
6
6
  // https://vite.dev/config/
7
7
  export default defineConfig({
8
8
  plugins: [skybridge(), react()],
9
-
9
+ root: __dirname,
10
10
  resolve: {
11
11
  alias: {
12
12
  "@": path.resolve(__dirname, "./src"),
@@ -1,7 +0,0 @@
1
- packages:
2
- - "web"
3
- - "server"
4
- sharedWorkspaceLockfile: false
5
-
6
- catalog:
7
- skybridge: ^0.13.1
@@ -1,5 +0,0 @@
1
- {
2
- "watch": ["src/**/*"],
3
- "ext": "ts,js,json",
4
- "exec": "tsx src/index.ts"
5
- }
@@ -1,32 +0,0 @@
1
- {
2
- "name": "@apps-sdk-template/server",
3
- "version": "0.0.1",
4
- "private": true,
5
- "main": "dist/index.js",
6
- "description": "Alpic MCP Server Template",
7
- "files": [
8
- "dist"
9
- ],
10
- "type": "module",
11
- "scripts": {
12
- "dev": "nodemon",
13
- "build": "tsc",
14
- "start": "node dist/index.js",
15
- "inspector": "mcp-inspector http://localhost:3000/mcp"
16
- },
17
- "dependencies": {
18
- "@modelcontextprotocol/sdk": "^1.24.3",
19
- "express": "^5.1.0",
20
- "skybridge": "catalog:",
21
- "vite": "^7.1.11",
22
- "zod": "^4.1.13"
23
- },
24
- "devDependencies": {
25
- "@modelcontextprotocol/inspector": "^0.17.5",
26
- "@types/express": "^5.0.3",
27
- "@types/node": "^22.15.30",
28
- "nodemon": "^3.1.10",
29
- "tsx": "^4.19.2",
30
- "typescript": "^5.7.2"
31
- }
32
- }
@@ -1,17 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ESNext",
4
- "module": "ESNext",
5
- "moduleResolution": "bundler",
6
- "esModuleInterop": true,
7
- "strict": true,
8
- "skipLibCheck": true,
9
- "forceConsistentCasingInFileNames": true,
10
- "outDir": "dist",
11
- "sourceMap": true,
12
- "jsx": "react",
13
- "inlineSources": true
14
- },
15
- "include": ["**/*.ts", "**/*.tsx"],
16
- "exclude": ["dist", "node_modules"]
17
- }
@@ -1,24 +0,0 @@
1
- {
2
- "name": "@apps-sdk-template/web",
3
- "private": true,
4
- "version": "0.0.0",
5
- "type": "module",
6
- "scripts": {
7
- "dev": "echo 'Not implemented",
8
- "build": "tsc -b && vite build",
9
- "preview": "vite preview"
10
- },
11
- "dependencies": {
12
- "skybridge": "catalog:",
13
- "react": "^19.1.1",
14
- "react-dom": "^19.1.1"
15
- },
16
- "devDependencies": {
17
- "@types/node": "^24.6.0",
18
- "@types/react": "^19.1.16",
19
- "@types/react-dom": "^19.1.9",
20
- "@vitejs/plugin-react": "^5.0.4",
21
- "typescript": "~5.9.3",
22
- "vite": "^7.1.11"
23
- }
24
- }
@@ -1,34 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
4
- "target": "ES2022",
5
- "useDefineForClassFields": true,
6
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
7
- "module": "ESNext",
8
- "types": ["vite/client"],
9
- "skipLibCheck": true,
10
-
11
- /* Bundler mode */
12
- "moduleResolution": "bundler",
13
- "allowImportingTsExtensions": true,
14
- "verbatimModuleSyntax": true,
15
- "moduleDetection": "force",
16
- "noEmit": true,
17
- "jsx": "react-jsx",
18
-
19
- /* Linting */
20
- "strict": true,
21
- "noUnusedLocals": true,
22
- "noUnusedParameters": true,
23
- "erasableSyntaxOnly": true,
24
- "noFallthroughCasesInSwitch": true,
25
- "noUncheckedSideEffectImports": true,
26
-
27
- /* Shadcn Config */
28
- "baseUrl": ".",
29
- "paths": {
30
- "@/*": ["./src/*"]
31
- }
32
- },
33
- "include": ["src"]
34
- }
@@ -1,13 +0,0 @@
1
- {
2
- "files": [],
3
- "references": [
4
- { "path": "./tsconfig.app.json" },
5
- { "path": "./tsconfig.node.json" }
6
- ],
7
- "compilerOptions": {
8
- "baseUrl": ".",
9
- "paths": {
10
- "@/*": ["./src/*"]
11
- }
12
- }
13
- }
@@ -1,26 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
4
- "target": "ES2023",
5
- "lib": ["ES2023"],
6
- "module": "ESNext",
7
- "types": ["node"],
8
- "skipLibCheck": true,
9
-
10
- /* Bundler mode */
11
- "moduleResolution": "bundler",
12
- "allowImportingTsExtensions": true,
13
- "verbatimModuleSyntax": true,
14
- "moduleDetection": "force",
15
- "noEmit": true,
16
-
17
- /* Linting */
18
- "strict": true,
19
- "noUnusedLocals": true,
20
- "noUnusedParameters": true,
21
- "erasableSyntaxOnly": true,
22
- "noFallthroughCasesInSwitch": true,
23
- "noUncheckedSideEffectImports": true
24
- },
25
- "include": ["vite.config.ts"]
26
- }