@cyanheads/mcp-ts-core 0.12.6 → 0.12.8

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 (235) hide show
  1. package/AGENTS.md +9 -3
  2. package/CLAUDE.md +9 -3
  3. package/README.md +132 -77
  4. package/biome.json +1 -1
  5. package/changelog/0.12.x/0.12.6.md +2 -2
  6. package/changelog/0.12.x/0.12.7.md +39 -0
  7. package/changelog/0.12.x/0.12.8.md +55 -0
  8. package/dist/config/index.d.ts +3 -34
  9. package/dist/config/index.d.ts.map +1 -1
  10. package/dist/config/index.js +4 -26
  11. package/dist/config/index.js.map +1 -1
  12. package/dist/core/app.d.ts +0 -8
  13. package/dist/core/app.d.ts.map +1 -1
  14. package/dist/core/app.js +0 -7
  15. package/dist/core/app.js.map +1 -1
  16. package/dist/core/serverManifest.d.ts +0 -7
  17. package/dist/core/serverManifest.d.ts.map +1 -1
  18. package/dist/core/serverManifest.js +1 -13
  19. package/dist/core/serverManifest.js.map +1 -1
  20. package/dist/core/worker.d.ts +1 -1
  21. package/dist/core/worker.d.ts.map +1 -1
  22. package/dist/core/worker.js.map +1 -1
  23. package/dist/linter/rules/enrichment-rules.js +2 -2
  24. package/dist/linter/rules/enrichment-rules.js.map +1 -1
  25. package/dist/linter/rules/format-parity-rules.d.ts.map +1 -1
  26. package/dist/linter/rules/format-parity-rules.js +14 -36
  27. package/dist/linter/rules/format-parity-rules.js.map +1 -1
  28. package/dist/linter/rules/prompt-rules.d.ts +1 -1
  29. package/dist/linter/rules/prompt-rules.d.ts.map +1 -1
  30. package/dist/linter/rules/prompt-rules.js +2 -19
  31. package/dist/linter/rules/prompt-rules.js.map +1 -1
  32. package/dist/linter/rules/resource-rules.d.ts +1 -1
  33. package/dist/linter/rules/resource-rules.d.ts.map +1 -1
  34. package/dist/linter/rules/resource-rules.js +9 -39
  35. package/dist/linter/rules/resource-rules.js.map +1 -1
  36. package/dist/linter/rules/schema-rules.d.ts +22 -2
  37. package/dist/linter/rules/schema-rules.d.ts.map +1 -1
  38. package/dist/linter/rules/schema-rules.js +28 -5
  39. package/dist/linter/rules/schema-rules.js.map +1 -1
  40. package/dist/linter/rules/tool-rules.d.ts +1 -1
  41. package/dist/linter/rules/tool-rules.d.ts.map +1 -1
  42. package/dist/linter/rules/tool-rules.js +13 -41
  43. package/dist/linter/rules/tool-rules.js.map +1 -1
  44. package/dist/linter/validate.d.ts.map +1 -1
  45. package/dist/linter/validate.js +22 -42
  46. package/dist/linter/validate.js.map +1 -1
  47. package/dist/mcp-server/apps/appBuilders.d.ts.map +1 -1
  48. package/dist/mcp-server/apps/appBuilders.js +2 -16
  49. package/dist/mcp-server/apps/appBuilders.js.map +1 -1
  50. package/dist/mcp-server/handlerContext.d.ts +66 -0
  51. package/dist/mcp-server/handlerContext.d.ts.map +1 -0
  52. package/dist/mcp-server/handlerContext.js +71 -0
  53. package/dist/mcp-server/handlerContext.js.map +1 -0
  54. package/dist/mcp-server/inputRequired.d.ts +7 -1
  55. package/dist/mcp-server/inputRequired.d.ts.map +1 -1
  56. package/dist/mcp-server/inputRequired.js +10 -3
  57. package/dist/mcp-server/inputRequired.js.map +1 -1
  58. package/dist/mcp-server/resources/resource-registration.d.ts +2 -2
  59. package/dist/mcp-server/resources/resource-registration.d.ts.map +1 -1
  60. package/dist/mcp-server/resources/resource-registration.js.map +1 -1
  61. package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts +14 -43
  62. package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts.map +1 -1
  63. package/dist/mcp-server/resources/utils/resourceHandlerFactory.js +11 -50
  64. package/dist/mcp-server/resources/utils/resourceHandlerFactory.js.map +1 -1
  65. package/dist/mcp-server/tools/tool-registration.d.ts +5 -9
  66. package/dist/mcp-server/tools/tool-registration.d.ts.map +1 -1
  67. package/dist/mcp-server/tools/tool-registration.js +16 -12
  68. package/dist/mcp-server/tools/tool-registration.js.map +1 -1
  69. package/dist/mcp-server/tools/utils/deferredInputSchema.d.ts +39 -0
  70. package/dist/mcp-server/tools/utils/deferredInputSchema.d.ts.map +1 -0
  71. package/dist/mcp-server/tools/utils/deferredInputSchema.js +33 -0
  72. package/dist/mcp-server/tools/utils/deferredInputSchema.js.map +1 -0
  73. package/dist/mcp-server/tools/utils/schemaShape.d.ts +21 -0
  74. package/dist/mcp-server/tools/utils/schemaShape.d.ts.map +1 -1
  75. package/dist/mcp-server/tools/utils/schemaShape.js +8 -6
  76. package/dist/mcp-server/tools/utils/schemaShape.js.map +1 -1
  77. package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts +25 -45
  78. package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts.map +1 -1
  79. package/dist/mcp-server/tools/utils/toolHandlerFactory.js +55 -74
  80. package/dist/mcp-server/tools/utils/toolHandlerFactory.js.map +1 -1
  81. package/dist/mcp-server/transports/http/httpErrorHandler.d.ts.map +1 -1
  82. package/dist/mcp-server/transports/http/httpErrorHandler.js +2 -1
  83. package/dist/mcp-server/transports/http/httpErrorHandler.js.map +1 -1
  84. package/dist/mcp-server/transports/http/landing-page/handler.d.ts.map +1 -1
  85. package/dist/mcp-server/transports/http/landing-page/handler.js +2 -1
  86. package/dist/mcp-server/transports/http/landing-page/handler.js.map +1 -1
  87. package/dist/mcp-server/transports/http/protectedResourceMetadata.d.ts.map +1 -1
  88. package/dist/mcp-server/transports/http/protectedResourceMetadata.js +2 -1
  89. package/dist/mcp-server/transports/http/protectedResourceMetadata.js.map +1 -1
  90. package/dist/mcp-server/transports/http/publicOrigin.d.ts +11 -0
  91. package/dist/mcp-server/transports/http/publicOrigin.d.ts.map +1 -0
  92. package/dist/mcp-server/transports/http/publicOrigin.js +13 -0
  93. package/dist/mcp-server/transports/http/publicOrigin.js.map +1 -0
  94. package/dist/mcp-server/transports/http/serverCard.d.ts.map +1 -1
  95. package/dist/mcp-server/transports/http/serverCard.js +2 -1
  96. package/dist/mcp-server/transports/http/serverCard.js.map +1 -1
  97. package/dist/mcp-server/transports/http/sessionIdUtils.d.ts +4 -0
  98. package/dist/mcp-server/transports/http/sessionIdUtils.d.ts.map +1 -1
  99. package/dist/mcp-server/transports/http/sessionIdUtils.js +3 -13
  100. package/dist/mcp-server/transports/http/sessionIdUtils.js.map +1 -1
  101. package/dist/mcp-server/transports/manager.d.ts +0 -3
  102. package/dist/mcp-server/transports/manager.d.ts.map +1 -1
  103. package/dist/mcp-server/transports/manager.js +0 -7
  104. package/dist/mcp-server/transports/manager.js.map +1 -1
  105. package/dist/services/canvas/core/CanvasRegistry.d.ts +14 -0
  106. package/dist/services/canvas/core/CanvasRegistry.d.ts.map +1 -1
  107. package/dist/services/canvas/core/CanvasRegistry.js +3 -2
  108. package/dist/services/canvas/core/CanvasRegistry.js.map +1 -1
  109. package/dist/services/canvas/providers/duckdb/DuckdbProvider.d.ts +16 -0
  110. package/dist/services/canvas/providers/duckdb/DuckdbProvider.d.ts.map +1 -1
  111. package/dist/services/canvas/providers/duckdb/DuckdbProvider.js +78 -103
  112. package/dist/services/canvas/providers/duckdb/DuckdbProvider.js.map +1 -1
  113. package/dist/services/graph/core/GraphService.d.ts +3 -3
  114. package/dist/services/graph/core/GraphService.js +3 -3
  115. package/dist/services/graph/types.d.ts +2 -79
  116. package/dist/services/graph/types.d.ts.map +1 -1
  117. package/dist/services/graph/types.js +2 -2
  118. package/dist/services/index.d.ts +1 -2
  119. package/dist/services/index.d.ts.map +1 -1
  120. package/dist/services/index.js +0 -1
  121. package/dist/services/index.js.map +1 -1
  122. package/dist/services/mirror/sqlite/handle.d.ts.map +1 -1
  123. package/dist/services/mirror/sqlite/handle.js +22 -36
  124. package/dist/services/mirror/sqlite/handle.js.map +1 -1
  125. package/dist/services/speech/core/ISpeechProvider.d.ts +0 -24
  126. package/dist/services/speech/core/ISpeechProvider.d.ts.map +1 -1
  127. package/dist/services/speech/core/ISpeechProvider.js +1 -28
  128. package/dist/services/speech/core/ISpeechProvider.js.map +1 -1
  129. package/dist/services/speech/core/SpeechService.d.ts.map +1 -1
  130. package/dist/services/speech/core/SpeechService.js +5 -8
  131. package/dist/services/speech/core/SpeechService.js.map +1 -1
  132. package/dist/services/speech/providers/elevenlabs.provider.d.ts.map +1 -1
  133. package/dist/services/speech/providers/elevenlabs.provider.js +1 -0
  134. package/dist/services/speech/providers/elevenlabs.provider.js.map +1 -1
  135. package/dist/services/speech/providers/whisper.provider.d.ts.map +1 -1
  136. package/dist/services/speech/providers/whisper.provider.js +4 -2
  137. package/dist/services/speech/providers/whisper.provider.js.map +1 -1
  138. package/dist/services/speech/types.d.ts +2 -19
  139. package/dist/services/speech/types.d.ts.map +1 -1
  140. package/dist/storage/core/providerHelpers.d.ts +52 -0
  141. package/dist/storage/core/providerHelpers.d.ts.map +1 -0
  142. package/dist/storage/core/providerHelpers.js +96 -0
  143. package/dist/storage/core/providerHelpers.js.map +1 -0
  144. package/dist/storage/providers/cloudflare/d1Provider.d.ts.map +1 -1
  145. package/dist/storage/providers/cloudflare/d1Provider.js +1 -4
  146. package/dist/storage/providers/cloudflare/d1Provider.js.map +1 -1
  147. package/dist/storage/providers/cloudflare/kvProvider.d.ts.map +1 -1
  148. package/dist/storage/providers/cloudflare/kvProvider.js +4 -31
  149. package/dist/storage/providers/cloudflare/kvProvider.js.map +1 -1
  150. package/dist/storage/providers/cloudflare/r2Provider.d.ts +1 -1
  151. package/dist/storage/providers/cloudflare/r2Provider.d.ts.map +1 -1
  152. package/dist/storage/providers/cloudflare/r2Provider.js +8 -48
  153. package/dist/storage/providers/cloudflare/r2Provider.js.map +1 -1
  154. package/dist/storage/providers/fileSystem/fileSystemProvider.d.ts +1 -1
  155. package/dist/storage/providers/fileSystem/fileSystemProvider.d.ts.map +1 -1
  156. package/dist/storage/providers/fileSystem/fileSystemProvider.js +17 -86
  157. package/dist/storage/providers/fileSystem/fileSystemProvider.js.map +1 -1
  158. package/dist/storage/providers/inMemory/inMemoryProvider.d.ts.map +1 -1
  159. package/dist/storage/providers/inMemory/inMemoryProvider.js +5 -38
  160. package/dist/storage/providers/inMemory/inMemoryProvider.js.map +1 -1
  161. package/dist/storage/providers/supabase/supabaseProvider.d.ts.map +1 -1
  162. package/dist/storage/providers/supabase/supabaseProvider.js +1 -4
  163. package/dist/storage/providers/supabase/supabaseProvider.js.map +1 -1
  164. package/dist/testing/fuzz.d.ts.map +1 -1
  165. package/dist/testing/fuzz.js +17 -31
  166. package/dist/testing/fuzz.js.map +1 -1
  167. package/dist/testing/index.d.ts.map +1 -1
  168. package/dist/testing/index.js +4 -26
  169. package/dist/testing/index.js.map +1 -1
  170. package/dist/utils/internal/error-handler/types.d.ts +0 -4
  171. package/dist/utils/internal/error-handler/types.d.ts.map +1 -1
  172. package/dist/utils/internal/logger.d.ts.map +1 -1
  173. package/dist/utils/internal/logger.js +2 -16
  174. package/dist/utils/internal/logger.js.map +1 -1
  175. package/dist/utils/internal/performance.d.ts +8 -31
  176. package/dist/utils/internal/performance.d.ts.map +1 -1
  177. package/dist/utils/internal/performance.js +173 -295
  178. package/dist/utils/internal/performance.js.map +1 -1
  179. package/dist/utils/security/idGenerator.d.ts.map +1 -1
  180. package/dist/utils/security/idGenerator.js +24 -43
  181. package/dist/utils/security/idGenerator.js.map +1 -1
  182. package/dist/utils/security/sanitization.d.ts +0 -7
  183. package/dist/utils/security/sanitization.d.ts.map +1 -1
  184. package/dist/utils/security/sanitization.js +4 -31
  185. package/dist/utils/security/sanitization.js.map +1 -1
  186. package/dist/utils/security/sensitiveFields.d.ts +14 -0
  187. package/dist/utils/security/sensitiveFields.d.ts.map +1 -0
  188. package/dist/utils/security/sensitiveFields.js +31 -0
  189. package/dist/utils/security/sensitiveFields.js.map +1 -0
  190. package/dist/utils/telemetry/trace.d.ts +8 -10
  191. package/dist/utils/telemetry/trace.d.ts.map +1 -1
  192. package/dist/utils/telemetry/trace.js +19 -18
  193. package/dist/utils/telemetry/trace.js.map +1 -1
  194. package/dist/utils/types/guards.d.ts +0 -102
  195. package/dist/utils/types/guards.d.ts.map +1 -1
  196. package/dist/utils/types/guards.js +0 -114
  197. package/dist/utils/types/guards.js.map +1 -1
  198. package/package.json +26 -25
  199. package/scripts/check-framework-antipatterns.ts +4 -1
  200. package/scripts/devcheck.ts +303 -33
  201. package/scripts/lint-packaging.ts +28 -6
  202. package/skills/add-provider/SKILL.md +18 -4
  203. package/skills/add-tool/SKILL.md +33 -1
  204. package/skills/api-config/SKILL.md +4 -18
  205. package/skills/api-errors/SKILL.md +2 -1
  206. package/skills/api-services/SKILL.md +1 -1
  207. package/skills/api-services/references/speech.md +1 -2
  208. package/skills/api-telemetry/SKILL.md +2 -2
  209. package/skills/api-utils/SKILL.md +2 -2
  210. package/skills/code-simplifier/SKILL.md +47 -20
  211. package/skills/design-mcp-server/SKILL.md +6 -1
  212. package/skills/field-test/SKILL.md +158 -39
  213. package/skills/git-wrapup/SKILL.md +67 -29
  214. package/skills/orchestrations/SKILL.md +17 -6
  215. package/skills/orchestrations/workflows/field-test-fix.md +6 -4
  216. package/skills/orchestrations/workflows/fix-wrapup-release.md +6 -4
  217. package/skills/orchestrations/workflows/greenfield-build.md +2 -2
  218. package/skills/orchestrations/workflows/maintenance-release.md +4 -2
  219. package/skills/release-and-publish/SKILL.md +101 -23
  220. package/skills/release-pr-review/SKILL.md +147 -0
  221. package/templates/AGENTS.md +4 -2
  222. package/templates/CLAUDE.md +4 -2
  223. package/templates/package.json +6 -6
  224. package/dist/mcp-server/transports/ITransport.d.ts +0 -15
  225. package/dist/mcp-server/transports/ITransport.d.ts.map +0 -1
  226. package/dist/mcp-server/transports/ITransport.js +0 -2
  227. package/dist/mcp-server/transports/ITransport.js.map +0 -1
  228. package/dist/services/llm/types.d.ts +0 -16
  229. package/dist/services/llm/types.d.ts.map +0 -1
  230. package/dist/services/llm/types.js +0 -9
  231. package/dist/services/llm/types.js.map +0 -1
  232. package/dist/utils/internal/health.d.ts +0 -60
  233. package/dist/utils/internal/health.d.ts.map +0 -1
  234. package/dist/utils/internal/health.js +0 -46
  235. package/dist/utils/internal/health.js.map +0 -1
