create-skybridge 0.0.0-dev.edc0ede → 0.0.0-dev.eddca63

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 (150) hide show
  1. package/LICENSE +21 -0
  2. package/dist/index.js +360 -164
  3. package/package.json +15 -15
  4. package/templates/blank/.dockerignore +4 -0
  5. package/templates/blank/AGENTS.md +1 -0
  6. package/templates/blank/Dockerfile +53 -0
  7. package/templates/blank/README.md +92 -0
  8. package/templates/blank/_gitignore +7 -0
  9. package/templates/blank/alpic.json +3 -0
  10. package/templates/blank/node_modules/.bin/alpic +21 -0
  11. package/templates/blank/node_modules/.bin/sb +21 -0
  12. package/templates/blank/node_modules/.bin/skybridge +21 -0
  13. package/templates/blank/node_modules/.bin/tsc +21 -0
  14. package/templates/blank/node_modules/.bin/tsserver +21 -0
  15. package/templates/blank/node_modules/.bin/tsx +21 -0
  16. package/templates/blank/node_modules/.bin/vite +21 -0
  17. package/templates/blank/package.json +29 -0
  18. package/templates/blank/src/helpers.ts +4 -0
  19. package/templates/blank/src/server.ts +16 -0
  20. package/templates/blank/tsconfig.json +5 -0
  21. package/templates/blank/vite.config.ts +12 -0
  22. package/templates/demo/.dockerignore +4 -0
  23. package/templates/demo/AGENTS.md +1 -0
  24. package/templates/demo/Dockerfile +53 -0
  25. package/templates/demo/README.md +95 -0
  26. package/templates/demo/_gitignore +7 -0
  27. package/templates/demo/alpic.json +3 -0
  28. package/templates/demo/node_modules/.bin/alpic +21 -0
  29. package/templates/demo/node_modules/.bin/sb +21 -0
  30. package/templates/demo/node_modules/.bin/skybridge +21 -0
  31. package/templates/demo/node_modules/.bin/tsc +21 -0
  32. package/templates/demo/node_modules/.bin/tsserver +21 -0
  33. package/templates/demo/node_modules/.bin/tsx +21 -0
  34. package/templates/demo/node_modules/.bin/vite +21 -0
  35. package/templates/demo/package.json +41 -0
  36. package/templates/demo/src/helpers.ts +4 -0
  37. package/templates/demo/src/index.css +59 -0
  38. package/templates/demo/src/server.ts +94 -0
  39. package/templates/demo/src/views/components/doc-link.tsx +22 -0
  40. package/templates/demo/src/views/components/doc.tsx +21 -0
  41. package/templates/demo/src/views/components/nav.tsx +31 -0
  42. package/templates/demo/src/views/components/progress.tsx +35 -0
  43. package/templates/demo/src/views/components/steps/outro.tsx +68 -0
  44. package/templates/demo/src/views/components/steps/state.tsx +47 -0
  45. package/templates/demo/src/views/components/steps/tool-call.tsx +53 -0
  46. package/templates/demo/src/views/components/steps/tool-output.tsx +40 -0
  47. package/templates/demo/src/views/images/mascot/beret.png +0 -0
  48. package/templates/demo/src/views/images/mascot/chapka.png +0 -0
  49. package/templates/demo/src/views/images/mascot/cowboy-hat.png +0 -0
  50. package/templates/demo/src/views/images/mascot/fez.png +0 -0
  51. package/templates/demo/src/views/images/mascot/jester-hat.png +0 -0
  52. package/templates/demo/src/views/images/mascot/mitre.png +0 -0
  53. package/templates/demo/src/views/images/mascot/non-la.png +0 -0
  54. package/templates/demo/src/views/images/mascot/original.png +0 -0
  55. package/templates/demo/src/views/images/mascot/propeller-beanie.png +0 -0
  56. package/templates/demo/src/views/images/mascot/ski-mask.png +0 -0
  57. package/templates/demo/src/views/images/mascot/sombrero.png +0 -0
  58. package/templates/demo/src/views/images/mascot/top-hat.png +0 -0
  59. package/templates/demo/src/views/images/mascot/viking-helmet.png +0 -0
  60. package/templates/demo/src/views/onboarding.tsx +63 -0
  61. package/templates/demo/src/views/use-mascot.ts +60 -0
  62. package/templates/demo/tsconfig.json +11 -0
  63. package/templates/demo/vite.config.ts +20 -0
  64. package/templates/ecom/.dockerignore +4 -0
  65. package/templates/ecom/.env.template +2 -0
  66. package/templates/ecom/.ladle/components.tsx +26 -0
  67. package/templates/ecom/.ladle/config.mjs +11 -0
  68. package/templates/ecom/.ladle/vite.config.ts +11 -0
  69. package/templates/ecom/AGENTS.md +2 -0
  70. package/templates/ecom/Dockerfile +53 -0
  71. package/templates/ecom/README.md +92 -0
  72. package/templates/ecom/_gitignore +9 -0
  73. package/templates/ecom/alpic.json +3 -0
  74. package/templates/ecom/node_modules/.bin/alpic +21 -0
  75. package/templates/ecom/node_modules/.bin/ladle +21 -0
  76. package/templates/ecom/node_modules/.bin/sb +21 -0
  77. package/templates/ecom/node_modules/.bin/skybridge +21 -0
  78. package/templates/ecom/node_modules/.bin/tsc +21 -0
  79. package/templates/ecom/node_modules/.bin/tsserver +21 -0
  80. package/templates/ecom/node_modules/.bin/tsx +21 -0
  81. package/templates/ecom/node_modules/.bin/vite +21 -0
  82. package/templates/ecom/package.json +41 -0
  83. package/templates/ecom/src/components/chip.css.ts +63 -0
  84. package/templates/ecom/src/components/chip.stories.tsx +27 -0
  85. package/templates/ecom/src/components/chip.tsx +49 -0
  86. package/templates/ecom/src/components/empty-state.stories.tsx +3 -0
  87. package/templates/ecom/src/components/empty-state.tsx +12 -0
  88. package/templates/ecom/src/components/expandable-text.css.ts +49 -0
  89. package/templates/ecom/src/components/expandable-text.stories.tsx +20 -0
  90. package/templates/ecom/src/components/expandable-text.tsx +53 -0
  91. package/templates/ecom/src/components/image-gallery.css.ts +172 -0
  92. package/templates/ecom/src/components/image-gallery.stories.tsx +30 -0
  93. package/templates/ecom/src/components/image-gallery.tsx +163 -0
  94. package/templates/ecom/src/components/product-card.css.ts +159 -0
  95. package/templates/ecom/src/components/product-card.stories.tsx +58 -0
  96. package/templates/ecom/src/components/product-card.tsx +102 -0
  97. package/templates/ecom/src/components/product-carousel.css.ts +134 -0
  98. package/templates/ecom/src/components/product-carousel.stories.tsx +64 -0
  99. package/templates/ecom/src/components/product-carousel.tsx +202 -0
  100. package/templates/ecom/src/components/variant-picker.css.ts +27 -0
  101. package/templates/ecom/src/components/variant-picker.stories.tsx +67 -0
  102. package/templates/ecom/src/components/variant-picker.tsx +70 -0
  103. package/templates/ecom/src/components/view-frame.css.ts +22 -0
  104. package/templates/ecom/src/components/view-frame.tsx +27 -0
  105. package/templates/ecom/src/config.ts +12 -0
  106. package/templates/ecom/src/design/contract.css.ts +39 -0
  107. package/templates/ecom/src/design/fonts.css +15 -0
  108. package/templates/ecom/src/design/primitives.css.ts +101 -0
  109. package/templates/ecom/src/design/recipes/typography.css.ts +75 -0
  110. package/templates/ecom/src/design/sprinkles.css.ts +128 -0
  111. package/templates/ecom/src/design/themes/dark.css.ts +36 -0
  112. package/templates/ecom/src/design/themes/light.css.ts +36 -0
  113. package/templates/ecom/src/design/tokens.ts +8 -0
  114. package/templates/ecom/src/helpers.ts +4 -0
  115. package/templates/ecom/src/i18n.ts +35 -0
  116. package/templates/ecom/src/index.css +9 -0
  117. package/templates/ecom/src/lib/cx.ts +9 -0
  118. package/templates/ecom/src/lib/format.ts +9 -0
  119. package/templates/ecom/src/lib/variants.ts +150 -0
  120. package/templates/ecom/src/server.ts +43 -0
  121. package/templates/ecom/src/tools/render-carousel.ts +245 -0
  122. package/templates/ecom/src/tools/search-products.ts +185 -0
  123. package/templates/ecom/src/types.ts +15 -0
  124. package/templates/ecom/src/views/carousel/detail/detail.css.ts +113 -0
  125. package/templates/ecom/src/views/carousel/detail/detail.stories.tsx +126 -0
  126. package/templates/ecom/src/views/carousel/detail/index.tsx +254 -0
  127. package/templates/ecom/src/views/carousel/index.tsx +234 -0
  128. package/templates/ecom/tsconfig.json +11 -0
  129. package/templates/ecom/vite.config.ts +8 -0
  130. package/dist/index.test.d.ts +0 -1
  131. package/dist/index.test.js +0 -23
  132. package/template/README.md +0 -66
  133. package/template/_gitignore +0 -4
  134. package/template/alpic.json +0 -4
  135. package/template/package.json +0 -21
  136. package/template/pnpm-workspace.yaml +0 -7
  137. package/template/server/nodemon.json +0 -5
  138. package/template/server/package.json +0 -32
  139. package/template/server/src/index.ts +0 -35
  140. package/template/server/src/middleware.ts +0 -54
  141. package/template/server/src/server.ts +0 -66
  142. package/template/server/tsconfig.json +0 -17
  143. package/template/web/package.json +0 -24
  144. package/template/web/src/helpers.ts +0 -4
  145. package/template/web/src/index.css +0 -30
  146. package/template/web/src/widgets/magic-8-ball.tsx +0 -22
  147. package/template/web/tsconfig.app.json +0 -34
  148. package/template/web/tsconfig.json +0 -13
  149. package/template/web/tsconfig.node.json +0 -26
  150. package/template/web/vite.config.ts +0 -15
