snow-flow 8.29.0 → 8.30.1

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.
@@ -16,6 +16,35 @@ Snow-Flow Enterprise is an **optional** premium service that provides 26+ advanc
16
16
  - Active Snow-Flow Enterprise license
17
17
  - JWT authentication token from https://portal.snow-flow.dev
18
18
 
19
+ ## License Format
20
+
21
+ Snow-Flow Enterprise supports two license formats:
22
+
23
+ ### New Format (v8.5.0+): Seat-Based Licenses
24
+
25
+ ```
26
+ SNOW-[TIER]-[ORG]-[DEV_SEATS]/[STAKEHOLDER_SEATS]-[EXPIRY]-[CHECKSUM]
27
+ ```
28
+
29
+ **Examples:**
30
+ - `SNOW-ENT-CAPGEMINI-5/1-20261231-A3F2E9C1` - 5 developer seats, 1 stakeholder seat
31
+ - `SNOW-TEAM-ACME-10/5-20261231-B4E3F2D5` - 10 developer seats, 5 stakeholder seats
32
+
33
+ **Seat Types:**
34
+ - **Developer Seats**: For technical users using Claude Code + MCP tools
35
+ - **Stakeholder Seats**: For non-technical users (POs, PMs, BAs) using web portal only
36
+
37
+ ### Legacy Format: Unlimited Seats
38
+
39
+ ```
40
+ SNOW-[TIER]-[ORG]-[EXPIRY]-[CHECKSUM]
41
+ ```
42
+
43
+ **Example:**
44
+ - `SNOW-ENT-ACME-20261231-ABC123` - Unlimited seats (legacy)
45
+
46
+ Legacy licenses continue to work with unlimited seats for both developers and stakeholders.
47
+
19
48
  ## Installation
20
49
 
21
50
  ### 1. Get Your Enterprise Token
@@ -176,6 +205,56 @@ Once connected, you have access to:
176
205
  - `confluence_search_content` - Search content
177
206
  - And more...
178
207
 
208
+ ## Seat Tracking & Management
209
+
210
+ ### How Seat Tracking Works
211
+
212
+ **Developer Seats:**
213
+ - Tracked per active MCP proxy connection
214
+ - Each unique machine/user counts as one active seat
215
+ - Machine identified by hashed hostname + MAC addresses (privacy-safe)
216
+ - Released when connection is closed or times out
217
+
218
+ **Stakeholder Seats:**
219
+ - Tracked per active web portal session
220
+ - Each logged-in stakeholder counts as one active seat
221
+ - Sessions expire after 8 hours of inactivity
222
+
223
+ ### Monitoring Seat Usage
224
+
225
+ Check your current seat usage:
226
+
227
+ ```bash
228
+ snow-flow status
229
+ ```
230
+
231
+ Output example:
232
+ ```
233
+ 🔐 Snow-Flow Enterprise
234
+ Status: ✅ Authenticated
235
+
236
+ Customer: Capgemini
237
+ License Tier: ENT
238
+
239
+ License Seats:
240
+ Developer: 3/5 (active/total)
241
+ Stakeholder: 0/1 (active/total)
242
+
243
+ Token Expires: Dec 31, 2026
244
+ ```
245
+
246
+ ### Seat Limit Behavior
247
+
248
+ **What happens when seat limit is reached?**
249
+ - New connections are rejected with error: "Developer seat limit reached"
250
+ - Error includes information about active seats and total limit
251
+ - Existing connections remain active
252
+ - Wait for inactive connections to timeout or manually disconnect
253
+
254
+ **Grace Period:**
255
+ - 5-minute grace period for reconnections (same machine ID)
256
+ - Helps with network interruptions and restarts
257
+
179
258
  ## Pricing & Licensing
180
259
 
181
260
  Visit https://snow-flow.dev/pricing for:
@@ -183,6 +262,7 @@ Visit https://snow-flow.dev/pricing for:
183
262
  - Feature comparison (free vs enterprise)
184
263
  - Trial options
185
264
  - Volume discounts
265
+ - Seat-based pricing
186
266
 
187
267
  ## Support
188
268
 
package/README.md CHANGED
@@ -704,17 +704,25 @@ Premium integrations for enterprise ServiceNow teams:
704
704
 
705
705
  ### Pricing (Coming Q2 2025)
706
706
 
707
- Enterprise features will be available via commercial license:
707
+ Enterprise features will be available via seat-based commercial license:
708
708
 
