@poolzin/pool-bot 2026.3.13 → 2026.3.15

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 (186) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/dist/agents/checkpoint-manager.js +291 -0
  3. package/dist/agents/poolbot-tools.js +5 -0
  4. package/dist/agents/subagent-announce-reliability.js +160 -0
  5. package/dist/agents/tool-result-truncation.js +299 -0
  6. package/dist/agents/tools/nodes-file-tool.js +197 -0
  7. package/dist/build-info.json +3 -3
  8. package/dist/cli/config-cli.js +60 -0
  9. package/dist/cron/cron-improvements.js +195 -0
  10. package/dist/discord/discord-improvements.js +167 -0
  11. package/dist/gateway/auth-rate-limit.js +19 -0
  12. package/dist/gateway/auth.js +41 -0
  13. package/dist/gateway/gateway-improvements.js +294 -0
  14. package/dist/gateway/node-command-policy.js +7 -2
  15. package/dist/infra/net/ssrf.js +15 -2
  16. package/dist/infra/shell-security.js +201 -0
  17. package/dist/memory/memory-improvements.js +239 -0
  18. package/dist/node-host/runner.js +146 -79
  19. package/dist/security/prototype-pollution.js +141 -0
  20. package/dist/security/webhook-security.js +253 -0
  21. package/dist/shared/net/ip.js +52 -1
  22. package/dist/slack/slack-improvements.js +225 -0
  23. package/dist/telegram/telegram-improvements.js +220 -0
  24. package/dist/ui-plugins/ui-plugins-improvements.js +191 -0
  25. package/docs/ANALISE_OPENCLAW_PROFISSIONAL.md +520 -0
  26. package/docs/competitive-analysis.md +421 -0
  27. package/docs/implementation-analysis.md +393 -0
  28. package/docs/plans/2026-03-11-file-operations-security-hardening.md +307 -0
  29. package/docs/plans/2026-03-11-integracao-projetos-poolbot.md +666 -0
  30. package/extensions/agency-agents/README.md +301 -0
  31. package/extensions/agency-agents/agents/CONTRIBUTING.md +353 -0
  32. package/extensions/agency-agents/agents/README.md +602 -0
  33. package/extensions/agency-agents/agents/design/design-brand-guardian.md +320 -0
  34. package/extensions/agency-agents/agents/design/design-image-prompt-engineer.md +234 -0
  35. package/extensions/agency-agents/agents/design/design-ui-designer.md +381 -0
  36. package/extensions/agency-agents/agents/design/design-ux-architect.md +467 -0
  37. package/extensions/agency-agents/agents/design/design-ux-researcher.md +327 -0
  38. package/extensions/agency-agents/agents/design/design-visual-storyteller.md +147 -0
  39. package/extensions/agency-agents/agents/design/design-whimsy-injector.md +436 -0
  40. package/extensions/agency-agents/agents/engineering/engineering-ai-engineer.md +144 -0
  41. package/extensions/agency-agents/agents/engineering/engineering-backend-architect.md +233 -0
  42. package/extensions/agency-agents/agents/engineering/engineering-devops-automator.md +374 -0
  43. package/extensions/agency-agents/agents/engineering/engineering-frontend-developer.md +223 -0
  44. package/extensions/agency-agents/agents/engineering/engineering-mobile-app-builder.md +491 -0
  45. package/extensions/agency-agents/agents/engineering/engineering-rapid-prototyper.md +460 -0
  46. package/extensions/agency-agents/agents/engineering/engineering-security-engineer.md +275 -0
  47. package/extensions/agency-agents/agents/engineering/engineering-senior-developer.md +174 -0
  48. package/extensions/agency-agents/agents/examples/README.md +48 -0
  49. package/extensions/agency-agents/agents/examples/nexus-spatial-discovery.md +852 -0
  50. package/extensions/agency-agents/agents/examples/workflow-landing-page.md +119 -0
  51. package/extensions/agency-agents/agents/examples/workflow-startup-mvp.md +155 -0
  52. package/extensions/agency-agents/agents/integrations/README.md +117 -0
  53. package/extensions/agency-agents/agents/integrations/aider/README.md +38 -0
  54. package/extensions/agency-agents/agents/integrations/antigravity/README.md +49 -0
  55. package/extensions/agency-agents/agents/integrations/claude-code/README.md +31 -0
  56. package/extensions/agency-agents/agents/integrations/cursor/README.md +38 -0
  57. package/extensions/agency-agents/agents/integrations/gemini-cli/README.md +36 -0
  58. package/extensions/agency-agents/agents/integrations/opencode/README.md +58 -0
  59. package/extensions/agency-agents/agents/integrations/windsurf/README.md +26 -0
  60. package/extensions/agency-agents/agents/marketing/marketing-app-store-optimizer.md +319 -0
  61. package/extensions/agency-agents/agents/marketing/marketing-content-creator.md +52 -0
  62. package/extensions/agency-agents/agents/marketing/marketing-growth-hacker.md +52 -0
  63. package/extensions/agency-agents/agents/marketing/marketing-instagram-curator.md +111 -0
  64. package/extensions/agency-agents/agents/marketing/marketing-reddit-community-builder.md +121 -0
  65. package/extensions/agency-agents/agents/marketing/marketing-social-media-strategist.md +123 -0
  66. package/extensions/agency-agents/agents/marketing/marketing-tiktok-strategist.md +123 -0
  67. package/extensions/agency-agents/agents/marketing/marketing-twitter-engager.md +124 -0
  68. package/extensions/agency-agents/agents/marketing/marketing-wechat-official-account.md +143 -0
  69. package/extensions/agency-agents/agents/marketing/marketing-xiaohongshu-specialist.md +136 -0
  70. package/extensions/agency-agents/agents/marketing/marketing-zhihu-strategist.md +160 -0
  71. package/extensions/agency-agents/agents/product/product-feedback-synthesizer.md +117 -0
  72. package/extensions/agency-agents/agents/product/product-sprint-prioritizer.md +152 -0
  73. package/extensions/agency-agents/agents/product/product-trend-researcher.md +157 -0
  74. package/extensions/agency-agents/agents/project-management/project-management-experiment-tracker.md +196 -0
  75. package/extensions/agency-agents/agents/project-management/project-management-project-shepherd.md +192 -0
  76. package/extensions/agency-agents/agents/project-management/project-management-studio-operations.md +198 -0
  77. package/extensions/agency-agents/agents/project-management/project-management-studio-producer.md +201 -0
  78. package/extensions/agency-agents/agents/project-management/project-manager-senior.md +133 -0
  79. package/extensions/agency-agents/agents/scripts/convert.sh +362 -0
  80. package/extensions/agency-agents/agents/scripts/install.sh +465 -0
  81. package/extensions/agency-agents/agents/scripts/lint-agents.sh +115 -0
  82. package/extensions/agency-agents/agents/spatial-computing/macos-spatial-metal-engineer.md +335 -0
  83. package/extensions/agency-agents/agents/spatial-computing/terminal-integration-specialist.md +68 -0
  84. package/extensions/agency-agents/agents/spatial-computing/visionos-spatial-engineer.md +52 -0
  85. package/extensions/agency-agents/agents/spatial-computing/xr-cockpit-interaction-specialist.md +30 -0
  86. package/extensions/agency-agents/agents/spatial-computing/xr-immersive-developer.md +30 -0
  87. package/extensions/agency-agents/agents/spatial-computing/xr-interface-architect.md +30 -0
  88. package/extensions/agency-agents/agents/specialized/agentic-identity-trust.md +367 -0
  89. package/extensions/agency-agents/agents/specialized/agents-orchestrator.md +365 -0
  90. package/extensions/agency-agents/agents/specialized/data-analytics-reporter.md +52 -0
  91. package/extensions/agency-agents/agents/specialized/data-consolidation-agent.md +58 -0
  92. package/extensions/agency-agents/agents/specialized/lsp-index-engineer.md +312 -0
  93. package/extensions/agency-agents/agents/specialized/report-distribution-agent.md +63 -0
  94. package/extensions/agency-agents/agents/specialized/sales-data-extraction-agent.md +65 -0
  95. package/extensions/agency-agents/agents/strategy/EXECUTIVE-BRIEF.md +95 -0
  96. package/extensions/agency-agents/agents/strategy/QUICKSTART.md +194 -0
  97. package/extensions/agency-agents/agents/strategy/coordination/agent-activation-prompts.md +401 -0
  98. package/extensions/agency-agents/agents/strategy/coordination/handoff-templates.md +357 -0
  99. package/extensions/agency-agents/agents/strategy/nexus-strategy.md +1110 -0
  100. package/extensions/agency-agents/agents/strategy/playbooks/phase-0-discovery.md +178 -0
  101. package/extensions/agency-agents/agents/strategy/playbooks/phase-1-strategy.md +238 -0
  102. package/extensions/agency-agents/agents/strategy/playbooks/phase-2-foundation.md +278 -0
  103. package/extensions/agency-agents/agents/strategy/playbooks/phase-3-build.md +286 -0
  104. package/extensions/agency-agents/agents/strategy/playbooks/phase-4-hardening.md +332 -0
  105. package/extensions/agency-agents/agents/strategy/playbooks/phase-5-launch.md +277 -0
  106. package/extensions/agency-agents/agents/strategy/playbooks/phase-6-operate.md +318 -0
  107. package/extensions/agency-agents/agents/strategy/runbooks/scenario-enterprise-feature.md +157 -0
  108. package/extensions/agency-agents/agents/strategy/runbooks/scenario-incident-response.md +217 -0
  109. package/extensions/agency-agents/agents/strategy/runbooks/scenario-marketing-campaign.md +187 -0
  110. package/extensions/agency-agents/agents/strategy/runbooks/scenario-startup-mvp.md +154 -0
  111. package/extensions/agency-agents/agents/support/support-analytics-reporter.md +363 -0
  112. package/extensions/agency-agents/agents/support/support-executive-summary-generator.md +210 -0
  113. package/extensions/agency-agents/agents/support/support-finance-tracker.md +440 -0
  114. package/extensions/agency-agents/agents/support/support-infrastructure-maintainer.md +616 -0
  115. package/extensions/agency-agents/agents/support/support-legal-compliance-checker.md +586 -0
  116. package/extensions/agency-agents/agents/support/support-support-responder.md +583 -0
  117. package/extensions/agency-agents/agents/testing/testing-accessibility-auditor.md +313 -0
  118. package/extensions/agency-agents/agents/testing/testing-api-tester.md +304 -0
  119. package/extensions/agency-agents/agents/testing/testing-evidence-collector.md +208 -0
  120. package/extensions/agency-agents/agents/testing/testing-performance-benchmarker.md +266 -0
  121. package/extensions/agency-agents/agents/testing/testing-reality-checker.md +236 -0
  122. package/extensions/agency-agents/agents/testing/testing-test-results-analyzer.md +303 -0
  123. package/extensions/agency-agents/agents/testing/testing-tool-evaluator.md +392 -0
  124. package/extensions/agency-agents/agents/testing/testing-workflow-optimizer.md +448 -0
  125. package/extensions/agency-agents/index.ts +733 -0
  126. package/extensions/agency-agents/node_modules/.bin/jiti +21 -0
  127. package/extensions/agency-agents/node_modules/.bin/tsc +21 -0
  128. package/extensions/agency-agents/node_modules/.bin/tsserver +21 -0
  129. package/extensions/agency-agents/node_modules/.bin/tsx +21 -0
  130. package/extensions/agency-agents/node_modules/.bin/vite +21 -0
  131. package/extensions/agency-agents/node_modules/.bin/vitest +21 -0
  132. package/extensions/agency-agents/node_modules/.bin/yaml +21 -0
  133. package/extensions/agency-agents/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  134. package/extensions/agency-agents/package.json +25 -0
  135. package/extensions/agency-agents/poolbot.plugin.json +11 -0
  136. package/extensions/agency-agents/src/AgencyAgentsService.test.ts +443 -0
  137. package/extensions/agency-agents/src/AgencyAgentsService.ts +288 -0
  138. package/extensions/agency-agents/src/types.ts +147 -0
  139. package/extensions/agency-agents/vitest.config.ts +8 -0
  140. package/extensions/hexstrike-ai/README.md +98 -0
  141. package/extensions/hexstrike-ai/node_modules/.bin/tsc +21 -0
  142. package/extensions/hexstrike-ai/node_modules/.bin/tsserver +21 -0
  143. package/extensions/hexstrike-ai/package.json +29 -0
  144. package/extensions/hexstrike-ai/poolbot.plugin.json +31 -0
  145. package/extensions/hexstrike-ai/src/client.ts +91 -0
  146. package/extensions/hexstrike-ai/src/index.ts +170 -0
  147. package/extensions/hexstrike-ai/src/server/hexstrike_mcp.py +5470 -0
  148. package/extensions/hexstrike-ai/src/server/hexstrike_server.py +17289 -0
  149. package/extensions/hexstrike-ai/src/server/requirements.txt +84 -0
  150. package/extensions/hexstrike-ai/src/server-manager.ts +83 -0
  151. package/extensions/hexstrike-ai/tsconfig.json +20 -0
  152. package/extensions/page-agent/README.md +159 -0
  153. package/extensions/page-agent/index.ts +595 -0
  154. package/extensions/page-agent/node_modules/.bin/jiti +21 -0
  155. package/extensions/page-agent/node_modules/.bin/playwright +21 -0
  156. package/extensions/page-agent/node_modules/.bin/tsc +21 -0
  157. package/extensions/page-agent/node_modules/.bin/tsserver +21 -0
  158. package/extensions/page-agent/node_modules/.bin/tsx +21 -0
  159. package/extensions/page-agent/node_modules/.bin/vitest +21 -0
  160. package/extensions/page-agent/node_modules/.bin/yaml +21 -0
  161. package/extensions/page-agent/package.json +43 -0
  162. package/extensions/page-agent/poolbot.plugin.json +24 -0
  163. package/extensions/page-agent/src/PageAgentService.test.ts +517 -0
  164. package/extensions/page-agent/src/PageAgentService.ts +636 -0
  165. package/extensions/page-agent/src/PoolBotPageController.test.ts +358 -0
  166. package/extensions/page-agent/src/PoolBotPageController.ts +245 -0
  167. package/extensions/page-agent/src/index.ts +20 -0
  168. package/extensions/page-agent/src/tools.test.ts +231 -0
  169. package/extensions/page-agent/src/tools.ts +167 -0
  170. package/extensions/page-agent/src/types.ts +198 -0
  171. package/extensions/xyops/README.md +227 -0
  172. package/extensions/xyops/index.ts +342 -0
  173. package/extensions/xyops/node_modules/.bin/jiti +21 -0
  174. package/extensions/xyops/node_modules/.bin/tsc +21 -0
  175. package/extensions/xyops/node_modules/.bin/tsserver +21 -0
  176. package/extensions/xyops/node_modules/.bin/tsx +21 -0
  177. package/extensions/xyops/node_modules/.bin/vitest +21 -0
  178. package/extensions/xyops/node_modules/.bin/yaml +21 -0
  179. package/extensions/xyops/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  180. package/extensions/xyops/package.json +39 -0
  181. package/extensions/xyops/poolbot.plugin.json +21 -0
  182. package/extensions/xyops/src/client.test.ts +467 -0
  183. package/extensions/xyops/src/client.ts +157 -0
  184. package/extensions/xyops/src/types.ts +147 -0
  185. package/extensions/xyops/vitest.config.ts +8 -0
  186. package/package.json +1 -1
