@a2aletheia/sdk 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.md +436 -0
  2. package/dist/__tests__/pow-solver.test.d.ts +2 -0
  3. package/dist/__tests__/pow-solver.test.d.ts.map +1 -0
  4. package/dist/__tests__/pow-solver.test.js +35 -0
  5. package/dist/__tests__/pow-solver.test.js.map +1 -0
  6. package/dist/__tests__/signing.test.d.ts +2 -0
  7. package/dist/__tests__/signing.test.d.ts.map +1 -0
  8. package/dist/__tests__/signing.test.js +59 -0
  9. package/dist/__tests__/signing.test.js.map +1 -0
  10. package/dist/agent/agent-context.d.ts +26 -0
  11. package/dist/agent/agent-context.d.ts.map +1 -0
  12. package/dist/agent/agent-context.js +38 -0
  13. package/dist/agent/agent-context.js.map +1 -0
  14. package/dist/agent/agent-executor.d.ts +17 -0
  15. package/dist/agent/agent-executor.d.ts.map +1 -0
  16. package/dist/agent/agent-executor.js +91 -0
  17. package/dist/agent/agent-executor.js.map +1 -0
  18. package/dist/agent/agent-response.d.ts +63 -0
  19. package/dist/agent/agent-response.d.ts.map +1 -0
  20. package/dist/agent/agent-response.js +211 -0
  21. package/dist/agent/agent-response.js.map +1 -0
  22. package/dist/agent/aletheia-agent.d.ts +114 -0
  23. package/dist/agent/aletheia-agent.d.ts.map +1 -0
  24. package/dist/agent/aletheia-agent.js +248 -0
  25. package/dist/agent/aletheia-agent.js.map +1 -0
  26. package/dist/agent/index.d.ts +6 -0
  27. package/dist/agent/index.d.ts.map +1 -0
  28. package/dist/agent/index.js +9 -0
  29. package/dist/agent/index.js.map +1 -0
  30. package/dist/agent/types.d.ts +61 -0
  31. package/dist/agent/types.d.ts.map +1 -0
  32. package/dist/agent/types.js +2 -0
  33. package/dist/agent/types.js.map +1 -0
  34. package/dist/client.d.ts +114 -0
  35. package/dist/client.d.ts.map +1 -0
  36. package/dist/client.js +141 -0
  37. package/dist/client.js.map +1 -0
  38. package/dist/identity/agent-signer.d.ts +93 -0
  39. package/dist/identity/agent-signer.d.ts.map +1 -0
  40. package/dist/identity/agent-signer.js +288 -0
  41. package/dist/identity/agent-signer.js.map +1 -0
  42. package/dist/identity/did-resolver.d.ts +17 -0
  43. package/dist/identity/did-resolver.d.ts.map +1 -0
  44. package/dist/identity/did-resolver.js +73 -0
  45. package/dist/identity/did-resolver.js.map +1 -0
  46. package/dist/identity/index.d.ts +4 -0
  47. package/dist/identity/index.d.ts.map +1 -0
  48. package/dist/identity/index.js +4 -0
  49. package/dist/identity/index.js.map +1 -0
  50. package/dist/identity/manifest-fetcher.d.ts +12 -0
  51. package/dist/identity/manifest-fetcher.d.ts.map +1 -0
  52. package/dist/identity/manifest-fetcher.js +27 -0
  53. package/dist/identity/manifest-fetcher.js.map +1 -0
  54. package/dist/index.d.ts +12 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +20 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/logger/console-logger.d.ts +20 -0
  59. package/dist/logger/console-logger.d.ts.map +1 -0
  60. package/dist/logger/console-logger.js +43 -0
  61. package/dist/logger/console-logger.js.map +1 -0
  62. package/dist/logger/event-emitter.d.ts +39 -0
  63. package/dist/logger/event-emitter.d.ts.map +1 -0
  64. package/dist/logger/event-emitter.js +50 -0
  65. package/dist/logger/event-emitter.js.map +1 -0
  66. package/dist/logger/index.d.ts +4 -0
  67. package/dist/logger/index.d.ts.map +1 -0
  68. package/dist/logger/index.js +4 -0
  69. package/dist/logger/index.js.map +1 -0
  70. package/dist/logger/noop-logger.d.ts +20 -0
  71. package/dist/logger/noop-logger.d.ts.map +1 -0
  72. package/dist/logger/noop-logger.js +19 -0
  73. package/dist/logger/noop-logger.js.map +1 -0
  74. package/dist/reputation/index.d.ts +2 -0
  75. package/dist/reputation/index.d.ts.map +1 -0
  76. package/dist/reputation/index.js +2 -0
  77. package/dist/reputation/index.js.map +1 -0
  78. package/dist/reputation/pow-solver.d.ts +20 -0
  79. package/dist/reputation/pow-solver.d.ts.map +1 -0
  80. package/dist/reputation/pow-solver.js +46 -0
  81. package/dist/reputation/pow-solver.js.map +1 -0
  82. package/dist/reputation/rating-client.d.ts +35 -0
  83. package/dist/reputation/rating-client.d.ts.map +1 -0
  84. package/dist/reputation/rating-client.js +51 -0
  85. package/dist/reputation/rating-client.js.map +1 -0
  86. package/dist/security/audit-client.d.ts +17 -0
  87. package/dist/security/audit-client.d.ts.map +1 -0
  88. package/dist/security/audit-client.js +20 -0
  89. package/dist/security/audit-client.js.map +1 -0
  90. package/dist/security/index.d.ts +2 -0
  91. package/dist/security/index.d.ts.map +1 -0
  92. package/dist/security/index.js +2 -0
  93. package/dist/security/index.js.map +1 -0
  94. package/dist/tools/calculator.d.ts +29 -0
  95. package/dist/tools/calculator.d.ts.map +1 -0
  96. package/dist/tools/calculator.js +314 -0
  97. package/dist/tools/calculator.js.map +1 -0
  98. package/dist/tools/convert-units.d.ts +49 -0
  99. package/dist/tools/convert-units.d.ts.map +1 -0
  100. package/dist/tools/convert-units.js +152 -0
  101. package/dist/tools/convert-units.js.map +1 -0
  102. package/dist/tools/get-current-time.d.ts +23 -0
  103. package/dist/tools/get-current-time.d.ts.map +1 -0
  104. package/dist/tools/get-current-time.js +28 -0
  105. package/dist/tools/get-current-time.js.map +1 -0
  106. package/dist/tools/index.d.ts +80 -0
  107. package/dist/tools/index.d.ts.map +1 -0
  108. package/dist/tools/index.js +41 -0
  109. package/dist/tools/index.js.map +1 -0
  110. package/dist/tools/uuid-generator.d.ts +21 -0
  111. package/dist/tools/uuid-generator.d.ts.map +1 -0
  112. package/dist/tools/uuid-generator.js +25 -0
  113. package/dist/tools/uuid-generator.js.map +1 -0
  114. package/dist/utils/http.d.ts +11 -0
  115. package/dist/utils/http.d.ts.map +1 -0
  116. package/dist/utils/http.js +60 -0
  117. package/dist/utils/http.js.map +1 -0
  118. package/dist/utils/signing.d.ts +43 -0
  119. package/dist/utils/signing.d.ts.map +1 -0
  120. package/dist/utils/signing.js +78 -0
  121. package/dist/utils/signing.js.map +1 -0
  122. package/package.json +66 -0