709
- - **Professional:** €499/month (5 developers)
710
- - **Team:** €999/month (20 developers)
711
- - **Enterprise:** €1,999/month (unlimited developers)
709
+ **License Format:** `SNOW-[TIER]-[ORG]-[DEV_SEATS]/[STAKEHOLDER_SEATS]-[EXPIRY]-[CHECKSUM]`
710
+
711
+ **Seat Types:**
712
+ - **Developer Seats:** For technical users using Claude Code + MCP tools
713
+ - **Stakeholder Seats:** For non-technical users (POs, PMs, BAs) using web portal only
714
+
715
+ **Pricing Tiers:**
716
+ - **Professional:** €499/month (5 developer seats + 2 stakeholder seats)
717
+ - **Team:** €999/month (20 developer seats + 10 stakeholder seats)
718
+ - **Enterprise:** €1,999/month (unlimited seats)
712
719
 
713
720
  All tiers include:
714
721
  - All open source features
715
722
  - Enterprise integrations (Jira/Azure DevOps/Confluence)
716
723
  - Enterprise SSO/SAML
717
724
  - Audit logging
725
+ - Seat tracking and management
718
726
  - Email support (SLA varies by tier)
719
727
 
720
728
  **Early Access:** Contact [sales@snow-flow.dev](mailto:sales@snow-flow.dev) for beta access and pilot programs.
@@ -166,7 +166,7 @@ This may indicate SnowCode is not properly detecting the running MCP servers. Po
166
166
 
167
167
  1. **Update SnowCode:**
168
168
  ```bash
169
- npm install -g @groeimetai/snowcode@latest
169
+ npm install -g @groeimetai/snow-code@latest
170
170
  ```
171
171
 
