@kernel.chat/kbot 1.3.1 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/README.md +94 -0
  2. package/dist/agent.d.ts +9 -0
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +576 -119
  5. package/dist/agent.js.map +1 -1
  6. package/dist/auth.d.ts +20 -35
  7. package/dist/auth.d.ts.map +1 -1
  8. package/dist/auth.js +224 -66
  9. package/dist/auth.js.map +1 -1
  10. package/dist/auth.test.d.ts +2 -0
  11. package/dist/auth.test.d.ts.map +1 -0
  12. package/dist/auth.test.js +89 -0
  13. package/dist/auth.test.js.map +1 -0
  14. package/dist/build-targets.d.ts +37 -0
  15. package/dist/build-targets.d.ts.map +1 -0
  16. package/dist/build-targets.js +507 -0
  17. package/dist/build-targets.js.map +1 -0
  18. package/dist/cli.js +1210 -130
  19. package/dist/cli.js.map +1 -1
  20. package/dist/context.d.ts +2 -0
  21. package/dist/context.d.ts.map +1 -1
  22. package/dist/context.js +72 -22
  23. package/dist/context.js.map +1 -1
  24. package/dist/hooks.d.ts +27 -0
  25. package/dist/hooks.d.ts.map +1 -0
  26. package/dist/hooks.js +145 -0
  27. package/dist/hooks.js.map +1 -0
  28. package/dist/ide/acp-server.d.ts +6 -0
  29. package/dist/ide/acp-server.d.ts.map +1 -0
  30. package/dist/ide/acp-server.js +319 -0
  31. package/dist/ide/acp-server.js.map +1 -0
  32. package/dist/ide/bridge.d.ts +128 -0
  33. package/dist/ide/bridge.d.ts.map +1 -0
  34. package/dist/ide/bridge.js +185 -0
  35. package/dist/ide/bridge.js.map +1 -0
  36. package/dist/ide/index.d.ts +5 -0
  37. package/dist/ide/index.d.ts.map +1 -0
  38. package/dist/ide/index.js +11 -0
  39. package/dist/ide/index.js.map +1 -0
  40. package/dist/ide/lsp-bridge.d.ts +27 -0
  41. package/dist/ide/lsp-bridge.d.ts.map +1 -0
  42. package/dist/ide/lsp-bridge.js +267 -0
  43. package/dist/ide/lsp-bridge.js.map +1 -0
  44. package/dist/ide/mcp-server.d.ts +7 -0
  45. package/dist/ide/mcp-server.d.ts.map +1 -0
  46. package/dist/ide/mcp-server.js +451 -0
  47. package/dist/ide/mcp-server.js.map +1 -0
  48. package/dist/learning.d.ts +179 -0
  49. package/dist/learning.d.ts.map +1 -0
  50. package/dist/learning.js +829 -0
  51. package/dist/learning.js.map +1 -0
  52. package/dist/learning.test.d.ts +2 -0
  53. package/dist/learning.test.d.ts.map +1 -0
  54. package/dist/learning.test.js +115 -0
  55. package/dist/learning.test.js.map +1 -0
  56. package/dist/matrix.d.ts +49 -0
  57. package/dist/matrix.d.ts.map +1 -0
  58. package/dist/matrix.js +302 -0
  59. package/dist/matrix.js.map +1 -0
  60. package/dist/memory.d.ts +11 -0
  61. package/dist/memory.d.ts.map +1 -1
  62. package/dist/memory.js +54 -2
  63. package/dist/memory.js.map +1 -1
  64. package/dist/multimodal.d.ts +57 -0
  65. package/dist/multimodal.d.ts.map +1 -0
  66. package/dist/multimodal.js +206 -0
  67. package/dist/multimodal.js.map +1 -0
  68. package/dist/permissions.d.ts +21 -0
  69. package/dist/permissions.d.ts.map +1 -0
  70. package/dist/permissions.js +122 -0
  71. package/dist/permissions.js.map +1 -0
  72. package/dist/planner.d.ts +54 -0
  73. package/dist/planner.d.ts.map +1 -0
  74. package/dist/planner.js +298 -0
  75. package/dist/planner.js.map +1 -0
  76. package/dist/plugins.d.ts +30 -0
  77. package/dist/plugins.d.ts.map +1 -0
  78. package/dist/plugins.js +135 -0
  79. package/dist/plugins.js.map +1 -0
  80. package/dist/sessions.d.ts +38 -0
  81. package/dist/sessions.d.ts.map +1 -0
  82. package/dist/sessions.js +177 -0
  83. package/dist/sessions.js.map +1 -0
  84. package/dist/streaming.d.ts +88 -0
  85. package/dist/streaming.d.ts.map +1 -0
  86. package/dist/streaming.js +317 -0
  87. package/dist/streaming.js.map +1 -0
  88. package/dist/tools/background.d.ts +2 -0
  89. package/dist/tools/background.d.ts.map +1 -0
  90. package/dist/tools/background.js +163 -0
  91. package/dist/tools/background.js.map +1 -0
  92. package/dist/tools/bash.d.ts.map +1 -1
  93. package/dist/tools/bash.js +26 -1
  94. package/dist/tools/bash.js.map +1 -1
  95. package/dist/tools/browser.js +7 -7
  96. package/dist/tools/browser.js.map +1 -1
  97. package/dist/tools/build-matrix.d.ts +2 -0
  98. package/dist/tools/build-matrix.d.ts.map +1 -0
  99. package/dist/tools/build-matrix.js +463 -0
  100. package/dist/tools/build-matrix.js.map +1 -0
  101. package/dist/tools/computer.js +5 -5
  102. package/dist/tools/computer.js.map +1 -1
  103. package/dist/tools/fetch.d.ts +2 -0
  104. package/dist/tools/fetch.d.ts.map +1 -0
  105. package/dist/tools/fetch.js +106 -0
  106. package/dist/tools/fetch.js.map +1 -0
  107. package/dist/tools/files.d.ts.map +1 -1
  108. package/dist/tools/files.js +112 -6
  109. package/dist/tools/files.js.map +1 -1
  110. package/dist/tools/git.js +3 -3
  111. package/dist/tools/git.js.map +1 -1
  112. package/dist/tools/github.d.ts +2 -0
  113. package/dist/tools/github.d.ts.map +1 -0
  114. package/dist/tools/github.js +196 -0
  115. package/dist/tools/github.js.map +1 -0
  116. package/dist/tools/index.d.ts +29 -5
  117. package/dist/tools/index.d.ts.map +1 -1
  118. package/dist/tools/index.js +136 -20
  119. package/dist/tools/index.js.map +1 -1
  120. package/dist/tools/index.test.d.ts +2 -0
  121. package/dist/tools/index.test.d.ts.map +1 -0
  122. package/dist/tools/index.test.js +162 -0
  123. package/dist/tools/index.test.js.map +1 -0
  124. package/dist/tools/matrix.d.ts +2 -0
  125. package/dist/tools/matrix.d.ts.map +1 -0
  126. package/dist/tools/matrix.js +79 -0
  127. package/dist/tools/matrix.js.map +1 -0
  128. package/dist/tools/mcp-client.d.ts +2 -0
  129. package/dist/tools/mcp-client.d.ts.map +1 -0
  130. package/dist/tools/mcp-client.js +295 -0
  131. package/dist/tools/mcp-client.js.map +1 -0
  132. package/dist/tools/notebook.d.ts +2 -0
  133. package/dist/tools/notebook.d.ts.map +1 -0
  134. package/dist/tools/notebook.js +207 -0
  135. package/dist/tools/notebook.js.map +1 -0
  136. package/dist/tools/openclaw.d.ts +2 -0
  137. package/dist/tools/openclaw.d.ts.map +1 -0
  138. package/dist/tools/openclaw.js +187 -0
  139. package/dist/tools/openclaw.js.map +1 -0
  140. package/dist/tools/parallel.d.ts +2 -0
  141. package/dist/tools/parallel.d.ts.map +1 -0
  142. package/dist/tools/parallel.js +60 -0
  143. package/dist/tools/parallel.js.map +1 -0
  144. package/dist/tools/sandbox.d.ts +2 -0
  145. package/dist/tools/sandbox.d.ts.map +1 -0
  146. package/dist/tools/sandbox.js +352 -0
  147. package/dist/tools/sandbox.js.map +1 -0
  148. package/dist/tools/search.d.ts.map +1 -1
  149. package/dist/tools/search.js +135 -28
  150. package/dist/tools/search.js.map +1 -1
  151. package/dist/tools/subagent.d.ts +4 -0
  152. package/dist/tools/subagent.d.ts.map +1 -0
  153. package/dist/tools/subagent.js +260 -0
  154. package/dist/tools/subagent.js.map +1 -0
  155. package/dist/tools/tasks.d.ts +14 -0
  156. package/dist/tools/tasks.d.ts.map +1 -0
  157. package/dist/tools/tasks.js +210 -0
  158. package/dist/tools/tasks.js.map +1 -0
  159. package/dist/tools/worktree.d.ts +2 -0
  160. package/dist/tools/worktree.d.ts.map +1 -0
  161. package/dist/tools/worktree.js +223 -0
  162. package/dist/tools/worktree.js.map +1 -0
  163. package/dist/tui.d.ts +73 -0
  164. package/dist/tui.d.ts.map +1 -0
  165. package/dist/tui.js +257 -0
  166. package/dist/tui.js.map +1 -0
  167. package/dist/ui.d.ts +11 -19
  168. package/dist/ui.d.ts.map +1 -1
  169. package/dist/ui.js +143 -171
  170. package/dist/ui.js.map +1 -1
  171. package/dist/updater.d.ts +3 -0
  172. package/dist/updater.d.ts.map +1 -0
  173. package/dist/updater.js +70 -0
  174. package/dist/updater.js.map +1 -0
  175. package/install.sh +5 -7
  176. package/package.json +9 -5
