@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,227 @@
1
+ # XYOps Extension for PoolBot
2
+
3
+ Workflow automation and job scheduling integration for PoolBot. Connect to XYOps servers to manage jobs, schedules, and monitor execution events.
4
+
5
+ ## Features
6
+
7
+ - **Job Management**: Create, update, delete, and list automation jobs
8
+ - **Schedule Management**: Cron-based scheduling with enable/disable controls
9
+ - **Event Monitoring**: Track job execution status and output
10
+ - **System Health**: Monitor XYOps server status and version
11
+ - **Type-Safe API**: Full TypeScript support with comprehensive types
12
+
13
+ ## Installation
14
+
15
+ ```bash
16
+ # Install as PoolBot extension
17
+ poolbot extension install @poolbot/xyops
18
+
19
+ # Or manual installation
20
+ cd extensions/xyops
21
+ pnpm install
22
+ pnpm build
23
+ ```
24
+
25
+ ## Configuration
26
+
27
+ Add to your PoolBot configuration:
28
+
29
+ ```json
30
+ {
31
+ "xyops": {
32
+ "baseUrl": "http://localhost:8080",
33
+ "apiKey": "${XYOPS_API_KEY}",
34
+ "timeout": 30000
35
+ }
36
+ }
37
+ ```
38
+
39
+ ## Usage
40
+
41
+ ### Initialize Client
42
+
43
+ ```typescript
44
+ import { XYOpsClient } from '@poolbot/xyops'
45
+
46
+ const client = new XYOpsClient({
47
+ baseUrl: 'http://localhost:8080',
48
+ apiKey: 'your-api-key',
49
+ timeout: 30000
50
+ })
51
+ ```
52
+
53
+ ### Job Management
54
+
55
+ ```typescript
56
+ // Create a job
57
+ const job = await client.createJob({
58
+ title: 'Daily Backup',
59
+ category: 'maintenance',
60
+ plugin: 'backup-plugin',
61
+ params: { target: '/data', destination: '/backup' },
62
+ enabled: true
63
+ })
64
+
65
+ // List all jobs
66
+ const jobs = await client.listJobs()
67
+
68
+ // Get job details
69
+ const jobDetails = await client.getJob(job.id)
70
+
71
+ // Update job
72
+ await client.updateJob(job.id, {
73
+ title: 'Daily Backup - Updated',
74
+ enabled: false
75
+ })
76
+
77
+ // Delete job
78
+ await client.deleteJob(job.id)
79
+ ```
80
+
81
+ ### Schedule Management
82
+
83
+ ```typescript
84
+ // Create a schedule (runs daily at 2 AM)
85
+ const schedule = await client.createSchedule({
86
+ jobId: job.id,
87
+ cron: '0 2 * * *',
88
+ enabled: true
89
+ })
90
+
91
+ // List schedules for a job
92
+ const schedules = await client.listSchedules(job.id)
93
+
94
+ // Update schedule
95
+ await client.updateSchedule(schedule.id, {
96
+ cron: '0 3 * * *',
97
+ enabled: false
98
+ })
99
+
100
+ // Delete schedule
101
+ await client.deleteSchedule(schedule.id)
102
+ ```
103
+
104
+ ### Event Monitoring
105
+
106
+ ```typescript
107
+ // List events for a job
108
+ const events = await client.listEvents(job.id)
109
+
110
+ // Get specific event
111
+ const event = await client.getEvent(eventId)
112
+
113
+ // Stream events (real-time updates)
114
+ const eventStream = client.streamEvents()
115
+ for await (const event of eventStream) {
116
+ console.log(`Event ${event.id}: ${event.status}`)
117
+ }
118
+ ```
119
+
120
+ ### System Operations
121
+
122
+ ```typescript
123
+ // Get server info
124
+ const info = await client.getInfo()
125
+ console.log(`XYOps version: ${info.version}`)
126
+
127
+ // Health check
128
+ const health = await client.healthCheck()
129
+ console.log(`Status: ${health.status}`)
130
+ ```
131
+
132
+ ## Data Types
133
+
134
+ ### XYOpsJob
135
+
136
+ ```typescript
137
+ interface XYOpsJob {
138
+ id: string
139
+ title: string
140
+ category: string
141
+ plugin: string
142
+ params: Record<string, unknown>
143
+ enabled: boolean
144
+ created: number
145
+ modified: number
146
+ }
147
+ ```
148
+
149
+ ### XYOpsSchedule
150
+
151
+ ```typescript
152
+ interface XYOpsSchedule {
153
+ id: string
154
+ jobId: string
155
+ cron: string
156
+ enabled: boolean
157
+ created: number
158
+ }
159
+ ```
160
+
161
+ ### XYOpsEvent
162
+
163
+ ```typescript
164
+ interface XYOpsEvent {
165
+ id: string
166
+ jobId: string
167
+ status: 'pending' | 'running' | 'success' | 'error' | 'aborted'
168
+ startTime: number
169
+ endTime?: number
170
+ output?: string
171
+ error?: string
172
+ }
173
+ ```
174
+
175
+ ## Error Handling
176
+
177
+ ```typescript
178
+ import { XYOpsError } from '@poolbot/xyops'
179
+
180
+ try {
181
+ await client.getJob('invalid-id')
182
+ } catch (error) {
183
+ if (error instanceof XYOpsError) {
184
+ console.log(`XYOps Error: ${error.message}`)
185
+ console.log(`Status: ${error.statusCode}`)
186
+ }
187
+ }
188
+ ```
189
+
190
+ ## Testing
191
+
192
+ ```bash
193
+ # Run all tests
194
+ pnpm test
195
+
196
+ # Watch mode
197
+ pnpm test:watch
198
+
199
+ # Coverage
200
+ pnpm test:coverage
201
+ ```
202
+
203
+ ## API Reference
204
+
205
+ ### XYOpsClient
206
+
207
+ | Method | Description |
208
+ |--------|-------------|
209
+ | `createJob(job)` | Create a new job |
210
+ | `getJob(id)` | Get job by ID |
211
+ | `updateJob(id, updates)` | Update job fields |
212
+ | `deleteJob(id)` | Delete a job |
213
+ | `listJobs()` | List all jobs |
214
+ | `createSchedule(schedule)` | Create a schedule |
215
+ | `getSchedule(id)` | Get schedule by ID |
216
+ | `updateSchedule(id, updates)` | Update schedule |
217
+ | `deleteSchedule(id)` | Delete a schedule |
218
+ | `listSchedules(jobId)` | List schedules for job |
219
+ | `listEvents(jobId)` | List events for job |
220
+ | `getEvent(id)` | Get event by ID |
221
+ | `streamEvents()` | Stream real-time events |
222
+ | `getInfo()` | Get server info |
223
+ | `healthCheck()` | Check server health |
224
+
225
+ ## License
226
+
227
+ MIT
@@ -0,0 +1,342 @@
1
+ /**
2
+ * XYOps Plugin for PoolBot
3
+ *
4
+ * Professional integration of XYOps workflow automation capabilities
5
+ * into PoolBot's native infrastructure.
6
+ */
7
+
8
+ import type { PoolBotPluginDefinition, PoolBotPluginApi } from "../../src/plugins/types.js";
9
+ import type { AgentToolResult } from "@mariozechner/pi-agent-core";
10
+ import { XYOpsClient } from "./src/client.js";
11
+
12
+ export default {
13
+ id: "xyops",
14
+ name: "XYOps",
15
+ version: "1.0.0",
16
+ description: "XYOps workflow automation integration for PoolBot",
17
+
18
+ async register(api: PoolBotPluginApi) {
19
+ const logger = api.logger;
20
+ const pluginCfg = (api.pluginConfig ?? {}) as { baseUrl?: string; apiKey?: string };
21
+ const config = {
22
+ baseUrl: pluginCfg.baseUrl ?? "http://localhost:3012",
23
+ apiKey: pluginCfg.apiKey ?? process.env.XYOPS_API_KEY,
24
+ };
25
+
26
+ const client = new XYOpsClient(config);
27
+ logger.info(`[xyops] Client initialized: ${config.baseUrl}`);
28
+
29
+ // Register tools
30
+ api.registerTool({
31
+ name: "xyops_list_jobs",
32
+ label: "List XYOps Jobs",
33
+ description: "List all jobs in XYOps",
34
+ parameters: {
35
+ type: "object",
36
+ properties: {
37
+ offset: { type: "number", description: "Pagination offset" },
38
+ limit: { type: "number", description: "Pagination limit" },
39
+ },
40
+ },
41
+ async execute(_toolCallId, args): Promise<AgentToolResult<unknown>> {
42
+ const jobs = await client.listJobs(
43
+ (args.offset as number) ?? 0,
44
+ (args.limit as number) ?? 50
45
+ );
46
+ return {
47
+ content: [{ type: "text", text: JSON.stringify(jobs, null, 2) }],
48
+ details: jobs,
49
+ };
50
+ },
51
+ });
52
+
53
+ api.registerTool({
54
+ name: "xyops_get_job",
55
+ label: "Get XYOps Job",
56
+ description: "Get job details by ID",
57
+ parameters: {
58
+ type: "object",
59
+ properties: {
60
+ jobId: { type: "string", description: "Job ID" },
61
+ },
62
+ required: ["jobId"],
63
+ },
64
+ async execute(_toolCallId, args): Promise<AgentToolResult<unknown>> {
65
+ const job = await client.getJob(args.jobId as string);
66
+ return {
67
+ content: [{ type: "text", text: JSON.stringify(job, null, 2) }],
68
+ details: job,
69
+ };
70
+ },
71
+ });
72
+
73
+ api.registerTool({
74
+ name: "xyops_create_job",
75
+ label: "Create XYOps Job",
76
+ description: "Create a new XYOps job",
77
+ parameters: {
78
+ type: "object",
79
+ properties: {
80
+ title: { type: "string", description: "Job title" },
81
+ category: { type: "string", description: "Job category" },
82
+ plugin: { type: "string", description: "Plugin to use" },
83
+ params: { type: "object", description: "Job parameters" },
84
+ enabled: { type: "boolean", description: "Whether job is enabled" },
85
+ },
86
+ required: ["title", "category", "plugin"],
87
+ },
88
+ async execute(_toolCallId, args): Promise<AgentToolResult<unknown>> {
89
+ const job = await client.createJob({
90
+ title: args.title as string,
91
+ category: args.category as string,
92
+ plugin: args.plugin as string,
93
+ params: (args.params as Record<string, unknown>) ?? {},
94
+ enabled: (args.enabled as boolean) ?? true,
95
+ });
96
+ return {
97
+ content: [{ type: "text", text: JSON.stringify(job, null, 2) }],
98
+ details: job,
99
+ };
100
+ },
101
+ });
102
+
103
+ api.registerTool({
104
+ name: "xyops_update_job",
105
+ label: "Update XYOps Job",
106
+ description: "Update an existing XYOps job",
107
+ parameters: {
108
+ type: "object",
109
+ properties: {
110
+ jobId: { type: "string", description: "Job ID" },
111
+ title: { type: "string" },
112
+ category: { type: "string" },
113
+ plugin: { type: "string" },
114
+ params: { type: "object" },
115
+ enabled: { type: "boolean" },
116
+ },
117
+ required: ["jobId"],
118
+ },
119
+ async execute(_toolCallId, args): Promise<AgentToolResult<unknown>> {
120
+ const { jobId, ...updates } = args;
121
+ const job = await client.updateJob(jobId as string, updates);
122
+ return {
123
+ content: [{ type: "text", text: JSON.stringify(job, null, 2) }],
124
+ details: job,
125
+ };
126
+ },
127
+ });
128
+
129
+ api.registerTool({
130
+ name: "xyops_delete_job",
131
+ label: "Delete XYOps Job",
132
+ description: "Delete a job from XYOps",
133
+ parameters: {
134
+ type: "object",
135
+ properties: {
136
+ jobId: { type: "string", description: "Job ID to delete" },
137
+ },
138
+ required: ["jobId"],
139
+ },
140
+ async execute(_toolCallId, args): Promise<AgentToolResult<unknown>> {
141
+ await client.deleteJob(args.jobId as string);
142
+ const result = { success: true, jobId: args.jobId };
143
+ return {
144
+ content: [{ type: "text", text: JSON.stringify(result) }],
145
+ details: result,
146
+ };
147
+ },
148
+ });
149
+
150
+ api.registerTool({
151
+ name: "xyops_run_job",
152
+ label: "Run XYOps Job",
153
+ description: "Run a job immediately",
154
+ parameters: {
155
+ type: "object",
156
+ properties: {
157
+ jobId: { type: "string", description: "Job ID to run" },
158
+ params: { type: "object", description: "Optional runtime parameters" },
159
+ },
160
+ required: ["jobId"],
161
+ },
162
+ async execute(_toolCallId, args): Promise<AgentToolResult<unknown>> {
163
+ const result = await client.runJob(
164
+ args.jobId as string,
165
+ (args.params as Record<string, unknown>) ?? undefined
166
+ );
167
+ return {
168
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
169
+ details: result,
170
+ };
171
+ },
172
+ });
173
+
174
+ api.registerTool({
175
+ name: "xyops_list_schedules",
176
+ label: "List XYOps Schedules",
177
+ description: "List job schedules",
178
+ parameters: {
179
+ type: "object",
180
+ properties: {
181
+ jobId: { type: "string", description: "Filter by job ID" },
182
+ },
183
+ },
184
+ async execute(_toolCallId, args): Promise<AgentToolResult<unknown>> {
185
+ const schedules = await client.listSchedules(args.jobId as string | undefined);
186
+ return {
187
+ content: [{ type: "text", text: JSON.stringify(schedules, null, 2) }],
188
+ details: schedules,
189
+ };
190
+ },
191
+ });
192
+
193
+ api.registerTool({
194
+ name: "xyops_create_schedule",
195
+ label: "Create XYOps Schedule",
196
+ description: "Create a schedule for a job",
197
+ parameters: {
198
+ type: "object",
199
+ properties: {
200
+ jobId: { type: "string", description: "Job ID" },
201
+ cron: { type: "string", description: "Cron expression" },
202
+ enabled: { type: "boolean", description: "Whether schedule is active" },
203
+ },
204
+ required: ["jobId", "cron"],
205
+ },
206
+ async execute(_toolCallId, args): Promise<AgentToolResult<unknown>> {
207
+ const schedule = await client.createSchedule({
208
+ jobId: args.jobId as string,
209
+ cron: args.cron as string,
210
+ enabled: (args.enabled as boolean) ?? true,
211
+ });
212
+ return {
213
+ content: [{ type: "text", text: JSON.stringify(schedule, null, 2) }],
214
+ details: schedule,
215
+ };
216
+ },
217
+ });
218
+
219
+ api.registerTool({
220
+ name: "xyops_delete_schedule",
221
+ label: "Delete XYOps Schedule",
222
+ description: "Delete a schedule",
223
+ parameters: {
224
+ type: "object",
225
+ properties: {
226
+ scheduleId: { type: "string", description: "Schedule ID" },
227
+ },
228
+ required: ["scheduleId"],
229
+ },
230
+ async execute(_toolCallId, args): Promise<AgentToolResult<unknown>> {
231
+ await client.deleteSchedule(args.scheduleId as string);
232
+ const result = { success: true, scheduleId: args.scheduleId };
233
+ return {
234
+ content: [{ type: "text", text: JSON.stringify(result) }],
235
+ details: result,
236
+ };
237
+ },
238
+ });
239
+
240
+ api.registerTool({
241
+ name: "xyops_list_events",
242
+ label: "List XYOps Events",
243
+ description: "List job execution events",
244
+ parameters: {
245
+ type: "object",
246
+ properties: {
247
+ jobId: { type: "string", description: "Filter by job ID" },
248
+ limit: { type: "number", description: "Number of events to return" },
249
+ offset: { type: "number", description: "Pagination offset" },
250
+ },
251
+ },
252
+ async execute(_toolCallId, args): Promise<AgentToolResult<unknown>> {
253
+ const events = await client.listEvents(
254
+ args.jobId as string | undefined,
255
+ (args.limit as number) ?? 50,
256
+ (args.offset as number) ?? 0
257
+ );
258
+ return {
259
+ content: [{ type: "text", text: JSON.stringify(events, null, 2) }],
260
+ details: events,
261
+ };
262
+ },
263
+ });
264
+
265
+ api.registerTool({
266
+ name: "xyops_get_event",
267
+ label: "Get XYOps Event",
268
+ description: "Get event details",
269
+ parameters: {
270
+ type: "object",
271
+ properties: {
272
+ eventId: { type: "string", description: "Event ID" },
273
+ },
274
+ required: ["eventId"],
275
+ },
276
+ async execute(_toolCallId, args): Promise<AgentToolResult<unknown>> {
277
+ const event = await client.getEvent(args.eventId as string);
278
+ return {
279
+ content: [{ type: "text", text: JSON.stringify(event, null, 2) }],
280
+ details: event,
281
+ };
282
+ },
283
+ });
284
+
285
+ api.registerTool({
286
+ name: "xyops_abort_event",
287
+ label: "Abort XYOps Event",
288
+ description: "Abort a running event",
289
+ parameters: {
290
+ type: "object",
291
+ properties: {
292
+ eventId: { type: "string", description: "Event ID to abort" },
293
+ },
294
+ required: ["eventId"],
295
+ },
296
+ async execute(_toolCallId, args): Promise<AgentToolResult<unknown>> {
297
+ await client.abortEvent(args.eventId as string);
298
+ const result = { success: true, eventId: args.eventId };
299
+ return {
300
+ content: [{ type: "text", text: JSON.stringify(result) }],
301
+ details: result,
302
+ };
303
+ },
304
+ });
305
+
306
+ api.registerTool({
307
+ name: "xyops_get_status",
308
+ label: "Get XYOps Status",
309
+ description: "Get XYOps system status",
310
+ parameters: {
311
+ type: "object",
312
+ properties: {},
313
+ },
314
+ async execute(_toolCallId): Promise<AgentToolResult<unknown>> {
315
+ const status = await client.getStatus();
316
+ return {
317
+ content: [{ type: "text", text: JSON.stringify(status, null, 2) }],
318
+ details: status,
319
+ };
320
+ },
321
+ });
322
+
323
+ api.registerTool({
324
+ name: "xyops_list_plugins",
325
+ label: "List XYOps Plugins",
326
+ description: "List available XYOps plugins",
327
+ parameters: {
328
+ type: "object",
329
+ properties: {},
330
+ },
331
+ async execute(_toolCallId): Promise<AgentToolResult<unknown>> {
332
+ const plugins = await client.listPlugins();
333
+ return {
334
+ content: [{ type: "text", text: JSON.stringify(plugins, null, 2) }],
335
+ details: plugins,
336
+ };
337
+ },
338
+ });
339
+
340
+ logger.info("[xyops] Extension registered with 14 tools");
341
+ },
342
+ } satisfies PoolBotPluginDefinition;
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/jiti@2.6.1/node_modules/jiti/lib/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/jiti@2.6.1/node_modules/jiti/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/jiti@2.6.1/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/jiti@2.6.1/node_modules/jiti/lib/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/jiti@2.6.1/node_modules/jiti/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/jiti@2.6.1/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../../../../node_modules/.pnpm/jiti@2.6.1/node_modules/jiti/lib/jiti-cli.mjs" "$@"
19
+ else
20
+ exec node "$basedir/../../../../node_modules/.pnpm/jiti@2.6.1/node_modules/jiti/lib/jiti-cli.mjs" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../typescript/bin/tsc" "$@"
19
+ else
20
+ exec node "$basedir/../typescript/bin/tsc" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../typescript/bin/tsserver" "$@"
19
+ else
20
+ exec node "$basedir/../typescript/bin/tsserver" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/tsx@4.21.0/node_modules/tsx/dist/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/tsx@4.21.0/node_modules/tsx/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/tsx@4.21.0/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/tsx@4.21.0/node_modules/tsx/dist/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/tsx@4.21.0/node_modules/tsx/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/tsx@4.21.0/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../../../../node_modules/.pnpm/tsx@4.21.0/node_modules/tsx/dist/cli.mjs" "$@"
19
+ else
20
+ exec node "$basedir/../../../../node_modules/.pnpm/tsx@4.21.0/node_modules/tsx/dist/cli.mjs" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/vitest@3.2.4_@types+node@22.19.15_@vitest+browser@4.0.18_vite@7.3.1_@types+node@25.2.3__6cb5e51e836830cd2cffacfc8438d429/node_modules/vitest/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/vitest@3.2.4_@types+node@22.19.15_@vitest+browser@4.0.18_vite@7.3.1_@types+node@25.2.3__6cb5e51e836830cd2cffacfc8438d429/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/vitest@3.2.4_@types+node@22.19.15_@vitest+browser@4.0.18_vite@7.3.1_@types+node@25.2.3__6cb5e51e836830cd2cffacfc8438d429/node_modules/vitest/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/vitest@3.2.4_@types+node@22.19.15_@vitest+browser@4.0.18_vite@7.3.1_@types+node@25.2.3__6cb5e51e836830cd2cffacfc8438d429/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../vitest/vitest.mjs" "$@"
19
+ else
20
+ exec node "$basedir/../vitest/vitest.mjs" "$@"
21
+ fi