@@ -0,0 +1,314 @@
1
+ // ── Result type ──────────────────────────────────────────────────────────────
2
+ // ── Constants & allowed functions ────────────────────────────────────────────
3
+ const MAX_INPUT_LENGTH = 1000;
4
+ const CONSTANTS = {
5
+ PI: Math.PI,
6
+ E: Math.E,
7
+ };
8
+ const FUNCTIONS = {
9
+ sqrt: Math.sqrt,
10
+ abs: Math.abs,
11
+ ceil: Math.ceil,
12
+ floor: Math.floor,
13
+ round: Math.round,
14
+ min: Math.min,
15
+ max: Math.max,
16
+ log: Math.log,
17
+ sin: Math.sin,
18
+ cos: Math.cos,
19
+ tan: Math.tan,
20
+ };
21
+ // ── Tokenizer ────────────────────────────────────────────────────────────────
22
+ var TokenType;
23
+ (function (TokenType) {
24
+ TokenType[TokenType["Number"] = 0] = "Number";
25
+ TokenType[TokenType["Plus"] = 1] = "Plus";
26
+ TokenType[TokenType["Minus"] = 2] = "Minus";
27
+ TokenType[TokenType["Star"] = 3] = "Star";
28
+ TokenType[TokenType["Slash"] = 4] = "Slash";
29
+ TokenType[TokenType["Percent"] = 5] = "Percent";
30
+ TokenType[TokenType["Power"] = 6] = "Power";
31
+ TokenType[TokenType["LeftParen"] = 7] = "LeftParen";
32
+ TokenType[TokenType["RightParen"] = 8] = "RightParen";
33
+ TokenType[TokenType["Comma"] = 9] = "Comma";
34
+ TokenType[TokenType["Identifier"] = 10] = "Identifier";
35
+ TokenType[TokenType["EOF"] = 11] = "EOF";
36
+ })(TokenType || (TokenType = {}));
37
+ function tokenize(input) {
38
+ const tokens = [];
39
+ let i = 0;
40
+ while (i < input.length) {
41
+ const ch = input[i];
42
+ // Whitespace
43
+ if (ch === " " || ch === "\t") {
44
+ i++;
45
+ continue;
46
+ }
47
+ // Numbers (integers and decimals)
48
+ if (ch >= "0" && ch <= "9") {
49
+ let num = "";
50
+ while (i < input.length && ((input[i] >= "0" && input[i] <= "9") || input[i] === ".")) {
51
+ num += input[i];
52
+ i++;
53
+ }
54
+ tokens.push({ type: TokenType.Number, value: num });
55
+ continue;
56
+ }
57
+ // Decimal starting with dot (e.g. .5)
58
+ if (ch === "." && i + 1 < input.length && input[i + 1] >= "0" && input[i + 1] <= "9") {
59
+ let num = "";
60
+ while (i < input.length && ((input[i] >= "0" && input[i] <= "9") || input[i] === ".")) {
61
+ num += input[i];
62
+ i++;
63
+ }
64
+ tokens.push({ type: TokenType.Number, value: num });
65
+ continue;
66
+ }
67
+ // Identifiers (function names, constants)
68
+ if ((ch >= "a" && ch <= "z") || (ch >= "A" && ch <= "Z") || ch === "_") {
69
+ let ident = "";
70
+ while (i < input.length &&
71
+ ((input[i] >= "a" && input[i] <= "z") ||
72
+ (input[i] >= "A" && input[i] <= "Z") ||
73
+ (input[i] >= "0" && input[i] <= "9") ||
74
+ input[i] === "_")) {
75
+ ident += input[i];
76
+ i++;
77
+ }
78
+ tokens.push({ type: TokenType.Identifier, value: ident });
79
+ continue;
80
+ }
81
+ // Two-character operators
82
+ if (ch === "*" && i + 1 < input.length && input[i + 1] === "*") {
83
+ tokens.push({ type: TokenType.Power, value: "**" });
84
+ i += 2;
85
+ continue;
86
+ }
87
+ // Single-character operators
88
+ switch (ch) {
89
+ case "+":
90
+ tokens.push({ type: TokenType.Plus, value: "+" });
91
+ break;
92
+ case "-":
93
+ tokens.push({ type: TokenType.Minus, value: "-" });
94
+ break;
95
+ case "*":
96
+ tokens.push({ type: TokenType.Star, value: "*" });
97
+ break;
98
+ case "/":
99
+ tokens.push({ type: TokenType.Slash, value: "/" });
100
+ break;
101
+ case "%":
102
+ tokens.push({ type: TokenType.Percent, value: "%" });
103
+ break;
104
+ case "(":
105
+ tokens.push({ type: TokenType.LeftParen, value: "(" });
106
+ break;
107
+ case ")":
108
+ tokens.push({ type: TokenType.RightParen, value: ")" });
109
+ break;
110
+ case ",":
111
+ tokens.push({ type: TokenType.Comma, value: "," });
112
+ break;
113
+ default:
114
+ throw new Error(`Unexpected character: '${ch}'`);
115
+ }
116
+ i++;
117
+ }
118
+ tokens.push({ type: TokenType.EOF, value: "" });
119
+ return tokens;
120
+ }
121
+ // ── Recursive descent parser ─────────────────────────────────────────────────
122
+ //
123
+ // Grammar (standard operator precedence):
124
+ // expression = additive
125
+ // additive = multiplicative ( ("+" | "-") multiplicative )*
126
+ // multiplicative = power ( ("*" | "/" | "%") power )*
127
+ // power = unary ( "**" power )? // right-associative
128
+ // unary = ("-" | "+") unary | call
129
+ // call = IDENTIFIER "(" args ")" | primary
130
+ // args = expression ( "," expression )*
131
+ // primary = NUMBER | IDENTIFIER | "(" expression ")"
132
+ class Parser {
133
+ tokens;
134
+ pos = 0;
135
+ constructor(tokens) {
136
+ this.tokens = tokens;
137
+ }
138
+ parse() {
139
+ const result = this.expression();
140
+ if (this.current().type !== TokenType.EOF) {
141
+ throw new Error(`Unexpected token: '${this.current().value}' at position ${this.pos}`);
142
+ }
143
+ return result;
144
+ }
145
+ current() {
146
+ return this.tokens[this.pos];
147
+ }
148
+ advance() {
149
+ const token = this.tokens[this.pos];
150
+ this.pos++;
151
+ return token;
152
+ }
153
+ expect(type) {
154
+ const token = this.current();
155
+ if (token.type !== type) {
156
+ throw new Error(`Expected token type ${type}, got '${token.value}'`);
157
+ }
158
+ return this.advance();
159
+ }
160
+ expression() {
161
+ return this.additive();
162
+ }
163
+ additive() {
164
+ let left = this.multiplicative();
165
+ while (this.current().type === TokenType.Plus ||
166
+ this.current().type === TokenType.Minus) {
167
+ const op = this.advance();
168
+ const right = this.multiplicative();
169
+ if (op.type === TokenType.Plus) {
170
+ left = left + right;
171
+ }
172
+ else {
173
+ left = left - right;
174
+ }
175
+ }
176
+ return left;
177
+ }
178
+ multiplicative() {
179
+ let left = this.power();
180
+ while (this.current().type === TokenType.Star ||
181
+ this.current().type === TokenType.Slash ||
182
+ this.current().type === TokenType.Percent) {
183
+ const op = this.advance();
184
+ const right = this.power();
185
+ if (op.type === TokenType.Star) {
186
+ left = left * right;
187
+ }
188
+ else if (op.type === TokenType.Slash) {
189
+ if (right === 0)
190
+ throw new Error("Division by zero");
191
+ left = left / right;
192
+ }
193
+ else {
194
+ if (right === 0)
195
+ throw new Error("Modulo by zero");
196
+ left = left % right;
197
+ }
198
+ }
199
+ return left;
200
+ }
201
+ power() {
202
+ const base = this.unary();
203
+ if (this.current().type === TokenType.Power) {
204
+ this.advance();
205
+ // Right-associative: 2**3**2 = 2**(3**2) = 512
206
+ const exponent = this.power();
207
+ return Math.pow(base, exponent);
208
+ }
209
+ return base;
210
+ }
211
+ unary() {
212
+ if (this.current().type === TokenType.Minus) {
213
+ this.advance();
214
+ return -this.unary();
215
+ }
216
+ if (this.current().type === TokenType.Plus) {
217
+ this.advance();
218
+ return this.unary();
219
+ }
220
+ return this.call();
221
+ }
222
+ call() {
223
+ if (this.current().type === TokenType.Identifier &&
224
+ this.pos + 1 < this.tokens.length &&
225
+ this.tokens[this.pos + 1].type === TokenType.LeftParen) {
226
+ const name = this.advance().value;
227
+ const fn = FUNCTIONS[name];
228
+ if (!fn) {
229
+ throw new Error(`Unknown function: '${name}'. Available: ${Object.keys(FUNCTIONS).join(", ")}`);
230
+ }
231
+ this.expect(TokenType.LeftParen);
232
+ const args = this.args();
233
+ this.expect(TokenType.RightParen);
234
+ return fn(...args);
235
+ }
236
+ return this.primary();
237
+ }
238
+ args() {
239
+ const result = [this.expression()];
240
+ while (this.current().type === TokenType.Comma) {
241
+ this.advance();
242
+ result.push(this.expression());
243
+ }
244
+ return result;
245
+ }
246
+ primary() {
247
+ const token = this.current();
248
+ if (token.type === TokenType.Number) {
249
+ this.advance();
250
+ const num = Number(token.value);
251
+ if (!Number.isFinite(num)) {
252
+ throw new Error(`Invalid number: '${token.value}'`);
253
+ }
254
+ return num;
255
+ }
256
+ if (token.type === TokenType.Identifier) {
257
+ const value = CONSTANTS[token.value];
258
+ if (value === undefined) {
259
+ throw new Error(`Unknown identifier: '${token.value}'. Available constants: ${Object.keys(CONSTANTS).join(", ")}. Available functions: ${Object.keys(FUNCTIONS).join(", ")}`);
260
+ }
261
+ this.advance();
262
+ return value;
263
+ }
264
+ if (token.type === TokenType.LeftParen) {
265
+ this.advance();
266
+ const value = this.expression();
267
+ this.expect(TokenType.RightParen);
268
+ return value;
269
+ }
270
+ throw new Error(`Unexpected token: '${token.value}'`);
271
+ }
272
+ }
273
+ // ── Core function ────────────────────────────────────────────────────────────
274
+ export function calculate(expression) {
275
+ if (expression.length > MAX_INPUT_LENGTH) {
276
+ throw new Error(`Expression too long: ${expression.length} chars (max ${MAX_INPUT_LENGTH})`);
277
+ }
278
+ const trimmed = expression.trim();
279
+ if (trimmed.length === 0) {
280
+ throw new Error("Empty expression");
281
+ }
282
+ const tokens = tokenize(trimmed);
283
+ const parser = new Parser(tokens);
284
+ const result = parser.parse();
285
+ if (!Number.isFinite(result)) {
286
+ throw new Error(`Result is not finite: ${result}`);
287
+ }
288
+ return {
289
+ tool: "calculator",
290
+ input: expression,
291
+ result,
292
+ };
293
+ }
294
+ // ── Tool definition (OpenAI-compatible / LangChain / Vercel AI SDK) ──────────
295
+ export const calculatorToolDefinition = {
296
+ type: "function",
297
+ function: {
298
+ name: "calculator",
299
+ description: "Evaluate a mathematical expression safely. Supports operators: + - * / % ** (power), parentheses, unary minus. Built-in functions: sqrt, abs, ceil, floor, round, min, max, log, sin, cos, tan. Constants: PI, E. Examples: '2 + 3 * 4', 'sqrt(144)', 'min(10, 20, 5)', '2 ** 10', 'PI * 2'. Input capped at 1000 characters. No eval() — uses a safe recursive descent parser.",
300
+ parameters: {
301
+ type: "object",
302
+ properties: {
303
+ expression: {
304
+ type: "string",
305
+ description: "The mathematical expression to evaluate (e.g. '2 + 3 * 4', 'sqrt(144)', 'PI * r ** 2')",
306
+ },
307
+ },
308
+ required: ["expression"],
309
+ additionalProperties: false,
310
+ },
311
+ },
312
+ execute: (input) => calculate(input.expression),
313
+ };
314
+ //# sourceMappingURL=calculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculator.js","sourceRoot":"","sources":["../../src/tools/calculator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ export type CryptoUnit = "wei" | "gwei" | "ether";
2
+ export type TimeUnit = "seconds" | "minutes" | "hours" | "days";
3
+ export type DataUnit = "bytes" | "KB" | "MB" | "GB" | "TB";
4
+ export type SupportedUnit = CryptoUnit | TimeUnit | DataUnit;
5
+ export type UnitCategory = "crypto" | "time" | "data";
6
+ export interface UnitConversionInput {
7
+ value: string;
8
+ from: SupportedUnit;
9
+ to: SupportedUnit;
10
+ }
11
+ export interface UnitConversionResult {
12
+ tool: "convert_units";
13
+ inputValue: string;
14
+ fromUnit: SupportedUnit;
15
+ toUnit: SupportedUnit;
16
+ result: string;
17
+ category: UnitCategory;
18
+ }
19
+ export declare function convertUnits(value: string, from: SupportedUnit, to: SupportedUnit): UnitConversionResult;
20
+ export declare const convertUnitsToolDefinition: {
21
+ type: "function";
22
+ function: {
23
+ name: string;
24
+ description: string;
25
+ parameters: {
26
+ type: "object";
27
+ properties: {
28
+ value: {
29
+ type: "string";
30
+ description: string;
31
+ };
32
+ from: {
33
+ type: "string";
34
+ enum: readonly ["wei", "gwei", "ether", "seconds", "minutes", "hours", "days", "bytes", "KB", "MB", "GB", "TB"];
35
+ description: string;
36
+ };
37
+ to: {
38
+ type: "string";
39
+ enum: readonly ["wei", "gwei", "ether", "seconds", "minutes", "hours", "days", "bytes", "KB", "MB", "GB", "TB"];
40
+ description: string;
41
+ };
42
+ };
43
+ required: readonly ["value", "from", "to"];
44
+ additionalProperties: false;
45
+ };
46
+ };
47
+ execute: (input: UnitConversionInput) => UnitConversionResult;
48
+ };
49
+ //# sourceMappingURL=convert-units.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-units.d.ts","sourceRoot":"","sources":["../../src/tools/convert-units.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAClD,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAChE,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC3D,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC7D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;IACpB,EAAE,EAAE,aAAa,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;CACxB;AA6FD,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,aAAa,EACnB,EAAE,EAAE,aAAa,GAChB,oBAAoB,CA0CtB;AAmBD,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA6BpB,mBAAmB,KAAG,oBAAoB;CAE5D,CAAC"}
@@ -0,0 +1,152 @@
1
+ import { parseEther, formatEther, parseGwei, formatGwei } from "viem";
2
+ // ── Unit category lookup ─────────────────────────────────────────────────────
3
+ const UNIT_CATEGORIES = {
4
+ wei: "crypto",
5
+ gwei: "crypto",
6
+ ether: "crypto",
7
+ seconds: "time",
8
+ minutes: "time",
9
+ hours: "time",
10
+ days: "time",
11
+ bytes: "data",
12
+ KB: "data",
13
+ MB: "data",
14
+ GB: "data",
15
+ TB: "data",
16
+ };
17
+ const ALL_UNITS = Object.keys(UNIT_CATEGORIES);
18
+ // ── Crypto conversions (via viem bigint functions) ───────────────────────────
19
+ function convertCrypto(value, from, to) {
20
+ if (from === to)
21
+ return value;
22
+ let weiValue;
23
+ switch (from) {
24
+ case "ether":
25
+ weiValue = parseEther(value);
26
+ break;
27
+ case "gwei":
28
+ weiValue = parseGwei(value);
29
+ break;
30
+ case "wei":
31
+ weiValue = BigInt(value);
32
+ break;
33
+ }
34
+ switch (to) {
35
+ case "ether":
36
+ return formatEther(weiValue);
37
+ case "gwei":
38
+ return formatGwei(weiValue);
39
+ case "wei":
40
+ return weiValue.toString();
41
+ }
42
+ }
43
+ // ── Time conversions (through seconds) ───────────────────────────────────────
44
+ const TIME_TO_SECONDS = {
45
+ seconds: 1,
46
+ minutes: 60,
47
+ hours: 3600,
48
+ days: 86400,
49
+ };
50
+ function convertTime(value, from, to) {
51
+ const numValue = Number(value);
52
+ if (!Number.isFinite(numValue)) {
53
+ throw new Error(`Invalid numeric value: ${value}`);
54
+ }
55
+ const inSeconds = numValue * TIME_TO_SECONDS[from];
56
+ return (inSeconds / TIME_TO_SECONDS[to]).toString();
57
+ }
58
+ // ── Data conversions (through bytes) ─────────────────────────────────────────
59
+ const DATA_TO_BYTES = {
60
+ bytes: 1,
61
+ KB: 1024,
62
+ MB: 1024 ** 2,
63
+ GB: 1024 ** 3,
64
+ TB: 1024 ** 4,
65
+ };
66
+ function convertData(value, from, to) {
67
+ const numValue = Number(value);
68
+ if (!Number.isFinite(numValue)) {
69
+ throw new Error(`Invalid numeric value: ${value}`);
70
+ }
71
+ const inBytes = numValue * DATA_TO_BYTES[from];
72
+ return (inBytes / DATA_TO_BYTES[to]).toString();
73
+ }
74
+ // ── Core function ────────────────────────────────────────────────────────────
75
+ export function convertUnits(value, from, to) {
76
+ const fromCategory = UNIT_CATEGORIES[from];
77
+ const toCategory = UNIT_CATEGORIES[to];
78
+ if (!fromCategory) {
79
+ throw new Error(`Unsupported unit: "${from}". Supported units: ${ALL_UNITS.join(", ")}`);
80
+ }
81
+ if (!toCategory) {
82
+ throw new Error(`Unsupported unit: "${to}". Supported units: ${ALL_UNITS.join(", ")}`);
83
+ }
84
+ if (fromCategory !== toCategory) {
85
+ throw new Error(`Cannot convert between different categories: "${from}" (${fromCategory}) and "${to}" (${toCategory})`);
86
+ }
87
+ let result;
88
+ switch (fromCategory) {
89
+ case "crypto":
90
+ result = convertCrypto(value, from, to);
91
+ break;
92
+ case "time":
93
+ result = convertTime(value, from, to);
94
+ break;
95
+ case "data":
96
+ result = convertData(value, from, to);
97
+ break;
98
+ }
99
+ return {
100
+ tool: "convert_units",
101
+ inputValue: value,
102
+ fromUnit: from,
103
+ toUnit: to,
104
+ result,
105
+ category: fromCategory,
106
+ };
107
+ }
108
+ // ── Tool definition (OpenAI-compatible / LangChain / Vercel AI SDK) ──────────
109
+ const UNIT_ENUM = [
110
+ "wei",
111
+ "gwei",
112
+ "ether",
113
+ "seconds",
114
+ "minutes",
115
+ "hours",
116
+ "days",
117
+ "bytes",
118
+ "KB",
119
+ "MB",
120
+ "GB",
121
+ "TB",
122
+ ];
123
+ export const convertUnitsToolDefinition = {
124
+ type: "function",
125
+ function: {
126
+ name: "convert_units",
127
+ description: "Convert a value between units in the same category. Categories: crypto (wei, gwei, ether — bigint precision), time (seconds, minutes, hours, days), data (bytes, KB, MB, GB, TB). Both 'from' and 'to' units must belong to the same category.",
128
+ parameters: {
129
+ type: "object",
130
+ properties: {
131
+ value: {
132
+ type: "string",
133
+ description: "The numeric value to convert, as a string for precision (e.g. '1.5', '1000000000000000000')",
134
+ },
135
+ from: {
136
+ type: "string",
137
+ enum: UNIT_ENUM,
138
+ description: "The source unit to convert from",
139
+ },
140
+ to: {
141
+ type: "string",
142
+ enum: UNIT_ENUM,
143
+ description: "The target unit to convert to",
144
+ },
145
+ },
146
+ required: ["value", "from", "to"],
147
+ additionalProperties: false,
148
+ },
149
+ },
150
+ execute: (input) => convertUnits(input.value, input.from, input.to),
151
+ };
152
+ //# sourceMappingURL=convert-units.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-units.js","sourceRoot":"","sources":["../../src/tools/convert-units.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface CurrentTimeResult {
2
+ tool: "get_current_time";
3
+ iso8601: string;
4
+ unixTimestamp: number;
5
+ unixTimestampMs: number;
6
+ utcString: string;
7
+ }
8
+ export declare function getCurrentTime(): CurrentTimeResult;
9
+ export declare const getCurrentTimeToolDefinition: {
10
+ type: "function";
11
+ function: {
12
+ name: string;
13
+ description: string;
14
+ parameters: {
15
+ type: "object";
16
+ properties: Record<string, never>;
17
+ required: string[];
18
+ additionalProperties: false;
19
+ };
20
+ };
21
+ execute: (_input?: Record<string, never>) => CurrentTimeResult;
22
+ };
23
+ //# sourceMappingURL=get-current-time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-current-time.d.ts","sourceRoot":"","sources":["../../src/tools/get-current-time.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,wBAAgB,cAAc,IAAI,iBAAiB,CASlD;AAID,eAAO,MAAM,4BAA4B;;;;;;;wBAQjB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;sBACvB,MAAM,EAAE;;;;uBAIT,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,KAAG,iBAAiB;CAE7D,CAAC"}
@@ -0,0 +1,28 @@
1
+ // ── Result type ──────────────────────────────────────────────────────────────
2
+ // ── Core function ────────────────────────────────────────────────────────────
3
+ export function getCurrentTime() {
4
+ const now = new Date();
5
+ return {
6
+ tool: "get_current_time",
7
+ iso8601: now.toISOString(),
8
+ unixTimestamp: Math.floor(now.getTime() / 1000),
9
+ unixTimestampMs: now.getTime(),
10
+ utcString: now.toUTCString(),
11
+ };
12
+ }
13
+ // ── Tool definition (OpenAI-compatible / LangChain / Vercel AI SDK) ──────────
14
+ export const getCurrentTimeToolDefinition = {
15
+ type: "function",
16
+ function: {
17
+ name: "get_current_time",
18
+ description: "Get the current date and time in multiple formats: ISO 8601, Unix timestamp (seconds), Unix timestamp (milliseconds), and UTC string. Use this when you need the current time for scheduling, logging, timestamps, or time-based calculations.",
19
+ parameters: {
20
+ type: "object",
21
+ properties: {},
22
+ required: [],
23
+ additionalProperties: false,
24
+ },
25
+ },
26
+ execute: (_input) => getCurrentTime(),
27
+ };
28
+ //# sourceMappingURL=get-current-time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-current-time.js","sourceRoot":"","sources":["../../src/tools/get-current-time.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAUhF,gFAAgF;AAEhF,MAAM,UAAU,cAAc;IAC5B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE;QAC1B,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;QAC/C,eAAe,EAAE,GAAG,CAAC,OAAO,EAAE;QAC9B,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;KAC7B,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,IAAI,EAAE,UAAmB;IACzB,QAAQ,EAAE;QACR,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,gPAAgP;QAClP,UAAU,EAAE;YACV,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE,EAA2B;YACvC,QAAQ,EAAE,EAAc;YACxB,oBAAoB,EAAE,KAAc;SACrC;KACF;IACD,OAAO,EAAE,CAAC,MAA8B,EAAqB,EAAE,CAC7D,cAAc,EAAE;CACnB,CAAC"}