matimo 0.1.0-alpha.3 → 0.1.0-alpha.5
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.
- package/README.md +124 -598
- package/package.json +23 -23
- package/packages/cli/bin/matimo.cjs +26 -0
- package/packages/cli/dist/cli.d.ts +6 -0
- package/packages/cli/dist/cli.d.ts.map +1 -0
- package/packages/cli/dist/cli.js +95 -0
- package/packages/cli/dist/cli.js.map +1 -0
- package/packages/cli/dist/commands/install.d.ts +6 -0
- package/packages/cli/dist/commands/install.d.ts.map +1 -0
- package/packages/cli/dist/commands/install.js +48 -0
- package/packages/cli/dist/commands/install.js.map +1 -0
- package/packages/cli/dist/commands/list.d.ts +9 -0
- package/packages/cli/dist/commands/list.d.ts.map +1 -0
- package/packages/cli/dist/commands/list.js +70 -0
- package/packages/cli/dist/commands/list.js.map +1 -0
- package/packages/cli/dist/commands/search.d.ts +2 -0
- package/packages/cli/dist/commands/search.d.ts.map +1 -0
- package/packages/cli/dist/commands/search.js +148 -0
- package/packages/cli/dist/commands/search.js.map +1 -0
- package/packages/core/dist/src/auth/oauth2-config.d.ts.map +1 -0
- package/packages/core/dist/src/auth/oauth2-config.js.map +1 -0
- package/packages/core/dist/src/auth/oauth2-handler.d.ts.map +1 -0
- package/packages/core/dist/src/auth/oauth2-handler.js.map +1 -0
- package/packages/core/dist/src/auth/oauth2-provider-loader.d.ts.map +1 -0
- package/packages/core/dist/src/auth/oauth2-provider-loader.js.map +1 -0
- package/{dist → packages/core/dist/src}/core/schema.d.ts +11 -1
- package/packages/core/dist/src/core/schema.d.ts.map +1 -0
- package/{dist → packages/core/dist/src}/core/schema.js +12 -3
- package/packages/core/dist/src/core/schema.js.map +1 -0
- package/{dist → packages/core/dist/src}/core/tool-loader.d.ts +16 -0
- package/packages/core/dist/src/core/tool-loader.d.ts.map +1 -0
- package/{dist → packages/core/dist/src}/core/tool-loader.js +97 -1
- package/packages/core/dist/src/core/tool-loader.js.map +1 -0
- package/packages/core/dist/src/core/tool-registry.d.ts.map +1 -0
- package/packages/core/dist/src/core/tool-registry.js.map +1 -0
- package/{dist → packages/core/dist/src}/core/types.d.ts +15 -1
- package/packages/core/dist/src/core/types.d.ts.map +1 -0
- package/{dist → packages/core/dist/src}/core/types.js.map +1 -1
- package/packages/core/dist/src/decorators/index.d.ts.map +1 -0
- package/packages/core/dist/src/decorators/index.js.map +1 -0
- package/packages/core/dist/src/decorators/tool-decorator.d.ts.map +1 -0
- package/packages/core/dist/src/decorators/tool-decorator.js.map +1 -0
- package/packages/core/dist/src/encodings/parameter-encoding.d.ts.map +1 -0
- package/packages/core/dist/src/encodings/parameter-encoding.js.map +1 -0
- package/packages/core/dist/src/errors/matimo-error.d.ts.map +1 -0
- package/packages/core/dist/src/errors/matimo-error.js.map +1 -0
- package/packages/core/dist/src/executors/command-executor.d.ts.map +1 -0
- package/packages/core/dist/src/executors/command-executor.js.map +1 -0
- package/packages/core/dist/src/executors/function-executor.d.ts +23 -0
- package/packages/core/dist/src/executors/function-executor.d.ts.map +1 -0
- package/packages/core/dist/src/executors/function-executor.js +164 -0
- package/packages/core/dist/src/executors/function-executor.js.map +1 -0
- package/packages/core/dist/src/executors/http-executor.d.ts.map +1 -0
- package/packages/core/dist/src/executors/http-executor.js.map +1 -0
- package/{dist → packages/core/dist/src}/index.d.ts +5 -1
- package/packages/core/dist/src/index.d.ts.map +1 -0
- package/{dist → packages/core/dist/src}/index.js +3 -0
- package/packages/core/dist/src/index.js.map +1 -0
- package/packages/core/dist/src/integrations/langchain.d.ts +46 -0
- package/packages/core/dist/src/integrations/langchain.d.ts.map +1 -0
- package/packages/core/dist/src/integrations/langchain.js +197 -0
- package/packages/core/dist/src/integrations/langchain.js.map +1 -0
- package/{dist → packages/core/dist/src}/matimo-instance.d.ts +30 -4
- package/packages/core/dist/src/matimo-instance.d.ts.map +1 -0
- package/{dist → packages/core/dist/src}/matimo-instance.js +63 -10
- package/packages/core/dist/src/matimo-instance.js.map +1 -0
- package/packages/core/dist/tools/calculator/calculator.d.ts +26 -0
- package/packages/core/dist/tools/calculator/calculator.d.ts.map +1 -0
- package/packages/core/dist/tools/calculator/calculator.js +104 -0
- package/packages/core/dist/tools/calculator/calculator.js.map +1 -0
- package/packages/core/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/auth/oauth2-config.d.ts.map +0 -1
- package/dist/auth/oauth2-config.js.map +0 -1
- package/dist/auth/oauth2-handler.d.ts.map +0 -1
- package/dist/auth/oauth2-handler.js.map +0 -1
- package/dist/auth/oauth2-provider-loader.d.ts.map +0 -1
- package/dist/auth/oauth2-provider-loader.js.map +0 -1
- package/dist/core/schema.d.ts.map +0 -1
- package/dist/core/schema.js.map +0 -1
- package/dist/core/tool-loader.d.ts.map +0 -1
- package/dist/core/tool-loader.js.map +0 -1
- package/dist/core/tool-registry.d.ts.map +0 -1
- package/dist/core/tool-registry.js.map +0 -1
- package/dist/core/types.d.ts.map +0 -1
- package/dist/decorators/index.d.ts.map +0 -1
- package/dist/decorators/index.js.map +0 -1
- package/dist/decorators/tool-decorator.d.ts.map +0 -1
- package/dist/decorators/tool-decorator.js.map +0 -1
- package/dist/encodings/parameter-encoding.d.ts.map +0 -1
- package/dist/encodings/parameter-encoding.js.map +0 -1
- package/dist/errors/matimo-error.d.ts.map +0 -1
- package/dist/errors/matimo-error.js.map +0 -1
- package/dist/executors/command-executor.d.ts.map +0 -1
- package/dist/executors/command-executor.js.map +0 -1
- package/dist/executors/http-executor.d.ts.map +0 -1
- package/dist/executors/http-executor.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/matimo-instance.d.ts.map +0 -1
- package/dist/matimo-instance.js.map +0 -1
- package/tools/calculator/calculator.ts +0 -78
- package/tools/calculator/definition.yaml +0 -71
- package/tools/echo-tool/definition.yaml +0 -35
- package/tools/examples/calculator.yaml +0 -54
- package/tools/examples/echo-tool.yaml +0 -35
- package/tools/examples/http-client.yaml +0 -66
- package/tools/github/definition.yaml +0 -41
- package/tools/gmail/README.md +0 -1189
- package/tools/gmail/create-draft/definition.yaml +0 -99
- package/tools/gmail/definition.yaml +0 -49
- package/tools/gmail/delete-message/definition.yaml +0 -42
- package/tools/gmail/get-message/definition.yaml +0 -89
- package/tools/gmail/list-messages/definition.yaml +0 -84
- package/tools/gmail/send-email/definition.yaml +0 -95
- package/tools/http-client/definition.yaml +0 -73
- package/tools/slack/README.md +0 -200
- package/tools/slack/assets/icon.svg +0 -9
- package/tools/slack/assets/logo-dark.svg +0 -14
- package/tools/slack/assets/logo-light.svg +0 -14
- package/tools/slack/assets/logo.svg +0 -14
- package/tools/slack/definition.yaml +0 -54
- package/tools/slack/get-user/definition.yaml +0 -31
- package/tools/slack/list-channels/definition.yaml +0 -46
- package/tools/slack/send-message/definition.yaml +0 -30
- package/tools/slack/slack_add_reaction/definition.yaml +0 -45
- package/tools/slack/slack_create_channel/definition.yaml +0 -41
- package/tools/slack/slack_get_channel_history/definition.yaml +0 -58
- package/tools/slack/slack_get_reactions/definition.yaml +0 -36
- package/tools/slack/slack_get_thread_replies/definition.yaml +0 -45
- package/tools/slack/slack_get_user_info/definition.yaml +0 -32
- package/tools/slack/slack_join_channel/definition.yaml +0 -35
- package/tools/slack/slack_reply_to_message/definition.yaml +0 -49
- package/tools/slack/slack_search_messages/definition.yaml +0 -46
- package/tools/slack/slack_send_channel_message/definition.yaml +0 -34
- package/tools/slack/slack_send_dm/definition.yaml +0 -37
- package/tools/slack/slack_set_channel_topic/definition.yaml +0 -40
- package/tools/slack/slack_upload_file/definition.yaml +0 -152
- /package/{dist → packages/core/dist/src}/auth/oauth2-config.d.ts +0 -0
- /package/{dist → packages/core/dist/src}/auth/oauth2-config.js +0 -0
- /package/{dist → packages/core/dist/src}/auth/oauth2-handler.d.ts +0 -0
- /package/{dist → packages/core/dist/src}/auth/oauth2-handler.js +0 -0
- /package/{dist → packages/core/dist/src}/auth/oauth2-provider-loader.d.ts +0 -0
- /package/{dist → packages/core/dist/src}/auth/oauth2-provider-loader.js +0 -0
- /package/{dist → packages/core/dist/src}/core/tool-registry.d.ts +0 -0
- /package/{dist → packages/core/dist/src}/core/tool-registry.js +0 -0
- /package/{dist → packages/core/dist/src}/core/types.js +0 -0
- /package/{dist → packages/core/dist/src}/decorators/index.d.ts +0 -0
- /package/{dist → packages/core/dist/src}/decorators/index.js +0 -0
- /package/{dist → packages/core/dist/src}/decorators/tool-decorator.d.ts +0 -0
- /package/{dist → packages/core/dist/src}/decorators/tool-decorator.js +0 -0
- /package/{dist → packages/core/dist/src}/encodings/parameter-encoding.d.ts +0 -0
- /package/{dist → packages/core/dist/src}/encodings/parameter-encoding.js +0 -0
- /package/{dist → packages/core/dist/src}/errors/matimo-error.d.ts +0 -0
- /package/{dist → packages/core/dist/src}/errors/matimo-error.js +0 -0
- /package/{dist → packages/core/dist/src}/executors/command-executor.d.ts +0 -0
- /package/{dist → packages/core/dist/src}/executors/command-executor.js +0 -0
- /package/{dist → packages/core/dist/src}/executors/http-executor.d.ts +0 -0
- /package/{dist → packages/core/dist/src}/executors/http-executor.js +0 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LangChain Integration for Matimo
|
|
3
|
+
*
|
|
4
|
+
* Converts Matimo tools to LangChain-compatible format.
|
|
5
|
+
* Simple, lightweight, scales to 2000+ tools.
|
|
6
|
+
*
|
|
7
|
+
* NOTE: Requires @langchain/core as peer dependency.
|
|
8
|
+
* Install with: npm install @langchain/core langchain
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* const matimo = await MatimoInstance.init('./tools');
|
|
12
|
+
* const langchainTools = await convertToolsToLangChain(
|
|
13
|
+
* matimo.listTools(),
|
|
14
|
+
* matimo,
|
|
15
|
+
* { SLACK_BOT_TOKEN: process.env.SLACK_BOT_TOKEN }
|
|
16
|
+
* );
|
|
17
|
+
*/
|
|
18
|
+
import { z } from 'zod';
|
|
19
|
+
import type { ToolDefinition } from '../core/types';
|
|
20
|
+
import type { MatimoInstance } from '../matimo-instance';
|
|
21
|
+
export interface LangChainTool {
|
|
22
|
+
name: string;
|
|
23
|
+
description: string;
|
|
24
|
+
schema: z.ZodSchema;
|
|
25
|
+
invoke: (input: Record<string, unknown>) => Promise<unknown>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Convert Matimo tools to LangChain format
|
|
29
|
+
*
|
|
30
|
+
* @param tools - Matimo tools
|
|
31
|
+
* @param matimo - MatimoInstance
|
|
32
|
+
* @param secrets - Map of parameter names to secret values
|
|
33
|
+
* @param secretParamNames - Explicitly declared secret parameters (optional)
|
|
34
|
+
* @returns LangChain tools
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts
|
|
38
|
+
* const tools = await convertToolsToLangChain(
|
|
39
|
+
* matimo.listTools().filter(t => t.name.startsWith('slack')),
|
|
40
|
+
* matimo,
|
|
41
|
+
* { SLACK_BOT_TOKEN: process.env.SLACK_BOT_TOKEN }
|
|
42
|
+
* );
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function convertToolsToLangChain(tools: ToolDefinition[], matimo: MatimoInstance, secrets?: Record<string, string>, secretParamNames?: Set<string>): Promise<LangChainTool[]>;
|
|
46
|
+
//# sourceMappingURL=langchain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain.d.ts","sourceRoot":"","sources":["../../../src/integrations/langchain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,eAAe,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC;IACpB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9D;AAgMD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,cAAc,EAAE,EACvB,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACpC,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC7B,OAAO,CAAC,aAAa,EAAE,CAAC,CAiB1B"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LangChain Integration for Matimo
|
|
3
|
+
*
|
|
4
|
+
* Converts Matimo tools to LangChain-compatible format.
|
|
5
|
+
* Simple, lightweight, scales to 2000+ tools.
|
|
6
|
+
*
|
|
7
|
+
* NOTE: Requires @langchain/core as peer dependency.
|
|
8
|
+
* Install with: npm install @langchain/core langchain
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* const matimo = await MatimoInstance.init('./tools');
|
|
12
|
+
* const langchainTools = await convertToolsToLangChain(
|
|
13
|
+
* matimo.listTools(),
|
|
14
|
+
* matimo,
|
|
15
|
+
* { SLACK_BOT_TOKEN: process.env.SLACK_BOT_TOKEN }
|
|
16
|
+
* );
|
|
17
|
+
*/
|
|
18
|
+
import { z } from 'zod';
|
|
19
|
+
// Lazy load LangChain to avoid hard dependency
|
|
20
|
+
let langChainToolFn = null;
|
|
21
|
+
async function getLangChainTool() {
|
|
22
|
+
if (!langChainToolFn) {
|
|
23
|
+
try {
|
|
24
|
+
const langChainModule = await import('@langchain/core/tools');
|
|
25
|
+
langChainToolFn = langChainModule.tool;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
throw new Error('LangChain not installed. Install: npm install @langchain/core langchain');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return langChainToolFn;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Convert parameter to Zod schema
|
|
35
|
+
*
|
|
36
|
+
* Supports:
|
|
37
|
+
* - enum constraints (if present, validates against allowed values)
|
|
38
|
+
* - default values (sets default in schema)
|
|
39
|
+
* - type validation (string, number, boolean, array, object)
|
|
40
|
+
* - description and required metadata
|
|
41
|
+
*/
|
|
42
|
+
function parameterToZod(param) {
|
|
43
|
+
let schema;
|
|
44
|
+
// If enum is present, validate against allowed values
|
|
45
|
+
if (param.enum && param.enum.length > 0) {
|
|
46
|
+
// Create enum schema from allowed values using z.union for mixed types
|
|
47
|
+
const enumSchemas = param.enum.map((value) => z.literal(value));
|
|
48
|
+
// Build union from array of literal schemas (type-safe via unknown cast)
|
|
49
|
+
schema = z.union(enumSchemas);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
switch (param.type) {
|
|
53
|
+
case 'string':
|
|
54
|
+
schema = z.string();
|
|
55
|
+
break;
|
|
56
|
+
case 'number':
|
|
57
|
+
schema = z.number();
|
|
58
|
+
break;
|
|
59
|
+
case 'boolean':
|
|
60
|
+
schema = z.boolean();
|
|
61
|
+
break;
|
|
62
|
+
case 'array': {
|
|
63
|
+
const itemSchema = param.items ? parameterToZod(param.items) : z.unknown();
|
|
64
|
+
schema = z.array(itemSchema);
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
case 'object': {
|
|
68
|
+
if (param.properties) {
|
|
69
|
+
const props = {};
|
|
70
|
+
for (const [key, prop] of Object.entries(param.properties)) {
|
|
71
|
+
props[key] = parameterToZod(prop);
|
|
72
|
+
}
|
|
73
|
+
schema = z.object(props);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
schema = z.record(z.string(), z.unknown());
|
|
77
|
+
}
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
default:
|
|
81
|
+
schema = z.unknown();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (param.description) {
|
|
85
|
+
schema = schema.describe(param.description);
|
|
86
|
+
}
|
|
87
|
+
// Apply default value if present
|
|
88
|
+
if (param.default !== undefined) {
|
|
89
|
+
schema = schema.default(param.default);
|
|
90
|
+
}
|
|
91
|
+
if (!param.required) {
|
|
92
|
+
schema = schema.optional();
|
|
93
|
+
}
|
|
94
|
+
return schema;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Auto-detect if a parameter name looks like a secret
|
|
98
|
+
* based on common patterns (TOKEN, KEY, SECRET, PASSWORD)
|
|
99
|
+
*
|
|
100
|
+
* Uses word-boundary matching and camelCase detection to avoid false positives:
|
|
101
|
+
* - ✅ Matches: "api_token", "API_KEY", "getToken", "secret", "password_hash"
|
|
102
|
+
* - ❌ Rejects: "monkey", "turkey_id", "donkey" (substrings only)
|
|
103
|
+
*/
|
|
104
|
+
function isSecretParameter(paramName) {
|
|
105
|
+
const upperName = paramName.toUpperCase();
|
|
106
|
+
// Pattern 1: Word boundaries (works for snake_case: api_token, API_KEY)
|
|
107
|
+
if (/\b(TOKEN|KEY|SECRET|PASSWORD)\b/.test(upperName)) {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
// Pattern 2: Underscore prefix/suffix (works for snake_case: _token_, prefix_token_)
|
|
111
|
+
if (/(^|_)(TOKEN|KEY|SECRET|PASSWORD)(_|$)/.test(upperName)) {
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
// Pattern 3: CamelCase detection (works for camelCase: getToken, apiKey)
|
|
115
|
+
// Check if secret word appears after a lowercase letter (camelCase boundary)
|
|
116
|
+
if (/[a-z](TOKEN|KEY|SECRET|PASSWORD)/.test(paramName)) {
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Build Zod schema for tool input, excluding secret parameters
|
|
123
|
+
*/
|
|
124
|
+
function buildInputSchema(tool, secretParams) {
|
|
125
|
+
if (!tool.parameters) {
|
|
126
|
+
return z.object({});
|
|
127
|
+
}
|
|
128
|
+
const shape = {};
|
|
129
|
+
for (const [name, param] of Object.entries(tool.parameters)) {
|
|
130
|
+
if (secretParams.has(name)) {
|
|
131
|
+
continue; // Skip secrets - they're injected
|
|
132
|
+
}
|
|
133
|
+
shape[name] = parameterToZod(param);
|
|
134
|
+
}
|
|
135
|
+
return z.object(shape);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Convert Matimo tool to LangChain format
|
|
139
|
+
*/
|
|
140
|
+
async function convertTool(matimo, tool, secretParams, secrets) {
|
|
141
|
+
const toolFn = await getLangChainTool();
|
|
142
|
+
const schema = buildInputSchema(tool, secretParams);
|
|
143
|
+
return toolFn(async (input) => {
|
|
144
|
+
const params = { ...input };
|
|
145
|
+
// Inject secrets
|
|
146
|
+
for (const param of secretParams) {
|
|
147
|
+
if (param in secrets) {
|
|
148
|
+
params[param] = secrets[param];
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
try {
|
|
152
|
+
return await matimo.execute(tool.name, params);
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
return `Error: ${error instanceof Error ? error.message : String(error)}`;
|
|
156
|
+
}
|
|
157
|
+
}, {
|
|
158
|
+
name: tool.name,
|
|
159
|
+
description: tool.description || tool.name,
|
|
160
|
+
schema,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Convert Matimo tools to LangChain format
|
|
165
|
+
*
|
|
166
|
+
* @param tools - Matimo tools
|
|
167
|
+
* @param matimo - MatimoInstance
|
|
168
|
+
* @param secrets - Map of parameter names to secret values
|
|
169
|
+
* @param secretParamNames - Explicitly declared secret parameters (optional)
|
|
170
|
+
* @returns LangChain tools
|
|
171
|
+
*
|
|
172
|
+
* @example
|
|
173
|
+
* ```ts
|
|
174
|
+
* const tools = await convertToolsToLangChain(
|
|
175
|
+
* matimo.listTools().filter(t => t.name.startsWith('slack')),
|
|
176
|
+
* matimo,
|
|
177
|
+
* { SLACK_BOT_TOKEN: process.env.SLACK_BOT_TOKEN }
|
|
178
|
+
* );
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
export async function convertToolsToLangChain(tools, matimo, secrets = {}, secretParamNames) {
|
|
182
|
+
// Start with explicitly declared secret param names or auto-detect from secrets keys
|
|
183
|
+
const detectedSecrets = secretParamNames || new Set(Object.keys(secrets));
|
|
184
|
+
// Auto-detect additional secret parameters by scanning all tool parameters
|
|
185
|
+
for (const tool of tools) {
|
|
186
|
+
if (tool.parameters) {
|
|
187
|
+
for (const paramName of Object.keys(tool.parameters)) {
|
|
188
|
+
// Auto-detect if parameter looks like a secret
|
|
189
|
+
if (isSecretParameter(paramName)) {
|
|
190
|
+
detectedSecrets.add(paramName);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return Promise.all(tools.map((tool) => convertTool(matimo, tool, detectedSecrets, secrets)));
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=langchain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain.js","sourceRoot":"","sources":["../../../src/integrations/langchain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,+CAA+C;AAC/C,IAAI,eAAe,GASR,IAAI,CAAC;AAEhB,KAAK,UAAU,gBAAgB;IAU7B,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAC9D,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,cAAc,CAAC,KAAgB;IACtC,IAAI,MAA0B,CAAC;IAE/B,sDAAsD;IACtD,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,uEAAuE;QACvE,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,yEAAyE;QACzE,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,WAA2D,CAAC,CAAC;IAChF,CAAC;SAAM,CAAC;QACN,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,QAAQ;gBACX,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;gBACpB,MAAM;YACR,KAAK,QAAQ;gBACX,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;gBACpB,MAAM;YACR,KAAK,SAAS;gBACZ,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;gBACrB,MAAM;YACR,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC3E,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC7B,MAAM;YACR,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;oBACrB,MAAM,KAAK,GAAuC,EAAE,CAAC;oBACrD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC3D,KAAK,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;oBACpC,CAAC;oBACD,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7C,CAAC;gBACD,MAAM;YACR,CAAC;YACD;gBACE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;IAED,iCAAiC;IACjC,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAE1C,wEAAwE;IACxE,IAAI,iCAAiC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qFAAqF;IACrF,IAAI,uCAAuC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yEAAyE;IACzE,6EAA6E;IAC7E,IAAI,kCAAkC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,IAAoB,EACpB,YAAyB;IAEzB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACrB,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IAED,MAAM,KAAK,GAAiC,EAAE,CAAC;IAE/C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5D,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,SAAS,CAAC,kCAAkC;QAC9C,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW,CACxB,MAAsB,EACtB,IAAoB,EACpB,YAAyB,EACzB,OAA+B;IAE/B,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAEpD,OAAO,MAAM,CACX,KAAK,EAAE,KAA8B,EAAE,EAAE;QACvC,MAAM,MAAM,GAA4B,EAAE,GAAG,KAAK,EAAE,CAAC;QAErD,iBAAiB;QACjB,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;gBACrB,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5E,CAAC;IACH,CAAC,EACD;QACE,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI;QAC1C,MAAM;KACP,CACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,KAAuB,EACvB,MAAsB,EACtB,UAAkC,EAAE,EACpC,gBAA8B;IAE9B,qFAAqF;IACrF,MAAM,eAAe,GAAG,gBAAgB,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAE1E,2EAA2E;IAC3E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACrD,+CAA+C;gBAC/C,IAAI,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC;oBACjC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/F,CAAC"}
|
|
@@ -1,21 +1,47 @@
|
|
|
1
1
|
import { ToolDefinition } from './core/schema';
|
|
2
|
+
/**
|
|
3
|
+
* Options for MatimoInstance initialization
|
|
4
|
+
*/
|
|
5
|
+
export interface InitOptions {
|
|
6
|
+
toolPaths?: string[];
|
|
7
|
+
autoDiscover?: boolean;
|
|
8
|
+
includeCore?: boolean;
|
|
9
|
+
}
|
|
2
10
|
/**
|
|
3
11
|
* Matimo Instance - Single initialization point for tool execution
|
|
4
12
|
* Combines loader, registry, and executors into one interface
|
|
5
13
|
*/
|
|
6
14
|
export declare class MatimoInstance {
|
|
7
|
-
private
|
|
15
|
+
private toolPaths;
|
|
8
16
|
private loader;
|
|
9
17
|
private registry;
|
|
10
18
|
private commandExecutor;
|
|
11
19
|
private httpExecutor;
|
|
20
|
+
private functionExecutor;
|
|
12
21
|
private constructor();
|
|
13
22
|
/**
|
|
14
|
-
* Initialize Matimo with tools from
|
|
15
|
-
* @param
|
|
23
|
+
* Initialize Matimo with tools from directory or auto-discovery
|
|
24
|
+
* @param options - Initialization options (string for backward compatibility)
|
|
16
25
|
* @returns MatimoInstance ready to execute tools
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* // Backward compatible - single path
|
|
29
|
+
* const matimo = await MatimoInstance.init('./tools');
|
|
30
|
+
*
|
|
31
|
+
* // New - auto-discovery
|
|
32
|
+
* const matimo = await MatimoInstance.init({ autoDiscover: true });
|
|
33
|
+
*
|
|
34
|
+
* // Explicit paths
|
|
35
|
+
* const matimo = await MatimoInstance.init({
|
|
36
|
+
* toolPaths: ['./tools', require.resolve('@matimo/slack/tools')]
|
|
37
|
+
* });
|
|
38
|
+
*/
|
|
39
|
+
static init(options?: InitOptions | string): Promise<MatimoInstance>;
|
|
40
|
+
/**
|
|
41
|
+
* Get tool paths
|
|
42
|
+
* @returns Array of tool paths
|
|
17
43
|
*/
|
|
18
|
-
|
|
44
|
+
getToolPaths(): string[];
|
|
19
45
|
/**
|
|
20
46
|
* Execute a tool by name with parameters
|
|
21
47
|
* @param toolName - Name of the tool to execute
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matimo-instance.d.ts","sourceRoot":"","sources":["../../src/matimo-instance.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,gBAAgB,CAAmB;IAE3C,OAAO;IAWP;;;;;;;;;;;;;;;;OAgBG;WACU,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA4C1E;;;OAGG;IACH,YAAY,IAAI,MAAM,EAAE;IAIxB;;;;;OAKG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBlF;;;;OAIG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIrD;;;OAGG;IACH,SAAS,IAAI,cAAc,EAAE;IAI7B;;;OAGG;IACH,WAAW,IAAI,cAAc,EAAE;IAI/B;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE;IAI5C;;;;OAIG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE;IAI5C;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,oBAAoB;IAoD5B;;;OAGG;IACH,OAAO,CAAC,4BAA4B;IAkDpC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0C3B;;OAEG;IACH,OAAO,CAAC,WAAW;CAiBpB;AAED;;GAEG;AACH,eAAO,MAAM,MAAM;IACjB;;;;OAIG;oBACmB,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CAGvD,CAAC"}
|
|
@@ -3,32 +3,83 @@ import { ToolLoader } from './core/tool-loader';
|
|
|
3
3
|
import { ToolRegistry } from './core/tool-registry';
|
|
4
4
|
import { CommandExecutor } from './executors/command-executor';
|
|
5
5
|
import { HttpExecutor } from './executors/http-executor';
|
|
6
|
+
import { FunctionExecutor } from './executors/function-executor';
|
|
6
7
|
import { MatimoError, ErrorCode } from './errors/matimo-error';
|
|
7
8
|
/**
|
|
8
9
|
* Matimo Instance - Single initialization point for tool execution
|
|
9
10
|
* Combines loader, registry, and executors into one interface
|
|
10
11
|
*/
|
|
11
12
|
export class MatimoInstance {
|
|
12
|
-
constructor(
|
|
13
|
-
this.
|
|
13
|
+
constructor(toolPaths) {
|
|
14
|
+
this.toolPaths = toolPaths;
|
|
14
15
|
this.loader = new ToolLoader();
|
|
15
16
|
this.registry = new ToolRegistry();
|
|
16
|
-
// Use
|
|
17
|
-
const workingDir = path.dirname(
|
|
17
|
+
// Use the first path (primary) as working directory for command executor
|
|
18
|
+
const workingDir = toolPaths.length > 0 ? path.dirname(toolPaths[0]) : process.cwd();
|
|
18
19
|
this.commandExecutor = new CommandExecutor(workingDir);
|
|
19
20
|
this.httpExecutor = new HttpExecutor();
|
|
21
|
+
this.functionExecutor = new FunctionExecutor(toolPaths[0] || '');
|
|
20
22
|
}
|
|
21
23
|
/**
|
|
22
|
-
* Initialize Matimo with tools from
|
|
23
|
-
* @param
|
|
24
|
+
* Initialize Matimo with tools from directory or auto-discovery
|
|
25
|
+
* @param options - Initialization options (string for backward compatibility)
|
|
24
26
|
* @returns MatimoInstance ready to execute tools
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* // Backward compatible - single path
|
|
30
|
+
* const matimo = await MatimoInstance.init('./tools');
|
|
31
|
+
*
|
|
32
|
+
* // New - auto-discovery
|
|
33
|
+
* const matimo = await MatimoInstance.init({ autoDiscover: true });
|
|
34
|
+
*
|
|
35
|
+
* // Explicit paths
|
|
36
|
+
* const matimo = await MatimoInstance.init({
|
|
37
|
+
* toolPaths: ['./tools', require.resolve('@matimo/slack/tools')]
|
|
38
|
+
* });
|
|
25
39
|
*/
|
|
26
|
-
static async init(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
40
|
+
static async init(options) {
|
|
41
|
+
let finalOptions;
|
|
42
|
+
// Backward compatibility: if string is passed, treat as toolPath
|
|
43
|
+
if (typeof options === 'string') {
|
|
44
|
+
finalOptions = {
|
|
45
|
+
toolPaths: [options],
|
|
46
|
+
autoDiscover: false,
|
|
47
|
+
includeCore: false,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
finalOptions = {
|
|
52
|
+
autoDiscover: false,
|
|
53
|
+
includeCore: true,
|
|
54
|
+
...options,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const toolPaths = [];
|
|
58
|
+
// Include core tools (calculator, etc.) - currently not used in monorepo
|
|
59
|
+
// Use explicit toolPaths or autoDiscover instead
|
|
60
|
+
// if (finalOptions.includeCore) { ... }
|
|
61
|
+
// Add explicit paths
|
|
62
|
+
if (finalOptions.toolPaths) {
|
|
63
|
+
toolPaths.push(...finalOptions.toolPaths);
|
|
64
|
+
}
|
|
65
|
+
// Auto-discover @matimo/* packages
|
|
66
|
+
if (finalOptions.autoDiscover) {
|
|
67
|
+
const discoveredPaths = new ToolLoader().autoDiscoverPackages();
|
|
68
|
+
toolPaths.push(...discoveredPaths);
|
|
69
|
+
}
|
|
70
|
+
const instance = new MatimoInstance(toolPaths);
|
|
71
|
+
// Load tools from all paths
|
|
72
|
+
const allTools = instance.loader.loadToolsFromMultiplePaths(toolPaths);
|
|
73
|
+
instance.registry.registerAll(Array.from(allTools.values()));
|
|
30
74
|
return instance;
|
|
31
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Get tool paths
|
|
78
|
+
* @returns Array of tool paths
|
|
79
|
+
*/
|
|
80
|
+
getToolPaths() {
|
|
81
|
+
return [...this.toolPaths];
|
|
82
|
+
}
|
|
32
83
|
/**
|
|
33
84
|
* Execute a tool by name with parameters
|
|
34
85
|
* @param toolName - Name of the tool to execute
|
|
@@ -239,6 +290,8 @@ export class MatimoInstance {
|
|
|
239
290
|
return this.commandExecutor;
|
|
240
291
|
case 'http':
|
|
241
292
|
return this.httpExecutor;
|
|
293
|
+
case 'function':
|
|
294
|
+
return this.functionExecutor;
|
|
242
295
|
default:
|
|
243
296
|
throw new MatimoError(`Unsupported execution type: ${executionType}`, ErrorCode.EXECUTION_FAILED, { executionType });
|
|
244
297
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matimo-instance.js","sourceRoot":"","sources":["../../src/matimo-instance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculator utility functions
|
|
3
|
+
*/
|
|
4
|
+
declare const Calculator: {
|
|
5
|
+
/**
|
|
6
|
+
* Normalize operation name to handle variations
|
|
7
|
+
*/
|
|
8
|
+
normalizeOperation(op: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Perform arithmetic calculation
|
|
11
|
+
*/
|
|
12
|
+
calculate(operation: string, a: number, b: number): {
|
|
13
|
+
result: number;
|
|
14
|
+
operation: string;
|
|
15
|
+
original_operation: string;
|
|
16
|
+
operands: {
|
|
17
|
+
a: number;
|
|
18
|
+
b: number;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* CLI entry point
|
|
24
|
+
*/
|
|
25
|
+
declare function main(): void;
|
|
26
|
+
//# sourceMappingURL=calculator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculator.d.ts","sourceRoot":"","sources":["../../../tools/calculator/calculator.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,QAAA,MAAM,UAAU;IACd;;OAEG;2BACoB,MAAM,GAAG,MAAM;IAsCtC;;OAEG;yBAEU,MAAM,KACd,MAAM,KACN,MAAM,GACR;QACD,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,QAAQ,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACpC;CA+BF,CAAC;AAEF;;GAEG;AACH,iBAAS,IAAI,IAAI,IAAI,CAyBpB"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Calculator implementation
|
|
3
|
+
// This script is executed by the calculator tool
|
|
4
|
+
/**
|
|
5
|
+
* Calculator utility functions
|
|
6
|
+
*/
|
|
7
|
+
const Calculator = {
|
|
8
|
+
/**
|
|
9
|
+
* Normalize operation name to handle variations
|
|
10
|
+
*/
|
|
11
|
+
normalizeOperation(op) {
|
|
12
|
+
const normalized = op.toLowerCase().trim();
|
|
13
|
+
// Map variations to canonical operation names
|
|
14
|
+
const operationMap = {
|
|
15
|
+
// Addition variants
|
|
16
|
+
add: 'add',
|
|
17
|
+
addition: 'add',
|
|
18
|
+
sum: 'add',
|
|
19
|
+
plus: 'add',
|
|
20
|
+
'+': 'add',
|
|
21
|
+
// Subtraction variants
|
|
22
|
+
subtract: 'subtract',
|
|
23
|
+
subtraction: 'subtract',
|
|
24
|
+
minus: 'subtract',
|
|
25
|
+
sub: 'subtract',
|
|
26
|
+
'-': 'subtract',
|
|
27
|
+
// Multiplication variants
|
|
28
|
+
multiply: 'multiply',
|
|
29
|
+
multiplication: 'multiply',
|
|
30
|
+
times: 'multiply',
|
|
31
|
+
product: 'multiply',
|
|
32
|
+
mul: 'multiply',
|
|
33
|
+
'*': 'multiply',
|
|
34
|
+
x: 'multiply',
|
|
35
|
+
// Division variants
|
|
36
|
+
divide: 'divide',
|
|
37
|
+
division: 'divide',
|
|
38
|
+
div: 'divide',
|
|
39
|
+
'/': 'divide',
|
|
40
|
+
};
|
|
41
|
+
return operationMap[normalized] || normalized;
|
|
42
|
+
},
|
|
43
|
+
/**
|
|
44
|
+
* Perform arithmetic calculation
|
|
45
|
+
*/
|
|
46
|
+
calculate(operation, a, b) {
|
|
47
|
+
const normalizedOp = this.normalizeOperation(operation);
|
|
48
|
+
let result;
|
|
49
|
+
switch (normalizedOp) {
|
|
50
|
+
case 'add':
|
|
51
|
+
result = a + b;
|
|
52
|
+
break;
|
|
53
|
+
case 'subtract':
|
|
54
|
+
result = a - b;
|
|
55
|
+
break;
|
|
56
|
+
case 'multiply':
|
|
57
|
+
result = a * b;
|
|
58
|
+
break;
|
|
59
|
+
case 'divide':
|
|
60
|
+
if (b === 0) {
|
|
61
|
+
throw new Error('Division by zero');
|
|
62
|
+
}
|
|
63
|
+
result = a / b;
|
|
64
|
+
break;
|
|
65
|
+
default:
|
|
66
|
+
throw new Error(`Unknown operation: ${operation}`);
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
result,
|
|
70
|
+
operation: normalizedOp,
|
|
71
|
+
original_operation: operation,
|
|
72
|
+
operands: { a, b },
|
|
73
|
+
};
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* CLI entry point
|
|
78
|
+
*/
|
|
79
|
+
function main() {
|
|
80
|
+
try {
|
|
81
|
+
const [operation, aStr, bStr] = process.argv.slice(2);
|
|
82
|
+
if (!operation || !aStr || !bStr) {
|
|
83
|
+
console.error('Usage: calculator.ts <operation> <a> <b>');
|
|
84
|
+
console.error('Operations: add, subtract, multiply, divide');
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
const a = parseFloat(aStr);
|
|
88
|
+
const b = parseFloat(bStr);
|
|
89
|
+
if (isNaN(a) || isNaN(b)) {
|
|
90
|
+
console.error('Error: Arguments must be valid numbers');
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
const result = Calculator.calculate(operation, a, b);
|
|
94
|
+
console.log(JSON.stringify(result));
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
98
|
+
console.error(message);
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Execute CLI entry point
|
|
103
|
+
main();
|
|
104
|
+
//# sourceMappingURL=calculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculator.js","sourceRoot":"","sources":["../../../tools/calculator/calculator.ts"],"names":[],"mappings":"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"}
|