@copado/agentia-cli 1.1.0 → 1.3.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 (394) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/README.md +3290 -2095
  3. package/dist/commands/ai/agent/ask.js +4 -4
  4. package/dist/commands/ai/agent/chat.js +4 -4
  5. package/dist/commands/auth/get.js +21 -1
  6. package/dist/commands/auth/set.js +13 -0
  7. package/dist/commands/auth/unset.js +37 -0
  8. package/dist/commands/cicd/cloud/commit.js +2 -2
  9. package/dist/commands/cicd/cloud/promote.js +19 -5
  10. package/dist/commands/cicd/credential/auth/status.js +38 -0
  11. package/dist/commands/cicd/credential/auth/web/login.js +54 -0
  12. package/dist/commands/cicd/credential/create.js +2 -2
  13. package/dist/commands/cicd/credential/list.js +15 -19
  14. package/dist/commands/cicd/credential/open.js +30 -0
  15. package/dist/commands/cicd/credential/update.js +11 -14
  16. package/dist/commands/cicd/data/commit/create.js +2 -2
  17. package/dist/commands/cicd/data/commit/list.js +2 -2
  18. package/dist/commands/cicd/data/dataset-file/content.js +2 -2
  19. package/dist/commands/cicd/data/dataset-file/list.js +2 -2
  20. package/dist/commands/cicd/data/filter/add.js +2 -2
  21. package/dist/commands/cicd/data/filter/delete.js +2 -2
  22. package/dist/commands/cicd/data/filter/list.js +2 -2
  23. package/dist/commands/cicd/data/filter/update.js +2 -2
  24. package/dist/commands/cicd/data/formula/create.js +2 -2
  25. package/dist/commands/cicd/data/formula/list.js +2 -2
  26. package/dist/commands/cicd/data/formula/update.js +2 -2
  27. package/dist/commands/cicd/data/records/match.js +2 -2
  28. package/dist/commands/cicd/data/records/search.js +2 -2
  29. package/dist/commands/cicd/data/sobject/fields.js +2 -2
  30. package/dist/commands/cicd/data/sobject/relationships.js +2 -2
  31. package/dist/commands/cicd/data/sync/apply.js +2 -2
  32. package/dist/commands/cicd/data/sync/preview-updates.js +2 -2
  33. package/dist/commands/cicd/data/template/convert-old.js +2 -2
  34. package/dist/commands/cicd/data/template/create.js +2 -2
  35. package/dist/commands/cicd/data/template/delete.js +2 -2
  36. package/dist/commands/cicd/data/template/get-detail.js +2 -2
  37. package/dist/commands/cicd/data/template/get.js +2 -2
  38. package/dist/commands/cicd/data/template/list.js +2 -2
  39. package/dist/commands/cicd/data/template/open.js +2 -2
  40. package/dist/commands/cicd/data/template/save-detail.js +2 -2
  41. package/dist/commands/cicd/environment/auth/status.js +36 -15
  42. package/dist/commands/cicd/environment/auth/web/login.js +22 -6
  43. package/dist/commands/cicd/environment/create.js +2 -2
  44. package/dist/commands/cicd/environment/get.js +2 -2
  45. package/dist/commands/cicd/environment/list.js +2 -2
  46. package/dist/commands/cicd/environment/open.js +8 -24
  47. package/dist/commands/cicd/environment/update.js +2 -2
  48. package/dist/commands/cicd/extension/create.js +2 -2
  49. package/dist/commands/cicd/extension/install.js +2 -2
  50. package/dist/commands/cicd/extension/package.js +2 -2
  51. package/dist/commands/cicd/extension/publish.js +2 -2
  52. package/dist/commands/cicd/extension/uninstall.js +2 -2
  53. package/dist/commands/cicd/extension/validate.js +2 -2
  54. package/dist/commands/cicd/extension-configuration/get.js +24 -0
  55. package/dist/commands/cicd/extension-configuration/list.js +49 -0
  56. package/dist/commands/cicd/extension-configuration/open.js +38 -0
  57. package/dist/commands/cicd/function/defaults.js +2 -2
  58. package/dist/commands/cicd/function/delete.js +2 -2
  59. package/dist/commands/cicd/function/get.js +2 -2
  60. package/dist/commands/cicd/function/list.js +2 -2
  61. package/dist/commands/cicd/function/open.js +2 -2
  62. package/dist/commands/cicd/function/result/get.js +2 -2
  63. package/dist/commands/cicd/function/result/log/get.js +2 -2
  64. package/dist/commands/cicd/function/run-local.js +2 -2
  65. package/dist/commands/cicd/function/run.js +2 -2
  66. package/dist/commands/cicd/function/upsert.js +2 -2
  67. package/dist/commands/cicd/health-check.js +2 -2
  68. package/dist/commands/cicd/job/get.js +2 -2
  69. package/dist/commands/cicd/job/kill.js +2 -2
  70. package/dist/commands/cicd/job/list.js +2 -2
  71. package/dist/commands/cicd/job/log/get.js +2 -2
  72. package/dist/commands/cicd/job/open.js +2 -2
  73. package/dist/commands/cicd/job/pause.js +2 -2
  74. package/dist/commands/cicd/job/result-file/get.js +2 -2
  75. package/dist/commands/cicd/job/result-file/list.js +2 -2
  76. package/dist/commands/cicd/job/resume.js +2 -2
  77. package/dist/commands/cicd/job/run.js +2 -2
  78. package/dist/commands/cicd/metadata/content/compare.js +2 -2
  79. package/dist/commands/cicd/metadata/content/get.js +3 -3
  80. package/dist/commands/cicd/metadata/dependency/list.js +45 -22
  81. package/dist/commands/cicd/metadata/explore.js +81 -0
  82. package/dist/commands/cicd/metadata/index/compare.js +2 -2
  83. package/dist/commands/cicd/metadata/list.js +5 -5
  84. package/dist/commands/cicd/metadata/refresh/deleted.js +3 -3
  85. package/dist/commands/cicd/metadata/refresh/run.js +4 -4
  86. package/dist/commands/cicd/metadata/refresh/status.js +4 -4
  87. package/dist/commands/cicd/notification/configure.js +2 -2
  88. package/dist/commands/cicd/notification/get.js +2 -2
  89. package/dist/commands/cicd/pipeline/automation/activate.js +39 -0
  90. package/dist/commands/cicd/pipeline/automation/create.js +33 -0
  91. package/dist/commands/cicd/pipeline/automation/deactivate.js +39 -0
  92. package/dist/commands/cicd/pipeline/automation/delete.js +45 -0
  93. package/dist/commands/cicd/pipeline/automation/get.js +32 -0
  94. package/dist/commands/cicd/pipeline/automation/list.js +38 -0
  95. package/dist/commands/cicd/pipeline/automation/open.js +38 -0
  96. package/dist/commands/cicd/pipeline/automation/update.js +38 -0
  97. package/dist/commands/cicd/pipeline/connection/create.js +2 -2
  98. package/dist/commands/cicd/pipeline/connection/delete.js +2 -2
  99. package/dist/commands/cicd/pipeline/connection/list.js +2 -2
  100. package/dist/commands/cicd/pipeline/connection/open.js +2 -2
  101. package/dist/commands/cicd/pipeline/connection/update.js +2 -2
  102. package/dist/commands/cicd/pipeline/create.js +2 -2
  103. package/dist/commands/cicd/pipeline/get.js +2 -2
  104. package/dist/commands/cicd/pipeline/list.js +2 -2
  105. package/dist/commands/cicd/pipeline/open.js +2 -2
  106. package/dist/commands/cicd/pipeline/quality-gate/activate.js +39 -0
  107. package/dist/commands/cicd/pipeline/quality-gate/create.js +34 -0
  108. package/dist/commands/cicd/pipeline/quality-gate/deactivate.js +39 -0
  109. package/dist/commands/cicd/pipeline/quality-gate/delete.js +45 -0
  110. package/dist/commands/cicd/pipeline/quality-gate/get.js +32 -0
  111. package/dist/commands/cicd/pipeline/quality-gate/list.js +34 -0
  112. package/dist/commands/cicd/pipeline/quality-gate/open.js +38 -0
  113. package/dist/commands/cicd/pipeline/quality-gate/update.js +38 -0
  114. package/dist/commands/cicd/pipeline/stage-connection/create.js +2 -2
  115. package/dist/commands/cicd/pipeline/stage-connection/delete.js +2 -2
  116. package/dist/commands/cicd/pipeline/stage-connection/list.js +2 -2
  117. package/dist/commands/cicd/pipeline/stage-connection/open.js +2 -2
  118. package/dist/commands/cicd/pipeline/stage-connection/update.js +2 -2
  119. package/dist/commands/cicd/pipeline/update.js +2 -2
  120. package/dist/commands/cicd/project/create.js +2 -2
  121. package/dist/commands/cicd/project/default/get.js +2 -2
  122. package/dist/commands/cicd/project/default/set.js +2 -2
  123. package/dist/commands/cicd/project/default/unset.js +2 -2
  124. package/dist/commands/cicd/project/delete.js +2 -2
  125. package/dist/commands/cicd/project/get.js +2 -2
  126. package/dist/commands/cicd/project/list.js +2 -2
  127. package/dist/commands/cicd/project/open.js +2 -2
  128. package/dist/commands/cicd/project/update.js +2 -2
  129. package/dist/commands/cicd/promotion/conflict/get.js +2 -2
  130. package/dist/commands/cicd/promotion/conflict/list.js +2 -2
  131. package/dist/commands/cicd/promotion/conflict/resolve.js +2 -2
  132. package/dist/commands/cicd/promotion/conflict/unresolve.js +2 -2
  133. package/dist/commands/cicd/promotion/get.js +2 -2
  134. package/dist/commands/cicd/promotion/job-step/update.js +2 -2
  135. package/dist/commands/cicd/promotion/list.js +2 -2
  136. package/dist/commands/cicd/promotion/open.js +2 -2
  137. package/dist/commands/cicd/promotion/queue/list.js +28 -0
  138. package/dist/commands/cicd/promotion/queue/remove.js +37 -0
  139. package/dist/commands/cicd/promotion/run.js +2 -2
  140. package/dist/commands/cicd/repository/auth/https/configure.js +2 -2
  141. package/dist/commands/cicd/repository/auth/oauth/login.js +2 -2
  142. package/dist/commands/cicd/repository/auth/setup.js +2 -2
  143. package/dist/commands/cicd/repository/auth/ssh/configure.js +2 -2
  144. package/dist/commands/cicd/repository/create.js +2 -2
  145. package/dist/commands/cicd/repository/delete.js +2 -2
  146. package/dist/commands/cicd/repository/get.js +2 -2
  147. package/dist/commands/cicd/repository/list.js +2 -2
  148. package/dist/commands/cicd/repository/open.js +2 -2
  149. package/dist/commands/cicd/repository/reset.js +2 -2
  150. package/dist/commands/cicd/repository/update.js +2 -2
  151. package/dist/commands/cicd/repository/validate.js +2 -2
  152. package/dist/commands/cicd/stage/create.js +2 -2
  153. package/dist/commands/cicd/stage/delete.js +2 -2
  154. package/dist/commands/cicd/stage/get.js +2 -2
  155. package/dist/commands/cicd/stage/list.js +2 -2
  156. package/dist/commands/cicd/stage/open.js +2 -2
  157. package/dist/commands/cicd/stage/update.js +2 -2
  158. package/dist/commands/cicd/template/defaults.js +2 -2
  159. package/dist/commands/cicd/template/delete.js +2 -2
  160. package/dist/commands/cicd/template/get.js +2 -2
  161. package/dist/commands/cicd/template/list.js +2 -2
  162. package/dist/commands/cicd/template/upsert.js +2 -2
  163. package/dist/commands/cicd/user/get.js +2 -2
  164. package/dist/commands/cicd/work/ahead-behind.js +2 -2
  165. package/dist/commands/cicd/work/create.js +3 -2
  166. package/dist/commands/cicd/work/delete.js +2 -2
  167. package/dist/commands/cicd/work/deployment-step/create.js +2 -2
  168. package/dist/commands/cicd/work/deployment-step/delete.js +2 -2
  169. package/dist/commands/cicd/work/deployment-step/list.js +2 -2
  170. package/dist/commands/cicd/work/deployment-step/reorder.js +2 -2
  171. package/dist/commands/cicd/work/deployment-step/salesforce-flows.js +2 -2
  172. package/dist/commands/cicd/work/deployment-step/types.js +2 -2
  173. package/dist/commands/cicd/work/deployment-step/update.js +2 -2
  174. package/dist/commands/cicd/work/done.js +2 -2
  175. package/dist/commands/cicd/work/environment-sync.js +10 -9
  176. package/dist/commands/cicd/work/get.js +2 -2
  177. package/dist/commands/cicd/work/list.js +2 -2
  178. package/dist/commands/cicd/work/open.js +2 -2
  179. package/dist/commands/cicd/work/promote.js +2 -2
  180. package/dist/commands/cicd/work/publish.js +2 -2
  181. package/dist/commands/cicd/work/push.js +2 -2
  182. package/dist/commands/cicd/work/set.js +8 -6
  183. package/dist/commands/cicd/work/status.js +2 -2
  184. package/dist/commands/cicd/work/submit.js +5 -4
  185. package/dist/commands/cicd/work/test/apex.js +2 -2
  186. package/dist/commands/cicd/work/test.js +2 -2
  187. package/dist/commands/cicd/work/update.js +3 -2
  188. package/dist/commands/help-agent.js +15 -0
  189. package/dist/commands/help.js +38 -0
  190. package/dist/commands/history/clear.js +42 -0
  191. package/dist/commands/history/list.js +50 -0
  192. package/dist/commands/plugins/install.js +2 -5
  193. package/dist/commands/setup/skills/create.js +28 -2
  194. package/dist/commands/setup/skills/list.js +55 -0
  195. package/dist/commands/setup/skills/update.js +36 -3
  196. package/dist/commands/setup.js +3 -3
  197. package/dist/commands/support.js +15 -0
  198. package/dist/commands/testing/browser/execute.js +49 -0
  199. package/dist/commands/testing/browser/history.js +49 -0
  200. package/dist/commands/testing/browser/inspect.js +35 -0
  201. package/dist/commands/testing/browser/recorder.js +52 -0
  202. package/dist/commands/testing/browser/reports.js +33 -0
  203. package/dist/commands/testing/browser/screenshot.js +27 -0
  204. package/dist/commands/testing/browser/set-options.js +35 -0
  205. package/dist/commands/testing/browser/start.js +51 -0
  206. package/dist/commands/testing/browser/status.js +26 -0
  207. package/dist/commands/testing/browser/stop.js +34 -0
  208. package/dist/commands/testing/browser/view.js +35 -0
  209. package/dist/commands/testing/data-table/create.js +1 -2
  210. package/dist/commands/testing/data-table/delete.js +1 -2
  211. package/dist/commands/testing/data-table/export.js +2 -6
  212. package/dist/commands/testing/data-table/get.js +2 -4
  213. package/dist/commands/testing/data-table/list.js +1 -2
  214. package/dist/commands/testing/data-table/update.js +3 -4
  215. package/dist/commands/testing/job/create.js +26 -22
  216. package/dist/commands/testing/job/delete.js +2 -2
  217. package/dist/commands/testing/job/files/download.js +73 -0
  218. package/dist/commands/testing/job/files/list.js +43 -0
  219. package/dist/commands/testing/job/{upload.js → files/upload.js} +13 -9
  220. package/dist/commands/testing/job/get.js +2 -2
  221. package/dist/commands/testing/job/list.js +1 -1
  222. package/dist/commands/testing/job/refs.js +4 -4
  223. package/dist/commands/testing/job/run.js +134 -1
  224. package/dist/commands/testing/{build → job/runs}/abort.js +10 -8
  225. package/dist/commands/testing/job/runs/get.js +42 -0
  226. package/dist/commands/testing/{build → job/runs}/list.js +19 -10
  227. package/dist/commands/testing/{logs.js → job/runs/logs.js} +9 -6
  228. package/dist/commands/testing/{build → job/runs}/search.js +9 -7
  229. package/dist/commands/testing/job/schedule/get.js +5 -11
  230. package/dist/commands/testing/job/schedule/remove.js +3 -3
  231. package/dist/commands/testing/job/schedule/set.js +3 -3
  232. package/dist/commands/testing/job/update.js +22 -65
  233. package/dist/commands/testing/project/create.js +1 -17
  234. package/dist/commands/testing/project/get.js +0 -1
  235. package/dist/commands/testing/project/list.js +2 -2
  236. package/dist/commands/testing/project/permission/set.js +3 -7
  237. package/dist/commands/testing/project/permission/update.js +2 -2
  238. package/dist/commands/testing/robot/create.js +22 -25
  239. package/dist/commands/testing/robot/get.js +1 -1
  240. package/dist/commands/testing/robot/list.js +3 -3
  241. package/dist/commands/testing/robot/update.js +3 -3
  242. package/dist/commands/testing/user-parameter/create.js +3 -9
  243. package/dist/commands/testing/user-parameter/update.js +1 -7
  244. package/dist/commands/testing/variable/create.js +4 -9
  245. package/dist/commands/testing/variable/list.js +3 -3
  246. package/dist/commands/testing/variable/update.js +5 -12
  247. package/dist/help.js +17 -0
  248. package/dist/hooks/init/cicd-connection.js +59 -0
  249. package/dist/lib/agentia-command.js +69 -6
  250. package/dist/lib/ai-types.js +2 -1
  251. package/dist/lib/cicd-command.js +3 -0
  252. package/dist/lib/cicd-connection.js +22 -0
  253. package/dist/lib/cicd-gateway.js +2 -1
  254. package/dist/lib/claude-mcp-config.js +15 -0
  255. package/dist/lib/command-history-sanitization.js +9 -0
  256. package/dist/lib/command-history.js +11 -0
  257. package/dist/lib/command-output-buffer.js +6 -1
  258. package/dist/lib/credential-sync.js +1 -2
  259. package/dist/lib/defaults-store.js +6 -1
  260. package/dist/lib/dependency-from-changes.js +3 -1
  261. package/dist/lib/dependency-source-context.js +3 -0
  262. package/dist/lib/environment-auth-status.js +2 -1
  263. package/dist/lib/environment-auth.js +2 -1
  264. package/dist/lib/environment-credential-flags.js +3 -1
  265. package/dist/lib/environment-credential-operations.js +8 -2
  266. package/dist/lib/environment-types.js +3 -1
  267. package/dist/lib/extension-configuration-ops.js +4 -0
  268. package/dist/lib/extension-configuration-sanitize.js +7 -0
  269. package/dist/lib/extension-configuration-types.js +8 -0
  270. package/dist/lib/help-agent-command.js +3 -0
  271. package/dist/lib/help-agent-interaction-history.js +10 -0
  272. package/dist/lib/help-agent-session.js +3 -0
  273. package/dist/lib/http-proxy.js +13 -0
  274. package/dist/lib/mcp/ai-tools.js +3 -3
  275. package/dist/lib/mcp/command-id.js +2 -0
  276. package/dist/lib/mcp/pipeline-automation-quality-tools.js +452 -0
  277. package/dist/lib/mcp/result.js +41 -3
  278. package/dist/lib/mcp/server.js +73 -3
  279. package/dist/lib/mcp/testing-browser-tools.js +194 -0
  280. package/dist/lib/mcp/testing-tools.js +242 -552
  281. package/dist/lib/mcp/tool-annotations.js +59 -30
  282. package/dist/lib/mcp/tools.js +202 -66
  283. package/dist/lib/mcp/work-tools.js +18 -4
  284. package/dist/lib/metadata-explore.js +8 -0
  285. package/dist/lib/network-error.js +8 -0
  286. package/dist/lib/pipeline-automation-flags.js +12 -0
  287. package/dist/lib/pipeline-automation-ops.js +9 -0
  288. package/dist/lib/pipeline-automation-types.js +18 -0
  289. package/dist/lib/pipeline-lifecycle-id.js +3 -0
  290. package/dist/lib/pipeline-quality-gate-flags.js +12 -0
  291. package/dist/lib/pipeline-quality-gate-ops.js +9 -0
  292. package/dist/lib/pipeline-quality-gate-types.js +17 -0
  293. package/dist/lib/plugin-host/ai.js +2 -1
  294. package/dist/lib/plugin-skills.js +22 -0
  295. package/dist/lib/plugin-trust/gate.js +1 -2
  296. package/dist/lib/project-root.js +3 -1
  297. package/dist/lib/promotion-queue.js +5 -0
  298. package/dist/lib/promotion-run.js +2 -1
  299. package/dist/lib/runtime.js +1 -1
  300. package/dist/lib/salesforce-tooling-check.js +6 -0
  301. package/dist/lib/skill-packs.js +7 -0
  302. package/dist/lib/support-ai-context.js +11 -0
  303. package/dist/lib/support-ai-stream-parser.js +4 -0
  304. package/dist/lib/support-ai.js +9 -0
  305. package/dist/lib/testing-archive.js +9 -0
  306. package/dist/lib/testing-browser-command.js +6 -0
  307. package/dist/lib/testing-browser-operations.js +17 -0
  308. package/dist/lib/testing-browser-requests.js +11 -0
  309. package/dist/lib/testing-browser-robot.js +9 -0
  310. package/dist/lib/testing-browser-session.js +14 -0
  311. package/dist/lib/testing-browser-state.js +17 -0
  312. package/dist/lib/testing-browser-stream.js +7 -0
  313. package/dist/lib/testing-browser-types.js +3 -0
  314. package/dist/lib/testing-browser-viewer-key.js +7 -0
  315. package/dist/lib/testing-data-table.js +39 -0
  316. package/dist/lib/testing-execution.js +22 -0
  317. package/dist/lib/testing-flags.js +6 -2
  318. package/dist/lib/testing-gateway.js +5 -1
  319. package/dist/lib/testing-operations.js +9 -4
  320. package/dist/lib/testing-sanitization.js +3 -1
  321. package/dist/lib/testing-secret-input.js +2 -1
  322. package/dist/lib/testing-types.js +24 -3
  323. package/dist/lib/work-environment-sync.js +3 -1
  324. package/dist/lib/work-flags.js +6 -1
  325. package/dist/lib/work-local-development-flow.js +4 -0
  326. package/dist/lib/work-promote.js +2 -1
  327. package/dist/lib/work-submit-wait.js +3 -1
  328. package/oclif.manifest.json +8841 -7469
  329. package/package.json +45 -5
  330. package/templates/skills/agentia-ai/SKILL.md +9 -6
  331. package/templates/skills/agentia-ai/references/ai-agents.md +21 -3
  332. package/templates/skills/agentia-cicd/SKILL.md +8 -5
  333. package/templates/skills/agentia-cicd/references/environments-and-credentials.md +35 -13
  334. package/templates/skills/agentia-cicd/references/extensions.md +3 -0
  335. package/templates/skills/agentia-cicd/references/pipelines.md +36 -2
  336. package/templates/skills/agentia-cicd/references/promotions.md +10 -1
  337. package/templates/skills/agentia-cicd/references/work.md +20 -5
  338. package/templates/skills/agentia-metadata/SKILL.md +146 -0
  339. package/templates/skills/agentia-metadata/references/metadata-dependency.md +70 -0
  340. package/templates/skills/agentia-metadata/references/metadata-explore.md +146 -0
  341. package/templates/skills/agentia-testing/SKILL.md +12 -7
  342. package/templates/skills/agentia-testing/references/browser-testing.md +93 -0
  343. package/templates/skills/agentia-testing/references/flow-automation.md +112 -0
  344. package/templates/skills/agentia-testing/references/qforce.md +88 -0
  345. package/templates/skills/agentia-testing/references/qweb.md +103 -0
  346. package/templates/skills/agentia-testing/references/tests.md +31 -23
  347. package/dist/commands/testing/build/get.js +0 -38
  348. package/dist/commands/testing/build/latest.js +0 -40
  349. package/dist/commands/testing/build/logs.js +0 -47
  350. package/dist/commands/testing/build/run.js +0 -26
  351. package/dist/commands/testing/create.js +0 -2
  352. package/dist/commands/testing/job/download.js +0 -54
  353. package/dist/commands/testing/job/files.js +0 -34
  354. package/dist/commands/testing/live/continue.js +0 -21
  355. package/dist/commands/testing/live/execute.js +0 -43
  356. package/dist/commands/testing/live/history.js +0 -35
  357. package/dist/commands/testing/live/inspect.js +0 -30
  358. package/dist/commands/testing/live/interrupt.js +0 -21
  359. package/dist/commands/testing/live/recorder.js +0 -134
  360. package/dist/commands/testing/live/reports.js +0 -31
  361. package/dist/commands/testing/live/screenshot.js +0 -25
  362. package/dist/commands/testing/live/set-options.js +0 -28
  363. package/dist/commands/testing/live/start.js +0 -53
  364. package/dist/commands/testing/live/status.js +0 -27
  365. package/dist/commands/testing/live/stop.js +0 -38
  366. package/dist/commands/testing/live/view.js +0 -36
  367. package/dist/commands/testing/run.js +0 -26
  368. package/dist/commands/testing/status.js +0 -45
  369. package/dist/commands/testing/test/create.js +0 -2
  370. package/dist/commands/testing/test/logs.js +0 -2
  371. package/dist/commands/testing/test/run.js +0 -26
  372. package/dist/commands/testing/test/status.js +0 -2
  373. package/dist/commands/testing/test/update.js +0 -2
  374. package/dist/commands/testing/update.js +0 -65
  375. package/dist/lib/mcp/testing-live-tools.js +0 -215
  376. package/dist/lib/testing-data-command.js +0 -8
  377. package/dist/lib/testing-data-core.js +0 -20
  378. package/dist/lib/testing-data-export.js +0 -6
  379. package/dist/lib/testing-data-import.js +0 -6
  380. package/dist/lib/testing-data-io.js +0 -12
  381. package/dist/lib/testing-data-operations.js +0 -10
  382. package/dist/lib/testing-data-types.js +0 -4
  383. package/dist/lib/testing-live-command.js +0 -6
  384. package/dist/lib/testing-live-endpoints.js +0 -6
  385. package/dist/lib/testing-live-history.js +0 -7
  386. package/dist/lib/testing-live-operations.js +0 -19
  387. package/dist/lib/testing-live-recorder.js +0 -9
  388. package/dist/lib/testing-live-robot.js +0 -9
  389. package/dist/lib/testing-live-state.js +0 -5
  390. package/dist/lib/testing-live-types.js +0 -3
  391. package/dist/lib/testing-run-command.js +0 -3
  392. package/dist/lib/testing-schedule.js +0 -5
  393. package/dist/lib/testing-session.js +0 -5
  394. package/dist/lib/testing-watch.js +0 -4
