@synth-deploy/server 0.1.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 (317) hide show
  1. package/dist/agent/debrief-retention.d.ts +12 -0
  2. package/dist/agent/debrief-retention.d.ts.map +1 -0
  3. package/dist/agent/debrief-retention.js +27 -0
  4. package/dist/agent/debrief-retention.js.map +1 -0
  5. package/dist/agent/envoy-client.d.ts +216 -0
  6. package/dist/agent/envoy-client.d.ts.map +1 -0
  7. package/dist/agent/envoy-client.js +266 -0
  8. package/dist/agent/envoy-client.js.map +1 -0
  9. package/dist/agent/envoy-registry.d.ts +102 -0
  10. package/dist/agent/envoy-registry.d.ts.map +1 -0
  11. package/dist/agent/envoy-registry.js +319 -0
  12. package/dist/agent/envoy-registry.js.map +1 -0
  13. package/dist/agent/health-checker.d.ts +39 -0
  14. package/dist/agent/health-checker.d.ts.map +1 -0
  15. package/dist/agent/health-checker.js +49 -0
  16. package/dist/agent/health-checker.js.map +1 -0
  17. package/dist/agent/mcp-client-manager.d.ts +36 -0
  18. package/dist/agent/mcp-client-manager.d.ts.map +1 -0
  19. package/dist/agent/mcp-client-manager.js +106 -0
  20. package/dist/agent/mcp-client-manager.js.map +1 -0
  21. package/dist/agent/stale-deployment-detector.d.ts +15 -0
  22. package/dist/agent/stale-deployment-detector.d.ts.map +1 -0
  23. package/dist/agent/stale-deployment-detector.js +50 -0
  24. package/dist/agent/stale-deployment-detector.js.map +1 -0
  25. package/dist/agent/step-runner.d.ts +31 -0
  26. package/dist/agent/step-runner.d.ts.map +1 -0
  27. package/dist/agent/step-runner.js +80 -0
  28. package/dist/agent/step-runner.js.map +1 -0
  29. package/dist/agent/synth-agent.d.ts +168 -0
  30. package/dist/agent/synth-agent.d.ts.map +1 -0
  31. package/dist/agent/synth-agent.js +1195 -0
  32. package/dist/agent/synth-agent.js.map +1 -0
  33. package/dist/api/agent.d.ts +36 -0
  34. package/dist/api/agent.d.ts.map +1 -0
  35. package/dist/api/agent.js +867 -0
  36. package/dist/api/agent.js.map +1 -0
  37. package/dist/api/api-keys.d.ts +4 -0
  38. package/dist/api/api-keys.d.ts.map +1 -0
  39. package/dist/api/api-keys.js +118 -0
  40. package/dist/api/api-keys.js.map +1 -0
  41. package/dist/api/artifacts.d.ts +5 -0
  42. package/dist/api/artifacts.d.ts.map +1 -0
  43. package/dist/api/artifacts.js +142 -0
  44. package/dist/api/artifacts.js.map +1 -0
  45. package/dist/api/auth.d.ts +4 -0
  46. package/dist/api/auth.d.ts.map +1 -0
  47. package/dist/api/auth.js +280 -0
  48. package/dist/api/auth.js.map +1 -0
  49. package/dist/api/deployments.d.ts +11 -0
  50. package/dist/api/deployments.d.ts.map +1 -0
  51. package/dist/api/deployments.js +1098 -0
  52. package/dist/api/deployments.js.map +1 -0
  53. package/dist/api/environments.d.ts +5 -0
  54. package/dist/api/environments.d.ts.map +1 -0
  55. package/dist/api/environments.js +69 -0
  56. package/dist/api/environments.js.map +1 -0
  57. package/dist/api/envoy-reports.d.ts +17 -0
  58. package/dist/api/envoy-reports.d.ts.map +1 -0
  59. package/dist/api/envoy-reports.js +138 -0
  60. package/dist/api/envoy-reports.js.map +1 -0
  61. package/dist/api/envoys.d.ts +5 -0
  62. package/dist/api/envoys.d.ts.map +1 -0
  63. package/dist/api/envoys.js +192 -0
  64. package/dist/api/envoys.js.map +1 -0
  65. package/dist/api/fleet.d.ts +11 -0
  66. package/dist/api/fleet.d.ts.map +1 -0
  67. package/dist/api/fleet.js +394 -0
  68. package/dist/api/fleet.js.map +1 -0
  69. package/dist/api/graph.d.ts +8 -0
  70. package/dist/api/graph.d.ts.map +1 -0
  71. package/dist/api/graph.js +355 -0
  72. package/dist/api/graph.js.map +1 -0
  73. package/dist/api/health.d.ts +20 -0
  74. package/dist/api/health.d.ts.map +1 -0
  75. package/dist/api/health.js +248 -0
  76. package/dist/api/health.js.map +1 -0
  77. package/dist/api/idp-schemas.d.ts +41 -0
  78. package/dist/api/idp-schemas.d.ts.map +1 -0
  79. package/dist/api/idp-schemas.js +17 -0
  80. package/dist/api/idp-schemas.js.map +1 -0
  81. package/dist/api/idp.d.ts +6 -0
  82. package/dist/api/idp.d.ts.map +1 -0
  83. package/dist/api/idp.js +620 -0
  84. package/dist/api/idp.js.map +1 -0
  85. package/dist/api/intake.d.ts +10 -0
  86. package/dist/api/intake.d.ts.map +1 -0
  87. package/dist/api/intake.js +418 -0
  88. package/dist/api/intake.js.map +1 -0
  89. package/dist/api/partitions.d.ts +5 -0
  90. package/dist/api/partitions.d.ts.map +1 -0
  91. package/dist/api/partitions.js +113 -0
  92. package/dist/api/partitions.js.map +1 -0
  93. package/dist/api/progress-event-store.d.ts +62 -0
  94. package/dist/api/progress-event-store.d.ts.map +1 -0
  95. package/dist/api/progress-event-store.js +118 -0
  96. package/dist/api/progress-event-store.js.map +1 -0
  97. package/dist/api/schemas.d.ts +1000 -0
  98. package/dist/api/schemas.d.ts.map +1 -0
  99. package/dist/api/schemas.js +328 -0
  100. package/dist/api/schemas.js.map +1 -0
  101. package/dist/api/security-boundaries.d.ts +4 -0
  102. package/dist/api/security-boundaries.d.ts.map +1 -0
  103. package/dist/api/security-boundaries.js +32 -0
  104. package/dist/api/security-boundaries.js.map +1 -0
  105. package/dist/api/settings.d.ts +4 -0
  106. package/dist/api/settings.d.ts.map +1 -0
  107. package/dist/api/settings.js +99 -0
  108. package/dist/api/settings.js.map +1 -0
  109. package/dist/api/system.d.ts +75 -0
  110. package/dist/api/system.d.ts.map +1 -0
  111. package/dist/api/system.js +558 -0
  112. package/dist/api/system.js.map +1 -0
  113. package/dist/api/telemetry.d.ts +4 -0
  114. package/dist/api/telemetry.d.ts.map +1 -0
  115. package/dist/api/telemetry.js +24 -0
  116. package/dist/api/telemetry.js.map +1 -0
  117. package/dist/api/users.d.ts +4 -0
  118. package/dist/api/users.d.ts.map +1 -0
  119. package/dist/api/users.js +173 -0
  120. package/dist/api/users.js.map +1 -0
  121. package/dist/archive-unpacker.d.ts +24 -0
  122. package/dist/archive-unpacker.d.ts.map +1 -0
  123. package/dist/archive-unpacker.js +239 -0
  124. package/dist/archive-unpacker.js.map +1 -0
  125. package/dist/artifact-analyzer.d.ts +59 -0
  126. package/dist/artifact-analyzer.d.ts.map +1 -0
  127. package/dist/artifact-analyzer.js +334 -0
  128. package/dist/artifact-analyzer.js.map +1 -0
  129. package/dist/auth/idp/index.d.ts +9 -0
  130. package/dist/auth/idp/index.d.ts.map +1 -0
  131. package/dist/auth/idp/index.js +5 -0
  132. package/dist/auth/idp/index.js.map +1 -0
  133. package/dist/auth/idp/ldap.d.ts +56 -0
  134. package/dist/auth/idp/ldap.d.ts.map +1 -0
  135. package/dist/auth/idp/ldap.js +276 -0
  136. package/dist/auth/idp/ldap.js.map +1 -0
  137. package/dist/auth/idp/oidc.d.ts +27 -0
  138. package/dist/auth/idp/oidc.d.ts.map +1 -0
  139. package/dist/auth/idp/oidc.js +97 -0
  140. package/dist/auth/idp/oidc.js.map +1 -0
  141. package/dist/auth/idp/role-mapping.d.ts +9 -0
  142. package/dist/auth/idp/role-mapping.d.ts.map +1 -0
  143. package/dist/auth/idp/role-mapping.js +16 -0
  144. package/dist/auth/idp/role-mapping.js.map +1 -0
  145. package/dist/auth/idp/saml.d.ts +40 -0
  146. package/dist/auth/idp/saml.d.ts.map +1 -0
  147. package/dist/auth/idp/saml.js +117 -0
  148. package/dist/auth/idp/saml.js.map +1 -0
  149. package/dist/auth/idp/types.d.ts +23 -0
  150. package/dist/auth/idp/types.d.ts.map +1 -0
  151. package/dist/auth/idp/types.js +2 -0
  152. package/dist/auth/idp/types.js.map +1 -0
  153. package/dist/fleet/fleet-executor.d.ts +35 -0
  154. package/dist/fleet/fleet-executor.d.ts.map +1 -0
  155. package/dist/fleet/fleet-executor.js +228 -0
  156. package/dist/fleet/fleet-executor.js.map +1 -0
  157. package/dist/fleet/fleet-store.d.ts +13 -0
  158. package/dist/fleet/fleet-store.d.ts.map +1 -0
  159. package/dist/fleet/fleet-store.js +13 -0
  160. package/dist/fleet/fleet-store.js.map +1 -0
  161. package/dist/fleet/index.d.ts +5 -0
  162. package/dist/fleet/index.d.ts.map +1 -0
  163. package/dist/fleet/index.js +4 -0
  164. package/dist/fleet/index.js.map +1 -0
  165. package/dist/fleet/representative-selector.d.ts +15 -0
  166. package/dist/fleet/representative-selector.d.ts.map +1 -0
  167. package/dist/fleet/representative-selector.js +71 -0
  168. package/dist/fleet/representative-selector.js.map +1 -0
  169. package/dist/graph/graph-executor.d.ts +36 -0
  170. package/dist/graph/graph-executor.d.ts.map +1 -0
  171. package/dist/graph/graph-executor.js +348 -0
  172. package/dist/graph/graph-executor.js.map +1 -0
  173. package/dist/graph/graph-inference.d.ts +22 -0
  174. package/dist/graph/graph-inference.d.ts.map +1 -0
  175. package/dist/graph/graph-inference.js +149 -0
  176. package/dist/graph/graph-inference.js.map +1 -0
  177. package/dist/graph/graph-store.d.ts +12 -0
  178. package/dist/graph/graph-store.d.ts.map +1 -0
  179. package/dist/graph/graph-store.js +61 -0
  180. package/dist/graph/graph-store.js.map +1 -0
  181. package/dist/graph/index.d.ts +5 -0
  182. package/dist/graph/index.d.ts.map +1 -0
  183. package/dist/graph/index.js +4 -0
  184. package/dist/graph/index.js.map +1 -0
  185. package/dist/index.d.ts +2 -0
  186. package/dist/index.d.ts.map +1 -0
  187. package/dist/index.js +837 -0
  188. package/dist/index.js.map +1 -0
  189. package/dist/intake/index.d.ts +6 -0
  190. package/dist/intake/index.d.ts.map +1 -0
  191. package/dist/intake/index.js +5 -0
  192. package/dist/intake/index.js.map +1 -0
  193. package/dist/intake/intake-processor.d.ts +17 -0
  194. package/dist/intake/intake-processor.d.ts.map +1 -0
  195. package/dist/intake/intake-processor.js +99 -0
  196. package/dist/intake/intake-processor.js.map +1 -0
  197. package/dist/intake/intake-store.d.ts +7 -0
  198. package/dist/intake/intake-store.d.ts.map +1 -0
  199. package/dist/intake/intake-store.js +7 -0
  200. package/dist/intake/intake-store.js.map +1 -0
  201. package/dist/intake/registry-poller.d.ts +41 -0
  202. package/dist/intake/registry-poller.d.ts.map +1 -0
  203. package/dist/intake/registry-poller.js +202 -0
  204. package/dist/intake/registry-poller.js.map +1 -0
  205. package/dist/intake/webhook-handlers.d.ts +37 -0
  206. package/dist/intake/webhook-handlers.d.ts.map +1 -0
  207. package/dist/intake/webhook-handlers.js +268 -0
  208. package/dist/intake/webhook-handlers.js.map +1 -0
  209. package/dist/logger.d.ts +5 -0
  210. package/dist/logger.d.ts.map +1 -0
  211. package/dist/logger.js +15 -0
  212. package/dist/logger.js.map +1 -0
  213. package/dist/mcp/resources.d.ts +9 -0
  214. package/dist/mcp/resources.d.ts.map +1 -0
  215. package/dist/mcp/resources.js +72 -0
  216. package/dist/mcp/resources.js.map +1 -0
  217. package/dist/mcp/server.d.ts +15 -0
  218. package/dist/mcp/server.d.ts.map +1 -0
  219. package/dist/mcp/server.js +20 -0
  220. package/dist/mcp/server.js.map +1 -0
  221. package/dist/mcp/tools.d.ts +9 -0
  222. package/dist/mcp/tools.d.ts.map +1 -0
  223. package/dist/mcp/tools.js +88 -0
  224. package/dist/mcp/tools.js.map +1 -0
  225. package/dist/middleware/auth.d.ts +29 -0
  226. package/dist/middleware/auth.d.ts.map +1 -0
  227. package/dist/middleware/auth.js +76 -0
  228. package/dist/middleware/auth.js.map +1 -0
  229. package/dist/middleware/permissions.d.ts +13 -0
  230. package/dist/middleware/permissions.d.ts.map +1 -0
  231. package/dist/middleware/permissions.js +32 -0
  232. package/dist/middleware/permissions.js.map +1 -0
  233. package/dist/pattern-store.d.ts +104 -0
  234. package/dist/pattern-store.d.ts.map +1 -0
  235. package/dist/pattern-store.js +299 -0
  236. package/dist/pattern-store.js.map +1 -0
  237. package/package.json +54 -0
  238. package/src/agent/debrief-retention.ts +44 -0
  239. package/src/agent/envoy-client.ts +474 -0
  240. package/src/agent/envoy-registry.ts +384 -0
  241. package/src/agent/health-checker.ts +70 -0
  242. package/src/agent/mcp-client-manager.ts +131 -0
  243. package/src/agent/stale-deployment-detector.ts +79 -0
  244. package/src/agent/step-runner.ts +124 -0
  245. package/src/agent/synth-agent.ts +1567 -0
  246. package/src/api/agent.ts +1075 -0
  247. package/src/api/api-keys.ts +129 -0
  248. package/src/api/artifacts.ts +194 -0
  249. package/src/api/auth.ts +320 -0
  250. package/src/api/deployments.ts +1347 -0
  251. package/src/api/environments.ts +97 -0
  252. package/src/api/envoy-reports.ts +159 -0
  253. package/src/api/envoys.ts +237 -0
  254. package/src/api/fleet.ts +510 -0
  255. package/src/api/graph.ts +516 -0
  256. package/src/api/health.ts +311 -0
  257. package/src/api/idp-schemas.ts +19 -0
  258. package/src/api/idp.ts +735 -0
  259. package/src/api/intake.ts +537 -0
  260. package/src/api/partitions.ts +147 -0
  261. package/src/api/progress-event-store.ts +153 -0
  262. package/src/api/schemas.ts +376 -0
  263. package/src/api/security-boundaries.ts +54 -0
  264. package/src/api/settings.ts +118 -0
  265. package/src/api/system.ts +704 -0
  266. package/src/api/telemetry.ts +32 -0
  267. package/src/api/users.ts +210 -0
  268. package/src/archive-unpacker.ts +271 -0
  269. package/src/artifact-analyzer.ts +438 -0
  270. package/src/auth/idp/index.ts +8 -0
  271. package/src/auth/idp/ldap.ts +340 -0
  272. package/src/auth/idp/oidc.ts +117 -0
  273. package/src/auth/idp/role-mapping.ts +22 -0
  274. package/src/auth/idp/saml.ts +148 -0
  275. package/src/auth/idp/types.ts +22 -0
  276. package/src/fleet/fleet-executor.ts +309 -0
  277. package/src/fleet/fleet-store.ts +13 -0
  278. package/src/fleet/index.ts +4 -0
  279. package/src/fleet/representative-selector.ts +83 -0
  280. package/src/graph/graph-executor.ts +446 -0
  281. package/src/graph/graph-inference.ts +184 -0
  282. package/src/graph/graph-store.ts +75 -0
  283. package/src/graph/index.ts +4 -0
  284. package/src/index.ts +916 -0
  285. package/src/intake/index.ts +5 -0
  286. package/src/intake/intake-processor.ts +111 -0
  287. package/src/intake/intake-store.ts +7 -0
  288. package/src/intake/registry-poller.ts +230 -0
  289. package/src/intake/webhook-handlers.ts +328 -0
  290. package/src/logger.ts +19 -0
  291. package/src/mcp/resources.ts +98 -0
  292. package/src/mcp/server.ts +34 -0
  293. package/src/mcp/tools.ts +117 -0
  294. package/src/middleware/auth.ts +103 -0
  295. package/src/middleware/permissions.ts +35 -0
  296. package/src/pattern-store.ts +409 -0
  297. package/tests/agent-mode.test.ts +536 -0
  298. package/tests/api-handlers.test.ts +1245 -0
  299. package/tests/archive-unpacker.test.ts +179 -0
  300. package/tests/artifact-analyzer.test.ts +240 -0
  301. package/tests/auth-middleware.test.ts +189 -0
  302. package/tests/decision-diary.test.ts +957 -0
  303. package/tests/diary-reader.test.ts +782 -0
  304. package/tests/envoy-client.test.ts +342 -0
  305. package/tests/envoy-reports.test.ts +156 -0
  306. package/tests/mcp-tools.test.ts +213 -0
  307. package/tests/orchestration.test.ts +536 -0
  308. package/tests/partition-deletion.test.ts +143 -0
  309. package/tests/partition-isolation.test.ts +830 -0
  310. package/tests/pattern-store.test.ts +371 -0
  311. package/tests/rbac-enforcement.test.ts +409 -0
  312. package/tests/ssrf-validation.test.ts +56 -0
  313. package/tests/stale-deployment.test.ts +85 -0
  314. package/tests/step-runner.test.ts +308 -0
  315. package/tests/ui-journey.test.ts +330 -0
  316. package/tsconfig.json +11 -0
  317. package/vitest.config.ts +27 -0