@@ -54,56 +54,6 @@ export declare function isRecord(value: unknown): value is Record<string, unknow
54
54
  * ```
55
55
  */
56
56
  export declare function hasProperty<K extends PropertyKey>(obj: unknown, key: K): obj is Record<K, unknown>;
57
- /**
58
- * Type guard to check if an object has a property of a specific type.
59
- *
60
- * @param obj - Object to check
61
- * @param key - Property key to look for
62
- * @param typeGuard - Type guard function for the property value
63
- * @returns True if object has the property and it matches the type
64
- *
65
- * @example
66
- * ```typescript
67
- * if (hasPropertyOfType(obj, 'count', (v): v is number => typeof v === 'number')) {
68
- * // obj.count is now typed as number
69
- * console.log(obj.count + 1);
70
- * }
71
- * ```
72
- */
73
- export declare function hasPropertyOfType<K extends PropertyKey, T>(obj: unknown, key: K, typeGuard: (value: unknown) => value is T): obj is Record<K, T>;
74
- /**
75
- * Type guard to check if a value is a string.
76
- *
77
- * @param value - Value to check
78
- * @returns True if value is a string
79
- *
80
- * @example
81
- * ```typescript
82
- * if (isString(value)) {
83
- * // value is now typed as string
84
- * console.log(value.toUpperCase());
85
- * }
86
- * ```
87
- */
88
- export declare function isString(value: unknown): value is string;
89
- /**
90
- * Type guard to check if a value is a number.
91
- *
92
- * `NaN` is explicitly excluded — `typeof NaN === 'number'` is true in JavaScript,
93
- * but `NaN` is almost never a valid value in the contexts where this guard is used.
94
- *
95
- * @param value - Value to check
96
- * @returns True if value is a finite or infinite number (excluding NaN)
97
- *
98
- * @example
99
- * ```typescript
100
- * if (isNumber(value)) {
101
- * // value is now typed as number (NaN excluded)
102
- * console.log(value.toFixed(2));
103
- * }
104
- * ```
105
- */
106
- export declare function isNumber(value: unknown): value is number;
107
57
  /**
108
58
  * Type guard to check if an error is an AggregateError.
109
59
  *
@@ -140,22 +90,6 @@ export declare function isAggregateError(error: unknown): error is Error & {
140
90
  export declare function isErrorWithCode(error: unknown): error is Error & {
141
91
  code: unknown;
142
92
  };
143
- /**
144
- * Type guard to check if an error has a status property.
145
- *
146
- * @param error - Error to check
147
- * @returns True if error has a status property
148
- *
149
- * @example
150
- * ```typescript
151
- * if (isErrorWithStatus(error)) {
152
- * console.log(`HTTP status: ${error.status}`);
153
- * }
154
- * ```
155
- */
156
- export declare function isErrorWithStatus(error: unknown): error is Error & {
157
- status: unknown;
158
- };
159
93
  /**
160
94
  * Safely get a property from an object if it exists.
161
95
  *
@@ -170,40 +104,4 @@ export declare function isErrorWithStatus(error: unknown): error is Error & {
170
104
  * ```
