foundryvtt-mcp 0.11.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 (139) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +142 -0
  3. package/dist/character/manager.d.ts +92 -0
  4. package/dist/character/manager.d.ts.map +1 -0
  5. package/dist/character/manager.js +208 -0
  6. package/dist/character/manager.js.map +1 -0
  7. package/dist/combat/manager.d.ts +94 -0
  8. package/dist/combat/manager.d.ts.map +1 -0
  9. package/dist/combat/manager.js +373 -0
  10. package/dist/combat/manager.js.map +1 -0
  11. package/dist/config/index.d.ts +114 -0
  12. package/dist/config/index.d.ts.map +1 -0
  13. package/dist/config/index.js +177 -0
  14. package/dist/config/index.js.map +1 -0
  15. package/dist/diagnostics/client.d.ts +193 -0
  16. package/dist/diagnostics/client.d.ts.map +1 -0
  17. package/dist/diagnostics/client.js +314 -0
  18. package/dist/diagnostics/client.js.map +1 -0
  19. package/dist/diagnostics/types.d.ts +414 -0
  20. package/dist/diagnostics/types.d.ts.map +1 -0
  21. package/dist/diagnostics/types.js +94 -0
  22. package/dist/diagnostics/types.js.map +1 -0
  23. package/dist/foundry/auth.d.ts +19 -0
  24. package/dist/foundry/auth.d.ts.map +1 -0
  25. package/dist/foundry/auth.js +135 -0
  26. package/dist/foundry/auth.js.map +1 -0
  27. package/dist/foundry/client.d.ts +95 -0
  28. package/dist/foundry/client.d.ts.map +1 -0
  29. package/dist/foundry/client.js +692 -0
  30. package/dist/foundry/client.js.map +1 -0
  31. package/dist/foundry/types.d.ts +805 -0
  32. package/dist/foundry/types.d.ts.map +1 -0
  33. package/dist/foundry/types.js +13 -0
  34. package/dist/foundry/types.js.map +1 -0
  35. package/dist/index.d.ts +16 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +199 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/resources/index.d.ts +3 -0
  40. package/dist/resources/index.d.ts.map +1 -0
  41. package/dist/resources/index.js +93 -0
  42. package/dist/resources/index.js.map +1 -0
  43. package/dist/tools/base.d.ts +80 -0
  44. package/dist/tools/base.d.ts.map +1 -0
  45. package/dist/tools/base.js +73 -0
  46. package/dist/tools/base.js.map +1 -0
  47. package/dist/tools/definitions.d.ts +414 -0
  48. package/dist/tools/definitions.d.ts.map +1 -0
  49. package/dist/tools/definitions.js +429 -0
  50. package/dist/tools/definitions.js.map +1 -0
  51. package/dist/tools/handlers/actors.d.ts +31 -0
  52. package/dist/tools/handlers/actors.d.ts.map +1 -0
  53. package/dist/tools/handlers/actors.js +76 -0
  54. package/dist/tools/handlers/actors.js.map +1 -0
  55. package/dist/tools/handlers/chat.d.ts +13 -0
  56. package/dist/tools/handlers/chat.d.ts.map +1 -0
  57. package/dist/tools/handlers/chat.js +38 -0
  58. package/dist/tools/handlers/chat.js.map +1 -0
  59. package/dist/tools/handlers/combat.d.ts +11 -0
  60. package/dist/tools/handlers/combat.d.ts.map +1 -0
  61. package/dist/tools/handlers/combat.js +48 -0
  62. package/dist/tools/handlers/combat.js.map +1 -0
  63. package/dist/tools/handlers/diagnostics.d.ts +64 -0
  64. package/dist/tools/handlers/diagnostics.d.ts.map +1 -0
  65. package/dist/tools/handlers/diagnostics.js +182 -0
  66. package/dist/tools/handlers/diagnostics.js.map +1 -0
  67. package/dist/tools/handlers/dice.d.ts +39 -0
  68. package/dist/tools/handlers/dice.d.ts.map +1 -0
  69. package/dist/tools/handlers/dice.js +53 -0
  70. package/dist/tools/handlers/dice.js.map +1 -0
  71. package/dist/tools/handlers/generation.d.ts +44 -0
  72. package/dist/tools/handlers/generation.d.ts.map +1 -0
  73. package/dist/tools/handlers/generation.js +205 -0
  74. package/dist/tools/handlers/generation.js.map +1 -0
  75. package/dist/tools/handlers/items.d.ts +21 -0
  76. package/dist/tools/handlers/items.d.ts.map +1 -0
  77. package/dist/tools/handlers/items.js +50 -0
  78. package/dist/tools/handlers/items.js.map +1 -0
  79. package/dist/tools/handlers/journals.d.ts +22 -0
  80. package/dist/tools/handlers/journals.d.ts.map +1 -0
  81. package/dist/tools/handlers/journals.js +62 -0
  82. package/dist/tools/handlers/journals.js.map +1 -0
  83. package/dist/tools/handlers/resources.d.ts +13 -0
  84. package/dist/tools/handlers/resources.d.ts.map +1 -0
  85. package/dist/tools/handlers/resources.js +188 -0
  86. package/dist/tools/handlers/resources.js.map +1 -0
  87. package/dist/tools/handlers/scenes.d.ts +18 -0
  88. package/dist/tools/handlers/scenes.d.ts.map +1 -0
  89. package/dist/tools/handlers/scenes.js +34 -0
  90. package/dist/tools/handlers/scenes.js.map +1 -0
  91. package/dist/tools/handlers/users.d.ts +11 -0
  92. package/dist/tools/handlers/users.d.ts.map +1 -0
  93. package/dist/tools/handlers/users.js +34 -0
  94. package/dist/tools/handlers/users.js.map +1 -0
  95. package/dist/tools/handlers/utils.d.ts +11 -0
  96. package/dist/tools/handlers/utils.d.ts.map +1 -0
  97. package/dist/tools/handlers/utils.js +24 -0
  98. package/dist/tools/handlers/utils.js.map +1 -0
  99. package/dist/tools/handlers/world.d.ts +26 -0
  100. package/dist/tools/handlers/world.d.ts.map +1 -0
  101. package/dist/tools/handlers/world.js +92 -0
  102. package/dist/tools/handlers/world.js.map +1 -0
  103. package/dist/tools/index.d.ts +19 -0
  104. package/dist/tools/index.d.ts.map +1 -0
  105. package/dist/tools/index.js +22 -0
  106. package/dist/tools/index.js.map +1 -0
  107. package/dist/tools/new-router.d.ts +29 -0
  108. package/dist/tools/new-router.d.ts.map +1 -0
  109. package/dist/tools/new-router.js +97 -0
  110. package/dist/tools/new-router.js.map +1 -0
  111. package/dist/tools/registry.d.ts +51 -0
  112. package/dist/tools/registry.d.ts.map +1 -0
  113. package/dist/tools/registry.js +79 -0
  114. package/dist/tools/registry.js.map +1 -0
  115. package/dist/tools/resources.d.ts +16 -0
  116. package/dist/tools/resources.d.ts.map +1 -0
  117. package/dist/tools/resources.js +63 -0
  118. package/dist/tools/resources.js.map +1 -0
  119. package/dist/tools/router.d.ts +22 -0
  120. package/dist/tools/router.d.ts.map +1 -0
  121. package/dist/tools/router.js +128 -0
  122. package/dist/tools/router.js.map +1 -0
  123. package/dist/utils/cache-instance.d.ts +25 -0
  124. package/dist/utils/cache-instance.d.ts.map +1 -0
  125. package/dist/utils/cache-instance.js +30 -0
  126. package/dist/utils/cache-instance.js.map +1 -0
  127. package/dist/utils/cache.d.ts +80 -0
  128. package/dist/utils/cache.d.ts.map +1 -0
  129. package/dist/utils/cache.js +205 -0
  130. package/dist/utils/cache.js.map +1 -0
  131. package/dist/utils/diagnostics.d.ts +114 -0
  132. package/dist/utils/diagnostics.d.ts.map +1 -0
  133. package/dist/utils/diagnostics.js +330 -0
  134. package/dist/utils/diagnostics.js.map +1 -0
  135. package/dist/utils/logger.d.ts +137 -0
  136. package/dist/utils/logger.d.ts.map +1 -0
  137. package/dist/utils/logger.js +158 -0
  138. package/dist/utils/logger.js.map +1 -0
  139. package/package.json +98 -0
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @fileoverview Global cache instance singleton
3
+ *
4
+ * This module provides a singleton cache instance that's configured
5
+ * from the application configuration.
6
+ */
7
+ import { config } from '../config/index.js';
8
+ import { CacheService } from './cache.js';
9
+ /**
10
+ * Global cache instance
11
+ * Initialized with configuration from config system
12
+ */
13
+ export const cache = new CacheService(config?.cache || {
14
+ enabled: false,
15
+ ttlSeconds: 300,
16
+ maxSize: 1000,
17
+ });
18
+ /**
19
+ * Cache key generators for consistent naming
20
+ */
21
+ export const CacheKeys = {
22
+ worldInfo: () => 'world:info',
23
+ actor: (id) => `actor:${id}`,
24
+ actorSearch: (query, type, limit) => `actor:search:${query}:${type || 'all'}:${limit || 10}`,
25
+ item: (id) => `item:${id}`,
26
+ itemSearch: (query, type, rarity, limit) => `item:search:${query}:${type || 'all'}:${rarity || 'all'}:${limit || 10}`,
27
+ scene: (id) => (id ? `scene:${id}` : 'scene:current'),
28
+ rule: (query, system) => `rule:${query}:${system || 'default'}`,
29
+ };
30
+ //# sourceMappingURL=cache-instance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-instance.js","sourceRoot":"","sources":["../../src/utils/cache-instance.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,YAAY,CACnC,MAAM,EAAE,KAAK,IAAI;IACf,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,GAAG;IACf,OAAO,EAAE,IAAI;CACd,CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY;IAC7B,KAAK,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE;IACpC,WAAW,EAAE,CAAC,KAAa,EAAE,IAAa,EAAE,KAAc,EAAE,EAAE,CAC5D,gBAAgB,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,EAAE,EAAE;IACzD,IAAI,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE;IAClC,UAAU,EAAE,CAAC,KAAa,EAAE,IAAa,EAAE,MAAe,EAAE,KAAc,EAAE,EAAE,CAC5E,eAAe,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,EAAE,EAAE;IAC3E,KAAK,EAAE,CAAC,EAAW,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC;IAC9D,IAAI,EAAE,CAAC,KAAa,EAAE,MAAe,EAAE,EAAE,CAAC,QAAQ,KAAK,IAAI,MAAM,IAAI,SAAS,EAAE;CACxE,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * @fileoverview Caching utility with TTL (Time To Live) support
3
+ *
4
+ * This module provides a simple in-memory cache with automatic expiration
5
+ * and configurable size limits to improve performance for quasi-static data.
6
+ */
7
+ /**
8
+ * Cache statistics for monitoring
9
+ */
10
+ export interface CacheStats {
11
+ hits: number;
12
+ misses: number;
13
+ hitRate: number;
14
+ size: number;
15
+ maxSize: number;
16
+ evictions: number;
17
+ }
18
+ /**
19
+ * Cache configuration options
20
+ */
21
+ export interface CacheConfig {
22
+ enabled: boolean;
23
+ ttlSeconds: number;
24
+ maxSize: number;
25
+ }
26
+ /**
27
+ * Simple in-memory cache with TTL and LRU eviction
28
+ */
29
+ export declare class CacheService {
30
+ private config;
31
+ private cache;
32
+ private stats;
33
+ private cleanupInterval;
34
+ constructor(config: CacheConfig);
35
+ /**
36
+ * Get a value from the cache
37
+ */
38
+ get<T>(key: string): T | undefined;
39
+ /**
40
+ * Set a value in the cache with custom TTL
41
+ */
42
+ set<T>(key: string, value: T, customTtlSeconds?: number): void;
43
+ /**
44
+ * Delete a specific key from the cache
45
+ */
46
+ delete(key: string): boolean;
47
+ /**
48
+ * Clear all entries from the cache
49
+ */
50
+ clear(): void;
51
+ /**
52
+ * Get or set a value using a factory function
53
+ */
54
+ getOrSet<T>(key: string, factory: () => Promise<T>, customTtlSeconds?: number): Promise<T>;
55
+ /**
56
+ * Get cache statistics
57
+ */
58
+ getStats(): CacheStats;
59
+ /**
60
+ * Check if cache is enabled
61
+ */
62
+ isEnabled(): boolean;
63
+ /**
64
+ * Destroy the cache service and release resources
65
+ */
66
+ destroy(): void;
67
+ /**
68
+ * Get cache keys (for debugging)
69
+ */
70
+ getKeys(): string[];
71
+ /**
72
+ * Cleanup expired entries
73
+ */
74
+ private cleanup;
75
+ /**
76
+ * Evict least recently used entry
77
+ */
78
+ private evictLeastRecentlyUsed;
79
+ }
80
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,YAAY;IASX,OAAO,CAAC,MAAM;IAR1B,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,KAAK,CAIX;IACF,OAAO,CAAC,eAAe,CAA6C;gBAEhD,MAAM,EAAE,WAAW;IAqBvC;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IA+BlC;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI;IAyB9D;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAQ5B;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACG,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAehG;;OAEG;IACH,QAAQ,IAAI,UAAU;IActB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,OAAO,IAAI,IAAI;IASf;;OAEG;IACH,OAAO,IAAI,MAAM,EAAE;IAInB;;OAEG;IACH,OAAO,CAAC,OAAO;IAmBf;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAqB/B"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * @fileoverview Caching utility with TTL (Time To Live) support
3
+ *
4
+ * This module provides a simple in-memory cache with automatic expiration
5
+ * and configurable size limits to improve performance for quasi-static data.
6
+ */
7
+ import { logger } from './logger.js';
8
+ /**
9
+ * Simple in-memory cache with TTL and LRU eviction
10
+ */
11
+ export class CacheService {
12
+ config;
13
+ cache = new Map();
14
+ stats = {
15
+ hits: 0,
16
+ misses: 0,
17
+ evictions: 0,
18
+ };
19
+ cleanupInterval;
20
+ constructor(config) {
21
+ this.config = config;
22
+ if (config.enabled) {
23
+ logger.info('Cache service initialized', {
24
+ ttlSeconds: config.ttlSeconds,
25
+ maxSize: config.maxSize,
26
+ });
27
+ // Clean up expired entries periodically
28
+ this.cleanupInterval = setInterval(() => {
29
+ try {
30
+ this.cleanup();
31
+ }
32
+ catch (err) {
33
+ logger.warn('Cache cleanup error', { error: err instanceof Error ? err.message : err });
34
+ }
35
+ }, Math.max((config.ttlSeconds * 1000) / 4, 30000));
36
+ }
37
+ }
38
+ /**
39
+ * Get a value from the cache
40
+ */
41
+ get(key) {
42
+ if (!this.config.enabled) {
43
+ return undefined;
44
+ }
45
+ const entry = this.cache.get(key);
46
+ if (!entry) {
47
+ this.stats.misses++;
48
+ logger.debug('Cache miss', { key });
49
+ return undefined;
50
+ }
51
+ // Check if entry has expired
52
+ const now = Date.now();
53
+ if (now - entry.timestamp > entry.ttl * 1000) {
54
+ this.cache.delete(key);
55
+ this.stats.misses++;
56
+ logger.debug('Cache expired', { key, age: now - entry.timestamp });
57
+ return undefined;
58
+ }
59
+ // Update access metadata
60
+ entry.accessCount++;
61
+ entry.lastAccessed = now;
62
+ this.stats.hits++;
63
+ logger.debug('Cache hit', { key, accessCount: entry.accessCount });
64
+ return entry.value;
65
+ }
66
+ /**
67
+ * Set a value in the cache with custom TTL
68
+ */
69
+ set(key, value, customTtlSeconds) {
70
+ if (!this.config.enabled) {
71
+ return;
72
+ }
73
+ const ttl = customTtlSeconds ?? this.config.ttlSeconds;
74
+ const now = Date.now();
75
+ // Ensure cache doesn't exceed max size
76
+ if (this.cache.size >= this.config.maxSize && !this.cache.has(key)) {
77
+ this.evictLeastRecentlyUsed();
78
+ }
79
+ const entry = {
80
+ value,
81
+ timestamp: now,
82
+ ttl,
83
+ accessCount: 0,
84
+ lastAccessed: now,
85
+ };
86
+ this.cache.set(key, entry);
87
+ logger.debug('Cache set', { key, ttl, size: this.cache.size });
88
+ }
89
+ /**
90
+ * Delete a specific key from the cache
91
+ */
92
+ delete(key) {
93
+ const deleted = this.cache.delete(key);
94
+ if (deleted) {
95
+ logger.debug('Cache deleted', { key });
96
+ }
97
+ return deleted;
98
+ }
99
+ /**
100
+ * Clear all entries from the cache
101
+ */
102
+ clear() {
103
+ const size = this.cache.size;
104
+ this.cache.clear();
105
+ this.stats.hits = 0;
106
+ this.stats.misses = 0;
107
+ this.stats.evictions = 0;
108
+ logger.info('Cache cleared', { previousSize: size });
109
+ }
110
+ /**
111
+ * Get or set a value using a factory function
112
+ */
113
+ async getOrSet(key, factory, customTtlSeconds) {
114
+ if (!this.config.enabled) {
115
+ return await factory();
116
+ }
117
+ const cached = this.get(key);
118
+ if (cached !== undefined) {
119
+ return cached;
120
+ }
121
+ const value = await factory();
122
+ this.set(key, value, customTtlSeconds);
123
+ return value;
124
+ }
125
+ /**
126
+ * Get cache statistics
127
+ */
128
+ getStats() {
129
+ const total = this.stats.hits + this.stats.misses;
130
+ const hitRate = total > 0 ? this.stats.hits / total : 0;
131
+ return {
132
+ hits: this.stats.hits,
133
+ misses: this.stats.misses,
134
+ hitRate: Math.round(hitRate * 100) / 100,
135
+ size: this.cache.size,
136
+ maxSize: this.config.maxSize,
137
+ evictions: this.stats.evictions,
138
+ };
139
+ }
140
+ /**
141
+ * Check if cache is enabled
142
+ */
143
+ isEnabled() {
144
+ return this.config.enabled;
145
+ }
146
+ /**
147
+ * Destroy the cache service and release resources
148
+ */
149
+ destroy() {
150
+ if (this.cleanupInterval) {
151
+ clearInterval(this.cleanupInterval);
152
+ this.cleanupInterval = undefined;
153
+ }
154
+ this.cache.clear();
155
+ logger.info('Cache service destroyed');
156
+ }
157
+ /**
158
+ * Get cache keys (for debugging)
159
+ */
160
+ getKeys() {
161
+ return Array.from(this.cache.keys());
162
+ }
163
+ /**
164
+ * Cleanup expired entries
165
+ */
166
+ cleanup() {
167
+ const now = Date.now();
168
+ let cleaned = 0;
169
+ for (const [key, entry] of this.cache.entries()) {
170
+ if (now - entry.timestamp > entry.ttl * 1000) {
171
+ this.cache.delete(key);
172
+ cleaned++;
173
+ }
174
+ }
175
+ if (cleaned > 0) {
176
+ logger.debug('Cache cleanup completed', {
177
+ cleaned,
178
+ remaining: this.cache.size,
179
+ });
180
+ }
181
+ }
182
+ /**
183
+ * Evict least recently used entry
184
+ */
185
+ evictLeastRecentlyUsed() {
186
+ let lruKey;
187
+ let lruTime = Date.now(); // Start with current time
188
+ // Find the entry with the oldest lastAccessed time
189
+ for (const [key, entry] of this.cache.entries()) {
190
+ if (entry.lastAccessed <= lruTime) {
191
+ lruTime = entry.lastAccessed;
192
+ lruKey = key;
193
+ }
194
+ }
195
+ if (lruKey) {
196
+ this.cache.delete(lruKey);
197
+ this.stats.evictions++;
198
+ logger.debug('Cache evicted LRU entry', {
199
+ key: lruKey,
200
+ age: Date.now() - lruTime,
201
+ });
202
+ }
203
+ }
204
+ }
205
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * @fileoverview Diagnostic utilities for enhanced user experience
3
+ *
4
+ * Provides smart error analysis, problem detection, and actionable suggestions
5
+ * to help users troubleshoot and resolve common issues.
6
+ */
7
+ import type { FoundryClient } from '../foundry/client.js';
8
+ /**
9
+ * Diagnostic result containing problem analysis and suggestions
10
+ */
11
+ export interface DiagnosticResult {
12
+ /** Brief explanation of the issue */
13
+ explanation: string;
14
+ /** Actionable suggestions for resolution */
15
+ suggestions: string;
16
+ /** Severity level of the issue */
17
+ severity: 'info' | 'warning' | 'error' | 'critical';
18
+ /** Whether the feature can function with limitations */
19
+ canContinue: boolean;
20
+ /** Link to relevant documentation */
21
+ documentationUrl?: string;
22
+ }
23
+ /**
24
+ * Health check report for system status
25
+ */
26
+ export interface HealthReport {
27
+ connectivity: {
28
+ status: 'connected' | 'limited' | 'offline';
29
+ emoji: string;
30
+ details: string;
31
+ };
32
+ authentication: {
33
+ method: 'api-key' | 'credentials' | 'none';
34
+ status: 'valid' | 'invalid' | 'untested';
35
+ emoji: string;
36
+ };
37
+ features: {
38
+ diceRolling: boolean;
39
+ actorSearch: boolean;
40
+ itemSearch: boolean;
41
+ sceneData: boolean;
42
+ diagnostics: boolean;
43
+ };
44
+ restApiAvailable: boolean;
45
+ websocketAvailable: boolean;
46
+ }
47
+ /**
48
+ * Enhanced diagnostic system for FoundryVTT MCP integration
49
+ */
50
+ export declare class DiagnosticSystem {
51
+ private foundryClient;
52
+ constructor(foundryClient: FoundryClient);
53
+ /**
54
+ * Diagnose why a specific feature isn't working
55
+ */
56
+ diagnoseFeatureProblem(feature: 'actors' | 'items' | 'scenes' | 'diagnostics'): Promise<DiagnosticResult>;
57
+ /**
58
+ * Perform comprehensive health check
59
+ */
60
+ performHealthCheck(): Promise<HealthReport>;
61
+ /**
62
+ * Format health report for user display
63
+ */
64
+ formatHealthReport(report: HealthReport): string;
65
+ /**
66
+ * Create diagnostic for connectivity issues
67
+ */
68
+ private createConnectivityDiagnostic;
69
+ /**
70
+ * Create diagnostic for REST API issues
71
+ */
72
+ private createRestApiDiagnostic;
73
+ /**
74
+ * Create diagnostic for authentication issues
75
+ */
76
+ private createAuthenticationDiagnostic;
77
+ /**
78
+ * Create feature-specific diagnostic
79
+ */
80
+ private createFeatureSpecificDiagnostic;
81
+ /**
82
+ * Create generic error diagnostic
83
+ */
84
+ private createGenericErrorDiagnostic;
85
+ /**
86
+ * Test if feature requires REST API
87
+ */
88
+ private requiresRestApi;
89
+ /**
90
+ * Test REST API availability
91
+ */
92
+ private testRestApiAvailability;
93
+ /**
94
+ * Test authentication
95
+ */
96
+ private testAuthentication;
97
+ /**
98
+ * Test dice rolling functionality
99
+ */
100
+ private testDiceRolling;
101
+ /**
102
+ * Test actor search functionality
103
+ */
104
+ private testActorSearch;
105
+ /**
106
+ * Test item search functionality
107
+ */
108
+ private testItemSearch;
109
+ /**
110
+ * Test scene data functionality
111
+ */
112
+ private testSceneData;
113
+ }
114
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/utils/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;IACpD,wDAAwD;IACxD,WAAW,EAAE,OAAO,CAAC;IACrB,qCAAqC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE;QACZ,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;QAC5C,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,cAAc,EAAE;QACd,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;QAC3C,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;QACzC,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,QAAQ,EAAE;QACR,WAAW,EAAE,OAAO,CAAC;QACrB,WAAW,EAAE,OAAO,CAAC;QACrB,UAAU,EAAE,OAAO,CAAC;QACpB,SAAS,EAAE,OAAO,CAAC;QACnB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,qBAAa,gBAAgB;IACf,OAAO,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAEhD;;OAEG;IACG,sBAAsB,CAC1B,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,aAAa,GACrD,OAAO,CAAC,gBAAgB,CAAC;IAiC5B;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,YAAY,CAAC;IAyEjD;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAqChD;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAepC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;OAEG;IACH,OAAO,CAAC,8BAA8B;IAwBtC;;OAEG;YACW,+BAA+B;IAe7C;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAcpC;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;YACW,uBAAuB;IAcrC;;OAEG;YACW,kBAAkB;IAmBhC;;OAEG;YACW,eAAe;IAU7B;;OAEG;YACW,eAAe;IAU7B;;OAEG;YACW,cAAc;IAU5B;;OAEG;YACW,aAAa;CAS5B"}