@klurien_nova/agent-kit 1.0.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 (69) hide show
  1. package/dist/agent.d.ts +59 -0
  2. package/dist/agent.d.ts.map +1 -0
  3. package/dist/agent.js +133 -0
  4. package/dist/agent.js.map +1 -0
  5. package/dist/client.d.ts +70 -0
  6. package/dist/client.d.ts.map +1 -0
  7. package/dist/client.js +139 -0
  8. package/dist/client.js.map +1 -0
  9. package/dist/config.d.ts +8 -0
  10. package/dist/config.d.ts.map +1 -0
  11. package/dist/config.js +33 -0
  12. package/dist/config.js.map +1 -0
  13. package/dist/index.d.ts +15 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +21 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/middleware/index.d.ts +13 -0
  18. package/dist/middleware/index.d.ts.map +1 -0
  19. package/dist/middleware/index.js +141 -0
  20. package/dist/middleware/index.js.map +1 -0
  21. package/dist/providers/anthropic.d.ts +8 -0
  22. package/dist/providers/anthropic.d.ts.map +1 -0
  23. package/dist/providers/anthropic.js +113 -0
  24. package/dist/providers/anthropic.js.map +1 -0
  25. package/dist/providers/index.d.ts +4 -0
  26. package/dist/providers/index.d.ts.map +1 -0
  27. package/dist/providers/index.js +5 -0
  28. package/dist/providers/index.js.map +1 -0
  29. package/dist/providers/openai.d.ts +8 -0
  30. package/dist/providers/openai.d.ts.map +1 -0
  31. package/dist/providers/openai.js +125 -0
  32. package/dist/providers/openai.js.map +1 -0
  33. package/dist/tool-registry.d.ts +16 -0
  34. package/dist/tool-registry.d.ts.map +1 -0
  35. package/dist/tool-registry.js +104 -0
  36. package/dist/tool-registry.js.map +1 -0
  37. package/dist/tools/analytics.d.ts +5 -0
  38. package/dist/tools/analytics.d.ts.map +1 -0
  39. package/dist/tools/analytics.js +36 -0
  40. package/dist/tools/analytics.js.map +1 -0
  41. package/dist/tools/discounts.d.ts +6 -0
  42. package/dist/tools/discounts.d.ts.map +1 -0
  43. package/dist/tools/discounts.js +93 -0
  44. package/dist/tools/discounts.js.map +1 -0
  45. package/dist/tools/index.d.ts +9 -0
  46. package/dist/tools/index.d.ts.map +1 -0
  47. package/dist/tools/index.js +21 -0
  48. package/dist/tools/index.js.map +1 -0
  49. package/dist/tools/inventory.d.ts +5 -0
  50. package/dist/tools/inventory.d.ts.map +1 -0
  51. package/dist/tools/inventory.js +73 -0
  52. package/dist/tools/inventory.js.map +1 -0
  53. package/dist/tools/orders.d.ts +6 -0
  54. package/dist/tools/orders.d.ts.map +1 -0
  55. package/dist/tools/orders.js +94 -0
  56. package/dist/tools/orders.js.map +1 -0
  57. package/dist/tools/products.d.ts +8 -0
  58. package/dist/tools/products.d.ts.map +1 -0
  59. package/dist/tools/products.js +190 -0
  60. package/dist/tools/products.js.map +1 -0
  61. package/dist/tools/stores.d.ts +5 -0
  62. package/dist/tools/stores.d.ts.map +1 -0
  63. package/dist/tools/stores.js +28 -0
  64. package/dist/tools/stores.js.map +1 -0
  65. package/dist/types.d.ts +136 -0
  66. package/dist/types.d.ts.map +1 -0
  67. package/dist/types.js +2 -0
  68. package/dist/types.js.map +1 -0
  69. package/package.json +32 -0