171
105
  */
172
106
  export declare function getProperty<K extends PropertyKey>(obj: unknown, key: K): unknown;
173
- /**
174
- * Safely get a string property from an object.
175
- *
176
- * @param obj - Object to get property from
177
- * @param key - Property key
178
- * @returns String value or undefined if property doesn't exist or is not a string
179
- *
180
- * @example
181
- * ```typescript
182
- * const traceId = getStringProperty(context, 'traceId');
183
- * if (traceId) {
184
- * // traceId is typed as string
185
- * console.log(traceId.toUpperCase());
186
- * }
187
- * ```
188
- */
189
- export declare function getStringProperty<K extends PropertyKey>(obj: unknown, key: K): string | undefined;
190
- /**
191
- * Safely get a number property from an object.
192
- *
193
- * Returns `undefined` if the property is absent, not a number, or is `NaN`.
194
- *
195
- * @param obj - Object to get property from
196
- * @param key - Property key
197
- * @returns Number value or undefined if property doesn't exist, is not a number, or is NaN
198
- *
199
- * @example
200
- * ```typescript
201
- * const retries = getNumberProperty(config, 'maxRetries');
202
- * if (retries !== undefined) {
203
- * // retries is typed as number
204
- * console.log(`Max retries: ${retries}`);
205
- * }
206
- * ```
207
- */
208
- export declare function getNumberProperty<K extends PropertyKey>(obj: unknown, key: K): number | undefined;
209
107
  //# sourceMappingURL=guards.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../../src/utils/types/guards.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,WAAW,EAC/C,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,CAAC,GACL,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAE3B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,EACxD,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,CAAC,EACN,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,GACxC,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAErB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,GAAG;IAAE,MAAM,EAAE,OAAO,EAAE,CAAA;CAAE,CAEvF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAElF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,GAAG;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAEtF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAEhF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,GAAG,SAAS,CAGjG;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,GAAG,SAAS,CAGjG"}