@@ -1,35 +0,0 @@
1
- import express, { type Express } from "express";
2
-
3
- import { widgetsDevServer } from "skybridge/server";
4
- import type { ViteDevServer } from "vite";
5
- import { mcp } from "./middleware.js";
6
- import server from "./server.js";
7
-
8
- const app = express() as Express & { vite: ViteDevServer };
9
-
10
- app.use(express.json());
11
-
12
- app.use(mcp(server));
13
-
14
- const env = process.env.NODE_ENV || "development";
15
-
16
- if (env !== "production") {
17
- app.use(await widgetsDevServer());
18
- }
19
-
20
- app.listen(3000, (error) => {
21
- if (error) {
22
- console.error("Failed to start server:", error);
23
- process.exit(1);
24
- }
25
-
26
- console.log(`Server listening on port 3000 - ${env}`);
27
- console.log(
28
- "Make your local server accessible with 'ngrok http 3000' and connect to ChatGPT with URL https://xxxxxx.ngrok-free.app/mcp",
29
- );
30
- });
31
-
32
- process.on("SIGINT", async () => {
33
- console.log("Server shutdown complete");
34
- process.exit(0);
35
- });
@@ -1,54 +0,0 @@
1
- import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
2
- import type { NextFunction, Request, Response } from "express";
3
-
4
- import type { McpServer } from "skybridge/server";
5
-
6
- export const mcp =
7
- (server: McpServer) =>
8
- async (req: Request, res: Response, next: NextFunction) => {
9
- // Only handle requests to the /mcp path
10
- if (req.path !== "/mcp") {
11
- return next();
12
- }
13
-
14
- if (req.method === "POST") {
15
- try {
16
- const transport = new StreamableHTTPServerTransport({
17
- sessionIdGenerator: undefined,
18
- });
19
-
20
- res.on("close", () => {
21
- transport.close();
22
- });
23
-
24
- await server.connect(transport);
25
-
26
- await transport.handleRequest(req, res, req.body);
27
- } catch (error) {
28
- console.error("Error handling MCP request:", error);
29
- if (!res.headersSent) {
30
- res.status(500).json({
31
- jsonrpc: "2.0",
32
- error: {
33
- code: -32603,
34
- message: "Internal server error",
35
- },
36
- id: null,
37
- });
38
- }
39
- }
40
- } else if (req.method === "GET" || req.method === "DELETE") {
41
- res.writeHead(405).end(
42
- JSON.stringify({
43
- jsonrpc: "2.0",
44
- error: {
45
- code: -32000,
46
- message: "Method not allowed.",
47
- },
48
- id: null,
49
- }),
50
- );
51
- } else {
52
- next();
53
- }
54
- };
@@ -1,66 +0,0 @@
1
- import { McpServer } from "skybridge/server";
2
- import { z } from "zod";
3
-
4
- const Answers = [
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
- "Don't count on it",
11
- "It is certain",
12
- "It is decidedly so",
13
- "Most likely",
14
- "My reply is no",
15
- "My sources say no",
16
- "Outlook good",
17
- "Outlook not so good",
18
- "Reply hazy, try again",
19
- "Signs point to yes",
20
- "Very doubtful",
21
- "Without a doubt",
22
- "Yes definitely",
23
- "Yes",
24
- "You may rely on it",
25
- ];
26
-
27
- const server = new McpServer(
28
- {
29
- name: "alpic-openai-app",
30
- version: "0.0.1",
31
- },
32
- { capabilities: {} },
33
- ).registerWidget(
34
- "magic-8-ball",
35
- {
36
- description: "Magic 8 Ball",
37
- },
38
- {
39
- description: "For fortune-telling or seeking advice.",
40
- inputSchema: {
41
- question: z.string().describe("The user question."),
42
- },
43
- },
44
- async ({ question }) => {
45
- try {
46
- // deterministic answer
47
- const hash = question
48
- .split("")
49
- .reduce((acc, char) => acc + char.charCodeAt(0), 0);
50
- const answer = Answers[hash % Answers.length];
51
- return {
52
- structuredContent: { answer },
53
- content: [],
54
- isError: false,
55
- };
56
- } catch (error) {
57
- return {
58
- content: [{ type: "text", text: `Error: ${error}` }],
59
- isError: true,
60
- };
61
- }
62
- },
63
- );
64
-
65
- export default server;
66
- export type AppType = typeof server;
@@ -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,4 +0,0 @@
1
- import { generateHelpers } from "skybridge/web";
2
- import type { AppType } from "../../server/src/server";
3
-
4
- export const { useToolInfo } = generateHelpers<AppType>();
@@ -1,30 +0,0 @@
1
- .container {
2
- display: flex;
3
- justify-content: center;
4
- align-items: center;
5
- height: 100%;
6
- }
7
-
8
- .ball {
9
- background-color: black;
10
- border-radius: 50%;
11
- width: 12rem;
12
- height: 12rem;
13
- display: flex;
14
- flex-direction: column;
15
- align-items: center;
16
- justify-content: center;
17
- font-family: monospace;
18
- }
19
-
20
- .question {
21
- font-size: 0.75rem;
22
- color: lightgrey;
23
- }
24
-
25
- .answer {
26
- font-size: 1.125rem;
27
- font-weight: bold;
28
- margin-top: 0.5rem;
29
- color: aqua;
30
- }
@@ -1,22 +0,0 @@
1
- import "@/index.css";
2
-
3
- import { mountWidget } from "skybridge/web";
4
- import { useToolInfo } from "../helpers";
5
-
6
- function Magic8Ball() {
7
- const { input, output } = useToolInfo<"magic-8-ball">();
8
- if (!output) return <div>Shaking...</div>;
9
-
10
- return (
11
- <div className="container">
12
- <div className="ball">
13
- <div className="question">{input.question}</div>
14
- <div className="answer">{output.answer}</div>
15
- </div>
16
- </div>
17
- );
18
- }
19
-
20
- export default Magic8Ball;
21
-
22
- mountWidget(<Magic8Ball />);
@@ -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
- }
@@ -1,15 +0,0 @@
1
- import path from "node:path";
2
- import react from "@vitejs/plugin-react";
3
- import { skybridge } from "skybridge/web";
4
- import { defineConfig } from "vite";
5
-
6
- // https://vite.dev/config/
7
- export default defineConfig({
8
- plugins: [skybridge(), react()],
9
-
10
- resolve: {
11
- alias: {
12
- "@": path.resolve(__dirname, "./src"),
13
- },
14
- },
15
- });