matimo 0.1.0-alpha.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.
Files changed (90) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +651 -0
  3. package/dist/auth/oauth2-config.d.ts +104 -0
  4. package/dist/auth/oauth2-config.d.ts.map +1 -0
  5. package/dist/auth/oauth2-config.js +38 -0
  6. package/dist/auth/oauth2-config.js.map +1 -0
  7. package/dist/auth/oauth2-handler.d.ts +130 -0
  8. package/dist/auth/oauth2-handler.d.ts.map +1 -0
  9. package/dist/auth/oauth2-handler.js +265 -0
  10. package/dist/auth/oauth2-handler.js.map +1 -0
  11. package/dist/auth/oauth2-provider-loader.d.ts +68 -0
  12. package/dist/auth/oauth2-provider-loader.d.ts.map +1 -0
  13. package/dist/auth/oauth2-provider-loader.js +120 -0
  14. package/dist/auth/oauth2-provider-loader.js.map +1 -0
  15. package/dist/core/schema.d.ts +238 -0
  16. package/dist/core/schema.d.ts.map +1 -0
  17. package/dist/core/schema.js +168 -0
  18. package/dist/core/schema.js.map +1 -0
  19. package/dist/core/tool-loader.d.ts +29 -0
  20. package/dist/core/tool-loader.d.ts.map +1 -0
  21. package/dist/core/tool-loader.js +98 -0
  22. package/dist/core/tool-loader.js.map +1 -0
  23. package/dist/core/tool-registry.d.ts +48 -0
  24. package/dist/core/tool-registry.d.ts.map +1 -0
  25. package/dist/core/tool-registry.js +89 -0
  26. package/dist/core/tool-registry.js.map +1 -0
  27. package/dist/core/types.d.ts +143 -0
  28. package/dist/core/types.d.ts.map +1 -0
  29. package/dist/core/types.js +5 -0
  30. package/dist/core/types.js.map +1 -0
  31. package/dist/decorators/index.d.ts +2 -0
  32. package/dist/decorators/index.d.ts.map +1 -0
  33. package/dist/decorators/index.js +2 -0
  34. package/dist/decorators/index.js.map +1 -0
  35. package/dist/decorators/tool-decorator.d.ts +97 -0
  36. package/dist/decorators/tool-decorator.d.ts.map +1 -0
  37. package/dist/decorators/tool-decorator.js +154 -0
  38. package/dist/decorators/tool-decorator.js.map +1 -0
  39. package/dist/encodings/parameter-encoding.d.ts +51 -0
  40. package/dist/encodings/parameter-encoding.d.ts.map +1 -0
  41. package/dist/encodings/parameter-encoding.js +116 -0
  42. package/dist/encodings/parameter-encoding.js.map +1 -0
  43. package/dist/errors/matimo-error.d.ts +34 -0
  44. package/dist/errors/matimo-error.d.ts.map +1 -0
  45. package/dist/errors/matimo-error.js +49 -0
  46. package/dist/errors/matimo-error.js.map +1 -0
  47. package/dist/executors/command-executor.d.ts +19 -0
  48. package/dist/executors/command-executor.d.ts.map +1 -0
  49. package/dist/executors/command-executor.js +94 -0
  50. package/dist/executors/command-executor.js.map +1 -0
  51. package/dist/executors/http-executor.d.ts +26 -0
  52. package/dist/executors/http-executor.d.ts.map +1 -0
  53. package/dist/executors/http-executor.js +133 -0
  54. package/dist/executors/http-executor.js.map +1 -0
  55. package/dist/index.d.ts +22 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +23 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/matimo-instance.d.ts +98 -0
  60. package/dist/matimo-instance.d.ts.map +1 -0
  61. package/dist/matimo-instance.js +260 -0
  62. package/dist/matimo-instance.js.map +1 -0
  63. package/docs/Gemfile +5 -0
  64. package/docs/RELEASES.md +69 -0
  65. package/docs/ROADMAP.md +138 -0
  66. package/docs/_config.yml +27 -0
  67. package/docs/api-reference/ERRORS.md +445 -0
  68. package/docs/api-reference/SDK.md +582 -0
  69. package/docs/api-reference/TYPES.md +415 -0
  70. package/docs/architecture/OAUTH.md +1366 -0
  71. package/docs/architecture/OVERVIEW.md +564 -0
  72. package/docs/assets/logo.png +0 -0
  73. package/docs/community/COMMIT_GUIDELINES.md +552 -0
  74. package/docs/framework-integrations/LANGCHAIN.md +286 -0
  75. package/docs/getting-started/QUICK_START.md +211 -0
  76. package/docs/getting-started/YOUR_FIRST_TOOL.md +217 -0
  77. package/docs/getting-started/installation.md +124 -0
  78. package/docs/index.md +288 -0
  79. package/docs/tool-development/DECORATOR_GUIDE.md +633 -0
  80. package/docs/tool-development/OAUTH_LINK.md +5 -0
  81. package/docs/tool-development/PROVIDER_CONFIGURATION.md +458 -0
  82. package/docs/tool-development/TESTING.md +412 -0
  83. package/docs/tool-development/TOOL_SPECIFICATION.md +793 -0
  84. package/docs/tool-development/YAML_TOOLS.md +65 -0
  85. package/docs/troubleshooting/FAQ.md +391 -0
  86. package/docs/user-guide/AUTHENTICATION.md +255 -0
  87. package/docs/user-guide/DEVELOPMENT_STANDARDS.md +698 -0
  88. package/docs/user-guide/SDK_PATTERNS.md +316 -0
  89. package/docs/user-guide/TOOL_DISCOVERY.md +209 -0
  90. package/package.json +96 -0
