nitrostack 1.0.0
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/CHANGELOG.md +227 -0
- package/CONTRIBUTING.md +182 -0
- package/LICENSE +201 -0
- package/LICENSE_URLS_UPDATE_COMPLETE.md +388 -0
- package/NOTICE +153 -0
- package/README.md +571 -0
- package/dist/auth/api-key.d.ts +118 -0
- package/dist/auth/api-key.d.ts.map +1 -0
- package/dist/auth/api-key.js +168 -0
- package/dist/auth/api-key.js.map +1 -0
- package/dist/auth/client.d.ts +151 -0
- package/dist/auth/client.d.ts.map +1 -0
- package/dist/auth/client.js +330 -0
- package/dist/auth/client.js.map +1 -0
- package/dist/auth/index.d.ts +30 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +43 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +95 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +260 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/pkce.d.ts +53 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +105 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/quick-setup.d.ts +94 -0
- package/dist/auth/quick-setup.d.ts.map +1 -0
- package/dist/auth/quick-setup.js +210 -0
- package/dist/auth/quick-setup.js.map +1 -0
- package/dist/auth/server-integration.d.ts +97 -0
- package/dist/auth/server-integration.d.ts.map +1 -0
- package/dist/auth/server-integration.js +182 -0
- package/dist/auth/server-integration.js.map +1 -0
- package/dist/auth/server-metadata.d.ts +51 -0
- package/dist/auth/server-metadata.d.ts.map +1 -0
- package/dist/auth/server-metadata.js +106 -0
- package/dist/auth/server-metadata.js.map +1 -0
- package/dist/auth/simple-jwt.d.ts +88 -0
- package/dist/auth/simple-jwt.d.ts.map +1 -0
- package/dist/auth/simple-jwt.js +152 -0
- package/dist/auth/simple-jwt.js.map +1 -0
- package/dist/auth/token-store.d.ts +104 -0
- package/dist/auth/token-store.d.ts.map +1 -0
- package/dist/auth/token-store.js +205 -0
- package/dist/auth/token-store.js.map +1 -0
- package/dist/auth/token-validation.d.ts +47 -0
- package/dist/auth/token-validation.d.ts.map +1 -0
- package/dist/auth/token-validation.js +237 -0
- package/dist/auth/token-validation.js.map +1 -0
- package/dist/auth/types.d.ts +215 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +6 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cli/commands/build.d.ts +6 -0
- package/dist/cli/commands/build.d.ts.map +1 -0
- package/dist/cli/commands/build.js +104 -0
- package/dist/cli/commands/build.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +7 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +312 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/generate-types.d.ts +8 -0
- package/dist/cli/commands/generate-types.d.ts.map +1 -0
- package/dist/cli/commands/generate-types.js +220 -0
- package/dist/cli/commands/generate-types.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +5 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +365 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/init.d.ts +7 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +365 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/start.d.ts +6 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +61 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +47 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/mcp-dev-wrapper.d.ts +3 -0
- package/dist/cli/mcp-dev-wrapper.d.ts.map +1 -0
- package/dist/cli/mcp-dev-wrapper.js +116 -0
- package/dist/cli/mcp-dev-wrapper.js.map +1 -0
- package/dist/core/apikey-module.d.ts +69 -0
- package/dist/core/apikey-module.d.ts.map +1 -0
- package/dist/core/apikey-module.js +114 -0
- package/dist/core/apikey-module.js.map +1 -0
- package/dist/core/app-decorator.d.ts +58 -0
- package/dist/core/app-decorator.d.ts.map +1 -0
- package/dist/core/app-decorator.js +261 -0
- package/dist/core/app-decorator.js.map +1 -0
- package/dist/core/builders.d.ts +38 -0
- package/dist/core/builders.d.ts.map +1 -0
- package/dist/core/builders.js +129 -0
- package/dist/core/builders.js.map +1 -0
- package/dist/core/component.d.ts +105 -0
- package/dist/core/component.d.ts.map +1 -0
- package/dist/core/component.js +182 -0
- package/dist/core/component.js.map +1 -0
- package/dist/core/config-module.d.ts +55 -0
- package/dist/core/config-module.d.ts.map +1 -0
- package/dist/core/config-module.js +94 -0
- package/dist/core/config-module.js.map +1 -0
- package/dist/core/decorators/cache.decorator.d.ts +61 -0
- package/dist/core/decorators/cache.decorator.d.ts.map +1 -0
- package/dist/core/decorators/cache.decorator.js +115 -0
- package/dist/core/decorators/cache.decorator.js.map +1 -0
- package/dist/core/decorators/health-check.decorator.d.ts +80 -0
- package/dist/core/decorators/health-check.decorator.d.ts.map +1 -0
- package/dist/core/decorators/health-check.decorator.js +153 -0
- package/dist/core/decorators/health-check.decorator.js.map +1 -0
- package/dist/core/decorators/rate-limit.decorator.d.ts +62 -0
- package/dist/core/decorators/rate-limit.decorator.d.ts.map +1 -0
- package/dist/core/decorators/rate-limit.decorator.js +129 -0
- package/dist/core/decorators/rate-limit.decorator.js.map +1 -0
- package/dist/core/decorators.d.ts +151 -0
- package/dist/core/decorators.d.ts.map +1 -0
- package/dist/core/decorators.js +142 -0
- package/dist/core/decorators.js.map +1 -0
- package/dist/core/di/container.d.ts +42 -0
- package/dist/core/di/container.d.ts.map +1 -0
- package/dist/core/di/container.js +76 -0
- package/dist/core/di/container.js.map +1 -0
- package/dist/core/di/injectable.decorator.d.ts +35 -0
- package/dist/core/di/injectable.decorator.d.ts.map +1 -0
- package/dist/core/di/injectable.decorator.js +57 -0
- package/dist/core/di/injectable.decorator.js.map +1 -0
- package/dist/core/errors.d.ts +54 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +87 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/events/event-emitter.d.ts +50 -0
- package/dist/core/events/event-emitter.d.ts.map +1 -0
- package/dist/core/events/event-emitter.js +94 -0
- package/dist/core/events/event-emitter.js.map +1 -0
- package/dist/core/events/event.decorator.d.ts +48 -0
- package/dist/core/events/event.decorator.d.ts.map +1 -0
- package/dist/core/events/event.decorator.js +68 -0
- package/dist/core/events/event.decorator.js.map +1 -0
- package/dist/core/filters/exception-filter.decorator.d.ts +40 -0
- package/dist/core/filters/exception-filter.decorator.d.ts.map +1 -0
- package/dist/core/filters/exception-filter.decorator.js +54 -0
- package/dist/core/filters/exception-filter.decorator.js.map +1 -0
- package/dist/core/filters/exception-filter.interface.d.ts +30 -0
- package/dist/core/filters/exception-filter.interface.d.ts.map +1 -0
- package/dist/core/filters/exception-filter.interface.js +2 -0
- package/dist/core/filters/exception-filter.interface.js.map +1 -0
- package/dist/core/guards/apikey.guard.d.ts +22 -0
- package/dist/core/guards/apikey.guard.d.ts.map +1 -0
- package/dist/core/guards/apikey.guard.js +11 -0
- package/dist/core/guards/apikey.guard.js.map +1 -0
- package/dist/core/guards/guard.interface.d.ts +18 -0
- package/dist/core/guards/guard.interface.d.ts.map +1 -0
- package/dist/core/guards/guard.interface.js +2 -0
- package/dist/core/guards/guard.interface.js.map +1 -0
- package/dist/core/guards/jwt.guard.d.ts +18 -0
- package/dist/core/guards/jwt.guard.d.ts.map +1 -0
- package/dist/core/guards/jwt.guard.js +2 -0
- package/dist/core/guards/jwt.guard.js.map +1 -0
- package/dist/core/guards/oauth.guard.d.ts +35 -0
- package/dist/core/guards/oauth.guard.d.ts.map +1 -0
- package/dist/core/guards/oauth.guard.js +2 -0
- package/dist/core/guards/oauth.guard.js.map +1 -0
- package/dist/core/guards/use-guards.decorator.d.ts +25 -0
- package/dist/core/guards/use-guards.decorator.d.ts.map +1 -0
- package/dist/core/guards/use-guards.decorator.js +32 -0
- package/dist/core/guards/use-guards.decorator.js.map +1 -0
- package/dist/core/health/health-checks.resource.d.ts +14 -0
- package/dist/core/health/health-checks.resource.d.ts.map +1 -0
- package/dist/core/health/health-checks.resource.js +29 -0
- package/dist/core/health/health-checks.resource.js.map +1 -0
- package/dist/core/index.d.ts +55 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +57 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/interceptors/interceptor.decorator.d.ts +37 -0
- package/dist/core/interceptors/interceptor.decorator.d.ts.map +1 -0
- package/dist/core/interceptors/interceptor.decorator.js +51 -0
- package/dist/core/interceptors/interceptor.decorator.js.map +1 -0
- package/dist/core/interceptors/interceptor.interface.d.ts +31 -0
- package/dist/core/interceptors/interceptor.interface.d.ts.map +1 -0
- package/dist/core/interceptors/interceptor.interface.js +2 -0
- package/dist/core/interceptors/interceptor.interface.js.map +1 -0
- package/dist/core/jwt-module.d.ts +51 -0
- package/dist/core/jwt-module.d.ts.map +1 -0
- package/dist/core/jwt-module.js +52 -0
- package/dist/core/jwt-module.js.map +1 -0
- package/dist/core/logger.d.ts +18 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +51 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/middleware/middleware.decorator.d.ts +39 -0
- package/dist/core/middleware/middleware.decorator.d.ts.map +1 -0
- package/dist/core/middleware/middleware.decorator.js +53 -0
- package/dist/core/middleware/middleware.decorator.js.map +1 -0
- package/dist/core/middleware/middleware.interface.d.ts +29 -0
- package/dist/core/middleware/middleware.interface.d.ts.map +1 -0
- package/dist/core/middleware/middleware.interface.js +2 -0
- package/dist/core/middleware/middleware.interface.js.map +1 -0
- package/dist/core/module.d.ts +74 -0
- package/dist/core/module.d.ts.map +1 -0
- package/dist/core/module.js +82 -0
- package/dist/core/module.js.map +1 -0
- package/dist/core/oauth-module.d.ts +144 -0
- package/dist/core/oauth-module.d.ts.map +1 -0
- package/dist/core/oauth-module.js +190 -0
- package/dist/core/oauth-module.js.map +1 -0
- package/dist/core/pipes/pipe.decorator.d.ts +55 -0
- package/dist/core/pipes/pipe.decorator.d.ts.map +1 -0
- package/dist/core/pipes/pipe.decorator.js +85 -0
- package/dist/core/pipes/pipe.decorator.js.map +1 -0
- package/dist/core/pipes/pipe.interface.d.ts +36 -0
- package/dist/core/pipes/pipe.interface.d.ts.map +1 -0
- package/dist/core/pipes/pipe.interface.js +2 -0
- package/dist/core/pipes/pipe.interface.js.map +1 -0
- package/dist/core/prompt.d.ts +37 -0
- package/dist/core/prompt.d.ts.map +1 -0
- package/dist/core/prompt.js +76 -0
- package/dist/core/prompt.js.map +1 -0
- package/dist/core/resource.d.ts +42 -0
- package/dist/core/resource.d.ts.map +1 -0
- package/dist/core/resource.js +90 -0
- package/dist/core/resource.js.map +1 -0
- package/dist/core/server.d.ts +72 -0
- package/dist/core/server.d.ts.map +1 -0
- package/dist/core/server.js +406 -0
- package/dist/core/server.js.map +1 -0
- package/dist/core/tool.d.ts +78 -0
- package/dist/core/tool.d.ts.map +1 -0
- package/dist/core/tool.js +190 -0
- package/dist/core/tool.js.map +1 -0
- package/dist/core/transports/http-server.d.ts +102 -0
- package/dist/core/transports/http-server.d.ts.map +1 -0
- package/dist/core/transports/http-server.js +265 -0
- package/dist/core/transports/http-server.js.map +1 -0
- package/dist/core/types.d.ts +123 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/widgets/widget-examples.resource.d.ts +17 -0
- package/dist/core/widgets/widget-examples.resource.d.ts.map +1 -0
- package/dist/core/widgets/widget-examples.resource.js +28 -0
- package/dist/core/widgets/widget-examples.resource.js.map +1 -0
- package/dist/core/widgets/widget-registry.d.ts +56 -0
- package/dist/core/widgets/widget-registry.d.ts.map +1 -0
- package/dist/core/widgets/widget-registry.js +75 -0
- package/dist/core/widgets/widget-registry.js.map +1 -0
- package/dist/testing/index.d.ts +82 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +164 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/ui-next/index.d.ts +31 -0
- package/dist/ui-next/index.d.ts.map +1 -0
- package/dist/ui-next/index.js +687 -0
- package/dist/ui-next/index.js.map +1 -0
- package/dist/widgets/index.d.ts +9 -0
- package/dist/widgets/index.d.ts.map +1 -0
- package/dist/widgets/index.js +9 -0
- package/dist/widgets/index.js.map +1 -0
- package/dist/widgets/metadata.d.ts +53 -0
- package/dist/widgets/metadata.d.ts.map +1 -0
- package/dist/widgets/metadata.js +29 -0
- package/dist/widgets/metadata.js.map +1 -0
- package/dist/widgets/withToolData.d.ts +19 -0
- package/dist/widgets/withToolData.d.ts.map +1 -0
- package/dist/widgets/withToolData.js +240 -0
- package/dist/widgets/withToolData.js.map +1 -0
- package/jest.config.js +21 -0
- package/package.json +108 -0
- package/templates/typescript-auth/AI_AGENT_CLI_REFERENCE.md +702 -0
- package/templates/typescript-auth/AI_AGENT_SDK_REFERENCE.md +1260 -0
- package/templates/typescript-auth/README.md +400 -0
- package/templates/typescript-auth/package.json +44 -0
- package/templates/typescript-auth-api-key/AI_AGENT_CLI_REFERENCE.md +701 -0
- package/templates/typescript-auth-api-key/AI_AGENT_SDK_REFERENCE.md +1260 -0
- package/templates/typescript-auth-api-key/README.md +483 -0
- package/templates/typescript-auth-api-key/package-lock.json +124 -0
- package/templates/typescript-auth-api-key/package.json +29 -0
- package/templates/typescript-oauth/AI_AGENT_CLI_REFERENCE.md +701 -0
- package/templates/typescript-oauth/AI_AGENT_SDK_REFERENCE.md +1260 -0
- package/templates/typescript-oauth/OAUTH_SETUP.md +406 -0
- package/templates/typescript-oauth/README.md +350 -0
- package/templates/typescript-oauth/package.json +30 -0
- package/templates/typescript-starter/AI_AGENT_CLI_REFERENCE.md +701 -0
- package/templates/typescript-starter/AI_AGENT_SDK_REFERENCE.md +1260 -0
- package/templates/typescript-starter/README.md +312 -0
- package/templates/typescript-starter/package.json +32 -0
|
@@ -0,0 +1,701 @@
|
|
|
1
|
+
# NitroStack CLI Reference - For AI Code Editors
|
|
2
|
+
|
|
3
|
+
**Comprehensive CLI reference for AI agents working with NitroStack v3.0**
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Global install (recommended for end users)
|
|
11
|
+
npm install -g nitrostack
|
|
12
|
+
|
|
13
|
+
# Or use npx (no installation)
|
|
14
|
+
npx nitrostack --version
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Commands Overview
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
nitrostack init <project-name> # Create new project
|
|
23
|
+
nitrostack dev [--port <number>] # Start development mode
|
|
24
|
+
nitrostack build # Build for production
|
|
25
|
+
nitrostack generate <type> <name> [opts] # Generate code
|
|
26
|
+
nitrostack --version # Show version
|
|
27
|
+
nitrostack --help # Show help
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 1. Initialize Project
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# Basic initialization
|
|
36
|
+
nitrostack init my-project
|
|
37
|
+
|
|
38
|
+
# With specific template
|
|
39
|
+
nitrostack init my-project --template typescript-starter
|
|
40
|
+
nitrostack init my-ecommerce --template typescript-auth
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Available Templates
|
|
44
|
+
|
|
45
|
+
1. **`typescript-starter`** (Simple & Educational)
|
|
46
|
+
- Single calculator module
|
|
47
|
+
- No authentication
|
|
48
|
+
- No database
|
|
49
|
+
- Perfect for learning basics
|
|
50
|
+
- Tools, resources, prompts, widgets, health checks
|
|
51
|
+
|
|
52
|
+
2. **`typescript-auth`** (Full-Featured E-commerce)
|
|
53
|
+
- JWT, API Keys, OAuth 2.1 authentication
|
|
54
|
+
- SQLite database with seed data
|
|
55
|
+
- 5 feature modules (auth, products, cart, orders, addresses)
|
|
56
|
+
- 20+ UI widgets
|
|
57
|
+
- Guards, caching, rate limiting
|
|
58
|
+
- Production-ready structure
|
|
59
|
+
|
|
60
|
+
### What `init` Does
|
|
61
|
+
|
|
62
|
+
1. ✅ Copies template files
|
|
63
|
+
2. ✅ Installs npm dependencies
|
|
64
|
+
3. ✅ Installs widget dependencies (`src/widgets/`)
|
|
65
|
+
4. ✅ Builds widgets for development
|
|
66
|
+
5. ✅ Creates `.env` from `.env.example`
|
|
67
|
+
6. ✅ Project is ready to run
|
|
68
|
+
|
|
69
|
+
### After Init
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
cd my-project
|
|
73
|
+
|
|
74
|
+
# For typescript-auth template: setup database
|
|
75
|
+
npm run setup-db
|
|
76
|
+
|
|
77
|
+
# Start development
|
|
78
|
+
npm run dev
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 2. Development Mode
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Start all services
|
|
87
|
+
nitrostack dev
|
|
88
|
+
|
|
89
|
+
# Custom port for Studio
|
|
90
|
+
nitrostack dev --port 3002
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### What It Starts
|
|
94
|
+
|
|
95
|
+
1. **MCP Server** (stdio mode)
|
|
96
|
+
- Communicates via stdin/stdout
|
|
97
|
+
- Follows MCP protocol spec
|
|
98
|
+
- Hot reload on code changes
|
|
99
|
+
|
|
100
|
+
2. **Studio** (port 3000, or custom)
|
|
101
|
+
- Visual development interface
|
|
102
|
+
- Test tools manually
|
|
103
|
+
- AI chat (OpenAI/Gemini)
|
|
104
|
+
- Widget preview
|
|
105
|
+
- Resources browser
|
|
106
|
+
- Prompts testing
|
|
107
|
+
- Health checks dashboard
|
|
108
|
+
- OAuth 2.1 config
|
|
109
|
+
- Connection monitoring
|
|
110
|
+
|
|
111
|
+
3. **Widget Dev Server** (port 3001)
|
|
112
|
+
- Next.js dev server
|
|
113
|
+
- Hot module replacement
|
|
114
|
+
- Serves UI widgets
|
|
115
|
+
- Fast refresh
|
|
116
|
+
|
|
117
|
+
### Studio Features
|
|
118
|
+
|
|
119
|
+
| Tab | Purpose |
|
|
120
|
+
|-----|---------|
|
|
121
|
+
| **Tools** | Execute tools, see widget previews, examples |
|
|
122
|
+
| **AI Chat** | Chat with LLM using your tools |
|
|
123
|
+
| **Resources** | Browse resources, view UI widgets |
|
|
124
|
+
| **Prompts** | Test prompt templates |
|
|
125
|
+
| **Health** | Monitor health checks |
|
|
126
|
+
| **OAuth 2.1** | Configure OAuth endpoints |
|
|
127
|
+
| **Ping** | Test MCP connection |
|
|
128
|
+
|
|
129
|
+
### URLs
|
|
130
|
+
|
|
131
|
+
- **Studio UI**: `http://localhost:3000`
|
|
132
|
+
- **Widget Dev**: `http://localhost:3001`
|
|
133
|
+
- **MCP Server**: stdio (no HTTP)
|
|
134
|
+
|
|
135
|
+
### Hot Reload
|
|
136
|
+
|
|
137
|
+
Changes auto-reload:
|
|
138
|
+
- ✅ TypeScript files (`src/**/*.ts`)
|
|
139
|
+
- ✅ Widget files (`src/widgets/app/**/*`)
|
|
140
|
+
- ✅ No manual restart needed
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 3. Build Project
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
nitrostack build
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Build Process
|
|
151
|
+
|
|
152
|
+
1. **Compile TypeScript**
|
|
153
|
+
- Input: `src/**/*.ts`
|
|
154
|
+
- Output: `dist/**/*.js`
|
|
155
|
+
- ES modules format
|
|
156
|
+
- Source maps included
|
|
157
|
+
|
|
158
|
+
2. **Build Widgets**
|
|
159
|
+
- Input: `src/widgets/`
|
|
160
|
+
- Output: `src/widgets/.next/`
|
|
161
|
+
- Production optimized
|
|
162
|
+
- Static assets bundled
|
|
163
|
+
|
|
164
|
+
3. **Copy Assets**
|
|
165
|
+
- Database files
|
|
166
|
+
- Config files
|
|
167
|
+
- Environment templates
|
|
168
|
+
|
|
169
|
+
### Output Structure
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
dist/
|
|
173
|
+
├── index.js # Entry point
|
|
174
|
+
├── app.module.js
|
|
175
|
+
├── modules/
|
|
176
|
+
│ ├── auth/
|
|
177
|
+
│ ├── products/
|
|
178
|
+
│ └── ...
|
|
179
|
+
└── ... (all compiled code)
|
|
180
|
+
|
|
181
|
+
src/widgets/.next/ # Built widgets
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Run Production Build
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
# After build
|
|
188
|
+
node dist/index.js
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## 4. Generate Code
|
|
194
|
+
|
|
195
|
+
### Generate Module
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
nitrostack generate module payments
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Creates:
|
|
202
|
+
```
|
|
203
|
+
src/modules/payments/
|
|
204
|
+
├── payments.module.ts # @Module definition
|
|
205
|
+
├── payments.tools.ts # @Tool definitions
|
|
206
|
+
├── payments.resources.ts # @Resource definitions
|
|
207
|
+
├── payments.prompts.ts # @Prompt definitions
|
|
208
|
+
└── payments.service.ts # @Injectable service
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**Generated module includes:**
|
|
212
|
+
- Boilerplate decorator setup
|
|
213
|
+
- Example tool with Zod schema
|
|
214
|
+
- Example resource
|
|
215
|
+
- Example prompt
|
|
216
|
+
- Injectable service with DI
|
|
217
|
+
- Ready to import in `app.module.ts`
|
|
218
|
+
|
|
219
|
+
### Generate Tool
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
nitrostack generate tool process-payment --module payments
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
- Adds tool to `src/modules/payments/payments.tools.ts`
|
|
226
|
+
- Includes:
|
|
227
|
+
- `@Tool` decorator
|
|
228
|
+
- Zod input schema
|
|
229
|
+
- Example request/response
|
|
230
|
+
- `@Widget` placeholder
|
|
231
|
+
- Execution context
|
|
232
|
+
|
|
233
|
+
### Generate Resource
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
nitrostack generate resource payment-schema --module payments
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
- Adds resource to `src/modules/payments/payments.resources.ts`
|
|
240
|
+
- Includes URI pattern, mime type, examples
|
|
241
|
+
|
|
242
|
+
### Generate Prompt
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
nitrostack generate prompt payment-help --module payments
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
- Adds prompt to `src/modules/payments/payments.prompts.ts`
|
|
249
|
+
- Includes arguments, message template
|
|
250
|
+
|
|
251
|
+
### Generate Guard
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
nitrostack generate guard admin
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
Creates `src/guards/admin.guard.ts`:
|
|
258
|
+
```typescript
|
|
259
|
+
@Injectable()
|
|
260
|
+
export class AdminGuard implements Guard {
|
|
261
|
+
async canActivate(context: ExecutionContext): Promise<boolean> {
|
|
262
|
+
// Your authorization logic
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
**Usage:**
|
|
268
|
+
```typescript
|
|
269
|
+
@Tool({ name: 'admin_tool' })
|
|
270
|
+
@UseGuards(AdminGuard)
|
|
271
|
+
async adminTool(input: any, ctx: ExecutionContext) {}
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Generate Middleware
|
|
275
|
+
|
|
276
|
+
```bash
|
|
277
|
+
nitrostack generate middleware logging
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
Creates `src/middleware/logging.middleware.ts`:
|
|
281
|
+
```typescript
|
|
282
|
+
@Middleware()
|
|
283
|
+
export class LoggingMiddleware implements MiddlewareInterface {
|
|
284
|
+
async use(context: ExecutionContext, next: () => Promise<any>) {
|
|
285
|
+
// Before
|
|
286
|
+
const result = await next();
|
|
287
|
+
// After
|
|
288
|
+
return result;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### Generate Interceptor
|
|
294
|
+
|
|
295
|
+
```bash
|
|
296
|
+
nitrostack generate interceptor transform
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
Creates `src/interceptors/transform.interceptor.ts`:
|
|
300
|
+
```typescript
|
|
301
|
+
@Interceptor()
|
|
302
|
+
export class TransformInterceptor implements InterceptorInterface {
|
|
303
|
+
async intercept(context: ExecutionContext, next: () => Promise<any>) {
|
|
304
|
+
const result = await next();
|
|
305
|
+
return { success: true, data: result };
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### Generate Pipe
|
|
311
|
+
|
|
312
|
+
```bash
|
|
313
|
+
nitrostack generate pipe validation
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
Creates `src/pipes/validation.pipe.ts`:
|
|
317
|
+
```typescript
|
|
318
|
+
@Pipe()
|
|
319
|
+
export class ValidationPipe implements PipeInterface {
|
|
320
|
+
async transform(value: any, metadata: any): Promise<any> {
|
|
321
|
+
// Transform/validate value
|
|
322
|
+
return value;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
### Generate Types
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
# Generate TypeScript types from tool schemas
|
|
331
|
+
nitrostack generate types
|
|
332
|
+
|
|
333
|
+
# Custom output path
|
|
334
|
+
nitrostack generate types --output src/widgets/types/generated.ts
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
**What It Does:**
|
|
338
|
+
1. Scans all `*.tools.ts` files
|
|
339
|
+
2. Extracts Zod schemas from `@Tool` decorators
|
|
340
|
+
3. Converts to TypeScript interfaces
|
|
341
|
+
4. Outputs to `src/widgets/types/tool-data.ts` (default)
|
|
342
|
+
|
|
343
|
+
**Example Input (tool):**
|
|
344
|
+
```typescript
|
|
345
|
+
@Tool({
|
|
346
|
+
name: 'get_product',
|
|
347
|
+
inputSchema: z.object({
|
|
348
|
+
product_id: z.string()
|
|
349
|
+
})
|
|
350
|
+
})
|
|
351
|
+
async getProduct(input: any) {
|
|
352
|
+
return { id: input.product_id, name: 'Product', price: 99 };
|
|
353
|
+
}
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
**Example Output (generated types):**
|
|
357
|
+
```typescript
|
|
358
|
+
// Auto-generated by NitroStack CLI
|
|
359
|
+
export interface GetProductInput {
|
|
360
|
+
product_id: string;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
export interface GetProductOutput {
|
|
364
|
+
id: string;
|
|
365
|
+
name: string;
|
|
366
|
+
price: number;
|
|
367
|
+
}
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
**Usage in Widgets:**
|
|
371
|
+
```typescript
|
|
372
|
+
import { GetProductOutput } from '../../types/tool-data';
|
|
373
|
+
|
|
374
|
+
export default function ProductCard({ data }: { data: GetProductOutput }) {
|
|
375
|
+
return <div>{data.name} - ${data.price}</div>;
|
|
376
|
+
}
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
**When to Run:**
|
|
380
|
+
- After adding new tools
|
|
381
|
+
- After modifying tool schemas
|
|
382
|
+
- Before building widgets
|
|
383
|
+
- As part of CI/CD pipeline
|
|
384
|
+
|
|
385
|
+
---
|
|
386
|
+
|
|
387
|
+
## Configuration
|
|
388
|
+
|
|
389
|
+
### Project Configuration (`nitrostack.config.ts`)
|
|
390
|
+
|
|
391
|
+
```typescript
|
|
392
|
+
export default {
|
|
393
|
+
server: {
|
|
394
|
+
name: 'my-server',
|
|
395
|
+
version: '1.0.0',
|
|
396
|
+
description: 'My MCP server'
|
|
397
|
+
},
|
|
398
|
+
studio: {
|
|
399
|
+
port: 3000,
|
|
400
|
+
enabled: true
|
|
401
|
+
},
|
|
402
|
+
widgets: {
|
|
403
|
+
port: 3001,
|
|
404
|
+
devServer: true
|
|
405
|
+
},
|
|
406
|
+
logging: {
|
|
407
|
+
level: 'info', // debug | info | warn | error
|
|
408
|
+
file: 'logs/server.log'
|
|
409
|
+
}
|
|
410
|
+
};
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
### Environment Variables (`.env`)
|
|
414
|
+
|
|
415
|
+
```env
|
|
416
|
+
# Node Environment
|
|
417
|
+
NODE_ENV=development
|
|
418
|
+
|
|
419
|
+
# JWT (if using typescript-auth template)
|
|
420
|
+
JWT_SECRET=your-super-secret-jwt-key-change-this-in-production
|
|
421
|
+
|
|
422
|
+
# OAuth 2.1 (if using typescript-auth template)
|
|
423
|
+
OAUTH_CLIENT_ID=your-client-id
|
|
424
|
+
OAUTH_CLIENT_SECRET=your-client-secret
|
|
425
|
+
OAUTH_REDIRECT_URI=http://localhost:3000/callback
|
|
426
|
+
|
|
427
|
+
# Database (if using typescript-auth template)
|
|
428
|
+
DATABASE_PATH=./data/ecommerce.db
|
|
429
|
+
|
|
430
|
+
# Server
|
|
431
|
+
PORT=3000
|
|
432
|
+
|
|
433
|
+
# Gemini API (for Studio chat)
|
|
434
|
+
GEMINI_API_KEY=your-gemini-key
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
---
|
|
438
|
+
|
|
439
|
+
## Common Workflows
|
|
440
|
+
|
|
441
|
+
### 1. Create New Project (Starter Template)
|
|
442
|
+
|
|
443
|
+
```bash
|
|
444
|
+
# Install CLI
|
|
445
|
+
npm install -g nitrostack
|
|
446
|
+
|
|
447
|
+
# Initialize project
|
|
448
|
+
nitrostack init my-calculator --template typescript-starter
|
|
449
|
+
cd my-calculator
|
|
450
|
+
|
|
451
|
+
# Start development
|
|
452
|
+
npm run dev
|
|
453
|
+
|
|
454
|
+
# Open Studio
|
|
455
|
+
# http://localhost:3000
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
### 2. Create New Project (Auth Template)
|
|
459
|
+
|
|
460
|
+
```bash
|
|
461
|
+
# Install CLI
|
|
462
|
+
npm install -g nitrostack
|
|
463
|
+
|
|
464
|
+
# Initialize project
|
|
465
|
+
nitrostack init my-shop --template typescript-auth
|
|
466
|
+
cd my-shop
|
|
467
|
+
|
|
468
|
+
# Setup database
|
|
469
|
+
npm run setup-db
|
|
470
|
+
|
|
471
|
+
# Start development
|
|
472
|
+
npm run dev
|
|
473
|
+
|
|
474
|
+
# Open Studio and login
|
|
475
|
+
# http://localhost:3000
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
### 3. Add New Feature Module
|
|
479
|
+
|
|
480
|
+
```bash
|
|
481
|
+
# Generate module
|
|
482
|
+
nitrostack generate module payments
|
|
483
|
+
|
|
484
|
+
# Add to app.module.ts imports
|
|
485
|
+
# imports: [ConfigModule.forRoot(), PaymentsModule]
|
|
486
|
+
|
|
487
|
+
# Generate tools
|
|
488
|
+
nitrostack generate tool create-payment --module payments
|
|
489
|
+
nitrostack generate tool get-payment --module payments
|
|
490
|
+
|
|
491
|
+
# Generate types for widgets
|
|
492
|
+
nitrostack generate types
|
|
493
|
+
|
|
494
|
+
# Create widget
|
|
495
|
+
mkdir -p src/widgets/app/payment-success
|
|
496
|
+
# Create page.tsx in that directory
|
|
497
|
+
|
|
498
|
+
# Test in Studio
|
|
499
|
+
npm run dev
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
### 4. Development Cycle
|
|
503
|
+
|
|
504
|
+
```bash
|
|
505
|
+
# Start dev server (runs concurrently)
|
|
506
|
+
npm run dev
|
|
507
|
+
|
|
508
|
+
# Edit code (auto-reloads)
|
|
509
|
+
# - Edit src/modules/**/*.ts
|
|
510
|
+
# - Edit src/widgets/app/**/*
|
|
511
|
+
|
|
512
|
+
# Test in Studio
|
|
513
|
+
# - Execute tools manually
|
|
514
|
+
# - Test with AI chat
|
|
515
|
+
# - Preview widgets
|
|
516
|
+
|
|
517
|
+
# Generate types for widgets
|
|
518
|
+
nitrostack generate types
|
|
519
|
+
|
|
520
|
+
# Build for production
|
|
521
|
+
npm run build
|
|
522
|
+
|
|
523
|
+
# Test production build
|
|
524
|
+
node dist/index.js
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
### 5. Deploy to Production
|
|
528
|
+
|
|
529
|
+
```bash
|
|
530
|
+
# Build project
|
|
531
|
+
nitrostack build
|
|
532
|
+
|
|
533
|
+
# Copy to server
|
|
534
|
+
scp -r dist/ user@server:/app/
|
|
535
|
+
scp -r src/widgets/.next/ user@server:/app/widgets/
|
|
536
|
+
scp package.json user@server:/app/
|
|
537
|
+
scp .env.production user@server:/app/.env
|
|
538
|
+
|
|
539
|
+
# On server
|
|
540
|
+
cd /app
|
|
541
|
+
npm install --production
|
|
542
|
+
node dist/index.js
|
|
543
|
+
```
|
|
544
|
+
|
|
545
|
+
---
|
|
546
|
+
|
|
547
|
+
## Troubleshooting
|
|
548
|
+
|
|
549
|
+
### CLI Not Found
|
|
550
|
+
|
|
551
|
+
```bash
|
|
552
|
+
# Install globally
|
|
553
|
+
npm install -g nitrostack
|
|
554
|
+
|
|
555
|
+
# Or use npx
|
|
556
|
+
npx nitrostack init my-project
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
### Port Already in Use
|
|
560
|
+
|
|
561
|
+
```bash
|
|
562
|
+
# Use custom port
|
|
563
|
+
nitrostack dev --port 3002
|
|
564
|
+
|
|
565
|
+
# Or kill process on port
|
|
566
|
+
lsof -ti:3000 | xargs kill -9
|
|
567
|
+
lsof -ti:3001 | xargs kill -9
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
### Build Errors
|
|
571
|
+
|
|
572
|
+
```bash
|
|
573
|
+
# Clean and rebuild
|
|
574
|
+
rm -rf dist
|
|
575
|
+
rm -rf src/widgets/.next
|
|
576
|
+
npm run build
|
|
577
|
+
|
|
578
|
+
# Check TypeScript errors
|
|
579
|
+
npx tsc --noEmit
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
### Module Not Found: nitrostack
|
|
583
|
+
|
|
584
|
+
```bash
|
|
585
|
+
# Reinstall dependencies
|
|
586
|
+
rm -rf node_modules package-lock.json
|
|
587
|
+
npm install
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
### Widgets Not Loading
|
|
591
|
+
|
|
592
|
+
```bash
|
|
593
|
+
# Rebuild widgets
|
|
594
|
+
cd src/widgets
|
|
595
|
+
npm install
|
|
596
|
+
npm run build
|
|
597
|
+
cd ../..
|
|
598
|
+
|
|
599
|
+
# Check widget dev server
|
|
600
|
+
curl http://localhost:3001
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
### Database Errors (typescript-auth)
|
|
604
|
+
|
|
605
|
+
```bash
|
|
606
|
+
# Reset database
|
|
607
|
+
npm run reset-db
|
|
608
|
+
|
|
609
|
+
# Check database exists
|
|
610
|
+
ls -la data/ecommerce.db
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
### Studio Not Connecting
|
|
614
|
+
|
|
615
|
+
```bash
|
|
616
|
+
# Check MCP server is running
|
|
617
|
+
ps aux | grep node
|
|
618
|
+
|
|
619
|
+
# Check logs
|
|
620
|
+
tail -f logs/server.log
|
|
621
|
+
|
|
622
|
+
# Restart
|
|
623
|
+
npm run dev
|
|
624
|
+
```
|
|
625
|
+
|
|
626
|
+
---
|
|
627
|
+
|
|
628
|
+
## Quick Reference Card
|
|
629
|
+
|
|
630
|
+
### Commands
|
|
631
|
+
|
|
632
|
+
| Command | Description |
|
|
633
|
+
|---------|-------------|
|
|
634
|
+
| `nitrostack init <name>` | Create new project |
|
|
635
|
+
| `nitrostack init <name> --template <type>` | Create with specific template |
|
|
636
|
+
| `nitrostack dev` | Start dev mode (server + Studio + widgets) |
|
|
637
|
+
| `nitrostack dev --port <n>` | Start with custom Studio port |
|
|
638
|
+
| `nitrostack build` | Build for production |
|
|
639
|
+
| `nitrostack generate module <name>` | Generate module |
|
|
640
|
+
| `nitrostack generate tool <name> --module <m>` | Generate tool |
|
|
641
|
+
| `nitrostack generate resource <name> --module <m>` | Generate resource |
|
|
642
|
+
| `nitrostack generate prompt <name> --module <m>` | Generate prompt |
|
|
643
|
+
| `nitrostack generate guard <name>` | Generate guard |
|
|
644
|
+
| `nitrostack generate middleware <name>` | Generate middleware |
|
|
645
|
+
| `nitrostack generate interceptor <name>` | Generate interceptor |
|
|
646
|
+
| `nitrostack generate pipe <name>` | Generate pipe |
|
|
647
|
+
| `nitrostack generate types` | Generate TypeScript types |
|
|
648
|
+
| `nitrostack --version` | Show version |
|
|
649
|
+
| `nitrostack --help` | Show help |
|
|
650
|
+
|
|
651
|
+
### Project Scripts
|
|
652
|
+
|
|
653
|
+
| Script | Description |
|
|
654
|
+
|--------|-------------|
|
|
655
|
+
| `npm run dev` | Start development (MCP server + Studio + widgets, auto-build) |
|
|
656
|
+
| `npm run build` | Build MCP server + widgets for production |
|
|
657
|
+
| `npm start` | Run production server |
|
|
658
|
+
| `npm run widget <cmd>` | Run npm command in widgets directory |
|
|
659
|
+
|
|
660
|
+
**Note:** This template doesn't use a database. For the auth template, see its README for database commands.
|
|
661
|
+
|
|
662
|
+
### Studio URLs
|
|
663
|
+
|
|
664
|
+
| URL | Purpose |
|
|
665
|
+
|-----|---------|
|
|
666
|
+
| `http://localhost:3000` | Studio UI |
|
|
667
|
+
| `http://localhost:3000/chat` | AI Chat |
|
|
668
|
+
| `http://localhost:3001` | Widget dev server |
|
|
669
|
+
|
|
670
|
+
---
|
|
671
|
+
|
|
672
|
+
## Key Concepts for AI Agents
|
|
673
|
+
|
|
674
|
+
### 1. Templates
|
|
675
|
+
- **typescript-starter**: Learn basics, no auth, no DB
|
|
676
|
+
- **typescript-auth**: Full-featured, production-ready
|
|
677
|
+
|
|
678
|
+
### 2. Development Flow
|
|
679
|
+
- `init` → `setup-db` (if auth) → `dev` → test in Studio → `build`
|
|
680
|
+
|
|
681
|
+
### 3. Code Generation
|
|
682
|
+
- Generate module first
|
|
683
|
+
- Then generate tools/resources/prompts
|
|
684
|
+
- Always run `generate types` after schema changes
|
|
685
|
+
|
|
686
|
+
### 4. Studio is Your Friend
|
|
687
|
+
- Test tools before writing widgets
|
|
688
|
+
- Use chat to verify AI integration
|
|
689
|
+
- Check health, resources, prompts
|
|
690
|
+
|
|
691
|
+
### 5. Widget Development
|
|
692
|
+
- Widgets live in `src/widgets/app/`
|
|
693
|
+
- Link with `@Widget('widget-name')`
|
|
694
|
+
- Generate types for type safety
|
|
695
|
+
- Hot reload enabled
|
|
696
|
+
|
|
697
|
+
---
|
|
698
|
+
|
|
699
|
+
**That's the complete NitroStack CLI reference!**
|
|
700
|
+
|
|
701
|
+
Use `nitrostack --help` for more details or check `/docs` for SDK documentation.
|