1
+ {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../../src/utils/types/guards.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,WAAW,EAC/C,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,CAAC,GACL,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAE3B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,GAAG;IAAE,MAAM,EAAE,OAAO,EAAE,CAAA;CAAE,CAEvF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAElF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAEhF"}
@@ -60,62 +60,6 @@ export function isRecord(value) {
60
60
  export function hasProperty(obj, key) {
61
61
  return isObject(obj) && key in obj;
62
62
  }
63
- /**
64
- * Type guard to check if an object has a property of a specific type.
65
- *
66
- * @param obj - Object to check
67
- * @param key - Property key to look for
68
- * @param typeGuard - Type guard function for the property value
69
- * @returns True if object has the property and it matches the type
70
- *
71
- * @example
72
- * ```typescript
73
- * if (hasPropertyOfType(obj, 'count', (v): v is number => typeof v === 'number')) {
74
- * // obj.count is now typed as number
75
- * console.log(obj.count + 1);
76
- * }
77
- * ```
78
- */
79
- export function hasPropertyOfType(obj, key, typeGuard) {
80
- return hasProperty(obj, key) && typeGuard(obj[key]);
81
- }
82
- /**
83
- * Type guard to check if a value is a string.
84
- *
85
- * @param value - Value to check
86
- * @returns True if value is a string
87
- *
88
- * @example
89
- * ```typescript
90
- * if (isString(value)) {
91
- * // value is now typed as string
92
- * console.log(value.toUpperCase());
93
- * }
94
- * ```
95
- */
96
- export function isString(value) {
97
- return typeof value === 'string';
98
- }
99
- /**
100
- * Type guard to check if a value is a number.
101
- *
102
- * `NaN` is explicitly excluded — `typeof NaN === 'number'` is true in JavaScript,
103
- * but `NaN` is almost never a valid value in the contexts where this guard is used.
104
- *
105
- * @param value - Value to check
106
- * @returns True if value is a finite or infinite number (excluding NaN)
107
- *
108
- * @example
109
- * ```typescript
110
- * if (isNumber(value)) {
111
- * // value is now typed as number (NaN excluded)
112
- * console.log(value.toFixed(2));
113
- * }
114
- * ```
115
- */
116
- export function isNumber(value) {
117
- return typeof value === 'number' && !Number.isNaN(value);
118
- }
119
63
  /**
120
64
  * Type guard to check if an error is an AggregateError.
121
65
  *
@@ -152,22 +96,6 @@ export function isAggregateError(error) {
152
96
  export function isErrorWithCode(error) {
153
97
  return error instanceof Error && hasProperty(error, 'code');
154
98
  }
155
- /**
156
- * Type guard to check if an error has a status property.
157
- *
158
- * @param error - Error to check
159
- * @returns True if error has a status property
160
- *
161
- * @example
162
- * ```typescript
163
- * if (isErrorWithStatus(error)) {
164
- * console.log(`HTTP status: ${error.status}`);
165
- * }
166
- * ```
167
- */
168
- export function isErrorWithStatus(error) {
169
- return error instanceof Error && hasProperty(error, 'status');
170
- }
171
99
  /**
172
100
  * Safely get a property from an object if it exists.
173
101
  *
@@ -184,46 +112,4 @@ export function isErrorWithStatus(error) {
184
112
  export function getProperty(obj, key) {
185
113
  return hasProperty(obj, key) ? obj[key] : undefined;
186
114
  }
187
- /**
188
- * Safely get a string property from an object.
189
- *
190
- * @param obj - Object to get property from
191
- * @param key - Property key
192
- * @returns String value or undefined if property doesn't exist or is not a string
193
- *
194
- * @example
195
- * ```typescript
196
- * const traceId = getStringProperty(context, 'traceId');
197
- * if (traceId) {
198
- * // traceId is typed as string
199
- * console.log(traceId.toUpperCase());
200
- * }
201
- * ```
202
- */
203
- export function getStringProperty(obj, key) {
204
- const value = getProperty(obj, key);
205
- return isString(value) ? value : undefined;
206
- }
207
- /**
208
- * Safely get a number property from an object.
209
- *
210
- * Returns `undefined` if the property is absent, not a number, or is `NaN`.
211
- *
212
- * @param obj - Object to get property from
213
- * @param key - Property key
214
- * @returns Number value or undefined if property doesn't exist, is not a number, or is NaN
215
- *
216
- * @example
217
- * ```typescript
218
- * const retries = getNumberProperty(config, 'maxRetries');
219
- * if (retries !== undefined) {
220
- * // retries is typed as number
221
- * console.log(`Max retries: ${retries}`);
222
- * }
223
- * ```
224
- */
225
- export function getNumberProperty(obj, key) {
226
- const value = getProperty(obj, key);
227
- return isNumber(value) ? value : undefined;
228
- }
229
115
  //# sourceMappingURL=guards.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"guards.js","sourceRoot":"","sources":["../../../src/utils/types/guards.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,WAAW,CACzB,GAAY,EACZ,GAAM;IAEN,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAY,EACZ,GAAM,EACN,SAAyC;IAEzC,OAAO,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;AACnC,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,KAAK,YAAY,KAAK,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC/F,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,KAAK,YAAY,KAAK,IAAI,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,KAAK,YAAY,KAAK,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CAAwB,GAAY,EAAE,GAAM;IACrE,OAAO,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iBAAiB,CAAwB,GAAY,EAAE,GAAM;IAC3E,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,iBAAiB,CAAwB,GAAY,EAAE,GAAM;IAC3E,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"guards.js","sourceRoot":"","sources":["../../../src/utils/types/guards.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,WAAW,CACzB,GAAY,EACZ,GAAM;IAEN,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,KAAK,YAAY,KAAK,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC/F,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,KAAK,YAAY,KAAK,IAAI,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CAAwB,GAAY,EAAE,GAAM;IACrE,OAAO,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@cyanheads/mcp-ts-core",
3
- "version": "0.12.6",
3
+ "version": "0.12.8",
4
4
  "mcpName": "io.github.cyanheads/mcp-ts-core",
5
- "description": "Agent-native TypeScript framework for building MCP servers. Build tools, not infrastructure. Declarative definitions with auth, multi-backend storage, OpenTelemetry, and first-class support for Bun/Node/Cloudflare Workers.",
5
+ "description": "Agent-native TypeScript framework for MCP servers. Includes runtime infrastructure and agent skills for building, testing, and shipping servers.",
6
6
  "files": [
7
7
  "changelog/",
8
8
  "dist/",
@@ -164,6 +164,7 @@
164
164
  "format:unsafe": "biome check --write --unsafe .",
165
165
  "typecheck": "bunx tsc --noEmit",
166
166
  "typecheck:scripts": "bunx tsc --project tsconfig.scripts.json --noEmit",
167
+ "typecheck:worker": "bunx tsc --project tsconfig.worker.json --noEmit",
167
168
  "list-skills": "bun run scripts/list-skills.ts",
168
169
  "tree": "bun run scripts/tree.ts",
169
170
  "fetch-spec": "bun run scripts/fetch-openapi-spec.ts",
@@ -196,23 +197,23 @@
196
197
  "publish-mcp": "mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish"
197
198
  },
198
199
  "devDependencies": {
199
- "@biomejs/biome": "2.5.11",
200
+ "@biomejs/biome": "2.5.12",
200
201
  "@cloudflare/vitest-pool-workers": "^0.22.0",
201
- "@cloudflare/workers-types": "5.20260730.1",
202
+ "@cloudflare/workers-types": "5.20260905.1",
202
203
  "@duckdb/node-api": "^1.5.5-r.4",
203
204
  "@hono/otel": "^1.1.2",
204
- "@opentelemetry/exporter-metrics-otlp-http": "^0.221.0",
205
- "@opentelemetry/exporter-trace-otlp-http": "^0.221.0",
206
- "@opentelemetry/instrumentation-http": "^0.221.0",
207
- "@opentelemetry/instrumentation-pino": "^0.67.0",
208
- "@opentelemetry/resources": "^2.10.0",
209
- "@opentelemetry/sdk-metrics": "^2.10.0",
210
- "@opentelemetry/sdk-node": "^0.221.0",
211
- "@opentelemetry/sdk-trace-node": "^2.10.0",
205
+ "@opentelemetry/exporter-metrics-otlp-http": "^0.222.0",
206
+ "@opentelemetry/exporter-trace-otlp-http": "^0.222.0",
207
+ "@opentelemetry/instrumentation-http": "^0.222.0",
208
+ "@opentelemetry/instrumentation-pino": "^0.68.0",
209
+ "@opentelemetry/resources": "^2.11.0",
210
+ "@opentelemetry/sdk-metrics": "^2.11.0",
211
+ "@opentelemetry/sdk-node": "^0.222.0",
212
+ "@opentelemetry/sdk-trace-node": "^2.11.0",
212
213
  "@opentelemetry/semantic-conventions": "^1.43.0",
213
214
  "@socketsecurity/bun-security-scanner": "^1.1.2",
214
- "@supabase/supabase-js": "^2.112.4",
215
- "@types/bun": "^1.4.0",
215
+ "@supabase/supabase-js": "^2.115.0",
216
+ "@types/bun": "^1.4.1",
216
217
  "@types/node": "26.4.0",
217
218
  "@types/papaparse": "^5.5.2",
218
219
  "@types/sanitize-html": "^2.16.1",
@@ -220,7 +221,7 @@
220
221
  "@vitest/coverage-istanbul": "4.1.11",
221
222
  "@vitest/ui": "4.1.11",
222
223
  "better-sqlite3": "^13.0.3",
223
- "bun-types": "^1.4.0",
224
+ "bun-types": "^1.4.2",
224
225
  "chrono-node": "^2.10.1",
225
226
  "clipboardy": "^5.3.2",
226
227
  "defuddle": "^0.19.3",
@@ -229,18 +230,18 @@
229
230
  "execa": "^10.0.1",
230
231
  "fast-check": "^4.9.0",
231
232
  "fast-xml-parser": "^5.11.1",
232
- "ignore": "^7.0.7",
233
+ "ignore": "^7.0.8",
233
234
  "js-yaml": "^5.4.1",
234
235
  "linkedom": "^0.18.13",
235
236
  "node-cron": "^4.6.0",
236
- "openai": "^7.8.0",
237
+ "openai": "^7.10.0",
237
238
  "papaparse": "^5.7.0",
238
239
  "partial-json": "^0.1.7",
239
240
  "pdf-lib": "^1.17.1",
240
241
  "pino-pretty": "^13.1.3",
241
242
  "repomix": "^1.18.0",
242
243
  "sanitize-html": "^2.17.7",
243
- "tsc-alias": "^1.9.2",
244
+ "tsc-alias": "^1.9.4",
244
245
  "typedoc": "^0.28.20",
245
246
  "typescript": "^7.0.2",
246
247
  "typescript-v6": "npm:typescript@^6.0.3",
@@ -305,21 +306,21 @@
305
306
  "@modelcontextprotocol/server": "^2.0.0",
306
307
  "@opentelemetry/api": "^1.9.1",
307
308
  "dotenv": "^17.4.2",
308
- "hono": "^4.13.5",
309
- "jose": "^6.2.10",
309
+ "hono": "^4.13.7",
310
+ "jose": "^6.2.12",
310
311
  "pino": "^10.3.1",
311
312
  "zod": "^4.5.4"
312
313
  },
313
314
  "peerDependencies": {
314
315
  "@duckdb/node-api": "^1.5.5-r.1",
315
316
  "@hono/otel": "^1.1.2",
316
- "@opentelemetry/instrumentation-http": "^0.221.0",
317
- "@opentelemetry/exporter-metrics-otlp-http": "^0.221.0",
318
- "@opentelemetry/exporter-trace-otlp-http": "^0.221.0",
319
- "@opentelemetry/instrumentation-pino": "^0.66.0",
317
+ "@opentelemetry/instrumentation-http": "^0.222.0",
318
+ "@opentelemetry/exporter-metrics-otlp-http": "^0.222.0",
319
+ "@opentelemetry/exporter-trace-otlp-http": "^0.222.0",
320
+ "@opentelemetry/instrumentation-pino": "^0.68.0",
320
321
  "@opentelemetry/resources": "^2.10.0",
321
322
  "@opentelemetry/sdk-metrics": "^2.10.0",
322
- "@opentelemetry/sdk-node": "^0.221.0",
323
+ "@opentelemetry/sdk-node": "^0.222.0",
323
324
  "@opentelemetry/sdk-trace-node": "^2.10.0",
324
325
  "@opentelemetry/semantic-conventions": "^1.43.0",
325
326
  "@supabase/supabase-js": "^2.110.8",
@@ -15,7 +15,10 @@
15
15
  * `tools/list`, so `z.unknown()` / `z.any()` / `.passthrough()` breaks
16
16
  * schema advertising. Consumer-side `.passthrough()` on output schemas
17
17
  * is a documented escape hatch and stays legal (rule is scoped to
18
- * `src/mcp-server/tools/`).
18
+ * `src/mcp-server/tools/`). The one sanctioned substitution is
19
+ * `deferInputValidation()` (#377): it projects the same JSON Schema and
20
+ * moves only *where* a rejection is reported. Anything that widens what
21
+ * is advertised is still a violation.
19
22
  * 2. Mutating `RegisteredTool.inputSchema` after register breaks
20
23
  * `tools/list` the same way — the SDK reads the stored Zod object at list
21
24
  * time.