octo-vec 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/README.md +646 -0
  2. package/core/prompts/architect.md +124 -0
  3. package/core/prompts/ba.md +117 -0
  4. package/core/prompts/backend.md +154 -0
  5. package/core/prompts/compliance.md +127 -0
  6. package/core/prompts/dataanalyst.md +126 -0
  7. package/core/prompts/dataengineer.md +155 -0
  8. package/core/prompts/dba.md +155 -0
  9. package/core/prompts/designer.md +145 -0
  10. package/core/prompts/dev.md +148 -0
  11. package/core/prompts/devops.md +127 -0
  12. package/core/prompts/frontend.md +151 -0
  13. package/core/prompts/mlengineer.md +156 -0
  14. package/core/prompts/mobile.md +155 -0
  15. package/core/prompts/pm.md +182 -0
  16. package/core/prompts/productowner.md +122 -0
  17. package/core/prompts/qa.md +135 -0
  18. package/core/prompts/releasemanager.md +138 -0
  19. package/core/prompts/researcher.md +122 -0
  20. package/core/prompts/scrummaster.md +125 -0
  21. package/core/prompts/security.md +127 -0
  22. package/core/prompts/sre.md +141 -0
  23. package/core/prompts/support.md +138 -0
  24. package/core/prompts/techwriter.md +123 -0
  25. package/core/roster.json +1161 -0
  26. package/dashboard/dist/assets/index--L-aFRgh.css +1 -0
  27. package/dashboard/dist/assets/index-BoOVmAFf.js +523 -0
  28. package/dashboard/dist/icons/integrations/gitleaks.svg +6 -0
  29. package/dashboard/dist/icons/integrations/searxng.svg +5 -0
  30. package/dashboard/dist/icons/integrations/semgrep.svg +4 -0
  31. package/dashboard/dist/icons/integrations/slack.svg +6 -0
  32. package/dashboard/dist/icons/integrations/sonarqube.svg +5 -0
  33. package/dashboard/dist/icons/integrations/telegram.svg +4 -0
  34. package/dashboard/dist/icons/integrations/trivy.svg +5 -0
  35. package/dashboard/dist/icons/providers/anthropic.svg +1 -0
  36. package/dashboard/dist/icons/providers/antigravity.svg +1 -0
  37. package/dashboard/dist/icons/providers/azure.svg +1 -0
  38. package/dashboard/dist/icons/providers/bedrock.svg +1 -0
  39. package/dashboard/dist/icons/providers/cerebras.svg +1 -0
  40. package/dashboard/dist/icons/providers/chatglm.svg +1 -0
  41. package/dashboard/dist/icons/providers/codex.svg +1 -0
  42. package/dashboard/dist/icons/providers/gemini.svg +1 -0
  43. package/dashboard/dist/icons/providers/githubcopilot.svg +1 -0
  44. package/dashboard/dist/icons/providers/googlecloud.svg +1 -0
  45. package/dashboard/dist/icons/providers/groq.svg +1 -0
  46. package/dashboard/dist/icons/providers/huggingface.svg +1 -0
  47. package/dashboard/dist/icons/providers/kimi.svg +1 -0
  48. package/dashboard/dist/icons/providers/minimax.svg +1 -0
  49. package/dashboard/dist/icons/providers/mistral.svg +1 -0
  50. package/dashboard/dist/icons/providers/openai.svg +1 -0
  51. package/dashboard/dist/icons/providers/openrouter.svg +1 -0
  52. package/dashboard/dist/icons/providers/vercel.svg +1 -0
  53. package/dashboard/dist/icons/providers/xai.svg +1 -0
  54. package/dashboard/dist/index.html +17 -0
  55. package/dist/agents/pmAgent.d.ts +40 -0
  56. package/dist/agents/pmAgent.d.ts.map +1 -0
  57. package/dist/agents/pmAgent.js +181 -0
  58. package/dist/agents/pmAgent.js.map +1 -0
  59. package/dist/ar/baseSpecialist.d.ts +36 -0
  60. package/dist/ar/baseSpecialist.d.ts.map +1 -0
  61. package/dist/ar/baseSpecialist.js +292 -0
  62. package/dist/ar/baseSpecialist.js.map +1 -0
  63. package/dist/ar/promptLoader.d.ts +10 -0
  64. package/dist/ar/promptLoader.d.ts.map +1 -0
  65. package/dist/ar/promptLoader.js +22 -0
  66. package/dist/ar/promptLoader.js.map +1 -0
  67. package/dist/ar/registry.d.ts +12 -0
  68. package/dist/ar/registry.d.ts.map +1 -0
  69. package/dist/ar/registry.js +22 -0
  70. package/dist/ar/registry.js.map +1 -0
  71. package/dist/ar/roster.d.ts +104 -0
  72. package/dist/ar/roster.d.ts.map +1 -0
  73. package/dist/ar/roster.js +245 -0
  74. package/dist/ar/roster.js.map +1 -0
  75. package/dist/ar/toolProfiles.d.ts +18 -0
  76. package/dist/ar/toolProfiles.d.ts.map +1 -0
  77. package/dist/ar/toolProfiles.js +89 -0
  78. package/dist/ar/toolProfiles.js.map +1 -0
  79. package/dist/atp/agentGroups.d.ts +39 -0
  80. package/dist/atp/agentGroups.d.ts.map +1 -0
  81. package/dist/atp/agentGroups.js +109 -0
  82. package/dist/atp/agentGroups.js.map +1 -0
  83. package/dist/atp/agentInterrupt.d.ts +31 -0
  84. package/dist/atp/agentInterrupt.d.ts.map +1 -0
  85. package/dist/atp/agentInterrupt.js +51 -0
  86. package/dist/atp/agentInterrupt.js.map +1 -0
  87. package/dist/atp/agentMessageQueue.d.ts +74 -0
  88. package/dist/atp/agentMessageQueue.d.ts.map +1 -0
  89. package/dist/atp/agentMessageQueue.js +218 -0
  90. package/dist/atp/agentMessageQueue.js.map +1 -0
  91. package/dist/atp/agentRuntime.d.ts +67 -0
  92. package/dist/atp/agentRuntime.d.ts.map +1 -0
  93. package/dist/atp/agentRuntime.js +279 -0
  94. package/dist/atp/agentRuntime.js.map +1 -0
  95. package/dist/atp/agentStreamBus.d.ts +35 -0
  96. package/dist/atp/agentStreamBus.d.ts.map +1 -0
  97. package/dist/atp/agentStreamBus.js +159 -0
  98. package/dist/atp/agentStreamBus.js.map +1 -0
  99. package/dist/atp/agentToolConfig.d.ts +38 -0
  100. package/dist/atp/agentToolConfig.d.ts.map +1 -0
  101. package/dist/atp/agentToolConfig.js +225 -0
  102. package/dist/atp/agentToolConfig.js.map +1 -0
  103. package/dist/atp/chatLog.d.ts +34 -0
  104. package/dist/atp/chatLog.d.ts.map +1 -0
  105. package/dist/atp/chatLog.js +59 -0
  106. package/dist/atp/chatLog.js.map +1 -0
  107. package/dist/atp/codexAuth.d.ts +6 -0
  108. package/dist/atp/codexAuth.d.ts.map +1 -0
  109. package/dist/atp/codexAuth.js +44 -0
  110. package/dist/atp/codexAuth.js.map +1 -0
  111. package/dist/atp/database.d.ts +54 -0
  112. package/dist/atp/database.d.ts.map +1 -0
  113. package/dist/atp/database.js +323 -0
  114. package/dist/atp/database.js.map +1 -0
  115. package/dist/atp/eventLog.d.ts +12 -0
  116. package/dist/atp/eventLog.d.ts.map +1 -0
  117. package/dist/atp/eventLog.js +60 -0
  118. package/dist/atp/eventLog.js.map +1 -0
  119. package/dist/atp/inboxLoop.d.ts +72 -0
  120. package/dist/atp/inboxLoop.d.ts.map +1 -0
  121. package/dist/atp/inboxLoop.js +482 -0
  122. package/dist/atp/inboxLoop.js.map +1 -0
  123. package/dist/atp/llmDebug.d.ts +18 -0
  124. package/dist/atp/llmDebug.d.ts.map +1 -0
  125. package/dist/atp/llmDebug.js +97 -0
  126. package/dist/atp/llmDebug.js.map +1 -0
  127. package/dist/atp/messageDebouncer.d.ts +34 -0
  128. package/dist/atp/messageDebouncer.d.ts.map +1 -0
  129. package/dist/atp/messageDebouncer.js +60 -0
  130. package/dist/atp/messageDebouncer.js.map +1 -0
  131. package/dist/atp/messageQueue.d.ts +17 -0
  132. package/dist/atp/messageQueue.d.ts.map +1 -0
  133. package/dist/atp/messageQueue.js +69 -0
  134. package/dist/atp/messageQueue.js.map +1 -0
  135. package/dist/atp/modelConfig.d.ts +46 -0
  136. package/dist/atp/modelConfig.d.ts.map +1 -0
  137. package/dist/atp/modelConfig.js +232 -0
  138. package/dist/atp/modelConfig.js.map +1 -0
  139. package/dist/atp/models.d.ts +87 -0
  140. package/dist/atp/models.d.ts.map +1 -0
  141. package/dist/atp/models.js +45 -0
  142. package/dist/atp/models.js.map +1 -0
  143. package/dist/atp/postTaskHooks.d.ts +21 -0
  144. package/dist/atp/postTaskHooks.d.ts.map +1 -0
  145. package/dist/atp/postTaskHooks.js +89 -0
  146. package/dist/atp/postTaskHooks.js.map +1 -0
  147. package/dist/atp/tokenTracker.d.ts +46 -0
  148. package/dist/atp/tokenTracker.d.ts.map +1 -0
  149. package/dist/atp/tokenTracker.js +120 -0
  150. package/dist/atp/tokenTracker.js.map +1 -0
  151. package/dist/channels/activeChannel.d.ts +14 -0
  152. package/dist/channels/activeChannel.d.ts.map +1 -0
  153. package/dist/channels/activeChannel.js +18 -0
  154. package/dist/channels/activeChannel.js.map +1 -0
  155. package/dist/channels/channelConfig.d.ts +61 -0
  156. package/dist/channels/channelConfig.d.ts.map +1 -0
  157. package/dist/channels/channelConfig.js +130 -0
  158. package/dist/channels/channelConfig.js.map +1 -0
  159. package/dist/channels/channelManager.d.ts +22 -0
  160. package/dist/channels/channelManager.d.ts.map +1 -0
  161. package/dist/channels/channelManager.js +77 -0
  162. package/dist/channels/channelManager.js.map +1 -0
  163. package/dist/channels/discord.d.ts +24 -0
  164. package/dist/channels/discord.d.ts.map +1 -0
  165. package/dist/channels/discord.js +276 -0
  166. package/dist/channels/discord.js.map +1 -0
  167. package/dist/channels/slack.d.ts +25 -0
  168. package/dist/channels/slack.d.ts.map +1 -0
  169. package/dist/channels/slack.js +313 -0
  170. package/dist/channels/slack.js.map +1 -0
  171. package/dist/channels/telegram.d.ts +20 -0
  172. package/dist/channels/telegram.d.ts.map +1 -0
  173. package/dist/channels/telegram.js +273 -0
  174. package/dist/channels/telegram.js.map +1 -0
  175. package/dist/channels/types.d.ts +12 -0
  176. package/dist/channels/types.d.ts.map +1 -0
  177. package/dist/channels/types.js +5 -0
  178. package/dist/channels/types.js.map +1 -0
  179. package/dist/config.d.ts +82 -0
  180. package/dist/config.d.ts.map +1 -0
  181. package/dist/config.js +144 -0
  182. package/dist/config.js.map +1 -0
  183. package/dist/dashboard/security.d.ts +68 -0
  184. package/dist/dashboard/security.d.ts.map +1 -0
  185. package/dist/dashboard/security.js +178 -0
  186. package/dist/dashboard/security.js.map +1 -0
  187. package/dist/dashboard/securityHelpers.d.ts +10 -0
  188. package/dist/dashboard/securityHelpers.d.ts.map +1 -0
  189. package/dist/dashboard/securityHelpers.js +22 -0
  190. package/dist/dashboard/securityHelpers.js.map +1 -0
  191. package/dist/dashboard/server.d.ts +18 -0
  192. package/dist/dashboard/server.d.ts.map +1 -0
  193. package/dist/dashboard/server.js +3207 -0
  194. package/dist/dashboard/server.js.map +1 -0
  195. package/dist/flows/codeScanFlow.d.ts +14 -0
  196. package/dist/flows/codeScanFlow.d.ts.map +1 -0
  197. package/dist/flows/codeScanFlow.js +204 -0
  198. package/dist/flows/codeScanFlow.js.map +1 -0
  199. package/dist/flows/gitleaksScanFlow.d.ts +12 -0
  200. package/dist/flows/gitleaksScanFlow.d.ts.map +1 -0
  201. package/dist/flows/gitleaksScanFlow.js +205 -0
  202. package/dist/flows/gitleaksScanFlow.js.map +1 -0
  203. package/dist/flows/index.d.ts +30 -0
  204. package/dist/flows/index.d.ts.map +1 -0
  205. package/dist/flows/index.js +43 -0
  206. package/dist/flows/index.js.map +1 -0
  207. package/dist/flows/semgrepScanFlow.d.ts +13 -0
  208. package/dist/flows/semgrepScanFlow.d.ts.map +1 -0
  209. package/dist/flows/semgrepScanFlow.js +211 -0
  210. package/dist/flows/semgrepScanFlow.js.map +1 -0
  211. package/dist/flows/trivyScanFlow.d.ts +13 -0
  212. package/dist/flows/trivyScanFlow.d.ts.map +1 -0
  213. package/dist/flows/trivyScanFlow.js +198 -0
  214. package/dist/flows/trivyScanFlow.js.map +1 -0
  215. package/dist/identity.d.ts +22 -0
  216. package/dist/identity.d.ts.map +1 -0
  217. package/dist/identity.js +34 -0
  218. package/dist/identity.js.map +1 -0
  219. package/dist/init.d.ts +8 -0
  220. package/dist/init.d.ts.map +1 -0
  221. package/dist/init.js +27 -0
  222. package/dist/init.js.map +1 -0
  223. package/dist/integrations/integrationConfig.d.ts +80 -0
  224. package/dist/integrations/integrationConfig.d.ts.map +1 -0
  225. package/dist/integrations/integrationConfig.js +146 -0
  226. package/dist/integrations/integrationConfig.js.map +1 -0
  227. package/dist/mcp/mcpBridge.d.ts +36 -0
  228. package/dist/mcp/mcpBridge.d.ts.map +1 -0
  229. package/dist/mcp/mcpBridge.js +157 -0
  230. package/dist/mcp/mcpBridge.js.map +1 -0
  231. package/dist/memory/agentMemory.d.ts +32 -0
  232. package/dist/memory/agentMemory.d.ts.map +1 -0
  233. package/dist/memory/agentMemory.js +116 -0
  234. package/dist/memory/agentMemory.js.map +1 -0
  235. package/dist/memory/autoCompaction.d.ts +46 -0
  236. package/dist/memory/autoCompaction.d.ts.map +1 -0
  237. package/dist/memory/autoCompaction.js +220 -0
  238. package/dist/memory/autoCompaction.js.map +1 -0
  239. package/dist/memory/compaction.d.ts +17 -0
  240. package/dist/memory/compaction.d.ts.map +1 -0
  241. package/dist/memory/compaction.js +27 -0
  242. package/dist/memory/compaction.js.map +1 -0
  243. package/dist/memory/messageHistory.d.ts +28 -0
  244. package/dist/memory/messageHistory.d.ts.map +1 -0
  245. package/dist/memory/messageHistory.js +60 -0
  246. package/dist/memory/messageHistory.js.map +1 -0
  247. package/dist/memory/sessionLifecycle.d.ts +30 -0
  248. package/dist/memory/sessionLifecycle.d.ts.map +1 -0
  249. package/dist/memory/sessionLifecycle.js +63 -0
  250. package/dist/memory/sessionLifecycle.js.map +1 -0
  251. package/dist/migrate.d.ts +8 -0
  252. package/dist/migrate.d.ts.map +1 -0
  253. package/dist/migrate.js +83 -0
  254. package/dist/migrate.js.map +1 -0
  255. package/dist/onboarding.d.ts +8 -0
  256. package/dist/onboarding.d.ts.map +1 -0
  257. package/dist/onboarding.js +188 -0
  258. package/dist/onboarding.js.map +1 -0
  259. package/dist/tools/domain/baFileTools.d.ts +7 -0
  260. package/dist/tools/domain/baFileTools.d.ts.map +1 -0
  261. package/dist/tools/domain/baFileTools.js +46 -0
  262. package/dist/tools/domain/baFileTools.js.map +1 -0
  263. package/dist/tools/domain/baTools.d.ts +6 -0
  264. package/dist/tools/domain/baTools.d.ts.map +1 -0
  265. package/dist/tools/domain/baTools.js +160 -0
  266. package/dist/tools/domain/baTools.js.map +1 -0
  267. package/dist/tools/domain/baseSpecialistTools.d.ts +22 -0
  268. package/dist/tools/domain/baseSpecialistTools.d.ts.map +1 -0
  269. package/dist/tools/domain/baseSpecialistTools.js +183 -0
  270. package/dist/tools/domain/baseSpecialistTools.js.map +1 -0
  271. package/dist/tools/domain/devTools.d.ts +6 -0
  272. package/dist/tools/domain/devTools.d.ts.map +1 -0
  273. package/dist/tools/domain/devTools.js +191 -0
  274. package/dist/tools/domain/devTools.js.map +1 -0
  275. package/dist/tools/domain/gitTools.d.ts +36 -0
  276. package/dist/tools/domain/gitTools.d.ts.map +1 -0
  277. package/dist/tools/domain/gitTools.js +279 -0
  278. package/dist/tools/domain/gitTools.js.map +1 -0
  279. package/dist/tools/domain/qaTools.d.ts +6 -0
  280. package/dist/tools/domain/qaTools.d.ts.map +1 -0
  281. package/dist/tools/domain/qaTools.js +275 -0
  282. package/dist/tools/domain/qaTools.js.map +1 -0
  283. package/dist/tools/domain/securityFlowTools.d.ts +6 -0
  284. package/dist/tools/domain/securityFlowTools.d.ts.map +1 -0
  285. package/dist/tools/domain/securityFlowTools.js +156 -0
  286. package/dist/tools/domain/securityFlowTools.js.map +1 -0
  287. package/dist/tools/pm/employeeTools.d.ts +15 -0
  288. package/dist/tools/pm/employeeTools.d.ts.map +1 -0
  289. package/dist/tools/pm/employeeTools.js +117 -0
  290. package/dist/tools/pm/employeeTools.js.map +1 -0
  291. package/dist/tools/pm/taskTools.d.ts +31 -0
  292. package/dist/tools/pm/taskTools.d.ts.map +1 -0
  293. package/dist/tools/pm/taskTools.js +534 -0
  294. package/dist/tools/pm/taskTools.js.map +1 -0
  295. package/dist/tools/shared/dateTools.d.ts +7 -0
  296. package/dist/tools/shared/dateTools.d.ts.map +1 -0
  297. package/dist/tools/shared/dateTools.js +35 -0
  298. package/dist/tools/shared/dateTools.js.map +1 -0
  299. package/dist/tools/shared/fileTools.d.ts +33 -0
  300. package/dist/tools/shared/fileTools.d.ts.map +1 -0
  301. package/dist/tools/shared/fileTools.js +312 -0
  302. package/dist/tools/shared/fileTools.js.map +1 -0
  303. package/dist/tools/shared/memoryTools.d.ts +18 -0
  304. package/dist/tools/shared/memoryTools.d.ts.map +1 -0
  305. package/dist/tools/shared/memoryTools.js +275 -0
  306. package/dist/tools/shared/memoryTools.js.map +1 -0
  307. package/dist/tools/shared/messagingTools.d.ts +14 -0
  308. package/dist/tools/shared/messagingTools.d.ts.map +1 -0
  309. package/dist/tools/shared/messagingTools.js +95 -0
  310. package/dist/tools/shared/messagingTools.js.map +1 -0
  311. package/dist/tools/shared/webTools.d.ts +12 -0
  312. package/dist/tools/shared/webTools.d.ts.map +1 -0
  313. package/dist/tools/shared/webTools.js +140 -0
  314. package/dist/tools/shared/webTools.js.map +1 -0
  315. package/dist/tower.d.ts +8 -0
  316. package/dist/tower.d.ts.map +1 -0
  317. package/dist/tower.js +774 -0
  318. package/dist/tower.js.map +1 -0
  319. package/package.json +71 -0
