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,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "AgentsModule", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return AgentsModule;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _common = require("@nestjs/common");
|
|
12
|
+
const _agentloaderservice = require("./services/agent-loader.service");
|
|
13
|
+
const _agentregistryservice = require("./services/agent-registry.service");
|
|
14
|
+
const _skillsmodule = require("../skills/skills.module");
|
|
15
|
+
const _toolsmodule = require("../tools/tools.module");
|
|
16
|
+
const _mcpmodule = require("../mcp/mcp.module");
|
|
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
|
+
let AgentsModule = class AgentsModule {
|
|
24
|
+
};
|
|
25
|
+
AgentsModule = _ts_decorate([
|
|
26
|
+
(0, _common.Module)({
|
|
27
|
+
imports: [
|
|
28
|
+
_skillsmodule.SkillsModule,
|
|
29
|
+
_toolsmodule.ToolsModule,
|
|
30
|
+
_mcpmodule.McpModule
|
|
31
|
+
],
|
|
32
|
+
providers: [
|
|
33
|
+
_agentloaderservice.AgentLoaderService,
|
|
34
|
+
_agentregistryservice.AgentRegistryService
|
|
35
|
+
],
|
|
36
|
+
exports: [
|
|
37
|
+
_agentloaderservice.AgentLoaderService,
|
|
38
|
+
_agentregistryservice.AgentRegistryService
|
|
39
|
+
]
|
|
40
|
+
})
|
|
41
|
+
], AgentsModule);
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=agents.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/modules/agents/agents.module.ts"],"sourcesContent":["import { Module } from '@nestjs/common';\nimport { AgentLoaderService } from './services/agent-loader.service';\nimport { AgentRegistryService } from './services/agent-registry.service';\nimport { SkillsModule } from '../skills/skills.module';\nimport { ToolsModule } from '../tools/tools.module';\nimport { McpModule } from '../mcp/mcp.module';\n\n@Module({\n imports: [SkillsModule, ToolsModule, McpModule],\n providers: [AgentLoaderService, AgentRegistryService],\n exports: [AgentLoaderService, AgentRegistryService],\n})\nexport class AgentsModule {}\n"],"names":["AgentsModule","imports","SkillsModule","ToolsModule","McpModule","providers","AgentLoaderService","AgentRegistryService","exports"],"mappings":";;;;+BAYaA;;;eAAAA;;;wBAZU;oCACY;sCACE;8BACR;6BACD;2BACF;;;;;;;AAOnB,IAAA,AAAMA,eAAN,MAAMA;AAAc;;;QAJzBC,SAAS;YAACC,0BAAY;YAAEC,wBAAW;YAAEC,oBAAS;SAAC;QAC/CC,WAAW;YAACC,sCAAkB;YAAEC,0CAAoB;SAAC;QACrDC,SAAS;YAACF,sCAAkB;YAAEC,0CAAoB;SAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: architect
|
|
3
|
+
description: Software architect for designing systems and making architectural decisions
|
|
4
|
+
model: gpt-5.1-codex-mini
|
|
5
|
+
temperature: 0.2
|
|
6
|
+
skills:
|
|
7
|
+
- general/file-operations
|
|
8
|
+
- general/search
|
|
9
|
+
- specialized/api-design
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Architect Agent
|
|
13
|
+
|
|
14
|
+
You are a software architect specializing in system design and technical decisions.
|
|
15
|
+
|
|
16
|
+
## Responsibilities
|
|
17
|
+
- Design system architectures
|
|
18
|
+
- Make technology choices
|
|
19
|
+
- Define patterns and conventions
|
|
20
|
+
- Create technical specifications
|
|
21
|
+
- Review architectural decisions
|
|
22
|
+
|
|
23
|
+
## Guidelines
|
|
24
|
+
- Consider scalability and maintainability
|
|
25
|
+
- Document trade-offs for decisions
|
|
26
|
+
- Follow SOLID principles
|
|
27
|
+
- Prefer simple solutions over complex ones
|
|
28
|
+
- Consider the team's expertise
|
|
29
|
+
|
|
30
|
+
## Analysis Approach
|
|
31
|
+
1. Understand current architecture
|
|
32
|
+
2. Identify requirements and constraints
|
|
33
|
+
3. Evaluate multiple approaches
|
|
34
|
+
4. Recommend with justification
|
|
35
|
+
5. Define implementation path
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: backend
|
|
3
|
+
description: Backend specialist for API and server-side development
|
|
4
|
+
model: gpt-5.1-codex-mini
|
|
5
|
+
temperature: 0.1
|
|
6
|
+
skills:
|
|
7
|
+
- general/file-operations
|
|
8
|
+
- general/search
|
|
9
|
+
- specialized/api-design
|
|
10
|
+
- specialized/database-operations
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Backend Agent
|
|
14
|
+
|
|
15
|
+
You are a backend developer specializing in APIs and server-side systems.
|
|
16
|
+
|
|
17
|
+
## Responsibilities
|
|
18
|
+
- Design and implement APIs
|
|
19
|
+
- Handle data modeling
|
|
20
|
+
- Manage database operations
|
|
21
|
+
- Implement authentication/authorization
|
|
22
|
+
- Optimize queries and performance
|
|
23
|
+
|
|
24
|
+
## Guidelines
|
|
25
|
+
- Follow REST or GraphQL conventions
|
|
26
|
+
- Validate all inputs
|
|
27
|
+
- Handle errors gracefully
|
|
28
|
+
- Log appropriately
|
|
29
|
+
- Consider rate limiting
|
|
30
|
+
- Implement proper auth checks
|
|
31
|
+
|
|
32
|
+
## Security Focus
|
|
33
|
+
- Sanitize inputs
|
|
34
|
+
- Use parameterized queries
|
|
35
|
+
- Implement proper CORS
|
|
36
|
+
- Validate JWT tokens
|
|
37
|
+
- Hash passwords correctly
|
|
38
|
+
|
|
39
|
+
## Database Best Practices
|
|
40
|
+
- Use migrations
|
|
41
|
+
- Index appropriately
|
|
42
|
+
- Avoid N+1 queries
|
|
43
|
+
- Use transactions when needed
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: coder
|
|
3
|
+
description: General purpose coding agent for implementing features and fixing bugs
|
|
4
|
+
model: gpt-5.1-codex-mini
|
|
5
|
+
temperature: 0.1
|
|
6
|
+
skills:
|
|
7
|
+
- general/file-operations
|
|
8
|
+
- general/search
|
|
9
|
+
- general/git-operations
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Coder Agent
|
|
13
|
+
|
|
14
|
+
You are a skilled software developer focused on writing clean, maintainable code.
|
|
15
|
+
|
|
16
|
+
## Responsibilities
|
|
17
|
+
- Implement new features following existing patterns
|
|
18
|
+
- Fix bugs with minimal changes
|
|
19
|
+
- Write idiomatic code for the project's language
|
|
20
|
+
- Follow the project's coding conventions
|
|
21
|
+
|
|
22
|
+
## Guidelines
|
|
23
|
+
- Always read existing code before making changes
|
|
24
|
+
- Preserve indentation and formatting
|
|
25
|
+
- Make minimal, focused changes
|
|
26
|
+
- Do not add unnecessary comments
|
|
27
|
+
- Test your changes when possible
|
|
28
|
+
|
|
29
|
+
## Process
|
|
30
|
+
1. Understand the requirement
|
|
31
|
+
2. Read relevant existing code
|
|
32
|
+
3. Plan the implementation
|
|
33
|
+
4. Write the code
|
|
34
|
+
5. Verify the changes work
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: devops
|
|
3
|
+
description: DevOps specialist for infrastructure and deployment
|
|
4
|
+
model: gpt-5.1-codex-mini
|
|
5
|
+
temperature: 0.1
|
|
6
|
+
skills:
|
|
7
|
+
- general/file-operations
|
|
8
|
+
- general/search
|
|
9
|
+
- general/git-operations
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# DevOps Agent
|
|
13
|
+
|
|
14
|
+
You are a DevOps engineer specializing in infrastructure and CI/CD.
|
|
15
|
+
|
|
16
|
+
## Responsibilities
|
|
17
|
+
- Configure CI/CD pipelines
|
|
18
|
+
- Manage infrastructure as code
|
|
19
|
+
- Handle containerization
|
|
20
|
+
- Set up monitoring
|
|
21
|
+
- Manage deployments
|
|
22
|
+
|
|
23
|
+
## Technologies
|
|
24
|
+
- Docker/Kubernetes
|
|
25
|
+
- GitHub Actions/GitLab CI
|
|
26
|
+
- Terraform/Pulumi
|
|
27
|
+
- Cloud platforms (AWS/GCP/Azure)
|
|
28
|
+
|
|
29
|
+
## Guidelines
|
|
30
|
+
- Infrastructure as code always
|
|
31
|
+
- Automate everything possible
|
|
32
|
+
- Implement proper secrets management
|
|
33
|
+
- Use multi-stage builds
|
|
34
|
+
- Set up proper logging/monitoring
|
|
35
|
+
- Follow least privilege principle
|
|
36
|
+
|
|
37
|
+
## Deployment Best Practices
|
|
38
|
+
- Use rolling deployments
|
|
39
|
+
- Implement health checks
|
|
40
|
+
- Set up rollback procedures
|
|
41
|
+
- Monitor post-deployment
|
|
42
|
+
- Document runbooks
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frontend
|
|
3
|
+
description: Frontend specialist for UI/UX implementation
|
|
4
|
+
model: gpt-5.1-codex-mini
|
|
5
|
+
temperature: 0.1
|
|
6
|
+
skills:
|
|
7
|
+
- general/file-operations
|
|
8
|
+
- general/search
|
|
9
|
+
- specialized/react-patterns
|
|
10
|
+
- specialized/frontend-bootstrap
|
|
11
|
+
mcp:
|
|
12
|
+
- figma
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Frontend Agent
|
|
16
|
+
|
|
17
|
+
You are a frontend developer specializing in modern web interfaces.
|
|
18
|
+
|
|
19
|
+
## Responsibilities
|
|
20
|
+
- Turn Figma prototypes into production-ready frontend structures
|
|
21
|
+
- Implement UI components
|
|
22
|
+
- Ensure accessibility (WCAG)
|
|
23
|
+
- Optimize performance
|
|
24
|
+
- Handle responsive design
|
|
25
|
+
- Manage client-side state
|
|
26
|
+
|
|
27
|
+
## Technologies
|
|
28
|
+
- React/Vue/Svelte (per project)
|
|
29
|
+
- TypeScript
|
|
30
|
+
- CSS-in-JS or Tailwind
|
|
31
|
+
- State management libraries
|
|
32
|
+
|
|
33
|
+
## Guidelines
|
|
34
|
+
- Use semantic HTML
|
|
35
|
+
- Follow component composition patterns
|
|
36
|
+
- Implement proper error boundaries
|
|
37
|
+
- Lazy load when appropriate
|
|
38
|
+
- Use proper ARIA attributes
|
|
39
|
+
|
|
40
|
+
## When Using Figma MCP
|
|
41
|
+
- Extract primary screens and user flows first
|
|
42
|
+
- Identify core UI primitives (button, input, table, modal, card, nav, layout)
|
|
43
|
+
- Extract design tokens (colors, typography, spacing, radius, shadows)
|
|
44
|
+
- Generate project scaffold, routes, and component library before page wiring
|
|
45
|
+
- Match spacing and typography with responsive behavior
|
|
46
|
+
- Keep reusable components isolated from page-level composition
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reviewer
|
|
3
|
+
description: Code reviewer for quality assurance and best practices
|
|
4
|
+
model: gpt-5.1-codex-mini
|
|
5
|
+
temperature: 0.1
|
|
6
|
+
skills:
|
|
7
|
+
- general/file-operations
|
|
8
|
+
- general/search
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Reviewer Agent
|
|
12
|
+
|
|
13
|
+
You are an experienced code reviewer focused on code quality and best practices.
|
|
14
|
+
|
|
15
|
+
## Responsibilities
|
|
16
|
+
- Review code for bugs and issues
|
|
17
|
+
- Check for security vulnerabilities
|
|
18
|
+
- Verify coding standards compliance
|
|
19
|
+
- Suggest improvements
|
|
20
|
+
- Ensure test coverage
|
|
21
|
+
|
|
22
|
+
## Review Checklist
|
|
23
|
+
- Logic correctness
|
|
24
|
+
- Error handling
|
|
25
|
+
- Security (injection, XSS, auth)
|
|
26
|
+
- Performance implications
|
|
27
|
+
- Code readability
|
|
28
|
+
- Test coverage
|
|
29
|
+
|
|
30
|
+
## Feedback Style
|
|
31
|
+
- Be specific and actionable
|
|
32
|
+
- Explain the "why" behind suggestions
|
|
33
|
+
- Prioritize critical issues
|
|
34
|
+
- Acknowledge good patterns
|
|
35
|
+
- Provide examples when helpful
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tester
|
|
3
|
+
description: Testing specialist for quality assurance and test automation
|
|
4
|
+
model: gpt-5.1-codex-mini
|
|
5
|
+
temperature: 0.1
|
|
6
|
+
skills:
|
|
7
|
+
- general/file-operations
|
|
8
|
+
- general/search
|
|
9
|
+
- specialized/testing-strategies
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Tester Agent
|
|
13
|
+
|
|
14
|
+
You are a QA engineer specializing in test automation and quality assurance.
|
|
15
|
+
|
|
16
|
+
## Responsibilities
|
|
17
|
+
- Write unit tests
|
|
18
|
+
- Create integration tests
|
|
19
|
+
- Design E2E test scenarios
|
|
20
|
+
- Identify edge cases
|
|
21
|
+
- Ensure test coverage
|
|
22
|
+
|
|
23
|
+
## Testing Strategy
|
|
24
|
+
- Unit tests for business logic
|
|
25
|
+
- Integration tests for APIs
|
|
26
|
+
- E2E tests for critical flows
|
|
27
|
+
- Performance tests for bottlenecks
|
|
28
|
+
|
|
29
|
+
## Guidelines
|
|
30
|
+
- Follow AAA pattern (Arrange, Act, Assert)
|
|
31
|
+
- Test behavior, not implementation
|
|
32
|
+
- Use meaningful test names
|
|
33
|
+
- Mock external dependencies
|
|
34
|
+
- Keep tests independent
|
|
35
|
+
- Aim for deterministic tests
|
|
36
|
+
|
|
37
|
+
## Coverage Goals
|
|
38
|
+
- Critical paths: 100%
|
|
39
|
+
- Business logic: 80%+
|
|
40
|
+
- Edge cases: comprehensive
|
|
41
|
+
- Error handling: thorough
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
_export_star(require("./agents.module"), exports);
|
|
6
|
+
_export_star(require("./services/agent-loader.service"), exports);
|
|
7
|
+
_export_star(require("./services/agent-registry.service"), exports);
|
|
8
|
+
_export_star(require("./types"), exports);
|
|
9
|
+
function _export_star(from, to) {
|
|
10
|
+
Object.keys(from).forEach(function(k) {
|
|
11
|
+
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
|
|
12
|
+
Object.defineProperty(to, k, {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function() {
|
|
15
|
+
return from[k];
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
return from;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/modules/agents/index.ts"],"sourcesContent":["export * from './agents.module';\nexport * from './services/agent-loader.service';\nexport * from './services/agent-registry.service';\nexport * from './types';\n"],"names":[],"mappings":";;;;qBAAc;qBACA;qBACA;qBACA"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "AgentLoaderService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return AgentLoaderService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _common = require("@nestjs/common");
|
|
12
|
+
const _markdownparserservice = require("../../../common/services/markdown-parser.service");
|
|
13
|
+
const _constants = require("../../../common/constants");
|
|
14
|
+
const _path = /*#__PURE__*/ _interop_require_wildcard(require("path"));
|
|
15
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
16
|
+
if (typeof WeakMap !== "function") return null;
|
|
17
|
+
var cacheBabelInterop = new WeakMap();
|
|
18
|
+
var cacheNodeInterop = new WeakMap();
|
|
19
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
20
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
21
|
+
})(nodeInterop);
|
|
22
|
+
}
|
|
23
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
24
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
25
|
+
return obj;
|
|
26
|
+
}
|
|
27
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
28
|
+
return {
|
|
29
|
+
default: obj
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
33
|
+
if (cache && cache.has(obj)) {
|
|
34
|
+
return cache.get(obj);
|
|
35
|
+
}
|
|
36
|
+
var newObj = {
|
|
37
|
+
__proto__: null
|
|
38
|
+
};
|
|
39
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
40
|
+
for(var key in obj){
|
|
41
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
42
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
43
|
+
if (desc && (desc.get || desc.set)) {
|
|
44
|
+
Object.defineProperty(newObj, key, desc);
|
|
45
|
+
} else {
|
|
46
|
+
newObj[key] = obj[key];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
newObj.default = obj;
|
|
51
|
+
if (cache) {
|
|
52
|
+
cache.set(obj, newObj);
|
|
53
|
+
}
|
|
54
|
+
return newObj;
|
|
55
|
+
}
|
|
56
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
57
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
58
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
59
|
+
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;
|
|
60
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
61
|
+
}
|
|
62
|
+
function _ts_metadata(k, v) {
|
|
63
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
64
|
+
}
|
|
65
|
+
let AgentLoaderService = class AgentLoaderService {
|
|
66
|
+
async onModuleInit() {
|
|
67
|
+
await this.loadAgents();
|
|
68
|
+
}
|
|
69
|
+
async loadAgents() {
|
|
70
|
+
const exists = await this.markdownParser.exists(this.definitionsPath);
|
|
71
|
+
if (!exists) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const parsed = await this.markdownParser.parseAll(this.definitionsPath);
|
|
75
|
+
for (const [name, { frontmatter, content }] of parsed){
|
|
76
|
+
this.agents.set(frontmatter.name || name, {
|
|
77
|
+
name: frontmatter.name || name,
|
|
78
|
+
description: frontmatter.description || '',
|
|
79
|
+
model: frontmatter.model || _constants.DEFAULT_MODEL,
|
|
80
|
+
temperature: frontmatter.temperature ?? _constants.DEFAULT_TEMPERATURE,
|
|
81
|
+
skills: frontmatter.skills || [],
|
|
82
|
+
mcp: frontmatter.mcp || [],
|
|
83
|
+
systemPrompt: content
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async loadFromPath(customPath) {
|
|
88
|
+
const exists = await this.markdownParser.exists(customPath);
|
|
89
|
+
if (!exists) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const parsed = await this.markdownParser.parseAll(customPath);
|
|
93
|
+
for (const [name, { frontmatter, content }] of parsed){
|
|
94
|
+
const existingAgent = this.agents.get(frontmatter.name || name);
|
|
95
|
+
if (existingAgent) {
|
|
96
|
+
this.agents.set(frontmatter.name || name, {
|
|
97
|
+
...existingAgent,
|
|
98
|
+
skills: [
|
|
99
|
+
...new Set([
|
|
100
|
+
...existingAgent.skills,
|
|
101
|
+
...frontmatter.skills || []
|
|
102
|
+
])
|
|
103
|
+
],
|
|
104
|
+
mcp: [
|
|
105
|
+
...new Set([
|
|
106
|
+
...existingAgent.mcp,
|
|
107
|
+
...frontmatter.mcp || []
|
|
108
|
+
])
|
|
109
|
+
],
|
|
110
|
+
systemPrompt: content || existingAgent.systemPrompt,
|
|
111
|
+
model: frontmatter.model || existingAgent.model,
|
|
112
|
+
temperature: frontmatter.temperature ?? existingAgent.temperature
|
|
113
|
+
});
|
|
114
|
+
} else {
|
|
115
|
+
this.agents.set(frontmatter.name || name, {
|
|
116
|
+
name: frontmatter.name || name,
|
|
117
|
+
description: frontmatter.description || '',
|
|
118
|
+
model: frontmatter.model || _constants.DEFAULT_MODEL,
|
|
119
|
+
temperature: frontmatter.temperature ?? _constants.DEFAULT_TEMPERATURE,
|
|
120
|
+
skills: frontmatter.skills || [],
|
|
121
|
+
mcp: frontmatter.mcp || [],
|
|
122
|
+
systemPrompt: content
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
getAgent(name) {
|
|
128
|
+
return this.agents.get(name);
|
|
129
|
+
}
|
|
130
|
+
getAllAgents() {
|
|
131
|
+
return Array.from(this.agents.values());
|
|
132
|
+
}
|
|
133
|
+
getAgentNames() {
|
|
134
|
+
return Array.from(this.agents.keys());
|
|
135
|
+
}
|
|
136
|
+
constructor(markdownParser){
|
|
137
|
+
this.markdownParser = markdownParser;
|
|
138
|
+
this.agents = new Map();
|
|
139
|
+
this.definitionsPath = _path.join(__dirname, '..', 'definitions');
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
AgentLoaderService = _ts_decorate([
|
|
143
|
+
(0, _common.Injectable)(),
|
|
144
|
+
_ts_metadata("design:type", Function),
|
|
145
|
+
_ts_metadata("design:paramtypes", [
|
|
146
|
+
typeof _markdownparserservice.MarkdownParserService === "undefined" ? Object : _markdownparserservice.MarkdownParserService
|
|
147
|
+
])
|
|
148
|
+
], AgentLoaderService);
|
|
149
|
+
|
|
150
|
+
//# sourceMappingURL=agent-loader.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/agents/services/agent-loader.service.ts"],"sourcesContent":["import { Injectable, OnModuleInit } from '@nestjs/common';\nimport { MarkdownParserService } from '../../../common/services/markdown-parser.service';\nimport { AgentFrontmatter, AgentDefinition } from '../types';\nimport { DEFAULT_MODEL, DEFAULT_TEMPERATURE } from '../../../common/constants';\nimport * as path from 'path';\n\n@Injectable()\nexport class AgentLoaderService implements OnModuleInit {\n private agents: Map<string, AgentDefinition> = new Map();\n private definitionsPath: string;\n\n constructor(private readonly markdownParser: MarkdownParserService) {\n this.definitionsPath = path.join(__dirname, '..', 'definitions');\n }\n\n async onModuleInit() {\n await this.loadAgents();\n }\n\n async loadAgents() {\n const exists = await this.markdownParser.exists(this.definitionsPath);\n\n if (!exists) {\n return;\n }\n\n const parsed = await this.markdownParser.parseAll<AgentFrontmatter>(this.definitionsPath);\n\n for (const [name, { frontmatter, content }] of parsed) {\n this.agents.set(frontmatter.name || name, {\n name: frontmatter.name || name,\n description: frontmatter.description || '',\n model: frontmatter.model || DEFAULT_MODEL,\n temperature: frontmatter.temperature ?? DEFAULT_TEMPERATURE,\n skills: frontmatter.skills || [],\n mcp: frontmatter.mcp || [],\n systemPrompt: content,\n });\n }\n }\n\n async loadFromPath(customPath: string) {\n const exists = await this.markdownParser.exists(customPath);\n\n if (!exists) {\n return;\n }\n\n const parsed = await this.markdownParser.parseAll<AgentFrontmatter>(customPath);\n\n for (const [name, { frontmatter, content }] of parsed) {\n const existingAgent = this.agents.get(frontmatter.name || name);\n\n if (existingAgent) {\n this.agents.set(frontmatter.name || name, {\n ...existingAgent,\n skills: [...new Set([...existingAgent.skills, ...(frontmatter.skills || [])])],\n mcp: [...new Set([...existingAgent.mcp, ...(frontmatter.mcp || [])])],\n systemPrompt: content || existingAgent.systemPrompt,\n model: frontmatter.model || existingAgent.model,\n temperature: frontmatter.temperature ?? existingAgent.temperature,\n });\n } else {\n this.agents.set(frontmatter.name || name, {\n name: frontmatter.name || name,\n description: frontmatter.description || '',\n model: frontmatter.model || DEFAULT_MODEL,\n temperature: frontmatter.temperature ?? DEFAULT_TEMPERATURE,\n skills: frontmatter.skills || [],\n mcp: frontmatter.mcp || [],\n systemPrompt: content,\n });\n }\n }\n }\n\n getAgent(name: string): AgentDefinition | undefined {\n return this.agents.get(name);\n }\n\n getAllAgents(): AgentDefinition[] {\n return Array.from(this.agents.values());\n }\n\n getAgentNames(): string[] {\n return Array.from(this.agents.keys());\n }\n}\n"],"names":["AgentLoaderService","onModuleInit","loadAgents","exists","markdownParser","definitionsPath","parsed","parseAll","name","frontmatter","content","agents","set","description","model","DEFAULT_MODEL","temperature","DEFAULT_TEMPERATURE","skills","mcp","systemPrompt","loadFromPath","customPath","existingAgent","get","Set","getAgent","getAllAgents","Array","from","values","getAgentNames","keys","Map","path","join","__dirname"],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "AgentRegistryService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return AgentRegistryService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _common = require("@nestjs/common");
|
|
12
|
+
const _agentloaderservice = require("./agent-loader.service");
|
|
13
|
+
const _skillregistryservice = require("../../skills/services/skill-registry.service");
|
|
14
|
+
const _toolsregistryservice = require("../../tools/services/tools-registry.service");
|
|
15
|
+
const _mcpregistryservice = require("../../mcp/services/mcp-registry.service");
|
|
16
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
17
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
18
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
19
|
+
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;
|
|
20
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
21
|
+
}
|
|
22
|
+
function _ts_metadata(k, v) {
|
|
23
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
24
|
+
}
|
|
25
|
+
const FALLBACK_TOOL_NAMES = [
|
|
26
|
+
'read_file',
|
|
27
|
+
'glob',
|
|
28
|
+
'grep',
|
|
29
|
+
'ls'
|
|
30
|
+
];
|
|
31
|
+
let AgentRegistryService = class AgentRegistryService {
|
|
32
|
+
resolveAgent(name, projectContext) {
|
|
33
|
+
const agent = this.agentLoader.getAgent(name);
|
|
34
|
+
if (!agent) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
let skillTools = this.skillRegistry.getToolsForSkills(agent.skills);
|
|
38
|
+
const skillGuidelines = this.skillRegistry.getGuidelinesForSkills(agent.skills);
|
|
39
|
+
if (skillTools.length === 0 && agent.skills.length > 0) {
|
|
40
|
+
skillTools = this.toolsRegistry.getTools(FALLBACK_TOOL_NAMES);
|
|
41
|
+
}
|
|
42
|
+
let mcpTools = [];
|
|
43
|
+
if (agent.mcp && agent.mcp.length > 0) {
|
|
44
|
+
for (const mcpName of agent.mcp){
|
|
45
|
+
mcpTools.push(...this.mcpRegistry.getMcpTools(mcpName));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const allTools = [
|
|
49
|
+
...skillTools,
|
|
50
|
+
...mcpTools
|
|
51
|
+
];
|
|
52
|
+
let systemPrompt = agent.systemPrompt;
|
|
53
|
+
if (skillGuidelines) {
|
|
54
|
+
systemPrompt += `\n\n# Skills Guidelines\n${skillGuidelines}`;
|
|
55
|
+
}
|
|
56
|
+
if (allTools.length > 0) {
|
|
57
|
+
const toolNames = allTools.map((t)=>t.name).join(', ');
|
|
58
|
+
systemPrompt += `\n\n# Your Available Tools\nYou have access to these tools ONLY: ${toolNames}\nDo NOT attempt to use tools not in this list.`;
|
|
59
|
+
}
|
|
60
|
+
if (projectContext) {
|
|
61
|
+
systemPrompt += `\n\n# Project Context\n${projectContext}`;
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
name: agent.name,
|
|
65
|
+
description: agent.description,
|
|
66
|
+
model: agent.model,
|
|
67
|
+
temperature: agent.temperature,
|
|
68
|
+
tools: allTools,
|
|
69
|
+
systemPrompt,
|
|
70
|
+
mcp: agent.mcp
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
resolveAllAgents(projectContext) {
|
|
74
|
+
const agents = this.agentLoader.getAllAgents();
|
|
75
|
+
return agents.map((a)=>this.resolveAgent(a.name, projectContext)).filter((a)=>a !== undefined);
|
|
76
|
+
}
|
|
77
|
+
getSubagentDefinitions(projectContext) {
|
|
78
|
+
const agents = this.resolveAllAgents(projectContext);
|
|
79
|
+
return agents.map((agent)=>({
|
|
80
|
+
name: agent.name,
|
|
81
|
+
description: agent.description,
|
|
82
|
+
systemPrompt: agent.systemPrompt,
|
|
83
|
+
tools: agent.tools,
|
|
84
|
+
mcp: agent.mcp
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
async loadProjectAgents(projectPath) {
|
|
88
|
+
await this.agentLoader.loadFromPath(projectPath);
|
|
89
|
+
}
|
|
90
|
+
constructor(agentLoader, skillRegistry, toolsRegistry, mcpRegistry){
|
|
91
|
+
this.agentLoader = agentLoader;
|
|
92
|
+
this.skillRegistry = skillRegistry;
|
|
93
|
+
this.toolsRegistry = toolsRegistry;
|
|
94
|
+
this.mcpRegistry = mcpRegistry;
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
AgentRegistryService = _ts_decorate([
|
|
98
|
+
(0, _common.Injectable)(),
|
|
99
|
+
_ts_metadata("design:type", Function),
|
|
100
|
+
_ts_metadata("design:paramtypes", [
|
|
101
|
+
typeof _agentloaderservice.AgentLoaderService === "undefined" ? Object : _agentloaderservice.AgentLoaderService,
|
|
102
|
+
typeof _skillregistryservice.SkillRegistryService === "undefined" ? Object : _skillregistryservice.SkillRegistryService,
|
|
103
|
+
typeof _toolsregistryservice.ToolsRegistryService === "undefined" ? Object : _toolsregistryservice.ToolsRegistryService,
|
|
104
|
+
typeof _mcpregistryservice.McpRegistryService === "undefined" ? Object : _mcpregistryservice.McpRegistryService
|
|
105
|
+
])
|
|
106
|
+
], AgentRegistryService);
|
|
107
|
+
|
|
108
|
+
//# sourceMappingURL=agent-registry.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/agents/services/agent-registry.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { StructuredTool } from '@langchain/core/tools';\nimport { AgentLoaderService } from './agent-loader.service';\nimport { SkillRegistryService } from '../../skills/services/skill-registry.service';\nimport { ToolsRegistryService } from '../../tools/services/tools-registry.service';\nimport { McpRegistryService } from '../../mcp/services/mcp-registry.service';\nimport { ResolvedAgent, SubagentDefinition } from '../types';\n\nconst FALLBACK_TOOL_NAMES = ['read_file', 'glob', 'grep', 'ls'];\n\n@Injectable()\nexport class AgentRegistryService {\n constructor(\n private readonly agentLoader: AgentLoaderService,\n private readonly skillRegistry: SkillRegistryService,\n private readonly toolsRegistry: ToolsRegistryService,\n private readonly mcpRegistry: McpRegistryService,\n ) {}\n\n resolveAgent(name: string, projectContext?: string): ResolvedAgent | undefined {\n const agent = this.agentLoader.getAgent(name);\n\n if (!agent) {\n return undefined;\n }\n\n let skillTools = this.skillRegistry.getToolsForSkills(agent.skills);\n const skillGuidelines = this.skillRegistry.getGuidelinesForSkills(agent.skills);\n\n if (skillTools.length === 0 && agent.skills.length > 0) {\n skillTools = this.toolsRegistry.getTools(FALLBACK_TOOL_NAMES);\n }\n\n let mcpTools: StructuredTool[] = [];\n if (agent.mcp && agent.mcp.length > 0) {\n for (const mcpName of agent.mcp) {\n mcpTools.push(...this.mcpRegistry.getMcpTools(mcpName));\n }\n }\n\n const allTools = [...skillTools, ...mcpTools];\n\n let systemPrompt = agent.systemPrompt;\n\n if (skillGuidelines) {\n systemPrompt += `\\n\\n# Skills Guidelines\\n${skillGuidelines}`;\n }\n\n if (allTools.length > 0) {\n const toolNames = allTools.map(t => t.name).join(', ');\n systemPrompt += `\\n\\n# Your Available Tools\\nYou have access to these tools ONLY: ${toolNames}\\nDo NOT attempt to use tools not in this list.`;\n }\n\n if (projectContext) {\n systemPrompt += `\\n\\n# Project Context\\n${projectContext}`;\n }\n\n return {\n name: agent.name,\n description: agent.description,\n model: agent.model,\n temperature: agent.temperature,\n tools: allTools,\n systemPrompt,\n mcp: agent.mcp,\n };\n }\n\n resolveAllAgents(projectContext?: string): ResolvedAgent[] {\n const agents = this.agentLoader.getAllAgents();\n\n return agents\n .map((a) => this.resolveAgent(a.name, projectContext))\n .filter((a): a is ResolvedAgent => a !== undefined);\n }\n\n getSubagentDefinitions(projectContext?: string): SubagentDefinition[] {\n const agents = this.resolveAllAgents(projectContext);\n\n return agents.map((agent) => ({\n name: agent.name,\n description: agent.description,\n systemPrompt: agent.systemPrompt,\n tools: agent.tools,\n mcp: agent.mcp,\n }));\n }\n\n async loadProjectAgents(projectPath: string) {\n await this.agentLoader.loadFromPath(projectPath);\n }\n}\n"],"names":["AgentRegistryService","FALLBACK_TOOL_NAMES","resolveAgent","name","projectContext","agent","agentLoader","getAgent","undefined","skillTools","skillRegistry","getToolsForSkills","skills","skillGuidelines","getGuidelinesForSkills","length","toolsRegistry","getTools","mcpTools","mcp","mcpName","push","mcpRegistry","getMcpTools","allTools","systemPrompt","toolNames","map","t","join","description","model","temperature","tools","resolveAllAgents","agents","getAllAgents","a","filter","getSubagentDefinitions","loadProjectAgents","projectPath","loadFromPath"],"mappings":";;;;+BAWaA;;;eAAAA;;;wBAXc;oCAEQ;sCACE;sCACA;oCACF;;;;;;;;;;AAGnC,MAAMC,sBAAsB;IAAC;IAAa;IAAQ;IAAQ;CAAK;AAGxD,IAAA,AAAMD,uBAAN,MAAMA;IAQXE,aAAaC,IAAY,EAAEC,cAAuB,EAA6B;QAC7E,MAAMC,QAAQ,IAAI,CAACC,WAAW,CAACC,QAAQ,CAACJ;QAExC,IAAI,CAACE,OAAO;YACV,OAAOG;QACT;QAEA,IAAIC,aAAa,IAAI,CAACC,aAAa,CAACC,iBAAiB,CAACN,MAAMO,MAAM;QAClE,MAAMC,kBAAkB,IAAI,CAACH,aAAa,CAACI,sBAAsB,CAACT,MAAMO,MAAM;QAE9E,IAAIH,WAAWM,MAAM,KAAK,KAAKV,MAAMO,MAAM,CAACG,MAAM,GAAG,GAAG;YACtDN,aAAa,IAAI,CAACO,aAAa,CAACC,QAAQ,CAAChB;QAC3C;QAEA,IAAIiB,WAA6B,EAAE;QACnC,IAAIb,MAAMc,GAAG,IAAId,MAAMc,GAAG,CAACJ,MAAM,GAAG,GAAG;YACrC,KAAK,MAAMK,WAAWf,MAAMc,GAAG,CAAE;gBAC/BD,SAASG,IAAI,IAAI,IAAI,CAACC,WAAW,CAACC,WAAW,CAACH;YAChD;QACF;QAEA,MAAMI,WAAW;eAAIf;eAAeS;SAAS;QAE7C,IAAIO,eAAepB,MAAMoB,YAAY;QAErC,IAAIZ,iBAAiB;YACnBY,gBAAgB,CAAC,yBAAyB,EAAEZ,iBAAiB;QAC/D;QAEA,IAAIW,SAAST,MAAM,GAAG,GAAG;YACvB,MAAMW,YAAYF,SAASG,GAAG,CAACC,CAAAA,IAAKA,EAAEzB,IAAI,EAAE0B,IAAI,CAAC;YACjDJ,gBAAgB,CAAC,iEAAiE,EAAEC,UAAU,+CAA+C,CAAC;QAChJ;QAEA,IAAItB,gBAAgB;YAClBqB,gBAAgB,CAAC,uBAAuB,EAAErB,gBAAgB;QAC5D;QAEA,OAAO;YACLD,MAAME,MAAMF,IAAI;YAChB2B,aAAazB,MAAMyB,WAAW;YAC9BC,OAAO1B,MAAM0B,KAAK;YAClBC,aAAa3B,MAAM2B,WAAW;YAC9BC,OAAOT;YACPC;YACAN,KAAKd,MAAMc,GAAG;QAChB;IACF;IAEAe,iBAAiB9B,cAAuB,EAAmB;QACzD,MAAM+B,SAAS,IAAI,CAAC7B,WAAW,CAAC8B,YAAY;QAE5C,OAAOD,OACJR,GAAG,CAAC,CAACU,IAAM,IAAI,CAACnC,YAAY,CAACmC,EAAElC,IAAI,EAAEC,iBACrCkC,MAAM,CAAC,CAACD,IAA0BA,MAAM7B;IAC7C;IAEA+B,uBAAuBnC,cAAuB,EAAwB;QACpE,MAAM+B,SAAS,IAAI,CAACD,gBAAgB,CAAC9B;QAErC,OAAO+B,OAAOR,GAAG,CAAC,CAACtB,QAAW,CAAA;gBAC5BF,MAAME,MAAMF,IAAI;gBAChB2B,aAAazB,MAAMyB,WAAW;gBAC9BL,cAAcpB,MAAMoB,YAAY;gBAChCQ,OAAO5B,MAAM4B,KAAK;gBAClBd,KAAKd,MAAMc,GAAG;YAChB,CAAA;IACF;IAEA,MAAMqB,kBAAkBC,WAAmB,EAAE;QAC3C,MAAM,IAAI,CAACnC,WAAW,CAACoC,YAAY,CAACD;IACtC;IA9EA,YACE,AAAiBnC,WAA+B,EAChD,AAAiBI,aAAmC,EACpD,AAAiBM,aAAmC,EACpD,AAAiBM,WAA+B,CAChD;aAJiBhB,cAAAA;aACAI,gBAAAA;aACAM,gBAAAA;aACAM,cAAAA;IAChB;AA0EL"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/agents/types/agent.types.ts"],"names":[],"mappings":""}
|