@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,31 @@
1
+ /** Legacy deployment step type — kept for backward compatibility with step-runner. */
2
+ interface DeploymentStep {
3
+ id: string;
4
+ name: string;
5
+ type: string;
6
+ command: string;
7
+ order: number;
8
+ }
9
+ export interface StepResult {
10
+ success: boolean;
11
+ exitCode: number | null;
12
+ stdout: string;
13
+ stderr: string;
14
+ durationMs: number;
15
+ timedOut: boolean;
16
+ }
17
+ export interface StepValidationWarning {
18
+ pattern: string;
19
+ description: string;
20
+ }
21
+ export declare function validateCommand(command: string): StepValidationWarning[];
22
+ /**
23
+ * Executes a deployment step's shell command with variable injection and timeout.
24
+ *
25
+ * Variables are injected as environment variables merged with the current
26
+ * process environment. stdout/stderr are truncated to the last 2000 chars
27
+ * to prevent memory issues in debrief entries.
28
+ */
29
+ export declare function runStep(step: DeploymentStep, variables: Record<string, string>, timeoutMs: number): Promise<StepResult>;
30
+ export {};
31
+ //# sourceMappingURL=step-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-runner.d.ts","sourceRoot":"","sources":["../../src/agent/step-runner.ts"],"names":[],"mappings":"AAEA,sFAAsF;AACtF,UAAU,cAAc;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAMD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAYD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAQxE;AAuBD;;;;;;GAMG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,CAAC,CA0CrB"}
@@ -0,0 +1,80 @@
1
+ import { exec } from "node:child_process";
2
+ const DANGEROUS_PATTERNS = [
3
+ { regex: /\benv\b.*\|/, description: "Pipes environment to another command" },
4
+ { regex: /\bcurl\b.*-d\s/, description: "Sends data via curl" },
5
+ { regex: /\bwget\b/, description: "Downloads content via wget" },
6
+ { regex: /\beval\b/, description: "Uses eval for dynamic execution" },
7
+ { regex: /`[^`]+`/, description: "Contains backtick command substitution" },
8
+ { regex: /\/etc\/shadow/, description: "References sensitive system files" },
9
+ { regex: /\brm\s+-rf\s+\//, description: "Recursive deletion from root" },
10
+ ];
11
+ export function validateCommand(command) {
12
+ const warnings = [];
13
+ for (const { regex, description } of DANGEROUS_PATTERNS) {
14
+ if (regex.test(command)) {
15
+ warnings.push({ pattern: regex.source, description });
16
+ }
17
+ }
18
+ return warnings;
19
+ }
20
+ // ---------------------------------------------------------------------------
21
+ // Environment isolation — only expose safe host vars + declared variables
22
+ // ---------------------------------------------------------------------------
23
+ const SAFE_HOST_VARS = ['PATH', 'HOME', 'SHELL', 'TERM', 'USER', 'LANG'];
24
+ function buildStepEnv(variables) {
25
+ const env = {};
26
+ for (const key of SAFE_HOST_VARS) {
27
+ if (process.env[key])
28
+ env[key] = process.env[key];
29
+ }
30
+ return { ...env, ...variables };
31
+ }
32
+ const MAX_OUTPUT_CHARS = 2000;
33
+ function truncate(output) {
34
+ if (output.length <= MAX_OUTPUT_CHARS)
35
+ return output;
36
+ return "…" + output.slice(-MAX_OUTPUT_CHARS);
37
+ }
38
+ /**
39
+ * Executes a deployment step's shell command with variable injection and timeout.
40
+ *
41
+ * Variables are injected as environment variables merged with the current
42
+ * process environment. stdout/stderr are truncated to the last 2000 chars
43
+ * to prevent memory issues in debrief entries.
44
+ */
45
+ export function runStep(step, variables, timeoutMs) {
46
+ const start = Date.now();
47
+ const controller = new AbortController();
48
+ return new Promise((resolve) => {
49
+ const child = exec(step.command, {
50
+ env: buildStepEnv(variables),
51
+ signal: controller.signal,
52
+ timeout: timeoutMs,
53
+ }, (error, stdout, stderr) => {
54
+ const durationMs = Date.now() - start;
55
+ if (error && error.killed) {
56
+ resolve({
57
+ success: false,
58
+ exitCode: null,
59
+ stdout: truncate(stdout),
60
+ stderr: truncate(stderr),
61
+ durationMs,
62
+ timedOut: true,
63
+ });
64
+ return;
65
+ }
66
+ const exitCode = error ? (error.code ?? 1) : 0;
67
+ resolve({
68
+ success: exitCode === 0,
69
+ exitCode,
70
+ stdout: truncate(stdout),
71
+ stderr: truncate(stderr),
72
+ durationMs,
73
+ timedOut: false,
74
+ });
75
+ });
76
+ // Ensure the child process reference is used to suppress lint warnings
77
+ void child;
78
+ });
79
+ }
80
+ //# sourceMappingURL=step-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-runner.js","sourceRoot":"","sources":["../../src/agent/step-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,168 @@
1
+ import type { Deployment, DeploymentId, DeploymentTrigger, DebriefWriter, AppSettings } from "@synth-deploy/core";
2
+ import type { IArtifactStore, IEnvironmentStore, IPartitionStore } from "@synth-deploy/core";
3
+ import type { ServiceHealthChecker } from "./health-checker.js";
4
+ import type { McpClientManager, McpToolResult } from "./mcp-client-manager.js";
5
+ export interface DeploymentStore {
6
+ save(deployment: Deployment): void;
7
+ get(id: DeploymentId): Deployment | undefined;
8
+ getByPartition(partitionId: string): Deployment[];
9
+ getByArtifact(artifactId: string): Deployment[];
10
+ list(): Deployment[];
11
+ countByEnvironment(envId: string, since: Date): number;
12
+ findByArtifactVersion(artifactId: string, version: string, status?: string): Deployment[];
13
+ findRecentByArtifact(artifactId: string, since: Date, status?: string): Deployment[];
14
+ findLatestByEnvironment(envId: string): Deployment | undefined;
15
+ }
16
+ export interface AgentOptions {
17
+ /** Number of health check retries after initial failure. Default: 1 */
18
+ healthCheckRetries: number;
19
+ /** Base delay between health check retries in ms. Default: 500 */
20
+ healthCheckBackoffMs: number;
21
+ /** Simulated execution delay in ms. Default: 10 */
22
+ executionDelayMs: number;
23
+ }
24
+ /**
25
+ * Thrown when a pipeline step fails after the agent has reasoned through it
26
+ * and determined the deployment cannot proceed.
27
+ *
28
+ * Carries structured reasoning so the final debrief entry can explain
29
+ * exactly why the deployment was aborted.
30
+ */
31
+ export declare class OrchestrationError extends Error {
32
+ readonly step: string;
33
+ readonly reasoning: string;
34
+ constructor(step: string, message: string, reasoning: string);
35
+ }
36
+ /**
37
+ * Command Agent — the reasoning engine that orchestrates deployments.
38
+ *
39
+ * Processes deployment requests through a structured pipeline. When a step
40
+ * encounters an unexpected situation, the agent evaluates the specifics —
41
+ * error type, environment context, conflict severity — and makes a
42
+ * context-dependent decision about how to proceed.
43
+ *
44
+ * Key reasoning behaviors:
45
+ *
46
+ * Health check failures:
47
+ * - DNS errors abort immediately (retrying won't resolve infrastructure config)
48
+ * - Timeouts on production get extended backoff (service may be under load)
49
+ * - Connection refused gets standard retry (process may be restarting)
50
+ *
51
+ * Variable conflicts:
52
+ * - Multiple connectivity vars pointing cross-environment → block deployment
53
+ * - Single cross-env connectivity var → proceed with operator warning
54
+ * - Sensitive variable overrides → proceed, log for audit without exposing values
55
+ * - Standard overrides → proceed with precedence rules
56
+ *
57
+ * Every decision is recorded to the Debrief. No silent actions.
58
+ */
59
+ export declare class SynthAgent {
60
+ private debrief;
61
+ private deployments;
62
+ private artifactStore;
63
+ private environmentStore;
64
+ private partitionStore;
65
+ private healthChecker;
66
+ private settingsReader?;
67
+ private options;
68
+ private explicitOptions;
69
+ mcpClientManager?: McpClientManager;
70
+ constructor(debrief: DebriefWriter, deployments: DeploymentStore, artifactStore: IArtifactStore, environmentStore: IEnvironmentStore, partitionStore: IPartitionStore, healthChecker?: ServiceHealthChecker, options?: Partial<AgentOptions>, settingsReader?: {
71
+ get(): AppSettings;
72
+ } | undefined);
73
+ /**
74
+ * Returns effective agent options. Precedence (highest wins):
75
+ * 1. Explicit constructor options
76
+ * 2. Global settings from SettingsStore
77
+ * 3. DEFAULT_OPTIONS
78
+ */
79
+ private getEffectiveOptions;
80
+ /**
81
+ * Check whether the caller has the required permission.
82
+ * RBAC enforcement is not yet implemented — always returns true.
83
+ */
84
+ private checkCallerPermission;
85
+ triggerDeployment(trigger: DeploymentTrigger): Promise<Deployment>;
86
+ /**
87
+ * Survey connected MCP servers and record available external intelligence
88
+ * to the Debrief. This runs before deployment to surface any relevant
89
+ * monitoring data, incident context, or diagnostic tools.
90
+ *
91
+ * Returns the list of tool call results (empty if no servers are connected).
92
+ * Never throws — external server failures must not block deployments.
93
+ */
94
+ runExternalChecks(partitionId: string, environmentId: string): Promise<McpToolResult[]>;
95
+ private resolveConfiguration;
96
+ /**
97
+ * Analyze all variable conflicts together and produce a risk assessment.
98
+ *
99
+ * This is where genuine reasoning happens — the decision depends on
100
+ * the combination of factors across all conflicts, not just individual
101
+ * pattern matches:
102
+ *
103
+ * - A single cross-env connectivity var might be intentional partition config
104
+ * - Multiple cross-env connectivity vars are almost certainly misconfiguration
105
+ * - Sensitive vars get audit logging regardless of other factors
106
+ * - The assessed risk level determines whether to proceed or block
107
+ */
108
+ private assessConflictRisk;
109
+ /**
110
+ * Record debrief entries for each conflict category found in the assessment.
111
+ */
112
+ private recordConflictReasoning;
113
+ /**
114
+ * Detect if a variable's winning value might reference the wrong environment.
115
+ */
116
+ private detectCrossEnvironmentPattern;
117
+ /**
118
+ * Pre-flight health check with context-dependent retry logic.
119
+ *
120
+ * The retry strategy depends on the error type:
121
+ * - DNS failure → abort immediately (retrying won't fix infrastructure config)
122
+ * - Timeout in production → retry with extended backoff (service under load)
123
+ * - Connection refused → retry with standard backoff (process restarting)
124
+ * - After retries exhausted → fail with environment-appropriate reasoning
125
+ */
126
+ private preflightHealthCheck;
127
+ /**
128
+ * Analyze a health check failure and decide what to do.
129
+ *
130
+ * The decision depends on three factors:
131
+ * 1. Error type (DNS vs timeout vs connection refused vs server error)
132
+ * 2. Environment context (production gets more patience)
133
+ * 3. Whether retries remain
134
+ *
135
+ * Different factor combinations produce different actions:
136
+ * - DNS failure → abort immediately regardless of retries remaining
137
+ * - Timeout + production + retries remaining → retry with extended backoff
138
+ * - Connection refused + retries remaining → retry with standard backoff
139
+ * - Any error + no retries remaining → abort with environment-specific message
140
+ */
141
+ private reasonAboutHealthFailure;
142
+ /**
143
+ * Categorize a health check error string into a semantic type.
144
+ * This drives the retry/abort decision tree.
145
+ */
146
+ private categorizeError;
147
+ private executeDeployment;
148
+ /**
149
+ * Delegate deployment execution to the configured Envoy.
150
+ * Throws OrchestrationError if the Envoy is unreachable or reports failure.
151
+ */
152
+ private delegateToEnvoy;
153
+ private postDeployVerify;
154
+ private delay;
155
+ }
156
+ export declare class InMemoryDeploymentStore implements DeploymentStore {
157
+ private deployments;
158
+ save(deployment: Deployment): void;
159
+ get(id: DeploymentId): Deployment | undefined;
160
+ getByPartition(partitionId: string): Deployment[];
161
+ getByArtifact(artifactId: string): Deployment[];
162
+ list(): Deployment[];
163
+ countByEnvironment(envId: string, since: Date): number;
164
+ findByArtifactVersion(artifactId: string, version: string, status?: string): Deployment[];
165
+ findRecentByArtifact(artifactId: string, since: Date, status?: string): Deployment[];
166
+ findLatestByEnvironment(envId: string): Deployment | undefined;
167
+ }
168
+ //# sourceMappingURL=synth-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synth-agent.d.ts","sourceRoot":"","sources":["../../src/agent/synth-agent.ts"],"names":[],"mappings":"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"}