@@ -8,8 +8,12 @@ export interface ToolDefinition {
8
8
  default?: unknown;
9
9
  }>;
10
10
  execute: (args: Record<string, unknown>) => Promise<string>;
11
- /** Tier required: 'free' | 'starter' | 'growth' | 'enterprise' */
12
- tier: 'free' | 'starter' | 'growth' | 'enterprise';
11
+ /** Tier required: 'free' | 'pro' | 'growth' | 'enterprise' */
12
+ tier: 'free' | 'pro' | 'growth' | 'enterprise';
13
+ /** Custom timeout in ms (default: 300_000 = 5 min) */
14
+ timeout?: number;
15
+ /** Max result size in bytes (default: 50_000 = 50KB) */
16
+ maxResultSize?: number;
13
17
  }
14
18
  export interface ToolCall {
15
19
  id: string;
@@ -20,6 +24,17 @@ export interface ToolResult {
20
24
  tool_call_id: string;
21
25
  result: string;
22
26
  error?: boolean;
27
+ /** Execution time in milliseconds */
28
+ duration_ms?: number;
29
+ }
30
+ /** Execution metrics per tool */
31
+ export interface ToolMetrics {
32
+ name: string;
33
+ calls: number;
34
+ errors: number;
35
+ totalDurationMs: number;
36
+ avgDurationMs: number;
37
+ lastCalled: string;
23
38
  }
24
39
  export declare function registerTool(tool: ToolDefinition): void;
25
40
  export declare function getTool(name: string): ToolDefinition | undefined;
@@ -29,9 +44,18 @@ export declare function getToolsForTier(tier: string): ToolDefinition[];
29
44
  export declare function getToolDefinitionsForApi(tier: string): Array<{
30
45
  name: string;
31
46
  description: string;
47
+ input_schema: {
48
+ type: 'object';
49
+ properties: Record<string, unknown>;
50
+ required?: string[];
51
+ };
32
52
  }>;
33
- /** Execute a tool call locally. Returns the result string. */
53
+ /** Get metrics for all tools or a specific tool */
54
+ export declare function getToolMetrics(toolName?: string): ToolMetrics[];
55
+ /** Execute a tool call locally with timeout and result truncation */
34
56
  export declare function executeTool(call: ToolCall): Promise<ToolResult>;
35
- /** Register all built-in tools. Call once at startup. */
36
- export declare function registerAllTools(): Promise<void>;
57
+ /** Register all built-in tools. Call once at startup. Uses parallel imports for speed. */
58
+ export declare function registerAllTools(opts?: {
59
+ computerUse?: boolean;
60
+ }): Promise<void>;
37
61
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QACzB,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB,CAAC,CAAA;IACF,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC3D,kEAAkE;IAClE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAA;CACnD;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAID,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAEvD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEhE;AAED,wBAAgB,WAAW,IAAI,cAAc,EAAE,CAE9C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE,CAK9D;AAED,iEAAiE;AACjE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAKnG;AAED,8DAA8D;AAC9D,wBAAsB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAgBrE;AAED,yDAAyD;AACzD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAStD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QACzB,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB,CAAC,CAAA;IACF,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC3D,8DAA8D;IAC9D,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,YAAY,CAAA;IAC9C,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,iCAAiC;AACjC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;CACnB;AAgBD,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAEvD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEhE;AAED,wBAAgB,WAAW,IAAI,cAAc,EAAE,CAE9C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE,CAM9D;AAED,iEAAiE;AACjE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAC5D,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAC3F,CAAC,CAcD;AA+BD,mDAAmD;AACnD,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAM/D;AAED,qEAAqE;AACrE,wBAAsB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAiCrE;AAED,0FAA0F;AAC1F,wBAAsB,gBAAgB,CAAC,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoEtF"}
@@ -1,7 +1,24 @@
1
- // K:BOT Tool Registry
1
+ // K:BOT Tool Registry v2
2
2
  // Tools are executed locally — only AI reasoning goes through the API.
3
3
  // This saves tokens, messages, and latency.
4
+ //
5
+ // ENHANCEMENTS (v2.3):
6
+ // - Tool execution timeout (default 5 min, configurable per-tool)
7
+ // - Result size truncation (max 50KB by default)
8
+ // - Execution metrics & timing
9
+ // - Tier-based tool gating
10
+ // - Parallel startup imports
4
11
  const registry = new Map();
12
+ const metrics = new Map();
13
+ const DEFAULT_TIMEOUT = 300_000; // 5 minutes
14
+ const DEFAULT_MAX_RESULT = 50_000; // 50KB
15
+ /** Tier hierarchy for gating */
16
+ const TIER_LEVELS = {
17
+ free: 0,
18
+ pro: 1,
19
+ growth: 2,
20
+ enterprise: 3,
21
+ };
5
22
  export function registerTool(tool) {
6
23
  registry.set(tool.name, tool);
7
24
  }
@@ -12,46 +29,145 @@ export function getAllTools() {
12
29
  return Array.from(registry.values());
13
30
  }
14
31
  export function getToolsForTier(tier) {
15
- const tierOrder = ['free', 'starter', 'growth', 'enterprise'];
16
- const tierIndex = tierOrder.indexOf(tier);
17
- if (tierIndex === -1)
18
- return getAllTools();
19
- return getAllTools().filter(t => tierOrder.indexOf(t.tier) <= tierIndex);
32
+ const userLevel = TIER_LEVELS[tier] ?? 0;
33
+ return Array.from(registry.values()).filter(t => {
34
+ const toolLevel = TIER_LEVELS[t.tier] ?? 0;
35
+ return toolLevel <= userLevel;
36
+ });
20
37
  }
21
38
  /** Get tool definitions in Claude tool-use format for the API */
22
39
  export function getToolDefinitionsForApi(tier) {
23
- return getToolsForTier(tier).map(t => ({
24
- name: t.name,
25
- description: t.description,
26
- }));
40
+ return getToolsForTier(tier).map(t => {
41
+ const properties = {};
42
+ const required = [];
43
+ for (const [key, param] of Object.entries(t.parameters)) {
44
+ properties[key] = { type: param.type, description: param.description };
45
+ if (param.required)
46
+ required.push(key);
47
+ }
48
+ return {
49
+ name: t.name,
50
+ description: t.description,
51
+ input_schema: { type: 'object', properties, ...(required.length > 0 ? { required } : {}) },
52
+ };
53
+ });
54
+ }
55
+ /** Truncate a result string to maxSize, appending a notice if truncated */
56
+ function truncateResult(result, maxSize) {
57
+ if (result.length <= maxSize)
58
+ return result;
59
+ const truncated = result.slice(0, maxSize);
60
+ const remaining = result.length - maxSize;
61
+ return `${truncated}\n\n[... truncated ${remaining} characters. Use more specific queries to get focused results.]`;
27
62
  }
28
- /** Execute a tool call locally. Returns the result string. */
63
+ /** Record metrics for a tool execution */
64
+ function recordMetrics(name, durationMs, isError) {
65
+ const existing = metrics.get(name);
66
+ if (existing) {
67
+ existing.calls++;
68
+ if (isError)
69
+ existing.errors++;
70
+ existing.totalDurationMs += durationMs;
71
+ existing.avgDurationMs = existing.totalDurationMs / existing.calls;
72
+ existing.lastCalled = new Date().toISOString();
73
+ }
74
+ else {
75
+ metrics.set(name, {
76
+ name,
77
+ calls: 1,
78
+ errors: isError ? 1 : 0,
79
+ totalDurationMs: durationMs,
80
+ avgDurationMs: durationMs,
81
+ lastCalled: new Date().toISOString(),
82
+ });
83
+ }
84
+ }
85
+ /** Get metrics for all tools or a specific tool */
86
+ export function getToolMetrics(toolName) {
87
+ if (toolName) {
88
+ const m = metrics.get(toolName);
89
+ return m ? [m] : [];
90
+ }
91
+ return Array.from(metrics.values()).sort((a, b) => b.calls - a.calls);
92
+ }
93
+ /** Execute a tool call locally with timeout and result truncation */
29
94
  export async function executeTool(call) {
30
95
  const tool = registry.get(call.name);
31
96
  if (!tool) {
32
- return { tool_call_id: call.id, result: `Unknown tool: ${call.name}`, error: true };
97
+ return { tool_call_id: call.id, result: `Unknown tool: ${call.name}`, error: true, duration_ms: 0 };
33
98
  }
99
+ const timeout = tool.timeout ?? DEFAULT_TIMEOUT;
100
+ const maxResult = tool.maxResultSize ?? DEFAULT_MAX_RESULT;
101
+ const startTime = Date.now();
34
102
  try {
35
- const result = await tool.execute(call.arguments);
36
- return { tool_call_id: call.id, result };
103
+ // Race tool execution against timeout
104
+ const result = await Promise.race([
105
+ tool.execute(call.arguments),
106
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`Tool '${call.name}' timed out after ${timeout / 1000}s`)), timeout)),
107
+ ]);
108
+ const durationMs = Date.now() - startTime;
109
+ const truncated = truncateResult(result, maxResult);
110
+ recordMetrics(call.name, durationMs, false);
111
+ return { tool_call_id: call.id, result: truncated, duration_ms: durationMs };
37
112
  }
