cast-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 (221) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +217 -0
  3. package/dist/app.module.js +45 -0
  4. package/dist/app.module.js.map +1 -0
  5. package/dist/common/common.module.js +49 -0
  6. package/dist/common/common.module.js.map +1 -0
  7. package/dist/common/constants/index.js +105 -0
  8. package/dist/common/constants/index.js.map +1 -0
  9. package/dist/common/index.js +24 -0
  10. package/dist/common/index.js.map +1 -0
  11. package/dist/common/services/config.service.js +119 -0
  12. package/dist/common/services/config.service.js.map +1 -0
  13. package/dist/common/services/llm.service.js +56 -0
  14. package/dist/common/services/llm.service.js.map +1 -0
  15. package/dist/common/services/markdown-parser.service.js +101 -0
  16. package/dist/common/services/markdown-parser.service.js.map +1 -0
  17. package/dist/common/services/markdown-renderer.service.js +220 -0
  18. package/dist/common/services/markdown-renderer.service.js.map +1 -0
  19. package/dist/common/services/multi-llm.service.js +115 -0
  20. package/dist/common/services/multi-llm.service.js.map +1 -0
  21. package/dist/common/types/index.js +20 -0
  22. package/dist/common/types/index.js.map +1 -0
  23. package/dist/common/types/markdown.types.js +6 -0
  24. package/dist/common/types/markdown.types.js.map +1 -0
  25. package/dist/main.js +84 -0
  26. package/dist/main.js.map +1 -0
  27. package/dist/modules/agents/agents.module.js +43 -0
  28. package/dist/modules/agents/agents.module.js.map +1 -0
  29. package/dist/modules/agents/definitions/architect.md +35 -0
  30. package/dist/modules/agents/definitions/backend.md +43 -0
  31. package/dist/modules/agents/definitions/coder.md +34 -0
  32. package/dist/modules/agents/definitions/devops.md +42 -0
  33. package/dist/modules/agents/definitions/frontend.md +46 -0
  34. package/dist/modules/agents/definitions/reviewer.md +35 -0
  35. package/dist/modules/agents/definitions/tester.md +41 -0
  36. package/dist/modules/agents/index.js +23 -0
  37. package/dist/modules/agents/index.js.map +1 -0
  38. package/dist/modules/agents/services/agent-loader.service.js +150 -0
  39. package/dist/modules/agents/services/agent-loader.service.js.map +1 -0
  40. package/dist/modules/agents/services/agent-registry.service.js +108 -0
  41. package/dist/modules/agents/services/agent-registry.service.js.map +1 -0
  42. package/dist/modules/agents/types/agent.types.js +6 -0
  43. package/dist/modules/agents/types/agent.types.js.map +1 -0
  44. package/dist/modules/agents/types/index.js +20 -0
  45. package/dist/modules/agents/types/index.js.map +1 -0
  46. package/dist/modules/config/config.module.js +38 -0
  47. package/dist/modules/config/config.module.js.map +1 -0
  48. package/dist/modules/config/index.js +24 -0
  49. package/dist/modules/config/index.js.map +1 -0
  50. package/dist/modules/config/services/config-commands.service.js +405 -0
  51. package/dist/modules/config/services/config-commands.service.js.map +1 -0
  52. package/dist/modules/config/services/config-manager.service.js +175 -0
  53. package/dist/modules/config/services/config-manager.service.js.map +1 -0
  54. package/dist/modules/config/services/init-config.service.js +238 -0
  55. package/dist/modules/config/services/init-config.service.js.map +1 -0
  56. package/dist/modules/config/types/config.types.js +163 -0
  57. package/dist/modules/config/types/config.types.js.map +1 -0
  58. package/dist/modules/config/types/index.js +20 -0
  59. package/dist/modules/config/types/index.js.map +1 -0
  60. package/dist/modules/core/core.module.js +60 -0
  61. package/dist/modules/core/core.module.js.map +1 -0
  62. package/dist/modules/core/index.js +22 -0
  63. package/dist/modules/core/index.js.map +1 -0
  64. package/dist/modules/core/services/deep-agent.service.js +575 -0
  65. package/dist/modules/core/services/deep-agent.service.js.map +1 -0
  66. package/dist/modules/core/services/plan-mode.service.js +225 -0
  67. package/dist/modules/core/services/plan-mode.service.js.map +1 -0
  68. package/dist/modules/git/git.module.js +48 -0
  69. package/dist/modules/git/git.module.js.map +1 -0
  70. package/dist/modules/git/index.js +23 -0
  71. package/dist/modules/git/index.js.map +1 -0
  72. package/dist/modules/git/services/code-review.service.js +330 -0
  73. package/dist/modules/git/services/code-review.service.js.map +1 -0
  74. package/dist/modules/git/services/commit-generator.service.js +403 -0
  75. package/dist/modules/git/services/commit-generator.service.js.map +1 -0
  76. package/dist/modules/git/services/index.js +21 -0
  77. package/dist/modules/git/services/index.js.map +1 -0
  78. package/dist/modules/git/services/monorepo-detector.service.js +338 -0
  79. package/dist/modules/git/services/monorepo-detector.service.js.map +1 -0
  80. package/dist/modules/git/services/pr-generator.service.js +429 -0
  81. package/dist/modules/git/services/pr-generator.service.js.map +1 -0
  82. package/dist/modules/git/services/release-notes.service.js +426 -0
  83. package/dist/modules/git/services/release-notes.service.js.map +1 -0
  84. package/dist/modules/git/types/git.types.js +6 -0
  85. package/dist/modules/git/types/git.types.js.map +1 -0
  86. package/dist/modules/git/types/index.js +20 -0
  87. package/dist/modules/git/types/index.js.map +1 -0
  88. package/dist/modules/mcp/catalog/mcp-templates.js +606 -0
  89. package/dist/modules/mcp/catalog/mcp-templates.js.map +1 -0
  90. package/dist/modules/mcp/index.js +23 -0
  91. package/dist/modules/mcp/index.js.map +1 -0
  92. package/dist/modules/mcp/mcp.module.js +35 -0
  93. package/dist/modules/mcp/mcp.module.js.map +1 -0
  94. package/dist/modules/mcp/services/mcp-client.service.js +289 -0
  95. package/dist/modules/mcp/services/mcp-client.service.js.map +1 -0
  96. package/dist/modules/mcp/services/mcp-registry.service.js +197 -0
  97. package/dist/modules/mcp/services/mcp-registry.service.js.map +1 -0
  98. package/dist/modules/mcp/types/index.js +20 -0
  99. package/dist/modules/mcp/types/index.js.map +1 -0
  100. package/dist/modules/mcp/types/mcp.types.js +6 -0
  101. package/dist/modules/mcp/types/mcp.types.js.map +1 -0
  102. package/dist/modules/memory/index.js +23 -0
  103. package/dist/modules/memory/index.js.map +1 -0
  104. package/dist/modules/memory/memory.module.js +35 -0
  105. package/dist/modules/memory/memory.module.js.map +1 -0
  106. package/dist/modules/memory/services/memory-tools.service.js +78 -0
  107. package/dist/modules/memory/services/memory-tools.service.js.map +1 -0
  108. package/dist/modules/memory/services/memory.service.js +169 -0
  109. package/dist/modules/memory/services/memory.service.js.map +1 -0
  110. package/dist/modules/memory/types/index.js +20 -0
  111. package/dist/modules/memory/types/index.js.map +1 -0
  112. package/dist/modules/memory/types/memory.types.js +6 -0
  113. package/dist/modules/memory/types/memory.types.js.map +1 -0
  114. package/dist/modules/mentions/index.js +22 -0
  115. package/dist/modules/mentions/index.js.map +1 -0
  116. package/dist/modules/mentions/mentions.module.js +32 -0
  117. package/dist/modules/mentions/mentions.module.js.map +1 -0
  118. package/dist/modules/mentions/services/mentions.service.js +336 -0
  119. package/dist/modules/mentions/services/mentions.service.js.map +1 -0
  120. package/dist/modules/mentions/types/index.js +20 -0
  121. package/dist/modules/mentions/types/index.js.map +1 -0
  122. package/dist/modules/mentions/types/mention.types.js +19 -0
  123. package/dist/modules/mentions/types/mention.types.js.map +1 -0
  124. package/dist/modules/permissions/index.js +23 -0
  125. package/dist/modules/permissions/index.js.map +1 -0
  126. package/dist/modules/permissions/permissions.module.js +35 -0
  127. package/dist/modules/permissions/permissions.module.js.map +1 -0
  128. package/dist/modules/permissions/services/permission.service.js +269 -0
  129. package/dist/modules/permissions/services/permission.service.js.map +1 -0
  130. package/dist/modules/permissions/services/prompt.service.js +116 -0
  131. package/dist/modules/permissions/services/prompt.service.js.map +1 -0
  132. package/dist/modules/permissions/types/permission.types.js +32 -0
  133. package/dist/modules/permissions/types/permission.types.js.map +1 -0
  134. package/dist/modules/project/index.js +24 -0
  135. package/dist/modules/project/index.js.map +1 -0
  136. package/dist/modules/project/project.module.js +38 -0
  137. package/dist/modules/project/project.module.js.map +1 -0
  138. package/dist/modules/project/services/project-analyzer.service.js +1063 -0
  139. package/dist/modules/project/services/project-analyzer.service.js.map +1 -0
  140. package/dist/modules/project/services/project-context.service.js +62 -0
  141. package/dist/modules/project/services/project-context.service.js.map +1 -0
  142. package/dist/modules/project/services/project-loader.service.js +147 -0
  143. package/dist/modules/project/services/project-loader.service.js.map +1 -0
  144. package/dist/modules/project/types/index.js +20 -0
  145. package/dist/modules/project/types/index.js.map +1 -0
  146. package/dist/modules/project/types/project.types.js +6 -0
  147. package/dist/modules/project/types/project.types.js.map +1 -0
  148. package/dist/modules/repl/index.js +21 -0
  149. package/dist/modules/repl/index.js.map +1 -0
  150. package/dist/modules/repl/repl.module.js +66 -0
  151. package/dist/modules/repl/repl.module.js.map +1 -0
  152. package/dist/modules/repl/services/commands/agent-commands.service.js +196 -0
  153. package/dist/modules/repl/services/commands/agent-commands.service.js.map +1 -0
  154. package/dist/modules/repl/services/commands/git-commands.service.js +500 -0
  155. package/dist/modules/repl/services/commands/git-commands.service.js.map +1 -0
  156. package/dist/modules/repl/services/commands/mcp-commands.service.js +579 -0
  157. package/dist/modules/repl/services/commands/mcp-commands.service.js.map +1 -0
  158. package/dist/modules/repl/services/commands/project-commands.service.js +226 -0
  159. package/dist/modules/repl/services/commands/project-commands.service.js.map +1 -0
  160. package/dist/modules/repl/services/commands/repl-commands.service.js +254 -0
  161. package/dist/modules/repl/services/commands/repl-commands.service.js.map +1 -0
  162. package/dist/modules/repl/services/repl.service.js +647 -0
  163. package/dist/modules/repl/services/repl.service.js.map +1 -0
  164. package/dist/modules/repl/services/smart-input.js +544 -0
  165. package/dist/modules/repl/services/smart-input.js.map +1 -0
  166. package/dist/modules/repl/services/welcome-screen.service.js +117 -0
  167. package/dist/modules/repl/services/welcome-screen.service.js.map +1 -0
  168. package/dist/modules/repl/utils/prompts-with-esc.js +187 -0
  169. package/dist/modules/repl/utils/prompts-with-esc.js.map +1 -0
  170. package/dist/modules/repl/utils/theme.js +185 -0
  171. package/dist/modules/repl/utils/theme.js.map +1 -0
  172. package/dist/modules/skills/definitions/general/file-operations.md +60 -0
  173. package/dist/modules/skills/definitions/general/git-operations.md +59 -0
  174. package/dist/modules/skills/definitions/general/planning.md +86 -0
  175. package/dist/modules/skills/definitions/general/search.md +59 -0
  176. package/dist/modules/skills/definitions/specialized/api-design.md +85 -0
  177. package/dist/modules/skills/definitions/specialized/database-operations.md +78 -0
  178. package/dist/modules/skills/definitions/specialized/frontend-bootstrap.md +71 -0
  179. package/dist/modules/skills/definitions/specialized/react-patterns.md +77 -0
  180. package/dist/modules/skills/definitions/specialized/testing-strategies.md +79 -0
  181. package/dist/modules/skills/index.js +23 -0
  182. package/dist/modules/skills/index.js.map +1 -0
  183. package/dist/modules/skills/services/skill-loader.service.js +130 -0
  184. package/dist/modules/skills/services/skill-loader.service.js.map +1 -0
  185. package/dist/modules/skills/services/skill-registry.service.js +96 -0
  186. package/dist/modules/skills/services/skill-registry.service.js.map +1 -0
  187. package/dist/modules/skills/skills.module.js +38 -0
  188. package/dist/modules/skills/skills.module.js.map +1 -0
  189. package/dist/modules/skills/types/index.js +20 -0
  190. package/dist/modules/skills/types/index.js.map +1 -0
  191. package/dist/modules/skills/types/skill.types.js +6 -0
  192. package/dist/modules/skills/types/skill.types.js.map +1 -0
  193. package/dist/modules/tasks/index.js +24 -0
  194. package/dist/modules/tasks/index.js.map +1 -0
  195. package/dist/modules/tasks/services/plan-executor.service.js +199 -0
  196. package/dist/modules/tasks/services/plan-executor.service.js.map +1 -0
  197. package/dist/modules/tasks/services/plan-mode.service.js +118 -0
  198. package/dist/modules/tasks/services/plan-mode.service.js.map +1 -0
  199. package/dist/modules/tasks/services/plan-persistence.service.js +148 -0
  200. package/dist/modules/tasks/services/plan-persistence.service.js.map +1 -0
  201. package/dist/modules/tasks/services/task-management.service.js +255 -0
  202. package/dist/modules/tasks/services/task-management.service.js.map +1 -0
  203. package/dist/modules/tasks/services/task-tools.service.js +270 -0
  204. package/dist/modules/tasks/services/task-tools.service.js.map +1 -0
  205. package/dist/modules/tasks/tasks.module.js +49 -0
  206. package/dist/modules/tasks/tasks.module.js.map +1 -0
  207. package/dist/modules/tasks/types/task.types.js +21 -0
  208. package/dist/modules/tasks/types/task.types.js.map +1 -0
  209. package/dist/modules/tools/index.js +24 -0
  210. package/dist/modules/tools/index.js.map +1 -0
  211. package/dist/modules/tools/services/filesystem-tools.service.js +450 -0
  212. package/dist/modules/tools/services/filesystem-tools.service.js.map +1 -0
  213. package/dist/modules/tools/services/search-tools.service.js +63 -0
  214. package/dist/modules/tools/services/search-tools.service.js.map +1 -0
  215. package/dist/modules/tools/services/shell-tools.service.js +194 -0
  216. package/dist/modules/tools/services/shell-tools.service.js.map +1 -0
  217. package/dist/modules/tools/services/tools-registry.service.js +83 -0
  218. package/dist/modules/tools/services/tools-registry.service.js.map +1 -0
  219. package/dist/modules/tools/tools.module.js +46 -0
  220. package/dist/modules/tools/tools.module.js.map +1 -0
  221. package/package.json +74 -0
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ShellToolsService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ShellToolsService;
9
+ }
10
+ });
11
+ const _common = require("@nestjs/common");
12
+ const _tools = require("@langchain/core/tools");
13
+ const _zod = require("zod");
14
+ const _child_process = require("child_process");
15
+ const _util = require("util");
16
+ const _permissionservice = require("../../permissions/services/permission.service");
17
+ const _promises = /*#__PURE__*/ _interop_require_wildcard(require("node:fs/promises"));
18
+ const _path = /*#__PURE__*/ _interop_require_wildcard(require("path"));
19
+ const _os = /*#__PURE__*/ _interop_require_wildcard(require("os"));
20
+ function _getRequireWildcardCache(nodeInterop) {
21
+ if (typeof WeakMap !== "function") return null;
22
+ var cacheBabelInterop = new WeakMap();
23
+ var cacheNodeInterop = new WeakMap();
24
+ return (_getRequireWildcardCache = function(nodeInterop) {
25
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
26
+ })(nodeInterop);
27
+ }
28
+ function _interop_require_wildcard(obj, nodeInterop) {
29
+ if (!nodeInterop && obj && obj.__esModule) {
30
+ return obj;
31
+ }
32
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
33
+ return {
34
+ default: obj
35
+ };
36
+ }
37
+ var cache = _getRequireWildcardCache(nodeInterop);
38
+ if (cache && cache.has(obj)) {
39
+ return cache.get(obj);
40
+ }
41
+ var newObj = {
42
+ __proto__: null
43
+ };
44
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
45
+ for(var key in obj){
46
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
47
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
48
+ if (desc && (desc.get || desc.set)) {
49
+ Object.defineProperty(newObj, key, desc);
50
+ } else {
51
+ newObj[key] = obj[key];
52
+ }
53
+ }
54
+ }
55
+ newObj.default = obj;
56
+ if (cache) {
57
+ cache.set(obj, newObj);
58
+ }
59
+ return newObj;
60
+ }
61
+ function _ts_decorate(decorators, target, key, desc) {
62
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
63
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
64
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
65
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
66
+ }
67
+ function _ts_metadata(k, v) {
68
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
69
+ }
70
+ const execAsync = (0, _util.promisify)(_child_process.exec);
71
+ let ShellToolsService = class ShellToolsService {
72
+ getTools() {
73
+ return [
74
+ this.createShellTool(),
75
+ this.createBackgroundShellTool()
76
+ ];
77
+ }
78
+ createShellTool() {
79
+ return (0, _tools.tool)(async ({ command, cwd, timeout, description })=>{
80
+ const allowed = await this.permissionService.checkPermission(command);
81
+ if (!allowed) {
82
+ return 'Command execution denied by user';
83
+ }
84
+ try {
85
+ const { stdout, stderr } = await execAsync(command, {
86
+ cwd: cwd || process.cwd(),
87
+ timeout: timeout || 120000,
88
+ maxBuffer: 10 * 1024 * 1024
89
+ });
90
+ const output = stdout || stderr;
91
+ if (output.length > 30000) {
92
+ return output.slice(0, 30000) + '\n... (truncated)';
93
+ }
94
+ return output || 'Command completed with no output';
95
+ } catch (error) {
96
+ const execError = error;
97
+ if (execError.stdout || execError.stderr) {
98
+ return `Exit with error:\n${execError.stderr || execError.stdout}`;
99
+ }
100
+ return `Error: ${execError.message}`;
101
+ }
102
+ }, {
103
+ name: 'shell',
104
+ description: 'Execute a shell command with permission checking. Use for git, npm, docker, etc. Dangerous commands will require user approval.',
105
+ schema: _zod.z.object({
106
+ command: _zod.z.string().describe('Command to execute'),
107
+ cwd: _zod.z.string().optional().describe('Working directory'),
108
+ timeout: _zod.z.number().optional().describe('Timeout in ms (default 120000, max 600000)'),
109
+ description: _zod.z.string().optional().describe('Brief description of what this command does')
110
+ })
111
+ });
112
+ }
113
+ createBackgroundShellTool() {
114
+ return (0, _tools.tool)(async ({ command, cwd })=>{
115
+ const allowed = await this.permissionService.checkPermission(command);
116
+ if (!allowed) {
117
+ return 'Command execution denied by user';
118
+ }
119
+ const processId = `bg-${++this.processCounter}`;
120
+ const outputFile = _path.join(_os.tmpdir(), `cast-bg-${processId}.log`);
121
+ return new Promise((resolve)=>{
122
+ const logFd = require('fs').openSync(outputFile, 'w');
123
+ const child = (0, _child_process.spawn)(command, {
124
+ cwd: cwd || process.cwd(),
125
+ shell: true,
126
+ detached: true,
127
+ stdio: [
128
+ 'ignore',
129
+ logFd,
130
+ logFd
131
+ ]
132
+ });
133
+ this.backgroundProcesses.set(processId, {
134
+ process: child,
135
+ command,
136
+ outputFile,
137
+ startedAt: Date.now()
138
+ });
139
+ child.unref();
140
+ require('fs').closeSync(logFd);
141
+ resolve(JSON.stringify({
142
+ success: true,
143
+ processId,
144
+ outputFile,
145
+ message: 'Command started in background. Use task_output to check progress.'
146
+ }));
147
+ });
148
+ }, {
149
+ name: 'shell_background',
150
+ description: 'Execute a command in background. Use for long-running tasks like dev servers, watch mode, builds.',
151
+ schema: _zod.z.object({
152
+ command: _zod.z.string().describe('Command to execute in background'),
153
+ cwd: _zod.z.string().optional().describe('Working directory')
154
+ })
155
+ });
156
+ }
157
+ async getBackgroundOutput(processId) {
158
+ const bgProcess = this.backgroundProcesses.get(processId);
159
+ if (!bgProcess) {
160
+ return 'Process not found';
161
+ }
162
+ try {
163
+ const content = await _promises.readFile(bgProcess.outputFile, 'utf-8');
164
+ return content || 'No output yet';
165
+ } catch (error) {
166
+ return 'Error reading output: ' + error.message;
167
+ }
168
+ }
169
+ killBackgroundProcess(processId) {
170
+ const bgProcess = this.backgroundProcesses.get(processId);
171
+ if (!bgProcess) return false;
172
+ try {
173
+ process.kill(-bgProcess.process.pid);
174
+ this.backgroundProcesses.delete(processId);
175
+ return true;
176
+ } catch {
177
+ return false;
178
+ }
179
+ }
180
+ constructor(permissionService){
181
+ this.permissionService = permissionService;
182
+ this.backgroundProcesses = new Map();
183
+ this.processCounter = 0;
184
+ }
185
+ };
186
+ ShellToolsService = _ts_decorate([
187
+ (0, _common.Injectable)(),
188
+ _ts_metadata("design:type", Function),
189
+ _ts_metadata("design:paramtypes", [
190
+ typeof _permissionservice.PermissionService === "undefined" ? Object : _permissionservice.PermissionService
191
+ ])
192
+ ], ShellToolsService);
193
+
194
+ //# sourceMappingURL=shell-tools.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/tools/services/shell-tools.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport { exec, spawn } from 'child_process';\nimport { promisify } from 'util';\nimport { PermissionService } from '../../permissions/services/permission.service';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport * as os from 'os';\n\nconst execAsync = promisify(exec);\n\ninterface ExecError extends Error {\n stdout?: string;\n stderr?: string;\n}\n\n@Injectable()\nexport class ShellToolsService {\n private backgroundProcesses: Map<string, any> = new Map();\n private processCounter = 0;\n\n constructor(private permissionService: PermissionService) {}\n\n getTools() {\n return [this.createShellTool(), this.createBackgroundShellTool()];\n }\n\n private createShellTool() {\n return tool(\n async ({ command, cwd, timeout, description }) => {\n const allowed = await this.permissionService.checkPermission(command);\n\n if (!allowed) {\n return 'Command execution denied by user';\n }\n\n try {\n const { stdout, stderr } = await execAsync(command, {\n cwd: cwd || process.cwd(),\n timeout: timeout || 120000, // Default 2min, max 10min\n maxBuffer: 10 * 1024 * 1024,\n });\n\n const output = stdout || stderr;\n\n if (output.length > 30000) {\n return output.slice(0, 30000) + '\\n... (truncated)';\n }\n\n return output || 'Command completed with no output';\n } catch (error) {\n const execError = error as ExecError;\n\n if (execError.stdout || execError.stderr) {\n return `Exit with error:\\n${execError.stderr || execError.stdout}`;\n }\n\n return `Error: ${execError.message}`;\n }\n },\n {\n name: 'shell',\n description:\n 'Execute a shell command with permission checking. Use for git, npm, docker, etc. Dangerous commands will require user approval.',\n schema: z.object({\n command: z.string().describe('Command to execute'),\n cwd: z.string().optional().describe('Working directory'),\n timeout: z\n .number()\n .optional()\n .describe('Timeout in ms (default 120000, max 600000)'),\n description: z\n .string()\n .optional()\n .describe('Brief description of what this command does'),\n }),\n },\n );\n }\n\n private createBackgroundShellTool() {\n return tool(\n async ({ command, cwd }) => {\n const allowed = await this.permissionService.checkPermission(command);\n\n if (!allowed) {\n return 'Command execution denied by user';\n }\n\n const processId = `bg-${++this.processCounter}`;\n const outputFile = path.join(os.tmpdir(), `cast-bg-${processId}.log`);\n\n return new Promise((resolve) => {\n const logFd = require('fs').openSync(outputFile, 'w');\n\n const child = spawn(command, {\n cwd: cwd || process.cwd(),\n shell: true,\n detached: true,\n stdio: ['ignore', logFd, logFd],\n });\n\n this.backgroundProcesses.set(processId, {\n process: child,\n command,\n outputFile,\n startedAt: Date.now(),\n });\n\n child.unref();\n require('fs').closeSync(logFd);\n\n resolve(\n JSON.stringify({\n success: true,\n processId,\n outputFile,\n message: 'Command started in background. Use task_output to check progress.',\n }),\n );\n });\n },\n {\n name: 'shell_background',\n description:\n 'Execute a command in background. Use for long-running tasks like dev servers, watch mode, builds.',\n schema: z.object({\n command: z.string().describe('Command to execute in background'),\n cwd: z.string().optional().describe('Working directory'),\n }),\n },\n );\n }\n\n async getBackgroundOutput(processId: string): Promise<string> {\n const bgProcess = this.backgroundProcesses.get(processId);\n if (!bgProcess) {\n return 'Process not found';\n }\n\n try {\n const content = await fs.readFile(bgProcess.outputFile, 'utf-8');\n return content || 'No output yet';\n } catch (error) {\n return 'Error reading output: ' + (error as Error).message;\n }\n }\n\n killBackgroundProcess(processId: string): boolean {\n const bgProcess = this.backgroundProcesses.get(processId);\n if (!bgProcess) return false;\n\n try {\n process.kill(-bgProcess.process.pid);\n this.backgroundProcesses.delete(processId);\n return true;\n } catch {\n return false;\n }\n }\n}\n"],"names":["ShellToolsService","execAsync","promisify","exec","getTools","createShellTool","createBackgroundShellTool","tool","command","cwd","timeout","description","allowed","permissionService","checkPermission","stdout","stderr","process","maxBuffer","output","length","slice","error","execError","message","name","schema","z","object","string","describe","optional","number","processId","processCounter","outputFile","path","join","os","tmpdir","Promise","resolve","logFd","require","openSync","child","spawn","shell","detached","stdio","backgroundProcesses","set","startedAt","Date","now","unref","closeSync","JSON","stringify","success","getBackgroundOutput","bgProcess","get","content","fs","readFile","killBackgroundProcess","kill","pid","delete","Map"],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ToolsRegistryService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ToolsRegistryService;
9
+ }
10
+ });
11
+ const _common = require("@nestjs/common");
12
+ const _filesystemtoolsservice = require("./filesystem-tools.service");
13
+ const _shelltoolsservice = require("./shell-tools.service");
14
+ const _searchtoolsservice = require("./search-tools.service");
15
+ const _tasktoolsservice = require("../../tasks/services/task-tools.service");
16
+ const _memorytoolsservice = require("../../memory/services/memory-tools.service");
17
+ function _ts_decorate(decorators, target, key, desc) {
18
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
19
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
20
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
21
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
22
+ }
23
+ function _ts_metadata(k, v) {
24
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
25
+ }
26
+ function _ts_param(paramIndex, decorator) {
27
+ return function(target, key) {
28
+ decorator(target, key, paramIndex);
29
+ };
30
+ }
31
+ let ToolsRegistryService = class ToolsRegistryService {
32
+ registerBuiltInTools() {
33
+ const allTools = [
34
+ ...this.filesystemTools.getTools(),
35
+ ...this.shellTools.getTools(),
36
+ ...this.searchTools.getTools(),
37
+ ...this.taskTools.getTools(),
38
+ ...this.memoryTools.getTools()
39
+ ];
40
+ for (const t of allTools){
41
+ this.tools.set(t.name, t);
42
+ }
43
+ }
44
+ getTool(name) {
45
+ return this.tools.get(name);
46
+ }
47
+ getTools(names) {
48
+ return names.map((name)=>this.tools.get(name)).filter((t)=>t !== undefined);
49
+ }
50
+ getAllTools() {
51
+ return Array.from(this.tools.values());
52
+ }
53
+ getToolNames() {
54
+ return Array.from(this.tools.keys());
55
+ }
56
+ registerTool(t) {
57
+ this.tools.set(t.name, t);
58
+ }
59
+ constructor(filesystemTools, shellTools, searchTools, taskTools, memoryTools){
60
+ this.filesystemTools = filesystemTools;
61
+ this.shellTools = shellTools;
62
+ this.searchTools = searchTools;
63
+ this.taskTools = taskTools;
64
+ this.memoryTools = memoryTools;
65
+ this.tools = new Map();
66
+ this.registerBuiltInTools();
67
+ }
68
+ };
69
+ ToolsRegistryService = _ts_decorate([
70
+ (0, _common.Injectable)(),
71
+ _ts_param(3, (0, _common.Inject)((0, _common.forwardRef)(()=>_tasktoolsservice.TaskToolsService))),
72
+ _ts_param(4, (0, _common.Inject)((0, _common.forwardRef)(()=>_memorytoolsservice.MemoryToolsService))),
73
+ _ts_metadata("design:type", Function),
74
+ _ts_metadata("design:paramtypes", [
75
+ typeof _filesystemtoolsservice.FilesystemToolsService === "undefined" ? Object : _filesystemtoolsservice.FilesystemToolsService,
76
+ typeof _shelltoolsservice.ShellToolsService === "undefined" ? Object : _shelltoolsservice.ShellToolsService,
77
+ typeof _searchtoolsservice.SearchToolsService === "undefined" ? Object : _searchtoolsservice.SearchToolsService,
78
+ typeof _tasktoolsservice.TaskToolsService === "undefined" ? Object : _tasktoolsservice.TaskToolsService,
79
+ typeof _memorytoolsservice.MemoryToolsService === "undefined" ? Object : _memorytoolsservice.MemoryToolsService
80
+ ])
81
+ ], ToolsRegistryService);
82
+
83
+ //# sourceMappingURL=tools-registry.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/tools/services/tools-registry.service.ts"],"sourcesContent":["import { Injectable, Inject, forwardRef } from '@nestjs/common';\nimport { StructuredTool } from '@langchain/core/tools';\nimport { FilesystemToolsService } from './filesystem-tools.service';\nimport { ShellToolsService } from './shell-tools.service';\nimport { SearchToolsService } from './search-tools.service';\nimport { TaskToolsService } from '../../tasks/services/task-tools.service';\nimport { MemoryToolsService } from '../../memory/services/memory-tools.service';\n\n@Injectable()\nexport class ToolsRegistryService {\n private tools: Map<string, StructuredTool> = new Map();\n\n constructor(\n private readonly filesystemTools: FilesystemToolsService,\n private readonly shellTools: ShellToolsService,\n private readonly searchTools: SearchToolsService,\n @Inject(forwardRef(() => TaskToolsService))\n private readonly taskTools: TaskToolsService,\n @Inject(forwardRef(() => MemoryToolsService))\n private readonly memoryTools: MemoryToolsService,\n ) {\n this.registerBuiltInTools();\n }\n\n private registerBuiltInTools() {\n const allTools = [\n ...this.filesystemTools.getTools(),\n ...this.shellTools.getTools(),\n ...this.searchTools.getTools(),\n ...this.taskTools.getTools(),\n ...this.memoryTools.getTools(),\n ];\n\n for (const t of allTools) {\n this.tools.set(t.name, t);\n }\n }\n\n getTool(name: string): StructuredTool | undefined {\n return this.tools.get(name);\n }\n\n getTools(names: string[]): StructuredTool[] {\n return names\n .map((name) => this.tools.get(name))\n .filter((t): t is StructuredTool => t !== undefined);\n }\n\n getAllTools(): StructuredTool[] {\n return Array.from(this.tools.values());\n }\n\n getToolNames(): string[] {\n return Array.from(this.tools.keys());\n }\n\n registerTool(t: StructuredTool) {\n this.tools.set(t.name, t);\n }\n}\n"],"names":["ToolsRegistryService","registerBuiltInTools","allTools","filesystemTools","getTools","shellTools","searchTools","taskTools","memoryTools","t","tools","set","name","getTool","get","names","map","filter","undefined","getAllTools","Array","from","values","getToolNames","keys","registerTool","Map","TaskToolsService","MemoryToolsService"],"mappings":";;;;+BASaA;;;eAAAA;;;wBATkC;wCAER;mCACL;oCACC;kCACF;oCACE;;;;;;;;;;;;;;;AAG5B,IAAA,AAAMA,uBAAN,MAAMA;IAeHC,uBAAuB;QAC7B,MAAMC,WAAW;eACZ,IAAI,CAACC,eAAe,CAACC,QAAQ;eAC7B,IAAI,CAACC,UAAU,CAACD,QAAQ;eACxB,IAAI,CAACE,WAAW,CAACF,QAAQ;eACzB,IAAI,CAACG,SAAS,CAACH,QAAQ;eACvB,IAAI,CAACI,WAAW,CAACJ,QAAQ;SAC7B;QAED,KAAK,MAAMK,KAAKP,SAAU;YACxB,IAAI,CAACQ,KAAK,CAACC,GAAG,CAACF,EAAEG,IAAI,EAAEH;QACzB;IACF;IAEAI,QAAQD,IAAY,EAA8B;QAChD,OAAO,IAAI,CAACF,KAAK,CAACI,GAAG,CAACF;IACxB;IAEAR,SAASW,KAAe,EAAoB;QAC1C,OAAOA,MACJC,GAAG,CAAC,CAACJ,OAAS,IAAI,CAACF,KAAK,CAACI,GAAG,CAACF,OAC7BK,MAAM,CAAC,CAACR,IAA2BA,MAAMS;IAC9C;IAEAC,cAAgC;QAC9B,OAAOC,MAAMC,IAAI,CAAC,IAAI,CAACX,KAAK,CAACY,MAAM;IACrC;IAEAC,eAAyB;QACvB,OAAOH,MAAMC,IAAI,CAAC,IAAI,CAACX,KAAK,CAACc,IAAI;IACnC;IAEAC,aAAahB,CAAiB,EAAE;QAC9B,IAAI,CAACC,KAAK,CAACC,GAAG,CAACF,EAAEG,IAAI,EAAEH;IACzB;IA9CA,YACE,AAAiBN,eAAuC,EACxD,AAAiBE,UAA6B,EAC9C,AAAiBC,WAA+B,EAChD,AACiBC,SAA2B,EAC5C,AACiBC,WAA+B,CAChD;aAPiBL,kBAAAA;aACAE,aAAAA;aACAC,cAAAA;aAEAC,YAAAA;aAEAC,cAAAA;aATXE,QAAqC,IAAIgB;QAW/C,IAAI,CAACzB,oBAAoB;IAC3B;AAqCF;;;iEA3C6B0B,kCAAgB;iEAEhBC,sCAAkB"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ToolsModule", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ToolsModule;
9
+ }
10
+ });
11
+ const _common = require("@nestjs/common");
12
+ const _filesystemtoolsservice = require("./services/filesystem-tools.service");
13
+ const _shelltoolsservice = require("./services/shell-tools.service");
14
+ const _searchtoolsservice = require("./services/search-tools.service");
15
+ const _toolsregistryservice = require("./services/tools-registry.service");
16
+ const _permissionsmodule = require("../permissions/permissions.module");
17
+ const _tasksmodule = require("../tasks/tasks.module");
18
+ const _memorymodule = require("../memory/memory.module");
19
+ function _ts_decorate(decorators, target, key, desc) {
20
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
21
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
22
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
23
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
24
+ }
25
+ let ToolsModule = class ToolsModule {
26
+ };
27
+ ToolsModule = _ts_decorate([
28
+ (0, _common.Module)({
29
+ imports: [
30
+ _permissionsmodule.PermissionsModule,
31
+ (0, _common.forwardRef)(()=>_tasksmodule.TasksModule),
32
+ (0, _common.forwardRef)(()=>_memorymodule.MemoryModule)
33
+ ],
34
+ providers: [
35
+ _filesystemtoolsservice.FilesystemToolsService,
36
+ _shelltoolsservice.ShellToolsService,
37
+ _searchtoolsservice.SearchToolsService,
38
+ _toolsregistryservice.ToolsRegistryService
39
+ ],
40
+ exports: [
41
+ _toolsregistryservice.ToolsRegistryService
42
+ ]
43
+ })
44
+ ], ToolsModule);
45
+
46
+ //# sourceMappingURL=tools.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/modules/tools/tools.module.ts"],"sourcesContent":["import { Module, forwardRef } from '@nestjs/common';\nimport { FilesystemToolsService } from './services/filesystem-tools.service';\nimport { ShellToolsService } from './services/shell-tools.service';\nimport { SearchToolsService } from './services/search-tools.service';\nimport { ToolsRegistryService } from './services/tools-registry.service';\nimport { PermissionsModule } from '../permissions/permissions.module';\nimport { TasksModule } from '../tasks/tasks.module';\nimport { MemoryModule } from '../memory/memory.module';\n\n@Module({\n imports: [PermissionsModule, forwardRef(() => TasksModule), forwardRef(() => MemoryModule)],\n providers: [\n FilesystemToolsService,\n ShellToolsService,\n SearchToolsService,\n ToolsRegistryService,\n ],\n exports: [ToolsRegistryService],\n})\nexport class ToolsModule {}\n"],"names":["ToolsModule","imports","PermissionsModule","forwardRef","TasksModule","MemoryModule","providers","FilesystemToolsService","ShellToolsService","SearchToolsService","ToolsRegistryService","exports"],"mappings":";;;;+BAmBaA;;;eAAAA;;;wBAnBsB;wCACI;mCACL;oCACC;sCACE;mCACH;6BACN;8BACC;;;;;;;AAYtB,IAAA,AAAMA,cAAN,MAAMA;AAAa;;;QATxBC,SAAS;YAACC,oCAAiB;YAAEC,IAAAA,kBAAU,EAAC,IAAMC,wBAAW;YAAGD,IAAAA,kBAAU,EAAC,IAAME,0BAAY;SAAE;QAC3FC,WAAW;YACTC,8CAAsB;YACtBC,oCAAiB;YACjBC,sCAAkB;YAClBC,0CAAoB;SACrB;QACDC,SAAS;YAACD,0CAAoB;SAAC"}
package/package.json ADDED
@@ -0,0 +1,74 @@
1
+ {
2
+ "name": "cast-code",
3
+ "version": "1.0.0",
4
+ "description": "Multi-agent CLI system powered by DeepAgents",
5
+ "main": "dist/main.js",
6
+ "bin": {
7
+ "cast": "./dist/main.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "templates"
12
+ ],
13
+ "scripts": {
14
+ "build": "nest build && chmod +x dist/main.js",
15
+ "start": "node dist/main.js",
16
+ "start:dev": "nest start --watch",
17
+ "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
18
+ "lint:check": "eslint \"{src,apps,libs,test}/**/*.ts\"",
19
+ "format": "prettier --write .",
20
+ "format:check": "prettier --check .",
21
+ "prepublishOnly": "npm run build"
22
+ },
23
+ "keywords": [
24
+ "ai",
25
+ "agents",
26
+ "cli",
27
+ "langchain",
28
+ "deepagents",
29
+ "multi-agent"
30
+ ],
31
+ "author": "pedrocastanha",
32
+ "license": "MIT",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://github.com/pedrocastanha/cast-code"
36
+ },
37
+ "dependencies": {
38
+ "@inquirer/prompts": "^8.2.0",
39
+ "@langchain/anthropic": "^1.3.12",
40
+ "@langchain/core": "^1.1.24",
41
+ "@langchain/google-genai": "^2.1.18",
42
+ "@langchain/langgraph": "latest",
43
+ "@langchain/ollama": "^1.2.2",
44
+ "@langchain/openai": "latest",
45
+ "@nestjs/common": "^10.0.0",
46
+ "@nestjs/core": "^10.0.0",
47
+ "@nestjs/platform-express": "^10.0.0",
48
+ "@types/js-yaml": "^4.0.9",
49
+ "chalk": "^4.1.2",
50
+ "deepagents": "latest",
51
+ "dotenv": "^17.2.3",
52
+ "glob": "^11.0.0",
53
+ "gray-matter": "^4.0.3",
54
+ "js-yaml": "^4.1.1",
55
+ "langchain": "latest",
56
+ "reflect-metadata": "^0.2.0",
57
+ "rxjs": "^7.8.0",
58
+ "zod": "^3.23.0"
59
+ },
60
+ "devDependencies": {
61
+ "@nestjs/cli": "^10.0.0",
62
+ "@nestjs/schematics": "^10.0.0",
63
+ "@swc/cli": "^0.5.2",
64
+ "@swc/core": "^1.15.11",
65
+ "@types/node": "^20.0.0",
66
+ "esbuild": "^0.27.2",
67
+ "ts-node": "^10.9.0",
68
+ "tsconfig-paths": "^4.2.0",
69
+ "typescript": "^5.3.0"
70
+ },
71
+ "engines": {
72
+ "node": ">=20.0.0"
73
+ }
74
+ }