@west10tech/constructionwire-mcp 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.
Files changed (42) hide show
  1. package/README.md +177 -0
  2. package/dist/clients/constructionwire-client.d.ts +110 -0
  3. package/dist/clients/constructionwire-client.d.ts.map +1 -0
  4. package/dist/clients/constructionwire-client.js +16746 -0
  5. package/dist/clients/constructionwire-client.js.map +1 -0
  6. package/dist/config.d.ts +23 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +63 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/index.d.ts +3 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +165 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/services/log-batcher.d.ts +44 -0
  15. package/dist/services/log-batcher.d.ts.map +1 -0
  16. package/dist/services/log-batcher.js +81 -0
  17. package/dist/services/log-batcher.js.map +1 -0
  18. package/dist/services/log-shipper.d.ts +104 -0
  19. package/dist/services/log-shipper.d.ts.map +1 -0
  20. package/dist/services/log-shipper.js +384 -0
  21. package/dist/services/log-shipper.js.map +1 -0
  22. package/dist/services/logger.d.ts +92 -0
  23. package/dist/services/logger.d.ts.map +1 -0
  24. package/dist/services/logger.js +224 -0
  25. package/dist/services/logger.js.map +1 -0
  26. package/dist/services/progress-reporter.d.ts +64 -0
  27. package/dist/services/progress-reporter.d.ts.map +1 -0
  28. package/dist/services/progress-reporter.js +192 -0
  29. package/dist/services/progress-reporter.js.map +1 -0
  30. package/dist/services/request-tracker.d.ts +55 -0
  31. package/dist/services/request-tracker.d.ts.map +1 -0
  32. package/dist/services/request-tracker.js +184 -0
  33. package/dist/services/request-tracker.js.map +1 -0
  34. package/dist/tools/constructionwire-tools.d.ts +23 -0
  35. package/dist/tools/constructionwire-tools.d.ts.map +1 -0
  36. package/dist/tools/constructionwire-tools.js +8973 -0
  37. package/dist/tools/constructionwire-tools.js.map +1 -0
  38. package/dist/types.d.ts +25 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +2 -0
  41. package/dist/types.js.map +1 -0
  42. package/package.json +57 -0