38
113
  catch (err) {
114
+ const durationMs = Date.now() - startTime;
115
+ recordMetrics(call.name, durationMs, true);
39
116
  return {
40
117
  tool_call_id: call.id,
41
118
  result: `Tool error: ${err instanceof Error ? err.message : String(err)}`,
42
119
  error: true,
120
+ duration_ms: durationMs,
43
121
  };
44
122
  }
45
123
  }
46
- /** Register all built-in tools. Call once at startup. */
47
- export async function registerAllTools() {
48
- const { registerFileTools } = await import('./files.js');
49
- const { registerBashTools } = await import('./bash.js');
50
- const { registerGitTools } = await import('./git.js');
51
- const { registerSearchTools } = await import('./search.js');
124
+ /** Register all built-in tools. Call once at startup. Uses parallel imports for speed. */
125
+ export async function registerAllTools(opts) {
126
+ // Parallel import all tool modules at once
127
+ const [{ registerFileTools }, { registerBashTools }, { registerGitTools }, { registerSearchTools }, { registerFetchTools }, { registerGitHubTools }, { registerMatrixTools }, { registerParallelTools }, { registerMcpClientTools }, { registerTaskTools }, { registerNotebookTools }, { registerBackgroundTools }, { registerSandboxTools }, { registerBuildMatrixTools }, { registerSubagentTools }, { registerWorktreeTools }, { registerOpenClawTools },] = await Promise.all([
128
+ import('./files.js'),
129
+ import('./bash.js'),
130
+ import('./git.js'),
131
+ import('./search.js'),
132
+ import('./fetch.js'),
133
+ import('./github.js'),
134
+ import('./matrix.js'),
135
+ import('./parallel.js'),
136
+ import('./mcp-client.js'),
137
+ import('./tasks.js'),
138
+ import('./notebook.js'),
139
+ import('./background.js'),
140
+ import('./sandbox.js'),
141
+ import('./build-matrix.js'),
142
+ import('./subagent.js'),
143
+ import('./worktree.js'),
144
+ import('./openclaw.js'),
145
+ ]);
146
+ // Register all tools (synchronous, fast)
52
147
  registerFileTools();
53
148
  registerBashTools();
54
149
  registerGitTools();
55
150
  registerSearchTools();
151
+ registerFetchTools();
152
+ registerGitHubTools();
153
+ registerMatrixTools();
154
+ registerParallelTools();
155
+ registerMcpClientTools();
156
+ registerTaskTools();
157
+ registerNotebookTools();
158
+ registerBackgroundTools();
159
+ registerSandboxTools();
160
+ registerBuildMatrixTools();
161
+ registerSubagentTools();
162
+ registerWorktreeTools();
163
+ registerOpenClawTools();
164
+ // Computer use tools — opt-in only via --computer-use flag
165
+ if (opts?.computerUse) {
166
+ const { registerComputerTools } = await import('./computer.js');
167
+ registerComputerTools();
168
+ }
169
+ // User plugins from ~/.kbot/plugins/
170
+ const { loadPlugins } = await import('../plugins.js');
171
+ await loadPlugins(false);
56
172
  }
57
173
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,uEAAuE;AACvE,4CAA4C;AA4B5C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAA;AAElD,MAAM,UAAU,YAAY,CAAC,IAAoB;IAC/C,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAA;IAC7D,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,IAAI,SAAS,KAAK,CAAC,CAAC;QAAE,OAAO,WAAW,EAAE,CAAA;IAC1C,OAAO,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,CAAA;AAC1E,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;KAC3B,CAAC,CAAC,CAAA;AACL,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACpC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,iBAAiB,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IACrF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACjD,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAA;IAC1C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,EAAE;YACrB,MAAM,EAAE,eAAe,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACzE,KAAK,EAAE,IAAI;SACZ,CAAA;IACH,CAAC;AACH,CAAC;AAED,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;IACxD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAA;IACvD,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAA;IACrD,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;IAC3D,iBAAiB,EAAE,CAAA;IACnB,iBAAiB,EAAE,CAAA;IACnB,gBAAgB,EAAE,CAAA;IAClB,mBAAmB,EAAE,CAAA;AACvB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/tools/index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,162 @@
1
+ // K:BOT Tool Registry Tests
2
+ import { describe, it } from 'node:test';
3
+ import assert from 'node:assert/strict';
4
+ import { registerTool, getTool, getAllTools, getToolsForTier, executeTool, getToolMetrics, getToolDefinitionsForApi, } from './index.js';
5
+ // Helper to create a test tool
6
+ function makeTool(overrides = {}) {
7
+ return {
8
+ name: 'test_tool',
9
+ description: 'A test tool',
10
+ parameters: {
11
+ input: { type: 'string', description: 'Test input', required: true },
12
+ },
13
+ execute: async (args) => `result: ${args.input}`,
14
+ tier: 'free',
15
+ ...overrides,
16
+ };
17
+ }
18
+ describe('Tool Registry', () => {
19
+ it('registers and retrieves tools', () => {
20
+ const tool = makeTool({ name: 'reg_test' });
21
+ registerTool(tool);
22
+ assert.equal(getTool('reg_test')?.name, 'reg_test');
23
+ });
24
+ it('returns undefined for unknown tools', () => {
25
+ assert.equal(getTool('nonexistent_tool_xyz'), undefined);
26
+ });
27
+ it('getAllTools returns registered tools', () => {
28
+ registerTool(makeTool({ name: 'all_test_1' }));
29
+ registerTool(makeTool({ name: 'all_test_2' }));
30
+ const tools = getAllTools();
31
+ const names = tools.map(t => t.name);
32
+ assert.ok(names.includes('all_test_1'));
33
+ assert.ok(names.includes('all_test_2'));
34
+ });
35
+ });
36
+ describe('Tier Gating', () => {
37
+ it('free tier only gets free tools', () => {
38
+ registerTool(makeTool({ name: 'tier_free', tier: 'free' }));
39
+ registerTool(makeTool({ name: 'tier_pro', tier: 'pro' }));
40
+ registerTool(makeTool({ name: 'tier_enterprise', tier: 'enterprise' }));
41
+ const freeTools = getToolsForTier('free');
42
+ const freeNames = freeTools.map(t => t.name);
43
+ assert.ok(freeNames.includes('tier_free'));
44
+ assert.ok(!freeNames.includes('tier_pro'));
45
+ assert.ok(!freeNames.includes('tier_enterprise'));
46
+ });
47
+ it('pro tier gets free + pro tools', () => {
48
+ const proTools = getToolsForTier('pro');
49
+ const proNames = proTools.map(t => t.name);
50
+ assert.ok(proNames.includes('tier_free'));
51
+ assert.ok(proNames.includes('tier_pro'));
52
+ assert.ok(!proNames.includes('tier_enterprise'));
53
+ });
54
+ it('enterprise tier gets all tools', () => {
55
+ const entTools = getToolsForTier('enterprise');
56
+ const entNames = entTools.map(t => t.name);
57
+ assert.ok(entNames.includes('tier_free'));
58
+ assert.ok(entNames.includes('tier_pro'));
59
+ assert.ok(entNames.includes('tier_enterprise'));
60
+ });
61
+ });
62
+ describe('Tool Execution', () => {
63
+ it('executes tools successfully', async () => {
64
+ registerTool(makeTool({ name: 'exec_test' }));
65
+ const result = await executeTool({
66
+ id: 'test-1',
67
+ name: 'exec_test',
68
+ arguments: { input: 'hello' },
69
+ });
70
+ assert.equal(result.result, 'result: hello');
71
+ assert.equal(result.error, undefined);
72
+ assert.ok(typeof result.duration_ms === 'number');
73
+ assert.ok(result.duration_ms >= 0);
74
+ });
75
+ it('returns error for unknown tools', async () => {
76
+ const result = await executeTool({
77
+ id: 'test-2',
78
+ name: 'totally_unknown_tool',
79
+ arguments: {},
80
+ });
81
+ assert.ok(result.error);
82
+ assert.ok(result.result.includes('Unknown tool'));
83
+ });
84
+ it('handles tool execution errors', async () => {
85
+ registerTool(makeTool({
86
+ name: 'error_tool',
87
+ execute: async () => { throw new Error('kaboom'); },
88
+ }));
89
+ const result = await executeTool({
90
+ id: 'test-3',
91
+ name: 'error_tool',
92
+ arguments: {},
93
+ });
94
+ assert.ok(result.error);
95
+ assert.ok(result.result.includes('kaboom'));
96
+ });
97
+ it('times out long-running tools', async () => {
98
+ registerTool(makeTool({
99
+ name: 'slow_tool',
100
+ timeout: 100, // 100ms timeout
101
+ execute: async () => {
102
+ await new Promise(resolve => setTimeout(resolve, 5000));
103
+ return 'should not reach';
104
+ },
105
+ }));
106
+ const result = await executeTool({
107
+ id: 'test-4',
108
+ name: 'slow_tool',
109
+ arguments: {},
110
+ });
111
+ assert.ok(result.error);
112
+ assert.ok(result.result.includes('timed out'));
113
+ });
114
+ it('truncates large results', async () => {
115
+ const bigResult = 'x'.repeat(100_000);
116
+ registerTool(makeTool({
117
+ name: 'big_tool',
118
+ maxResultSize: 1000,
119
+ execute: async () => bigResult,
120
+ }));
121
+ const result = await executeTool({
122
+ id: 'test-5',
123
+ name: 'big_tool',
124
+ arguments: {},
125
+ });
126
+ assert.ok(result.result.length < bigResult.length);
127
+ assert.ok(result.result.includes('truncated'));
128
+ });
129
+ });
130
+ describe('Tool Metrics', () => {
131
+ it('tracks execution metrics', async () => {
132
+ registerTool(makeTool({ name: 'metrics_test' }));
133
+ await executeTool({ id: 'm1', name: 'metrics_test', arguments: { input: 'a' } });
134
+ await executeTool({ id: 'm2', name: 'metrics_test', arguments: { input: 'b' } });
135
+ const m = getToolMetrics('metrics_test');
136
+ assert.equal(m.length, 1);
137
+ assert.equal(m[0].calls, 2);
138
+ assert.equal(m[0].errors, 0);
139
+ assert.ok(m[0].avgDurationMs >= 0);
140
+ });
141
+ it('tracks error metrics', async () => {
142
+ registerTool(makeTool({
143
+ name: 'err_metrics',
144
+ execute: async () => { throw new Error('fail'); },
145
+ }));
146
+ await executeTool({ id: 'e1', name: 'err_metrics', arguments: {} });
147
+ const m = getToolMetrics('err_metrics');
148
+ assert.equal(m[0].errors, 1);
149
+ });
150
+ });
151
+ describe('API Definitions', () => {
152
+ it('generates correct API schema', () => {
153
+ registerTool(makeTool({ name: 'schema_test', tier: 'free' }));
154
+ const defs = getToolDefinitionsForApi('free');
155
+ const def = defs.find(d => d.name === 'schema_test');
156
+ assert.ok(def);
157
+ assert.equal(def.input_schema.type, 'object');
158
+ assert.ok(def.input_schema.properties.input);
159
+ assert.ok(def.input_schema.required?.includes('input'));
160
+ });
161
+ });
162
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/tools/index.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function registerMatrixTools(): void;
2
+ //# sourceMappingURL=matrix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrix.d.ts","sourceRoot":"","sources":["../../src/tools/matrix.ts"],"names":[],"mappings":"AAQA,wBAAgB,mBAAmB,IAAI,IAAI,CA2E1C"}
@@ -0,0 +1,79 @@
1
+ // K:BOT Matrix Tools — Agent creation and invocation from within conversations
2
+ // The AI can spawn specialist agents on-the-fly to delegate sub-tasks.
3
+ import { registerTool } from './index.js';
4
+ import { createAgent, listAgents, removeAgent, PRESETS, } from '../matrix.js';
5
+ export function registerMatrixTools() {
6
+ registerTool({
7
+ name: 'create_agent',
8
+ description: 'Create a new specialist agent in the matrix. The agent gets a custom system prompt and can be invoked later by switching to it with /agent <id>. Use this when a task needs a specific expert perspective (e.g., security auditor, UX critic, devil\'s advocate). Preset templates available: ' + Object.keys(PRESETS).join(', '),
9
+ parameters: {
10
+ name: { type: 'string', description: 'Human-readable name (e.g., "Security Auditor")', required: true },
11
+ system_prompt: { type: 'string', description: 'System prompt defining the agent\'s expertise, personality, and evaluation criteria', required: true },
12
+ },
13
+ tier: 'free',
14
+ execute: async (args) => {
15
+ const name = String(args.name || '');
16
+ const systemPrompt = String(args.system_prompt || '');
17
+ if (!name || !systemPrompt) {
18
+ return 'Error: Both name and system_prompt are required.';
19
+ }
20
+ try {
21
+ const agent = createAgent(name, systemPrompt);
22
+ return `Agent "${agent.name}" created successfully.\nID: ${agent.id}\nIcon: ${agent.icon}\nThe user can switch to this agent with: /agent ${agent.id}`;
23
+ }
24
+ catch (err) {
25
+ return `Error: ${err instanceof Error ? err.message : String(err)}`;
26
+ }
27
+ },
28
+ });
29
+ registerTool({
30
+ name: 'spawn_preset_agent',
31
+ description: 'Spawn a pre-built specialist agent from the template library. Available presets: ' + Object.entries(PRESETS).map(([id, p]) => `${id} (${p.name})`).join(', '),
32
+ parameters: {
33
+ preset: { type: 'string', description: 'Preset ID: ' + Object.keys(PRESETS).join(', '), required: true },
34
+ },
35
+ tier: 'free',
36
+ execute: async (args) => {
37
+ const presetId = String(args.preset || '');
38
+ const preset = PRESETS[presetId];
39
+ if (!preset) {
40
+ return `Unknown preset "${presetId}". Available: ${Object.keys(PRESETS).join(', ')}`;
41
+ }
42
+ try {
43
+ const agent = createAgent(preset.name, preset.prompt);
44
+ return `Preset agent "${agent.name}" spawned.\nID: ${agent.id}\nThe user can switch to this agent with: /agent ${agent.id}`;
45
+ }
46
+ catch (err) {
47
+ return `Error: ${err instanceof Error ? err.message : String(err)}`;
48
+ }
49
+ },
50
+ });
51
+ registerTool({
52
+ name: 'list_matrix_agents',
53
+ description: 'List all custom agents currently in the matrix, showing their IDs, names, and invocation counts.',
54
+ parameters: {},
55
+ tier: 'free',
56
+ execute: async () => {
57
+ const agents = listAgents();
58
+ if (agents.length === 0)
59
+ return 'No agents in the matrix yet.';
60
+ return agents.map(a => `${a.icon} ${a.name} (${a.id}) — ${a.invocations} calls\n Prompt: ${a.systemPrompt.slice(0, 100)}...`).join('\n\n');
61
+ },
62
+ });
63
+ registerTool({
64
+ name: 'remove_matrix_agent',
65
+ description: 'Remove a custom agent from the matrix by ID.',
66
+ parameters: {
67
+ agent_id: { type: 'string', description: 'The agent ID to remove', required: true },
68
+ },
69
+ tier: 'free',
70
+ execute: async (args) => {
71
+ const id = String(args.agent_id || '');
72
+ if (removeAgent(id)) {
73
+ return `Agent "${id}" removed from the matrix.`;
74
+ }
75
+ return `Agent "${id}" not found in the matrix.`;
76
+ },
77
+ });
78
+ }
79
+ //# sourceMappingURL=matrix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrix.js","sourceRoot":"","sources":["../../src/tools/matrix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function registerMcpClientTools(): void;
2
+ //# sourceMappingURL=mcp-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../src/tools/mcp-client.ts"],"names":[],"mappings":"AA4GA,wBAAgB,sBAAsB,IAAI,IAAI,CA8O7C"}