agent-pipeline 0.1.0 → 0.1.2

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 (331) hide show
  1. package/CLAUDE.md +4 -3
  2. package/{license → LICENSE} +1 -1
  3. package/README.md +120 -55
  4. package/dist/cli/commands/agent/info.js +1 -1
  5. package/dist/cli/commands/agent/info.js.map +1 -1
  6. package/dist/cli/commands/agent/list.js +1 -1
  7. package/dist/cli/commands/agent/list.js.map +1 -1
  8. package/dist/cli/commands/agent/pull.d.ts +1 -0
  9. package/dist/cli/commands/agent/pull.d.ts.map +1 -1
  10. package/dist/cli/commands/agent/pull.js +67 -44
  11. package/dist/cli/commands/agent/pull.js.map +1 -1
  12. package/dist/cli/commands/cleanup.d.ts +4 -0
  13. package/dist/cli/commands/cleanup.d.ts.map +1 -1
  14. package/dist/cli/commands/cleanup.js +197 -37
  15. package/dist/cli/commands/cleanup.js.map +1 -1
  16. package/dist/cli/commands/history.d.ts.map +1 -1
  17. package/dist/cli/commands/history.js +3 -22
  18. package/dist/cli/commands/history.js.map +1 -1
  19. package/dist/cli/commands/hooks.d.ts +10 -0
  20. package/dist/cli/commands/hooks.d.ts.map +1 -0
  21. package/dist/cli/commands/hooks.js +88 -0
  22. package/dist/cli/commands/hooks.js.map +1 -0
  23. package/dist/cli/commands/init.d.ts +1 -6
  24. package/dist/cli/commands/init.d.ts.map +1 -1
  25. package/dist/cli/commands/init.js +169 -88
  26. package/dist/cli/commands/init.js.map +1 -1
  27. package/dist/cli/commands/loop-context.d.ts +2 -0
  28. package/dist/cli/commands/loop-context.d.ts.map +1 -0
  29. package/dist/cli/commands/loop-context.js +88 -0
  30. package/dist/cli/commands/loop-context.js.map +1 -0
  31. package/dist/cli/commands/pipeline/create.d.ts.map +1 -1
  32. package/dist/cli/commands/pipeline/create.js +156 -68
  33. package/dist/cli/commands/pipeline/create.js.map +1 -1
  34. package/dist/cli/commands/run.d.ts +1 -1
  35. package/dist/cli/commands/run.d.ts.map +1 -1
  36. package/dist/cli/commands/run.js +29 -5
  37. package/dist/cli/commands/run.js.map +1 -1
  38. package/dist/cli/commands/schema.d.ts +9 -0
  39. package/dist/cli/commands/schema.d.ts.map +1 -0
  40. package/dist/cli/commands/schema.js +541 -0
  41. package/dist/cli/commands/schema.js.map +1 -0
  42. package/dist/cli/commands/status.d.ts.map +1 -1
  43. package/dist/cli/commands/status.js +0 -6
  44. package/dist/cli/commands/status.js.map +1 -1
  45. package/dist/cli/help/index.d.ts +6 -0
  46. package/dist/cli/help/index.d.ts.map +1 -0
  47. package/dist/cli/help/index.js +538 -0
  48. package/dist/cli/help/index.js.map +1 -0
  49. package/dist/cli/help/types.d.ts +22 -0
  50. package/dist/cli/help/types.d.ts.map +1 -0
  51. package/dist/cli/help/types.js +2 -0
  52. package/dist/cli/help/types.js.map +1 -0
  53. package/dist/cli/hooks.d.ts +5 -1
  54. package/dist/cli/hooks.d.ts.map +1 -1
  55. package/dist/cli/hooks.js +106 -12
  56. package/dist/cli/hooks.js.map +1 -1
  57. package/dist/cli/templates/agents/code-review-agents/code-reviewer.md +46 -0
  58. package/dist/cli/templates/agents/code-review-agents/memory-doc-updater.md +189 -0
  59. package/dist/cli/templates/agents/code-review-agents/quality-checker.md +52 -0
  60. package/dist/cli/templates/agents/frontend-agents/brutalist_purist.md +563 -0
  61. package/dist/cli/templates/agents/frontend-agents/cyberpunk_hacker.md +824 -0
  62. package/dist/cli/templates/agents/frontend-agents/frontend-pipeline-ref.md +32 -0
  63. package/dist/cli/templates/agents/frontend-agents/indie_game_dev.md +715 -0
  64. package/dist/cli/templates/agents/frontend-agents/luxury_editorial.md +628 -0
  65. package/dist/cli/templates/agents/frontend-agents/product_owner.md +159 -0
  66. package/dist/cli/templates/agents/frontend-agents/retro_90s_webmaster.md +385 -0
  67. package/dist/cli/templates/agents/frontend-agents/showcase.md +362 -0
  68. package/dist/cli/templates/agents/frontend-agents/swiss_modernist.md +716 -0
  69. package/dist/cli/templates/agents/loop-agents/socratic-explorer.md +91 -0
  70. package/dist/cli/templates/instructions/handover.md +40 -0
  71. package/dist/cli/templates/instructions/loop.md +39 -0
  72. package/dist/cli/templates/pipelines/front-end-parallel-example.yml +81 -0
  73. package/dist/cli/templates/pipelines/loop-example.yml +25 -0
  74. package/dist/cli/templates/pipelines/post-commit-example.yml +49 -58
  75. package/dist/cli/templates/schema/pipeline-config.schema.json +400 -0
  76. package/dist/cli/templates/schema/pipeline-config.schema.yaml +302 -0
  77. package/dist/cli/utils/agent-importer.d.ts +1 -0
  78. package/dist/cli/utils/agent-importer.d.ts.map +1 -1
  79. package/dist/cli/utils/agent-importer.js +67 -0
  80. package/dist/cli/utils/agent-importer.js.map +1 -1
  81. package/dist/cli/utils/interactive-prompts.d.ts +4 -0
  82. package/dist/cli/utils/interactive-prompts.d.ts.map +1 -1
  83. package/dist/cli/utils/interactive-prompts.js +59 -13
  84. package/dist/cli/utils/interactive-prompts.js.map +1 -1
  85. package/dist/config/pipeline-loader.d.ts +4 -1
  86. package/dist/config/pipeline-loader.d.ts.map +1 -1
  87. package/dist/config/pipeline-loader.js +58 -0
  88. package/dist/config/pipeline-loader.js.map +1 -1
  89. package/dist/config/schema.d.ts +64 -35
  90. package/dist/config/schema.d.ts.map +1 -1
  91. package/dist/core/abort-controller.d.ts +16 -0
  92. package/dist/core/abort-controller.d.ts.map +1 -0
  93. package/dist/core/abort-controller.js +52 -0
  94. package/dist/core/abort-controller.js.map +1 -0
  95. package/dist/core/agent-query-runner.d.ts +0 -1
  96. package/dist/core/agent-query-runner.d.ts.map +1 -1
  97. package/dist/core/agent-query-runner.js +0 -22
  98. package/dist/core/agent-query-runner.js.map +1 -1
  99. package/dist/core/agent-runtimes/claude-code-headless-runtime.d.ts +5 -1
  100. package/dist/core/agent-runtimes/claude-code-headless-runtime.d.ts.map +1 -1
  101. package/dist/core/agent-runtimes/claude-code-headless-runtime.js +127 -12
  102. package/dist/core/agent-runtimes/claude-code-headless-runtime.js.map +1 -1
  103. package/dist/core/agent-runtimes/claude-sdk-runtime.d.ts +0 -2
  104. package/dist/core/agent-runtimes/claude-sdk-runtime.d.ts.map +1 -1
  105. package/dist/core/agent-runtimes/claude-sdk-runtime.js +1 -22
  106. package/dist/core/agent-runtimes/claude-sdk-runtime.js.map +1 -1
  107. package/dist/core/agent-runtimes/codex-headless-runtime.d.ts +27 -0
  108. package/dist/core/agent-runtimes/codex-headless-runtime.d.ts.map +1 -0
  109. package/dist/core/agent-runtimes/codex-headless-runtime.js +623 -0
  110. package/dist/core/agent-runtimes/codex-headless-runtime.js.map +1 -0
  111. package/dist/core/agent-runtimes/openai-compatible-runtime.d.ts +17 -0
  112. package/dist/core/agent-runtimes/openai-compatible-runtime.d.ts.map +1 -0
  113. package/dist/core/agent-runtimes/openai-compatible-runtime.js +231 -0
  114. package/dist/core/agent-runtimes/openai-compatible-runtime.js.map +1 -0
  115. package/dist/core/branch-manager.d.ts +3 -1
  116. package/dist/core/branch-manager.d.ts.map +1 -1
  117. package/dist/core/branch-manager.js +11 -1
  118. package/dist/core/branch-manager.js.map +1 -1
  119. package/dist/core/git-manager.d.ts +17 -1
  120. package/dist/core/git-manager.d.ts.map +1 -1
  121. package/dist/core/git-manager.js +147 -3
  122. package/dist/core/git-manager.js.map +1 -1
  123. package/dist/core/group-execution-orchestrator.d.ts +4 -13
  124. package/dist/core/group-execution-orchestrator.d.ts.map +1 -1
  125. package/dist/core/group-execution-orchestrator.js +53 -142
  126. package/dist/core/group-execution-orchestrator.js.map +1 -1
  127. package/dist/core/handover-manager.d.ts +24 -0
  128. package/dist/core/handover-manager.d.ts.map +1 -0
  129. package/dist/core/handover-manager.js +214 -0
  130. package/dist/core/handover-manager.js.map +1 -0
  131. package/dist/core/instruction-loader.d.ts +23 -0
  132. package/dist/core/instruction-loader.d.ts.map +1 -0
  133. package/dist/core/instruction-loader.js +123 -0
  134. package/dist/core/instruction-loader.js.map +1 -0
  135. package/dist/core/loop-state-manager.d.ts +12 -7
  136. package/dist/core/loop-state-manager.d.ts.map +1 -1
  137. package/dist/core/loop-state-manager.js +49 -3
  138. package/dist/core/loop-state-manager.js.map +1 -1
  139. package/dist/core/parallel-executor.d.ts +8 -3
  140. package/dist/core/parallel-executor.d.ts.map +1 -1
  141. package/dist/core/parallel-executor.js +90 -16
  142. package/dist/core/parallel-executor.js.map +1 -1
  143. package/dist/core/pipeline-finalizer.d.ts +12 -4
  144. package/dist/core/pipeline-finalizer.d.ts.map +1 -1
  145. package/dist/core/pipeline-finalizer.js +244 -33
  146. package/dist/core/pipeline-finalizer.js.map +1 -1
  147. package/dist/core/pipeline-initializer.d.ts +13 -5
  148. package/dist/core/pipeline-initializer.d.ts.map +1 -1
  149. package/dist/core/pipeline-initializer.js +53 -25
  150. package/dist/core/pipeline-initializer.js.map +1 -1
  151. package/dist/core/pipeline-runner.d.ts +15 -1
  152. package/dist/core/pipeline-runner.d.ts.map +1 -1
  153. package/dist/core/pipeline-runner.js +434 -64
  154. package/dist/core/pipeline-runner.js.map +1 -1
  155. package/dist/core/pr-creator.d.ts +0 -1
  156. package/dist/core/pr-creator.d.ts.map +1 -1
  157. package/dist/core/pr-creator.js +12 -4
  158. package/dist/core/pr-creator.js.map +1 -1
  159. package/dist/core/stage-executor.d.ts +19 -11
  160. package/dist/core/stage-executor.d.ts.map +1 -1
  161. package/dist/core/stage-executor.js +151 -178
  162. package/dist/core/stage-executor.js.map +1 -1
  163. package/dist/core/types/agent-runtime.d.ts +3 -2
  164. package/dist/core/types/agent-runtime.d.ts.map +1 -1
  165. package/dist/core/worktree-manager.d.ts +21 -0
  166. package/dist/core/worktree-manager.d.ts.map +1 -0
  167. package/dist/core/worktree-manager.js +133 -0
  168. package/dist/core/worktree-manager.js.map +1 -0
  169. package/dist/index.js +147 -112
  170. package/dist/index.js.map +1 -1
  171. package/dist/notifications/notification-manager.d.ts +1 -0
  172. package/dist/notifications/notification-manager.d.ts.map +1 -1
  173. package/dist/notifications/notification-manager.js +17 -3
  174. package/dist/notifications/notification-manager.js.map +1 -1
  175. package/dist/notifications/notifiers/local-notifier.d.ts.map +1 -1
  176. package/dist/notifications/notifiers/local-notifier.js +5 -2
  177. package/dist/notifications/notifiers/local-notifier.js.map +1 -1
  178. package/dist/notifications/notifiers/slack-notifier.d.ts.map +1 -1
  179. package/dist/notifications/notifiers/slack-notifier.js +39 -8
  180. package/dist/notifications/notifiers/slack-notifier.js.map +1 -1
  181. package/dist/notifications/types.d.ts +1 -1
  182. package/dist/notifications/types.d.ts.map +1 -1
  183. package/dist/ui/components/execution-group.d.ts.map +1 -1
  184. package/dist/ui/components/execution-group.js +1 -1
  185. package/dist/ui/components/execution-group.js.map +1 -1
  186. package/dist/ui/components/interactive-summary.d.ts +9 -0
  187. package/dist/ui/components/interactive-summary.d.ts.map +1 -0
  188. package/dist/ui/components/interactive-summary.js +166 -0
  189. package/dist/ui/components/interactive-summary.js.map +1 -0
  190. package/dist/ui/components/keyboard-hints.d.ts +12 -0
  191. package/dist/ui/components/keyboard-hints.d.ts.map +1 -0
  192. package/dist/ui/components/keyboard-hints.js +13 -0
  193. package/dist/ui/components/keyboard-hints.js.map +1 -0
  194. package/dist/ui/components/live-timer.d.ts +9 -0
  195. package/dist/ui/components/live-timer.d.ts.map +1 -0
  196. package/dist/ui/components/live-timer.js +25 -0
  197. package/dist/ui/components/live-timer.js.map +1 -0
  198. package/dist/ui/components/loop-iteration-history.d.ts +8 -0
  199. package/dist/ui/components/loop-iteration-history.d.ts.map +1 -0
  200. package/dist/ui/components/loop-iteration-history.js +106 -0
  201. package/dist/ui/components/loop-iteration-history.js.map +1 -0
  202. package/dist/ui/components/loop-session-summary.d.ts +9 -0
  203. package/dist/ui/components/loop-session-summary.d.ts.map +1 -0
  204. package/dist/ui/components/loop-session-summary.js +39 -0
  205. package/dist/ui/components/loop-session-summary.js.map +1 -0
  206. package/dist/ui/components/stage-row.d.ts +0 -1
  207. package/dist/ui/components/stage-row.d.ts.map +1 -1
  208. package/dist/ui/components/stage-row.js +5 -15
  209. package/dist/ui/components/stage-row.js.map +1 -1
  210. package/dist/ui/components/status-badge.d.ts.map +1 -1
  211. package/dist/ui/components/status-badge.js +1 -0
  212. package/dist/ui/components/status-badge.js.map +1 -1
  213. package/dist/ui/pipeline-ui.d.ts +1 -0
  214. package/dist/ui/pipeline-ui.d.ts.map +1 -1
  215. package/dist/ui/pipeline-ui.js +22 -18
  216. package/dist/ui/pipeline-ui.js.map +1 -1
  217. package/dist/utils/error-factory.d.ts.map +1 -1
  218. package/dist/utils/error-factory.js +10 -2
  219. package/dist/utils/error-factory.js.map +1 -1
  220. package/dist/utils/pipeline-formatter.d.ts +8 -2
  221. package/dist/utils/pipeline-formatter.d.ts.map +1 -1
  222. package/dist/utils/pipeline-formatter.js +30 -26
  223. package/dist/utils/pipeline-formatter.js.map +1 -1
  224. package/dist/utils/pipeline-logger.d.ts +19 -0
  225. package/dist/utils/pipeline-logger.d.ts.map +1 -0
  226. package/dist/utils/pipeline-logger.js +80 -0
  227. package/dist/utils/pipeline-logger.js.map +1 -0
  228. package/dist/utils/platform-opener.d.ts +4 -0
  229. package/dist/utils/platform-opener.d.ts.map +1 -0
  230. package/dist/utils/platform-opener.js +52 -0
  231. package/dist/utils/platform-opener.js.map +1 -0
  232. package/dist/validators/agent-validator.d.ts +10 -0
  233. package/dist/validators/agent-validator.d.ts.map +1 -0
  234. package/dist/validators/agent-validator.js +87 -0
  235. package/dist/validators/agent-validator.js.map +1 -0
  236. package/dist/validators/dag-validator.d.ts +9 -0
  237. package/dist/validators/dag-validator.d.ts.map +1 -0
  238. package/dist/validators/dag-validator.js +51 -0
  239. package/dist/validators/dag-validator.js.map +1 -0
  240. package/dist/validators/environment-validator.d.ts +9 -0
  241. package/dist/validators/environment-validator.d.ts.map +1 -0
  242. package/dist/validators/environment-validator.js +35 -0
  243. package/dist/validators/environment-validator.js.map +1 -0
  244. package/dist/validators/execution-validator.d.ts +8 -0
  245. package/dist/validators/execution-validator.d.ts.map +1 -0
  246. package/dist/validators/execution-validator.js +51 -0
  247. package/dist/validators/execution-validator.js.map +1 -0
  248. package/dist/validators/git-validator.d.ts +13 -0
  249. package/dist/validators/git-validator.d.ts.map +1 -0
  250. package/dist/validators/git-validator.js +135 -0
  251. package/dist/validators/git-validator.js.map +1 -0
  252. package/dist/validators/notification-validator.d.ts +8 -0
  253. package/dist/validators/notification-validator.d.ts.map +1 -0
  254. package/dist/validators/notification-validator.js +27 -0
  255. package/dist/validators/notification-validator.js.map +1 -0
  256. package/dist/validators/pipeline-validator.d.ts +3 -26
  257. package/dist/validators/pipeline-validator.d.ts.map +1 -1
  258. package/dist/validators/pipeline-validator.js +5 -515
  259. package/dist/validators/pipeline-validator.js.map +1 -1
  260. package/dist/validators/retry-validator.d.ts +9 -0
  261. package/dist/validators/retry-validator.d.ts.map +1 -0
  262. package/dist/validators/retry-validator.js +34 -0
  263. package/dist/validators/retry-validator.js.map +1 -0
  264. package/dist/validators/runtime-validator.d.ts +9 -0
  265. package/dist/validators/runtime-validator.d.ts.map +1 -0
  266. package/dist/validators/runtime-validator.js +82 -0
  267. package/dist/validators/runtime-validator.js.map +1 -0
  268. package/dist/validators/structure-validator.d.ts +8 -0
  269. package/dist/validators/structure-validator.d.ts.map +1 -0
  270. package/dist/validators/structure-validator.js +39 -0
  271. package/dist/validators/structure-validator.js.map +1 -0
  272. package/dist/validators/types.d.ts +19 -0
  273. package/dist/validators/types.d.ts.map +1 -0
  274. package/dist/validators/types.js +2 -0
  275. package/dist/validators/types.js.map +1 -0
  276. package/dist/validators/validation-orchestrator.d.ts +9 -0
  277. package/dist/validators/validation-orchestrator.d.ts.map +1 -0
  278. package/dist/validators/validation-orchestrator.js +43 -0
  279. package/dist/validators/validation-orchestrator.js.map +1 -0
  280. package/package.json +18 -12
  281. package/dist/cli/commands/install.d.ts +0 -2
  282. package/dist/cli/commands/install.d.ts.map +0 -1
  283. package/dist/cli/commands/install.js +0 -15
  284. package/dist/cli/commands/install.js.map +0 -1
  285. package/dist/cli/commands/uninstall.d.ts +0 -2
  286. package/dist/cli/commands/uninstall.d.ts.map +0 -1
  287. package/dist/cli/commands/uninstall.js +0 -6
  288. package/dist/cli/commands/uninstall.js.map +0 -1
  289. package/dist/cli/templates/agents/cleanup-reporter.md +0 -107
  290. package/dist/cli/templates/agents/code-reducer.md +0 -51
  291. package/dist/cli/templates/agents/code-reviewer.md +0 -34
  292. package/dist/cli/templates/agents/context-reducer.md +0 -94
  293. package/dist/cli/templates/agents/dependency-auditor.md +0 -127
  294. package/dist/cli/templates/agents/detective-empath.md +0 -26
  295. package/dist/cli/templates/agents/detective-linguist.md +0 -26
  296. package/dist/cli/templates/agents/detective-logician.md +0 -26
  297. package/dist/cli/templates/agents/detective-skeptic.md +0 -26
  298. package/dist/cli/templates/agents/detective-statistician.md +0 -26
  299. package/dist/cli/templates/agents/doc-updater.md +0 -30
  300. package/dist/cli/templates/agents/judge.md +0 -27
  301. package/dist/cli/templates/agents/memory-updater.md +0 -72
  302. package/dist/cli/templates/agents/quality-checker.md +0 -32
  303. package/dist/cli/templates/agents/security-auditor.md +0 -32
  304. package/dist/cli/templates/agents/storyteller.md +0 -26
  305. package/dist/cli/templates/agents/summary.md +0 -32
  306. package/dist/cli/templates/agents/synthesizer.md +0 -26
  307. package/dist/cli/templates/pipelines/large-pipeline-example.yml +0 -178
  308. package/dist/cli/templates/pipelines/post-merge-example.yml +0 -78
  309. package/dist/cli/templates/pipelines/pre-commit-example.yml +0 -41
  310. package/dist/cli/templates/pipelines/pre-push-example.yml +0 -51
  311. package/dist/cli/templates/pipelines/test-pipeline.yml +0 -90
  312. package/dist/config/project-config-loader.d.ts +0 -11
  313. package/dist/config/project-config-loader.d.ts.map +0 -1
  314. package/dist/config/project-config-loader.js +0 -100
  315. package/dist/config/project-config-loader.js.map +0 -1
  316. package/dist/core/condition-evaluator.d.ts +0 -16
  317. package/dist/core/condition-evaluator.d.ts.map +0 -1
  318. package/dist/core/condition-evaluator.js +0 -121
  319. package/dist/core/condition-evaluator.js.map +0 -1
  320. package/dist/core/context-reducer.d.ts +0 -15
  321. package/dist/core/context-reducer.d.ts.map +0 -1
  322. package/dist/core/context-reducer.js +0 -224
  323. package/dist/core/context-reducer.js.map +0 -1
  324. package/dist/core/output-storage-manager.d.ts +0 -14
  325. package/dist/core/output-storage-manager.d.ts.map +0 -1
  326. package/dist/core/output-storage-manager.js +0 -68
  327. package/dist/core/output-storage-manager.js.map +0 -1
  328. package/dist/core/output-tool-builder.d.ts +0 -6
  329. package/dist/core/output-tool-builder.d.ts.map +0 -1
  330. package/dist/core/output-tool-builder.js +0 -50
  331. package/dist/core/output-tool-builder.js.map +0 -1
