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,65 @@
1
+ /**
2
+ * PlanTools — Enter/Exit plan mode tools for Cray Code.
3
+ * Plan mode allows the agent to design an approach before implementation.
4
+ */
5
+ import { z } from 'zod';
6
+ import { buildTool } from '../Tool.js';
7
+ export const ENTER_PLAN_TOOL_NAME = 'enter_plan_mode';
8
+ const enterInputSchema = z.object({});
9
+ export const EnterPlanModeTool = buildTool({
10
+ name: ENTER_PLAN_TOOL_NAME,
11
+ aliases: ['plan'],
12
+ searchHint: 'plan mode architecture design',
13
+ inputSchema: enterInputSchema,
14
+ async description() {
15
+ return 'Enter plan mode to design implementation approach';
16
+ },
17
+ userFacingName() {
18
+ return 'EnterPlanMode';
19
+ },
20
+ isReadOnly() {
21
+ return false; // Changes agent mode
22
+ },
23
+ isConcurrencySafe() {
24
+ return false;
25
+ },
26
+ async call(_input, context) {
27
+ context.logDebug('Entering plan mode...');
28
+ return {
29
+ data: 'plan_mode_active',
30
+ content: 'Plan mode activated. Design the implementation approach. Use ExitPlanMode when ready.',
31
+ title: 'Plan Mode: Active',
32
+ };
33
+ },
34
+ });
35
+ export const EXIT_PLAN_TOOL_NAME = 'exit_plan_mode';
36
+ const exitInputSchema = z.object({
37
+ plan: z.string().describe('The implementation plan to present for approval'),
38
+ });
39
+ export const ExitPlanModeTool = buildTool({
40
+ name: EXIT_PLAN_TOOL_NAME,
41
+ aliases: ['exit_plan'],
42
+ searchHint: 'plan mode exit exit plan',
43
+ inputSchema: exitInputSchema,
44
+ async description() {
45
+ return 'Exit plan mode and present the plan for approval';
46
+ },
47
+ userFacingName() {
48
+ return 'ExitPlanMode';
49
+ },
50
+ isReadOnly() {
51
+ return false;
52
+ },
53
+ isConcurrencySafe() {
54
+ return false;
55
+ },
56
+ async call(input, context) {
57
+ context.logDebug('Exiting plan mode...');
58
+ return {
59
+ data: input.plan,
60
+ content: `Plan ready for review:\n\n${input.plan}`,
61
+ title: 'Plan: Ready for Approval',
62
+ };
63
+ },
64
+ });
65
+ //# sourceMappingURL=PlanTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanTools.js","sourceRoot":"","sources":["../../src/tools/PlanTools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAsD,MAAM,YAAY,CAAC;AAE3F,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAEtD,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC;IACzC,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,CAAC,MAAM,CAAC;IACjB,UAAU,EAAE,+BAA+B;IAC3C,WAAW,EAAE,gBAAgB;IAE7B,KAAK,CAAC,WAAW;QACf,OAAO,mDAAmD,CAAC;IAC7D,CAAC;IAED,cAAc;QACZ,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC,CAAC,qBAAqB;IACrC,CAAC;IAED,iBAAiB;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAU,EAAE,OAAuB;QAC5C,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;QAC1C,OAAO;YACL,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,uFAAuF;YAChG,KAAK,EAAE,mBAAmB;SAC3B,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAEpD,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;CAC7E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC;IACxC,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,CAAC,WAAW,CAAC;IACtB,UAAU,EAAE,0BAA0B;IACtC,WAAW,EAAE,eAAe;IAE5B,KAAK,CAAC,WAAW;QACf,OAAO,kDAAkD,CAAC;IAC5D,CAAC;IAED,cAAc;QACZ,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC;IACf,CAAC;IAED,iBAAiB;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAuB,EAAE,OAAuB;QACzD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QACzC,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,6BAA6B,KAAK,CAAC,IAAI,EAAE;YAClD,KAAK,EAAE,0BAA0B;SAClC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * ReadTool — File reading tool for Cray Code.
3
+ * Supports text files, PDFs, images, and notebooks.
4
+ */
5
+ import { z } from 'zod';
6
+ import { type ToolDef } from '../Tool.js';
7
+ export declare const READ_TOOL_NAME = "read";
8
+ export declare const ReadTool: ToolDef<z.ZodObject<{
9
+ file_path: z.ZodString;
10
+ offset: z.ZodOptional<z.ZodNumber>;
11
+ limit: z.ZodOptional<z.ZodNumber>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ file_path: string;
14
+ offset?: number | undefined;
15
+ limit?: number | undefined;
16
+ }, {
17
+ file_path: string;
18
+ offset?: number | undefined;
19
+ limit?: number | undefined;
20
+ }>, string>;
21
+ //# sourceMappingURL=ReadTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadTool.d.ts","sourceRoot":"","sources":["../../src/tools/ReadTool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAa,KAAK,OAAO,EAAwC,MAAM,YAAY,CAAC;AAG3F,eAAO,MAAM,cAAc,SAAS,CAAC;AAmBrC,eAAO,MAAM,QAAQ;;;;;;;;;;;;WAqMnB,CAAC"}
@@ -0,0 +1,202 @@
1
+ /**
2
+ * ReadTool — File reading tool for Cray Code.
3
+ * Supports text files, PDFs, images, and notebooks.
4
+ */
5
+ import { z } from 'zod';
6
+ import { readFile } from 'fs/promises';
7
+ import { statSync, existsSync } from 'fs';
8
+ import * as path from 'path';
9
+ import { buildTool } from '../Tool.js';
10
+ export const READ_TOOL_NAME = 'read';
11
+ const inputSchema = z.object({
12
+ file_path: z.string().describe('The absolute path to the file to read'),
13
+ offset: z.number().optional().describe('Line number to start reading from'),
14
+ limit: z.number().optional().describe('Number of lines to read'),
15
+ });
16
+ const MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB
17
+ const MAX_LINES = 2000;
18
+ const BINARY_EXTENSIONS = new Set([
19
+ '.png', '.jpg', '.jpeg', '.gif', '.bmp', '.ico', '.webp',
20
+ '.pdf', '.zip', '.tar', '.gz', '.exe', '.dll', '.so', '.dylib',
21
+ '.mp3', '.mp4', '.avi', '.mov', '.woff', '.woff2', '.ttf', '.eot',
22
+ '.db', '.sqlite', '.sqlite3',
23
+ ]);
24
+ export const ReadTool = buildTool({
25
+ name: READ_TOOL_NAME,
26
+ aliases: ['cat', 'view'],
27
+ searchHint: 'file reading PDF image text',
28
+ inputSchema,
29
+ async description(input) {
30
+ const basename = path.basename(input.file_path);
31
+ return `Reads file: ${basename}`;
32
+ },
33
+ userFacingName() {
34
+ return 'Read';
35
+ },
36
+ isReadOnly() {
37
+ return true;
38
+ },
39
+ isConcurrencySafe() {
40
+ return true; // Reads are safe to parallelize
41
+ },
42
+ async checkPermissions(_input, _context) {
43
+ return { behavior: 'passthrough' };
44
+ },
45
+ async call(input, context) {
46
+ const filePath = path.resolve(input.file_path);
47
+ try {
48
+ if (!existsSync(filePath)) {
49
+ return {
50
+ data: '',
51
+ content: `File not found: ${filePath}`,
52
+ isError: true,
53
+ title: `Read: ${path.basename(filePath)}`,
54
+ };
55
+ }
56
+ const stats = statSync(filePath);
57
+ if (stats.isDirectory()) {
58
+ return {
59
+ data: '',
60
+ content: `${filePath} is a directory, not a file. Use Bash with ls to list it.`,
61
+ isError: true,
62
+ title: `Read: ${path.basename(filePath)} (directory)`,
63
+ };
64
+ }
65
+ if (stats.size > MAX_FILE_SIZE) {
66
+ return {
67
+ data: '',
68
+ content: `File too large (${(stats.size / 1024 / 1024).toFixed(1)}MB). Max is 5MB. Use Bash with head/tail.`,
69
+ isError: true,
70
+ title: `Read: ${path.basename(filePath)} (too large)`,
71
+ };
72
+ }
73
+ const ext = path.extname(filePath).toLowerCase();
74
+ // Handle binary files (images)
75
+ if (['.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp'].includes(ext)) {
76
+ const buffer = await readFile(filePath);
77
+ const base64 = buffer.toString('base64');
78
+ const mime = ext === '.jpg' ? 'image/jpeg' : `image/${ext.slice(1)}`;
79
+ return {
80
+ data: `[Image: ${path.basename(filePath)}, ${mime}, ${(stats.size / 1024).toFixed(1)}KB]`,
81
+ content: `[Image file at ${filePath}: ${(stats.size / 1024).toFixed(1)}KB, type: ${mime}]`,
82
+ title: `Read Image: ${path.basename(filePath)}`,
83
+ };
84
+ }
85
+ // Handle PDFs (just read as binary and report metadata)
86
+ if (ext === '.pdf') {
87
+ return {
88
+ data: '',
89
+ content: `[PDF file at ${filePath}: ${(stats.size / 1024).toFixed(1)}KB]\nUse a PDF tool to extract text content.`,
90
+ title: `Read PDF: ${path.basename(filePath)}`,
91
+ };
92
+ }
93
+ // Handle Jupyter notebooks (.ipynb) — display cells with outputs
94
+ if (ext === '.ipynb') {
95
+ try {
96
+ const raw = await readFile(filePath, 'utf-8');
97
+ const nb = JSON.parse(raw);
98
+ if (nb.cells && Array.isArray(nb.cells)) {
99
+ const lines = [];
100
+ lines.push(`Notebook: ${path.basename(filePath)}`);
101
+ lines.push(`Cells: ${nb.cells.length} | Format: v${nb.nbformat}.${nb.nbformat_minor}`);
102
+ lines.push('');
103
+ const startIdx = input.offset ?? 0;
104
+ const limit = input.limit ?? 50;
105
+ const endIdx = Math.min(startIdx + limit, nb.cells.length);
106
+ for (let i = startIdx; i < endIdx; i++) {
107
+ const cell = nb.cells[i];
108
+ const cellNum = i + 1;
109
+ const src = Array.isArray(cell.source) ? cell.source.join('') : cell.source;
110
+ const exec = cell.execution_count != null ? ` [${cell.execution_count}]` : '';
111
+ if (cell.cell_type === 'markdown') {
112
+ lines.push(`[${cellNum}] Markdown:${exec}`);
113
+ for (const l of src.split('\n').slice(0, 20))
114
+ lines.push(` ${l}`);
115
+ }
116
+ else if (cell.cell_type === 'code') {
117
+ lines.push(`[${cellNum}] Code:${exec}`);
118
+ for (const l of src.split('\n').slice(0, 30))
119
+ lines.push(` ${l}`);
120
+ if (cell.outputs?.length) {
121
+ lines.push(` → ${cell.outputs.length} output(s)`);
122
+ }
123
+ }
124
+ else {
125
+ lines.push(`[${cellNum}] ${cell.cell_type || 'unknown'}:`);
126
+ for (const l of src.split('\n').slice(0, 10))
127
+ lines.push(` ${l}`);
128
+ }
129
+ lines.push('');
130
+ }
131
+ const truncated = endIdx < nb.cells.length;
132
+ if (truncated) {
133
+ lines.push(`... [${nb.cells.length - endIdx} more cells, use offset=${endIdx} or pages to continue]`);
134
+ }
135
+ const result = lines.join('\n');
136
+ return {
137
+ data: result,
138
+ content: result,
139
+ truncated,
140
+ title: `Read: ${path.basename(filePath)} (cells ${startIdx + 1}-${endIdx} of ${nb.cells.length})`,
141
+ };
142
+ }
143
+ }
144
+ catch {
145
+ return {
146
+ data: '',
147
+ content: `[Notebook file: ${path.basename(filePath)}, could not parse — use NotebookRead tool]`,
148
+ title: `Read: ${path.basename(filePath)}`,
149
+ };
150
+ }
151
+ }
152
+ // Handle binary files
153
+ if (BINARY_EXTENSIONS.has(ext)) {
154
+ return {
155
+ data: '',
156
+ content: `[Binary file: ${path.basename(filePath)}, ${(stats.size / 1024).toFixed(1)}KB, type: ${ext}]`,
157
+ title: `Read Binary: ${path.basename(filePath)}`,
158
+ };
159
+ }
160
+ // Read text file
161
+ const content = await readFile(filePath, 'utf-8');
162
+ const lines = content.split('\n');
163
+ const startLine = (input.offset ?? 0);
164
+ const endLine = input.limit ? startLine + input.limit : Math.min(startLine + MAX_LINES, lines.length);
165
+ const selectedLines = lines.slice(startLine, endLine);
166
+ let result = selectedLines
167
+ .map((line, i) => `${String(startLine + i + 1).padStart(6, ' ')}\t${line}`)
168
+ .join('\n');
169
+ const truncated = endLine < lines.length;
170
+ if (truncated) {
171
+ result += `\n... [${lines.length - endLine} more lines, use offset=${endLine} to continue]`;
172
+ }
173
+ // Auto-truncate large output
174
+ if (result.length > 100_000) {
175
+ result = result.slice(0, 100_000) + '\n... [output truncated at 100KB]';
176
+ }
177
+ return {
178
+ data: result,
179
+ content: result,
180
+ truncated: truncated || result.length >= 100_000,
181
+ title: `Read: ${path.basename(filePath)} (lines ${startLine + 1}-${endLine} of ${lines.length})`,
182
+ };
183
+ }
184
+ catch (err) {
185
+ return {
186
+ data: '',
187
+ content: `Error reading ${filePath}: ${err.message}`,
188
+ isError: true,
189
+ title: `Read Error: ${path.basename(filePath)}`,
190
+ };
191
+ }
192
+ },
193
+ renderToolUseMessage(input) {
194
+ return `Reading ${path.basename(input.file_path)}...`;
195
+ },
196
+ renderToolResultMessage(input, result) {
197
+ if (result.isError)
198
+ return `Read failed: ${result.content?.slice(0, 200)}`;
199
+ return result.content ?? '';
200
+ },
201
+ });
202
+ //# sourceMappingURL=ReadTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadTool.js","sourceRoot":"","sources":["../../src/tools/ReadTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * SkillTool — Invokes skills (bundled or disk-based) for Cray Code.
3
+ *
4
+ * Mirrors Claude Code's SkillTool: skills extend agent capabilities by
5
+ * injecting specialized instructions into the conversation and restricting
6
+ * the available tool set.
7
+ *
8
+ * Two execution contexts:
9
+ * - inline: Skill content is injected as a user message. The model sees the
10
+ * instructions in subsequent turns. Tools are restricted via
11
+ * contextModifier.
12
+ * - fork: A sub-agent is spawned with the skill content. It runs an
13
+ * independent tool loop and returns the final result.
14
+ */
15
+ import { z } from 'zod';
16
+ export declare const SKILL_TOOL_NAME = "skill";
17
+ export declare const SkillTool: import("../Tool.js").ToolDef<z.ZodObject<{
18
+ skill: z.ZodString;
19
+ args: z.ZodOptional<z.ZodString>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ skill: string;
22
+ args?: string | undefined;
23
+ }, {
24
+ skill: string;
25
+ args?: string | undefined;
26
+ }>, {
27
+ success: boolean;
28
+ skillName: string;
29
+ context: string;
30
+ result?: string;
31
+ }>;
32
+ //# sourceMappingURL=SkillTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillTool.d.ts","sourceRoot":"","sources":["../../src/tools/SkillTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,eAAe,UAAU,CAAC;AA8DvC,eAAO,MAAM,SAAS;;;;;;;;;;aAyBa,OAAO;eAAa,MAAM;aAAW,MAAM;aAAW,MAAM;EAyJ7F,CAAC"}
@@ -0,0 +1,217 @@
1
+ /**
2
+ * SkillTool — Invokes skills (bundled or disk-based) for Cray Code.
3
+ *
4
+ * Mirrors Claude Code's SkillTool: skills extend agent capabilities by
5
+ * injecting specialized instructions into the conversation and restricting
6
+ * the available tool set.
7
+ *
8
+ * Two execution contexts:
9
+ * - inline: Skill content is injected as a user message. The model sees the
10
+ * instructions in subsequent turns. Tools are restricted via
11
+ * contextModifier.
12
+ * - fork: A sub-agent is spawned with the skill content. It runs an
13
+ * independent tool loop and returns the final result.
14
+ */
15
+ import { z } from 'zod';
16
+ import { buildTool } from '../Tool.js';
17
+ import { getBundledSkills } from '../skills/bundledSkills.js';
18
+ import { loadAllSkills } from '../skills/loadSkillsDir.js';
19
+ import { runSubAgent } from '../services/agentRunner.js';
20
+ export const SKILL_TOOL_NAME = 'skill';
21
+ const inputSchema = z.object({
22
+ skill: z.string().describe('The name of a skill from the available-skills list. Do not guess names.'),
23
+ args: z.string().optional().describe('Optional arguments for the skill'),
24
+ });
25
+ // ─── Args substitution ────────────────────────────────────────────────
26
+ function substituteArgs(content, args) {
27
+ if (!args)
28
+ return content;
29
+ let result = content;
30
+ result = result.replace(/\$\{ARGUMENTS\}/g, args);
31
+ result = result.replace(/\$\{ARGS\}/g, args);
32
+ result = result.replace(/\$@/g, args);
33
+ // Positional arguments: $1, $2, ...
34
+ const argParts = args.split(/\s+/);
35
+ for (let i = 0; i < argParts.length; i++) {
36
+ result = result.replace(new RegExp(`\\$${i + 1}\\b`, 'g'), argParts[i]);
37
+ }
38
+ return result;
39
+ }
40
+ // ─── Skill lookup ──────────────────────────────────────────────────────
41
+ let diskSkillsCache = null;
42
+ let diskSkillsLoadedAt = 0;
43
+ const CACHE_TTL = 30_000; // 30 second TTL for disk skill cache
44
+ async function getAllAvailableSkills(context) {
45
+ const bundled = getBundledSkills();
46
+ // Cache disk skills for 30s to avoid repeated filesystem reads
47
+ if (!diskSkillsCache || Date.now() - diskSkillsLoadedAt > CACHE_TTL) {
48
+ diskSkillsCache = await loadAllSkills(context.cwd);
49
+ diskSkillsLoadedAt = Date.now();
50
+ }
51
+ const disk = diskSkillsCache;
52
+ // Plugin skills (from .cray/plugins/<name>/skills/ + commands/)
53
+ const { getPluginSkills, getPluginCommands } = await import('../plugins/registry.js');
54
+ const pluginSkills = [...getPluginSkills(), ...getPluginCommands()];
55
+ // Bundled > disk > plugin precedence
56
+ const bundledNames = new Set(bundled.map((s) => s.name));
57
+ const diskNames = new Set(disk.map((s) => s.name));
58
+ return [
59
+ ...bundled,
60
+ ...disk.filter((s) => !bundledNames.has(s.name)),
61
+ ...pluginSkills.filter((s) => !bundledNames.has(s.name) && !diskNames.has(s.name)),
62
+ ];
63
+ }
64
+ // ─── SkillTool Definition ──────────────────────────────────────────────
65
+ export const SkillTool = buildTool({
66
+ name: SKILL_TOOL_NAME,
67
+ aliases: ['use_skill'],
68
+ searchHint: 'skill invoke run',
69
+ inputSchema,
70
+ async description(input) {
71
+ return `Execute skill: ${input.skill}`;
72
+ },
73
+ userFacingName() {
74
+ return 'Skill';
75
+ },
76
+ isReadOnly() {
77
+ return false; // Skills can modify state (fork context)
78
+ },
79
+ isConcurrencySafe() {
80
+ return false; // Only one skill should run at a time
81
+ },
82
+ async call(input, context) {
83
+ const skillName = input.skill.trim().replace(/^\//, '');
84
+ // Find the skill
85
+ const allSkills = await getAllAvailableSkills(context);
86
+ const skill = allSkills.find((s) => s.name === skillName);
87
+ if (!skill) {
88
+ const available = allSkills.map((s) => s.name).join(', ');
89
+ return {
90
+ data: { success: false, skillName, context: 'not_found' },
91
+ content: `Unknown skill: "${skillName}". Available skills: ${available || 'none'}`,
92
+ isError: true,
93
+ title: `Skill: ${skillName} (not found)`,
94
+ };
95
+ }
96
+ const isFork = skill.context === 'fork';
97
+ const skillContent = skill.content ?? '';
98
+ // Substitute args into the skill content
99
+ const finalContent = substituteArgs(skillContent, input.args);
100
+ // ─── Fork execution ────────────────────────────────────────
101
+ if (isFork) {
102
+ try {
103
+ const agentType = `skill-${skillName}`;
104
+ const messages = await runSubAgent({
105
+ description: `Running skill: ${skillName}`,
106
+ prompt: finalContent || `Execute the '${skillName}' skill.`,
107
+ agentType: 'general-purpose',
108
+ model: skill.model,
109
+ context: {
110
+ ...context,
111
+ // Restrict tools for the sub-agent
112
+ permissionContext: {
113
+ ...context.permissionContext,
114
+ // Apply skill's allowedTools as the sub-agent's tool pool
115
+ },
116
+ },
117
+ background: false,
118
+ });
119
+ const textResponse = messages
120
+ .filter((m) => m.role === 'assistant')
121
+ .flatMap((m) => m.content)
122
+ .filter((c) => c.type === 'text')
123
+ .map((c) => c.text)
124
+ .join('\n');
125
+ const truncated = textResponse.length > 100_000;
126
+ const output = truncated
127
+ ? textResponse.slice(0, 100_000) + '\n... [truncated]'
128
+ : textResponse;
129
+ return {
130
+ data: { success: true, skillName, context: 'fork', result: output },
131
+ content: `Skill "${skillName}" completed (forked execution).\n\n${output}`,
132
+ truncated,
133
+ title: `Skill (fork): ${skillName}`,
134
+ };
135
+ }
136
+ catch (err) {
137
+ return {
138
+ data: { success: false, skillName, context: 'fork' },
139
+ content: `Skill "${skillName}" fork failed: ${err.message}`,
140
+ isError: true,
141
+ title: `Skill Error: ${skillName}`,
142
+ };
143
+ }
144
+ }
145
+ // ─── Inline execution ──────────────────────────────────────
146
+ // Inject skill content as newMessages so the model follows the instructions.
147
+ const newMessages = [];
148
+ if (finalContent) {
149
+ newMessages.push({
150
+ role: 'user',
151
+ id: `skill-${skillName}-${Date.now()}`,
152
+ timestamp: Date.now(),
153
+ content: [
154
+ { type: 'text', text: finalContent }
155
+ ],
156
+ });
157
+ }
158
+ return {
159
+ data: { success: true, skillName, context: 'inline' },
160
+ content: `Launching skill: ${skillName}`,
161
+ newMessages,
162
+ // ─── contextModifier: restrict tools if skill specifies allowedTools ──
163
+ contextModifier(ctx) {
164
+ let modified = ctx;
165
+ if (skill.allowedTools && skill.allowedTools.length > 0) {
166
+ const allowedSet = new Set(skill.allowedTools);
167
+ // All known Cray Code built-in tool names
168
+ const allBuiltinToolNames = [
169
+ 'read', 'write', 'edit', 'bash', 'glob', 'grep',
170
+ 'web_fetch', 'web_search', 'skill', 'agent', 'task',
171
+ 'todo_write', 'ask_user_question',
172
+ 'enter_plan_mode', 'exit_plan_mode',
173
+ 'notebook_read', 'notebook_edit',
174
+ ];
175
+ const allowRules = [...modified.permissionContext.alwaysAllowRules];
176
+ const denyRules = [...modified.permissionContext.alwaysDenyRules];
177
+ for (const toolName of allBuiltinToolNames) {
178
+ if (allowedSet.has(toolName)) {
179
+ if (!allowRules.some((r) => r.toolName === toolName)) {
180
+ allowRules.push({ toolName, behavior: 'allow', source: 'session' });
181
+ }
182
+ }
183
+ else {
184
+ if (!denyRules.some((r) => r.toolName === toolName)) {
185
+ denyRules.push({ toolName, behavior: 'deny', source: 'session' });
186
+ }
187
+ }
188
+ }
189
+ modified = {
190
+ ...modified,
191
+ permissionContext: {
192
+ ...modified.permissionContext,
193
+ alwaysAllowRules: allowRules,
194
+ alwaysDenyRules: denyRules,
195
+ },
196
+ };
197
+ }
198
+ // Apply model override if specified
199
+ if (skill.model) {
200
+ modified = {
201
+ ...modified,
202
+ modelConfig: {
203
+ ...modified.modelConfig,
204
+ model: skill.model,
205
+ },
206
+ };
207
+ }
208
+ return modified;
209
+ },
210
+ title: `Skill (inline): ${skillName}`,
211
+ };
212
+ },
213
+ renderToolUseMessage(input) {
214
+ return `Using skill: ${input.skill}`;
215
+ },
216
+ });
217
+ //# sourceMappingURL=SkillTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillTool.js","sourceRoot":"","sources":["../../src/tools/SkillTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
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 { type ToolDef } from '../Tool.js';
7
+ export declare const TODO_WRITE_TOOL_NAME = "todo_write";
8
+ export declare const TodoWriteTool: ToolDef<z.ZodObject<{
9
+ todos: z.ZodArray<z.ZodObject<{
10
+ content: z.ZodString;
11
+ status: z.ZodEnum<["pending", "in_progress", "completed"]>;
12
+ activeForm: z.ZodString;
13
+ }, "strip", z.ZodTypeAny, {
14
+ status: "completed" | "pending" | "in_progress";
15
+ content: string;
16
+ activeForm: string;
17
+ }, {
18
+ status: "completed" | "pending" | "in_progress";
19
+ content: string;
20
+ activeForm: string;
21
+ }>, "many">;
22
+ }, "strip", z.ZodTypeAny, {
23
+ todos: {
24
+ status: "completed" | "pending" | "in_progress";
25
+ content: string;
26
+ activeForm: string;
27
+ }[];
28
+ }, {
29
+ todos: {
30
+ status: "completed" | "pending" | "in_progress";
31
+ content: string;
32
+ activeForm: string;
33
+ }[];
34
+ }>, string>;
35
+ //# sourceMappingURL=TodoWriteTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TodoWriteTool.d.ts","sourceRoot":"","sources":["../../src/tools/TodoWriteTool.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;AAcjD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;WAmDxB,CAAC"}