@@ -0,0 +1,120 @@
1
+ /**
2
+ * OAuth2ProviderLoader - Loads provider definitions from YAML files
3
+ *
4
+ * Pattern: Configuration-driven providers
5
+ * - Loads provider definitions from tools/[provider]/definition.yaml
6
+ * - Discovers providers with type: provider
7
+ * - Makes endpoints available to OAuth2Handler
8
+ * - Supports infinite providers without code changes
9
+ *
10
+ * Usage:
11
+ * ```typescript
12
+ * const loader = new OAuth2ProviderLoader('./tools');
13
+ * const providers = await loader.loadProviders();
14
+ * const googleEndpoints = providers.get('google');
15
+ * ```
16
+ */
17
+ import fs from 'fs/promises';
18
+ import path from 'path';
19
+ import YAML from 'yaml';
20
+ import { MatimoError, ErrorCode } from '../errors/matimo-error';
21
+ import { validateProviderDefinition } from '../core/schema';
22
+ /**
23
+ * OAuth2ProviderLoader - Loads OAuth2 provider configurations from YAML
24
+ *
25
+ * Design Principle:
26
+ * - Configuration-driven: All provider config in YAML files
27
+ * - Discoverable: Automatically finds tools/[provider]/definition.yaml with type: provider
28
+ * - Extensible: Add new providers by adding YAML file, no code changes
29
+ * - Overridable: Users can override via env vars or runtime config
30
+ */
31
+ export class OAuth2ProviderLoader {
32
+ constructor(toolsPath) {
33
+ this.providers = new Map();
34
+ this.definitions = new Map();
35
+ this.toolsPath = toolsPath;
36
+ }
37
+ /**
38
+ * Load all provider definitions from tools directory
39
+ *
40
+ * Discovers tools/[provider]/definition.yaml files with type: provider
41
+ * Validates and stores provider endpoint configurations
42
+ *
43
+ * @returns Map of provider name → OAuth2Endpoints
44
+ * @throws MatimoError if invalid provider definition found
45
+ */
46
+ async loadProviders() {
47
+ try {
48
+ const entries = await fs.readdir(this.toolsPath, { withFileTypes: true });
49
+ for (const entry of entries) {
50
+ if (!entry.isDirectory())
51
+ continue;
52
+ const definitionPath = path.join(this.toolsPath, entry.name, 'definition.yaml');
53
+ try {
54
+ const content = await fs.readFile(definitionPath, 'utf-8');
55
+ const definition = YAML.parse(content);
56
+ // Check if this is a provider definition
57
+ if (definition.type === 'provider') {
58
+ this.validateProviderDefinition(definition);
59
+ this.registerProvider(definition);
60
+ }
61
+ }
62
+ catch {
63
+ // If file doesn't exist or isn't valid YAML, skip silently
64
+ // Not all provider directories will have provider definitions
65
+ }
66
+ }
67
+ return this.providers;
68
+ }
69
+ catch (error) {
70
+ throw new MatimoError('Failed to load OAuth2 provider definitions', ErrorCode.TOOL_NOT_FOUND, {
71
+ toolsPath: this.toolsPath,
72
+ error: error.message,
73
+ });
74
+ }
75
+ }
76
+ /**
77
+ * Get endpoints for a specific provider
78
+ * @param providerName - Name of the provider (e.g., 'google', 'github')
79
+ * @returns OAuth2Endpoints or undefined if provider not found
80
+ */
81
+ getProvider(providerName) {
82
+ return this.providers.get(providerName);
83
+ }
84
+ /**
85
+ * Get full provider definition
86
+ * @param providerName - Name of the provider
87
+ * @returns ProviderDefinition or undefined if provider not found
88
+ */
89
+ getDefinition(providerName) {
90
+ return this.definitions.get(providerName);
91
+ }
92
+ /**
93
+ * List all loaded providers
94
+ */
95
+ listProviders() {
96
+ return Array.from(this.providers.keys());
97
+ }
98
+ /**
99
+ * Validate provider definition structure using Zod schema
100
+ */
101
+ validateProviderDefinition(definition) {
102
+ try {
103
+ // Use Zod schema validation for consistency with tool validation
104
+ validateProviderDefinition(definition);
105
+ }
106
+ catch (error) {
107
+ const message = error instanceof Error ? error.message : String(error);
108
+ throw new MatimoError(`Provider validation failed: ${message}`, ErrorCode.INVALID_SCHEMA);
109
+ }
110
+ }
111
+ /**
112
+ * Register a provider definition
113
+ */
114
+ registerProvider(definition) {
115
+ const providerName = definition.provider.name;
116
+ this.providers.set(providerName, definition.provider.endpoints);
117
+ this.definitions.set(providerName, definition);
118
+ }
119
+ }
120
+ //# sourceMappingURL=oauth2-provider-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth2-provider-loader.js","sourceRoot":"","sources":["../../src/auth/oauth2-provider-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,238 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Core Zod validation schemas for all Matimo tool properties.
4
+ * These schemas ensure YAML tools conform to the spec on load.
5
+ */
6
+ export declare const ParameterSchema: z.ZodObject<{
7
+ type: z.ZodEnum<{
8
+ string: "string";
9
+ number: "number";
10
+ boolean: "boolean";
11
+ object: "object";
12
+ array: "array";
13
+ }>;
14
+ description: z.ZodString;
15
+ required: z.ZodOptional<z.ZodBoolean>;
16
+ enum: z.ZodOptional<z.ZodArray<z.ZodAny>>;
17
+ default: z.ZodOptional<z.ZodAny>;
18
+ examples: z.ZodOptional<z.ZodArray<z.ZodAny>>;
19
+ }, z.core.$strip>;
20
+ export type Parameter = z.infer<typeof ParameterSchema>;
21
+ export declare const AuthConfigSchema: z.ZodObject<{
22
+ type: z.ZodOptional<z.ZodEnum<{
23
+ api_key: "api_key";
24
+ oauth2: "oauth2";
25
+ basic: "basic";
26
+ bearer: "bearer";
27
+ custom: "custom";
28
+ }>>;
29
+ location: z.ZodOptional<z.ZodEnum<{
30
+ body: "body";
31
+ header: "header";
32
+ query: "query";
33
+ }>>;
34
+ name: z.ZodOptional<z.ZodString>;
35
+ provider: z.ZodOptional<z.ZodString>;
36
+ required: z.ZodOptional<z.ZodBoolean>;
37
+ }, z.core.$strip>;
38
+ export type AuthConfig = z.infer<typeof AuthConfigSchema>;
39
+ export declare const ExecutionConfigSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
40
+ type: z.ZodLiteral<"command">;
41
+ command: z.ZodString;
42
+ args: z.ZodOptional<z.ZodArray<z.ZodString>>;
43
+ cwd: z.ZodOptional<z.ZodString>;
44
+ shell: z.ZodOptional<z.ZodBoolean>;
45
+ timeout: z.ZodOptional<z.ZodNumber>;
46
+ }, z.core.$strip>, z.ZodObject<{
47
+ type: z.ZodLiteral<"http">;
48
+ method: z.ZodEnum<{
49
+ GET: "GET";
50
+ POST: "POST";
51
+ PUT: "PUT";
52
+ DELETE: "DELETE";
53
+ PATCH: "PATCH";
54
+ }>;
55
+ url: z.ZodString;
56
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
57
+ body: z.ZodOptional<z.ZodUnknown>;
58
+ query_params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
59
+ parameter_encoding: z.ZodOptional<z.ZodArray<z.ZodObject<{
60
+ source: z.ZodArray<z.ZodString>;
61
+ target: z.ZodString;
62
+ encoding: z.ZodString;
63
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
64
+ }, z.core.$strip>>>;
65
+ timeout: z.ZodOptional<z.ZodNumber>;
66
+ }, z.core.$strip>], "type">;
67
+ export type ExecutionConfig = z.infer<typeof ExecutionConfigSchema>;
68
+ export declare const OutputSchemaSchema: z.ZodObject<{
69
+ type: z.ZodOptional<z.ZodString>;
70
+ properties: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
71
+ required: z.ZodOptional<z.ZodArray<z.ZodString>>;
72
+ description: z.ZodOptional<z.ZodString>;
73
+ }, z.core.$strip>;
74
+ export type OutputSchema = z.infer<typeof OutputSchemaSchema>;
75
+ export declare const ErrorHandlingSchema: z.ZodObject<{
76
+ retry: z.ZodOptional<z.ZodNumber>;
77
+ backoff_type: z.ZodOptional<z.ZodEnum<{
78
+ exponential: "exponential";
79
+ linear: "linear";
80
+ }>>;
81
+ initial_delay_ms: z.ZodOptional<z.ZodNumber>;
82
+ max_delay_ms: z.ZodOptional<z.ZodNumber>;
83
+ }, z.core.$strip>;
84
+ export type ErrorHandling = z.infer<typeof ErrorHandlingSchema>;
85
+ export declare const RateLimitingSchema: z.ZodObject<{
86
+ enabled: z.ZodOptional<z.ZodBoolean>;
87
+ requests_per_minute: z.ZodOptional<z.ZodNumber>;
88
+ burst_size: z.ZodOptional<z.ZodNumber>;
89
+ quota_per_hour: z.ZodOptional<z.ZodNumber>;
90
+ }, z.core.$strip>;
91
+ export type RateLimiting = z.infer<typeof RateLimitingSchema>;
92
+ export declare const ToolDefinitionSchema: z.ZodObject<{
93
+ name: z.ZodString;
94
+ description: z.ZodString;
95
+ version: z.ZodString;
96
+ parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
97
+ type: z.ZodEnum<{
98
+ string: "string";
99
+ number: "number";
100
+ boolean: "boolean";
101
+ object: "object";
102
+ array: "array";
103
+ }>;
104
+ description: z.ZodString;
105
+ required: z.ZodOptional<z.ZodBoolean>;
106
+ enum: z.ZodOptional<z.ZodArray<z.ZodAny>>;
107
+ default: z.ZodOptional<z.ZodAny>;
108
+ examples: z.ZodOptional<z.ZodArray<z.ZodAny>>;
109
+ }, z.core.$strip>>>;
110
+ execution: z.ZodDiscriminatedUnion<[z.ZodObject<{
111
+ type: z.ZodLiteral<"command">;
112
+ command: z.ZodString;
113
+ args: z.ZodOptional<z.ZodArray<z.ZodString>>;
114
+ cwd: z.ZodOptional<z.ZodString>;
115
+ shell: z.ZodOptional<z.ZodBoolean>;
116
+ timeout: z.ZodOptional<z.ZodNumber>;
117
+ }, z.core.$strip>, z.ZodObject<{
118
+ type: z.ZodLiteral<"http">;
119
+ method: z.ZodEnum<{
120
+ GET: "GET";
121
+ POST: "POST";
122
+ PUT: "PUT";
123
+ DELETE: "DELETE";
124
+ PATCH: "PATCH";
125
+ }>;
126
+ url: z.ZodString;
127
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
128
+ body: z.ZodOptional<z.ZodUnknown>;
129
+ query_params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
130
+ parameter_encoding: z.ZodOptional<z.ZodArray<z.ZodObject<{
131
+ source: z.ZodArray<z.ZodString>;
132
+ target: z.ZodString;
133
+ encoding: z.ZodString;
134
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
135
+ }, z.core.$strip>>>;
136
+ timeout: z.ZodOptional<z.ZodNumber>;
137
+ }, z.core.$strip>], "type">;
138
+ authentication: z.ZodOptional<z.ZodObject<{
139
+ type: z.ZodOptional<z.ZodEnum<{
140
+ api_key: "api_key";
141
+ oauth2: "oauth2";
142
+ basic: "basic";
143
+ bearer: "bearer";
144
+ custom: "custom";
145
+ }>>;
146
+ location: z.ZodOptional<z.ZodEnum<{
147
+ body: "body";
148
+ header: "header";
149
+ query: "query";
150
+ }>>;
151
+ name: z.ZodOptional<z.ZodString>;
152
+ provider: z.ZodOptional<z.ZodString>;
153
+ required: z.ZodOptional<z.ZodBoolean>;
154
+ }, z.core.$strip>>;
155
+ output_schema: z.ZodOptional<z.ZodObject<{
156
+ type: z.ZodOptional<z.ZodString>;
157
+ properties: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
158
+ required: z.ZodOptional<z.ZodArray<z.ZodString>>;
159
+ description: z.ZodOptional<z.ZodString>;
160
+ }, z.core.$strip>>;
161
+ error_handling: z.ZodOptional<z.ZodObject<{
162
+ retry: z.ZodOptional<z.ZodNumber>;
163
+ backoff_type: z.ZodOptional<z.ZodEnum<{
164
+ exponential: "exponential";
165
+ linear: "linear";
166
+ }>>;
167
+ initial_delay_ms: z.ZodOptional<z.ZodNumber>;
168
+ max_delay_ms: z.ZodOptional<z.ZodNumber>;
169
+ }, z.core.$strip>>;
170
+ rate_limiting: z.ZodOptional<z.ZodObject<{
171
+ enabled: z.ZodOptional<z.ZodBoolean>;
172
+ requests_per_minute: z.ZodOptional<z.ZodNumber>;
173
+ burst_size: z.ZodOptional<z.ZodNumber>;
174
+ quota_per_hour: z.ZodOptional<z.ZodNumber>;
175
+ }, z.core.$strip>>;
176
+ examples: z.ZodOptional<z.ZodArray<z.ZodObject<{
177
+ name: z.ZodString;
178
+ params: z.ZodRecord<z.ZodString, z.ZodUnknown>;
179
+ description: z.ZodOptional<z.ZodString>;
180
+ }, z.core.$strip>>>;
181
+ deprecated: z.ZodOptional<z.ZodBoolean>;
182
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
183
+ }, z.core.$strip>;
184
+ export type ToolDefinition = z.infer<typeof ToolDefinitionSchema>;
185
+ export declare const OAuth2EndpointsSchema: z.ZodObject<{
186
+ authorizationUrl: z.ZodString;
187
+ tokenUrl: z.ZodString;
188
+ revokeUrl: z.ZodOptional<z.ZodString>;
189
+ }, z.core.$strip>;
190
+ export type OAuth2Endpoints = z.infer<typeof OAuth2EndpointsSchema>;
191
+ export declare const ProviderDefinitionSchema: z.ZodObject<{
192
+ name: z.ZodString;
193
+ type: z.ZodLiteral<"provider">;
194
+ version: z.ZodString;
195
+ description: z.ZodOptional<z.ZodString>;
196
+ provider: z.ZodObject<{
197
+ name: z.ZodString;
198
+ displayName: z.ZodOptional<z.ZodString>;
199
+ endpoints: z.ZodObject<{
200
+ authorizationUrl: z.ZodString;
201
+ tokenUrl: z.ZodString;
202
+ revokeUrl: z.ZodOptional<z.ZodString>;
203
+ }, z.core.$strip>;
204
+ defaultScopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
205
+ documentation: z.ZodOptional<z.ZodString>;
206
+ learnMore: z.ZodOptional<z.ZodString>;
207
+ }, z.core.$strip>;
208
+ }, z.core.$strip>;
209
+ export type ProviderDefinition = z.infer<typeof ProviderDefinitionSchema>;
210
+ /**
211
+ * Validate a tool definition against the schema
212
+ * Provides detailed error messages for validation failures
213
+ *
214
+ * @param tool - Tool definition to validate
215
+ * @returns Validated tool definition
216
+ * @throws {Error} If validation fails with detailed error information
217
+ *
218
+ * @example
219
+ * ```typescript
220
+ * try {
221
+ * const tool = validateToolDefinition(parsedYAML);
222
+ * } catch (error) {
223
+ * console.error('Invalid tool:', error.message);
224
+ * // Error message includes specific field and validation issue
225
+ * }
226
+ * ```
227
+ */
228
+ export declare function validateToolDefinition(tool: unknown): ToolDefinition;
229
+ /**
230
+ * Validate a provider definition against the schema
231
+ * Provides detailed error messages for validation failures
232
+ *
233
+ * @param provider - Provider definition to validate
234
+ * @returns Validated provider definition
235
+ * @throws {Error} If validation fails with detailed error information
236
+ */
237
+ export declare function validateProviderDefinition(provider: unknown): ProviderDefinition;
238
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AAGH,eAAO,MAAM,eAAe;;;;;;;;;;;;;iBAO1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAGxD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;iBAM3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAG1D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;2BA4BhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAGpE,eAAO,MAAM,kBAAkB;;;;;iBAK7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAG9D,eAAO,MAAM,mBAAmB;;;;;;;;iBAK9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAGhE,eAAO,MAAM,kBAAkB;;;;;iBAK7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAG9D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqB/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAGlE,eAAO,MAAM,qBAAqB;;;;iBAIhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAGpE,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;iBAanC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,cAAc,CAgBpE;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,OAAO,GAAG,kBAAkB,CAgBhF"}
@@ -0,0 +1,168 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Core Zod validation schemas for all Matimo tool properties.
4
+ * These schemas ensure YAML tools conform to the spec on load.
5
+ */
6
+ // Parameter types that tools can define
7
+ export const ParameterSchema = z.object({
8
+ type: z.enum(['string', 'number', 'boolean', 'array', 'object']),
9
+ description: z.string(),
10
+ required: z.boolean().optional(),
11
+ enum: z.array(z.any()).optional(),
12
+ default: z.any().optional(),
13
+ examples: z.array(z.any()).optional(),
14
+ });
15
+ // Authentication configuration
16
+ export const AuthConfigSchema = z.object({
17
+ type: z.enum(['api_key', 'basic', 'bearer', 'oauth2', 'custom']).optional(),
18
+ location: z.enum(['header', 'query', 'body']).optional(),
19
+ name: z.string().optional(),
20
+ provider: z.string().optional(),
21
+ required: z.boolean().optional(),
22
+ });
23
+ // Execution configuration (command or HTTP)
24
+ export const ExecutionConfigSchema = z.discriminatedUnion('type', [
25
+ z.object({
26
+ type: z.literal('command'),
27
+ command: z.string(),
28
+ args: z.array(z.string()).optional(),
29
+ cwd: z.string().optional(),
30
+ shell: z.boolean().optional(),
31
+ timeout: z.number().optional(),
32
+ }),
33
+ z.object({
34
+ type: z.literal('http'),
35
+ method: z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH']),
36
+ url: z.string(),
37
+ headers: z.record(z.string(), z.string()).optional(),
38
+ body: z.unknown().optional(),
39
+ query_params: z.record(z.string(), z.string()).optional(),
40
+ parameter_encoding: z
41
+ .array(z.object({
42
+ source: z.array(z.string()),
43
+ target: z.string(),
44
+ encoding: z.string(),
45
+ options: z.record(z.string(), z.unknown()).optional(),
46
+ }))
47
+ .optional(),
48
+ timeout: z.number().optional(),
49
+ }),
50
+ ]);
51
+ // Output schema for validation
52
+ export const OutputSchemaSchema = z.object({
53
+ type: z.string().optional(),
54
+ properties: z.record(z.string(), z.unknown()).optional(),
55
+ required: z.array(z.string()).optional(),
56
+ description: z.string().optional(),
57
+ });
58
+ // Error handling configuration
59
+ export const ErrorHandlingSchema = z.object({
60
+ retry: z.number().optional(),
61
+ backoff_type: z.enum(['linear', 'exponential']).optional(),
62
+ initial_delay_ms: z.number().optional(),
63
+ max_delay_ms: z.number().optional(),
64
+ });
65
+ // Rate limiting configuration
66
+ export const RateLimitingSchema = z.object({
67
+ enabled: z.boolean().optional(),
68
+ requests_per_minute: z.number().optional(),
69
+ burst_size: z.number().optional(),
70
+ quota_per_hour: z.number().optional(),
71
+ });
72
+ // Complete tool definition
73
+ export const ToolDefinitionSchema = z.object({
74
+ name: z.string(),
75
+ description: z.string(),
76
+ version: z.string(),
77
+ parameters: z.record(z.string(), ParameterSchema).optional(),
78
+ execution: ExecutionConfigSchema,
79
+ authentication: AuthConfigSchema.optional(),
80
+ output_schema: OutputSchemaSchema.optional(),
81
+ error_handling: ErrorHandlingSchema.optional(),
82
+ rate_limiting: RateLimitingSchema.optional(),
83
+ examples: z
84
+ .array(z.object({
85
+ name: z.string(),
86
+ params: z.record(z.string(), z.unknown()),
87
+ description: z.string().optional(),
88
+ }))
89
+ .optional(),
90
+ deprecated: z.boolean().optional(),
91
+ tags: z.array(z.string()).optional(),
92
+ });
93
+ // OAuth2 provider endpoints schema
94
+ export const OAuth2EndpointsSchema = z.object({
95
+ authorizationUrl: z.string().url(),
96
+ tokenUrl: z.string().url(),
97
+ revokeUrl: z.string().url().optional(),
98
+ });
99
+ // Provider definition schema
100
+ export const ProviderDefinitionSchema = z.object({
101
+ name: z.string(),
102
+ type: z.literal('provider'),
103
+ version: z.string(),
104
+ description: z.string().optional(),
105
+ provider: z.object({
106
+ name: z.string(),
107
+ displayName: z.string().optional(),
108
+ endpoints: OAuth2EndpointsSchema,
109
+ defaultScopes: z.array(z.string()).optional(),
110
+ documentation: z.string().url().optional(),
111
+ learnMore: z.string().url().optional(),
112
+ }),
113
+ });
114
+ /**
115
+ * Validate a tool definition against the schema
116
+ * Provides detailed error messages for validation failures
117
+ *
118
+ * @param tool - Tool definition to validate
119
+ * @returns Validated tool definition
120
+ * @throws {Error} If validation fails with detailed error information
121
+ *
122
+ * @example
123
+ * ```typescript
124
+ * try {
125
+ * const tool = validateToolDefinition(parsedYAML);
126
+ * } catch (error) {
127
+ * console.error('Invalid tool:', error.message);
128
+ * // Error message includes specific field and validation issue
129
+ * }
130
+ * ```
131
+ */
132
+ export function validateToolDefinition(tool) {
133
+ const result = ToolDefinitionSchema.safeParse(tool);
134
+ if (!result.success) {
135
+ // Format detailed error messages from Zod v4
136
+ const errors = result.error.issues
137
+ .map((issue) => {
138
+ const path = issue.path.length > 0 ? issue.path.join('.') : 'root';
139
+ return ` • ${path}: ${issue.message} (${issue.code})`;
140
+ })
141
+ .join('\n');
142
+ throw new Error(`Tool schema validation failed:\n${errors}`);
143
+ }
144
+ return result.data;
145
+ }
146
+ /**
147
+ * Validate a provider definition against the schema
148
+ * Provides detailed error messages for validation failures
149
+ *
150
+ * @param provider - Provider definition to validate
151
+ * @returns Validated provider definition
152
+ * @throws {Error} If validation fails with detailed error information
153
+ */
154
+ export function validateProviderDefinition(provider) {
155
+ const result = ProviderDefinitionSchema.safeParse(provider);
156
+ if (!result.success) {
157
+ // Format detailed error messages from Zod v4
158
+ const errors = result.error.issues
159
+ .map((issue) => {
160
+ const path = issue.path.length > 0 ? issue.path.join('.') : 'root';
161
+ return ` • ${path}: ${issue.message} (${issue.code})`;
162
+ })
163
+ .join('\n');
164
+ throw new Error(`Provider schema validation failed:\n${errors}`);
165
+ }
166
+ return result.data;
167
+ }
168
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { ToolDefinition } from './schema';
2
+ /**
3
+ * Tool Loader - Loads and validates YAML/JSON tool definitions
4
+ * Implements TDD pattern: test failures guide implementation
5
+ */
6
+ export declare class ToolLoader {
7
+ /**
8
+ * Load a single tool from a YAML or JSON file
9
+ * @param filePath - Path to tool definition file
10
+ * @returns Validated tool definition
11
+ * @throws {Error} If file not found or invalid schema
12
+ */
13
+ loadToolFromFile(filePath: string): ToolDefinition;
14
+ /**
15
+ * Load all tools from a directory
16
+ * @param dirPath - Path to directory containing tool files
17
+ * @returns Map of tool names to definitions
18
+ * @note Prefers definition.yaml/definition.json over tool.yaml/tool.json
19
+ */
20
+ loadToolsFromDirectory(dirPath: string): Map<string, ToolDefinition>;
21
+ /**
22
+ * Load a tool from a JSON object
23
+ * @param data - Tool definition as object
24
+ * @returns Validated tool definition
25
+ */
26
+ loadToolFromObject(data: unknown): ToolDefinition;
27
+ }
28
+ export default ToolLoader;
29
+ //# sourceMappingURL=tool-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-loader.d.ts","sourceRoot":"","sources":["../../src/core/tool-loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAA0B,MAAM,UAAU,CAAC;AAElE;;;GAGG;AAEH,qBAAa,UAAU;IACrB;;;;;OAKG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc;IA6BlD;;;;;OAKG;IACH,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAgDpE;;;;OAIG;IACH,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,cAAc;CAGlD;AAED,eAAe,UAAU,CAAC"}