@@ -0,0 +1,184 @@
1
+ export class RequestTracker {
2
+ constructor(logger) {
3
+ this.activeRequests = new Map();
4
+ this.progressTokens = new Map();
5
+ this.logger = logger;
6
+ }
7
+ /**
8
+ * Register a new request for tracking
9
+ */
10
+ registerRequest(requestId, progressToken, toolName) {
11
+ // Check if request already exists
12
+ if (this.activeRequests.has(requestId)) {
13
+ this.logger.warn('REQUEST_DUPLICATE', 'Request ID already registered', {
14
+ requestId,
15
+ existing: true
16
+ });
17
+ return this.activeRequests.get(requestId);
18
+ }
19
+ const context = {
20
+ requestId,
21
+ abortController: new AbortController(),
22
+ progressToken,
23
+ startTime: Date.now(),
24
+ toolName
25
+ };
26
+ this.activeRequests.set(requestId, context);
27
+ // Map progress token to request ID if provided
28
+ if (progressToken !== undefined) {
29
+ this.progressTokens.set(progressToken, requestId);
30
+ }
31
+ this.logger.info('REQUEST_REGISTERED', 'New request registered for tracking', {
32
+ requestId,
33
+ hasProgressToken: !!progressToken,
34
+ toolName,
35
+ activeRequestCount: this.activeRequests.size
36
+ });
37
+ return context;
38
+ }
39
+ /**
40
+ * Get request context by ID
41
+ */
42
+ getRequest(requestId) {
43
+ return this.activeRequests.get(requestId);
44
+ }
45
+ /**
46
+ * Get request context by progress token
47
+ */
48
+ getRequestByProgressToken(progressToken) {
49
+ const requestId = this.progressTokens.get(progressToken);
50
+ if (!requestId) {
51
+ return undefined;
52
+ }
53
+ return this.activeRequests.get(requestId);
54
+ }
55
+ /**
56
+ * Cancel a request
57
+ */
58
+ cancelRequest(requestId, reason) {
59
+ const context = this.activeRequests.get(requestId);
60
+ if (!context) {
61
+ this.logger.debug('CANCEL_REQUEST_NOT_FOUND', 'Request not found for cancellation', {
62
+ requestId,
63
+ reason,
64
+ activeRequestCount: this.activeRequests.size
65
+ });
66
+ return false;
67
+ }
68
+ // Check if already aborted
69
+ if (context.abortController.signal.aborted) {
70
+ this.logger.debug('CANCEL_REQUEST_ALREADY_ABORTED', 'Request already cancelled', {
71
+ requestId,
72
+ reason
73
+ });
74
+ return false;
75
+ }
76
+ // Abort the request
77
+ context.abortController.abort(reason);
78
+ const duration = Date.now() - context.startTime;
79
+ this.logger.info('REQUEST_CANCELLED', 'Request cancelled successfully', {
80
+ requestId,
81
+ reason,
82
+ duration_ms: duration,
83
+ toolName: context.toolName,
84
+ hadProgressToken: !!context.progressToken
85
+ });
86
+ // Clean up immediately after cancellation
87
+ this.cleanup(requestId);
88
+ return true;
89
+ }
90
+ /**
91
+ * Clean up a completed or cancelled request
92
+ */
93
+ cleanup(requestId) {
94
+ const context = this.activeRequests.get(requestId);
95
+ if (!context) {
96
+ return;
97
+ }
98
+ // Remove progress token mapping if exists
99
+ if (context.progressToken !== undefined) {
100
+ this.progressTokens.delete(context.progressToken);
101
+ }
102
+ // Remove from active requests
103
+ this.activeRequests.delete(requestId);
104
+ const duration = Date.now() - context.startTime;
105
+ this.logger.debug('REQUEST_CLEANUP', 'Request cleaned up', {
106
+ requestId,
107
+ duration_ms: duration,
108
+ toolName: context.toolName,
109
+ remainingRequests: this.activeRequests.size
110
+ });
111
+ }
112
+ /**
113
+ * Check if a request is still active
114
+ */
115
+ isActive(requestId) {
116
+ const context = this.activeRequests.get(requestId);
117
+ return !!context && !context.abortController.signal.aborted;
118
+ }
119
+ /**
120
+ * Check if a progress token is valid and active
121
+ */
122
+ isProgressTokenActive(progressToken) {
123
+ const requestId = this.progressTokens.get(progressToken);
124
+ if (!requestId) {
125
+ return false;
126
+ }
127
+ return this.isActive(requestId);
128
+ }
129
+ /**
130
+ * Get all active request IDs
131
+ */
132
+ getActiveRequestIds() {
133
+ return Array.from(this.activeRequests.keys());
134
+ }
135
+ /**
136
+ * Clean up old requests (called periodically)
137
+ */
138
+ cleanupStaleRequests(maxAgeMs = 300000) {
139
+ const now = Date.now();
140
+ let cleanedCount = 0;
141
+ for (const [requestId, context] of this.activeRequests.entries()) {
142
+ const age = now - context.startTime;
143
+ if (age > maxAgeMs) {
144
+ this.logger.warn('REQUEST_STALE', 'Cleaning up stale request', {
145
+ requestId,
146
+ age_ms: age,
147
+ maxAge_ms: maxAgeMs,
148
+ toolName: context.toolName
149
+ });
150
+ // Cancel if still active
151
+ if (!context.abortController.signal.aborted) {
152
+ context.abortController.abort('Request timed out');
153
+ }
154
+ this.cleanup(requestId);
155
+ cleanedCount++;
156
+ }
157
+ }
158
+ if (cleanedCount > 0) {
159
+ this.logger.info('STALE_CLEANUP_COMPLETE', 'Cleaned up stale requests', {
160
+ cleanedCount,
161
+ remainingRequests: this.activeRequests.size
162
+ });
163
+ }
164
+ return cleanedCount;
165
+ }
166
+ /**
167
+ * Shutdown and clean up all requests
168
+ */
169
+ shutdown() {
170
+ this.logger.info('REQUEST_TRACKER_SHUTDOWN', 'Shutting down request tracker', {
171
+ activeRequests: this.activeRequests.size
172
+ });
173
+ // Cancel all active requests
174
+ for (const [requestId, context] of this.activeRequests.entries()) {
175
+ if (!context.abortController.signal.aborted) {
176
+ context.abortController.abort('Server shutting down');
177
+ }
178
+ }
179
+ // Clear all maps
180
+ this.activeRequests.clear();
181
+ this.progressTokens.clear();
182
+ }
183
+ }
184
+ //# sourceMappingURL=request-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-tracker.js","sourceRoot":"","sources":["../../src/services/request-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { ConstructionwireClient } from '../clients/constructionwire-client.js';
2
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
3
+ import { Logger } from '../services/logger.js';
4
+ import { RequestContext } from '../services/request-tracker.js';
5
+ import { ProgressReporter } from '../services/progress-reporter.js';
6
+ export interface ConstructionwireToolsConfig {
7
+ cONSTRUCTIONWIREUSERNAME?: string;
8
+ cONSTRUCTIONWIREPASSWORD?: string;
9
+ api_base_url?: any;
10
+ authToken?: string;
11
+ logger?: Logger;
12
+ }
13
+ export declare class ConstructionwireTools {
14
+ private client;
15
+ private initialized;
16
+ private logger;
17
+ constructor(client: ConstructionwireClient);
18
+ private ensureInitialized;
19
+ getToolDefinitions(): Tool[];
20
+ canHandle(toolName: string): boolean;
21
+ executeTool(name: string, args: any, context?: RequestContext, progressReporter?: ProgressReporter): Promise<any>;
22
+ }
23
+ //# sourceMappingURL=constructionwire-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constructionwire-tools.d.ts","sourceRoot":"","sources":["../../src/tools/constructionwire-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,MAAM,WAAW,2BAA2B;IAC1C,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,sBAAsB;YAe5B,iBAAiB;IAoB/B,kBAAkB,IAAI,IAAI,EAAE;IAuxN5B,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAiF9B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,cAAc,EAAE,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC;CA4nExH"}