@@ -0,0 +1,733 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import type { PoolBotPluginDefinition, PoolBotPluginApi } from "../../src/plugins/types.js";
3
+ import { AgencyAgentsService } from "./src/AgencyAgentsService.js";
4
+ import type { AgencyAgent, AgentTask, AgentMessage, AgentReview } from "./src/types.js";
5
+ import * as fs from "fs";
6
+ import * as path from "path";
7
+ import { fileURLToPath } from "url";
8
+
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = path.dirname(__filename);
11
+
12
+ interface AgentDefinition {
13
+ name: string;
14
+ description: string;
15
+ color?: string;
16
+ category: string;
17
+ content: string;
18
+ }
19
+
20
+ function parseAgentFile(content: string, filename: string): AgentDefinition | null {
21
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
22
+ if (!frontmatterMatch) return null;
23
+
24
+ const frontmatter = frontmatterMatch[1];
25
+ const body = frontmatterMatch[2];
26
+
27
+ const name = frontmatter.match(/name:\s*(.+)/)?.[1]?.trim();
28
+ const description = frontmatter.match(/description:\s*(.+)/)?.[1]?.trim();
29
+ const color = frontmatter.match(/color:\s*(.+)/)?.[1]?.trim();
30
+
31
+ if (!name || !description) return null;
32
+
33
+ const category = path.dirname(filename).split("/").pop() || "general";
34
+
35
+ return {
36
+ name,
37
+ description,
38
+ color,
39
+ category,
40
+ content: body.trim(),
41
+ };
42
+ }
43
+
44
+ function loadAgentsFromDirectory(dirPath: string): AgentDefinition[] {
45
+ const agents: AgentDefinition[] = [];
46
+
47
+ if (!fs.existsSync(dirPath)) return agents;
48
+
49
+ const entries = fs.readdirSync(dirPath, { withFileTypes: true });
50
+
51
+ for (const entry of entries) {
52
+ const fullPath = path.join(dirPath, entry.name);
53
+
54
+ if (entry.isDirectory() && !entry.name.startsWith(".") && !entry.name.startsWith("_")) {
55
+ agents.push(...loadAgentsFromDirectory(fullPath));
56
+ } else if (entry.isFile() && entry.name.endsWith(".md")) {
57
+ try {
58
+ const content = fs.readFileSync(fullPath, "utf-8");
59
+ const agent = parseAgentFile(content, fullPath.replace(dirPath + "/", ""));
60
+ if (agent) agents.push(agent);
61
+ } catch {
62
+ // Skip files that can't be parsed
63
+ }
64
+ }
65
+ }
66
+
67
+ return agents;
68
+ }
69
+
70
+ const AgencyListAgentsSchema = Type.Object({
71
+ category: Type.Optional(Type.String({ description: "Filter by category (e.g., engineering, design, marketing, product, testing, strategy)" })),
72
+ });
73
+
74
+ const AgencyGetAgentSchema = Type.Object({
75
+ name: Type.String({ description: "Name of the agent to retrieve" }),
76
+ });
77
+
78
+ const AgencyActivateAgentSchema = Type.Object({
79
+ name: Type.String({ description: "Name of the agent to activate" }),
80
+ task: Type.String({ description: "Description of the task for the agent to work on" }),
81
+ context: Type.Optional(Type.String({ description: "Additional context or requirements for the task" })),
82
+ });
83
+
84
+ const AgencyFindAgentSchema = Type.Object({
85
+ task: Type.String({ description: "Description of the task you need help with" }),
86
+ });
87
+
88
+ const AgencyGetWorkflowSchema = Type.Object({
89
+ name: Type.String({ description: "Name of the workflow (e.g., 'startup-mvp', 'enterprise-feature', 'phase-0-discovery')" }),
90
+ });
91
+
92
+ const AgencyCreateTaskSchema = Type.Object({
93
+ agentName: Type.String({ description: "Name of the agent to assign the task to" }),
94
+ task: Type.String({ description: "Description of the task" }),
95
+ context: Type.Optional(Type.String({ description: "Additional context or requirements" })),
96
+ parentTaskId: Type.Optional(Type.String({ description: "ID of parent task if this is a subtask" })),
97
+ });
98
+
99
+ const AgencyGetTaskSchema = Type.Object({
100
+ taskId: Type.String({ description: "ID of the task to retrieve" }),
101
+ });
102
+
103
+ const AgencyUpdateTaskSchema = Type.Object({
104
+ taskId: Type.String({ description: "ID of the task to update" }),
105
+ status: Type.String({ description: "New status: pending, in_progress, completed, failed, reviewing" }),
106
+ output: Type.Optional(Type.String({ description: "Task output or result" })),
107
+ });
108
+
109
+ const AgencyListTasksSchema = Type.Object({
110
+ agentName: Type.Optional(Type.String({ description: "Filter by agent name" })),
111
+ status: Type.Optional(Type.String({ description: "Filter by status" })),
112
+ });
113
+
114
+ const AgencyCreateCollaborationSchema = Type.Object({
115
+ name: Type.String({ description: "Name of the collaboration project" }),
116
+ description: Type.String({ description: "Description of the collaboration" }),
117
+ leadAgent: Type.String({ description: "Name of the lead agent" }),
118
+ participatingAgents: Type.Array(Type.String(), { description: "Names of participating agents" }),
119
+ });
120
+
121
+ const AgencyGetCollaborationSchema = Type.Object({
122
+ collaborationId: Type.String({ description: "ID of the collaboration" }),
123
+ });
124
+
125
+ const AgencyAddTaskToCollaborationSchema = Type.Object({
126
+ collaborationId: Type.String({ description: "ID of the collaboration" }),
127
+ agentName: Type.String({ description: "Name of the agent to assign the task to" }),
128
+ task: Type.String({ description: "Description of the task" }),
129
+ context: Type.Optional(Type.String({ description: "Additional context" })),
130
+ });
131
+
132
+ const AgencySendMessageSchema = Type.Object({
133
+ collaborationId: Type.String({ description: "ID of the collaboration" }),
134
+ fromAgent: Type.String({ description: "Name of the sending agent" }),
135
+ toAgent: Type.String({ description: "Name of the receiving agent" }),
136
+ content: Type.String({ description: "Message content" }),
137
+ type: Type.Optional(Type.String({ description: "Message type: request, response, update, review, handoff" })),
138
+ });
139
+
140
+ const AgencyGetMessagesSchema = Type.Object({
141
+ collaborationId: Type.String({ description: "ID of the collaboration" }),
142
+ });
143
+
144
+ const AgencyCreateReviewSchema = Type.Object({
145
+ taskId: Type.String({ description: "ID of the task to review" }),
146
+ reviewerAgent: Type.String({ description: "Name of the reviewing agent" }),
147
+ revieweeAgent: Type.String({ description: "Name of the agent being reviewed" }),
148
+ feedback: Type.String({ description: "Review feedback" }),
149
+ approvalStatus: Type.String({ description: "approved, changes_requested, or pending" }),
150
+ suggestions: Type.Optional(Type.Array(Type.String(), { description: "List of improvement suggestions" })),
151
+ });
152
+
153
+ const AgencyDelegateTaskSchema = Type.Object({
154
+ fromAgent: Type.String({ description: "Name of the agent delegating the task" }),
155
+ toAgent: Type.String({ description: "Name of the agent receiving the task" }),
156
+ task: Type.String({ description: "Description of the task" }),
157
+ context: Type.Optional(Type.String({ description: "Additional context" })),
158
+ collaborationId: Type.Optional(Type.String({ description: "ID of collaboration if part of one" })),
159
+ });
160
+
161
+ const AgencyGetStatsSchema = Type.Object({});
162
+
163
+ const plugin: PoolBotPluginDefinition = {
164
+ id: "agency-agents",
165
+ name: "Agency Agents",
166
+ description: "AI Specialists for PoolBot - Frontend, Backend, DevOps, Design, Marketing, and more",
167
+
168
+ register(api: PoolBotPluginApi) {
169
+ api.logger.info("[agency-agents] Registering plugin...");
170
+
171
+ const service = new AgencyAgentsService();
172
+ const agentsDir = path.join(__dirname, "..", "agents");
173
+ const agentDefs = loadAgentsFromDirectory(agentsDir);
174
+
175
+ for (const def of agentDefs) {
176
+ const agent: AgencyAgent = {
177
+ ...def,
178
+ capabilities: extractCapabilities(def.content),
179
+ };
180
+ service.registerAgent(agent);
181
+ }
182
+
183
+ api.logger.info(`[agency-agents] Loaded ${agentDefs.length} agency agents`);
184
+
185
+ api.registerTool({
186
+ name: "agency_list_agents",
187
+ label: "List Agency Agents",
188
+ description: "List all available AI specialist agents in the agency",
189
+ parameters: AgencyListAgentsSchema,
190
+ async execute(_toolCallId, args) {
191
+ const agents = service.listAgents(args.category as string | undefined);
192
+
193
+ const result = {
194
+ success: true,
195
+ count: agents.length,
196
+ agents: agents.map(a => ({
197
+ name: a.name,
198
+ description: a.description,
199
+ category: a.category,
200
+ color: a.color,
201
+ capabilities: a.capabilities?.slice(0, 5),
202
+ })),
203
+ };
204
+
205
+ return {
206
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
207
+ details: result,
208
+ };
209
+ },
210
+ });
211
+
212
+ api.registerTool({
213
+ name: "agency_get_agent",
214
+ label: "Get Agent Details",
215
+ description: "Get detailed information about a specific agent including their personality and capabilities",
216
+ parameters: AgencyGetAgentSchema,
217
+ async execute(_toolCallId, args) {
218
+ const agent = service.getAgent(args.name as string);
219
+
220
+ if (!agent) {
221
+ const result = {
222
+ success: false,
223
+ error: `Agent '${args.name}' not found. Use agency_list_agents to see available agents.`,
224
+ };
225
+ return {
226
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
227
+ details: result,
228
+ };
229
+ }
230
+
231
+ const result = {
232
+ success: true,
233
+ agent: {
234
+ name: agent.name,
235
+ description: agent.description,
236
+ category: agent.category,
237
+ color: agent.color,
238
+ capabilities: agent.capabilities,
239
+ personality: agent.content.slice(0, 3000) + (agent.content.length > 3000 ? "..." : ""),
240
+ },
241
+ };
242
+
243
+ return {
244
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
245
+ details: result,
246
+ };
247
+ },
248
+ });
249
+
250
+ api.registerTool({
251
+ name: "agency_activate_agent",
252
+ label: "Activate Agent",
253
+ description: "Activate an agent to work on a specific task with their full personality and expertise",
254
+ parameters: AgencyActivateAgentSchema,
255
+ async execute(_toolCallId, args) {
256
+ const systemPrompt = service.generateSystemPrompt(
257
+ args.name as string,
258
+ args.task as string,
259
+ args.context as string | undefined
260
+ );
261
+
262
+ if (!systemPrompt) {
263
+ const result = {
264
+ success: false,
265
+ error: `Agent '${args.name}' not found. Use agency_list_agents to see available agents.`,
266
+ };
267
+ return {
268
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
269
+ details: result,
270
+ };
271
+ }
272
+
273
+ const agent = service.getAgent(args.name as string);
274
+
275
+ const result = {
276
+ success: true,
277
+ activated: true,
278
+ agent: {
279
+ name: agent!.name,
280
+ category: agent!.category,
281
+ color: agent!.color,
282
+ },
283
+ systemPrompt,
284
+ message: `${agent!.name} is now activated and ready to work on: ${args.task}`,
285
+ };
286
+
287
+ return {
288
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
289
+ details: result,
290
+ };
291
+ },
292
+ });
293
+
294
+ api.registerTool({
295
+ name: "agency_find_agent",
296
+ label: "Find Agent",
297
+ description: "Find the best agent for a specific task or requirement",
298
+ parameters: AgencyFindAgentSchema,
299
+ async execute(_toolCallId, args) {
300
+ const scored = service.findAgentsForTask(args.task as string);
301
+ const topMatches = scored.slice(0, 5).filter(s => s.score > 0);
302
+
303
+ const result = {
304
+ success: true,
305
+ task: args.task,
306
+ recommendations: topMatches.map(({ agent, score }) => ({
307
+ name: agent.name,
308
+ description: agent.description,
309
+ category: agent.category,
310
+ matchScore: score,
311
+ })),
312
+ };
313
+
314
+ return {
315
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
316
+ details: result,
317
+ };
318
+ },
319
+ });
320
+
321
+ api.registerTool({
322
+ name: "agency_get_workflow",
323
+ label: "Get Workflow",
324
+ description: "Get a predefined workflow or playbook from the strategy division",
325
+ parameters: AgencyGetWorkflowSchema,
326
+ async execute(_toolCallId, args) {
327
+ const workflowsDir = path.join(agentsDir, "..", "strategy");
328
+ const files = [
329
+ path.join(workflowsDir, "playbooks", `${args.name}.md`),
330
+ path.join(workflowsDir, "runbooks", `scenario-${args.name}.md`),
331
+ path.join(workflowsDir, "coordination", `${args.name}.md`),
332
+ ];
333
+
334
+ for (const file of files) {
335
+ if (fs.existsSync(file)) {
336
+ const content = fs.readFileSync(file, "utf-8");
337
+ const result = {
338
+ success: true,
339
+ workflow: args.name,
340
+ content: content.slice(0, 5000) + (content.length > 5000 ? "..." : ""),
341
+ };
342
+ return {
343
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
344
+ details: result,
345
+ };
346
+ }
347
+ }
348
+
349
+ const result = {
350
+ success: false,
351
+ error: `Workflow '${args.name}' not found. Available workflows include: phase-0-discovery, phase-1-strategy, phase-2-foundation, phase-3-build, phase-4-hardening, phase-5-launch, phase-6-operate, startup-mvp, enterprise-feature, marketing-campaign, incident-response`,
352
+ };
353
+
354
+ return {
355
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
356
+ details: result,
357
+ };
358
+ },
359
+ });
360
+
361
+ api.registerTool({
362
+ name: "agency_create_task",
363
+ label: "Create Agent Task",
364
+ description: "Create a new task for an agent",
365
+ parameters: AgencyCreateTaskSchema,
366
+ async execute(_toolCallId, args) {
367
+ const task = service.createTask(
368
+ args.agentName as string,
369
+ args.task as string,
370
+ args.context as string | undefined,
371
+ args.parentTaskId as string | undefined
372
+ );
373
+
374
+ const result = {
375
+ success: true,
376
+ task: {
377
+ id: task.id,
378
+ agentName: task.agentName,
379
+ task: task.task,
380
+ status: task.status,
381
+ createdAt: task.createdAt,
382
+ },
383
+ };
384
+
385
+ return {
386
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
387
+ details: result,
388
+ };
389
+ },
390
+ });
391
+
392
+ api.registerTool({
393
+ name: "agency_get_task",
394
+ label: "Get Task Details",
395
+ description: "Get details of a specific task",
396
+ parameters: AgencyGetTaskSchema,
397
+ async execute(_toolCallId, args) {
398
+ const task = service.getTask(args.taskId as string);
399
+
400
+ if (!task) {
401
+ const result = {
402
+ success: false,
403
+ error: `Task '${args.taskId}' not found.`,
404
+ };
405
+ return {
406
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
407
+ details: result,
408
+ };
409
+ }
410
+
411
+ const result = {
412
+ success: true,
413
+ task,
414
+ };
415
+
416
+ return {
417
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
418
+ details: result,
419
+ };
420
+ },
421
+ });
422
+
423
+ api.registerTool({
424
+ name: "agency_update_task",
425
+ label: "Update Task",
426
+ description: "Update task status and output",
427
+ parameters: AgencyUpdateTaskSchema,
428
+ async execute(_toolCallId, args) {
429
+ const task = service.updateTaskStatus(
430
+ args.taskId as string,
431
+ args.status as AgentTask["status"],
432
+ args.output as string | undefined
433
+ );
434
+
435
+ if (!task) {
436
+ const result = {
437
+ success: false,
438
+ error: `Task '${args.taskId}' not found.`,
439
+ };
440
+ return {
441
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
442
+ details: result,
443
+ };
444
+ }
445
+
446
+ const result = {
447
+ success: true,
448
+ task,
449
+ };
450
+
451
+ return {
452
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
453
+ details: result,
454
+ };
455
+ },
456
+ });
457
+
458
+ api.registerTool({
459
+ name: "agency_list_tasks",
460
+ label: "List Tasks",
461
+ description: "List all tasks with optional filtering",
462
+ parameters: AgencyListTasksSchema,
463
+ async execute(_toolCallId, args) {
464
+ const tasks = service.listTasks(
465
+ args.agentName as string | undefined,
466
+ args.status as AgentTask["status"] | undefined
467
+ );
468
+
469
+ const result = {
470
+ success: true,
471
+ count: tasks.length,
472
+ tasks: tasks.map(t => ({
473
+ id: t.id,
474
+ agentName: t.agentName,
475
+ task: t.task,
476
+ status: t.status,
477
+ createdAt: t.createdAt,
478
+ updatedAt: t.updatedAt,
479
+ })),
480
+ };
481
+
482
+ return {
483
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
484
+ details: result,
485
+ };
486
+ },
487
+ });
488
+
489
+ api.registerTool({
490
+ name: "agency_create_collaboration",
491
+ label: "Create Collaboration",
492
+ description: "Create a new multi-agent collaboration project",
493
+ parameters: AgencyCreateCollaborationSchema,
494
+ async execute(_toolCallId, args) {
495
+ const collaboration = service.createCollaboration(
496
+ args.name as string,
497
+ args.description as string,
498
+ args.leadAgent as string,
499
+ args.participatingAgents as string[]
500
+ );
501
+
502
+ const result = {
503
+ success: true,
504
+ collaboration: {
505
+ id: collaboration.id,
506
+ name: collaboration.name,
507
+ description: collaboration.description,
508
+ leadAgent: collaboration.leadAgent,
509
+ participatingAgents: collaboration.participatingAgents,
510
+ status: collaboration.status,
511
+ createdAt: collaboration.createdAt,
512
+ },
513
+ };
514
+
515
+ return {
516
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
517
+ details: result,
518
+ };
519
+ },
520
+ });
521
+
522
+ api.registerTool({
523
+ name: "agency_get_collaboration",
524
+ label: "Get Collaboration",
525
+ description: "Get details of a collaboration project",
526
+ parameters: AgencyGetCollaborationSchema,
527
+ async execute(_toolCallId, args) {
528
+ const collaboration = service.getCollaboration(args.collaborationId as string);
529
+
530
+ if (!collaboration) {
531
+ const result = {
532
+ success: false,
533
+ error: `Collaboration '${args.collaborationId}' not found.`,
534
+ };
535
+ return {
536
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
537
+ details: result,
538
+ };
539
+ }
540
+
541
+ const result = {
542
+ success: true,
543
+ collaboration,
544
+ };
545
+
546
+ return {
547
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
548
+ details: result,
549
+ };
550
+ },
551
+ });
552
+
553
+ api.registerTool({
554
+ name: "agency_add_task_to_collaboration",
555
+ label: "Add Task to Collaboration",
556
+ description: "Add a new task to an existing collaboration",
557
+ parameters: AgencyAddTaskToCollaborationSchema,
558
+ async execute(_toolCallId, args) {
559
+ const task = service.createTask(
560
+ args.agentName as string,
561
+ args.task as string,
562
+ args.context as string | undefined
563
+ );
564
+
565
+ service.addTaskToCollaboration(args.collaborationId as string, task);
566
+
567
+ const result = {
568
+ success: true,
569
+ task,
570
+ };
571
+
572
+ return {
573
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
574
+ details: result,
575
+ };
576
+ },
577
+ });
578
+
579
+ api.registerTool({
580
+ name: "agency_send_message",
581
+ label: "Send Agent Message",
582
+ description: "Send a message between agents in a collaboration",
583
+ parameters: AgencySendMessageSchema,
584
+ async execute(_toolCallId, args) {
585
+ const message = service.createMessage(
586
+ args.fromAgent as string,
587
+ args.toAgent as string,
588
+ args.collaborationId as string,
589
+ args.content as string,
590
+ (args.type as AgentMessage["type"]) || "update"
591
+ );
592
+
593
+ const result = {
594
+ success: true,
595
+ message,
596
+ };
597
+
598
+ return {
599
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
600
+ details: result,
601
+ };
602
+ },
603
+ });
604
+
605
+ api.registerTool({
606
+ name: "agency_get_messages",
607
+ label: "Get Collaboration Messages",
608
+ description: "Get all messages in a collaboration",
609
+ parameters: AgencyGetMessagesSchema,
610
+ async execute(_toolCallId, args) {
611
+ const messages = service.getMessagesForCollaboration(args.collaborationId as string);
612
+
613
+ const result = {
614
+ success: true,
615
+ count: messages.length,
616
+ messages,
617
+ };
618
+
619
+ return {
620
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
621
+ details: result,
622
+ };
623
+ },
624
+ });
625
+
626
+ api.registerTool({
627
+ name: "agency_create_review",
628
+ label: "Create Review",
629
+ description: "Create a code/design review for a task",
630
+ parameters: AgencyCreateReviewSchema,
631
+ async execute(_toolCallId, args) {
632
+ const review = service.createReview(
633
+ args.taskId as string,
634
+ args.reviewerAgent as string,
635
+ args.revieweeAgent as string,
636
+ args.feedback as string,
637
+ args.approvalStatus as AgentReview["approvalStatus"],
638
+ args.suggestions as string[] | undefined
639
+ );
640
+
641
+ const result = {
642
+ success: true,
643
+ review,
644
+ };
645
+
646
+ return {
647
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
648
+ details: result,
649
+ };
650
+ },
651
+ });
652
+
653
+ api.registerTool({
654
+ name: "agency_delegate_task",
655
+ label: "Delegate Task",
656
+ description: "Delegate a task from one agent to another",
657
+ parameters: AgencyDelegateTaskSchema,
658
+ async execute(_toolCallId, args) {
659
+ const task = service.createTask(
660
+ args.toAgent as string,
661
+ args.task as string,
662
+ args.context as string | undefined
663
+ );
664
+
665
+ if (args.collaborationId) {
666
+ service.addTaskToCollaboration(args.collaborationId as string, task);
667
+ }
668
+
669
+ const result = {
670
+ success: true,
671
+ delegated: true,
672
+ fromAgent: args.fromAgent,
673
+ toAgent: args.toAgent,
674
+ task,
675
+ };
676
+
677
+ return {
678
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
679
+ details: result,
680
+ };
681
+ },
682
+ });
683
+
684
+ api.registerTool({
685
+ name: "agency_get_stats",
686
+ label: "Get Agency Stats",
687
+ description: "Get statistics about the agency",
688
+ parameters: AgencyGetStatsSchema,
689
+ async execute(_toolCallId, _args) {
690
+ const stats = service.getStats();
691
+
692
+ const result = {
693
+ success: true,
694
+ stats,
695
+ };
696
+
697
+ return {
698
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
699
+ details: result,
700
+ };
701
+ },
702
+ });
703
+
704
+ api.logger.info("[agency-agents] Plugin registered successfully with 17 tools");
705
+ },
706
+ };
707
+
708
+ function extractCapabilities(content: string): string[] {
709
+ const capabilities: string[] = [];
710
+ const lines = content.split("\n");
711
+ let inCapabilities = false;
712
+
713
+ for (const line of lines) {
714
+ if (line.match(/^##?\s*(Capabilities|Skills|Expertise)/i)) {
715
+ inCapabilities = true;
716
+ continue;
717
+ }
718
+ if (inCapabilities) {
719
+ if (line.match(/^##?\s/)) {
720
+ inCapabilities = false;
721
+ continue;
722
+ }
723
+ const match = line.match(/^[-*]\s*(.+)/);
724
+ if (match) {
725
+ capabilities.push(match[1].trim());
726
+ }
727
+ }
728
+ }
729
+
730
+ return capabilities;
731
+ }
732
+
733
+ export default plugin;