cray-code 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 (252) hide show
  1. package/README.md +316 -0
  2. package/dist/Tool.d.ts +217 -0
  3. package/dist/Tool.d.ts.map +1 -0
  4. package/dist/Tool.js +89 -0
  5. package/dist/Tool.js.map +1 -0
  6. package/dist/branding/logo.d.ts +8 -0
  7. package/dist/branding/logo.d.ts.map +1 -0
  8. package/dist/branding/logo.js +26 -0
  9. package/dist/branding/logo.js.map +1 -0
  10. package/dist/branding/theme.d.ts +27 -0
  11. package/dist/branding/theme.d.ts.map +1 -0
  12. package/dist/branding/theme.js +28 -0
  13. package/dist/branding/theme.js.map +1 -0
  14. package/dist/commands/registry.d.ts +32 -0
  15. package/dist/commands/registry.d.ts.map +1 -0
  16. package/dist/commands/registry.js +759 -0
  17. package/dist/commands/registry.js.map +1 -0
  18. package/dist/components/MessageView.d.ts +12 -0
  19. package/dist/components/MessageView.d.ts.map +1 -0
  20. package/dist/components/MessageView.js +35 -0
  21. package/dist/components/MessageView.js.map +1 -0
  22. package/dist/components/PermissionPrompt.d.ts +11 -0
  23. package/dist/components/PermissionPrompt.d.ts.map +1 -0
  24. package/dist/components/PermissionPrompt.js +6 -0
  25. package/dist/components/PermissionPrompt.js.map +1 -0
  26. package/dist/components/PluginManager.d.ts +27 -0
  27. package/dist/components/PluginManager.d.ts.map +1 -0
  28. package/dist/components/PluginManager.js +391 -0
  29. package/dist/components/PluginManager.js.map +1 -0
  30. package/dist/components/ThinkingBlock.d.ts +27 -0
  31. package/dist/components/ThinkingBlock.d.ts.map +1 -0
  32. package/dist/components/ThinkingBlock.js +29 -0
  33. package/dist/components/ThinkingBlock.js.map +1 -0
  34. package/dist/components/ToolCallBlock.d.ts +14 -0
  35. package/dist/components/ToolCallBlock.d.ts.map +1 -0
  36. package/dist/components/ToolCallBlock.js +83 -0
  37. package/dist/components/ToolCallBlock.js.map +1 -0
  38. package/dist/components/TrustDialog.d.ts +20 -0
  39. package/dist/components/TrustDialog.d.ts.map +1 -0
  40. package/dist/components/TrustDialog.js +80 -0
  41. package/dist/components/TrustDialog.js.map +1 -0
  42. package/dist/context.d.ts +25 -0
  43. package/dist/context.d.ts.map +1 -0
  44. package/dist/context.js +268 -0
  45. package/dist/context.js.map +1 -0
  46. package/dist/cray.d.ts +114 -0
  47. package/dist/cray.d.ts.map +1 -0
  48. package/dist/cray.js +338 -0
  49. package/dist/cray.js.map +1 -0
  50. package/dist/index.d.ts +16 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +122 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/plugins/registry.d.ts +106 -0
  55. package/dist/plugins/registry.d.ts.map +1 -0
  56. package/dist/plugins/registry.js +695 -0
  57. package/dist/plugins/registry.js.map +1 -0
  58. package/dist/query.d.ts +31 -0
  59. package/dist/query.d.ts.map +1 -0
  60. package/dist/query.js +637 -0
  61. package/dist/query.js.map +1 -0
  62. package/dist/queryStream.d.ts +36 -0
  63. package/dist/queryStream.d.ts.map +1 -0
  64. package/dist/queryStream.js +704 -0
  65. package/dist/queryStream.js.map +1 -0
  66. package/dist/screens/ReplScreen.d.ts +22 -0
  67. package/dist/screens/ReplScreen.d.ts.map +1 -0
  68. package/dist/screens/ReplScreen.js +763 -0
  69. package/dist/screens/ReplScreen.js.map +1 -0
  70. package/dist/services/agentRunner.d.ts +39 -0
  71. package/dist/services/agentRunner.d.ts.map +1 -0
  72. package/dist/services/agentRunner.js +115 -0
  73. package/dist/services/agentRunner.js.map +1 -0
  74. package/dist/services/compact.d.ts +34 -0
  75. package/dist/services/compact.d.ts.map +1 -0
  76. package/dist/services/compact.js +179 -0
  77. package/dist/services/compact.js.map +1 -0
  78. package/dist/services/loadPluginCommands.d.ts +55 -0
  79. package/dist/services/loadPluginCommands.d.ts.map +1 -0
  80. package/dist/services/loadPluginCommands.js +219 -0
  81. package/dist/services/loadPluginCommands.js.map +1 -0
  82. package/dist/services/mcp/index.d.ts +3 -0
  83. package/dist/services/mcp/index.d.ts.map +1 -0
  84. package/dist/services/mcp/index.js +3 -0
  85. package/dist/services/mcp/index.js.map +1 -0
  86. package/dist/services/mcp/manager.d.ts +24 -0
  87. package/dist/services/mcp/manager.d.ts.map +1 -0
  88. package/dist/services/mcp/manager.js +138 -0
  89. package/dist/services/mcp/manager.js.map +1 -0
  90. package/dist/services/mcp/types.d.ts +52 -0
  91. package/dist/services/mcp/types.d.ts.map +1 -0
  92. package/dist/services/mcp/types.js +5 -0
  93. package/dist/services/mcp/types.js.map +1 -0
  94. package/dist/services/memory.d.ts +38 -0
  95. package/dist/services/memory.d.ts.map +1 -0
  96. package/dist/services/memory.js +181 -0
  97. package/dist/services/memory.js.map +1 -0
  98. package/dist/services/permissionPrompt.d.ts +38 -0
  99. package/dist/services/permissionPrompt.d.ts.map +1 -0
  100. package/dist/services/permissionPrompt.js +83 -0
  101. package/dist/services/permissionPrompt.js.map +1 -0
  102. package/dist/services/permissions.d.ts +15 -0
  103. package/dist/services/permissions.d.ts.map +1 -0
  104. package/dist/services/permissions.js +237 -0
  105. package/dist/services/permissions.js.map +1 -0
  106. package/dist/services/sessionStorage.d.ts +51 -0
  107. package/dist/services/sessionStorage.d.ts.map +1 -0
  108. package/dist/services/sessionStorage.js +266 -0
  109. package/dist/services/sessionStorage.js.map +1 -0
  110. package/dist/setup.d.ts +22 -0
  111. package/dist/setup.d.ts.map +1 -0
  112. package/dist/setup.js +160 -0
  113. package/dist/setup.js.map +1 -0
  114. package/dist/skills/bundledSkills.d.ts +18 -0
  115. package/dist/skills/bundledSkills.d.ts.map +1 -0
  116. package/dist/skills/bundledSkills.js +277 -0
  117. package/dist/skills/bundledSkills.js.map +1 -0
  118. package/dist/skills/index.d.ts +4 -0
  119. package/dist/skills/index.d.ts.map +1 -0
  120. package/dist/skills/index.js +3 -0
  121. package/dist/skills/index.js.map +1 -0
  122. package/dist/skills/loadSkillsDir.d.ts +45 -0
  123. package/dist/skills/loadSkillsDir.d.ts.map +1 -0
  124. package/dist/skills/loadSkillsDir.js +233 -0
  125. package/dist/skills/loadSkillsDir.js.map +1 -0
  126. package/dist/state/AppState.d.ts +70 -0
  127. package/dist/state/AppState.d.ts.map +1 -0
  128. package/dist/state/AppState.js +106 -0
  129. package/dist/state/AppState.js.map +1 -0
  130. package/dist/tools/AgentTool.d.ts +62 -0
  131. package/dist/tools/AgentTool.d.ts.map +1 -0
  132. package/dist/tools/AgentTool.js +133 -0
  133. package/dist/tools/AgentTool.js.map +1 -0
  134. package/dist/tools/AskUserQuestionTool.d.ts +60 -0
  135. package/dist/tools/AskUserQuestionTool.d.ts.map +1 -0
  136. package/dist/tools/AskUserQuestionTool.js +52 -0
  137. package/dist/tools/AskUserQuestionTool.js.map +1 -0
  138. package/dist/tools/BashTool.d.ts +33 -0
  139. package/dist/tools/BashTool.d.ts.map +1 -0
  140. package/dist/tools/BashTool.js +211 -0
  141. package/dist/tools/BashTool.js.map +1 -0
  142. package/dist/tools/EditTool.d.ts +24 -0
  143. package/dist/tools/EditTool.d.ts.map +1 -0
  144. package/dist/tools/EditTool.js +102 -0
  145. package/dist/tools/EditTool.js.map +1 -0
  146. package/dist/tools/GlobTool.d.ts +17 -0
  147. package/dist/tools/GlobTool.d.ts.map +1 -0
  148. package/dist/tools/GlobTool.js +65 -0
  149. package/dist/tools/GlobTool.js.map +1 -0
  150. package/dist/tools/GrepTool.d.ts +30 -0
  151. package/dist/tools/GrepTool.d.ts.map +1 -0
  152. package/dist/tools/GrepTool.js +140 -0
  153. package/dist/tools/GrepTool.js.map +1 -0
  154. package/dist/tools/MCPTool.d.ts +24 -0
  155. package/dist/tools/MCPTool.d.ts.map +1 -0
  156. package/dist/tools/MCPTool.js +67 -0
  157. package/dist/tools/MCPTool.js.map +1 -0
  158. package/dist/tools/NotebookEditTool.d.ts +28 -0
  159. package/dist/tools/NotebookEditTool.d.ts.map +1 -0
  160. package/dist/tools/NotebookEditTool.js +213 -0
  161. package/dist/tools/NotebookEditTool.js.map +1 -0
  162. package/dist/tools/NotebookReadTool.d.ts +19 -0
  163. package/dist/tools/NotebookReadTool.d.ts.map +1 -0
  164. package/dist/tools/NotebookReadTool.js +191 -0
  165. package/dist/tools/NotebookReadTool.js.map +1 -0
  166. package/dist/tools/PlanTools.d.ts +17 -0
  167. package/dist/tools/PlanTools.d.ts.map +1 -0
  168. package/dist/tools/PlanTools.js +65 -0
  169. package/dist/tools/PlanTools.js.map +1 -0
  170. package/dist/tools/ReadTool.d.ts +21 -0
  171. package/dist/tools/ReadTool.d.ts.map +1 -0
  172. package/dist/tools/ReadTool.js +202 -0
  173. package/dist/tools/ReadTool.js.map +1 -0
  174. package/dist/tools/SkillTool.d.ts +32 -0
  175. package/dist/tools/SkillTool.d.ts.map +1 -0
  176. package/dist/tools/SkillTool.js +217 -0
  177. package/dist/tools/SkillTool.js.map +1 -0
  178. package/dist/tools/TodoWriteTool.d.ts +35 -0
  179. package/dist/tools/TodoWriteTool.d.ts.map +1 -0
  180. package/dist/tools/TodoWriteTool.js +58 -0
  181. package/dist/tools/TodoWriteTool.js.map +1 -0
  182. package/dist/tools/WebFetchTool.d.ts +17 -0
  183. package/dist/tools/WebFetchTool.d.ts.map +1 -0
  184. package/dist/tools/WebFetchTool.js +97 -0
  185. package/dist/tools/WebFetchTool.js.map +1 -0
  186. package/dist/tools/WebSearchTool.d.ts +18 -0
  187. package/dist/tools/WebSearchTool.d.ts.map +1 -0
  188. package/dist/tools/WebSearchTool.js +76 -0
  189. package/dist/tools/WebSearchTool.js.map +1 -0
  190. package/dist/tools/WriteTool.d.ts +17 -0
  191. package/dist/tools/WriteTool.d.ts.map +1 -0
  192. package/dist/tools/WriteTool.js +84 -0
  193. package/dist/tools/WriteTool.js.map +1 -0
  194. package/dist/tools/index.d.ts +21 -0
  195. package/dist/tools/index.d.ts.map +1 -0
  196. package/dist/tools/index.js +20 -0
  197. package/dist/tools/index.js.map +1 -0
  198. package/dist/tools.d.ts +34 -0
  199. package/dist/tools.d.ts.map +1 -0
  200. package/dist/tools.js +102 -0
  201. package/dist/tools.js.map +1 -0
  202. package/dist/types/events.d.ts +85 -0
  203. package/dist/types/events.d.ts.map +1 -0
  204. package/dist/types/events.js +12 -0
  205. package/dist/types/events.js.map +1 -0
  206. package/dist/types/index.d.ts +4 -0
  207. package/dist/types/index.d.ts.map +1 -0
  208. package/dist/types/index.js +4 -0
  209. package/dist/types/index.js.map +1 -0
  210. package/dist/types/message.d.ts +71 -0
  211. package/dist/types/message.d.ts.map +1 -0
  212. package/dist/types/message.js +5 -0
  213. package/dist/types/message.js.map +1 -0
  214. package/dist/types/permission.d.ts +56 -0
  215. package/dist/types/permission.d.ts.map +1 -0
  216. package/dist/types/permission.js +46 -0
  217. package/dist/types/permission.js.map +1 -0
  218. package/dist/types/processUserInput.d.ts +18 -0
  219. package/dist/types/processUserInput.d.ts.map +1 -0
  220. package/dist/types/processUserInput.js +8 -0
  221. package/dist/types/processUserInput.js.map +1 -0
  222. package/dist/types/tool.d.ts +32 -0
  223. package/dist/types/tool.d.ts.map +1 -0
  224. package/dist/types/tool.js +5 -0
  225. package/dist/types/tool.js.map +1 -0
  226. package/dist/utils/compactBoundary.d.ts +11 -0
  227. package/dist/utils/compactBoundary.d.ts.map +1 -0
  228. package/dist/utils/compactBoundary.js +26 -0
  229. package/dist/utils/compactBoundary.js.map +1 -0
  230. package/dist/utils/configStore.d.ts +41 -0
  231. package/dist/utils/configStore.d.ts.map +1 -0
  232. package/dist/utils/configStore.js +111 -0
  233. package/dist/utils/configStore.js.map +1 -0
  234. package/dist/utils/forkedAgent.d.ts +40 -0
  235. package/dist/utils/forkedAgent.d.ts.map +1 -0
  236. package/dist/utils/forkedAgent.js +231 -0
  237. package/dist/utils/forkedAgent.js.map +1 -0
  238. package/dist/utils/messages.d.ts +14 -0
  239. package/dist/utils/messages.d.ts.map +1 -0
  240. package/dist/utils/messages.js +29 -0
  241. package/dist/utils/messages.js.map +1 -0
  242. package/dist/utils/sandbox.d.ts +22 -0
  243. package/dist/utils/sandbox.d.ts.map +1 -0
  244. package/dist/utils/sandbox.js +59 -0
  245. package/dist/utils/sandbox.js.map +1 -0
  246. package/dist/utils/sideQuestion.d.ts +29 -0
  247. package/dist/utils/sideQuestion.d.ts.map +1 -0
  248. package/dist/utils/sideQuestion.js +81 -0
  249. package/dist/utils/sideQuestion.js.map +1 -0
  250. package/install.ps1 +86 -0
  251. package/install.sh +92 -0
  252. package/package.json +68 -0