@@ -0,0 +1,268 @@
1
+ import crypto from "node:crypto";
2
+ // ---------------------------------------------------------------------------
3
+ // GitHub Actions — workflow_run completed event
4
+ // ---------------------------------------------------------------------------
5
+ export function parseGitHubActionsWebhook(body) {
6
+ if (!body || typeof body !== "object")
7
+ return null;
8
+ const data = body;
9
+ // GitHub sends workflow_run events with action: "completed"
10
+ const workflowRun = data.workflow_run;
11
+ if (!workflowRun)
12
+ return null;
13
+ const conclusion = workflowRun.conclusion;
14
+ if (conclusion !== "success")
15
+ return null;
16
+ const repo = data.repository;
17
+ const repoName = repo?.name ?? "unknown";
18
+ const headSha = workflowRun.head_sha ?? "unknown";
19
+ const headBranch = workflowRun.head_branch ?? "unknown";
20
+ const runNumber = workflowRun.run_number;
21
+ return {
22
+ artifactName: repoName,
23
+ artifactType: "github-actions-build",
24
+ version: runNumber ? `build-${runNumber}` : headSha.slice(0, 8),
25
+ source: "github-actions",
26
+ downloadUrl: workflowRun.artifacts_url ?? undefined,
27
+ metadata: {
28
+ sha: headSha,
29
+ branch: headBranch,
30
+ workflow: workflowRun.name ?? "unknown",
31
+ runId: workflowRun.id,
32
+ runNumber,
33
+ htmlUrl: workflowRun.html_url,
34
+ },
35
+ };
36
+ }
37
+ // ---------------------------------------------------------------------------
38
+ // Azure DevOps — build.complete event
39
+ // ---------------------------------------------------------------------------
40
+ export function parseAzureDevOpsWebhook(body) {
41
+ if (!body || typeof body !== "object")
42
+ return null;
43
+ const data = body;
44
+ const eventType = data.eventType;
45
+ if (eventType !== "build.complete")
46
+ return null;
47
+ const resource = data.resource;
48
+ if (!resource)
49
+ return null;
50
+ const result = resource.result;
51
+ if (result !== "succeeded")
52
+ return null;
53
+ const definition = resource.definition;
54
+ const buildNumber = resource.buildNumber ?? "unknown";
55
+ const sourceVersion = resource.sourceVersion ?? "unknown";
56
+ return {
57
+ artifactName: definition?.name ?? "unknown",
58
+ artifactType: "azure-devops-build",
59
+ version: buildNumber,
60
+ source: "azure-devops",
61
+ downloadUrl: resource.url ?? undefined,
62
+ metadata: {
63
+ buildId: resource.id,
64
+ buildNumber,
65
+ sourceVersion,
66
+ sourceBranch: resource.sourceBranch,
67
+ definitionName: definition?.name,
68
+ project: data.resourceContainers?.project,
69
+ },
70
+ };
71
+ }
72
+ // ---------------------------------------------------------------------------
73
+ // Jenkins — build notification
74
+ // ---------------------------------------------------------------------------
75
+ export function parseJenkinsWebhook(body) {
76
+ if (!body || typeof body !== "object")
77
+ return null;
78
+ const data = body;
79
+ const build = data.build;
80
+ if (!build) {
81
+ // Some Jenkins plugins send flat payloads
82
+ if (!data.name && !data.job_name)
83
+ return null;
84
+ return {
85
+ artifactName: data.name ?? data.job_name ?? "unknown",
86
+ artifactType: "jenkins-build",
87
+ version: String(data.build_number ?? data.number ?? "unknown"),
88
+ source: "jenkins",
89
+ downloadUrl: data.build_url ?? data.url ?? undefined,
90
+ metadata: {
91
+ status: data.status ?? data.build_status,
92
+ url: data.build_url ?? data.url,
93
+ },
94
+ };
95
+ }
96
+ const phase = build.phase;
97
+ const status = build.status;
98
+ // Only process completed successful builds
99
+ if (phase !== "COMPLETED" && phase !== "FINALIZED")
100
+ return null;
101
+ if (status && status !== "SUCCESS")
102
+ return null;
103
+ return {
104
+ artifactName: data.name ?? "unknown",
105
+ artifactType: "jenkins-build",
106
+ version: String(build.number ?? "unknown"),
107
+ source: "jenkins",
108
+ downloadUrl: build.full_url ?? build.url ?? undefined,
109
+ metadata: {
110
+ buildNumber: build.number,
111
+ phase,
112
+ status,
113
+ url: build.full_url ?? build.url,
114
+ scmInfo: build.scm,
115
+ },
116
+ };
117
+ }
118
+ // ---------------------------------------------------------------------------
119
+ // GitLab CI — pipeline event
120
+ // ---------------------------------------------------------------------------
121
+ export function parseGitLabCIWebhook(body) {
122
+ if (!body || typeof body !== "object")
123
+ return null;
124
+ const data = body;
125
+ const objectKind = data.object_kind;
126
+ if (objectKind !== "pipeline")
127
+ return null;
128
+ const attrs = data.object_attributes;
129
+ if (!attrs)
130
+ return null;
131
+ const status = attrs.status;
132
+ if (status !== "success")
133
+ return null;
134
+ const project = data.project;
135
+ return {
136
+ artifactName: project?.name ?? "unknown",
137
+ artifactType: "gitlab-ci-build",
138
+ version: `pipeline-${attrs.id ?? "unknown"}`,
139
+ source: "gitlab-ci",
140
+ downloadUrl: project?.web_url ?? undefined,
141
+ metadata: {
142
+ pipelineId: attrs.id,
143
+ ref: attrs.ref,
144
+ sha: attrs.sha,
145
+ source: attrs.source,
146
+ projectName: project?.name,
147
+ },
148
+ };
149
+ }
150
+ // ---------------------------------------------------------------------------
151
+ // CircleCI — workflow-completed event
152
+ // ---------------------------------------------------------------------------
153
+ export function parseCircleCIWebhook(body) {
154
+ if (!body || typeof body !== "object")
155
+ return null;
156
+ const data = body;
157
+ const type = data.type;
158
+ if (type !== "workflow-completed")
159
+ return null;
160
+ const workflow = data.workflow;
161
+ if (!workflow)
162
+ return null;
163
+ const status = workflow.status;
164
+ if (status !== "success")
165
+ return null;
166
+ const pipeline = data.pipeline;
167
+ const project = data.project;
168
+ return {
169
+ artifactName: project?.name ?? "unknown",
170
+ artifactType: "circleci-build",
171
+ version: `workflow-${workflow.id ?? "unknown"}`,
172
+ source: "circleci",
173
+ metadata: {
174
+ workflowId: workflow.id,
175
+ workflowName: workflow.name,
176
+ pipelineId: pipeline?.id,
177
+ pipelineNumber: pipeline?.number,
178
+ projectSlug: project?.slug,
179
+ },
180
+ };
181
+ }
182
+ // ---------------------------------------------------------------------------
183
+ // Generic — expects normalized payload
184
+ // ---------------------------------------------------------------------------
185
+ export function parseGenericWebhook(body) {
186
+ if (!body || typeof body !== "object")
187
+ return null;
188
+ const data = body;
189
+ const artifactName = data.artifactName;
190
+ const version = data.version;
191
+ if (!artifactName || !version)
192
+ return null;
193
+ return {
194
+ artifactName,
195
+ artifactType: data.type ?? "generic",
196
+ version,
197
+ source: data.source ?? "generic",
198
+ downloadUrl: data.downloadUrl ?? undefined,
199
+ metadata: data.metadata ?? {},
200
+ };
201
+ }
202
+ /**
203
+ * Verify a webhook signature from GitHub (X-Hub-Signature-256) or
204
+ * GitLab (X-Gitlab-Token). Returns { verified: true } if the signature
205
+ * is valid, or { verified: false, error } if not.
206
+ *
207
+ * If no secretToken is configured for the channel, verification is skipped
208
+ * (returns verified: true) to allow backwards-compatible operation.
209
+ */
210
+ export function verifyWebhookSignature(source, secretToken, headers, rawBody) {
211
+ // Unauthenticated webhooks allowed when no secret is configured
212
+ if (!secretToken) {
213
+ return { verified: true };
214
+ }
215
+ switch (source) {
216
+ case "github-actions": {
217
+ const signature = headers["x-hub-signature-256"];
218
+ if (!signature) {
219
+ return { verified: false, error: "Missing X-Hub-Signature-256 header" };
220
+ }
221
+ const expected = "sha256=" + crypto
222
+ .createHmac("sha256", secretToken)
223
+ .update(rawBody)
224
+ .digest("hex");
225
+ const valid = crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
226
+ return valid
227
+ ? { verified: true }
228
+ : { verified: false, error: "Invalid GitHub webhook signature" };
229
+ }
230
+ case "gitlab-ci": {
231
+ const token = headers["x-gitlab-token"];
232
+ if (!token) {
233
+ return { verified: false, error: "Missing X-Gitlab-Token header" };
234
+ }
235
+ // GitLab uses a shared secret token (not HMAC) — compare in constant time
236
+ if (token.length !== secretToken.length) {
237
+ return { verified: false, error: "Invalid GitLab webhook token" };
238
+ }
239
+ const valid = crypto.timingSafeEqual(Buffer.from(token), Buffer.from(secretToken));
240
+ return valid
241
+ ? { verified: true }
242
+ : { verified: false, error: "Invalid GitLab webhook token" };
243
+ }
244
+ default:
245
+ // No standard signature mechanism for this source type
246
+ return { verified: true };
247
+ }
248
+ }
249
+ // ---------------------------------------------------------------------------
250
+ // Router — dispatch to the correct parser based on source
251
+ // ---------------------------------------------------------------------------
252
+ export function parseWebhook(source, body) {
253
+ switch (source) {
254
+ case "github-actions":
255
+ return parseGitHubActionsWebhook(body);
256
+ case "azure-devops":
257
+ return parseAzureDevOpsWebhook(body);
258
+ case "jenkins":
259
+ return parseJenkinsWebhook(body);
260
+ case "gitlab-ci":
261
+ return parseGitLabCIWebhook(body);
262
+ case "circleci":
263
+ return parseCircleCIWebhook(body);
264
+ default:
265
+ return parseGenericWebhook(body);
266
+ }
267
+ }
268
+ //# sourceMappingURL=webhook-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-handlers.js","sourceRoot":"","sources":["../../src/intake/webhook-handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function initServerLogger(dataDir: string): void;
2
+ export declare function serverLog(label: string, data?: unknown): void;
3
+ export declare function serverWarn(label: string, data?: unknown): void;
4
+ export declare function serverError(label: string, data?: unknown): void;
5
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAIA,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEtD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAE7D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAE9D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAE/D"}
package/dist/logger.js ADDED
@@ -0,0 +1,15 @@
1
+ import { SynthLogger } from "@synth-deploy/core";
2
+ let _logger = null;
3
+ export function initServerLogger(dataDir) {
4
+ _logger = new SynthLogger(dataDir, "server");
5
+ }
6
+ export function serverLog(label, data) {
7
+ _logger?.log(label, data);
8
+ }
9
+ export function serverWarn(label, data) {
10
+ _logger?.warn(label, data);
11
+ }
12
+ export function serverError(label, data) {
13
+ _logger?.error(label, data);
14
+ }
15
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,IAAI,OAAO,GAAuB,IAAI,CAAC;AAEvC,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,IAAc;IACrD,OAAO,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,IAAc;IACtD,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,IAAc;IACvD,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { DebriefReader } from "@synth-deploy/core";
3
+ import type { DeploymentStore } from "../agent/synth-agent.js";
4
+ /**
5
+ * Register MCP resources. These expose Synth state to MCP clients
6
+ * as readable data — Debrief entries, deployment records, etc.
7
+ */
8
+ export declare function registerResources(mcp: McpServer, debrief: DebriefReader, deployments: DeploymentStore): void;
9
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,eAAe,GAC3B,IAAI,CAoFN"}
@@ -0,0 +1,72 @@
1
+ import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /**
3
+ * Register MCP resources. These expose Synth state to MCP clients
4
+ * as readable data — Debrief entries, deployment records, etc.
5
+ */
6
+ export function registerResources(mcp, debrief, deployments) {
7
+ // Recent debrief entries — scoped to a specific partition
8
+ mcp.registerResource("recent-debrief-entries", new ResourceTemplate("debrief://partition/{partitionId}/recent", {
9
+ list: undefined,
10
+ }), {
11
+ title: "Recent Debrief Entries (Partition-Scoped)",
12
+ description: "The most recent Debrief entries for a specific partition. " +
13
+ "Each entry records what the agent decided and why, in plain language.",
14
+ mimeType: "application/json",
15
+ }, async (uri, { partitionId }) => ({
16
+ contents: [
17
+ {
18
+ uri: uri.href,
19
+ text: JSON.stringify(debrief.getByPartition(partitionId).slice(-20), null, 2),
20
+ },
21
+ ],
22
+ }));
23
+ // Debrief entries for a specific deployment
24
+ mcp.registerResource("deployment-debrief", new ResourceTemplate("debrief://deployment/{deploymentId}", {
25
+ list: undefined,
26
+ }), {
27
+ title: "Deployment Debrief",
28
+ description: "All Debrief entries for a specific deployment, showing the full reasoning chain.",
29
+ mimeType: "application/json",
30
+ }, async (uri, { deploymentId }) => {
31
+ const deployment = deployments.get(deploymentId);
32
+ if (!deployment) {
33
+ return { contents: [{ uri: uri.href, text: JSON.stringify({ error: "Deployment not found" }) }] };
34
+ }
35
+ const entries = debrief.getByDeployment(deploymentId);
36
+ return {
37
+ contents: [
38
+ {
39
+ uri: uri.href,
40
+ text: JSON.stringify(entries, null, 2),
41
+ },
42
+ ],
43
+ };
44
+ });
45
+ // Deployment record
46
+ mcp.registerResource("deployment", new ResourceTemplate("deployment://{deploymentId}", {
47
+ list: async () => ({
48
+ resources: deployments.list().map((d) => ({
49
+ uri: `deployment://${d.id}`,
50
+ name: `${d.artifactId} v${d.version} → ${d.environmentId}`,
51
+ })),
52
+ }),
53
+ }), {
54
+ title: "Deployment Record",
55
+ description: "Full deployment record including status, variables, and debrief entry references.",
56
+ mimeType: "application/json",
57
+ }, async (uri, { deploymentId }) => {
58
+ const deployment = deployments.get(deploymentId);
59
+ if (!deployment) {
60
+ return { contents: [{ uri: uri.href, text: "Not found" }] };
61
+ }
62
+ return {
63
+ contents: [
64
+ {
65
+ uri: uri.href,
66
+ text: JSON.stringify(deployment, null, 2),
67
+ },
68
+ ],
69
+ };
70
+ });
71
+ }
72
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAK3E;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAc,EACd,OAAsB,EACtB,WAA4B;IAE5B,0DAA0D;IAC1D,GAAG,CAAC,gBAAgB,CAClB,wBAAwB,EACxB,IAAI,gBAAgB,CAAC,0CAA0C,EAAE;QAC/D,IAAI,EAAE,SAAS;KAChB,CAAC,EACF;QACE,KAAK,EAAE,2CAA2C;QAClD,WAAW,EACT,4DAA4D;YAC5D,uEAAuE;QACzE,QAAQ,EAAE,kBAAkB;KAC7B,EACD,KAAK,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/B,QAAQ,EAAE;YACR;gBACE,GAAG,EAAE,GAAG,CAAC,IAAI;gBACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,WAAqB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aACxF;SACF;KACF,CAAC,CACH,CAAC;IAEF,4CAA4C;IAC5C,GAAG,CAAC,gBAAgB,CAClB,oBAAoB,EACpB,IAAI,gBAAgB,CAAC,qCAAqC,EAAE;QAC1D,IAAI,EAAE,SAAS;KAChB,CAAC,EACF;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,kFAAkF;QACpF,QAAQ,EAAE,kBAAkB;KAC7B,EACD,KAAK,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;QAC9B,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,YAAsB,CAAC,CAAC;QAC3D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACpG,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,YAAsB,CAAC,CAAC;QAChE,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,GAAG,CAAC,IAAI;oBACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;iBACvC;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,oBAAoB;IACpB,GAAG,CAAC,gBAAgB,CAClB,YAAY,EACZ,IAAI,gBAAgB,CAAC,6BAA6B,EAAE;QAClD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YACjB,SAAS,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxC,GAAG,EAAE,gBAAgB,CAAC,CAAC,EAAE,EAAE;gBAC3B,IAAI,EAAE,GAAG,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,aAAa,EAAE;aAC3D,CAAC,CAAC;SACJ,CAAC;KACH,CAAC,EACF;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,mFAAmF;QAChG,QAAQ,EAAE,kBAAkB;KAC7B,EACD,KAAK,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;QAC9B,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,YAAsB,CAAC,CAAC;QAC3D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QAC9D,CAAC;QACD,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,GAAG,CAAC,IAAI;oBACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC1C;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { DebriefWriter, DebriefReader, IPartitionStore, IEnvironmentStore, IArtifactStore } from "@synth-deploy/core";
3
+ import type { SynthAgent, DeploymentStore } from "../agent/synth-agent.js";
4
+ /**
5
+ * Create and configure the MCP server with all Synth tools and resources.
6
+ */
7
+ export declare function createMcpServer(deps: {
8
+ agent: SynthAgent;
9
+ debrief: DebriefWriter & DebriefReader;
10
+ partitions: IPartitionStore;
11
+ environments: IEnvironmentStore;
12
+ deployments: DeploymentStore;
13
+ artifactStore: IArtifactStore;
14
+ }): McpServer;
15
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3H,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI3E;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,aAAa,GAAG,aAAa,CAAC;IACvC,UAAU,EAAE,eAAe,CAAC;IAC5B,YAAY,EAAE,iBAAiB,CAAC;IAChC,WAAW,EAAE,eAAe,CAAC;IAC7B,aAAa,EAAE,cAAc,CAAC;CAC/B,GAAG,SAAS,CAiBZ"}
@@ -0,0 +1,20 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { registerTools } from "./tools.js";
3
+ import { registerResources } from "./resources.js";
4
+ /**
5
+ * Create and configure the MCP server with all Synth tools and resources.
6
+ */
7
+ export function createMcpServer(deps) {
8
+ const mcp = new McpServer({
9
+ name: "synth",
10
+ version: "0.1.0",
11
+ }, {
12
+ capabilities: {
13
+ logging: {},
14
+ },
15
+ });
16
+ registerTools(mcp, deps.agent, deps.partitions, deps.environments, deps.deployments, deps.artifactStore);
17
+ registerResources(mcp, deps.debrief, deps.deployments);
18
+ return mcp;
19
+ }
20
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAO/B;IACC,MAAM,GAAG,GAAG,IAAI,SAAS,CACvB;QACE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EAAE;YACZ,OAAO,EAAE,EAAE;SACZ;KACF,CACF,CAAC;IAEF,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACzG,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAEvD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { SynthAgent, DeploymentStore } from "../agent/synth-agent.js";
3
+ import type { IArtifactStore, IEnvironmentStore, IPartitionStore } from "@synth-deploy/core";
4
+ /**
5
+ * Register MCP tools on the server. These are the actions MCP clients
6
+ * (Claude, agents, CLI tools) can invoke.
7
+ */
8
+ export declare function registerTools(mcp: McpServer, agent: SynthAgent, partitions: IPartitionStore, environments: IEnvironmentStore, deployments: DeploymentStore, artifactStore: IArtifactStore): void;
9
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE7F;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,eAAe,EAC3B,YAAY,EAAE,iBAAiB,EAC/B,WAAW,EAAE,eAAe,EAC5B,aAAa,EAAE,cAAc,GAC5B,IAAI,CAoGN"}
@@ -0,0 +1,88 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Register MCP tools on the server. These are the actions MCP clients
4
+ * (Claude, agents, CLI tools) can invoke.
5
+ */
6
+ export function registerTools(mcp, agent, partitions, environments, deployments, artifactStore) {
7
+ mcp.registerTool("trigger-deployment", {
8
+ title: "Trigger Deployment",
9
+ description: "Trigger a deployment of an artifact to an environment. " +
10
+ "The server agent will resolve variables, make decisions, and record everything to the Debrief.",
11
+ inputSchema: {
12
+ artifactId: z.string().describe("The artifact to deploy"),
13
+ environmentId: z.string().describe("Target environment ID"),
14
+ partitionId: z.string().optional().describe("Target partition ID (optional)"),
15
+ version: z.string().describe("Version to deploy"),
16
+ variables: z.record(z.string()).optional().describe("Override variables for this deployment"),
17
+ },
18
+ }, async ({ artifactId, environmentId, partitionId, version, variables }) => {
19
+ const artifact = artifactStore.get(artifactId);
20
+ if (!artifact) {
21
+ return {
22
+ content: [{ type: "text", text: `Error: Artifact not found: ${artifactId}` }],
23
+ isError: true,
24
+ };
25
+ }
26
+ const environment = environments.get(environmentId);
27
+ if (!environment) {
28
+ return {
29
+ content: [{ type: "text", text: `Error: Environment not found: ${environmentId}` }],
30
+ isError: true,
31
+ };
32
+ }
33
+ if (partitionId) {
34
+ const partition = partitions.get(partitionId);
35
+ if (!partition) {
36
+ return {
37
+ content: [{ type: "text", text: `Error: Partition not found: ${partitionId}` }],
38
+ isError: true,
39
+ };
40
+ }
41
+ }
42
+ const deployment = await agent.triggerDeployment({
43
+ artifactId,
44
+ artifactVersionId: version,
45
+ environmentId,
46
+ partitionId,
47
+ triggeredBy: "agent",
48
+ variables,
49
+ });
50
+ return {
51
+ content: [
52
+ {
53
+ type: "text",
54
+ text: JSON.stringify({
55
+ deploymentId: deployment.id,
56
+ status: deployment.status,
57
+ version: deployment.version,
58
+ debriefEntries: deployment.debriefEntryIds.length,
59
+ }, null, 2),
60
+ },
61
+ ],
62
+ };
63
+ });
64
+ mcp.registerTool("get-deployment-status", {
65
+ title: "Get Deployment Status",
66
+ description: "Get the current status and Debrief entries for a deployment.",
67
+ inputSchema: {
68
+ deploymentId: z.string().describe("The deployment ID to check"),
69
+ },
70
+ }, async ({ deploymentId }) => {
71
+ const deployment = deployments.get(deploymentId);
72
+ if (!deployment) {
73
+ return {
74
+ content: [{ type: "text", text: `Error: Deployment not found: ${deploymentId}` }],
75
+ isError: true,
76
+ };
77
+ }
78
+ return {
79
+ content: [
80
+ {
81
+ type: "text",
82
+ text: JSON.stringify(deployment, null, 2),
83
+ },
84
+ ],
85
+ };
86
+ });
87
+ }
88
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { FastifyInstance } from "fastify";
2
+ import type { IUserStore, IUserRoleStore, ISessionStore, UserId, Permission } from "@synth-deploy/core";
3
+ export interface AuthenticatedUser {
4
+ id: UserId;
5
+ email: string;
6
+ name: string;
7
+ permissions: Permission[];
8
+ }
9
+ declare module "fastify" {
10
+ interface FastifyRequest {
11
+ user?: AuthenticatedUser;
12
+ }
13
+ }
14
+ /**
15
+ * Registers JWT-based authentication middleware on a Fastify instance.
16
+ *
17
+ * All /api/ and /mcp routes require a valid JWT Bearer token,
18
+ * except routes listed in EXEMPT_ROUTES. Static file serving and
19
+ * health endpoints are always accessible.
20
+ */
21
+ export declare function registerAuthMiddleware(app: FastifyInstance, userStore: IUserStore, userRoleStore: IUserRoleStore, sessionStore: ISessionStore, jwtSecret: Uint8Array): {
22
+ enabled: boolean;
23
+ };
24
+ export declare function generateTokens(userId: UserId, jwtSecret: Uint8Array): Promise<{
25
+ token: string;
26
+ refreshToken: string;
27
+ expiresAt: Date;
28
+ }>;
29
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAE7E,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAExG,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,cAAc;QACtB,IAAI,CAAC,EAAE,iBAAiB,CAAC;KAC1B;CACF;AAOD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,eAAe,EACpB,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,cAAc,EAC7B,YAAY,EAAE,aAAa,EAC3B,SAAS,EAAE,UAAU,GACpB;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CA2CtB;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,IAAI,CAAA;CAAE,CAAC,CAmBnE"}