@@ -1,518 +1,8 @@
1
- import * as fs from 'fs/promises';
2
- import * as path from 'path';
3
- import { simpleGit } from 'simple-git';
4
- import { checkGHCLI } from '../utils/gh-cli-checker.js';
5
- import { ConditionEvaluator } from '../core/condition-evaluator.js';
6
- import { DAGPlanner } from '../core/dag-planner.js';
7
- import { AgentRuntimeRegistry } from '../core/agent-runtime-registry.js';
1
+ import { ValidationOrchestrator } from './validation-orchestrator.js';
8
2
  export class PipelineValidator {
9
- errors = [];
3
+ orchestrator = new ValidationOrchestrator();
10
4
  async validate(config, repoPath) {
11
- this.errors = [];
12
- this.validateClaudeApiKey();
13
- await this.validateGitRepository(repoPath);
14
- this.validateBasicStructure(config);
15
- await this.validateRuntime(config);
16
- await this.validateAgentFiles(config, repoPath);
17
- this.validateSettings(config);
18
- const autoCommit = config.settings?.autoCommit ?? true;
19
- if (autoCommit) {
20
- await this.validateGitUserConfig(repoPath);
21
- }
22
- if (config.git?.pullRequest?.autoCreate === true) {
23
- await this.validateGitHubCLI();
24
- }
25
- if (config.settings?.contextReduction?.strategy === 'agent-based') {
26
- await this.validateContextReductionAgent(config, repoPath);
27
- }
28
- if (config.agents?.some(a => a.condition)) {
29
- this.validateConditionalExpressions(config);
30
- this.validateConditionalStageReferences(config);
31
- }
32
- if (config.notifications?.channels?.slack?.enabled) {
33
- this.validateSlackWebhook(config);
34
- }
35
- if (config.settings?.preserveWorkingTree === false && config.git) {
36
- await this.validateGitWorkingTree(repoPath);
37
- }
38
- this.validateRetryConfiguration(config);
39
- await this.validateParallelExecutionLimits(config);
40
- this.validateAgents(config);
41
- return this.errors;
42
- }
43
- validateBasicStructure(config) {
44
- if (!config.name || config.name.trim() === '') {
45
- this.errors.push({
46
- field: 'name',
47
- message: 'Pipeline name is required',
48
- severity: 'error'
49
- });
50
- }
51
- if (!config.trigger) {
52
- this.errors.push({
53
- field: 'trigger',
54
- message: 'Pipeline trigger is required (manual or post-commit)',
55
- severity: 'error'
56
- });
57
- }
58
- else if (!['manual', 'post-commit'].includes(config.trigger)) {
59
- this.errors.push({
60
- field: 'trigger',
61
- message: `Invalid trigger: ${config.trigger}. Must be 'manual' or 'post-commit'`,
62
- severity: 'error'
63
- });
64
- }
65
- if (!config.agents || config.agents.length === 0) {
66
- this.errors.push({
67
- field: 'agents',
68
- message: 'Pipeline must have at least one agent',
69
- severity: 'error'
70
- });
71
- }
72
- }
73
- async validateRuntime(config) {
74
- if (config.runtime) {
75
- await this.validateRuntimeConfig('runtime', config.runtime, config.settings?.permissionMode);
76
- }
77
- if (config.agents) {
78
- for (const agent of config.agents) {
79
- if (agent.runtime) {
80
- await this.validateRuntimeConfig(`agents.${agent.name}.runtime`, agent.runtime, config.settings?.permissionMode);
81
- }
82
- }
83
- }
84
- }
85
- async validateRuntimeConfig(field, runtime, permissionMode) {
86
- if (!AgentRuntimeRegistry.hasRuntime(runtime.type)) {
87
- const availableRuntimes = AgentRuntimeRegistry.getAvailableTypes().join(', ');
88
- this.errors.push({
89
- field,
90
- message: `Unknown runtime type: ${runtime.type}. Available runtimes: [${availableRuntimes}]`,
91
- severity: 'error'
92
- });
93
- return;
94
- }
95
- const runtimeInstance = AgentRuntimeRegistry.getRuntime(runtime.type);
96
- const capabilities = runtimeInstance.getCapabilities();
97
- try {
98
- const validation = await runtimeInstance.validate();
99
- for (const error of validation.errors) {
100
- this.errors.push({
101
- field,
102
- message: `Runtime availability: ${error}`,
103
- severity: 'warning'
104
- });
105
- }
106
- for (const warning of validation.warnings) {
107
- this.errors.push({
108
- field,
109
- message: warning,
110
- severity: 'warning'
111
- });
112
- }
113
- }
114
- catch (error) {
115
- this.errors.push({
116
- field,
117
- message: `Runtime validation failed: ${error instanceof Error ? error.message : String(error)}`,
118
- severity: 'warning'
119
- });
120
- }
121
- const model = runtime.options?.model;
122
- if (model && typeof model === 'string') {
123
- if (!capabilities.availableModels.includes(model)) {
124
- const availableModels = capabilities.availableModels.join(', ');
125
- this.errors.push({
126
- field: `${field}.options.model`,
127
- message: `Model "${model}" not available for runtime "${runtime.type}". Available models: [${availableModels}]`,
128
- severity: 'error'
129
- });
130
- }
131
- }
132
- const runtimePermissionMode = runtime.options?.permissionMode;
133
- const effectivePermissionMode = runtimePermissionMode || permissionMode;
134
- if (effectivePermissionMode) {
135
- if (!capabilities.permissionModes.includes(effectivePermissionMode)) {
136
- const availableModes = capabilities.permissionModes.join(', ');
137
- this.errors.push({
138
- field: `${field}.options.permissionMode`,
139
- message: `Permission mode "${effectivePermissionMode}" not supported by runtime "${runtime.type}". Supported modes: [${availableModes}]`,
140
- severity: 'error'
141
- });
142
- }
143
- }
144
- }
145
- async validateAgentFiles(config, repoPath) {
146
- if (!config.agents)
147
- return;
148
- for (const agent of config.agents) {
149
- const agentPath = path.isAbsolute(agent.agent)
150
- ? agent.agent
151
- : path.join(repoPath, agent.agent);
152
- try {
153
- await fs.access(agentPath);
154
- }
155
- catch {
156
- this.errors.push({
157
- field: `agents.${agent.name}.agent`,
158
- message: `Agent file not found: ${agent.agent}`,
159
- severity: 'error'
160
- });
161
- }
162
- }
163
- }
164
- validateSettings(config) {
165
- if (!config.settings)
166
- return;
167
- if (config.settings.failureStrategy) {
168
- const validStrategies = ['stop', 'continue', 'warn'];
169
- if (!validStrategies.includes(config.settings.failureStrategy)) {
170
- this.errors.push({
171
- field: 'settings.failureStrategy',
172
- message: `Invalid failure strategy: ${config.settings.failureStrategy}. Must be one of: ${validStrategies.join(', ')}`,
173
- severity: 'error'
174
- });
175
- }
176
- }
177
- if (config.settings.commitPrefix && !config.settings.commitPrefix.includes('{{stage}}')) {
178
- this.errors.push({
179
- field: 'settings.commitPrefix',
180
- message: 'commitPrefix should include {{stage}} template variable',
181
- severity: 'warning'
182
- });
183
- }
184
- if (config.settings.permissionMode) {
185
- const validModes = ['default', 'acceptEdits', 'bypassPermissions', 'plan'];
186
- if (!validModes.includes(config.settings.permissionMode)) {
187
- this.errors.push({
188
- field: 'settings.permissionMode',
189
- message: `Invalid permission mode: ${config.settings.permissionMode}. Must be one of: ${validModes.join(', ')}`,
190
- severity: 'error'
191
- });
192
- }
193
- if (config.settings.permissionMode === 'bypassPermissions') {
194
- this.errors.push({
195
- field: 'settings.permissionMode',
196
- message: 'bypassPermissions mode bypasses all permission checks. Use with caution in production.',
197
- severity: 'warning'
198
- });
199
- }
200
- }
201
- if (config.settings.contextReduction) {
202
- const cr = config.settings.contextReduction;
203
- const validStrategies = ['summary-based', 'agent-based'];
204
- if (!validStrategies.includes(cr.strategy)) {
205
- this.errors.push({
206
- field: 'settings.contextReduction.strategy',
207
- message: `Invalid context reduction strategy: ${cr.strategy}. Must be one of: ${validStrategies.join(', ')}`,
208
- severity: 'error'
209
- });
210
- }
211
- if (typeof cr.maxTokens !== 'number' || cr.maxTokens <= 0) {
212
- this.errors.push({
213
- field: 'settings.contextReduction.maxTokens',
214
- message: 'maxTokens must be a positive number',
215
- severity: 'error'
216
- });
217
- }
218
- else if (cr.maxTokens < 5000) {
219
- this.errors.push({
220
- field: 'settings.contextReduction.maxTokens',
221
- message: 'maxTokens is very low (< 5000). Consider increasing to at least 10000.',
222
- severity: 'warning'
223
- });
224
- }
225
- if (cr.contextWindow !== undefined) {
226
- if (typeof cr.contextWindow !== 'number' || cr.contextWindow <= 0) {
227
- this.errors.push({
228
- field: 'settings.contextReduction.contextWindow',
229
- message: 'contextWindow must be a positive number',
230
- severity: 'error'
231
- });
232
- }
233
- }
234
- if (cr.triggerThreshold !== undefined) {
235
- if (typeof cr.triggerThreshold !== 'number' || cr.triggerThreshold <= 0) {
236
- this.errors.push({
237
- field: 'settings.contextReduction.triggerThreshold',
238
- message: 'triggerThreshold must be a positive number',
239
- severity: 'error'
240
- });
241
- }
242
- else if (cr.triggerThreshold > cr.maxTokens) {
243
- this.errors.push({
244
- field: 'settings.contextReduction.triggerThreshold',
245
- message: 'triggerThreshold should be less than maxTokens',
246
- severity: 'error'
247
- });
248
- }
249
- }
250
- }
251
- }
252
- async validateGitHubCLI() {
253
- const ghStatus = await checkGHCLI();
254
- if (!ghStatus.installed) {
255
- this.errors.push({
256
- field: 'git.pullRequest.autoCreate',
257
- message: 'GitHub CLI (gh) is not installed. Install from https://cli.github.com/ or set autoCreate to false',
258
- severity: 'error'
259
- });
260
- }
261
- else if (!ghStatus.authenticated) {
262
- this.errors.push({
263
- field: 'git.pullRequest.autoCreate',
264
- message: "GitHub CLI is not authenticated. Run 'gh auth login' or set autoCreate to false",
265
- severity: 'error'
266
- });
267
- }
268
- }
269
- validateClaudeApiKey() {
270
- const apiKey = process.env.ANTHROPIC_API_KEY || process.env.CLAUDE_API_KEY;
271
- if (!apiKey) {
272
- this.errors.push({
273
- field: 'environment',
274
- message: 'Claude API key not set. Set environment variable: export ANTHROPIC_API_KEY=sk-ant-...',
275
- severity: 'error'
276
- });
277
- }
278
- }
279
- async validateGitRepository(repoPath) {
280
- try {
281
- const git = simpleGit(repoPath);
282
- const isRepo = 'checkIsRepo';
283
- await git[isRepo]();
284
- }
285
- catch {
286
- this.errors.push({
287
- field: 'repository',
288
- message: 'Not a git repository. Initialize with: git init',
289
- severity: 'error'
290
- });
291
- }
292
- }
293
- async validateGitUserConfig(repoPath) {
294
- try {
295
- const git = simpleGit(repoPath);
296
- const name = await git.getConfig('user.name');
297
- const email = await git.getConfig('user.email');
298
- if (!name.value) {
299
- this.errors.push({
300
- field: 'git.config',
301
- message: 'Git user.name not configured. Run: git config user.name "Your Name"',
302
- severity: 'error'
303
- });
304
- }
305
- if (!email.value) {
306
- this.errors.push({
307
- field: 'git.config',
308
- message: 'Git user.email not configured. Run: git config user.email "you@example.com"',
309
- severity: 'error'
310
- });
311
- }
312
- }
313
- catch (error) {
314
- }
315
- }
316
- async validateContextReductionAgent(config, repoPath) {
317
- const agentPath = config.settings?.contextReduction?.agentPath;
318
- if (!agentPath) {
319
- this.errors.push({
320
- field: 'settings.contextReduction.agentPath',
321
- message: 'agentPath is required when strategy is "agent-based". Specify agent file or change strategy to "summary-based"',
322
- severity: 'error'
323
- });
324
- return;
325
- }
326
- const fullPath = path.isAbsolute(agentPath)
327
- ? agentPath
328
- : path.join(repoPath, agentPath);
329
- try {
330
- await fs.access(fullPath);
331
- }
332
- catch {
333
- this.errors.push({
334
- field: 'settings.contextReduction.agentPath',
335
- message: `Context reduction agent not found: ${agentPath}. Create this file or change strategy to "summary-based"`,
336
- severity: 'error'
337
- });
338
- }
339
- }
340
- validateConditionalExpressions(config) {
341
- if (!config.agents)
342
- return;
343
- const evaluator = new ConditionEvaluator();
344
- for (const agent of config.agents) {
345
- if (!agent.condition)
346
- continue;
347
- const result = evaluator.validateSyntax(agent.condition);
348
- if (!result.valid) {
349
- this.errors.push({
350
- field: `agents.${agent.name}.condition`,
351
- message: `Invalid condition syntax: ${result.error}. Fix syntax in pipeline config`,
352
- severity: 'error'
353
- });
354
- }
355
- }
356
- }
357
- validateConditionalStageReferences(config) {
358
- if (!config.agents)
359
- return;
360
- const stageNames = new Set(config.agents.map(a => a.name));
361
- for (const agent of config.agents) {
362
- if (!agent.condition)
363
- continue;
364
- const stageReferences = this.extractStageReferences(agent.condition);
365
- for (const ref of stageReferences) {
366
- if (!stageNames.has(ref)) {
367
- const availableStages = Array.from(stageNames).join(', ');
368
- this.errors.push({
369
- field: `agents.${agent.name}.condition`,
370
- message: `Condition references non-existent stage "${ref}". Available stages: [${availableStages}]`,
371
- severity: 'error'
372
- });
373
- }
374
- }
375
- }
376
- }
377
- extractStageReferences(condition) {
378
- const pattern = /stages\.([a-zA-Z0-9_-]+)/g;
379
- const matches = [];
380
- let match;
381
- while ((match = pattern.exec(condition)) !== null) {
382
- matches.push(match[1]);
383
- }
384
- return [...new Set(matches)];
385
- }
386
- validateSlackWebhook(config) {
387
- const webhookUrl = config.notifications?.channels?.slack?.webhookUrl;
388
- if (!webhookUrl) {
389
- this.errors.push({
390
- field: 'notifications.channels.slack.webhookUrl',
391
- message: 'Slack webhook URL is required when Slack notifications are enabled. Get webhook: https://api.slack.com/messaging/webhooks',
392
- severity: 'error'
393
- });
394
- return;
395
- }
396
- if (!webhookUrl.startsWith('https://hooks.slack.com/')) {
397
- this.errors.push({
398
- field: 'notifications.channels.slack.webhookUrl',
399
- message: 'Invalid Slack webhook URL. Must start with https://hooks.slack.com/. Get webhook: https://api.slack.com/messaging/webhooks',
400
- severity: 'error'
401
- });
402
- }
403
- }
404
- async validateGitWorkingTree(repoPath) {
405
- try {
406
- const git = simpleGit(repoPath);
407
- const status = await git.status();
408
- if (!status.isClean()) {
409
- this.errors.push({
410
- field: 'settings.preserveWorkingTree',
411
- message: 'Uncommitted changes detected. Pipeline may overwrite them. Commit changes first: git add . && git commit -m "..."',
412
- severity: 'warning'
413
- });
414
- }
415
- }
416
- catch (error) {
417
- }
418
- }
419
- validateRetryConfiguration(config) {
420
- if (config.agents) {
421
- for (const agent of config.agents) {
422
- if (agent.retry) {
423
- this.checkRetrySanity(`agents.${agent.name}.retry`, agent.retry);
424
- }
425
- }
426
- }
427
- }
428
- checkRetrySanity(field, retry) {
429
- if (retry.maxAttempts && retry.maxAttempts > 10) {
430
- this.errors.push({
431
- field,
432
- message: `maxAttempts (${retry.maxAttempts}) exceeds recommended limit. Consider reducing to <= 10 to avoid excessive delays`,
433
- severity: 'warning'
434
- });
435
- }
436
- if (retry.delay && retry.delay > 300) {
437
- this.errors.push({
438
- field,
439
- message: `Retry delay (${retry.delay}s) exceeds recommended maximum. Consider reducing to <= 300s (5 minutes)`,
440
- severity: 'warning'
441
- });
442
- }
443
- }
444
- async validateParallelExecutionLimits(config) {
445
- if (!config.agents || config.agents.length === 0)
446
- return;
447
- try {
448
- const planner = new DAGPlanner();
449
- const graph = planner.buildExecutionPlan(config);
450
- const maxParallel = graph.plan.maxParallelism;
451
- if (maxParallel > 10) {
452
- this.errors.push({
453
- field: 'agents',
454
- message: `Pipeline has ${maxParallel} stages running in parallel. Consider adding dependencies to limit concurrency and avoid rate limits`,
455
- severity: 'warning'
456
- });
457
- }
458
- }
459
- catch (error) {
460
- }
461
- }
462
- validateAgents(config) {
463
- if (!config.agents)
464
- return;
465
- const agentNames = new Set();
466
- for (const agent of config.agents) {
467
- if (agentNames.has(agent.name)) {
468
- this.errors.push({
469
- field: `agents.${agent.name}`,
470
- message: `Duplicate agent name: ${agent.name}`,
471
- severity: 'error'
472
- });
473
- }
474
- agentNames.add(agent.name);
475
- if (!agent.name || agent.name.trim() === '') {
476
- this.errors.push({
477
- field: 'agents[].name',
478
- message: 'Agent name is required',
479
- severity: 'error'
480
- });
481
- }
482
- if (!agent.agent || agent.agent.trim() === '') {
483
- this.errors.push({
484
- field: `agents.${agent.name}.agent`,
485
- message: 'Agent path is required',
486
- severity: 'error'
487
- });
488
- }
489
- if (agent.onFail) {
490
- const validStrategies = ['stop', 'continue', 'warn'];
491
- if (!validStrategies.includes(agent.onFail)) {
492
- this.errors.push({
493
- field: `agents.${agent.name}.onFail`,
494
- message: `Invalid onFail strategy: ${agent.onFail}. Must be one of: ${validStrategies.join(', ')}`,
495
- severity: 'error'
496
- });
497
- }
498
- }
499
- if (agent.timeout !== undefined) {
500
- if (typeof agent.timeout !== 'number' || agent.timeout <= 0) {
501
- this.errors.push({
502
- field: `agents.${agent.name}.timeout`,
503
- message: 'Timeout must be a positive number',
504
- severity: 'error'
505
- });
506
- }
507
- else if (agent.timeout > 900) {
508
- this.errors.push({
509
- field: `agents.${agent.name}.timeout`,
510
- message: 'Timeout exceeds recommended maximum of 900 seconds (15 minutes)',
511
- severity: 'warning'
512
- });
513
- }
514
- }
515
- }
5
+ return this.orchestrator.validate(config, repoPath);
516
6
  }
517
7
  static async validateAndReport(config, repoPath) {
518
8
  const validator = new PipelineValidator();
@@ -520,8 +10,8 @@ export class PipelineValidator {
520
10
  if (errors.length === 0) {
521
11
  return true;
522
12
  }
523
- const hasErrors = errors.some(e => e.severity === 'error');
524
- const hasWarnings = errors.some(e => e.severity === 'warning');
13
+ const hasErrors = errors.some((e) => e.severity === 'error');
14
+ const hasWarnings = errors.some((e) => e.severity === 'warning');
525
15
  console.log('\nšŸ“‹ Pipeline Validation Results:\n');
526
16
  for (const error of errors) {
527
17
  const icon = error.severity === 'error' ? 'āŒ' : 'āš ļø';
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-validator.js","sourceRoot":"","sources":["../../src/validators/pipeline-validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline-validator.js","sourceRoot":"","sources":["../../src/validators/pipeline-validator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAStE,MAAM,OAAO,iBAAiB;IACpB,YAAY,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAQpD,KAAK,CAAC,QAAQ,CACZ,MAAsB,EACtB,QAAgB;QAEhB,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC;IAQD,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAsB,EAAE,QAAgB;QACrE,MAAM,SAAS,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAE1D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;QAEjE,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QAEnD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;YAC5E,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import { Validator, ValidationContext } from './types.js';
2
+ export declare class RetryValidator implements Validator {
3
+ readonly name = "retry";
4
+ readonly priority: 2;
5
+ shouldRun(context: ValidationContext): boolean;
6
+ validate(context: ValidationContext): Promise<void>;
7
+ private checkRetrySanity;
8
+ }
9
+ //# sourceMappingURL=retry-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry-validator.d.ts","sourceRoot":"","sources":["../../src/validators/retry-validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAK1D,qBAAa,cAAe,YAAW,SAAS;IAC9C,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,QAAQ,EAAG,CAAC,CAAU;IAE/B,SAAS,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO;IAIxC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzD,OAAO,CAAC,gBAAgB;CAqBzB"}
@@ -0,0 +1,34 @@
1
+ export class RetryValidator {
2
+ name = 'retry';
3
+ priority = 2;
4
+ shouldRun(context) {
5
+ return context.config.agents?.some((a) => a.retry) ?? false;
6
+ }
7
+ async validate(context) {
8
+ const { config, errors } = context;
9
+ if (!config.agents)
10
+ return;
11
+ for (const agent of config.agents) {
12
+ if (agent.retry) {
13
+ this.checkRetrySanity(errors, `agents.${agent.name}.retry`, agent.retry);
14
+ }
15
+ }
16
+ }
17
+ checkRetrySanity(errors, field, retry) {
18
+ if (retry.maxAttempts && retry.maxAttempts > 10) {
19
+ errors.push({
20
+ field,
21
+ message: `maxAttempts (${retry.maxAttempts}) exceeds recommended limit. Consider reducing to <= 10 to avoid excessive delays`,
22
+ severity: 'warning',
23
+ });
24
+ }
25
+ if (retry.delay && retry.delay > 300) {
26
+ errors.push({
27
+ field,
28
+ message: `Retry delay (${retry.delay}s) exceeds recommended maximum. Consider reducing to <= 300s (5 minutes)`,
29
+ severity: 'warning',
30
+ });
31
+ }
32
+ }
33
+ }
34
+ //# sourceMappingURL=retry-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry-validator.js","sourceRoot":"","sources":["../../src/validators/retry-validator.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,OAAO,CAAC;IACf,QAAQ,GAAG,CAAU,CAAC;IAE/B,SAAS,CAAC,OAA0B;QAClC,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAA0B;QACvC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO;QAE3B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,KAAK,CAAC,IAAI,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;IACH,CAAC;IAEO,gBAAgB,CACtB,MAAmC,EACnC,KAAa,EACb,KAA+C;QAE/C,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,GAAG,EAAE,EAAE,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK;gBACL,OAAO,EAAE,gBAAgB,KAAK,CAAC,WAAW,mFAAmF;gBAC7H,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK;gBACL,OAAO,EAAE,gBAAgB,KAAK,CAAC,KAAK,0EAA0E;gBAC9G,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import { Validator, ValidationContext } from './types.js';
2
+ export declare class RuntimeValidator implements Validator {
3
+ readonly name = "runtime";
4
+ readonly priority: 0;
5
+ shouldRun(context: ValidationContext): boolean;
6
+ validate(context: ValidationContext): Promise<void>;
7
+ private validateRuntimeConfig;
8
+ }
9
+ //# sourceMappingURL=runtime-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-validator.d.ts","sourceRoot":"","sources":["../../src/validators/runtime-validator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAmB,MAAM,YAAY,CAAC;AAK3E,qBAAa,gBAAiB,YAAW,SAAS;IAChD,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,QAAQ,EAAG,CAAC,CAAU;IAE/B,SAAS,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO;IAIxC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;YA4B3C,qBAAqB;CA+EpC"}