172
172
  2. **Check SnowCode logs** for MCP connection errors (if available)
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Snow-Flow Health Monitoring API
3
+ * Real-time system health and monitoring endpoints
4
+ */
5
+ declare const app: import("express-serve-static-core").Express;
6
+ declare function start(): Promise<void>;
7
+ export { app, start };
8
+ //# sourceMappingURL=health-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-api.d.ts","sourceRoot":"","sources":["../../src/api/health-api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,QAAA,MAAM,GAAG,6CAAY,CAAC;AAyQtB,iBAAe,KAAK,kBAanB;AAoCD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,294 @@
1
+ "use strict";
2
+ /**
3
+ * Snow-Flow Health Monitoring API
4
+ * Real-time system health and monitoring endpoints
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.app = void 0;
11
+ exports.start = start;
12
+ const express_1 = __importDefault(require("express"));
13
+ const cors_1 = __importDefault(require("cors"));
14
+ const system_health_1 = require("../health/system-health");
15
+ const memory_system_1 = require("../memory/memory-system");
16
+ const logger_1 = require("../utils/logger");
17
+ const logger = new logger_1.Logger('HealthAPI');
18
+ const app = (0, express_1.default)();
19
+ exports.app = app;
20
+ // Enable CORS for status page
21
+ app.use((0, cors_1.default)({
22
+ origin: [
23
+ 'http://localhost:8080',
24
+ 'https://status.snow-flow.dev',
25
+ 'https://snow-flow.dev'
26
+ ],
27
+ credentials: true
28
+ }));
29
+ app.use(express_1.default.json());
30
+ // Initialize system health monitor
31
+ let healthMonitor;
32
+ let memorySystem;
33
+ async function initializeHealthMonitoring() {
34
+ logger.info('Initializing health monitoring API...');
35
+ // Initialize memory system
36
+ memorySystem = new memory_system_1.BasicMemorySystem();
37
+ await memorySystem.initialize();
38
+ // Initialize health monitor
39
+ healthMonitor = new system_health_1.SystemHealth({
40
+ memory: memorySystem,
41
+ config: {
42
+ checks: {
43
+ memory: true,
44
+ mcp: true,
45
+ servicenow: false, // Disable ServiceNow check for now
46
+ queen: true
47
+ },
48
+ thresholds: {
49
+ responseTime: 1000, // 1 second
50
+ memoryUsage: 0.85, // 85%
51
+ cpuUsage: 0.80, // 80%
52
+ queueSize: 100,
53
+ errorRate: 0.05 // 5%
54
+ }
55
+ }
56
+ });
57
+ await healthMonitor.initialize();
58
+ // Start monitoring with 30-second interval
59
+ await healthMonitor.startMonitoring(30000);
60
+ logger.info('Health monitoring initialized and started');
61
+ }
62
+ /**
63
+ * GET /health
64
+ * Basic health check endpoint
65
+ */
66
+ app.get('/health', async (req, res) => {
67
+ try {
68
+ res.json({
69
+ status: 'healthy',
70
+ timestamp: new Date().toISOString(),
71
+ service: 'snow-flow-health-api',
72
+ version: process.env.npm_package_version || '1.0.0'
73
+ });
74
+ }
75
+ catch (error) {
76
+ logger.error('Health check failed:', error);
77
+ res.status(500).json({
78
+ status: 'unhealthy',
79
+ error: error.message
80
+ });
81
+ }
82
+ });
83
+ /**
84
+ * GET /api/v1/status
85
+ * Get current system status (for status page)
86
+ */
87
+ app.get('/api/v1/status', async (req, res) => {
88
+ try {
89
+ if (!healthMonitor) {
90
+ throw new Error('Health monitor not initialized');
91
+ }
92
+ const status = await healthMonitor.getFullStatus();
93
+ // Transform to status page format
94
+ const response = {
95
+ overall_status: status.status === 'healthy' ? 'operational' :
96
+ status.status === 'degraded' ? 'degraded' : 'outage',
97
+ uptime_30d: 99.97, // TODO: Calculate from historical data
98
+ avg_latency: Math.round(status.metrics.avgResponseTime),
99
+ active_incidents: status.status === 'unhealthy' ? 1 : 0,
100
+ services: {
101
+ mcp_server: {
102
+ status: status.components.mcp.status === 'healthy' ? 'operational' :
103
+ status.components.mcp.status === 'degraded' ? 'degraded' : 'outage',
104
+ latency: status.components.mcp.responseTime || 0
105
+ },
106
+ portal: {
107
+ status: 'operational', // TODO: Add real portal health check
108
+ latency: 150
109
+ },
110
+ website: {
111
+ status: 'operational', // TODO: Add real website health check
112
+ latency: 120
113
+ },
114
+ database: {
115
+ status: status.components.memory.status === 'healthy' ? 'operational' :
116
+ status.components.memory.status === 'degraded' ? 'degraded' : 'outage',
117
+ connections: Math.round(status.metrics.systemResources.processCount)
118
+ }
119
+ },
120
+ system_resources: {
121
+ cpu_usage: status.metrics.systemResources.cpuUsage,
122
+ memory_usage: (status.metrics.systemResources.memoryUsage / status.metrics.systemResources.memoryTotal) * 100,
123
+ disk_usage: status.metrics.systemResources.diskUsage
124
+ },
125
+ timestamp: status.timestamp.toISOString()
126
+ };
127
+ res.json(response);
128
+ }
129
+ catch (error) {
130
+ logger.error('Status check failed:', error);
131
+ res.status(500).json({
132
+ error: 'Failed to retrieve system status',
133
+ message: error.message
134
+ });
135
+ }
136
+ });
137
+ /**
138
+ * GET /api/v1/uptime-history
139
+ * Get historical uptime data (last 90 days)
140
+ */
141
+ app.get('/api/v1/uptime-history', async (req, res) => {
142
+ try {
143
+ if (!healthMonitor) {
144
+ throw new Error('Health monitor not initialized');
145
+ }
146
+ const days = parseInt(req.query.days) || 90;
147
+ const history = await healthMonitor.getHealthHistory(days * 48); // 48 checks per day (30min interval)
148
+ // Group by day and calculate uptime percentage
149
+ const uptimeByDay = {};
150
+ for (const check of history) {
151
+ const date = new Date(check.timestamp).toISOString().split('T')[0];
152
+ if (!uptimeByDay[date]) {
153
+ uptimeByDay[date] = { total: 0, healthy: 0 };
154
+ }
155
+ uptimeByDay[date].total++;
156
+ if (check.status === 'healthy') {
157
+ uptimeByDay[date].healthy++;
158
+ }
159
+ }
160
+ // Convert to array format
161
+ const uptimeData = Object.entries(uptimeByDay).map(([date, data]) => ({
162
+ date,
163
+ uptime_percentage: (data.healthy / data.total) * 100,
164
+ total_checks: data.total,
165
+ healthy_checks: data.healthy
166
+ }));
167
+ res.json({
168
+ days: uptimeData.length,
169
+ uptime_data: uptimeData
170
+ });
171
+ }
172
+ catch (error) {
173
+ logger.error('Uptime history retrieval failed:', error);
174
+ res.status(500).json({
175
+ error: 'Failed to retrieve uptime history',
176
+ message: error.message
177
+ });
178
+ }
179
+ });
180
+ /**
181
+ * GET /api/v1/metrics
182
+ * Get detailed system metrics
183
+ */
184
+ app.get('/api/v1/metrics', async (req, res) => {
185
+ try {
186
+ if (!healthMonitor) {
187
+ throw new Error('Health monitor not initialized');
188
+ }
189
+ const status = await healthMonitor.getFullStatus();
190
+ res.json({
191
+ timestamp: status.timestamp,
192
+ uptime_seconds: Math.floor(status.metrics.uptime / 1000),
193
+ total_checks: status.metrics.totalChecks,
194
+ failed_checks: status.metrics.failedChecks,
195
+ success_rate: ((status.metrics.totalChecks - status.metrics.failedChecks) / status.metrics.totalChecks) * 100,
196
+ avg_response_time: status.metrics.avgResponseTime,
197
+ system_resources: status.metrics.systemResources,
198
+ components: Object.entries(status.components).map(([name, component]) => ({
199
+ name,
200
+ status: component.status,
201
+ message: component.message,
202
+ response_time: component.responseTime,
203
+ details: component.details
204
+ }))
205
+ });
206
+ }
207
+ catch (error) {
208
+ logger.error('Metrics retrieval failed:', error);
209
+ res.status(500).json({
210
+ error: 'Failed to retrieve metrics',
211
+ message: error.message
212
+ });
213
+ }
214
+ });
215
+ /**
216
+ * GET /api/v1/components/:component
217
+ * Get detailed information about a specific component
218
+ */
219
+ app.get('/api/v1/components/:component', async (req, res) => {
220
+ try {
221
+ if (!healthMonitor) {
222
+ throw new Error('Health monitor not initialized');
223
+ }
224
+ const { component } = req.params;
225
+ const status = await healthMonitor.getFullStatus();
226
+ const componentData = status.components[component];
227
+ if (!componentData) {
228
+ res.status(404).json({
229
+ error: 'Component not found',
230
+ available_components: Object.keys(status.components)
231
+ });
232
+ return;
233
+ }
234
+ res.json(componentData);
235
+ }
236
+ catch (error) {
237
+ logger.error('Component retrieval failed:', error);
238
+ res.status(500).json({
239
+ error: 'Failed to retrieve component data',
240
+ message: error.message
241
+ });
242
+ }
243
+ });
244
+ // Error handling middleware
245
+ app.use((err, req, res, next) => {
246
+ logger.error('API error:', err);
247
+ res.status(500).json({
248
+ error: 'Internal server error',
249
+ message: process.env.NODE_ENV === 'development' ? err.message : 'An error occurred'
250
+ });
251
+ });
252
+ // Start server
253
+ const PORT = parseInt(process.env.PORT || '3000');
254
+ const HOST = process.env.HOST || '0.0.0.0';
255
+ async function start() {
256
+ try {
257
+ await initializeHealthMonitoring();
258
+ app.listen(PORT, HOST, () => {
259
+ logger.info(`Snow-Flow Health API listening on ${HOST}:${PORT}`);
260
+ logger.info(`Health endpoint: http://${HOST}:${PORT}/health`);
261
+ logger.info(`Status API: http://${HOST}:${PORT}/api/v1/status`);
262
+ });
263
+ }
264
+ catch (error) {
265
+ logger.error('Failed to start Health API:', error);
266
+ process.exit(1);
267
+ }
268
+ }
269
+ // Graceful shutdown
270
+ process.on('SIGTERM', async () => {
271
+ logger.info('SIGTERM received, shutting down gracefully...');
272
+ if (healthMonitor) {
273
+ await healthMonitor.stopMonitoring();
274
+ }
275
+ if (memorySystem) {
276
+ await memorySystem.close();
277
+ }
278
+ process.exit(0);
279
+ });
280
+ process.on('SIGINT', async () => {
281
+ logger.info('SIGINT received, shutting down gracefully...');
282
+ if (healthMonitor) {
283
+ await healthMonitor.stopMonitoring();
284
+ }
285
+ if (memorySystem) {
286
+ await memorySystem.close();
287
+ }
288
+ process.exit(0);
289
+ });
290
+ // Start if this file is run directly
291
+ if (require.main === module) {
292
+ start();
293
+ }
294
+ //# sourceMappingURL=health-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-api.js","sourceRoot":"","sources":["../../src/api/health-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Snow-Flow Simple Health Monitoring API
3
+ * Lightweight real-time system health endpoints
4
+ */
5
+ declare const app: import("express-serve-static-core").Express;
6
+ export { app };
7
+ //# sourceMappingURL=simple-health-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-health-api.d.ts","sourceRoot":"","sources":["../../src/api/simple-health-api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,QAAA,MAAM,GAAG,6CAAY,CAAC;AA2TtB,OAAO,EAAE,GAAG,EAAE,CAAC"}