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.
- package/README.md +316 -0
- package/dist/Tool.d.ts +217 -0
- package/dist/Tool.d.ts.map +1 -0
- package/dist/Tool.js +89 -0
- package/dist/Tool.js.map +1 -0
- package/dist/branding/logo.d.ts +8 -0
- package/dist/branding/logo.d.ts.map +1 -0
- package/dist/branding/logo.js +26 -0
- package/dist/branding/logo.js.map +1 -0
- package/dist/branding/theme.d.ts +27 -0
- package/dist/branding/theme.d.ts.map +1 -0
- package/dist/branding/theme.js +28 -0
- package/dist/branding/theme.js.map +1 -0
- package/dist/commands/registry.d.ts +32 -0
- package/dist/commands/registry.d.ts.map +1 -0
- package/dist/commands/registry.js +759 -0
- package/dist/commands/registry.js.map +1 -0
- package/dist/components/MessageView.d.ts +12 -0
- package/dist/components/MessageView.d.ts.map +1 -0
- package/dist/components/MessageView.js +35 -0
- package/dist/components/MessageView.js.map +1 -0
- package/dist/components/PermissionPrompt.d.ts +11 -0
- package/dist/components/PermissionPrompt.d.ts.map +1 -0
- package/dist/components/PermissionPrompt.js +6 -0
- package/dist/components/PermissionPrompt.js.map +1 -0
- package/dist/components/PluginManager.d.ts +27 -0
- package/dist/components/PluginManager.d.ts.map +1 -0
- package/dist/components/PluginManager.js +391 -0
- package/dist/components/PluginManager.js.map +1 -0
- package/dist/components/ThinkingBlock.d.ts +27 -0
- package/dist/components/ThinkingBlock.d.ts.map +1 -0
- package/dist/components/ThinkingBlock.js +29 -0
- package/dist/components/ThinkingBlock.js.map +1 -0
- package/dist/components/ToolCallBlock.d.ts +14 -0
- package/dist/components/ToolCallBlock.d.ts.map +1 -0
- package/dist/components/ToolCallBlock.js +83 -0
- package/dist/components/ToolCallBlock.js.map +1 -0
- package/dist/components/TrustDialog.d.ts +20 -0
- package/dist/components/TrustDialog.d.ts.map +1 -0
- package/dist/components/TrustDialog.js +80 -0
- package/dist/components/TrustDialog.js.map +1 -0
- package/dist/context.d.ts +25 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +268 -0
- package/dist/context.js.map +1 -0
- package/dist/cray.d.ts +114 -0
- package/dist/cray.d.ts.map +1 -0
- package/dist/cray.js +338 -0
- package/dist/cray.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +122 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/registry.d.ts +106 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +695 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/query.d.ts +31 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +637 -0
- package/dist/query.js.map +1 -0
- package/dist/queryStream.d.ts +36 -0
- package/dist/queryStream.d.ts.map +1 -0
- package/dist/queryStream.js +704 -0
- package/dist/queryStream.js.map +1 -0
- package/dist/screens/ReplScreen.d.ts +22 -0
- package/dist/screens/ReplScreen.d.ts.map +1 -0
- package/dist/screens/ReplScreen.js +763 -0
- package/dist/screens/ReplScreen.js.map +1 -0
- package/dist/services/agentRunner.d.ts +39 -0
- package/dist/services/agentRunner.d.ts.map +1 -0
- package/dist/services/agentRunner.js +115 -0
- package/dist/services/agentRunner.js.map +1 -0
- package/dist/services/compact.d.ts +34 -0
- package/dist/services/compact.d.ts.map +1 -0
- package/dist/services/compact.js +179 -0
- package/dist/services/compact.js.map +1 -0
- package/dist/services/loadPluginCommands.d.ts +55 -0
- package/dist/services/loadPluginCommands.d.ts.map +1 -0
- package/dist/services/loadPluginCommands.js +219 -0
- package/dist/services/loadPluginCommands.js.map +1 -0
- package/dist/services/mcp/index.d.ts +3 -0
- package/dist/services/mcp/index.d.ts.map +1 -0
- package/dist/services/mcp/index.js +3 -0
- package/dist/services/mcp/index.js.map +1 -0
- package/dist/services/mcp/manager.d.ts +24 -0
- package/dist/services/mcp/manager.d.ts.map +1 -0
- package/dist/services/mcp/manager.js +138 -0
- package/dist/services/mcp/manager.js.map +1 -0
- package/dist/services/mcp/types.d.ts +52 -0
- package/dist/services/mcp/types.d.ts.map +1 -0
- package/dist/services/mcp/types.js +5 -0
- package/dist/services/mcp/types.js.map +1 -0
- package/dist/services/memory.d.ts +38 -0
- package/dist/services/memory.d.ts.map +1 -0
- package/dist/services/memory.js +181 -0
- package/dist/services/memory.js.map +1 -0
- package/dist/services/permissionPrompt.d.ts +38 -0
- package/dist/services/permissionPrompt.d.ts.map +1 -0
- package/dist/services/permissionPrompt.js +83 -0
- package/dist/services/permissionPrompt.js.map +1 -0
- package/dist/services/permissions.d.ts +15 -0
- package/dist/services/permissions.d.ts.map +1 -0
- package/dist/services/permissions.js +237 -0
- package/dist/services/permissions.js.map +1 -0
- package/dist/services/sessionStorage.d.ts +51 -0
- package/dist/services/sessionStorage.d.ts.map +1 -0
- package/dist/services/sessionStorage.js +266 -0
- package/dist/services/sessionStorage.js.map +1 -0
- package/dist/setup.d.ts +22 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +160 -0
- package/dist/setup.js.map +1 -0
- package/dist/skills/bundledSkills.d.ts +18 -0
- package/dist/skills/bundledSkills.d.ts.map +1 -0
- package/dist/skills/bundledSkills.js +277 -0
- package/dist/skills/bundledSkills.js.map +1 -0
- package/dist/skills/index.d.ts +4 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +3 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/loadSkillsDir.d.ts +45 -0
- package/dist/skills/loadSkillsDir.d.ts.map +1 -0
- package/dist/skills/loadSkillsDir.js +233 -0
- package/dist/skills/loadSkillsDir.js.map +1 -0
- package/dist/state/AppState.d.ts +70 -0
- package/dist/state/AppState.d.ts.map +1 -0
- package/dist/state/AppState.js +106 -0
- package/dist/state/AppState.js.map +1 -0
- package/dist/tools/AgentTool.d.ts +62 -0
- package/dist/tools/AgentTool.d.ts.map +1 -0
- package/dist/tools/AgentTool.js +133 -0
- package/dist/tools/AgentTool.js.map +1 -0
- package/dist/tools/AskUserQuestionTool.d.ts +60 -0
- package/dist/tools/AskUserQuestionTool.d.ts.map +1 -0
- package/dist/tools/AskUserQuestionTool.js +52 -0
- package/dist/tools/AskUserQuestionTool.js.map +1 -0
- package/dist/tools/BashTool.d.ts +33 -0
- package/dist/tools/BashTool.d.ts.map +1 -0
- package/dist/tools/BashTool.js +211 -0
- package/dist/tools/BashTool.js.map +1 -0
- package/dist/tools/EditTool.d.ts +24 -0
- package/dist/tools/EditTool.d.ts.map +1 -0
- package/dist/tools/EditTool.js +102 -0
- package/dist/tools/EditTool.js.map +1 -0
- package/dist/tools/GlobTool.d.ts +17 -0
- package/dist/tools/GlobTool.d.ts.map +1 -0
- package/dist/tools/GlobTool.js +65 -0
- package/dist/tools/GlobTool.js.map +1 -0
- package/dist/tools/GrepTool.d.ts +30 -0
- package/dist/tools/GrepTool.d.ts.map +1 -0
- package/dist/tools/GrepTool.js +140 -0
- package/dist/tools/GrepTool.js.map +1 -0
- package/dist/tools/MCPTool.d.ts +24 -0
- package/dist/tools/MCPTool.d.ts.map +1 -0
- package/dist/tools/MCPTool.js +67 -0
- package/dist/tools/MCPTool.js.map +1 -0
- package/dist/tools/NotebookEditTool.d.ts +28 -0
- package/dist/tools/NotebookEditTool.d.ts.map +1 -0
- package/dist/tools/NotebookEditTool.js +213 -0
- package/dist/tools/NotebookEditTool.js.map +1 -0
- package/dist/tools/NotebookReadTool.d.ts +19 -0
- package/dist/tools/NotebookReadTool.d.ts.map +1 -0
- package/dist/tools/NotebookReadTool.js +191 -0
- package/dist/tools/NotebookReadTool.js.map +1 -0
- package/dist/tools/PlanTools.d.ts +17 -0
- package/dist/tools/PlanTools.d.ts.map +1 -0
- package/dist/tools/PlanTools.js +65 -0
- package/dist/tools/PlanTools.js.map +1 -0
- package/dist/tools/ReadTool.d.ts +21 -0
- package/dist/tools/ReadTool.d.ts.map +1 -0
- package/dist/tools/ReadTool.js +202 -0
- package/dist/tools/ReadTool.js.map +1 -0
- package/dist/tools/SkillTool.d.ts +32 -0
- package/dist/tools/SkillTool.d.ts.map +1 -0
- package/dist/tools/SkillTool.js +217 -0
- package/dist/tools/SkillTool.js.map +1 -0
- package/dist/tools/TodoWriteTool.d.ts +35 -0
- package/dist/tools/TodoWriteTool.d.ts.map +1 -0
- package/dist/tools/TodoWriteTool.js +58 -0
- package/dist/tools/TodoWriteTool.js.map +1 -0
- package/dist/tools/WebFetchTool.d.ts +17 -0
- package/dist/tools/WebFetchTool.d.ts.map +1 -0
- package/dist/tools/WebFetchTool.js +97 -0
- package/dist/tools/WebFetchTool.js.map +1 -0
- package/dist/tools/WebSearchTool.d.ts +18 -0
- package/dist/tools/WebSearchTool.d.ts.map +1 -0
- package/dist/tools/WebSearchTool.js +76 -0
- package/dist/tools/WebSearchTool.js.map +1 -0
- package/dist/tools/WriteTool.d.ts +17 -0
- package/dist/tools/WriteTool.d.ts.map +1 -0
- package/dist/tools/WriteTool.js +84 -0
- package/dist/tools/WriteTool.js.map +1 -0
- package/dist/tools/index.d.ts +21 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +20 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools.d.ts +34 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +102 -0
- package/dist/tools.js.map +1 -0
- package/dist/types/events.d.ts +85 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +12 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/message.d.ts +71 -0
- package/dist/types/message.d.ts.map +1 -0
- package/dist/types/message.js +5 -0
- package/dist/types/message.js.map +1 -0
- package/dist/types/permission.d.ts +56 -0
- package/dist/types/permission.d.ts.map +1 -0
- package/dist/types/permission.js +46 -0
- package/dist/types/permission.js.map +1 -0
- package/dist/types/processUserInput.d.ts +18 -0
- package/dist/types/processUserInput.d.ts.map +1 -0
- package/dist/types/processUserInput.js +8 -0
- package/dist/types/processUserInput.js.map +1 -0
- package/dist/types/tool.d.ts +32 -0
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js +5 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/utils/compactBoundary.d.ts +11 -0
- package/dist/utils/compactBoundary.d.ts.map +1 -0
- package/dist/utils/compactBoundary.js +26 -0
- package/dist/utils/compactBoundary.js.map +1 -0
- package/dist/utils/configStore.d.ts +41 -0
- package/dist/utils/configStore.d.ts.map +1 -0
- package/dist/utils/configStore.js +111 -0
- package/dist/utils/configStore.js.map +1 -0
- package/dist/utils/forkedAgent.d.ts +40 -0
- package/dist/utils/forkedAgent.d.ts.map +1 -0
- package/dist/utils/forkedAgent.js +231 -0
- package/dist/utils/forkedAgent.js.map +1 -0
- package/dist/utils/messages.d.ts +14 -0
- package/dist/utils/messages.d.ts.map +1 -0
- package/dist/utils/messages.js +29 -0
- package/dist/utils/messages.js.map +1 -0
- package/dist/utils/sandbox.d.ts +22 -0
- package/dist/utils/sandbox.d.ts.map +1 -0
- package/dist/utils/sandbox.js +59 -0
- package/dist/utils/sandbox.js.map +1 -0
- package/dist/utils/sideQuestion.d.ts +29 -0
- package/dist/utils/sideQuestion.d.ts.map +1 -0
- package/dist/utils/sideQuestion.js +81 -0
- package/dist/utils/sideQuestion.js.map +1 -0
- package/install.ps1 +86 -0
- package/install.sh +92 -0
- 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"}
|