@@ -0,0 +1,141 @@
1
+ // ─── Logging Middleware ───────────────────────────────────────
2
+ export function logging(options) {
3
+ return async (tool, args, ctx, next) => {
4
+ const start = performance.now();
5
+ const result = await next();
6
+ const duration = Math.round(performance.now() - start);
7
+ if (options?.level !== "debug" || result.success) {
8
+ console.log(JSON.stringify({
9
+ level: options?.level || "info",
10
+ tool: tool.name,
11
+ success: result.success,
12
+ duration,
13
+ agentId: ctx.agentId,
14
+ requestId: ctx.requestId,
15
+ timestamp: new Date().toISOString(),
16
+ }));
17
+ }
18
+ return result;
19
+ };
20
+ }
21
+ // ─── Auth Middleware ──────────────────────────────────────────
22
+ export function requirePermission(permission) {
23
+ return async (tool, _args, ctx, next) => {
24
+ if (tool.permissions && tool.permissions.length > 0) {
25
+ if (!ctx.session.permissions.includes(permission)) {
26
+ return {
27
+ success: false,
28
+ error: `Missing required permission: ${permission}`,
29
+ };
30
+ }
31
+ }
32
+ return next();
33
+ };
34
+ }
35
+ export function requireRole(...roles) {
36
+ return async (_tool, _args, ctx, next) => {
37
+ if (!roles.includes(ctx.session.role)) {
38
+ return {
39
+ success: false,
40
+ error: `Required role: ${roles.join(" or ")}, got: ${ctx.session.role}`,
41
+ };
42
+ }
43
+ return next();
44
+ };
45
+ }
46
+ const store = {};
47
+ export function rateLimit(config) {
48
+ return async (tool, _args, ctx, next) => {
49
+ const key = `${tool.name}:${ctx.agentId}`;
50
+ const now = Date.now();
51
+ if (!store[key] || store[key].resetAt < now) {
52
+ store[key] = { count: 0, resetAt: now + config.windowMs };
53
+ }
54
+ store[key].count++;
55
+ if (store[key].count > config.maxRequests) {
56
+ const retryAfter = Math.ceil((store[key].resetAt - now) / 1000);
57
+ return {
58
+ success: false,
59
+ error: `Rate limit exceeded. Try again in ${retryAfter}s`,
60
+ metadata: { retryAfter, limit: config.maxRequests, windowMs: config.windowMs },
61
+ };
62
+ }
63
+ return next();
64
+ };
65
+ }
66
+ // ─── Retry Middleware ─────────────────────────────────────────
67
+ export function retry(maxRetries = 3, delayMs = 1000) {
68
+ return async (tool, args, ctx, next) => {
69
+ let lastError;
70
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
71
+ if (attempt > 0) {
72
+ await new Promise((r) => setTimeout(r, delayMs * attempt));
73
+ }
74
+ const result = await next();
75
+ if (result.success)
76
+ return result;
77
+ lastError = result.error;
78
+ }
79
+ return {
80
+ success: false,
81
+ error: `Failed after ${maxRetries} retries: ${lastError}`,
82
+ metadata: { maxRetries, lastError },
83
+ };
84
+ };
85
+ }
86
+ // ─── Timeout Middleware ───────────────────────────────────────
87
+ export function timeout(ms) {
88
+ return async (_tool, _args, ctx, next) => {
89
+ const controller = new AbortController();
90
+ const timer = setTimeout(() => controller.abort(), ms);
91
+ try {
92
+ const result = await next();
93
+ return result;
94
+ }
95
+ catch (error) {
96
+ if (error instanceof Error && error.name === "AbortError") {
97
+ return { success: false, error: `Tool execution timed out after ${ms}ms` };
98
+ }
99
+ throw error;
100
+ }
101
+ finally {
102
+ clearTimeout(timer);
103
+ }
104
+ };
105
+ }
106
+ // ─── Audit Middleware ─────────────────────────────────────────
107
+ export function audit(options) {
108
+ return async (tool, args, ctx, next) => {
109
+ const start = performance.now();
110
+ const result = await next();
111
+ const duration = Math.round(performance.now() - start);
112
+ const entry = {
113
+ timestamp: new Date().toISOString(),
114
+ agentId: ctx.agentId,
115
+ requestId: ctx.requestId,
116
+ tool: tool.name,
117
+ userId: ctx.session.userId,
118
+ args: sanitizeArgs(args),
119
+ success: result.success,
120
+ duration,
121
+ error: result.error,
122
+ };
123
+ console.log(`[bizhub:audit] ${JSON.stringify(entry)}`);
124
+ if (options?.persist) {
125
+ // In production, write to database or log aggregator
126
+ await Promise.resolve();
127
+ }
128
+ return result;
129
+ };
130
+ }
131
+ function sanitizeArgs(args) {
132
+ const sensitive = ["password", "token", "secret", "key", "auth"];
133
+ const sanitized = {};
134
+ for (const [key, value] of Object.entries(args)) {
135
+ sanitized[key] = sensitive.some((s) => key.toLowerCase().includes(s))
136
+ ? "[REDACTED]"
137
+ : value;
138
+ }
139
+ return sanitized;
140
+ }
141
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ProviderAdapter } from "../types.js";
2
+ /**
3
+ * Anthropic Claude tool use adapter.
4
+ * Formats BizHub tools as Anthropic-compatible tool definitions
5
+ * and parses response tool use blocks.
6
+ */
7
+ export declare const anthropicAdapter: ProviderAdapter;
8
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,aAAa,CAAC;AAEnE;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,eAkC9B,CAAC"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Anthropic Claude tool use adapter.
3
+ * Formats BizHub tools as Anthropic-compatible tool definitions
4
+ * and parses response tool use blocks.
5
+ */
6
+ export const anthropicAdapter = {
7
+ formatTools(tools) {
8
+ return tools.map((t) => ({
9
+ name: t.name,
10
+ description: t.description,
11
+ input_schema: {
12
+ type: "object",
13
+ properties: extractProperties(t.schema),
14
+ ...extractRequired(t.schema),
15
+ },
16
+ }));
17
+ },
18
+ parseResult(result) {
19
+ // Anthropic tool_use content blocks
20
+ if (result?.type === "tool_use") {
21
+ return {
22
+ toolName: result.name,
23
+ args: result.input,
24
+ };
25
+ }
26
+ // Content array with tool_use
27
+ if (result?.content) {
28
+ for (const block of result.content) {
29
+ if (block.type === "tool_use") {
30
+ return {
31
+ toolName: block.name,
32
+ args: block.input,
33
+ };
34
+ }
35
+ }
36
+ }
37
+ return null;
38
+ },
39
+ };
40
+ function extractProperties(schema) {
41
+ if (schema._def?.shape) {
42
+ const shape = schema._def.shape();
43
+ const props = {};
44
+ for (const [key, value] of Object.entries(shape)) {
45
+ props[key] = extractZodType(value);
46
+ }
47
+ return props;
48
+ }
49
+ return {};
50
+ }
51
+ function extractRequired(schema) {
52
+ if (schema._def?.shape) {
53
+ const shape = schema._def.shape();
54
+ const required = Object.entries(shape)
55
+ .filter(([, v]) => {
56
+ const isOptional = v._def?.typeName === "ZodOptional" ||
57
+ v.isOptional?.() ||
58
+ v._def?.defaultValue !== undefined;
59
+ return !isOptional;
60
+ })
61
+ .map(([key]) => key);
62
+ return required.length > 0 ? { required } : {};
63
+ }
64
+ return {};
65
+ }
66
+ function extractZodType(zodObj) {
67
+ let inner = zodObj;
68
+ let description;
69
+ let defaultVal;
70
+ if (inner._def?.description)
71
+ description = inner._def.description;
72
+ if (inner._def?.defaultValue !== undefined)
73
+ defaultVal = inner._def.defaultValue;
74
+ while (inner._def?.typeName === "ZodOptional")
75
+ inner = inner._def.innerType;
76
+ while (inner._def?.typeName === "ZodDefault")
77
+ inner = inner._def.innerType;
78
+ const typeName = inner._def?.typeName || "";
79
+ let jsonType = {};
80
+ switch (typeName) {
81
+ case "ZodString":
82
+ jsonType = { type: "string" };
83
+ break;
84
+ case "ZodNumber":
85
+ jsonType = { type: "number" };
86
+ if (inner._def?.checks) {
87
+ for (const check of inner._def.checks) {
88
+ if (check.kind === "min")
89
+ jsonType.minimum = check.value;
90
+ if (check.kind === "max")
91
+ jsonType.maximum = check.value;
92
+ }
93
+ }
94
+ break;
95
+ case "ZodBoolean":
96
+ jsonType = { type: "boolean" };
97
+ break;
98
+ case "ZodArray":
99
+ jsonType = { type: "array", items: extractZodType(inner._def.type) };
100
+ break;
101
+ case "ZodEnum":
102
+ jsonType = { type: "string", enum: inner._def.values };
103
+ break;
104
+ default:
105
+ jsonType = { type: "string" };
106
+ }
107
+ if (description)
108
+ jsonType.description = description;
109
+ if (defaultVal !== undefined)
110
+ jsonType.default = defaultVal;
111
+ return jsonType;
112
+ }
113
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export type { ProviderAdapter } from "../types.js";
2
+ export { openAIAdapter } from "./openai.js";
3
+ export { anthropicAdapter } from "./anthropic.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAGA,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,5 @@
1
+ // Provider adapters for integrating BizHub tools with LLM providers.
2
+ // Each adapter formats tools and handles responses for a specific provider.
3
+ export { openAIAdapter } from "./openai.js";
4
+ export { anthropicAdapter } from "./anthropic.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,4EAA4E;AAG5E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ProviderAdapter } from "../types.js";
2
+ /**
3
+ * OpenAI function calling adapter.
4
+ * Formats BizHub tools as OpenAI-compatible function definitions
5
+ * and parses response tool calls.
6
+ */
7
+ export declare const openAIAdapter: ProviderAdapter;
8
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,aAAa,CAAC;AAEnE;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,eAkC3B,CAAC"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * OpenAI function calling adapter.
3
+ * Formats BizHub tools as OpenAI-compatible function definitions
4
+ * and parses response tool calls.
5
+ */
6
+ export const openAIAdapter = {
7
+ formatTools(tools) {
8
+ return tools.map((t) => ({
9
+ type: "function",
10
+ function: {
11
+ name: t.name,
12
+ description: t.description,
13
+ strict: true,
14
+ parameters: {
15
+ type: "object",
16
+ properties: extractProperties(t.schema),
17
+ additionalProperties: false,
18
+ ...extractRequired(t.schema),
19
+ },
20
+ },
21
+ }));
22
+ },
23
+ parseResult(result) {
24
+ if (result?.type === "function" && result.function) {
25
+ return {
26
+ toolName: result.function.name,
27
+ args: JSON.parse(result.function.arguments),
28
+ };
29
+ }
30
+ if (result?.tool_calls?.[0]) {
31
+ const call = result.tool_calls[0];
32
+ return {
33
+ toolName: call.function.name,
34
+ args: JSON.parse(call.function.arguments),
35
+ };
36
+ }
37
+ return null;
38
+ },
39
+ };
40
+ function extractProperties(schema) {
41
+ if (schema._def?.shape) {
42
+ const shape = schema._def.shape();
43
+ const props = {};
44
+ for (const [key, value] of Object.entries(shape)) {
45
+ props[key] = extractZodType(value);
46
+ }
47
+ return props;
48
+ }
49
+ return {};
50
+ }
51
+ function extractRequired(schema) {
52
+ if (schema._def?.shape) {
53
+ const shape = schema._def.shape();
54
+ const required = Object.entries(shape)
55
+ .filter(([, v]) => {
56
+ const isOptional = v._def?.typeName === "ZodOptional" ||
57
+ v.isOptional?.() ||
58
+ v._def?.defaultValue !== undefined;
59
+ return !isOptional;
60
+ })
61
+ .map(([key]) => key);
62
+ return required.length > 0 ? { required } : {};
63
+ }
64
+ return {};
65
+ }
66
+ function extractZodType(zodObj) {
67
+ let inner = zodObj;
68
+ let description;
69
+ let defaultVal;
70
+ if (inner._def?.description)
71
+ description = inner._def.description;
72
+ if (inner._def?.defaultValue !== undefined)
73
+ defaultVal = inner._def.defaultValue;
74
+ // Unwrap optional
75
+ while (inner._def?.typeName === "ZodOptional") {
76
+ inner = inner._def.innerType;
77
+ }
78
+ // Unwrap default
79
+ while (inner._def?.typeName === "ZodDefault") {
80
+ inner = inner._def.innerType;
81
+ }
82
+ const typeName = inner._def?.typeName || "";
83
+ let jsonType = {};
84
+ switch (typeName) {
85
+ case "ZodString":
86
+ jsonType = { type: "string" };
87
+ break;
88
+ case "ZodNumber":
89
+ jsonType = { type: "number" };
90
+ if (inner._def?.checks) {
91
+ for (const check of inner._def.checks) {
92
+ if (check.kind === "min")
93
+ jsonType.minimum = check.value;
94
+ if (check.kind === "max")
95
+ jsonType.maximum = check.value;
96
+ if (check.kind === "positive")
97
+ jsonType.exclusiveMinimum = 0;
98
+ }
99
+ }
100
+ break;
101
+ case "ZodBoolean":
102
+ jsonType = { type: "boolean" };
103
+ break;
104
+ case "ZodArray":
105
+ jsonType = {
106
+ type: "array",
107
+ items: extractZodType(inner._def.type),
108
+ };
109
+ break;
110
+ case "ZodEnum":
111
+ jsonType = {
112
+ type: "string",
113
+ enum: inner._def.values,
114
+ };
115
+ break;
116
+ default:
117
+ jsonType = { type: "string" };
118
+ }
119
+ if (description)
120
+ jsonType.description = description;
121
+ if (defaultVal !== undefined)
122
+ jsonType.default = defaultVal;
123
+ return jsonType;
124
+ }
125
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { ToolDefinition, MiddlewareFn, ToolContext, ToolResult } from "./types.js";
2
+ export declare class ToolRegistry {
3
+ private tools;
4
+ private middleware;
5
+ private eventHandlers;
6
+ register(tool: ToolDefinition): this;
7
+ registerMany(tools: ToolDefinition[]): this;
8
+ use(fn: MiddlewareFn): this;
9
+ get(name: string): ToolDefinition | undefined;
10
+ list(): ToolDefinition[];
11
+ listByPermission(permissions: string[]): ToolDefinition[];
12
+ execute(name: string, args: Record<string, unknown>, ctx?: Partial<ToolContext>): Promise<ToolResult>;
13
+ on(event: string, handler: (event: unknown) => Promise<void>): this;
14
+ private emit;
15
+ }
16
+ //# sourceMappingURL=tool-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../src/tool-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxF,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,aAAa,CAA6D;IAElF,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAQpC,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI;IAO3C,GAAG,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI;IAK3B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI7C,IAAI,IAAI,cAAc,EAAE;IAIxB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE;IASnD,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GACzB,OAAO,CAAC,UAAU,CAAC;IAoEtB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;YAQrD,IAAI;CAYnB"}
@@ -0,0 +1,104 @@
1
+ import { randomUUID } from "node:crypto";
2
+ export class ToolRegistry {
3
+ tools = new Map();
4
+ middleware = [];
5
+ eventHandlers = new Map();
6
+ register(tool) {
7
+ if (this.tools.has(tool.name)) {
8
+ throw new Error(`Tool '${tool.name}' is already registered`);
9
+ }
10
+ this.tools.set(tool.name, tool);
11
+ return this;
12
+ }
13
+ registerMany(tools) {
14
+ for (const tool of tools) {
15
+ this.register(tool);
16
+ }
17
+ return this;
18
+ }
19
+ use(fn) {
20
+ this.middleware.push(fn);
21
+ return this;
22
+ }
23
+ get(name) {
24
+ return this.tools.get(name);
25
+ }
26
+ list() {
27
+ return Array.from(this.tools.values());
28
+ }
29
+ listByPermission(permissions) {
30
+ return this.list().filter((t) => !t.permissions ||
31
+ t.permissions.length === 0 ||
32
+ t.permissions.some((p) => permissions.includes(p)));
33
+ }
34
+ async execute(name, args, ctx) {
35
+ const tool = this.tools.get(name);
36
+ if (!tool) {
37
+ return { success: false, error: `Tool '${name}' not found` };
38
+ }
39
+ if (tool.deprecated) {
40
+ console.warn(`[bizhub] Warning: tool '${name}' is deprecated`);
41
+ }
42
+ const context = {
43
+ requestId: randomUUID(),
44
+ agentId: ctx?.agentId || "unknown",
45
+ session: ctx?.session || {
46
+ userId: "anonymous",
47
+ role: "viewer",
48
+ permissions: [],
49
+ },
50
+ metadata: ctx?.metadata || {},
51
+ signal: ctx?.signal,
52
+ };
53
+ const start = performance.now();
54
+ const executeTool = async () => {
55
+ try {
56
+ const parsed = tool.schema.parse(args);
57
+ const result = await tool.handler(parsed, context);
58
+ return {
59
+ ...result,
60
+ duration: Math.round(performance.now() - start),
61
+ };
62
+ }
63
+ catch (error) {
64
+ const message = error instanceof Error ? error.message : "Unknown error";
65
+ return {
66
+ success: false,
67
+ error: message,
68
+ duration: Math.round(performance.now() - start),
69
+ };
70
+ }
71
+ };
72
+ // Apply middleware chain
73
+ const runMiddleware = async (index) => {
74
+ if (index < this.middleware.length) {
75
+ return this.middleware[index](tool, args, context, () => runMiddleware(index + 1));
76
+ }
77
+ return executeTool();
78
+ };
79
+ const result = await runMiddleware(0);
80
+ // Emit tool execution event
81
+ await this.emit("tool:executed", {
82
+ tool: name,
83
+ success: result.success,
84
+ duration: result.duration,
85
+ error: result.error,
86
+ });
87
+ return result;
88
+ }
89
+ // ─── Events ────────────────────────────────────────────────
90
+ on(event, handler) {
91
+ if (!this.eventHandlers.has(event)) {
92
+ this.eventHandlers.set(event, new Set());
93
+ }
94
+ this.eventHandlers.get(event).add(handler);
95
+ return this;
96
+ }
97
+ async emit(event, payload) {
98
+ const handlers = this.eventHandlers.get(event);
99
+ if (handlers) {
100
+ await Promise.all(Array.from(handlers).map((h) => h(payload).catch((err) => console.error(`[bizhub] Event handler error:`, err))));
101
+ }
102
+ }
103
+ }
104
+ //# sourceMappingURL=tool-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../src/tool-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ToolDefinition } from "../types.js";
2
+ export declare const getAnalytics: ToolDefinition;
3
+ export declare const listCustomers: ToolDefinition;
4
+ export declare const analyticsTools: ToolDefinition[];
5
+ //# sourceMappingURL=analytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,YAAY,EAAE,cAW1B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,cAsB3B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,cAAc,EAAkC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { z } from "zod";
2
+ import { api } from "../client.js";
3
+ export const getAnalytics = {
4
+ name: "analytics_get",
5
+ description: "Get store performance analytics including total orders, completed orders, total revenue, average order value, unique customers, and pending orders. This is your store's health overview.",
6
+ schema: z.object({}),
7
+ handler: async () => {
8
+ const analytics = await api.getAnalytics();
9
+ return { success: true, data: analytics };
10
+ },
11
+ rateLimit: { maxRequests: 30, windowMs: 60000 },
12
+ version: "1.0.0",
13
+ };
14
+ export const listCustomers = {
15
+ name: "customers_list",
16
+ description: "List all customers who have purchased from your store, along with their order count, lifetime total spend, and last order date. Sorted by total spend descending.",
17
+ schema: z.object({}),
18
+ handler: async () => {
19
+ const customers = await api.listCustomers();
20
+ return {
21
+ success: true,
22
+ data: {
23
+ count: customers.length,
24
+ totalRevenue: customers.reduce((s, c) => s + c.totalSpent, 0),
25
+ avgLifetimeValue: customers.length > 0
26
+ ? +(customers.reduce((s, c) => s + c.totalSpent, 0) / customers.length).toFixed(2)
27
+ : 0,
28
+ customers,
29
+ },
30
+ };
31
+ },
32
+ rateLimit: { maxRequests: 30, windowMs: 60000 },
33
+ version: "1.0.0",
34
+ };
35
+ export const analyticsTools = [getAnalytics, listCustomers];
36
+ //# sourceMappingURL=analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAGnC,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC1C,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,2LAA2L;IAC7L,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC;QAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC5C,CAAC;IACD,SAAS,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;IAC/C,OAAO,EAAE,OAAO;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,mKAAmK;IACrK,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,aAAa,EAAE,CAAC;QAC5C,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE;gBACJ,KAAK,EAAE,SAAS,CAAC,MAAM;gBACvB,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC7D,gBAAgB,EACd,SAAS,CAAC,MAAM,GAAG,CAAC;oBAClB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;oBAClF,CAAC,CAAC,CAAC;gBACP,SAAS;aACV;SACF,CAAC;IACJ,CAAC;IACD,SAAS,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;IAC/C,OAAO,EAAE,OAAO;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAqB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ToolDefinition } from "../types.js";
2
+ export declare const applyDiscount: ToolDefinition;
3
+ export declare const removeDiscount: ToolDefinition;
4
+ export declare const listDiscounts: ToolDefinition;
5
+ export declare const discountTools: ToolDefinition[];
6
+ //# sourceMappingURL=discounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discounts.d.ts","sourceRoot":"","sources":["../../src/tools/discounts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,aAAa,EAAE,cAsC3B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,cAuB5B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,cA4B3B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,cAAc,EAIzC,CAAC"}