matimo 0.1.0-alpha.9 → 0.1.2

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 (186) hide show
  1. package/package.json +10 -8
  2. package/packages/cli/dist/bin.d.ts +3 -0
  3. package/packages/cli/dist/bin.d.ts.map +1 -0
  4. package/packages/cli/dist/bin.js +50 -0
  5. package/packages/cli/dist/bin.js.map +1 -0
  6. package/packages/cli/dist/cli.d.ts.map +1 -1
  7. package/packages/cli/dist/cli.js +64 -2
  8. package/packages/cli/dist/cli.js.map +1 -1
  9. package/packages/cli/dist/commands/doctor.d.ts +2 -0
  10. package/packages/cli/dist/commands/doctor.d.ts.map +1 -0
  11. package/packages/cli/dist/commands/doctor.js +174 -0
  12. package/packages/cli/dist/commands/doctor.js.map +1 -0
  13. package/packages/cli/dist/commands/mcp-setup.d.ts +9 -0
  14. package/packages/cli/dist/commands/mcp-setup.d.ts.map +1 -0
  15. package/packages/cli/dist/commands/mcp-setup.js +106 -0
  16. package/packages/cli/dist/commands/mcp-setup.js.map +1 -0
  17. package/packages/cli/dist/commands/mcp.d.ts +17 -0
  18. package/packages/cli/dist/commands/mcp.d.ts.map +1 -0
  19. package/packages/cli/dist/commands/mcp.js +228 -0
  20. package/packages/cli/dist/commands/mcp.js.map +1 -0
  21. package/packages/cli/dist/commands/review.d.ts +10 -0
  22. package/packages/cli/dist/commands/review.d.ts.map +1 -0
  23. package/packages/cli/dist/commands/review.js +176 -0
  24. package/packages/cli/dist/commands/review.js.map +1 -0
  25. package/packages/core/dist/approval/approval-handler.d.ts +5 -1
  26. package/packages/core/dist/approval/approval-handler.d.ts.map +1 -1
  27. package/packages/core/dist/approval/approval-handler.js +7 -1
  28. package/packages/core/dist/approval/approval-handler.js.map +1 -1
  29. package/packages/core/dist/auth/oauth2-handler.d.ts +2 -2
  30. package/packages/core/dist/auth/oauth2-handler.d.ts.map +1 -1
  31. package/packages/core/dist/auth/oauth2-handler.js +2 -2
  32. package/packages/core/dist/auth/oauth2-handler.js.map +1 -1
  33. package/packages/core/dist/auth/oauth2-provider-loader.d.ts +2 -2
  34. package/packages/core/dist/auth/oauth2-provider-loader.d.ts.map +1 -1
  35. package/packages/core/dist/auth/oauth2-provider-loader.js +2 -2
  36. package/packages/core/dist/auth/oauth2-provider-loader.js.map +1 -1
  37. package/packages/core/dist/core/schema.d.ts +42 -11
  38. package/packages/core/dist/core/schema.d.ts.map +1 -1
  39. package/packages/core/dist/core/schema.js +42 -6
  40. package/packages/core/dist/core/schema.js.map +1 -1
  41. package/packages/core/dist/core/skill-content-parser.d.ts +91 -0
  42. package/packages/core/dist/core/skill-content-parser.d.ts.map +1 -0
  43. package/packages/core/dist/core/skill-content-parser.js +248 -0
  44. package/packages/core/dist/core/skill-content-parser.js.map +1 -0
  45. package/packages/core/dist/core/skill-loader.d.ts +46 -0
  46. package/packages/core/dist/core/skill-loader.d.ts.map +1 -0
  47. package/packages/core/dist/core/skill-loader.js +311 -0
  48. package/packages/core/dist/core/skill-loader.js.map +1 -0
  49. package/packages/core/dist/core/skill-registry.d.ts +131 -0
  50. package/packages/core/dist/core/skill-registry.d.ts.map +1 -0
  51. package/packages/core/dist/core/skill-registry.js +316 -0
  52. package/packages/core/dist/core/skill-registry.js.map +1 -0
  53. package/packages/core/dist/core/tfidf-embedding.d.ts +45 -0
  54. package/packages/core/dist/core/tfidf-embedding.d.ts.map +1 -0
  55. package/packages/core/dist/core/tfidf-embedding.js +199 -0
  56. package/packages/core/dist/core/tfidf-embedding.js.map +1 -0
  57. package/packages/core/dist/core/tool-loader.d.ts +4 -2
  58. package/packages/core/dist/core/tool-loader.d.ts.map +1 -1
  59. package/packages/core/dist/core/tool-loader.js +35 -12
  60. package/packages/core/dist/core/tool-loader.js.map +1 -1
  61. package/packages/core/dist/core/tool-registry.d.ts +1 -1
  62. package/packages/core/dist/core/tool-registry.d.ts.map +1 -1
  63. package/packages/core/dist/core/tool-registry.js +1 -1
  64. package/packages/core/dist/core/tool-registry.js.map +1 -1
  65. package/packages/core/dist/core/types.d.ts +204 -7
  66. package/packages/core/dist/core/types.d.ts.map +1 -1
  67. package/packages/core/dist/decorators/index.d.ts +1 -1
  68. package/packages/core/dist/decorators/index.d.ts.map +1 -1
  69. package/packages/core/dist/decorators/index.js +1 -1
  70. package/packages/core/dist/decorators/index.js.map +1 -1
  71. package/packages/core/dist/decorators/tool-decorator.js +1 -1
  72. package/packages/core/dist/decorators/tool-decorator.js.map +1 -1
  73. package/packages/core/dist/encodings/parameter-encoding.d.ts +1 -1
  74. package/packages/core/dist/encodings/parameter-encoding.d.ts.map +1 -1
  75. package/packages/core/dist/encodings/parameter-encoding.js +10 -5
  76. package/packages/core/dist/encodings/parameter-encoding.js.map +1 -1
  77. package/packages/core/dist/errors/matimo-error.d.ts +11 -2
  78. package/packages/core/dist/errors/matimo-error.d.ts.map +1 -1
  79. package/packages/core/dist/errors/matimo-error.js +25 -1
  80. package/packages/core/dist/errors/matimo-error.js.map +1 -1
  81. package/packages/core/dist/executors/command-executor.d.ts +10 -3
  82. package/packages/core/dist/executors/command-executor.d.ts.map +1 -1
  83. package/packages/core/dist/executors/command-executor.js +30 -6
  84. package/packages/core/dist/executors/command-executor.js.map +1 -1
  85. package/packages/core/dist/executors/function-executor.d.ts +11 -4
  86. package/packages/core/dist/executors/function-executor.d.ts.map +1 -1
  87. package/packages/core/dist/executors/function-executor.js +46 -26
  88. package/packages/core/dist/executors/function-executor.js.map +1 -1
  89. package/packages/core/dist/executors/http-executor.d.ts +80 -5
  90. package/packages/core/dist/executors/http-executor.d.ts.map +1 -1
  91. package/packages/core/dist/executors/http-executor.js +233 -29
  92. package/packages/core/dist/executors/http-executor.js.map +1 -1
  93. package/packages/core/dist/index.d.ts +45 -23
  94. package/packages/core/dist/index.d.ts.map +1 -1
  95. package/packages/core/dist/index.js +34 -16
  96. package/packages/core/dist/index.js.map +1 -1
  97. package/packages/core/dist/integrations/langchain.d.ts +57 -2
  98. package/packages/core/dist/integrations/langchain.d.ts.map +1 -1
  99. package/packages/core/dist/integrations/langchain.js +71 -4
  100. package/packages/core/dist/integrations/langchain.js.map +1 -1
  101. package/packages/core/dist/logging/winston-logger.d.ts.map +1 -1
  102. package/packages/core/dist/logging/winston-logger.js +9 -1
  103. package/packages/core/dist/logging/winston-logger.js.map +1 -1
  104. package/packages/core/dist/matimo-instance.d.ts +231 -19
  105. package/packages/core/dist/matimo-instance.d.ts.map +1 -1
  106. package/packages/core/dist/matimo-instance.js +747 -48
  107. package/packages/core/dist/matimo-instance.js.map +1 -1
  108. package/packages/core/dist/mcp/index.d.ts +18 -0
  109. package/packages/core/dist/mcp/index.d.ts.map +1 -0
  110. package/packages/core/dist/mcp/index.js +24 -0
  111. package/packages/core/dist/mcp/index.js.map +1 -0
  112. package/packages/core/dist/mcp/mcp-server.d.ts +141 -0
  113. package/packages/core/dist/mcp/mcp-server.d.ts.map +1 -0
  114. package/packages/core/dist/mcp/mcp-server.js +754 -0
  115. package/packages/core/dist/mcp/mcp-server.js.map +1 -0
  116. package/packages/core/dist/mcp/secrets/aws-resolver.d.ts +41 -0
  117. package/packages/core/dist/mcp/secrets/aws-resolver.d.ts.map +1 -0
  118. package/packages/core/dist/mcp/secrets/aws-resolver.js +141 -0
  119. package/packages/core/dist/mcp/secrets/aws-resolver.js.map +1 -0
  120. package/packages/core/dist/mcp/secrets/dotenv-resolver.d.ts +23 -0
  121. package/packages/core/dist/mcp/secrets/dotenv-resolver.d.ts.map +1 -0
  122. package/packages/core/dist/mcp/secrets/dotenv-resolver.js +94 -0
  123. package/packages/core/dist/mcp/secrets/dotenv-resolver.js.map +1 -0
  124. package/packages/core/dist/mcp/secrets/env-resolver.d.ts +14 -0
  125. package/packages/core/dist/mcp/secrets/env-resolver.d.ts.map +1 -0
  126. package/packages/core/dist/mcp/secrets/env-resolver.js +27 -0
  127. package/packages/core/dist/mcp/secrets/env-resolver.js.map +1 -0
  128. package/packages/core/dist/mcp/secrets/index.d.ts +14 -0
  129. package/packages/core/dist/mcp/secrets/index.d.ts.map +1 -0
  130. package/packages/core/dist/mcp/secrets/index.js +13 -0
  131. package/packages/core/dist/mcp/secrets/index.js.map +1 -0
  132. package/packages/core/dist/mcp/secrets/resolver-chain.d.ts +34 -0
  133. package/packages/core/dist/mcp/secrets/resolver-chain.d.ts.map +1 -0
  134. package/packages/core/dist/mcp/secrets/resolver-chain.js +141 -0
  135. package/packages/core/dist/mcp/secrets/resolver-chain.js.map +1 -0
  136. package/packages/core/dist/mcp/secrets/types.d.ts +73 -0
  137. package/packages/core/dist/mcp/secrets/types.d.ts.map +1 -0
  138. package/packages/core/dist/mcp/secrets/types.js +8 -0
  139. package/packages/core/dist/mcp/secrets/types.js.map +1 -0
  140. package/packages/core/dist/mcp/secrets/vault-resolver.d.ts +43 -0
  141. package/packages/core/dist/mcp/secrets/vault-resolver.d.ts.map +1 -0
  142. package/packages/core/dist/mcp/secrets/vault-resolver.js +127 -0
  143. package/packages/core/dist/mcp/secrets/vault-resolver.js.map +1 -0
  144. package/packages/core/dist/mcp/tool-converter.d.ts +40 -0
  145. package/packages/core/dist/mcp/tool-converter.d.ts.map +1 -0
  146. package/packages/core/dist/mcp/tool-converter.js +185 -0
  147. package/packages/core/dist/mcp/tool-converter.js.map +1 -0
  148. package/packages/core/dist/policy/approval-manifest.d.ts +76 -0
  149. package/packages/core/dist/policy/approval-manifest.d.ts.map +1 -0
  150. package/packages/core/dist/policy/approval-manifest.js +197 -0
  151. package/packages/core/dist/policy/approval-manifest.js.map +1 -0
  152. package/packages/core/dist/policy/content-validator.d.ts +19 -0
  153. package/packages/core/dist/policy/content-validator.d.ts.map +1 -0
  154. package/packages/core/dist/policy/content-validator.js +196 -0
  155. package/packages/core/dist/policy/content-validator.js.map +1 -0
  156. package/packages/core/dist/policy/default-policy.d.ts +46 -0
  157. package/packages/core/dist/policy/default-policy.d.ts.map +1 -0
  158. package/packages/core/dist/policy/default-policy.js +241 -0
  159. package/packages/core/dist/policy/default-policy.js.map +1 -0
  160. package/packages/core/dist/policy/events.d.ts +71 -0
  161. package/packages/core/dist/policy/events.d.ts.map +1 -0
  162. package/packages/core/dist/policy/events.js +8 -0
  163. package/packages/core/dist/policy/events.js.map +1 -0
  164. package/packages/core/dist/policy/index.d.ts +13 -0
  165. package/packages/core/dist/policy/index.d.ts.map +1 -0
  166. package/packages/core/dist/policy/index.js +9 -0
  167. package/packages/core/dist/policy/index.js.map +1 -0
  168. package/packages/core/dist/policy/integrity-tracker.d.ts +62 -0
  169. package/packages/core/dist/policy/integrity-tracker.d.ts.map +1 -0
  170. package/packages/core/dist/policy/integrity-tracker.js +79 -0
  171. package/packages/core/dist/policy/integrity-tracker.js.map +1 -0
  172. package/packages/core/dist/policy/policy-loader.d.ts +58 -0
  173. package/packages/core/dist/policy/policy-loader.d.ts.map +1 -0
  174. package/packages/core/dist/policy/policy-loader.js +156 -0
  175. package/packages/core/dist/policy/policy-loader.js.map +1 -0
  176. package/packages/core/dist/policy/risk-classifier.d.ts +18 -0
  177. package/packages/core/dist/policy/risk-classifier.d.ts.map +1 -0
  178. package/packages/core/dist/policy/risk-classifier.js +47 -0
  179. package/packages/core/dist/policy/risk-classifier.js.map +1 -0
  180. package/packages/core/dist/policy/types.d.ts +131 -0
  181. package/packages/core/dist/policy/types.d.ts.map +1 -0
  182. package/packages/core/dist/policy/types.js +8 -0
  183. package/packages/core/dist/policy/types.js.map +1 -0
  184. package/LICENSE +0 -21
  185. package/README.md +0 -243
  186. package/packages/cli/bin/matimo.cjs +0 -26
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Policy-as-YAML loader for Matimo.
3
+ *
4
+ * Allows the developer to configure the policy engine through a YAML file
5
+ * instead of inline TypeScript, making it easy to adjust policy across
6
+ * environments without rebuilding.
7
+ *
8
+ * Schema for policy.yaml:
9
+ *
10
+ * ```yaml
11
+ * allowedDomains:
12
+ * - api.slack.com
13
+ * - slack.com
14
+ *
15
+ * allowedCredentials:
16
+ * - SLACK_BOT_TOKEN
17
+ * - OPENAI_API_KEY
18
+ *
19
+ * allowedHttpMethods:
20
+ * - GET
21
+ * - POST
22
+ *
23
+ * allowCommandTools: false
24
+ * allowFunctionTools: false
25
+ *
26
+ * protectedNamespaces:
27
+ * - matimo_
28
+ * ```
29
+ *
30
+ * Usage:
31
+ * const matimo = await MatimoInstance.init({ policyFile: './policy.yaml' });
32
+ */
33
+ import fs from 'fs';
34
+ import yaml from 'js-yaml';
35
+ import { z } from 'zod';
36
+ import { DefaultPolicyEngine } from './default-policy.js';
37
+ import { MatimoError, ErrorCode } from '../errors/matimo-error.js';
38
+ // ──────────────────────────────────────────────────────────────────────────────
39
+ // Zod schema — validates the YAML before constructing PolicyConfig
40
+ // ──────────────────────────────────────────────────────────────────────────────
41
+ // Valid HTTP methods supported by the policy engine
42
+ const VALID_HTTP_METHODS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'];
43
+ const ValidHttpMethodEnum = z.enum(VALID_HTTP_METHODS);
44
+ const PolicyFileSchema = z.object({
45
+ allowedDomains: z.array(z.string()).optional(),
46
+ allowedCredentials: z.array(z.string()).optional(),
47
+ allowedHttpMethods: z
48
+ .array(z
49
+ .string()
50
+ .transform((val) => val.toUpperCase())
51
+ .pipe(ValidHttpMethodEnum))
52
+ .optional(),
53
+ allowCommandTools: z.boolean().optional(),
54
+ allowFunctionTools: z.boolean().optional(),
55
+ protectedNamespaces: z.array(z.string()).optional(),
56
+ enableHITL: z.boolean().optional(),
57
+ quarantineRiskLevels: z.array(z.enum(['low', 'medium', 'high', 'critical'])).optional(),
58
+ approvalTtlSeconds: z.number().int().positive().optional(),
59
+ });
60
+ // ──────────────────────────────────────────────────────────────────────────────
61
+ // Public API
62
+ // ──────────────────────────────────────────────────────────────────────────────
63
+ /**
64
+ * Parse a YAML policy file and return a PolicyEngine configured from it.
65
+ *
66
+ * Throws `MatimoError(INVALID_SCHEMA)` if the file cannot be read or fails validation.
67
+ *
68
+ * @param filePath - Absolute or cwd-relative path to the policy YAML file
69
+ * @returns A frozen `DefaultPolicyEngine` built from the parsed config
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * // Direct usage
74
+ * const engine = loadPolicyFromFile('./policy.yaml');
75
+ * const matimo = await MatimoInstance.init({ policy: engine });
76
+ *
77
+ * // Or use the shorthand InitOption (preferred)
78
+ * const matimo = await MatimoInstance.init({ policyFile: './policy.yaml' });
79
+ * ```
80
+ */
81
+ export function loadPolicyFromFile(filePath) {
82
+ let raw;
83
+ try {
84
+ raw = fs.readFileSync(filePath, 'utf-8');
85
+ }
86
+ catch (err) {
87
+ throw new MatimoError(`Cannot read policy file "${filePath}": ${err.message}`, ErrorCode.INVALID_SCHEMA, { filePath });
88
+ }
89
+ let parsed;
90
+ try {
91
+ parsed = yaml.load(raw);
92
+ }
93
+ catch (err) {
94
+ throw new MatimoError(`Policy file "${filePath}" contains invalid YAML: ${err.message}`, ErrorCode.INVALID_SCHEMA, { filePath });
95
+ }
96
+ const result = PolicyFileSchema.safeParse(parsed ?? {});
97
+ if (!result.success) {
98
+ const issues = result.error.issues
99
+ .map((i) => ` • ${i.path.join('.')}: ${i.message}`)
100
+ .join('\n');
101
+ throw new MatimoError(`Policy file "${filePath}" is invalid:\n${issues}`, ErrorCode.INVALID_SCHEMA, { filePath, issues: result.error.issues });
102
+ }
103
+ const policyConfig = buildPolicyConfig(result.data);
104
+ return new DefaultPolicyEngine(policyConfig);
105
+ }
106
+ /**
107
+ * Parse a YAML policy file into a PolicyConfig (without creating an engine).
108
+ * Useful for hot-reload: parse the new file, then call engine.updateConfig().
109
+ */
110
+ export function parsePolicyFile(filePath) {
111
+ let raw;
112
+ try {
113
+ raw = fs.readFileSync(filePath, 'utf-8');
114
+ }
115
+ catch (err) {
116
+ throw new MatimoError(`Cannot read policy file "${filePath}": ${err.message}`, ErrorCode.INVALID_SCHEMA, { filePath });
117
+ }
118
+ let parsed;
119
+ try {
120
+ parsed = yaml.load(raw);
121
+ }
122
+ catch (err) {
123
+ throw new MatimoError(`Policy file "${filePath}" contains invalid YAML: ${err.message}`, ErrorCode.INVALID_SCHEMA, { filePath });
124
+ }
125
+ const result = PolicyFileSchema.safeParse(parsed ?? {});
126
+ if (!result.success) {
127
+ const issues = result.error.issues
128
+ .map((i) => ` \u2022 ${i.path.join('.')}: ${i.message}`)
129
+ .join('\n');
130
+ throw new MatimoError(`Policy file "${filePath}" is invalid:\n${issues}`, ErrorCode.INVALID_SCHEMA, { filePath, issues: result.error.issues });
131
+ }
132
+ return buildPolicyConfig(result.data);
133
+ }
134
+ function buildPolicyConfig(data) {
135
+ const config = {};
136
+ if (data.allowedDomains !== undefined)
137
+ config.allowedDomains = data.allowedDomains;
138
+ if (data.allowedCredentials !== undefined)
139
+ config.allowedCredentials = data.allowedCredentials;
140
+ if (data.allowedHttpMethods !== undefined)
141
+ config.allowedHttpMethods = data.allowedHttpMethods;
142
+ if (data.allowCommandTools !== undefined)
143
+ config.allowCommandTools = data.allowCommandTools;
144
+ if (data.allowFunctionTools !== undefined)
145
+ config.allowFunctionTools = data.allowFunctionTools;
146
+ if (data.protectedNamespaces !== undefined)
147
+ config.protectedNamespaces = data.protectedNamespaces;
148
+ if (data.enableHITL !== undefined)
149
+ config.enableHITL = data.enableHITL;
150
+ if (data.quarantineRiskLevels !== undefined)
151
+ config.quarantineRiskLevels = data.quarantineRiskLevels;
152
+ if (data.approvalTtlSeconds !== undefined)
153
+ config.approvalTtlSeconds = data.approvalTtlSeconds;
154
+ return config;
155
+ }
156
+ //# sourceMappingURL=policy-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-loader.js","sourceRoot":"","sources":["../../src/policy/policy-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Risk Classifier for Matimo tools.
3
+ *
4
+ * Pure function that classifies a tool's risk level based on its execution
5
+ * type, HTTP method, and approval requirements. No schema changes needed.
6
+ */
7
+ import type { ToolDefinition } from '../core/schema.js';
8
+ import type { RiskLevel } from './types.js';
9
+ /**
10
+ * Classify the risk level of a tool based on its definition.
11
+ *
12
+ * - critical: arbitrary code execution (type: function)
13
+ * - high: shell execution (type: command), HTTP DELETE, or explicit requires_approval
14
+ * - medium: HTTP POST/PUT/PATCH (write operations)
15
+ * - low: HTTP GET, read-only tools
16
+ */
17
+ export declare function classifyRisk(tool: ToolDefinition): RiskLevel;
18
+ //# sourceMappingURL=risk-classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk-classifier.d.ts","sourceRoot":"","sources":["../../src/policy/risk-classifier.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,CAoC5D"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Risk Classifier for Matimo tools.
3
+ *
4
+ * Pure function that classifies a tool's risk level based on its execution
5
+ * type, HTTP method, and approval requirements. No schema changes needed.
6
+ */
7
+ /**
8
+ * Classify the risk level of a tool based on its definition.
9
+ *
10
+ * - critical: arbitrary code execution (type: function)
11
+ * - high: shell execution (type: command), HTTP DELETE, or explicit requires_approval
12
+ * - medium: HTTP POST/PUT/PATCH (write operations)
13
+ * - low: HTTP GET, read-only tools
14
+ */
15
+ export function classifyRisk(tool) {
16
+ // Explicit override declared in the tool YAML takes precedence
17
+ if (tool.risk) {
18
+ return tool.risk;
19
+ }
20
+ const exec = tool.execution;
21
+ // Arbitrary code execution is always critical risk
22
+ if (exec.type === 'function') {
23
+ return 'critical';
24
+ }
25
+ // Shell commands are high risk (injection vectors)
26
+ if (exec.type === 'command') {
27
+ return 'high';
28
+ }
29
+ // HTTP tools: risk depends on method
30
+ if (exec.type === 'http') {
31
+ if (tool.requires_approval === true) {
32
+ return 'high';
33
+ }
34
+ const method = exec.method.toUpperCase();
35
+ if (method === 'DELETE') {
36
+ return 'high';
37
+ }
38
+ if (method === 'POST' || method === 'PUT' || method === 'PATCH') {
39
+ return 'medium';
40
+ }
41
+ // GET is low risk
42
+ return 'low';
43
+ }
44
+ // Unknown execution type — treat as high
45
+ return 'high';
46
+ }
47
+ //# sourceMappingURL=risk-classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk-classifier.js","sourceRoot":"","sources":["../../src/policy/risk-classifier.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,IAAoB;IAC/C,+DAA+D;IAC/D,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,IAAI,CAAC,IAAiB,CAAC;IAChC,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;IAE5B,mDAAmD;IACnD,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC7B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,mDAAmD;IACnD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,qCAAqC;IACrC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;YACpC,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YAChE,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,kBAAkB;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,yCAAyC;IACzC,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Policy Engine types for Matimo Agent-Native SDK.
3
+ *
4
+ * The policy engine governs what tools agents can create, execute, and discover.
5
+ * Agents cannot mutate policy at runtime; the host configures it and may hot-reload via `updateConfig()`.
6
+ */
7
+ import type { ToolDefinition } from '../core/schema.js';
8
+ export type RiskLevel = 'low' | 'medium' | 'high' | 'critical';
9
+ /**
10
+ * Three-tier classification for agent-created tool proposals.
11
+ *
12
+ * - `auto`: Can be created and used immediately (low-risk GET tools, no auth).
13
+ * - `approval-required`: Allowed but must be approved before execution
14
+ * (tools with auth, POST/PUT/DELETE, external data writes).
15
+ * - `blocked`: Can never be created regardless of policy config
16
+ * (reserved namespaces, function/command execution, SSRF targets,
17
+ * tools referencing policy internals).
18
+ */
19
+ export type PolicyTier = 'auto' | 'approval-required' | 'blocked';
20
+ /**
21
+ * Identity and environment context passed by the host application.
22
+ * Matimo does not authenticate — this is whatever the caller provides.
23
+ */
24
+ export interface PolicyContext {
25
+ /** Identifier for the calling agent (optional — SDK doesn't mandate identity) */
26
+ agentId?: string;
27
+ /** Deployment environment (e.g. 'dev', 'staging', 'prod') */
28
+ environment?: string;
29
+ /** Roles assigned to the caller (e.g. ['reader', 'writer', 'admin']) */
30
+ roles?: string[];
31
+ /** Extensible metadata for custom policy rules */
32
+ metadata?: Record<string, unknown>;
33
+ }
34
+ export type PolicyDecision = {
35
+ allowed: true;
36
+ } | {
37
+ allowed: false;
38
+ reason: string;
39
+ riskLevel?: RiskLevel;
40
+ } | {
41
+ allowed: 'pending_approval';
42
+ reason: string;
43
+ riskLevel: RiskLevel;
44
+ /** Tool name for the approval flow to reference */
45
+ toolName?: string;
46
+ };
47
+ /**
48
+ * Async callback invoked when a tool enters the quarantine/HITL state.
49
+ * Returns `true` if the admin approves, `false` if rejected.
50
+ * Integrators wire this to a UI, Slack message, or approval queue.
51
+ */
52
+ export type HITLCallback = (request: HITLRequest) => Promise<boolean>;
53
+ export interface HITLRequest {
54
+ toolName: string;
55
+ riskLevel: RiskLevel;
56
+ reason: string;
57
+ environment?: string;
58
+ agentId?: string;
59
+ /** Full tool definition for admin review */
60
+ toolDefinition?: unknown;
61
+ }
62
+ export interface Violation {
63
+ /** Machine-readable rule identifier (e.g. 'no-ssrf', 'reserved-namespace') */
64
+ rule: string;
65
+ /** Severity of the violation */
66
+ severity: RiskLevel;
67
+ /** Human-readable explanation */
68
+ message: string;
69
+ }
70
+ export interface ValidationResult {
71
+ valid: boolean;
72
+ violations: Violation[];
73
+ }
74
+ export interface ValidationContext {
75
+ /** Whether the tool comes from a trusted or untrusted path */
76
+ source: 'trusted' | 'untrusted';
77
+ /** Active policy configuration (defaults to empty/permissive) */
78
+ policy?: PolicyConfig;
79
+ }
80
+ /**
81
+ * Developer-configurable policy rules. All fields optional with conservative defaults.
82
+ */
83
+ export interface PolicyConfig {
84
+ /** HTTP tool URL domain allowlist. If set, only these domains are permitted. */
85
+ allowedDomains?: string[];
86
+ /** Env var names that agent-created tools may reference for auth. */
87
+ allowedCredentials?: string[];
88
+ /** HTTP methods allowed for agent-created tools (default: ['GET', 'POST']). */
89
+ allowedHttpMethods?: string[];
90
+ /** Allow agent-created tools with execution type 'command' (default: false). */
91
+ allowCommandTools?: boolean;
92
+ /** Allow agent-created tools with execution type 'function' (default: false — always false for untrusted). */
93
+ allowFunctionTools?: boolean;
94
+ /** Tool name prefixes reserved for built-in tools (default: ['matimo_']). */
95
+ protectedNamespaces?: string[];
96
+ /**
97
+ * Enable quarantine/HITL for medium-risk tools in production.
98
+ * When true, `canCreate()` returns `pending_approval` instead of `allowed: false`
99
+ * for medium-risk tools, allowing a human reviewer to approve or reject.
100
+ * Default: false (original binary behavior preserved).
101
+ */
102
+ enableHITL?: boolean;
103
+ /**
104
+ * Risk levels eligible for HITL quarantine instead of outright rejection.
105
+ * Default: ['medium'] — critical/high are always blocked, low is always auto.
106
+ */
107
+ quarantineRiskLevels?: RiskLevel[];
108
+ /**
109
+ * Number of seconds after which an approval expires and the tool must be re-approved.
110
+ * If not set, approvals never expire.
111
+ */
112
+ approvalTtlSeconds?: number;
113
+ }
114
+ /**
115
+ * The PolicyEngine interface. Implementations are frozen at boot time and
116
+ * cannot be mutated by agents at runtime.
117
+ */
118
+ export interface PolicyEngine {
119
+ /** Check whether this agent is allowed to execute a given tool. */
120
+ canExecute(context: PolicyContext, tool: ToolDefinition): PolicyDecision;
121
+ /** Check whether this agent is allowed to create/propose a tool definition. */
122
+ canCreate(context: PolicyContext, toolDef: ToolDefinition): PolicyDecision;
123
+ /**
124
+ * Update the policy configuration at runtime (hot-reload).
125
+ * Implementations should validate the new config before applying.
126
+ */
127
+ updateConfig?(config: PolicyConfig): void;
128
+ /** Filter a list of tools to only those this agent is allowed to see/use. */
129
+ filterForAgent(context: PolicyContext, tools: ToolDefinition[]): ToolDefinition[];
130
+ }
131
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/policy/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Policy Engine types for Matimo Agent-Native SDK.
3
+ *
4
+ * The policy engine governs what tools agents can create, execute, and discover.
5
+ * Agents cannot mutate policy at runtime; the host configures it and may hot-reload via `updateConfig()`.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/policy/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 tallclub
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
package/README.md DELETED
@@ -1,243 +0,0 @@
1
- # Matimo — Toolbox For AI Agents
2
-
3
- <p align="center">
4
- <img src="./docs/assets/logo.png" alt="Matimo Logo" width="300" />
5
- </p>
6
- <p align="center">
7
- <strong>Matimo - "to be powerful"</strong>
8
- </p>
9
-
10
- <p align="center">
11
- <a href="https://github.com/tallclub/matimo/actions/workflows/ci.yml?branch=main"><img src="https://img.shields.io/github/actions/workflow/status/tallclub/matimo/ci.yml?branch=main&style=for-the-badge" alt="CI status"></a>
12
- <a href="https://www.npmjs.com/package/matimo"><img src="https://img.shields.io/npm/v/matimo.svg?style=for-the-badge" alt="npm version"></a>
13
- <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge" alt="MIT License"></a>
14
- <a href="https://www.typescriptlang.org/"><img src="https://img.shields.io/badge/TypeScript-5.9+-blue?style=for-the-badge" alt="TypeScript"></a>
15
- <a href="https://nodejs.org/"><img src="https://img.shields.io/badge/Node.js-18+-green?style=for-the-badge" alt="Node.js"></a>
16
- </p>
17
-
18
- <p align="center">
19
- <a href="https://discord.gg/3JPt4mxWDV"><img src="https://img.shields.io/badge/Discord-Join%20Chat-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Discord"></a>
20
- </p>
21
-
22
- **Matimo** is a universal, configuration‑driven AI tools ecosystem. Define tools **once in YAML** and reuse them across the SDK, LangChain, custom agents, and a single MCP server, without re‑implementing schemas or fragmenting integration logic.
23
-
24
- **Define once → Plug into any agent ecosystem.**
25
-
26
- [📖 Documentation](./docs) · [🚀 Quick Start](./docs/getting-started/QUICK_START.md) · [📚 API Reference](./docs/api-reference/SDK.md) · [🛠️ Add Tools](./docs/tool-development/ADDING_TOOLS.md) · [🤖 Examples](./examples)
27
-
28
- ---
29
-
30
- ## Quick Start
31
-
32
- ### Installation
33
-
34
- ```bash
35
- npm install matimo
36
- # OR auto-discover tools from node_modules/@matimo/*
37
- npm install matimo @matimo/slack @matimo/gmail
38
- ```
39
-
40
- ### Minimal Example (TypeScript)
41
-
42
- ```typescript
43
- import { MatimoInstance } from '@matimo/core';
44
-
45
- const matimo = await MatimoInstance.init({
46
- autoDiscover: true,
47
- });
48
-
49
- const result = await matimo.execute('slack-send-message', {
50
- channel: '#general',
51
- text: 'Hello from Matimo!',
52
- });
53
- ```
54
-
55
- See [Three Integration Patterns](#three-integration-patterns) and [examples/](./examples) for more.
56
-
57
- ## What's Included
58
-
59
- Matimo ships with built-in support for:
60
-
61
- - **Core Tools**: File I/O, Web fetch, Command execution, Code search
62
- - **Slack Integration**: Send messages, manage channels, read threads
63
- - **Gmail Integration**: Send/read email, manage threads
64
- - **GitHub Integration**: Issues, pull requests, releases
65
- - **Postgres Tools**: Query/modify data with safety checks
66
- - **HubSpot Tools**: Read/Write data to Hubspot CRM
67
- - **Auto-Discovery**: Automatic detection of @matimo/\* providers from npm
68
- - **Matimo CLI**: Tool discovery, installation, and management
69
- - **OAuth2 Support**: Provider-agnostic authorization for Slack, Gmail, GitHub, etc.
70
- - **Framework Support**: Factory pattern, Decorator pattern, LangChain, CrewAI
71
- - **TypeScript SDK**: Full type safety and IDE support
72
-
73
- ## Why Matimo?
74
-
75
- **The Problem:** Every AI framework (LangChain, CrewAI, custom agents, etc.) defines tools differently. You duplicate tool logic across frameworks.
76
-
77
- **The Solution:** Define tools **once** in clean YAML, use them **everywhere** — with built-in:
78
-
79
- - TypeScript SDK (factory & decorator patterns)
80
- - LangChain integration (with examples)
81
- - Matimo CLI (tool discovery & management)
82
- - Auto-discovery from npm packages
83
- - OAuth2 support + parameter validation
84
-
85
- See [Contributing](./CONTRIBUTING.md) for details.
86
-
87
- ---
88
-
89
- ## Three Integration Patterns
90
-
91
- ### 1️⃣ Factory Pattern (Simplest)
92
-
93
- ```typescript
94
- const matimo = await MatimoInstance.init({ autoDiscover: true });
95
- const result = await matimo.execute('calculator', { operation: 'add', a: 5, b: 3 });
96
- ```
97
-
98
- ### 2️⃣ Decorator Pattern (Class-Based)
99
-
100
- ```typescript
101
- @tool('slack-send-message')
102
- async sendMessage(channel: string, text: string) { /* Auto-executed */ }
103
- ```
104
-
105
- ### 3️⃣ LangChain Integration
106
-
107
- ```typescript
108
- const tools = matimo.listTools().map(tool => ({
109
- type: 'function',
110
- function: { name: tool.name, description: tool.description, ... }
111
- }));
112
- ```
113
-
114
- See [SDK Usage Patterns](./docs/user-guide/SDK_PATTERNS.md) and [LangChain Integration](./docs/framework-integrations/LANGCHAIN.md) for details.
115
-
116
- ---
117
-
118
- ## Installation
119
-
120
- ### From npm (Recommended)
121
-
122
- ```bash
123
- npm install matimo
124
-
125
- # Install tool providers
126
- npm install @matimo/slack @matimo/gmail
127
- ```
128
-
129
- Then use with auto-discovery:
130
-
131
- ```typescript
132
- const matimo = await MatimoInstance.init({ autoDiscover: true });
133
- ```
134
-
135
- ### Matimo CLI (Tool Management)
136
-
137
- ```bash
138
- npm install -g @matimo/cli
139
-
140
- matimo list # Show installed packages
141
- matimo search email # Find tools
142
- matimo install slack # Install tools
143
- ```
144
-
145
- See [CLI Docs](./packages/cli/README.md) for full reference.
146
-
147
- ### From Source (Contributors)
148
-
149
- ```bash
150
- git clone https://github.com/tallclub/matimo
151
- cd matimo && pnpm install && pnpm build
152
- pnpm test
153
- cd examples/tools && pnpm install && pnpm agent:factory
154
- ```
155
-
156
- ---
157
-
158
- ## Features **Coming Soon:**
159
-
160
- - More tool providers (Stripe, Twilio, Notion, etc.)
161
- - Python SDK
162
- - Custom Tool Marketplace
163
- - MCP Server support
164
-
165
- ---
166
-
167
- ## Adding Tools to Matimo
168
-
169
- If you build @matimo/<provider> following this pattern, we’ll list it in the official docs and README with you as maintainer.
170
-
171
- Create tool providers as independent npm packages:
172
-
173
- ```bash
174
- mkdir packages/github
175
- cd packages/github && cat > package.json << 'EOF'
176
- { "name": "@matimo/github", "type": "module", ... }
177
- EOF
178
-
179
- mkdir tools/github-create-issue
180
- cat > tools/github-create-issue/definition.yaml << 'EOF'
181
- name: github-create-issue
182
- parameters:
183
- owner: { type: string, required: true }
184
- repo: { type: string, required: true }
185
- title: { type: string, required: true }
186
- execution:
187
- type: http
188
- method: POST
189
- url: https://api.github.com/repos/{owner}/{repo}/issues
190
- headers:
191
- Authorization: "Bearer {GITHUB_TOKEN}"
192
- EOF
193
- ```
194
-
195
- Then publish to npm as `@matimo/github`. Users install and auto-discover:
196
-
197
- ```bash
198
- npm install @matimo/github
199
- # New tools automatically available!
200
- const matimo = await MatimoInstance.init({ autoDiscover: true });
201
- ```
202
-
203
- See [Adding Tools to Matimo](./docs/tool-development/ADDING_TOOLS.md) for the complete 6-step guide.
204
-
205
- ---
206
-
207
- ## Documentation
208
-
209
- - [Getting Started](./docs/getting-started/)
210
- - [API Reference](./docs/api-reference/SDK.md)
211
- - [Tool Development](./docs/tool-development/ADDING_TOOLS.md)
212
- - [Architecture Overview](./docs/architecture/OVERVIEW.md)
213
- - [Contributing](./CONTRIBUTING.md)
214
-
215
- ---
216
-
217
- ## License
218
-
219
- MIT © 2026 Matimo Contributors
220
-
221
- ---
222
-
223
- ## Support the Project
224
-
225
- - ⭐ Star the repo
226
- - 🐛 Open issues for bugs or features
227
- - 🔀 Submit PRs (see [Contributing](./CONTRIBUTING.md))
228
- Best way to help: add a new provider (Notion, Jira, Stripe, Twilio…) or expand existing toolsets.
229
- - 📢 Share on Twitter, Reddit, Discord
230
-
231
- ---
232
-
233
- ## Contributors
234
-
235
- <a href="https://github.com/tallclub/matimo/graphs/contributors">
236
- <img src="https://contrib.rocks/image?repo=tallclub/matimo" />
237
- </a>
238
-
239
- ---
240
-
241
- ## Star History
242
-
243
- [![Star History Chart](https://api.star-history.com/svg?repos=tallclub/matimo&type=Date)](https://star-history.com/#tallclub/matimo&Date)