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,196 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "AgentCommandsService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return AgentCommandsService;
9
+ }
10
+ });
11
+ const _common = require("@nestjs/common");
12
+ const _theme = require("../../utils/theme");
13
+ const _agentregistryservice = require("../../../agents/services/agent-registry.service");
14
+ const _skillregistryservice = require("../../../skills/services/skill-registry.service");
15
+ function _ts_decorate(decorators, target, key, desc) {
16
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
17
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
18
+ 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;
19
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
20
+ }
21
+ function _ts_metadata(k, v) {
22
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
23
+ }
24
+ let AgentCommandsService = class AgentCommandsService {
25
+ async cmdAgents(args, smartInput) {
26
+ const sub = args[0];
27
+ const w = (s)=>process.stdout.write(s);
28
+ if (!sub || sub === 'list') {
29
+ const agents = this.agentRegistry.resolveAllAgents();
30
+ w('\r\n');
31
+ w((0, _theme.colorize)(_theme.Icons.robot + ' ', 'accent') + (0, _theme.colorize)(`Agents (${agents.length})`, 'bold') + '\r\n');
32
+ w((0, _theme.colorize)(_theme.Box.horizontal.repeat(20), 'subtle') + '\r\n');
33
+ if (agents.length === 0) {
34
+ w(` ${(0, _theme.colorize)('No agents loaded', 'muted')}\r\n`);
35
+ w(` ${(0, _theme.colorize)('Create one with /agents create', 'muted')}\r\n`);
36
+ } else {
37
+ const maxName = Math.max(...agents.map((a)=>a.name.length), 4);
38
+ for (const a of agents){
39
+ const toolNames = a.tools.map((t)=>t.name).slice(0, 3);
40
+ const toolsInfo = toolNames.length ? (0, _theme.colorize)(` [${toolNames.join(', ')}${a.tools.length > 3 ? '...' : ''}]`, 'muted') : '';
41
+ w(` ${(0, _theme.colorize)(a.name.padEnd(maxName), 'cyan')} ${(0, _theme.colorize)(a.description.slice(0, 40), 'muted')}${toolsInfo}\r\n`);
42
+ }
43
+ }
44
+ w(`\r\n ${(0, _theme.colorize)('/agents <name>', 'dim')} - details ${(0, _theme.colorize)('/agents create', 'dim')} - new agent\r\n\r\n`);
45
+ return;
46
+ }
47
+ if (sub === 'create') {
48
+ await this.createAgentWizard(smartInput);
49
+ return;
50
+ }
51
+ const agent = this.agentRegistry.resolveAgent(sub);
52
+ if (agent) {
53
+ const toolNames = agent.tools.map((t)=>t.name);
54
+ w('\r\n');
55
+ w((0, _theme.colorize)(_theme.Icons.robot + ' ', 'accent') + (0, _theme.colorize)(`Agent: ${agent.name}`, 'bold') + '\r\n');
56
+ w((0, _theme.colorize)(_theme.Box.horizontal.repeat(25), 'subtle') + '\r\n');
57
+ w(` ${(0, _theme.colorize)('Description:', 'muted')} ${agent.description}\r\n`);
58
+ w(` ${(0, _theme.colorize)('Model:', 'muted')} ${(0, _theme.colorize)(agent.model, 'cyan')}\r\n`);
59
+ w(` ${(0, _theme.colorize)('Tools:', 'muted')} ${toolNames.length > 0 ? toolNames.join(', ') : (0, _theme.colorize)('none', 'muted')}\r\n`);
60
+ w(` ${(0, _theme.colorize)('MCP:', 'muted')} ${agent.mcp.length > 0 ? agent.mcp.join(', ') : (0, _theme.colorize)('none', 'muted')}\r\n\r\n`);
61
+ } else {
62
+ w(`${_theme.Colors.red} Agent "${sub}" not found${_theme.Colors.reset}\r\n`);
63
+ }
64
+ }
65
+ async cmdSkills(args, smartInput) {
66
+ const sub = args[0];
67
+ const w = (s)=>process.stdout.write(s);
68
+ if (!sub || sub === 'list') {
69
+ const skills = this.skillRegistry.getAllSkills();
70
+ w('\r\n');
71
+ w((0, _theme.colorize)(_theme.Icons.gear + ' ', 'accent') + (0, _theme.colorize)(`Skills (${skills.length})`, 'bold') + '\r\n');
72
+ w((0, _theme.colorize)(_theme.Box.horizontal.repeat(20), 'subtle') + '\r\n');
73
+ if (skills.length === 0) {
74
+ w(` ${(0, _theme.colorize)('No skills loaded', 'muted')}\r\n`);
75
+ w(` ${(0, _theme.colorize)('Create one with /skills create', 'muted')}\r\n`);
76
+ } else {
77
+ const maxName = Math.max(...skills.map((s)=>s.name.length), 4);
78
+ for (const s of skills){
79
+ w(` ${(0, _theme.colorize)(s.name.padEnd(maxName), 'cyan')} ${(0, _theme.colorize)(s.description.slice(0, 40), 'muted')} ${(0, _theme.colorize)('[' + s.tools.slice(0, 3).join(', ') + (s.tools.length > 3 ? '...' : '') + ']', 'muted')}\r\n`);
80
+ }
81
+ }
82
+ w(`\r\n ${(0, _theme.colorize)('/skills create', 'dim')} - create new skill\r\n\r\n`);
83
+ return;
84
+ }
85
+ if (sub === 'create') {
86
+ await this.createSkillWizard(smartInput);
87
+ return;
88
+ }
89
+ w(`${_theme.Colors.red} Unknown: /skills ${sub}${_theme.Colors.reset}\r\n`);
90
+ }
91
+ async createAgentWizard(smartInput) {
92
+ const fs = require('fs');
93
+ const path = require('path');
94
+ const castDir = path.join(process.cwd(), '.cast', 'agents');
95
+ if (!fs.existsSync(castDir)) {
96
+ fs.mkdirSync(castDir, {
97
+ recursive: true
98
+ });
99
+ }
100
+ const w = (s)=>process.stdout.write(s);
101
+ w('\r\n');
102
+ w((0, _theme.colorize)(_theme.Icons.robot + ' ', 'accent') + (0, _theme.colorize)('Create New Agent', 'bold') + '\r\n');
103
+ w((0, _theme.colorize)(_theme.Box.horizontal.repeat(20), 'subtle') + '\r\n\r\n');
104
+ const name = await smartInput.question((0, _theme.colorize)(' Name: ', 'cyan'));
105
+ if (!name.trim()) {
106
+ w((0, _theme.colorize)('\r\n Cancelled\r\n', 'muted'));
107
+ return;
108
+ }
109
+ const description = await smartInput.question((0, _theme.colorize)(' Description: ', 'cyan'));
110
+ const skillsInput = await smartInput.question((0, _theme.colorize)(' Skills (comma-separated): ', 'cyan'));
111
+ const skills = skillsInput.trim() ? skillsInput.split(',').map((s)=>s.trim()).filter(Boolean) : [];
112
+ const content = [
113
+ '---',
114
+ `name: ${name.trim()}`,
115
+ `description: "${description.trim()}"`,
116
+ skills.length > 0 ? `skills: [${skills.map((s)=>`"${s}"`).join(', ')}]` : 'skills: []',
117
+ 'mcp: []',
118
+ '---',
119
+ '',
120
+ '# System Prompt',
121
+ '',
122
+ `You are ${name.trim()}, a specialized AI assistant.`,
123
+ description.trim() ? `Your specialty: ${description.trim()}.` : '',
124
+ '',
125
+ 'Follow the project conventions and be helpful.',
126
+ ''
127
+ ].join('\n');
128
+ const filename = `${name.trim().toLowerCase().replace(/\s+/g, '-')}.md`;
129
+ const filePath = path.join(castDir, filename);
130
+ fs.writeFileSync(filePath, content);
131
+ w(`\r\n${(0, _theme.colorize)('✓', 'success')} Agent created: ${(0, _theme.colorize)(filePath, 'accent')}\r\n`);
132
+ w((0, _theme.colorize)(' Edit the file to customize, then restart\r\n\r\n', 'muted'));
133
+ }
134
+ async createSkillWizard(smartInput) {
135
+ const fs = require('fs');
136
+ const path = require('path');
137
+ const castDir = path.join(process.cwd(), '.cast', 'skills');
138
+ if (!fs.existsSync(castDir)) {
139
+ fs.mkdirSync(castDir, {
140
+ recursive: true
141
+ });
142
+ }
143
+ const w = (s)=>process.stdout.write(s);
144
+ w('\r\n');
145
+ w((0, _theme.colorize)(_theme.Icons.gear + ' ', 'accent') + (0, _theme.colorize)('Create New Skill', 'bold') + '\r\n');
146
+ w((0, _theme.colorize)(_theme.Box.horizontal.repeat(20), 'subtle') + '\r\n\r\n');
147
+ const name = await smartInput.question((0, _theme.colorize)(' Name: ', 'cyan'));
148
+ if (!name.trim()) {
149
+ w((0, _theme.colorize)('\r\n Cancelled\r\n', 'muted'));
150
+ return;
151
+ }
152
+ const description = await smartInput.question((0, _theme.colorize)(' Description: ', 'cyan'));
153
+ w(`\r\n ${(0, _theme.colorize)('Available tools: read_file, write_file, edit_file, glob, grep, ls, shell', 'muted')}\r\n`);
154
+ const toolsInput = await smartInput.question((0, _theme.colorize)(' Tools (comma-separated): ', 'cyan'));
155
+ const tools = toolsInput.trim() ? toolsInput.split(',').map((t)=>t.trim()).filter(Boolean) : [
156
+ 'read_file',
157
+ 'write_file',
158
+ 'edit_file',
159
+ 'glob',
160
+ 'grep'
161
+ ];
162
+ const content = [
163
+ '---',
164
+ `name: ${name.trim()}`,
165
+ `description: "${description.trim()}"`,
166
+ `tools: [${tools.map((t)=>`"${t}"`).join(', ')}]`,
167
+ '---',
168
+ '',
169
+ '# Guidelines',
170
+ '',
171
+ `When using this skill:`,
172
+ '',
173
+ `1. ${description.trim() || 'Be helpful and follow conventions'}`,
174
+ ''
175
+ ].join('\n');
176
+ const filename = `${name.trim().toLowerCase().replace(/\s+/g, '-')}.md`;
177
+ const filePath = path.join(castDir, filename);
178
+ fs.writeFileSync(filePath, content);
179
+ w(`\r\n${(0, _theme.colorize)('✓', 'success')} Skill created: ${(0, _theme.colorize)(filePath, 'accent')}\r\n`);
180
+ w((0, _theme.colorize)(' Edit the file to add guidelines, then restart\r\n\r\n', 'muted'));
181
+ }
182
+ constructor(agentRegistry, skillRegistry){
183
+ this.agentRegistry = agentRegistry;
184
+ this.skillRegistry = skillRegistry;
185
+ }
186
+ };
187
+ AgentCommandsService = _ts_decorate([
188
+ (0, _common.Injectable)(),
189
+ _ts_metadata("design:type", Function),
190
+ _ts_metadata("design:paramtypes", [
191
+ typeof _agentregistryservice.AgentRegistryService === "undefined" ? Object : _agentregistryservice.AgentRegistryService,
192
+ typeof _skillregistryservice.SkillRegistryService === "undefined" ? Object : _skillregistryservice.SkillRegistryService
193
+ ])
194
+ ], AgentCommandsService);
195
+
196
+ //# sourceMappingURL=agent-commands.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/modules/repl/services/commands/agent-commands.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { Colors, colorize, Box, Icons } from '../../utils/theme';\nimport { AgentRegistryService } from '../../../agents/services/agent-registry.service';\nimport { SkillRegistryService } from '../../../skills/services/skill-registry.service';\n\ninterface SmartInput {\n askChoice: (question: string, choices: { key: string; label: string; description: string }[]) => Promise<string>;\n question: (prompt: string) => Promise<string>;\n}\n\n@Injectable()\nexport class AgentCommandsService {\n constructor(\n private readonly agentRegistry: AgentRegistryService,\n private readonly skillRegistry: SkillRegistryService,\n ) {}\n\n async cmdAgents(args: string[], smartInput: SmartInput): Promise<void> {\n const sub = args[0];\n const w = (s: string) => process.stdout.write(s);\n\n if (!sub || sub === 'list') {\n const agents = this.agentRegistry.resolveAllAgents();\n w('\\r\\n');\n w(colorize(Icons.robot + ' ', 'accent') + colorize(`Agents (${agents.length})`, 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(20), 'subtle') + '\\r\\n');\n\n if (agents.length === 0) {\n w(` ${colorize('No agents loaded', 'muted')}\\r\\n`);\n w(` ${colorize('Create one with /agents create', 'muted')}\\r\\n`);\n } else {\n const maxName = Math.max(...agents.map(a => a.name.length), 4);\n for (const a of agents) {\n const toolNames = (a.tools as any[]).map((t: any) => t.name).slice(0, 3);\n const toolsInfo = toolNames.length ? colorize(` [${toolNames.join(', ')}${(a.tools as any[]).length > 3 ? '...' : ''}]`, 'muted') : '';\n w(` ${colorize(a.name.padEnd(maxName), 'cyan')} ${colorize(a.description.slice(0, 40), 'muted')}${toolsInfo}\\r\\n`);\n }\n }\n w(`\\r\\n ${colorize('/agents <name>', 'dim')} - details ${colorize('/agents create', 'dim')} - new agent\\r\\n\\r\\n`);\n return;\n }\n\n if (sub === 'create') {\n await this.createAgentWizard(smartInput);\n return;\n }\n\n const agent = this.agentRegistry.resolveAgent(sub);\n if (agent) {\n const toolNames = (agent.tools as any[]).map((t: any) => t.name);\n w('\\r\\n');\n w(colorize(Icons.robot + ' ', 'accent') + colorize(`Agent: ${agent.name}`, 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(25), 'subtle') + '\\r\\n');\n w(` ${colorize('Description:', 'muted')} ${agent.description}\\r\\n`);\n w(` ${colorize('Model:', 'muted')} ${colorize(agent.model, 'cyan')}\\r\\n`);\n w(` ${colorize('Tools:', 'muted')} ${toolNames.length > 0 ? toolNames.join(', ') : colorize('none', 'muted')}\\r\\n`);\n w(` ${colorize('MCP:', 'muted')} ${agent.mcp.length > 0 ? agent.mcp.join(', ') : colorize('none', 'muted')}\\r\\n\\r\\n`);\n } else {\n w(`${Colors.red} Agent \"${sub}\" not found${Colors.reset}\\r\\n`);\n }\n }\n\n async cmdSkills(args: string[], smartInput: SmartInput): Promise<void> {\n const sub = args[0];\n const w = (s: string) => process.stdout.write(s);\n\n if (!sub || sub === 'list') {\n const skills = this.skillRegistry.getAllSkills();\n w('\\r\\n');\n w(colorize(Icons.gear + ' ', 'accent') + colorize(`Skills (${skills.length})`, 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(20), 'subtle') + '\\r\\n');\n\n if (skills.length === 0) {\n w(` ${colorize('No skills loaded', 'muted')}\\r\\n`);\n w(` ${colorize('Create one with /skills create', 'muted')}\\r\\n`);\n } else {\n const maxName = Math.max(...skills.map(s => s.name.length), 4);\n for (const s of skills) {\n w(` ${colorize(s.name.padEnd(maxName), 'cyan')} ${colorize(s.description.slice(0, 40), 'muted')} ${colorize('[' + s.tools.slice(0, 3).join(', ') + (s.tools.length > 3 ? '...' : '') + ']', 'muted')}\\r\\n`);\n }\n }\n w(`\\r\\n ${colorize('/skills create', 'dim')} - create new skill\\r\\n\\r\\n`);\n return;\n }\n\n if (sub === 'create') {\n await this.createSkillWizard(smartInput);\n return;\n }\n\n w(`${Colors.red} Unknown: /skills ${sub}${Colors.reset}\\r\\n`);\n }\n\n private async createAgentWizard(smartInput: SmartInput): Promise<void> {\n const fs = require('fs');\n const path = require('path');\n const castDir = path.join(process.cwd(), '.cast', 'agents');\n \n if (!fs.existsSync(castDir)) {\n fs.mkdirSync(castDir, { recursive: true });\n }\n\n const w = (s: string) => process.stdout.write(s);\n w('\\r\\n');\n w(colorize(Icons.robot + ' ', 'accent') + colorize('Create New Agent', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(20), 'subtle') + '\\r\\n\\r\\n');\n\n const name = await smartInput.question(colorize(' Name: ', 'cyan'));\n if (!name.trim()) {\n w(colorize('\\r\\n Cancelled\\r\\n', 'muted'));\n return;\n }\n\n const description = await smartInput.question(colorize(' Description: ', 'cyan'));\n const skillsInput = await smartInput.question(colorize(' Skills (comma-separated): ', 'cyan'));\n const skills = skillsInput.trim()\n ? skillsInput.split(',').map((s: string) => s.trim()).filter(Boolean)\n : [];\n\n const content = [\n '---',\n `name: ${name.trim()}`,\n `description: \"${description.trim()}\"`,\n skills.length > 0 ? `skills: [${skills.map((s: string) => `\"${s}\"`).join(', ')}]` : 'skills: []',\n 'mcp: []',\n '---',\n '',\n '# System Prompt',\n '',\n `You are ${name.trim()}, a specialized AI assistant.`,\n description.trim() ? `Your specialty: ${description.trim()}.` : '',\n '',\n 'Follow the project conventions and be helpful.',\n '',\n ].join('\\n');\n\n const filename = `${name.trim().toLowerCase().replace(/\\s+/g, '-')}.md`;\n const filePath = path.join(castDir, filename);\n fs.writeFileSync(filePath, content);\n\n w(`\\r\\n${colorize('✓', 'success')} Agent created: ${colorize(filePath, 'accent')}\\r\\n`);\n w(colorize(' Edit the file to customize, then restart\\r\\n\\r\\n', 'muted'));\n }\n\n private async createSkillWizard(smartInput: SmartInput): Promise<void> {\n const fs = require('fs');\n const path = require('path');\n const castDir = path.join(process.cwd(), '.cast', 'skills');\n \n if (!fs.existsSync(castDir)) {\n fs.mkdirSync(castDir, { recursive: true });\n }\n\n const w = (s: string) => process.stdout.write(s);\n w('\\r\\n');\n w(colorize(Icons.gear + ' ', 'accent') + colorize('Create New Skill', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(20), 'subtle') + '\\r\\n\\r\\n');\n\n const name = await smartInput.question(colorize(' Name: ', 'cyan'));\n if (!name.trim()) {\n w(colorize('\\r\\n Cancelled\\r\\n', 'muted'));\n return;\n }\n\n const description = await smartInput.question(colorize(' Description: ', 'cyan'));\n \n w(`\\r\\n ${colorize('Available tools: read_file, write_file, edit_file, glob, grep, ls, shell', 'muted')}\\r\\n`);\n const toolsInput = await smartInput.question(colorize(' Tools (comma-separated): ', 'cyan'));\n const tools = toolsInput.trim()\n ? toolsInput.split(',').map((t: string) => t.trim()).filter(Boolean)\n : ['read_file', 'write_file', 'edit_file', 'glob', 'grep'];\n\n const content = [\n '---',\n `name: ${name.trim()}`,\n `description: \"${description.trim()}\"`,\n `tools: [${tools.map((t: string) => `\"${t}\"`).join(', ')}]`,\n '---',\n '',\n '# Guidelines',\n '',\n `When using this skill:`,\n '',\n `1. ${description.trim() || 'Be helpful and follow conventions'}`,\n '',\n ].join('\\n');\n\n const filename = `${name.trim().toLowerCase().replace(/\\s+/g, '-')}.md`;\n const filePath = path.join(castDir, filename);\n fs.writeFileSync(filePath, content);\n\n w(`\\r\\n${colorize('✓', 'success')} Skill created: ${colorize(filePath, 'accent')}\\r\\n`);\n w(colorize(' Edit the file to add guidelines, then restart\\r\\n\\r\\n', 'muted'));\n }\n}\n"],"names":["AgentCommandsService","cmdAgents","args","smartInput","sub","w","s","process","stdout","write","agents","agentRegistry","resolveAllAgents","colorize","Icons","robot","length","Box","horizontal","repeat","maxName","Math","max","map","a","name","toolNames","tools","t","slice","toolsInfo","join","padEnd","description","createAgentWizard","agent","resolveAgent","model","mcp","Colors","red","reset","cmdSkills","skills","skillRegistry","getAllSkills","gear","createSkillWizard","fs","require","path","castDir","cwd","existsSync","mkdirSync","recursive","question","trim","skillsInput","split","filter","Boolean","content","filename","toLowerCase","replace","filePath","writeFileSync","toolsInput"],"mappings":"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"}