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.
- package/LICENSE +21 -0
- package/README.md +217 -0
- package/dist/app.module.js +45 -0
- package/dist/app.module.js.map +1 -0
- package/dist/common/common.module.js +49 -0
- package/dist/common/common.module.js.map +1 -0
- package/dist/common/constants/index.js +105 -0
- package/dist/common/constants/index.js.map +1 -0
- package/dist/common/index.js +24 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/services/config.service.js +119 -0
- package/dist/common/services/config.service.js.map +1 -0
- package/dist/common/services/llm.service.js +56 -0
- package/dist/common/services/llm.service.js.map +1 -0
- package/dist/common/services/markdown-parser.service.js +101 -0
- package/dist/common/services/markdown-parser.service.js.map +1 -0
- package/dist/common/services/markdown-renderer.service.js +220 -0
- package/dist/common/services/markdown-renderer.service.js.map +1 -0
- package/dist/common/services/multi-llm.service.js +115 -0
- package/dist/common/services/multi-llm.service.js.map +1 -0
- package/dist/common/types/index.js +20 -0
- package/dist/common/types/index.js.map +1 -0
- package/dist/common/types/markdown.types.js +6 -0
- package/dist/common/types/markdown.types.js.map +1 -0
- package/dist/main.js +84 -0
- package/dist/main.js.map +1 -0
- package/dist/modules/agents/agents.module.js +43 -0
- package/dist/modules/agents/agents.module.js.map +1 -0
- package/dist/modules/agents/definitions/architect.md +35 -0
- package/dist/modules/agents/definitions/backend.md +43 -0
- package/dist/modules/agents/definitions/coder.md +34 -0
- package/dist/modules/agents/definitions/devops.md +42 -0
- package/dist/modules/agents/definitions/frontend.md +46 -0
- package/dist/modules/agents/definitions/reviewer.md +35 -0
- package/dist/modules/agents/definitions/tester.md +41 -0
- package/dist/modules/agents/index.js +23 -0
- package/dist/modules/agents/index.js.map +1 -0
- package/dist/modules/agents/services/agent-loader.service.js +150 -0
- package/dist/modules/agents/services/agent-loader.service.js.map +1 -0
- package/dist/modules/agents/services/agent-registry.service.js +108 -0
- package/dist/modules/agents/services/agent-registry.service.js.map +1 -0
- package/dist/modules/agents/types/agent.types.js +6 -0
- package/dist/modules/agents/types/agent.types.js.map +1 -0
- package/dist/modules/agents/types/index.js +20 -0
- package/dist/modules/agents/types/index.js.map +1 -0
- package/dist/modules/config/config.module.js +38 -0
- package/dist/modules/config/config.module.js.map +1 -0
- package/dist/modules/config/index.js +24 -0
- package/dist/modules/config/index.js.map +1 -0
- package/dist/modules/config/services/config-commands.service.js +405 -0
- package/dist/modules/config/services/config-commands.service.js.map +1 -0
- package/dist/modules/config/services/config-manager.service.js +175 -0
- package/dist/modules/config/services/config-manager.service.js.map +1 -0
- package/dist/modules/config/services/init-config.service.js +238 -0
- package/dist/modules/config/services/init-config.service.js.map +1 -0
- package/dist/modules/config/types/config.types.js +163 -0
- package/dist/modules/config/types/config.types.js.map +1 -0
- package/dist/modules/config/types/index.js +20 -0
- package/dist/modules/config/types/index.js.map +1 -0
- package/dist/modules/core/core.module.js +60 -0
- package/dist/modules/core/core.module.js.map +1 -0
- package/dist/modules/core/index.js +22 -0
- package/dist/modules/core/index.js.map +1 -0
- package/dist/modules/core/services/deep-agent.service.js +575 -0
- package/dist/modules/core/services/deep-agent.service.js.map +1 -0
- package/dist/modules/core/services/plan-mode.service.js +225 -0
- package/dist/modules/core/services/plan-mode.service.js.map +1 -0
- package/dist/modules/git/git.module.js +48 -0
- package/dist/modules/git/git.module.js.map +1 -0
- package/dist/modules/git/index.js +23 -0
- package/dist/modules/git/index.js.map +1 -0
- package/dist/modules/git/services/code-review.service.js +330 -0
- package/dist/modules/git/services/code-review.service.js.map +1 -0
- package/dist/modules/git/services/commit-generator.service.js +403 -0
- package/dist/modules/git/services/commit-generator.service.js.map +1 -0
- package/dist/modules/git/services/index.js +21 -0
- package/dist/modules/git/services/index.js.map +1 -0
- package/dist/modules/git/services/monorepo-detector.service.js +338 -0
- package/dist/modules/git/services/monorepo-detector.service.js.map +1 -0
- package/dist/modules/git/services/pr-generator.service.js +429 -0
- package/dist/modules/git/services/pr-generator.service.js.map +1 -0
- package/dist/modules/git/services/release-notes.service.js +426 -0
- package/dist/modules/git/services/release-notes.service.js.map +1 -0
- package/dist/modules/git/types/git.types.js +6 -0
- package/dist/modules/git/types/git.types.js.map +1 -0
- package/dist/modules/git/types/index.js +20 -0
- package/dist/modules/git/types/index.js.map +1 -0
- package/dist/modules/mcp/catalog/mcp-templates.js +606 -0
- package/dist/modules/mcp/catalog/mcp-templates.js.map +1 -0
- package/dist/modules/mcp/index.js +23 -0
- package/dist/modules/mcp/index.js.map +1 -0
- package/dist/modules/mcp/mcp.module.js +35 -0
- package/dist/modules/mcp/mcp.module.js.map +1 -0
- package/dist/modules/mcp/services/mcp-client.service.js +289 -0
- package/dist/modules/mcp/services/mcp-client.service.js.map +1 -0
- package/dist/modules/mcp/services/mcp-registry.service.js +197 -0
- package/dist/modules/mcp/services/mcp-registry.service.js.map +1 -0
- package/dist/modules/mcp/types/index.js +20 -0
- package/dist/modules/mcp/types/index.js.map +1 -0
- package/dist/modules/mcp/types/mcp.types.js +6 -0
- package/dist/modules/mcp/types/mcp.types.js.map +1 -0
- package/dist/modules/memory/index.js +23 -0
- package/dist/modules/memory/index.js.map +1 -0
- package/dist/modules/memory/memory.module.js +35 -0
- package/dist/modules/memory/memory.module.js.map +1 -0
- package/dist/modules/memory/services/memory-tools.service.js +78 -0
- package/dist/modules/memory/services/memory-tools.service.js.map +1 -0
- package/dist/modules/memory/services/memory.service.js +169 -0
- package/dist/modules/memory/services/memory.service.js.map +1 -0
- package/dist/modules/memory/types/index.js +20 -0
- package/dist/modules/memory/types/index.js.map +1 -0
- package/dist/modules/memory/types/memory.types.js +6 -0
- package/dist/modules/memory/types/memory.types.js.map +1 -0
- package/dist/modules/mentions/index.js +22 -0
- package/dist/modules/mentions/index.js.map +1 -0
- package/dist/modules/mentions/mentions.module.js +32 -0
- package/dist/modules/mentions/mentions.module.js.map +1 -0
- package/dist/modules/mentions/services/mentions.service.js +336 -0
- package/dist/modules/mentions/services/mentions.service.js.map +1 -0
- package/dist/modules/mentions/types/index.js +20 -0
- package/dist/modules/mentions/types/index.js.map +1 -0
- package/dist/modules/mentions/types/mention.types.js +19 -0
- package/dist/modules/mentions/types/mention.types.js.map +1 -0
- package/dist/modules/permissions/index.js +23 -0
- package/dist/modules/permissions/index.js.map +1 -0
- package/dist/modules/permissions/permissions.module.js +35 -0
- package/dist/modules/permissions/permissions.module.js.map +1 -0
- package/dist/modules/permissions/services/permission.service.js +269 -0
- package/dist/modules/permissions/services/permission.service.js.map +1 -0
- package/dist/modules/permissions/services/prompt.service.js +116 -0
- package/dist/modules/permissions/services/prompt.service.js.map +1 -0
- package/dist/modules/permissions/types/permission.types.js +32 -0
- package/dist/modules/permissions/types/permission.types.js.map +1 -0
- package/dist/modules/project/index.js +24 -0
- package/dist/modules/project/index.js.map +1 -0
- package/dist/modules/project/project.module.js +38 -0
- package/dist/modules/project/project.module.js.map +1 -0
- package/dist/modules/project/services/project-analyzer.service.js +1063 -0
- package/dist/modules/project/services/project-analyzer.service.js.map +1 -0
- package/dist/modules/project/services/project-context.service.js +62 -0
- package/dist/modules/project/services/project-context.service.js.map +1 -0
- package/dist/modules/project/services/project-loader.service.js +147 -0
- package/dist/modules/project/services/project-loader.service.js.map +1 -0
- package/dist/modules/project/types/index.js +20 -0
- package/dist/modules/project/types/index.js.map +1 -0
- package/dist/modules/project/types/project.types.js +6 -0
- package/dist/modules/project/types/project.types.js.map +1 -0
- package/dist/modules/repl/index.js +21 -0
- package/dist/modules/repl/index.js.map +1 -0
- package/dist/modules/repl/repl.module.js +66 -0
- package/dist/modules/repl/repl.module.js.map +1 -0
- package/dist/modules/repl/services/commands/agent-commands.service.js +196 -0
- package/dist/modules/repl/services/commands/agent-commands.service.js.map +1 -0
- package/dist/modules/repl/services/commands/git-commands.service.js +500 -0
- package/dist/modules/repl/services/commands/git-commands.service.js.map +1 -0
- package/dist/modules/repl/services/commands/mcp-commands.service.js +579 -0
- package/dist/modules/repl/services/commands/mcp-commands.service.js.map +1 -0
- package/dist/modules/repl/services/commands/project-commands.service.js +226 -0
- package/dist/modules/repl/services/commands/project-commands.service.js.map +1 -0
- package/dist/modules/repl/services/commands/repl-commands.service.js +254 -0
- package/dist/modules/repl/services/commands/repl-commands.service.js.map +1 -0
- package/dist/modules/repl/services/repl.service.js +647 -0
- package/dist/modules/repl/services/repl.service.js.map +1 -0
- package/dist/modules/repl/services/smart-input.js +544 -0
- package/dist/modules/repl/services/smart-input.js.map +1 -0
- package/dist/modules/repl/services/welcome-screen.service.js +117 -0
- package/dist/modules/repl/services/welcome-screen.service.js.map +1 -0
- package/dist/modules/repl/utils/prompts-with-esc.js +187 -0
- package/dist/modules/repl/utils/prompts-with-esc.js.map +1 -0
- package/dist/modules/repl/utils/theme.js +185 -0
- package/dist/modules/repl/utils/theme.js.map +1 -0
- package/dist/modules/skills/definitions/general/file-operations.md +60 -0
- package/dist/modules/skills/definitions/general/git-operations.md +59 -0
- package/dist/modules/skills/definitions/general/planning.md +86 -0
- package/dist/modules/skills/definitions/general/search.md +59 -0
- package/dist/modules/skills/definitions/specialized/api-design.md +85 -0
- package/dist/modules/skills/definitions/specialized/database-operations.md +78 -0
- package/dist/modules/skills/definitions/specialized/frontend-bootstrap.md +71 -0
- package/dist/modules/skills/definitions/specialized/react-patterns.md +77 -0
- package/dist/modules/skills/definitions/specialized/testing-strategies.md +79 -0
- package/dist/modules/skills/index.js +23 -0
- package/dist/modules/skills/index.js.map +1 -0
- package/dist/modules/skills/services/skill-loader.service.js +130 -0
- package/dist/modules/skills/services/skill-loader.service.js.map +1 -0
- package/dist/modules/skills/services/skill-registry.service.js +96 -0
- package/dist/modules/skills/services/skill-registry.service.js.map +1 -0
- package/dist/modules/skills/skills.module.js +38 -0
- package/dist/modules/skills/skills.module.js.map +1 -0
- package/dist/modules/skills/types/index.js +20 -0
- package/dist/modules/skills/types/index.js.map +1 -0
- package/dist/modules/skills/types/skill.types.js +6 -0
- package/dist/modules/skills/types/skill.types.js.map +1 -0
- package/dist/modules/tasks/index.js +24 -0
- package/dist/modules/tasks/index.js.map +1 -0
- package/dist/modules/tasks/services/plan-executor.service.js +199 -0
- package/dist/modules/tasks/services/plan-executor.service.js.map +1 -0
- package/dist/modules/tasks/services/plan-mode.service.js +118 -0
- package/dist/modules/tasks/services/plan-mode.service.js.map +1 -0
- package/dist/modules/tasks/services/plan-persistence.service.js +148 -0
- package/dist/modules/tasks/services/plan-persistence.service.js.map +1 -0
- package/dist/modules/tasks/services/task-management.service.js +255 -0
- package/dist/modules/tasks/services/task-management.service.js.map +1 -0
- package/dist/modules/tasks/services/task-tools.service.js +270 -0
- package/dist/modules/tasks/services/task-tools.service.js.map +1 -0
- package/dist/modules/tasks/tasks.module.js +49 -0
- package/dist/modules/tasks/tasks.module.js.map +1 -0
- package/dist/modules/tasks/types/task.types.js +21 -0
- package/dist/modules/tasks/types/task.types.js.map +1 -0
- package/dist/modules/tools/index.js +24 -0
- package/dist/modules/tools/index.js.map +1 -0
- package/dist/modules/tools/services/filesystem-tools.service.js +450 -0
- package/dist/modules/tools/services/filesystem-tools.service.js.map +1 -0
- package/dist/modules/tools/services/search-tools.service.js +63 -0
- package/dist/modules/tools/services/search-tools.service.js.map +1 -0
- package/dist/modules/tools/services/shell-tools.service.js +194 -0
- package/dist/modules/tools/services/shell-tools.service.js.map +1 -0
- package/dist/modules/tools/services/tools-registry.service.js +83 -0
- package/dist/modules/tools/services/tools-registry.service.js.map +1 -0
- package/dist/modules/tools/tools.module.js +46 -0
- package/dist/modules/tools/tools.module.js.map +1 -0
- 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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"}
|