@@ -0,0 +1,58 @@
1
+ /**
2
+ * TodoWriteTool — Task list management for Cray Code.
3
+ * Allows the agent to track multi-step task progress.
4
+ */
5
+ import { z } from 'zod';
6
+ import { buildTool } from '../Tool.js';
7
+ export const TODO_WRITE_TOOL_NAME = 'todo_write';
8
+ const todoItemSchema = z.object({
9
+ content: z.string().min(1).describe('The task description (imperative form)'),
10
+ status: z.enum(['pending', 'in_progress', 'completed']).describe('Task status'),
11
+ activeForm: z.string().min(1).describe('Present continuous form (e.g., "Running tests")'),
12
+ });
13
+ const inputSchema = z.object({
14
+ todos: z.array(todoItemSchema).describe('The updated todo list'),
15
+ });
16
+ export const TodoWriteTool = buildTool({
17
+ name: TODO_WRITE_TOOL_NAME,
18
+ aliases: ['todos', 'tasklist'],
19
+ searchHint: 'todo task list progress tracking',
20
+ inputSchema,
21
+ async description() {
22
+ return 'Updates the task list';
23
+ },
24
+ userFacingName() {
25
+ return 'TodoWrite';
26
+ },
27
+ isReadOnly() {
28
+ return false;
29
+ },
30
+ isConcurrencySafe() {
31
+ return false; // Tasks should be serial
32
+ },
33
+ async checkPermissions(_input, _context) {
34
+ return { behavior: 'allow' };
35
+ },
36
+ async call(input, context) {
37
+ const summary = input.todos.map((t) => {
38
+ const icon = t.status === 'completed' ? '[x]' : t.status === 'in_progress' ? '[>]' : '[ ]';
39
+ return `${icon} ${t.content}`;
40
+ }).join('\n');
41
+ const stats = {
42
+ total: input.todos.length,
43
+ completed: input.todos.filter((t) => t.status === 'completed').length,
44
+ inProgress: input.todos.filter((t) => t.status === 'in_progress').length,
45
+ pending: input.todos.filter((t) => t.status === 'pending').length,
46
+ };
47
+ context.logDebug(`Todo updated: ${stats.completed}/${stats.total} completed`);
48
+ return {
49
+ data: summary,
50
+ content: `Tasks updated: ${stats.completed}/${stats.total} completed`,
51
+ title: `Todo (${stats.completed}/${stats.total})`,
52
+ };
53
+ },
54
+ renderToolUseMessage(input) {
55
+ return `Updating ${input.todos.length} tasks...`;
56
+ },
57
+ });
58
+ //# sourceMappingURL=TodoWriteTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TodoWriteTool.js","sourceRoot":"","sources":["../../src/tools/TodoWriteTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * WebFetchTool — Fetch and process web content for Cray Code.
3
+ */
4
+ import { z } from 'zod';
5
+ import { type ToolDef } from '../Tool.js';
6
+ export declare const WEB_FETCH_TOOL_NAME = "web_fetch";
7
+ export declare const WebFetchTool: ToolDef<z.ZodObject<{
8
+ url: z.ZodString;
9
+ prompt: z.ZodString;
10
+ }, "strip", z.ZodTypeAny, {
11
+ prompt: string;
12
+ url: string;
13
+ }, {
14
+ prompt: string;
15
+ url: string;
16
+ }>, string>;
17
+ //# sourceMappingURL=WebFetchTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebFetchTool.d.ts","sourceRoot":"","sources":["../../src/tools/WebFetchTool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAa,KAAK,OAAO,EAAwC,MAAM,YAAY,CAAC;AAG3F,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAS/C,eAAO,MAAM,YAAY;;;;;;;;;WAiFvB,CAAC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * WebFetchTool — Fetch and process web content for Cray Code.
3
+ */
4
+ import { z } from 'zod';
5
+ import { buildTool } from '../Tool.js';
6
+ export const WEB_FETCH_TOOL_NAME = 'web_fetch';
7
+ const inputSchema = z.object({
8
+ url: z.string().url().describe('The URL to fetch'),
9
+ prompt: z.string().describe('What information to extract from the page'),
10
+ });
11
+ export const WebFetchTool = buildTool({
12
+ name: WEB_FETCH_TOOL_NAME,
13
+ aliases: ['fetch', 'curl'],
14
+ searchHint: 'web fetch http url download',
15
+ inputSchema,
16
+ description(input) {
17
+ return `Fetch: ${input.url}`;
18
+ },
19
+ userFacingName() {
20
+ return 'WebFetch';
21
+ },
22
+ isReadOnly() {
23
+ return true;
24
+ },
25
+ isConcurrencySafe() {
26
+ return true;
27
+ },
28
+ async checkPermissions(_input, _context) {
29
+ return { behavior: 'passthrough' };
30
+ },
31
+ async call(input) {
32
+ try {
33
+ const controller = new AbortController();
34
+ const timeout = setTimeout(() => controller.abort(), 30_000);
35
+ const response = await fetch(input.url, {
36
+ signal: controller.signal,
37
+ headers: {
38
+ 'User-Agent': 'CrayCode/1.0 (AI Agent)',
39
+ 'Accept': 'text/html, text/plain, application/json',
40
+ },
41
+ });
42
+ clearTimeout(timeout);
43
+ if (!response.ok) {
44
+ return {
45
+ data: '',
46
+ content: `HTTP ${response.status}: ${response.statusText} for ${input.url}`,
47
+ isError: true,
48
+ title: `WebFetch: ${response.status}`,
49
+ };
50
+ }
51
+ const contentType = response.headers.get('content-type') || '';
52
+ let content;
53
+ if (contentType.includes('text/html')) {
54
+ const html = await response.text();
55
+ content = stripHtml(html);
56
+ }
57
+ else {
58
+ content = await response.text();
59
+ }
60
+ // Truncate large responses
61
+ const truncated = content.length > 50_000;
62
+ if (truncated) {
63
+ content = content.slice(0, 50_000) + '\n... [truncated at 50KB]';
64
+ }
65
+ return {
66
+ data: content,
67
+ content,
68
+ truncated,
69
+ title: `WebFetch: ${new URL(input.url).hostname}`,
70
+ };
71
+ }
72
+ catch (err) {
73
+ return {
74
+ data: '',
75
+ content: `Fetch failed: ${err.name === 'AbortError' ? 'Request timed out' : err.message}`,
76
+ isError: true,
77
+ title: 'WebFetch Error',
78
+ };
79
+ }
80
+ },
81
+ });
82
+ function stripHtml(html) {
83
+ // Basic HTML to text conversion
84
+ return html
85
+ .replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '')
86
+ .replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '')
87
+ .replace(/<[^>]+>/g, ' ')
88
+ .replace(/&nbsp;/g, ' ')
89
+ .replace(/&amp;/g, '&')
90
+ .replace(/&lt;/g, '<')
91
+ .replace(/&gt;/g, '>')
92
+ .replace(/&quot;/g, '"')
93
+ .replace(/&#39;/g, "'")
94
+ .replace(/\s+/g, ' ')
95
+ .trim();
96
+ }
97
+ //# sourceMappingURL=WebFetchTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebFetchTool.js","sourceRoot":"","sources":["../../src/tools/WebFetchTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * WebSearchTool — Web search capability for Cray Code.
3
+ * Uses a configurable search backend (default: free API).
4
+ */
5
+ import { z } from 'zod';
6
+ import { type ToolDef } from '../Tool.js';
7
+ export declare const WEB_SEARCH_TOOL_NAME = "web_search";
8
+ export declare const WebSearchTool: ToolDef<z.ZodObject<{
9
+ query: z.ZodString;
10
+ max_results: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ max_results: number;
13
+ query: string;
14
+ }, {
15
+ query: string;
16
+ max_results?: number | undefined;
17
+ }>, string>;
18
+ //# sourceMappingURL=WebSearchTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSearchTool.d.ts","sourceRoot":"","sources":["../../src/tools/WebSearchTool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAa,KAAK,OAAO,EAAwC,MAAM,YAAY,CAAC;AAG3F,eAAO,MAAM,oBAAoB,eAAe,CAAC;AASjD,eAAO,MAAM,aAAa;;;;;;;;;WA2ExB,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * WebSearchTool — Web search capability for Cray Code.
3
+ * Uses a configurable search backend (default: free API).
4
+ */
5
+ import { z } from 'zod';
6
+ import { buildTool } from '../Tool.js';
7
+ export const WEB_SEARCH_TOOL_NAME = 'web_search';
8
+ const inputSchema = z.object({
9
+ query: z.string().min(2).describe('The search query'),
10
+ max_results: z.number().optional().default(5).describe('Max results to return'),
11
+ });
12
+ export const WebSearchTool = buildTool({
13
+ name: WEB_SEARCH_TOOL_NAME,
14
+ aliases: ['search_web', 'ddg'],
15
+ searchHint: 'web search internet query',
16
+ inputSchema,
17
+ async description(input) {
18
+ return `Search: "${input.query}"`;
19
+ },
20
+ userFacingName() {
21
+ return 'WebSearch';
22
+ },
23
+ isReadOnly() {
24
+ return true;
25
+ },
26
+ isConcurrencySafe() {
27
+ return true;
28
+ },
29
+ async checkPermissions(_input, _context) {
30
+ return { behavior: 'passthrough' };
31
+ },
32
+ async call(input) {
33
+ try {
34
+ const controller = new AbortController();
35
+ const timeout = setTimeout(() => controller.abort(), 15_000);
36
+ // Use DuckDuckGo Instant Answer API (free, no key required)
37
+ const url = `https://api.duckduckgo.com/?q=${encodeURIComponent(input.query)}&format=json&no_html=1&skip_disambig=1`;
38
+ const response = await fetch(url, { signal: controller.signal });
39
+ clearTimeout(timeout);
40
+ const data = await response.json();
41
+ const results = [];
42
+ if (data.AbstractText) {
43
+ results.push(`Summary: ${data.AbstractText}`);
44
+ }
45
+ if (data.AbstractURL) {
46
+ results.push(`Source: ${data.AbstractURL}`);
47
+ }
48
+ if (data.RelatedTopics?.length) {
49
+ results.push('\nRelated:');
50
+ for (const topic of data.RelatedTopics.slice(0, input.max_results)) {
51
+ if (topic.Text) {
52
+ results.push(`- ${topic.Text} (${topic.FirstURL || ''})`);
53
+ }
54
+ }
55
+ }
56
+ if (results.length === 0) {
57
+ results.push(`No results found for "${input.query}". Try a different query.`);
58
+ }
59
+ const output = results.join('\n');
60
+ return {
61
+ data: output,
62
+ content: output,
63
+ title: `Search: ${input.query}`,
64
+ };
65
+ }
66
+ catch (err) {
67
+ return {
68
+ data: '',
69
+ content: `Search failed: ${err.name === 'AbortError' ? 'Timed out' : err.message}`,
70
+ isError: true,
71
+ title: 'Search Error',
72
+ };
73
+ }
74
+ },
75
+ });
76
+ //# sourceMappingURL=WebSearchTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSearchTool.js","sourceRoot":"","sources":["../../src/tools/WebSearchTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * WriteTool — File writing tool for Cray Code.
3
+ */
4
+ import { z } from 'zod';
5
+ import { type ToolDef } from '../Tool.js';
6
+ export declare const WRITE_TOOL_NAME = "write";
7
+ export declare const WriteTool: ToolDef<z.ZodObject<{
8
+ file_path: z.ZodString;
9
+ content: z.ZodString;
10
+ }, "strip", z.ZodTypeAny, {
11
+ content: string;
12
+ file_path: string;
13
+ }, {
14
+ content: string;
15
+ file_path: string;
16
+ }>, string>;
17
+ //# sourceMappingURL=WriteTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WriteTool.d.ts","sourceRoot":"","sources":["../../src/tools/WriteTool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAa,KAAK,OAAO,EAAwC,MAAM,YAAY,CAAC;AAG3F,eAAO,MAAM,eAAe,UAAU,CAAC;AASvC,eAAO,MAAM,SAAS;;;;;;;;;WAiFpB,CAAC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * WriteTool — File writing tool for Cray Code.
3
+ */
4
+ import { z } from 'zod';
5
+ import { writeFile } from 'fs/promises';
6
+ import { existsSync, mkdirSync } from 'fs';
7
+ import * as path from 'path';
8
+ import { buildTool } from '../Tool.js';
9
+ export const WRITE_TOOL_NAME = 'write';
10
+ const inputSchema = z.object({
11
+ file_path: z.string().describe('The absolute path to write to'),
12
+ content: z.string().describe('The content to write'),
13
+ });
14
+ export const WriteTool = buildTool({
15
+ name: WRITE_TOOL_NAME,
16
+ aliases: ['create'],
17
+ searchHint: 'file write create new',
18
+ inputSchema,
19
+ async description(input) {
20
+ return `Writes file: ${path.basename(input.file_path)}`;
21
+ },
22
+ userFacingName() {
23
+ return 'Write';
24
+ },
25
+ isReadOnly() {
26
+ return false;
27
+ },
28
+ isDestructive() {
29
+ return true; // Overwrites files
30
+ },
31
+ isConcurrencySafe() {
32
+ return false;
33
+ },
34
+ async checkPermissions(input, context) {
35
+ const mode = (context?.permissionContext?.mode ?? context?.mode) ?? 'default';
36
+ if (mode === 'bypass')
37
+ return { behavior: 'allow' };
38
+ if (mode === 'acceptEdits')
39
+ return { behavior: 'allow' };
40
+ const basename = path.basename(input.file_path);
41
+ const isNew = !existsSync(input.file_path);
42
+ return {
43
+ behavior: 'ask',
44
+ message: isNew
45
+ ? `Create new file: ${basename}?`
46
+ : `Overwrite ${basename} (${input.content.length} chars)?`,
47
+ };
48
+ },
49
+ async call(input, context) {
50
+ const filePath = path.resolve(input.file_path);
51
+ try {
52
+ // Ensure parent directory exists
53
+ const dir = path.dirname(filePath);
54
+ if (!existsSync(dir)) {
55
+ mkdirSync(dir, { recursive: true });
56
+ }
57
+ const existed = existsSync(filePath);
58
+ await writeFile(filePath, input.content, 'utf-8');
59
+ const lines = input.content.split('\n').length;
60
+ const size = Buffer.byteLength(input.content, 'utf-8');
61
+ const msg = existed
62
+ ? `Overwrote ${path.basename(filePath)} (${lines} lines, ${(size / 1024).toFixed(1)}KB)`
63
+ : `Created ${path.basename(filePath)} (${lines} lines, ${(size / 1024).toFixed(1)}KB)`;
64
+ return {
65
+ data: msg,
66
+ content: msg,
67
+ title: `Write: ${path.basename(filePath)}`,
68
+ };
69
+ }
70
+ catch (err) {
71
+ return {
72
+ data: '',
73
+ content: `Failed to write ${filePath}: ${err.message}`,
74
+ isError: true,
75
+ title: `Write Error: ${path.basename(filePath)}`,
76
+ };
77
+ }
78
+ },
79
+ renderToolUseMessage(input) {
80
+ const lines = input.content.split('\n').length;
81
+ return `Writing ${path.basename(input.file_path)} (${lines} lines)...`;
82
+ },
83
+ });
84
+ //# sourceMappingURL=WriteTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WriteTool.js","sourceRoot":"","sources":["../../src/tools/WriteTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Tools index — exports all Cray Code tools.
3
+ */
4
+ export { BashTool, BASH_TOOL_NAME } from './BashTool.js';
5
+ export { ReadTool, READ_TOOL_NAME } from './ReadTool.js';
6
+ export { WriteTool, WRITE_TOOL_NAME } from './WriteTool.js';
7
+ export { EditTool, EDIT_TOOL_NAME } from './EditTool.js';
8
+ export { GlobTool, GLOB_TOOL_NAME } from './GlobTool.js';
9
+ export { GrepTool, GREP_TOOL_NAME } from './GrepTool.js';
10
+ export { WebFetchTool, WEB_FETCH_TOOL_NAME } from './WebFetchTool.js';
11
+ export { WebSearchTool, WEB_SEARCH_TOOL_NAME } from './WebSearchTool.js';
12
+ export { createMCPTool, MCP_TOOL_NAME } from './MCPTool.js';
13
+ export { SkillTool, SKILL_TOOL_NAME } from './SkillTool.js';
14
+ export { AgentTool, AGENT_TOOL_NAME, BUILT_IN_AGENTS } from './AgentTool.js';
15
+ export type { BuiltInAgentType } from './AgentTool.js';
16
+ export { TodoWriteTool, TODO_WRITE_TOOL_NAME } from './TodoWriteTool.js';
17
+ export { AskUserQuestionTool, ASK_USER_QUESTION_TOOL_NAME } from './AskUserQuestionTool.js';
18
+ export { EnterPlanModeTool, ExitPlanModeTool, ENTER_PLAN_TOOL_NAME, EXIT_PLAN_TOOL_NAME } from './PlanTools.js';
19
+ export { NotebookReadTool, NOTEBOOK_READ_TOOL_NAME } from './NotebookReadTool.js';
20
+ export { NotebookEditTool, NOTEBOOK_EDIT_TOOL_NAME } from './NotebookEditTool.js';
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC7E,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAChH,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Tools index — exports all Cray Code tools.
3
+ */
4
+ export { BashTool, BASH_TOOL_NAME } from './BashTool.js';
5
+ export { ReadTool, READ_TOOL_NAME } from './ReadTool.js';
6
+ export { WriteTool, WRITE_TOOL_NAME } from './WriteTool.js';
7
+ export { EditTool, EDIT_TOOL_NAME } from './EditTool.js';
8
+ export { GlobTool, GLOB_TOOL_NAME } from './GlobTool.js';
9
+ export { GrepTool, GREP_TOOL_NAME } from './GrepTool.js';
10
+ export { WebFetchTool, WEB_FETCH_TOOL_NAME } from './WebFetchTool.js';
11
+ export { WebSearchTool, WEB_SEARCH_TOOL_NAME } from './WebSearchTool.js';
12
+ export { createMCPTool, MCP_TOOL_NAME } from './MCPTool.js';
13
+ export { SkillTool, SKILL_TOOL_NAME } from './SkillTool.js';
14
+ export { AgentTool, AGENT_TOOL_NAME, BUILT_IN_AGENTS } from './AgentTool.js';
15
+ export { TodoWriteTool, TODO_WRITE_TOOL_NAME } from './TodoWriteTool.js';
16
+ export { AskUserQuestionTool, ASK_USER_QUESTION_TOOL_NAME } from './AskUserQuestionTool.js';
17
+ export { EnterPlanModeTool, ExitPlanModeTool, ENTER_PLAN_TOOL_NAME, EXIT_PLAN_TOOL_NAME } from './PlanTools.js';
18
+ export { NotebookReadTool, NOTEBOOK_READ_TOOL_NAME } from './NotebookReadTool.js';
19
+ export { NotebookEditTool, NOTEBOOK_EDIT_TOOL_NAME } from './NotebookEditTool.js';
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAChH,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * tools.ts — Tool Registry for Cray Code
3
+ *
4
+ * Central registry that assembles the full tool pool including:
5
+ * - Built-in tools (read, write, edit, bash, glob, grep, etc.)
6
+ * - MCP-provided tools (dynamic, from connected MCP servers)
7
+ * - Skill-linked tools (restricted tool sets for specific skills)
8
+ *
9
+ * Tool filtering by permission context and agent type is applied here.
10
+ */
11
+ import type { ToolDef } from './Tool.js';
12
+ import { type AgentDefinitionInfo } from './Tool.js';
13
+ import type { ToolPermissionContext } from './types/permission.js';
14
+ /** All built-in tools (always available base set) */
15
+ export declare function getAllBuiltinTools(): ToolDef<any, any>[];
16
+ /**
17
+ * Tools that sub-agents CANNOT use.
18
+ * Prevents infinite recursion and mode confusion.
19
+ */
20
+ export declare const ALL_AGENT_DISALLOWED_TOOLS: Set<string>;
21
+ /** Tools allowed for async (background) agents */
22
+ export declare const ASYNC_AGENT_ALLOWED_TOOLS: Set<string>;
23
+ /**
24
+ * Build the complete tool pool for a given context.
25
+ * Result is memoized — only rebuilds when MCP tools change context changes.
26
+ */
27
+ export declare function buildToolPool(permissionContext: ToolPermissionContext, agentDef?: AgentDefinitionInfo): ToolDef<any, any>[];
28
+ /** Invalidate tool pool cache (call after MCP server changes) */
29
+ export declare function invalidateToolPoolCache(): void;
30
+ /**
31
+ * Build a minimal tool pool for async background agents.
32
+ */
33
+ export declare function buildAsyncAgentToolPool(permissionContext: ToolPermissionContext): ToolDef<any, any>[];
34
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAoB,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAqBnE,qDAAqD;AACrD,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAmBxD;AAED;;;GAGG;AACH,eAAO,MAAM,0BAA0B,aAMrC,CAAC;AAEH,kDAAkD;AAClD,eAAO,MAAM,yBAAyB,aAGpC,CAAC;AAOH;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,iBAAiB,EAAE,qBAAqB,EACxC,QAAQ,CAAC,EAAE,mBAAmB,GAC7B,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAoCrB;AAED,iEAAiE;AACjE,wBAAgB,uBAAuB,IAAI,IAAI,CAG9C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,iBAAiB,EAAE,qBAAqB,GACvC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAWrB"}
package/dist/tools.js ADDED
@@ -0,0 +1,102 @@
1
+ /**
2
+ * tools.ts — Tool Registry for Cray Code
3
+ *
4
+ * Central registry that assembles the full tool pool including:
5
+ * - Built-in tools (read, write, edit, bash, glob, grep, etc.)
6
+ * - MCP-provided tools (dynamic, from connected MCP servers)
7
+ * - Skill-linked tools (restricted tool sets for specific skills)
8
+ *
9
+ * Tool filtering by permission context and agent type is applied here.
10
+ */
11
+ import { assembleToolPool } from './Tool.js';
12
+ import { BashTool, ReadTool, WriteTool, EditTool, GlobTool, GrepTool, WebFetchTool, WebSearchTool, SkillTool, AgentTool, TodoWriteTool, AskUserQuestionTool, EnterPlanModeTool, ExitPlanModeTool, NotebookReadTool, NotebookEditTool, } from './tools/index.js';
13
+ import { getAllMCPWrappedTools } from './services/mcp/manager.js';
14
+ /** All built-in tools (always available base set) */
15
+ export function getAllBuiltinTools() {
16
+ return [
17
+ ReadTool,
18
+ WriteTool,
19
+ EditTool,
20
+ BashTool,
21
+ GlobTool,
22
+ GrepTool,
23
+ WebFetchTool,
24
+ WebSearchTool,
25
+ SkillTool,
26
+ AgentTool,
27
+ TodoWriteTool,
28
+ AskUserQuestionTool,
29
+ EnterPlanModeTool,
30
+ ExitPlanModeTool,
31
+ NotebookReadTool,
32
+ NotebookEditTool,
33
+ ];
34
+ }
35
+ /**
36
+ * Tools that sub-agents CANNOT use.
37
+ * Prevents infinite recursion and mode confusion.
38
+ */
39
+ export const ALL_AGENT_DISALLOWED_TOOLS = new Set([
40
+ 'agent', // Prevent sub-agent nesting loops
41
+ 'task', // Legacy alias
42
+ 'enter_plan_mode',
43
+ 'exit_plan_mode',
44
+ 'ask_user',
45
+ ]);
46
+ /** Tools allowed for async (background) agents */
47
+ export const ASYNC_AGENT_ALLOWED_TOOLS = new Set([
48
+ 'read', 'glob', 'grep', 'web_fetch', 'web_search', 'bash',
49
+ 'write', 'edit',
50
+ ]);
51
+ // ─── Tool pool memoization ────────────────────────────────────
52
+ let poolCacheKey = '';
53
+ let poolCacheResult = [];
54
+ /**
55
+ * Build the complete tool pool for a given context.
56
+ * Result is memoized — only rebuilds when MCP tools change context changes.
57
+ */
58
+ export function buildToolPool(permissionContext, agentDef) {
59
+ const builtinTools = getAllBuiltinTools();
60
+ const mcpTools = getAllMCPWrappedTools();
61
+ // Cache key from tool names + permission mode + agent type
62
+ const key = JSON.stringify({
63
+ builtins: builtinTools.map((t) => t.name).sort(),
64
+ mcp: mcpTools.map((t) => t.name).sort(),
65
+ mode: permissionContext.mode,
66
+ agent: agentDef?.name ?? '',
67
+ allowed: agentDef?.allowedTools?.join(','),
68
+ });
69
+ if (key === poolCacheKey && poolCacheResult.length > 0)
70
+ return poolCacheResult;
71
+ let filteredBuiltins = builtinTools;
72
+ if (agentDef?.allowedTools?.length) {
73
+ filteredBuiltins = builtinTools.filter((t) => agentDef.allowedTools.includes(t.name));
74
+ }
75
+ filteredBuiltins = filteredBuiltins.filter((t) => !ALL_AGENT_DISALLOWED_TOOLS.has(t.name));
76
+ const result = assembleToolPool({
77
+ builtinTools: filteredBuiltins,
78
+ mcpTools,
79
+ permissionContext,
80
+ });
81
+ poolCacheKey = key;
82
+ poolCacheResult = result;
83
+ return result;
84
+ }
85
+ /** Invalidate tool pool cache (call after MCP server changes) */
86
+ export function invalidateToolPoolCache() {
87
+ poolCacheKey = '';
88
+ poolCacheResult = [];
89
+ }
90
+ /**
91
+ * Build a minimal tool pool for async background agents.
92
+ */
93
+ export function buildAsyncAgentToolPool(permissionContext) {
94
+ const builtins = getAllBuiltinTools().filter((t) => ASYNC_AGENT_ALLOWED_TOOLS.has(t.name));
95
+ const mcpTools = getAllMCPWrappedTools();
96
+ return assembleToolPool({
97
+ builtinTools: builtins,
98
+ mcpTools,
99
+ permissionContext,
100
+ });
101
+ }
102
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}