@@ -0,0 +1,275 @@
1
+ /**
2
+ * QA Engineer domain tools — template scaffolds for the LLM to populate.
3
+ */
4
+ import { Type } from "@mariozechner/pi-ai";
5
+ import { EventLog } from "../../atp/eventLog.js";
6
+ import { EventType } from "../../atp/models.js";
7
+ import { runFlow, FLOW_NAMES } from "../../flows/index.js";
8
+ function ok(text) {
9
+ return { content: [{ type: "text", text }], details: {} };
10
+ }
11
+ export const qaTools = [
12
+ {
13
+ name: "create_test_plan",
14
+ label: "Create Test Plan",
15
+ description: "Create a comprehensive test plan for a feature or system.",
16
+ parameters: Type.Object({
17
+ feature_description: Type.String({ description: "Feature or system to test" }),
18
+ task_id: Type.Optional(Type.String({ description: "Optional ATP task ID for tracking" })),
19
+ }),
20
+ execute: async (_, params) => {
21
+ EventLog.log(EventType.AGENT_TOOL_CALL, "qa", params.task_id ?? "", "QA creating test plan");
22
+ return ok(`## TEST PLAN
23
+
24
+ **Feature:** ${params.feature_description}
25
+
26
+ ### 1. SCOPE
27
+ - **In Scope:** [Features/modules to be tested]
28
+ - **Out of Scope:** [Explicitly excluded areas]
29
+
30
+ ### 2. TEST STRATEGY
31
+ - **Unit Tests:** Individual component testing
32
+ - **Integration Tests:** Component interaction testing
33
+ - **E2E Tests:** Full user flow testing
34
+ - **Regression Tests:** Prevent existing functionality breakage
35
+
36
+ ### 3. TEST ENVIRONMENTS
37
+ - Development (dev)
38
+ - Staging (pre-prod)
39
+ - Production (smoke only)
40
+
41
+ ### 4. TEST TYPES
42
+ | Type | Coverage Goal | Priority |
43
+ |------|--------------|----------|
44
+ | Functional | 90%+ | High |
45
+ | Boundary | Key inputs | High |
46
+ | Negative | Invalid inputs | Medium |
47
+ | Performance | Load scenarios | Medium |
48
+ | Security | Auth/OWASP | High |
49
+
50
+ ### 5. ENTRY/EXIT CRITERIA
51
+ - **Entry:** Feature code complete, dev unit tests passing
52
+ - **Exit:** All critical/high test cases pass, no P1/P2 open bugs
53
+
54
+ ### 6. RISKS
55
+ - [Risk 1 and mitigation]
56
+ - [Risk 2 and mitigation]
57
+
58
+ ### 7. TIMELINE
59
+ - Test case creation: [estimate]
60
+ - Test execution: [estimate]
61
+ - Bug fix cycle: [estimate]`);
62
+ },
63
+ },
64
+ {
65
+ name: "write_test_cases",
66
+ label: "Write Test Cases",
67
+ description: "Write detailed test cases for a feature.",
68
+ parameters: Type.Object({
69
+ feature_description: Type.String({ description: "Feature to write test cases for" }),
70
+ test_type: Type.Optional(Type.String({ description: "Type: functional, boundary, negative, performance (default: functional)" })),
71
+ task_id: Type.Optional(Type.String({ description: "Optional ATP task ID for tracking" })),
72
+ }),
73
+ execute: async (_, params) => {
74
+ const testType = params.test_type ?? "functional";
75
+ EventLog.log(EventType.AGENT_TOOL_CALL, "qa", params.task_id ?? "", `QA writing ${testType} test cases`);
76
+ return ok(`## TEST CASES — ${testType.toUpperCase()}
77
+
78
+ **Feature:** ${params.feature_description}
79
+
80
+ ### TC-001: Happy Path
81
+ - **Preconditions:** System in valid state, user authenticated
82
+ - **Steps:**
83
+ 1. [Step 1]
84
+ 2. [Step 2]
85
+ 3. [Step 3]
86
+ - **Expected Result:** [Expected outcome]
87
+ - **Priority:** High
88
+
89
+ ### TC-002: Boundary Values
90
+ - **Preconditions:** [Setup]
91
+ - **Steps:**
92
+ 1. Test minimum valid input
93
+ 2. Test maximum valid input
94
+ 3. Test just beyond boundaries
95
+ - **Expected Result:** [Correct handling at boundaries]
96
+ - **Priority:** High
97
+
98
+ ### TC-003: Negative — Invalid Input
99
+ - **Preconditions:** [Setup]
100
+ - **Steps:**
101
+ 1. Provide empty/null input
102
+ 2. Provide wrong data type
103
+ 3. Provide malformed data
104
+ - **Expected Result:** [Graceful error handling, no crash]
105
+ - **Priority:** Medium
106
+
107
+ ### TC-004: Error Recovery
108
+ - **Preconditions:** System in error state
109
+ - **Steps:**
110
+ 1. Trigger error condition
111
+ 2. Verify error message shown
112
+ 3. Verify system recovers/retries correctly
113
+ - **Expected Result:** [Graceful recovery]
114
+ - **Priority:** High
115
+
116
+ ### AUTOMATION NOTES
117
+ - Automatable: [Yes/No]
118
+ - Framework: [pytest / Jest / Playwright]
119
+ - Priority for automation: [High/Medium/Low]`);
120
+ },
121
+ },
122
+ {
123
+ name: "report_bug",
124
+ label: "Report Bug",
125
+ description: "Create a structured bug report for a discovered defect.",
126
+ parameters: Type.Object({
127
+ bug_description: Type.String({ description: "Description of the bug found" }),
128
+ severity: Type.Optional(Type.Union([Type.Literal("critical"), Type.Literal("high"), Type.Literal("medium"), Type.Literal("low")], {
129
+ description: "Bug severity (default: medium)",
130
+ })),
131
+ task_id: Type.Optional(Type.String({ description: "Optional ATP task ID for tracking" })),
132
+ }),
133
+ execute: async (_, params) => {
134
+ const severity = params.severity ?? "medium";
135
+ EventLog.log(EventType.AGENT_TOOL_CALL, "qa", params.task_id ?? "", `QA reporting ${severity} bug`);
136
+ return ok(`## BUG REPORT
137
+
138
+ **Summary:** ${params.bug_description}
139
+ **Severity:** ${severity.toUpperCase()}
140
+ **Priority:** [P1/P2/P3/P4]
141
+ **Status:** Open
142
+
143
+ ### ENVIRONMENT
144
+ - OS: [Operating system]
145
+ - Browser/Runtime: [Version]
146
+ - Build/Version: [App version]
147
+
148
+ ### REPRODUCTION STEPS
149
+ 1. [Precondition: initial state]
150
+ 2. [Action taken]
151
+ 3. [Observed result]
152
+
153
+ ### EXPECTED vs ACTUAL
154
+ - **Expected:** [What should happen]
155
+ - **Actual:** [What actually happens]
156
+
157
+ ### EVIDENCE
158
+ - Screenshot/Log: [Attach or describe]
159
+ - Error message: [Exact error text]
160
+
161
+ ### IMPACT
162
+ - **Users affected:** [All / Subset / Edge case]
163
+ - **Workaround:** [Yes: describe / No]
164
+ - **Blocker:** [Yes / No]
165
+
166
+ ### SUGGESTED FIX
167
+ [If known, describe the likely cause and fix approach]`);
168
+ },
169
+ },
170
+ {
171
+ name: "analyze_test_coverage",
172
+ label: "Analyze Test Coverage",
173
+ description: "Analyze and report on test coverage for a codebase or feature.",
174
+ parameters: Type.Object({
175
+ codebase_description: Type.String({ description: "Description of the codebase or feature to analyze coverage for" }),
176
+ task_id: Type.Optional(Type.String({ description: "Optional ATP task ID for tracking" })),
177
+ }),
178
+ execute: async (_, params) => {
179
+ EventLog.log(EventType.AGENT_TOOL_CALL, "qa", params.task_id ?? "", "QA analyzing test coverage");
180
+ return ok(`## TEST COVERAGE ANALYSIS
181
+
182
+ **Scope:** ${params.codebase_description}
183
+
184
+ ### COVERAGE SUMMARY
185
+ | Area | Line Coverage | Branch Coverage | Status |
186
+ |------|--------------|-----------------|--------|
187
+ | [Module 1] | [%] | [%] | ✅/⚠️/❌ |
188
+ | [Module 2] | [%] | [%] | ✅/⚠️/❌ |
189
+
190
+ ### CRITICAL GAPS (Untested paths)
191
+ 1. **[Gap 1]** — Risk: High — Recommended test: [TC description]
192
+ 2. **[Gap 2]** — Risk: Medium — Recommended test: [TC description]
193
+
194
+ ### COVERAGE TARGETS
195
+ - Current: [X%] line, [Y%] branch
196
+ - Target: 80% line, 70% branch
197
+ - Gap to close: [Delta]
198
+
199
+ ### RECOMMENDATIONS
200
+ 1. [Priority 1 action to improve coverage]
201
+ 2. [Priority 2 action]
202
+
203
+ ### TOOLS RECOMMENDED
204
+ - Coverage: [pytest-cov / nyc / Istanbul]
205
+ - Reporting: [Codecov / Coveralls]`);
206
+ },
207
+ },
208
+ // ── OCTO-FLOWS tools ─────────────────────────────────────────────────────
209
+ {
210
+ name: "run_code_scan",
211
+ label: "Run Code Scan",
212
+ description: "Run a SonarQube code scan against a workspace project directory. " +
213
+ "Generates a markdown report in shared/reports/ with bugs, vulnerabilities, code smells, and metrics. " +
214
+ "Requires SonarQube server to be running (docker compose up -d).",
215
+ parameters: Type.Object({
216
+ target_path: Type.String({
217
+ description: "Path to the project to scan, relative to the workspace root. " +
218
+ "Examples: 'projects/my-app', 'shared/my-module'. " +
219
+ "Use ls or find to confirm the path before calling this tool.",
220
+ }),
221
+ task_id: Type.Optional(Type.String({ description: "ATP task ID for tracking (e.g. TASK-042)" })),
222
+ }),
223
+ execute: async (_, params) => {
224
+ const taskId = params.task_id ?? "TASK-UNKNOWN";
225
+ EventLog.log(EventType.AGENT_TOOL_CALL, "qa", taskId, `QA triggering Code Scan on ${params.target_path}`);
226
+ const result = await runFlow("code-scan", {
227
+ taskId,
228
+ agentId: "qa",
229
+ targetPath: params.target_path,
230
+ });
231
+ const statusLine = result.success
232
+ ? "Code scan completed successfully."
233
+ : "Code scan encountered errors (partial results may be available).";
234
+ return ok(`${statusLine}\n\n` +
235
+ `Summary: ${result.summary}\n` +
236
+ (result.reportPath ? `Report: ${result.reportPath}\n` : "") +
237
+ (result.details ? `\nDetails:\n${result.details}` : "") +
238
+ `\n\nNext step: read the report with the read tool, then message Rohan (dev) about any bugs or vulnerabilities found.`);
239
+ },
240
+ },
241
+ {
242
+ name: "run_flow",
243
+ label: "Run OCTO-Flow",
244
+ description: `Trigger any named OCTO-FLOW pipeline. Available flows: ${FLOW_NAMES.join(", ")}. ` +
245
+ "Use run_code_scan for the SonarQube flow (it has better defaults). " +
246
+ "Use run_flow for future flows or custom options.",
247
+ parameters: Type.Object({
248
+ flow_name: Type.String({
249
+ description: `Flow to run. One of: ${FLOW_NAMES.join(", ")}`,
250
+ }),
251
+ target_path: Type.String({
252
+ description: "Workspace-relative path to operate on",
253
+ }),
254
+ task_id: Type.Optional(Type.String({ description: "ATP task ID for tracking" })),
255
+ options: Type.Optional(Type.Record(Type.String(), Type.String(), {
256
+ description: "Flow-specific key/value options",
257
+ })),
258
+ }),
259
+ execute: async (_, params) => {
260
+ const taskId = params.task_id ?? "TASK-UNKNOWN";
261
+ EventLog.log(EventType.AGENT_TOOL_CALL, "qa", taskId, `QA triggering flow '${params.flow_name}' on ${params.target_path}`);
262
+ const result = await runFlow(params.flow_name, {
263
+ taskId,
264
+ agentId: "qa",
265
+ targetPath: params.target_path,
266
+ options: params.options,
267
+ });
268
+ return ok(`Flow '${params.flow_name}': ${result.success ? "SUCCESS" : "FAILED"}\n\n` +
269
+ `${result.summary}\n` +
270
+ (result.reportPath ? `Report: ${result.reportPath}\n` : "") +
271
+ (result.details ? `\nDetails:\n${result.details}` : ""));
272
+ },
273
+ },
274
+ ];
275
+ //# sourceMappingURL=qaTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qaTools.js","sourceRoot":"","sources":["../../../src/tools/domain/qaTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Security Engineer OCTO-FLOW tools — triggers security scanning pipelines.
3
+ */
4
+ import type { AgentTool } from "@mariozechner/pi-agent-core";
5
+ export declare const securityFlowTools: AgentTool[];
6
+ //# sourceMappingURL=securityFlowTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"securityFlowTools.d.ts","sourceRoot":"","sources":["../../../src/tools/domain/securityFlowTools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAS7D,eAAO,MAAM,iBAAiB,EAAE,SAAS,EAyMxC,CAAC"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Security Engineer OCTO-FLOW tools — triggers security scanning pipelines.
3
+ */
4
+ import { Type } from "@mariozechner/pi-ai";
5
+ import { EventLog } from "../../atp/eventLog.js";
6
+ import { EventType } from "../../atp/models.js";
7
+ import { runFlow, FLOW_NAMES } from "../../flows/index.js";
8
+ function ok(text) {
9
+ return { content: [{ type: "text", text }], details: {} };
10
+ }
11
+ export const securityFlowTools = [
12
+ {
13
+ name: "run_sast_scan",
14
+ label: "Run SAST Scan",
15
+ description: "Run a Semgrep SAST (Static Application Security Testing) scan against a workspace project directory. " +
16
+ "Detects OWASP Top 10 vulnerabilities, injection flaws, insecure crypto, hardcoded secrets, and more. " +
17
+ "Generates a markdown report in shared/reports/ with findings grouped by severity. " +
18
+ "Requires Docker to be running.",
19
+ parameters: Type.Object({
20
+ target_path: Type.String({
21
+ description: "Path to the project to scan, relative to the workspace root. " +
22
+ "Examples: 'projects/my-app', 'shared/my-module'. " +
23
+ "Use ls or find to confirm the path before calling this tool.",
24
+ }),
25
+ task_id: Type.Optional(Type.String({ description: "ATP task ID for tracking (e.g. TASK-042)" })),
26
+ fail_severity: Type.Optional(Type.String({
27
+ description: "Minimum severity to trigger a FAIL verdict. " +
28
+ "One of: ERROR (critical/high), WARNING (medium), INFO (low). Default: ERROR.",
29
+ })),
30
+ }),
31
+ execute: async (_, params) => {
32
+ const taskId = params.task_id ?? "TASK-UNKNOWN";
33
+ EventLog.log(EventType.AGENT_TOOL_CALL, "security", taskId, `Security triggering SAST Scan on ${params.target_path}`);
34
+ const result = await runFlow("sast-scan", {
35
+ taskId,
36
+ agentId: "security",
37
+ targetPath: params.target_path,
38
+ options: params.fail_severity ? { fail_severity: params.fail_severity } : undefined,
39
+ });
40
+ const statusLine = result.success
41
+ ? "SAST scan PASSED — no critical/high findings."
42
+ : "SAST scan FAILED — critical/high findings detected.";
43
+ return ok(`${statusLine}\n\n` +
44
+ `Summary: ${result.summary}\n` +
45
+ (result.reportPath ? `Report: ${result.reportPath}\n` : "") +
46
+ (result.details ? `\nDetails:\n${result.details}` : "") +
47
+ `\n\nNext step: read the report with the read tool. Review each finding. ` +
48
+ `Message Rohan (dev) about critical vulnerabilities that need immediate fixes.`);
49
+ },
50
+ },
51
+ {
52
+ name: "run_secret_scan",
53
+ label: "Run Secret Scan",
54
+ description: "Run a Gitleaks secret scan against a workspace project directory. " +
55
+ "Detects leaked API keys, tokens, passwords, private keys, and other credentials. " +
56
+ "Generates a markdown report in shared/reports/ with all findings (redacted). " +
57
+ "Any leaked secret = automatic FAIL. Requires Docker to be running.",
58
+ parameters: Type.Object({
59
+ target_path: Type.String({
60
+ description: "Path to the project to scan, relative to the workspace root. " +
61
+ "Examples: 'projects/my-app', 'shared/my-module'.",
62
+ }),
63
+ task_id: Type.Optional(Type.String({ description: "ATP task ID for tracking (e.g. TASK-042)" })),
64
+ }),
65
+ execute: async (_, params) => {
66
+ const taskId = params.task_id ?? "TASK-UNKNOWN";
67
+ EventLog.log(EventType.AGENT_TOOL_CALL, "security", taskId, `Security triggering Secret Scan on ${params.target_path}`);
68
+ const result = await runFlow("secret-scan", {
69
+ taskId,
70
+ agentId: "security",
71
+ targetPath: params.target_path,
72
+ });
73
+ const statusLine = result.success
74
+ ? "Secret scan PASSED — no leaked secrets found."
75
+ : "Secret scan FAILED — leaked secrets detected!";
76
+ return ok(`${statusLine}\n\n` +
77
+ `Summary: ${result.summary}\n` +
78
+ (result.reportPath ? `Report: ${result.reportPath}\n` : "") +
79
+ (result.details ? `\nDetails:\n${result.details}` : "") +
80
+ `\n\nNext step: read the report with the read tool. ` +
81
+ `If secrets are found: message Rohan (dev) to rotate credentials immediately and remove from source code.`);
82
+ },
83
+ },
84
+ {
85
+ name: "run_sca_scan",
86
+ label: "Run SCA Scan",
87
+ description: "Run a Trivy SCA (Software Composition Analysis) scan against a workspace project directory. " +
88
+ "Detects known CVEs in dependencies by scanning lockfiles (package-lock.json, yarn.lock, etc.). " +
89
+ "Generates a markdown report in shared/reports/ with vulnerable packages, versions, and fixes. " +
90
+ "Requires Docker to be running.",
91
+ parameters: Type.Object({
92
+ target_path: Type.String({
93
+ description: "Path to the project to scan, relative to the workspace root. " +
94
+ "Examples: 'projects/my-app', 'shared/my-module'.",
95
+ }),
96
+ task_id: Type.Optional(Type.String({ description: "ATP task ID for tracking (e.g. TASK-042)" })),
97
+ fail_severity: Type.Optional(Type.String({
98
+ description: "Minimum severity to trigger a FAIL verdict. " +
99
+ "One of: CRITICAL, HIGH, MEDIUM, LOW. Default: HIGH.",
100
+ })),
101
+ }),
102
+ execute: async (_, params) => {
103
+ const taskId = params.task_id ?? "TASK-UNKNOWN";
104
+ EventLog.log(EventType.AGENT_TOOL_CALL, "security", taskId, `Security triggering SCA Scan on ${params.target_path}`);
105
+ const result = await runFlow("sca-scan", {
106
+ taskId,
107
+ agentId: "security",
108
+ targetPath: params.target_path,
109
+ options: params.fail_severity ? { fail_severity: params.fail_severity } : undefined,
110
+ });
111
+ const statusLine = result.success
112
+ ? "SCA scan PASSED — no critical/high dependency vulnerabilities."
113
+ : "SCA scan FAILED — vulnerable dependencies found!";
114
+ return ok(`${statusLine}\n\n` +
115
+ `Summary: ${result.summary}\n` +
116
+ (result.reportPath ? `Report: ${result.reportPath}\n` : "") +
117
+ (result.details ? `\nDetails:\n${result.details}` : "") +
118
+ `\n\nNext step: read the report with the read tool. ` +
119
+ `For fixable vulnerabilities, message Rohan (dev) to update the affected packages.`);
120
+ },
121
+ },
122
+ {
123
+ name: "run_flow",
124
+ label: "Run OCTO-Flow",
125
+ description: `Trigger any named OCTO-FLOW pipeline. Available flows: ${FLOW_NAMES.join(", ")}. ` +
126
+ "Use run_sast_scan for Semgrep SAST (it has better defaults). " +
127
+ "Use run_flow for other flows or custom options.",
128
+ parameters: Type.Object({
129
+ flow_name: Type.String({
130
+ description: `Flow to run. One of: ${FLOW_NAMES.join(", ")}`,
131
+ }),
132
+ target_path: Type.String({
133
+ description: "Workspace-relative path to operate on",
134
+ }),
135
+ task_id: Type.Optional(Type.String({ description: "ATP task ID for tracking" })),
136
+ options: Type.Optional(Type.Record(Type.String(), Type.String(), {
137
+ description: "Flow-specific key/value options",
138
+ })),
139
+ }),
140
+ execute: async (_, params) => {
141
+ const taskId = params.task_id ?? "TASK-UNKNOWN";
142
+ EventLog.log(EventType.AGENT_TOOL_CALL, "security", taskId, `Security triggering flow '${params.flow_name}' on ${params.target_path}`);
143
+ const result = await runFlow(params.flow_name, {
144
+ taskId,
145
+ agentId: "security",
146
+ targetPath: params.target_path,
147
+ options: params.options,
148
+ });
149
+ return ok(`Flow '${params.flow_name}': ${result.success ? "SUCCESS" : "FAILED"}\n\n` +
150
+ `${result.summary}\n` +
151
+ (result.reportPath ? `Report: ${result.reportPath}\n` : "") +
152
+ (result.details ? `\nDetails:\n${result.details}` : ""));
153
+ },
154
+ },
155
+ ];
156
+ //# sourceMappingURL=securityFlowTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"securityFlowTools.js","sourceRoot":"","sources":["../../../src/tools/domain/securityFlowTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * PM employee registry tools for VEC-ATP.
3
+ *
4
+ * Tools:
5
+ * view_employee_directory, view_org_chart,
6
+ * lookup_employee, set_employee_status
7
+ *
8
+ * Usage:
9
+ * import { getPMEmployeeTools } from "./employeeTools.js";
10
+ * tools: [...getPMEmployeeTools(db), ...]
11
+ */
12
+ import type { AgentTool } from "@mariozechner/pi-agent-core";
13
+ import { ATPDatabase } from "../../atp/database.js";
14
+ export declare function getPMEmployeeTools(db: typeof ATPDatabase): AgentTool[];
15
+ //# sourceMappingURL=employeeTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"employeeTools.d.ts","sourceRoot":"","sources":["../../../src/tools/pm/employeeTools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAQpD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,OAAO,WAAW,GAAG,SAAS,EAAE,CAmHtE"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * PM employee registry tools for VEC-ATP.
3
+ *
4
+ * Tools:
5
+ * view_employee_directory, view_org_chart,
6
+ * lookup_employee, set_employee_status
7
+ *
8
+ * Usage:
9
+ * import { getPMEmployeeTools } from "./employeeTools.js";
10
+ * tools: [...getPMEmployeeTools(db), ...]
11
+ */
12
+ import { Type } from "@mariozechner/pi-ai";
13
+ import { EventLog } from "../../atp/eventLog.js";
14
+ import { EventType } from "../../atp/models.js";
15
+ function ok(text) {
16
+ return { content: [{ type: "text", text }], details: {} };
17
+ }
18
+ export function getPMEmployeeTools(db) {
19
+ const view_employee_directory = {
20
+ name: "view_employee_directory",
21
+ label: "View Employee Directory",
22
+ description: "View the VEC employee directory — all virtual employees, their designations, " +
23
+ "departments, hierarchy level, and current availability status.",
24
+ parameters: Type.Object({
25
+ status_filter: Type.Optional(Type.String({
26
+ description: "Filter by status: 'available', 'busy', or 'offline'. Empty = show all.",
27
+ })),
28
+ department_filter: Type.Optional(Type.String({ description: "Filter by department name (e.g. 'Engineering'). Empty = show all." })),
29
+ }),
30
+ execute: async (_, params) => {
31
+ const status = (params.status_filter ?? "").trim().toLowerCase() || undefined;
32
+ const dept = (params.department_filter ?? "").trim() || undefined;
33
+ if (status && !["available", "busy", "offline"].includes(status)) {
34
+ return ok("ERROR: status_filter must be 'available', 'busy', or 'offline'.");
35
+ }
36
+ const result = db.employeeDirectory({ status, department: dept });
37
+ EventLog.log(EventType.AGENT_TOOL_CALL, "pm", "", `PM viewed employee directory (status=${status ?? "all"}, dept=${dept ?? "all"})`);
38
+ return ok(result);
39
+ },
40
+ };
41
+ const view_org_chart = {
42
+ name: "view_org_chart",
43
+ label: "View Org Chart",
44
+ description: "View the VEC org chart showing the full reporting hierarchy — " +
45
+ "who reports to whom, each employee's designation and current status.",
46
+ parameters: Type.Object({}),
47
+ execute: async () => {
48
+ const result = db.orgChart();
49
+ EventLog.log(EventType.AGENT_TOOL_CALL, "pm", "", "PM viewed org chart");
50
+ return ok(result);
51
+ },
52
+ };
53
+ const lookup_employee = {
54
+ name: "lookup_employee",
55
+ label: "Lookup Employee",
56
+ description: "Look up a specific employee by their employee ID (EMP-001) or agent key (e.g. 'ba', 'dev').",
57
+ parameters: Type.Object({
58
+ identifier: Type.String({
59
+ description: "Employee ID like 'EMP-003' or agent key like 'ba'.",
60
+ }),
61
+ }),
62
+ execute: async (_, params) => {
63
+ const id = params.identifier.trim();
64
+ const emp = id.toUpperCase().startsWith("EMP-")
65
+ ? db.getEmployee(id.toUpperCase())
66
+ : db.getEmployeeByAgentId(id.toLowerCase());
67
+ if (!emp)
68
+ return ok(`No employee found for '${id}'.`);
69
+ let reportsToStr = "nobody (top of hierarchy)";
70
+ if (emp.reports_to) {
71
+ const manager = db.getEmployee(emp.reports_to);
72
+ reportsToStr = manager
73
+ ? `${manager.name} (${manager.designation}) [${emp.reports_to}]`
74
+ : emp.reports_to;
75
+ }
76
+ const directReports = db.getDirectReports(emp.employee_id);
77
+ const reportsStr = directReports.length
78
+ ? directReports.map((r) => `${r.name} [${r.employee_id}]`).join(", ")
79
+ : "none";
80
+ EventLog.log(EventType.AGENT_TOOL_CALL, "pm", "", `PM looked up employee ${emp.employee_id} (${emp.agent_id})`);
81
+ const joinedAt = emp.joined_at.slice(0, 10); // YYYY-MM-DD from ISO string
82
+ const text = `Employee: ${emp.name}\n` +
83
+ ` ID: ${emp.employee_id} | Agent key: ${emp.agent_id}\n` +
84
+ ` Designation: ${emp.designation}\n` +
85
+ ` Department: ${emp.department}\n` +
86
+ ` Hierarchy level: ${emp.hierarchy_level}\n` +
87
+ ` Reports to: ${reportsToStr}\n` +
88
+ ` Direct reports: ${reportsStr}\n` +
89
+ ` Status: ${emp.status}\n` +
90
+ ` Skills: ${emp.skills || "N/A"}\n` +
91
+ ` Joined: ${joinedAt}`;
92
+ return ok(text);
93
+ },
94
+ };
95
+ const set_employee_status = {
96
+ name: "set_employee_status",
97
+ label: "Set Employee Status",
98
+ description: "Update a virtual employee's availability status. " +
99
+ "Use 'busy' when dispatching tasks and 'available' when the task completes.",
100
+ parameters: Type.Object({
101
+ agent_id: Type.String({ description: "The agent's short key (e.g. 'ba', 'dev', 'qa')" }),
102
+ status: Type.Union([Type.Literal("available"), Type.Literal("busy"), Type.Literal("offline")], {
103
+ description: "'available', 'busy', or 'offline'",
104
+ }),
105
+ }),
106
+ execute: async (_, params) => {
107
+ const emp = db.updateEmployeeStatus(params.agent_id.trim().toLowerCase(), params.status);
108
+ if (!emp) {
109
+ return ok(`ERROR: No employee found with agent_id '${params.agent_id}'.`);
110
+ }
111
+ EventLog.log(EventType.AGENT_TOOL_CALL, "pm", "", `PM set ${emp.name} (${emp.agent_id}) status to ${params.status}`);
112
+ return ok(`Employee ${emp.name} (${emp.agent_id}) status updated to '${params.status}'.`);
113
+ },
114
+ };
115
+ return [view_employee_directory, view_org_chart, lookup_employee, set_employee_status];
116
+ }
117
+ //# sourceMappingURL=employeeTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"employeeTools.js","sourceRoot":"","sources":["../../../src/tools/pm/employeeTools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAG3C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,SAAS,EAAE,CAAC,IAAY;IACtB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAsB;IACvD,MAAM,uBAAuB,GAAc;QACzC,IAAI,EAAE,yBAAyB;QAC/B,KAAK,EAAE,yBAAyB;QAChC,WAAW,EACT,+EAA+E;YAC/E,gEAAgE;QAClE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YACtB,aAAa,EAAE,IAAI,CAAC,QAAQ,CAC1B,IAAI,CAAC,MAAM,CAAC;gBACV,WAAW,EAAE,wEAAwE;aACtF,CAAC,CACH;YACD,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAC9B,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,mEAAmE,EAAE,CAAC,CAClG;SACF,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAW,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC;YAC9E,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;YAClE,IAAI,MAAM,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjE,OAAO,EAAE,CAAC,iEAAiE,CAAC,CAAC;YAC/E,CAAC;YACD,MAAM,MAAM,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;YAClE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE,wCAAwC,MAAM,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;YACrI,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC;KACF,CAAC;IAEF,MAAM,cAAc,GAAc;QAChC,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,gEAAgE;YAChE,sEAAsE;QACxE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;YAC7B,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE,qBAAqB,CAAC,CAAC;YACzE,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC;KACF,CAAC;IAEF,MAAM,eAAe,GAAc;QACjC,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,6FAA6F;QAC/F,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YACtB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;gBACtB,WAAW,EAAE,oDAAoD;aAClE,CAAC;SACH,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAW,EAAE,EAAE;YAChC,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC7C,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;gBAClC,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;YAE9C,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;YAEtD,IAAI,YAAY,GAAG,2BAA2B,CAAC;YAC/C,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBACnB,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC/C,YAAY,GAAG,OAAO;oBACpB,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,WAAW,MAAM,GAAG,CAAC,UAAU,GAAG;oBAChE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;YACrB,CAAC;YAED,MAAM,aAAa,GAAG,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC3D,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM;gBACrC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBACrE,CAAC,CAAC,MAAM,CAAC;YAEX,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE,yBAAyB,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;YAEhH,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,6BAA6B;YAC1E,MAAM,IAAI,GACR,aAAa,GAAG,CAAC,IAAI,IAAI;gBACzB,SAAS,GAAG,CAAC,WAAW,mBAAmB,GAAG,CAAC,QAAQ,IAAI;gBAC3D,kBAAkB,GAAG,CAAC,WAAW,IAAI;gBACrC,iBAAiB,GAAG,CAAC,UAAU,IAAI;gBACnC,sBAAsB,GAAG,CAAC,eAAe,IAAI;gBAC7C,iBAAiB,YAAY,IAAI;gBACjC,qBAAqB,UAAU,IAAI;gBACnC,aAAa,GAAG,CAAC,MAAM,IAAI;gBAC3B,aAAa,GAAG,CAAC,MAAM,IAAI,KAAK,IAAI;gBACpC,aAAa,QAAQ,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;KACF,CAAC;IAEF,MAAM,mBAAmB,GAAc;QACrC,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,mDAAmD;YACnD,4EAA4E;QAC9E,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YACtB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gDAAgD,EAAE,CAAC;YACxF,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE;gBAC7F,WAAW,EAAE,mCAAmC;aACjD,CAAC;SACH,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAW,EAAE,EAAE;YAChC,MAAM,GAAG,GAAG,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACzF,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO,EAAE,CAAC,2CAA2C,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;YAC5E,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,QAAQ,eAAe,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACrH,OAAO,EAAE,CAAC,YAAY,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,QAAQ,wBAAwB,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QAC5F,CAAC;KACF,CAAC;IAEF,OAAO,CAAC,uBAAuB,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,CAAC,CAAC;AACzF,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * PM task-management tools for VEC-ATP.
3
+ * Factory that injects database, message queue, agent queue, and agent registry.
4
+ *
5
+ * Tools:
6
+ * create_and_assign_task, start_task, start_tasks,
7
+ * send_task_message, send_priority_message,
8
+ * check_task_status, list_all_tasks, read_messages
9
+ *
10
+ * Usage:
11
+ * import { getPMTaskTools } from "./taskTools.js";
12
+ * tools: [...getPMTaskTools({ db, pmQueue, agentQueue, agents }), ...]
13
+ */
14
+ import type { AgentTool } from "@mariozechner/pi-agent-core";
15
+ import { ATPDatabase } from "../../atp/database.js";
16
+ import { MessageQueue } from "../../atp/messageQueue.js";
17
+ import { AgentMessageQueue } from "../../atp/agentMessageQueue.js";
18
+ import type { VECAgent } from "../../atp/inboxLoop.js";
19
+ export interface PMTaskToolDeps {
20
+ db: typeof ATPDatabase;
21
+ pmQueue: typeof MessageQueue;
22
+ agentQueue: typeof AgentMessageQueue;
23
+ agents: Map<string, VECAgent>;
24
+ }
25
+ /**
26
+ * Dispatch all pending tasks whose scheduled_date is today or earlier.
27
+ * Called at startup and hourly from tower.ts so tasks auto-release on their date.
28
+ */
29
+ export declare function releaseDueTasks(deps: PMTaskToolDeps): void;
30
+ export declare function getPMTaskTools(deps: PMTaskToolDeps): AgentTool[];
31
+ //# sourceMappingURL=taskTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taskTools.d.ts","sourceRoot":"","sources":["../../../src/tools/pm/taskTools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAiBvD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,OAAO,WAAW,CAAC;IACvB,OAAO,EAAE,OAAO,YAAY,CAAC;IAC7B,UAAU,EAAE,OAAO,iBAAiB,CAAC;IACrC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CAC/B;AA8KD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAS1D;AAID,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,EAAE,CAsZhE"}