@@ -21,6 +21,8 @@ const HYPHENATED_TOKEN_REPLACEMENTS = [
21
21
  ['user_parameter', 'user-parameter'],
22
22
  ['dataset_file', 'dataset-file'],
23
23
  ['pipeline_stage_connection', 'pipeline:stage-connection'],
24
+ ['extension_configuration', 'extension-configuration'],
25
+ ['quality_gate', 'quality-gate'],
24
26
  ['result_file', 'result-file'],
25
27
  ['salesforce_flows', 'salesforce-flows'],
26
28
  ['preview_updates', 'preview-updates'],
@@ -0,0 +1,452 @@
1
+ import { z } from 'zod';
2
+ import { fetchExtensionConfiguration, fetchExtensionConfigurations } from '../extension-configuration-ops.js';
3
+ import { listPaginationZodFields, mcpPaginatedListPayload } from '../list-pagination.js';
4
+ import { normalizeAutomationFilterCriteria, validateAutomationCreateControls, } from '../pipeline-automation-flags.js';
5
+ import { activatePipelineAutomationRule, createPipelineAutomationRule, deactivatePipelineAutomationRule, deletePipelineAutomationRule, fetchPipelineAutomationRule, fetchPipelineAutomationRules, updatePipelineAutomationRule, } from '../pipeline-automation-ops.js';
6
+ import { AUTOMATION_CRITERIA_LOGICS, AUTOMATION_CRITERIA_MODES, AUTOMATION_CRITERIA_OPERATORS, AUTOMATION_EXECUTION_TIMES, AUTOMATION_PROMOTION_TRIGGERS, AUTOMATION_SCOPES, AUTOMATION_SOURCE_ACTION_STATUSES, AUTOMATION_SOURCE_ACTIONS, } from '../pipeline-automation-types.js';
7
+ import { assertSalesforceLifecycleId } from '../pipeline-lifecycle-id.js';
8
+ import { buildPipelineQualityGateCreateArgsPayload, normalizeQualityGateFilterCriteria, } from '../pipeline-quality-gate-flags.js';
9
+ import { activatePipelineQualityGate, createPipelineQualityGates, deactivatePipelineQualityGate, deletePipelineQualityGate, fetchPipelineQualityGate, fetchPipelineQualityGates, updatePipelineQualityGate, } from '../pipeline-quality-gate-ops.js';
10
+ import { QUALITY_GATE_EXECUTION_SEQUENCES, QUALITY_GATE_FILTER_FIELDS, QUALITY_GATE_FILTER_OPERATORS, QUALITY_GATE_TESTS_FROM_VALUES, } from '../pipeline-quality-gate-types.js';
11
+ import { safelyHandleTool } from './result.js';
12
+ const automationFilterCriteriaSchema = z
13
+ .object({
14
+ conditions: z
15
+ .array(z.object({
16
+ field: z.string(),
17
+ operator: z.enum(AUTOMATION_CRITERIA_OPERATORS),
18
+ value: z.union([z.string(), z.number(), z.boolean()]),
19
+ }))
20
+ .optional(),
21
+ logic: z.enum(AUTOMATION_CRITERIA_LOGICS).optional(),
22
+ mode: z.enum(AUTOMATION_CRITERIA_MODES),
23
+ whereCondition: z.string().optional(),
24
+ })
25
+ .describe('User-story filter. Builder: {mode:"builder",logic:"AND",conditions:[{field,operator,value}]}. Custom: {mode:"custom",whereCondition:"Name LIKE \'US-%\'"}.');
26
+ const qualityGateFilterCriteriaSchema = z
27
+ .object({
28
+ conditions: z
29
+ .array(z.object({
30
+ field: z.enum(QUALITY_GATE_FILTER_FIELDS),
31
+ operator: z.enum(QUALITY_GATE_FILTER_OPERATORS),
32
+ value: z.string(),
33
+ }))
34
+ .min(1),
35
+ logic: z.string().optional(),
36
+ })
37
+ .describe('Metadata-change filter. Example: {conditions:[{field:"Type",operator:"equals",value:"ApexClass"}],logic:"1"}. Fields: Name, Type, Directory.');
38
+ function buildAutomationCreatePayload(args) {
39
+ const stageIds = args.stageIds ?? [];
40
+ const environmentIds = args.environmentIds ?? [];
41
+ validateAutomationCreateControls({
42
+ cronExpression: args.cronExpression,
43
+ customAutomationConnector: args.customAutomationConnector,
44
+ environmentIds,
45
+ environmentSyncSource: args.environmentSyncSource,
46
+ executionTime: args.executionTime,
47
+ promotionTrigger: args.promotionTrigger,
48
+ scope: args.scope,
49
+ sourceAction: args.sourceAction,
50
+ sourceActionStatus: args.sourceActionStatus,
51
+ stageIds,
52
+ });
53
+ const payload = {
54
+ environmentIds,
55
+ executionTime: args.executionTime,
56
+ name: args.name,
57
+ scope: args.scope,
58
+ stageIds,
59
+ };
60
+ if (args.description !== undefined)
61
+ payload.description = args.description;
62
+ if (args.cronExpression !== undefined)
63
+ payload.cronExpression = args.cronExpression;
64
+ if (args.callbackAction !== undefined)
65
+ payload.callbackAction = args.callbackAction;
66
+ if (args.promotionTrigger !== undefined)
67
+ payload.promotionTrigger = args.promotionTrigger;
68
+ if (args.environmentSyncSource !== undefined)
69
+ payload.environmentSyncSource = args.environmentSyncSource;
70
+ if (args.sourceAction !== undefined)
71
+ payload.sourceAction = args.sourceAction;
72
+ if (args.sourceActionStatus !== undefined)
73
+ payload.sourceActionStatus = args.sourceActionStatus;
74
+ if (args.customAutomationConnector !== undefined) {
75
+ payload.customAutomationConnector = args.customAutomationConnector;
76
+ }
77
+ if (args.filterCriteria !== undefined) {
78
+ payload.filterCriteria = normalizeAutomationFilterCriteria(args.filterCriteria);
79
+ }
80
+ return payload;
81
+ }
82
+ function buildAutomationUpdatePayload(args) {
83
+ const payload = {};
84
+ if (args.name !== undefined)
85
+ payload.name = args.name;
86
+ if (args.description !== undefined)
87
+ payload.description = args.description;
88
+ if (args.executionTime !== undefined)
89
+ payload.executionTime = args.executionTime;
90
+ if (args.cronExpression !== undefined)
91
+ payload.cronExpression = args.cronExpression;
92
+ if (args.callbackAction !== undefined)
93
+ payload.callbackAction = args.callbackAction;
94
+ if (args.stageIds !== undefined)
95
+ payload.stageIds = args.stageIds;
96
+ if (args.environmentIds !== undefined)
97
+ payload.environmentIds = args.environmentIds;
98
+ if (args.promotionTrigger !== undefined)
99
+ payload.promotionTrigger = args.promotionTrigger;
100
+ if (args.environmentSyncSource !== undefined)
101
+ payload.environmentSyncSource = args.environmentSyncSource;
102
+ if (args.sourceAction !== undefined)
103
+ payload.sourceAction = args.sourceAction;
104
+ if (args.sourceActionStatus !== undefined)
105
+ payload.sourceActionStatus = args.sourceActionStatus;
106
+ if (args.customAutomationConnector !== undefined) {
107
+ payload.customAutomationConnector = args.customAutomationConnector;
108
+ }
109
+ if (args.filterCriteria !== undefined) {
110
+ payload.filterCriteria = normalizeAutomationFilterCriteria(args.filterCriteria);
111
+ }
112
+ if (Object.keys(payload).length === 0) {
113
+ throw new Error('Must provide at least one field to update.');
114
+ }
115
+ return payload;
116
+ }
117
+ function buildQualityGateCreatePayload(args) {
118
+ return buildPipelineQualityGateCreateArgsPayload({
119
+ action: args.action,
120
+ entirePipeline: args.entirePipeline,
121
+ environmentIds: args.environmentIds,
122
+ executionSequence: args.executionSequence,
123
+ extensionConfigurationId: args.extensionConfigurationId,
124
+ filterCriteria: args.filterCriteria,
125
+ stageIds: args.stageIds,
126
+ testsFrom: args.testsFrom,
127
+ tool: args.tool,
128
+ });
129
+ }
130
+ function buildQualityGateUpdatePayload(args) {
131
+ const payload = {};
132
+ if (args.action !== undefined)
133
+ payload.action = args.action;
134
+ if (args.executionSequence !== undefined)
135
+ payload.executionSequence = args.executionSequence;
136
+ if (args.extensionConfigurationId !== undefined) {
137
+ payload.extensionConfigurationId = args.extensionConfigurationId;
138
+ }
139
+ if (args.testsFrom !== undefined)
140
+ payload.testsFrom = args.testsFrom;
141
+ if (args.entirePipeline !== undefined)
142
+ payload.entirePipeline = args.entirePipeline;
143
+ if (args.stageId !== undefined)
144
+ payload.stageId = args.stageId;
145
+ if (args.environmentId !== undefined)
146
+ payload.environmentId = args.environmentId;
147
+ if (payload.stageId !== undefined && payload.environmentId !== undefined) {
148
+ throw new Error('stageId and environmentId cannot both be set.');
149
+ }
150
+ if (payload.entirePipeline === true && (payload.stageId !== undefined || payload.environmentId !== undefined)) {
151
+ throw new Error('entirePipeline cannot be combined with stageId or environmentId.');
152
+ }
153
+ if (args.filterCriteria !== undefined) {
154
+ payload.filterCriteria = normalizeQualityGateFilterCriteria(args.filterCriteria);
155
+ }
156
+ if (Object.keys(payload).length === 0) {
157
+ throw new Error('Must provide at least one field to update.');
158
+ }
159
+ return payload;
160
+ }
161
+ async function automationList(args) {
162
+ return mcpPaginatedListPayload('automationRules', await fetchPipelineAutomationRules(args.pipelineId, {
163
+ active: args.active,
164
+ cursor: args.cursor,
165
+ executionTime: args.executionTime,
166
+ includeSystemGenerated: args.includeSystemGenerated,
167
+ name: args.name,
168
+ pageSize: args.pageSize,
169
+ sourceAction: args.sourceAction,
170
+ }));
171
+ }
172
+ async function automationGet(args) {
173
+ return {
174
+ automationRule: await fetchPipelineAutomationRule(args.pipelineId, args.id),
175
+ };
176
+ }
177
+ async function automationCreate(args) {
178
+ return {
179
+ automationRule: await createPipelineAutomationRule(args.pipelineId, buildAutomationCreatePayload(args)),
180
+ };
181
+ }
182
+ async function automationUpdate(args) {
183
+ return {
184
+ automationRule: await updatePipelineAutomationRule(args.pipelineId, args.id, buildAutomationUpdatePayload(args)),
185
+ };
186
+ }
187
+ async function automationDelete(args) {
188
+ await deletePipelineAutomationRule(args.pipelineId, args.id);
189
+ return { id: args.id, pipelineId: args.pipelineId };
190
+ }
191
+ async function automationActivate(args) {
192
+ const id = assertSalesforceLifecycleId(args.id, 'Automation rule ID');
193
+ await activatePipelineAutomationRule(args.pipelineId, id);
194
+ return { id, pipelineId: args.pipelineId };
195
+ }
196
+ async function automationDeactivate(args) {
197
+ const id = assertSalesforceLifecycleId(args.id, 'Automation rule ID');
198
+ await deactivatePipelineAutomationRule(args.pipelineId, id);
199
+ return { id, pipelineId: args.pipelineId };
200
+ }
201
+ async function qualityGateList(args) {
202
+ return mcpPaginatedListPayload('qualityGates', await fetchPipelineQualityGates(args.pipelineId, {
203
+ cursor: args.cursor,
204
+ name: args.name,
205
+ pageSize: args.pageSize,
206
+ tool: args.tool,
207
+ }));
208
+ }
209
+ async function qualityGateGet(args) {
210
+ return {
211
+ qualityGate: await fetchPipelineQualityGate(args.pipelineId, args.id),
212
+ };
213
+ }
214
+ async function qualityGateCreate(args) {
215
+ return {
216
+ qualityGates: await createPipelineQualityGates(args.pipelineId, buildQualityGateCreatePayload(args)),
217
+ };
218
+ }
219
+ async function qualityGateUpdate(args) {
220
+ return {
221
+ qualityGate: await updatePipelineQualityGate(args.pipelineId, args.id, buildQualityGateUpdatePayload(args)),
222
+ };
223
+ }
224
+ async function qualityGateDelete(args) {
225
+ await deletePipelineQualityGate(args.pipelineId, args.id);
226
+ return { id: args.id, pipelineId: args.pipelineId };
227
+ }
228
+ async function qualityGateActivate(args) {
229
+ const id = assertSalesforceLifecycleId(args.id, 'Quality gate ID');
230
+ await activatePipelineQualityGate(args.pipelineId, id);
231
+ return { id, pipelineId: args.pipelineId };
232
+ }
233
+ async function qualityGateDeactivate(args) {
234
+ const id = assertSalesforceLifecycleId(args.id, 'Quality gate ID');
235
+ await deactivatePipelineQualityGate(args.pipelineId, id);
236
+ return { id, pipelineId: args.pipelineId };
237
+ }
238
+ async function extensionConfigurationList(args = {}) {
239
+ return mcpPaginatedListPayload('extensionConfigurations', await fetchExtensionConfigurations({
240
+ active: args.active,
241
+ cursor: args.cursor,
242
+ name: args.name,
243
+ pageSize: args.pageSize,
244
+ testType: args.testType,
245
+ tool: args.tool,
246
+ }));
247
+ }
248
+ async function extensionConfigurationGet(args) {
249
+ return {
250
+ extensionConfiguration: await fetchExtensionConfiguration(args.id),
251
+ };
252
+ }
253
+ export const agentiaMcpPipelineAutomationQualityToolHandlers = {
254
+ extensionConfigurationGet,
255
+ extensionConfigurationList,
256
+ pipelineAutomationActivate: automationActivate,
257
+ pipelineAutomationCreate: automationCreate,
258
+ pipelineAutomationDeactivate: automationDeactivate,
259
+ pipelineAutomationDelete: automationDelete,
260
+ pipelineAutomationGet: automationGet,
261
+ pipelineAutomationList: automationList,
262
+ pipelineAutomationUpdate: automationUpdate,
263
+ pipelineQualityGateActivate: qualityGateActivate,
264
+ pipelineQualityGateCreate: qualityGateCreate,
265
+ pipelineQualityGateDeactivate: qualityGateDeactivate,
266
+ pipelineQualityGateDelete: qualityGateDelete,
267
+ pipelineQualityGateGet: qualityGateGet,
268
+ pipelineQualityGateList: qualityGateList,
269
+ pipelineQualityGateUpdate: qualityGateUpdate,
270
+ };
271
+ export function registerAgentiaMcpPipelineAutomationQualityTools(server) {
272
+ server.registerTool('agentia_pipeline_automation_list', {
273
+ description: 'List Copado pipeline automation rules via the CICD gateway.',
274
+ inputSchema: {
275
+ ...listPaginationZodFields,
276
+ active: z.boolean().optional().describe('Filter by active status.'),
277
+ executionTime: z.enum(AUTOMATION_EXECUTION_TIMES).optional().describe('Filter by execution time.'),
278
+ includeSystemGenerated: z.boolean().optional().describe('Include system-generated rules.'),
279
+ name: z.string().optional().describe('Filter by automation rule name.'),
280
+ pipelineId: z.string().describe('Pipeline ID or name.'),
281
+ sourceAction: z.enum(AUTOMATION_SOURCE_ACTIONS).optional().describe('Filter by source action.'),
282
+ },
283
+ title: 'Agentia Pipeline Automation List',
284
+ }, (args) => safelyHandleTool(() => automationList(args)));
285
+ server.registerTool('agentia_pipeline_automation_get', {
286
+ description: 'Get a Copado pipeline automation rule via the CICD gateway.',
287
+ inputSchema: {
288
+ id: z.string().describe('Automation rule ID or name.'),
289
+ pipelineId: z.string().describe('Pipeline ID or name.'),
290
+ },
291
+ title: 'Agentia Pipeline Automation Get',
292
+ }, (args) => safelyHandleTool(() => automationGet(args)));
293
+ server.registerTool('agentia_pipeline_automation_create', {
294
+ description: 'Create an inactive Copado pipeline automation rule via the CICD gateway.',
295
+ inputSchema: {
296
+ callbackAction: z.string().optional(),
297
+ cronExpression: z.string().optional(),
298
+ customAutomationConnector: z.string().optional(),
299
+ description: z.string().optional(),
300
+ environmentIds: z.array(z.string()).optional(),
301
+ environmentSyncSource: z.string().optional(),
302
+ executionTime: z.enum(AUTOMATION_EXECUTION_TIMES).describe('Execution time.'),
303
+ filterCriteria: automationFilterCriteriaSchema.optional(),
304
+ name: z.string().describe('Automation rule name.'),
305
+ pipelineId: z.string().describe('Pipeline ID or name.'),
306
+ promotionTrigger: z.enum(AUTOMATION_PROMOTION_TRIGGERS).optional(),
307
+ scope: z.enum(AUTOMATION_SCOPES).describe('Automation scope (immutable after create).'),
308
+ sourceAction: z.enum(AUTOMATION_SOURCE_ACTIONS).optional(),
309
+ sourceActionStatus: z.enum(AUTOMATION_SOURCE_ACTION_STATUSES).optional(),
310
+ stageIds: z.array(z.string()).optional(),
311
+ },
312
+ title: 'Agentia Pipeline Automation Create',
313
+ }, (args) => safelyHandleTool(() => automationCreate(args)));
314
+ server.registerTool('agentia_pipeline_automation_update', {
315
+ description: 'Update a Copado pipeline automation rule via the CICD gateway. Scope is immutable.',
316
+ inputSchema: {
317
+ callbackAction: z.string().optional(),
318
+ cronExpression: z.string().optional(),
319
+ customAutomationConnector: z.string().optional(),
320
+ description: z.string().optional(),
321
+ environmentIds: z.array(z.string()).optional(),
322
+ environmentSyncSource: z.string().optional(),
323
+ executionTime: z.enum(AUTOMATION_EXECUTION_TIMES).optional(),
324
+ filterCriteria: automationFilterCriteriaSchema.optional(),
325
+ id: z.string().describe('Automation rule ID or name.'),
326
+ name: z.string().optional(),
327
+ pipelineId: z.string().describe('Pipeline ID or name.'),
328
+ promotionTrigger: z.enum(AUTOMATION_PROMOTION_TRIGGERS).optional(),
329
+ sourceAction: z.enum(AUTOMATION_SOURCE_ACTIONS).optional(),
330
+ sourceActionStatus: z.enum(AUTOMATION_SOURCE_ACTION_STATUSES).optional(),
331
+ stageIds: z.array(z.string()).optional(),
332
+ },
333
+ title: 'Agentia Pipeline Automation Update',
334
+ }, (args) => safelyHandleTool(() => automationUpdate(args)));
335
+ server.registerTool('agentia_pipeline_automation_delete', {
336
+ description: 'Delete a Copado pipeline automation rule via the CICD gateway.',
337
+ inputSchema: {
338
+ id: z.string().describe('Automation rule ID or name.'),
339
+ pipelineId: z.string().describe('Pipeline ID or name.'),
340
+ },
341
+ title: 'Agentia Pipeline Automation Delete',
342
+ }, (args) => safelyHandleTool(() => automationDelete(args)));
343
+ server.registerTool('agentia_pipeline_automation_activate', {
344
+ description: 'Activate a Copado pipeline automation rule. Requires a Salesforce Id (not name).',
345
+ inputSchema: {
346
+ id: z.string().describe('Automation rule Salesforce ID.'),
347
+ pipelineId: z.string().describe('Pipeline ID or name.'),
348
+ },
349
+ title: 'Agentia Pipeline Automation Activate',
350
+ }, (args) => safelyHandleTool(() => automationActivate(args)));
351
+ server.registerTool('agentia_pipeline_automation_deactivate', {
352
+ description: 'Deactivate a Copado pipeline automation rule. Requires a Salesforce Id (not name).',
353
+ inputSchema: {
354
+ id: z.string().describe('Automation rule Salesforce ID.'),
355
+ pipelineId: z.string().describe('Pipeline ID or name.'),
356
+ },
357
+ title: 'Agentia Pipeline Automation Deactivate',
358
+ }, (args) => safelyHandleTool(() => automationDeactivate(args)));
359
+ server.registerTool('agentia_pipeline_quality_gate_list', {
360
+ description: 'List Copado pipeline quality gates via the CICD gateway.',
361
+ inputSchema: {
362
+ ...listPaginationZodFields,
363
+ name: z.string().optional().describe('Filter by quality gate name.'),
364
+ pipelineId: z.string().describe('Pipeline ID or name.'),
365
+ tool: z.string().optional().describe('Filter by tool.'),
366
+ },
367
+ title: 'Agentia Pipeline Quality Gate List',
368
+ }, (args) => safelyHandleTool(() => qualityGateList(args)));
369
+ server.registerTool('agentia_pipeline_quality_gate_get', {
370
+ description: 'Get a Copado pipeline quality gate via the CICD gateway.',
371
+ inputSchema: {
372
+ id: z.string().describe('Quality gate ID or name.'),
373
+ pipelineId: z.string().describe('Pipeline ID or name.'),
374
+ },
375
+ title: 'Agentia Pipeline Quality Gate Get',
376
+ }, (args) => safelyHandleTool(() => qualityGateGet(args)));
377
+ server.registerTool('agentia_pipeline_quality_gate_create', {
378
+ description: 'Create inactive Copado pipeline quality gates via the CICD gateway.',
379
+ inputSchema: {
380
+ action: z.string().describe('Pipeline action the gate runs for (for example Commit, Promotion, Deployment).'),
381
+ entirePipeline: z.boolean().optional().describe('Apply to the entire pipeline.'),
382
+ environmentIds: z.array(z.string()).optional(),
383
+ executionSequence: z.enum(QUALITY_GATE_EXECUTION_SEQUENCES).describe('Execution sequence.'),
384
+ extensionConfigurationId: z.string().describe('Active extension configuration ID.'),
385
+ filterCriteria: qualityGateFilterCriteriaSchema.optional(),
386
+ pipelineId: z.string().describe('Pipeline ID or name.'),
387
+ stageIds: z.array(z.string()).optional(),
388
+ testsFrom: z.enum(QUALITY_GATE_TESTS_FROM_VALUES).optional(),
389
+ tool: z.string().describe('Quality gate tool name.'),
390
+ },
391
+ title: 'Agentia Pipeline Quality Gate Create',
392
+ }, (args) => safelyHandleTool(() => qualityGateCreate(args)));
393
+ server.registerTool('agentia_pipeline_quality_gate_update', {
394
+ description: 'Update an inactive Copado pipeline quality gate via the CICD gateway.',
395
+ inputSchema: {
396
+ action: z.string().optional(),
397
+ entirePipeline: z.boolean().optional(),
398
+ environmentId: z.string().optional(),
399
+ executionSequence: z.enum(QUALITY_GATE_EXECUTION_SEQUENCES).optional(),
400
+ extensionConfigurationId: z.string().optional(),
401
+ filterCriteria: qualityGateFilterCriteriaSchema.optional(),
402
+ id: z.string().describe('Quality gate ID or name.'),
403
+ pipelineId: z.string().describe('Pipeline ID or name.'),
404
+ stageId: z.string().optional(),
405
+ testsFrom: z.enum(QUALITY_GATE_TESTS_FROM_VALUES).optional(),
406
+ },
407
+ title: 'Agentia Pipeline Quality Gate Update',
408
+ }, (args) => safelyHandleTool(() => qualityGateUpdate(args)));
409
+ server.registerTool('agentia_pipeline_quality_gate_delete', {
410
+ description: 'Delete an inactive Copado pipeline quality gate via the CICD gateway.',
411
+ inputSchema: {
412
+ id: z.string().describe('Quality gate ID or name.'),
413
+ pipelineId: z.string().describe('Pipeline ID or name.'),
414
+ },
415
+ title: 'Agentia Pipeline Quality Gate Delete',
416
+ }, (args) => safelyHandleTool(() => qualityGateDelete(args)));
417
+ server.registerTool('agentia_pipeline_quality_gate_activate', {
418
+ description: 'Activate a Copado pipeline quality gate. Requires a Salesforce Id (not name).',
419
+ inputSchema: {
420
+ id: z.string().describe('Quality gate Salesforce ID.'),
421
+ pipelineId: z.string().describe('Pipeline ID or name.'),
422
+ },
423
+ title: 'Agentia Pipeline Quality Gate Activate',
424
+ }, (args) => safelyHandleTool(() => qualityGateActivate(args)));
425
+ server.registerTool('agentia_pipeline_quality_gate_deactivate', {
426
+ description: 'Deactivate a Copado pipeline quality gate. Requires a Salesforce Id (not name).',
427
+ inputSchema: {
428
+ id: z.string().describe('Quality gate Salesforce ID.'),
429
+ pipelineId: z.string().describe('Pipeline ID or name.'),
430
+ },
431
+ title: 'Agentia Pipeline Quality Gate Deactivate',
432
+ }, (args) => safelyHandleTool(() => qualityGateDeactivate(args)));
433
+ server.registerTool('agentia_extension_configuration_list', {
434
+ description: 'List Copado extension configurations via the CICD gateway.',
435
+ inputSchema: {
436
+ ...listPaginationZodFields,
437
+ active: z.boolean().optional().describe('Filter by active status.'),
438
+ name: z.string().optional().describe('Filter by name.'),
439
+ testType: z.string().optional().describe('Filter by test type.'),
440
+ tool: z.string().optional().describe('Filter by extension tool.'),
441
+ },
442
+ title: 'Agentia Extension Configuration List',
443
+ }, (args) => safelyHandleTool(() => extensionConfigurationList(args || {})));
444
+ server.registerTool('agentia_extension_configuration_get', {
445
+ description: 'Get a Copado extension configuration via the CICD gateway.',
446
+ inputSchema: {
447
+ id: z.string().describe('Extension configuration ID or name.'),
448
+ },
449
+ title: 'Agentia Extension Configuration Get',
450
+ }, (args) => safelyHandleTool(() => extensionConfigurationGet(args)));
451
+ }
452
+ //# sourceMappingURL=pipeline-automation-quality-tools.js.map
@@ -1,14 +1,52 @@
1
+ import { createRequire } from 'node:module';
2
+ import { runWithCicdConnectionOverride } from '../cicd-connection.js';
1
3
  import { createTransactionId, runWithGatewayTransactionContext } from '../cicd-gateway.js';
4
+ import { recordMcpToolHistory } from '../command-history.js';
2
5
  import { mcpCommandIdFromToolName, mcpToolNameFromHandler } from './command-id.js';
3
6
  import { redactErrorMessage, redactSecrets } from './redaction.js';
7
+ const require = createRequire(import.meta.url);
8
+ const packageJson = require('../../../package.json');
4
9
  export { mcpToolNameFromHandler } from './command-id.js';
5
- export function runWithMcpToolContext(toolName, fn) {
6
- return runWithGatewayTransactionContext({ origin: 'mcp', referer: mcpCommandIdFromToolName(toolName), transactionId: createTransactionId() }, fn);
10
+ export function runWithMcpToolContext(toolName, fn, options = {}) {
11
+ const transactionId = createTransactionId();
12
+ const executionId = createTransactionId();
13
+ const commandId = mcpCommandIdFromToolName(toolName);
14
+ const startedAtMs = Date.now();
15
+ return runWithGatewayTransactionContext({ origin: 'mcp', referer: commandId, transactionId }, async () => {
16
+ let error;
17
+ try {
18
+ return await runWithCicdConnectionOverride(options.cicdConnection, fn);
19
+ }
20
+ catch (error_) {
21
+ error = error_;
22
+ throw error_;
23
+ }
24
+ finally {
25
+ await recordMcpToolHistory({
26
+ cliVersion: packageJson.version,
27
+ commandId,
28
+ error,
29
+ executionId,
30
+ startedAtMs,
31
+ transactionId,
32
+ });
33
+ }
34
+ });
35
+ }
36
+ export function cicdConnectionFromToolArgs(args) {
37
+ const first = args[0];
38
+ if (first === null || typeof first !== 'object' || Array.isArray(first))
39
+ return undefined;
40
+ const value = first.cicdConnection;
41
+ return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;
7
42
  }
8
43
  export function wrapMcpToolHandlers(handlers) {
9
44
  return Object.fromEntries(Object.entries(handlers).map(([name, handler]) => [
10
45
  name,
11
- (...args) => runWithMcpToolContext(mcpToolNameFromHandler(name), () => handler(...args)),
46
+ (...args) => {
47
+ const cicdConnection = cicdConnectionFromToolArgs(args);
48
+ return runWithMcpToolContext(mcpToolNameFromHandler(name), () => handler(...args), { cicdConnection });
49
+ },
12
50
  ]));
13
51
  }
14
52
  export function toolResult(data) {
@@ -2,23 +2,81 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
3
  import { createRequire } from 'node:module';
4
4
  import process from 'node:process';
5
+ import { z } from 'zod';
6
+ import { logVerboseDebug } from '../debug.js';
5
7
  import { migrateUserSettingsFromProjectConfig } from '../defaults-store.js';
6
8
  import { applyProjectRoot, hasExplicitProjectRoot } from '../project-root.js';
7
9
  import { runWithMcpRequestSignal } from './request-context.js';
8
- import { runWithMcpToolContext } from './result.js';
10
+ import { cicdConnectionFromToolArgs, runWithMcpToolContext } from './result.js';
9
11
  import { withToolAnnotations } from './tool-annotations.js';
10
12
  import { registerAgentiaMcpTools } from './tools.js';
11
13
  const require = createRequire(import.meta.url);
12
14
  const packageJson = require('../../../package.json');
15
+ /**
16
+ * SDK ListRootsResultSchema requires every uri to start with file://.
17
+ * Some clients send empty or non-file URIs; accept them here and filter below.
18
+ */
19
+ const LenientListRootsResultSchema = z
20
+ .object({
21
+ roots: z.array(z.unknown()).optional().default([]),
22
+ })
23
+ .passthrough();
24
+ /** Keep only usable local file roots; empty / non-file:// entries are ignored. */
25
+ export function collectMcpFileRootUris(roots) {
26
+ const uris = [];
27
+ for (const root of roots) {
28
+ if (root === null || typeof root !== 'object')
29
+ continue;
30
+ const { uri } = root;
31
+ if (typeof uri !== 'string')
32
+ continue;
33
+ const trimmed = uri.trim();
34
+ if (trimmed.startsWith('file://'))
35
+ uris.push(trimmed);
36
+ }
37
+ return uris;
38
+ }
13
39
  export function createAgentiaMcpServer(lifecycleSignal, projectContextReady = Promise.resolve()) {
14
40
  const server = new McpServer({
15
41
  name: packageJson.name ?? 'agentia-cli',
16
42
  version: packageJson.version,
17
43
  });
44
+ installMcpClientCallDebugLogging(server.server);
18
45
  wrapMcpToolRegistration(server, lifecycleSignal, projectContextReady);
19
46
  registerAgentiaMcpTools(server);
20
47
  return server;
21
48
  }
49
+ /**
50
+ * Log every server→client MCP request/notification when DEBUG=verbose.
51
+ * Covers roots/list and any future client calls made through the protocol.
52
+ */
53
+ export function installMcpClientCallDebugLogging(protocol) {
54
+ const target = protocol;
55
+ const originalRequest = target.request.bind(target);
56
+ target.request = async (request, resultSchema, options) => {
57
+ logVerboseDebug('MCP client request', request);
58
+ try {
59
+ const result = await originalRequest(request, resultSchema, options);
60
+ logVerboseDebug('MCP client response', {
61
+ method: typeof request?.method === 'string' ? request.method : undefined,
62
+ result,
63
+ });
64
+ return result;
65
+ }
66
+ catch (error) {
67
+ logVerboseDebug('MCP client error', {
68
+ error: error instanceof Error ? error.message : String(error),
69
+ method: typeof request?.method === 'string' ? request.method : undefined,
70
+ });
71
+ throw error;
72
+ }
73
+ };
74
+ const originalNotification = target.notification.bind(target);
75
+ target.notification = async (notification, options) => {
76
+ logVerboseDebug('MCP client notification', notification);
77
+ await originalNotification(notification, options);
78
+ };
79
+ }
22
80
  function combineSignals(requestSignal, lifecycleSignal) {
23
81
  if (requestSignal === undefined || lifecycleSignal === undefined) {
24
82
  return { dispose() { }, signal: requestSignal ?? lifecycleSignal };
@@ -47,10 +105,11 @@ function wrapMcpToolRegistration(server, lifecycleSignal, projectContextReady =
47
105
  server.registerTool = ((name, config, handler) => registerTool(name, withToolAnnotations(name, config), (...args) => {
48
106
  const extra = args.at(-1);
49
107
  const { dispose, signal } = combineSignals(extra?.signal, lifecycleSignal);
108
+ const cicdConnection = cicdConnectionFromToolArgs(args);
50
109
  return runWithMcpRequestSignal(signal, async () => {
51
110
  try {
52
111
  await projectContextReady;
53
- return await runWithMcpToolContext(name, async () => handler(...args));
112
+ return await runWithMcpToolContext(name, async () => handler(...args), { cicdConnection });
54
113
  }
55
114
  finally {
56
115
  dispose();
@@ -61,8 +120,19 @@ function wrapMcpToolRegistration(server, lifecycleSignal, projectContextReady =
61
120
  function clientSupportsRoots(server) {
62
121
  return (server.server._clientCapabilities?.roots !== undefined);
63
122
  }
123
+ async function listMcpFileRootUris(server) {
124
+ try {
125
+ const result = await server.server.request({ method: 'roots/list' }, LenientListRootsResultSchema);
126
+ return collectMcpFileRootUris(result.roots);
127
+ }
128
+ catch (error) {
129
+ const message = error instanceof Error ? error.message : String(error);
130
+ process.stderr.write(`[agentia-mcp] ignoring invalid MCP roots/list response: ${message}\n`);
131
+ return undefined;
132
+ }
133
+ }
64
134
  async function applyMcpProjectRoot(server, includeMcpRoots) {
65
- const rootUris = includeMcpRoots ? (await server.server.listRoots()).roots.map((root) => root.uri) : undefined;
135
+ const rootUris = includeMcpRoots ? await listMcpFileRootUris(server) : undefined;
66
136
  applyProjectRoot(undefined, rootUris);
67
137
  await migrateUserSettingsFromProjectConfig().catch(() => {
68
138
  // Best-effort; MCP tools still fall back to reading legacy project keys.