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,70 @@
1
+ /**
2
+ * AppState — Central state management for Cray Code.
3
+ *
4
+ * Uses a simple Store pattern (similar to Zustand/Redux) with:
5
+ * - Immutable state updates via setState(fn)
6
+ * - Subscription-based reactivity
7
+ * - Sub-agent context isolation
8
+ */
9
+ import type { Message, ConversationState } from '../types/message.js';
10
+ import type { ToolPermissionContext } from '../types/permission.js';
11
+ import type { ToolDef, MCPClientInfo, SkillInfo, AgentDefinitionInfo, ModelConfig } from '../Tool.js';
12
+ export interface AppState {
13
+ sessionId: string;
14
+ startTime: number;
15
+ cwd: string;
16
+ projectRoot?: string;
17
+ modelConfig: ModelConfig;
18
+ modelOverride?: string;
19
+ messages: Message[];
20
+ conversationHistory: ConversationState[];
21
+ permissionContext: ToolPermissionContext;
22
+ toolPool: ToolDef<any, any>[];
23
+ mcpClients: Map<string, MCPClientInfo>;
24
+ skills: SkillInfo[];
25
+ availableSkills: SkillInfo[];
26
+ agentDefinitions: AgentDefinitionInfo[];
27
+ isSubAgent: boolean;
28
+ isPlanMode: boolean;
29
+ isVerbose: boolean;
30
+ statusText: string;
31
+ backgroundTasks: Map<string, BackgroundTaskInfo>;
32
+ settings: CraySettings;
33
+ }
34
+ export interface BackgroundTaskInfo {
35
+ id: string;
36
+ type: 'bash' | 'agent';
37
+ description: string;
38
+ status: 'running' | 'completed' | 'failed';
39
+ startTime: number;
40
+ output?: string;
41
+ error?: string;
42
+ }
43
+ export interface CraySettings {
44
+ model: string;
45
+ permissionMode: 'default' | 'acceptEdits' | 'bypass' | 'plan';
46
+ maxTurns: number;
47
+ verbose: boolean;
48
+ theme: 'dark' | 'light';
49
+ }
50
+ export declare function createDefaultAppState(cwd?: string): AppState;
51
+ type Listener = (state: AppState) => void;
52
+ declare class Store {
53
+ private state;
54
+ private listeners;
55
+ constructor(initialState: AppState);
56
+ getState(): AppState;
57
+ setState(updater: (prev: AppState) => AppState): void;
58
+ subscribe(listener: Listener): () => void;
59
+ private notify;
60
+ }
61
+ /** Initialize the global app state store */
62
+ export declare function initAppState(cwd?: string): Store;
63
+ /** Get the global store (throws if not initialized) */
64
+ export declare function getStore(): Store;
65
+ /** Convenience: get current app state */
66
+ export declare function getAppState(): AppState;
67
+ /** Convenience: update app state */
68
+ export declare function setAppState(updater: (prev: AppState) => AppState): void;
69
+ export {};
70
+ //# sourceMappingURL=AppState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppState.d.ts","sourceRoot":"","sources":["../../src/state/AppState.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMtG,MAAM,WAAW,QAAQ;IAEvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;IAGzC,iBAAiB,EAAE,qBAAqB,CAAC;IAGzC,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IAC9B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAGvC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,eAAe,EAAE,SAAS,EAAE,CAAC;IAG7B,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;IACxC,UAAU,EAAE,OAAO,CAAC;IAGpB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IAGnB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAGjD,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,SAAS,GAAG,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAID,wBAAgB,qBAAqB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAkD5D;AAID,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAE1C,cAAM,KAAK;IACT,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,SAAS,CAAuB;gBAE5B,YAAY,EAAE,QAAQ;IAIlC,QAAQ,IAAI,QAAQ;IAIpB,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,QAAQ,GAAG,IAAI;IAQrD,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI;IAKzC,OAAO,CAAC,MAAM;CASf;AAMD,4CAA4C;AAC5C,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAGhD;AAED,uDAAuD;AACvD,wBAAgB,QAAQ,IAAI,KAAK,CAKhC;AAED,yCAAyC;AACzC,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAED,oCAAoC;AACpC,wBAAgB,WAAW,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,QAAQ,GAAG,IAAI,CAEvE"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * AppState — Central state management for Cray Code.
3
+ *
4
+ * Uses a simple Store pattern (similar to Zustand/Redux) with:
5
+ * - Immutable state updates via setState(fn)
6
+ * - Subscription-based reactivity
7
+ * - Sub-agent context isolation
8
+ */
9
+ import { getDefaultPermissionContext } from '../types/permission.js';
10
+ import { BUILT_IN_AGENTS } from '../tools/AgentTool.js';
11
+ // ─── Default State ───────────────────────────────────────────────────────
12
+ export function createDefaultAppState(cwd) {
13
+ const sessionId = `cray-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
14
+ return {
15
+ sessionId,
16
+ startTime: Date.now(),
17
+ cwd: cwd ?? process.cwd(),
18
+ projectRoot: undefined,
19
+ modelConfig: {
20
+ provider: 'generic',
21
+ model: 'claude-sonnet-4-6',
22
+ maxTokens: 8192,
23
+ thinkingEnabled: true,
24
+ apiKey: '',
25
+ baseUrl: '',
26
+ },
27
+ messages: [],
28
+ conversationHistory: [],
29
+ permissionContext: getDefaultPermissionContext(),
30
+ toolPool: [],
31
+ mcpClients: new Map(),
32
+ skills: [],
33
+ availableSkills: [],
34
+ agentDefinitions: Object.entries(BUILT_IN_AGENTS).map(([name, def]) => ({
35
+ name,
36
+ description: def.description,
37
+ allowedTools: def.allowedTools,
38
+ })),
39
+ isSubAgent: false,
40
+ isPlanMode: false,
41
+ isVerbose: false,
42
+ statusText: 'Ready',
43
+ backgroundTasks: new Map(),
44
+ settings: {
45
+ model: 'claude-sonnet-4-6',
46
+ permissionMode: 'default',
47
+ maxTurns: 25,
48
+ verbose: false,
49
+ theme: 'dark',
50
+ },
51
+ };
52
+ }
53
+ class Store {
54
+ state;
55
+ listeners = new Set();
56
+ constructor(initialState) {
57
+ this.state = Object.freeze(initialState);
58
+ }
59
+ getState() {
60
+ return this.state;
61
+ }
62
+ setState(updater) {
63
+ const newState = updater(this.state);
64
+ if (newState !== this.state) {
65
+ this.state = Object.freeze(newState);
66
+ this.notify();
67
+ }
68
+ }
69
+ subscribe(listener) {
70
+ this.listeners.add(listener);
71
+ return () => this.listeners.delete(listener);
72
+ }
73
+ notify() {
74
+ for (const listener of this.listeners) {
75
+ try {
76
+ listener(this.state);
77
+ }
78
+ catch {
79
+ // Listener errors shouldn't break the store
80
+ }
81
+ }
82
+ }
83
+ }
84
+ // ─── Global Store Instance ──────────────────────────────────────────────
85
+ let globalStore = null;
86
+ /** Initialize the global app state store */
87
+ export function initAppState(cwd) {
88
+ globalStore = new Store(createDefaultAppState(cwd));
89
+ return globalStore;
90
+ }
91
+ /** Get the global store (throws if not initialized) */
92
+ export function getStore() {
93
+ if (!globalStore) {
94
+ globalStore = new Store(createDefaultAppState());
95
+ }
96
+ return globalStore;
97
+ }
98
+ /** Convenience: get current app state */
99
+ export function getAppState() {
100
+ return getStore().getState();
101
+ }
102
+ /** Convenience: update app state */
103
+ export function setAppState(updater) {
104
+ getStore().setState(updater);
105
+ }
106
+ //# sourceMappingURL=AppState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppState.js","sourceRoot":"","sources":["../../src/state/AppState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * AgentTool — Sub-agent spawning and management for Cray Code.
3
+ * This is the most powerful tool: it creates child agents that run their own
4
+ * query loops with restricted tool sets, enabling parallel task execution.
5
+ *
6
+ * Architecture:
7
+ * - Foreground agents run inline, streaming results back to the caller
8
+ * - Background agents run asynchronously with progress notification
9
+ * - Worktree isolation supported for safe parallel filesystem operations
10
+ * - Built-in agent types: general-purpose, explore, plan, code-review
11
+ */
12
+ import { z } from 'zod';
13
+ import { type ToolDef } from '../Tool.js';
14
+ export declare const AGENT_TOOL_NAME = "agent";
15
+ export declare const LEGACY_AGENT_TOOL_NAME = "task";
16
+ /** Built-in agent type definitions */
17
+ export declare const BUILT_IN_AGENTS: {
18
+ 'general-purpose': {
19
+ name: string;
20
+ description: string;
21
+ allowedTools: string[];
22
+ };
23
+ explore: {
24
+ name: string;
25
+ description: string;
26
+ allowedTools: string[];
27
+ };
28
+ 'code-review': {
29
+ name: string;
30
+ description: string;
31
+ allowedTools: string[];
32
+ };
33
+ plan: {
34
+ name: string;
35
+ description: string;
36
+ allowedTools: string[];
37
+ };
38
+ };
39
+ export type BuiltInAgentType = keyof typeof BUILT_IN_AGENTS;
40
+ export declare const AgentTool: ToolDef<z.ZodObject<{
41
+ description: z.ZodString;
42
+ prompt: z.ZodString;
43
+ subagent_type: z.ZodOptional<z.ZodString>;
44
+ model: z.ZodOptional<z.ZodEnum<["sonnet", "opus", "haiku"]>>;
45
+ run_in_background: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
46
+ isolation: z.ZodOptional<z.ZodEnum<["worktree"]>>;
47
+ }, "strip", z.ZodTypeAny, {
48
+ description: string;
49
+ prompt: string;
50
+ run_in_background: boolean;
51
+ model?: "sonnet" | "opus" | "haiku" | undefined;
52
+ subagent_type?: string | undefined;
53
+ isolation?: "worktree" | undefined;
54
+ }, {
55
+ description: string;
56
+ prompt: string;
57
+ model?: "sonnet" | "opus" | "haiku" | undefined;
58
+ subagent_type?: string | undefined;
59
+ run_in_background?: boolean | undefined;
60
+ isolation?: "worktree" | undefined;
61
+ }>, string>;
62
+ //# sourceMappingURL=AgentTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentTool.d.ts","sourceRoot":"","sources":["../../src/tools/AgentTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAa,KAAK,OAAO,EAAwC,MAAM,YAAY,CAAC;AAK3F,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAa7C,sCAAsC;AACtC,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;CAqB3B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,eAAe,CAAC;AAE5D,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;WAgGpB,CAAC"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * AgentTool — Sub-agent spawning and management for Cray Code.
3
+ * This is the most powerful tool: it creates child agents that run their own
4
+ * query loops with restricted tool sets, enabling parallel task execution.
5
+ *
6
+ * Architecture:
7
+ * - Foreground agents run inline, streaming results back to the caller
8
+ * - Background agents run asynchronously with progress notification
9
+ * - Worktree isolation supported for safe parallel filesystem operations
10
+ * - Built-in agent types: general-purpose, explore, plan, code-review
11
+ */
12
+ import { z } from 'zod';
13
+ import { buildTool } from '../Tool.js';
14
+ import { runSubAgent } from '../services/agentRunner.js';
15
+ export const AGENT_TOOL_NAME = 'agent';
16
+ export const LEGACY_AGENT_TOOL_NAME = 'task'; // Backwards compat
17
+ const inputSchema = z.object({
18
+ description: z.string().describe('A short (3-5 word) description of the task'),
19
+ prompt: z.string().describe('The task for the agent to perform'),
20
+ subagent_type: z.string().optional().describe('The type of specialized agent to use'),
21
+ model: z.enum(['sonnet', 'opus', 'haiku']).optional().describe('Model override for this agent'),
22
+ run_in_background: z.boolean().optional().default(false).describe('Run agent in the background'),
23
+ isolation: z.enum(['worktree']).optional().describe('Isolation mode for the agent'),
24
+ });
25
+ /** Built-in agent type definitions */
26
+ export const BUILT_IN_AGENTS = {
27
+ 'general-purpose': {
28
+ name: 'general-purpose',
29
+ description: 'General-purpose agent for research, code search, and multi-step tasks.',
30
+ allowedTools: ['read', 'glob', 'grep', 'web_fetch', 'web_search', 'bash'],
31
+ },
32
+ explore: {
33
+ name: 'explore',
34
+ description: 'Fast read-only search agent for locating code. Use for finding files, symbols, or answering "where is X defined."',
35
+ allowedTools: ['read', 'glob', 'grep', 'web_search'],
36
+ },
37
+ 'code-review': {
38
+ name: 'code-review',
39
+ description: 'Reviews code for bugs, logic errors, security vulnerabilities, and code quality issues.',
40
+ allowedTools: ['read', 'glob', 'grep'],
41
+ },
42
+ plan: {
43
+ name: 'plan',
44
+ description: 'Software architect agent for designing implementation plans.',
45
+ allowedTools: ['read', 'glob', 'grep', 'web_fetch', 'web_search'],
46
+ },
47
+ };
48
+ export const AgentTool = buildTool({
49
+ name: AGENT_TOOL_NAME,
50
+ aliases: [LEGACY_AGENT_TOOL_NAME],
51
+ searchHint: 'agent sub-agent parallel task delegate',
52
+ inputSchema,
53
+ async description(input) {
54
+ return `Agent: ${input.description}`;
55
+ },
56
+ userFacingName() {
57
+ return 'Agent';
58
+ },
59
+ isReadOnly() {
60
+ return false;
61
+ },
62
+ isConcurrencySafe() {
63
+ return true; // Sub-agents are isolated
64
+ },
65
+ async checkPermissions(input, context) {
66
+ const mode = context?.permissionContext?.mode ?? context?.mode ?? 'default';
67
+ if (mode === 'bypass')
68
+ return { behavior: 'allow' };
69
+ return {
70
+ behavior: 'ask',
71
+ message: `Spawn sub-agent for: "${input.description}"?`,
72
+ };
73
+ },
74
+ async call(input, context) {
75
+ try {
76
+ const agentDef = input.subagent_type && input.subagent_type in BUILT_IN_AGENTS
77
+ ? BUILT_IN_AGENTS[input.subagent_type]
78
+ : BUILT_IN_AGENTS['general-purpose'];
79
+ if (input.run_in_background) {
80
+ // Background agent: start and return a handle
81
+ const taskId = await runSubAgent({
82
+ description: input.description,
83
+ prompt: input.prompt,
84
+ agentType: agentDef.name,
85
+ model: input.model,
86
+ context,
87
+ background: true,
88
+ });
89
+ return {
90
+ data: `Background agent started: ${taskId}`,
91
+ content: `Agent "${input.description}" running in background.\nTask ID: ${taskId}\nThe agent will notify when complete.`,
92
+ title: `Agent (background): ${input.description}`,
93
+ };
94
+ }
95
+ // Foreground agent: run and stream results
96
+ const messages = await runSubAgent({
97
+ description: input.description,
98
+ prompt: input.prompt,
99
+ agentType: agentDef.name,
100
+ model: input.model,
101
+ context,
102
+ background: false,
103
+ });
104
+ const textResponse = messages
105
+ .filter((m) => m.role === 'assistant')
106
+ .flatMap((m) => m.content)
107
+ .filter((c) => c.type === 'text')
108
+ .map((c) => c.text)
109
+ .join('\n');
110
+ const truncated = textResponse.length > 100_000;
111
+ const output = truncated ? textResponse.slice(0, 100_000) + '\n... [truncated]' : textResponse;
112
+ return {
113
+ data: output,
114
+ content: output,
115
+ truncated,
116
+ title: `Agent: ${input.description}`,
117
+ };
118
+ }
119
+ catch (err) {
120
+ return {
121
+ data: '',
122
+ content: `Agent error: ${err.message}`,
123
+ isError: true,
124
+ title: `Agent Error: ${input.description}`,
125
+ };
126
+ }
127
+ },
128
+ renderToolUseMessage(input) {
129
+ const tag = input.run_in_background ? ' [background]' : '';
130
+ return `Spawning agent: ${input.description}${tag}`;
131
+ },
132
+ });
133
+ //# sourceMappingURL=AgentTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentTool.js","sourceRoot":"","sources":["../../src/tools/AgentTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAsD,MAAM,YAAY,CAAC;AAE3F,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAGzD,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AACvC,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,CAAC,mBAAmB;AAEjE,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IAC9E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAChE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACrF,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC/F,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAChG,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CACpF,CAAC,CAAC;AAIH,sCAAsC;AACtC,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,iBAAiB,EAAE;QACjB,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,wEAAwE;QACrF,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC;KAC1E;IACD,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,mHAAmH;QAChI,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC;KACrD;IACD,aAAa,EAAE;QACb,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,yFAAyF;QACtG,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KACvC;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,8DAA8D;QAC3E,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC;KAClE;CACF,CAAC;AAIF,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC;IACjC,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,CAAC,sBAAsB,CAAC;IACjC,UAAU,EAAE,wCAAwC;IACpD,WAAW;IAEX,KAAK,CAAC,WAAW,CAAC,KAAY;QAC5B,OAAO,UAAU,KAAK,CAAC,WAAW,EAAE,CAAC;IACvC,CAAC;IAED,cAAc;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC;IACf,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,CAAC,0BAA0B;IACzC,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAAY,EAAE,OAAY;QAC/C,MAAM,IAAI,GAAG,OAAO,EAAE,iBAAiB,EAAE,IAAI,IAAI,OAAO,EAAE,IAAI,IAAI,SAAS,CAAC;QAC5E,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAEpD,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,yBAAyB,KAAK,CAAC,WAAW,IAAI;SACxD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAY,EAAE,OAAuB;QAC9C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,IAAI,eAAe;gBAC5E,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,aAAiC,CAAC;gBAC1D,CAAC,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;YAEvC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,8CAA8C;gBAC9C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;oBAC/B,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,SAAS,EAAE,QAAQ,CAAC,IAAI;oBACxB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,OAAO;oBACP,UAAU,EAAE,IAAI;iBACjB,CAAC,CAAC;gBAEH,OAAO;oBACL,IAAI,EAAE,6BAA6B,MAAM,EAAE;oBAC3C,OAAO,EAAE,UAAU,KAAK,CAAC,WAAW,sCAAsC,MAAM,wCAAwC;oBACxH,KAAK,EAAE,uBAAuB,KAAK,CAAC,WAAW,EAAE;iBAClD,CAAC;YACJ,CAAC;YAED,2CAA2C;YAC3C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC;gBACjC,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,SAAS,EAAE,QAAQ,CAAC,IAAI;gBACxB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,OAAO;gBACP,UAAU,EAAE,KAAK;aAClB,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,QAAQ;iBAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;iBACrC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;iBACzB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;iBAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAClB,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,GAAG,OAAO,CAAC;YAChD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,YAAY,CAAC;YAE/F,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,MAAM;gBACf,SAAS;gBACT,KAAK,EAAE,UAAU,KAAK,CAAC,WAAW,EAAE;aACrC,CAAC;QACJ,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO;gBACL,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,gBAAgB,GAAG,CAAC,OAAO,EAAE;gBACtC,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,gBAAgB,KAAK,CAAC,WAAW,EAAE;aAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,oBAAoB,CAAC,KAAY;QAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO,mBAAmB,KAAK,CAAC,WAAW,GAAG,GAAG,EAAE,CAAC;IACtD,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * AskUserQuestionTool — Interactive user questioning for Cray Code.
3
+ */
4
+ import { z } from 'zod';
5
+ import { type ToolDef } from '../Tool.js';
6
+ export declare const ASK_USER_QUESTION_TOOL_NAME = "ask_user";
7
+ export declare const AskUserQuestionTool: ToolDef<z.ZodObject<{
8
+ questions: z.ZodArray<z.ZodObject<{
9
+ question: z.ZodString;
10
+ header: z.ZodString;
11
+ options: z.ZodArray<z.ZodObject<{
12
+ label: z.ZodString;
13
+ description: z.ZodString;
14
+ }, "strip", z.ZodTypeAny, {
15
+ description: string;
16
+ label: string;
17
+ }, {
18
+ description: string;
19
+ label: string;
20
+ }>, "many">;
21
+ multiSelect: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
22
+ }, "strip", z.ZodTypeAny, {
23
+ options: {
24
+ description: string;
25
+ label: string;
26
+ }[];
27
+ question: string;
28
+ header: string;
29
+ multiSelect: boolean;
30
+ }, {
31
+ options: {
32
+ description: string;
33
+ label: string;
34
+ }[];
35
+ question: string;
36
+ header: string;
37
+ multiSelect?: boolean | undefined;
38
+ }>, "many">;
39
+ }, "strip", z.ZodTypeAny, {
40
+ questions: {
41
+ options: {
42
+ description: string;
43
+ label: string;
44
+ }[];
45
+ question: string;
46
+ header: string;
47
+ multiSelect: boolean;
48
+ }[];
49
+ }, {
50
+ questions: {
51
+ options: {
52
+ description: string;
53
+ label: string;
54
+ }[];
55
+ question: string;
56
+ header: string;
57
+ multiSelect?: boolean | undefined;
58
+ }[];
59
+ }>, string>;
60
+ //# sourceMappingURL=AskUserQuestionTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskUserQuestionTool.d.ts","sourceRoot":"","sources":["../../src/tools/AskUserQuestionTool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAa,KAAK,OAAO,EAAwC,MAAM,YAAY,CAAC;AAE3F,eAAO,MAAM,2BAA2B,aAAa,CAAC;AAoBtD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAsC9B,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * AskUserQuestionTool — Interactive user questioning for Cray Code.
3
+ */
4
+ import { z } from 'zod';
5
+ import { buildTool } from '../Tool.js';
6
+ export const ASK_USER_QUESTION_TOOL_NAME = 'ask_user';
7
+ const optionSchema = z.object({
8
+ label: z.string().describe('Display text for this option'),
9
+ description: z.string().describe('What this option means'),
10
+ });
11
+ const questionSchema = z.object({
12
+ question: z.string().describe('The complete question to ask. Should end with a question mark.'),
13
+ header: z.string().max(12).describe('Short label (max 12 chars). E.g., "Auth method", "Library".'),
14
+ options: z.array(optionSchema).min(2).max(4).describe('Available choices (2-4)'),
15
+ multiSelect: z.boolean().optional().default(false).describe('Allow multiple selections'),
16
+ });
17
+ const inputSchema = z.object({
18
+ questions: z.array(questionSchema).min(1).max(4).describe('Questions to ask (1-4)'),
19
+ });
20
+ export const AskUserQuestionTool = buildTool({
21
+ name: ASK_USER_QUESTION_TOOL_NAME,
22
+ aliases: ['ask', 'question'],
23
+ searchHint: 'ask user question interactive clarify',
24
+ inputSchema,
25
+ async description(input) {
26
+ return `Asks: ${input.questions[0]?.question.slice(0, 80)}`;
27
+ },
28
+ userFacingName() {
29
+ return 'AskUser';
30
+ },
31
+ isReadOnly() {
32
+ return true;
33
+ },
34
+ isConcurrencySafe() {
35
+ return false; // Block on user input
36
+ },
37
+ async call(input, context) {
38
+ const formatted = input.questions.map((q, i) => {
39
+ const options = q.options.map((o) => ` - ${o.label}: ${o.description}`).join('\n');
40
+ return `Q${i + 1}: ${q.question}${q.multiSelect ? ' (multi-select)' : ''}\n${options}`;
41
+ }).join('\n\n');
42
+ return {
43
+ data: formatted,
44
+ content: `Questions presented to user:\n\n${formatted}`,
45
+ title: `Questions (${input.questions.length})`,
46
+ };
47
+ },
48
+ renderToolUseMessage(input) {
49
+ return `Asking: ${input.questions.map((q) => q.question).join(' | ')}`;
50
+ },
51
+ });
52
+ //# sourceMappingURL=AskUserQuestionTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskUserQuestionTool.js","sourceRoot":"","sources":["../../src/tools/AskUserQuestionTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * BashTool — Shell command execution tool for Cray Code.
3
+ * Supports sandboxing, permission checks, and progress reporting.
4
+ */
5
+ import { z } from 'zod';
6
+ import { type ToolDef } from '../Tool.js';
7
+ export declare const BASH_TOOL_NAME = "bash";
8
+ export declare const BashTool: ToolDef<z.ZodObject<{
9
+ command: z.ZodString;
10
+ description: z.ZodString;
11
+ timeout: z.ZodOptional<z.ZodNumber>;
12
+ workdir: z.ZodOptional<z.ZodString>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ command: string;
15
+ description: string;
16
+ workdir?: string | undefined;
17
+ timeout?: number | undefined;
18
+ }, {
19
+ command: string;
20
+ description: string;
21
+ workdir?: string | undefined;
22
+ timeout?: number | undefined;
23
+ }>, string>;
24
+ /**
25
+ * Security functions for shell command analysis
26
+ */
27
+ export declare const bashSecurity: {
28
+ /** Check if a command contains known dangerous patterns */
29
+ isDangerous(command: string): boolean;
30
+ /** Get the base command for categorization */
31
+ getBaseCommand(command: string): string;
32
+ };
33
+ //# sourceMappingURL=BashTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BashTool.d.ts","sourceRoot":"","sources":["../../src/tools/BashTool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAa,KAAK,OAAO,EAAwC,MAAM,YAAY,CAAC;AAK3F,eAAO,MAAM,cAAc,SAAS,CAAC;AAWrC,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;WAgKnB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,YAAY;IACvB,2DAA2D;yBACtC,MAAM,GAAG,OAAO;IAarC,8CAA8C;4BACtB,MAAM,GAAG,MAAM;CAGxC,CAAC"}